标签: rails-i18n

改变devise_invitable邮件主题

默认情况下,邀请邮件的主题是

  mailer:
      invitation_instructions:
        subject: 'Invitation instructions'
Run Code Online (Sandbox Code Playgroud)

我想改成它

subject: '%{invited_by} has invited you!'
Run Code Online (Sandbox Code Playgroud)

但是这需要让i8n的translate方法可以访问invite_by变量.

如何在不更改默认行为的情况下访问/声明此变量?

ruby-on-rails actionmailer devise rails-i18n devise-invitable

8
推荐指数
1
解决办法
2182
查看次数

Rails不允许更改区域设置

我正在尝试更改我的rails(4.1.4)应用程序正在使用的语言环境,但每次我尝试使用如下命令在控制台中更改它

I18n.locale = :es
I18n.default_locale = :de
Run Code Online (Sandbox Code Playgroud)

出现I18n :: InvalidLocale错误.对于我测试的每个区域设置都是这种情况,包括区域性的,例如:en-US.即使我为该语言环境设置了*.yml文件,也是如此.唯一有效的是:en,这是我的默认值.

我觉得这应该是非常基本的东西,因为我找到的所有资源似乎都跳过这个作为给定,但它不适合我,我无法找出在哪里寻找问题源.

localization ruby-on-rails internationalization rails-console rails-i18n

8
推荐指数
1
解决办法
5050
查看次数

使用i18n-active_record进行I18n转换:相同键的相同形式

我正在使用i18n-active_record 0.1.0在Rails 4中开发一个应用程序来保存我的翻译而不是.yml文件.它工作正常.

然而,我正在努力的一件事是,每个翻译记录是每个语言环境的一个记录,即

#1. { locale: "en", key: "hello", value: "hello")
#2. { locale: "se", key: "hello", value: "hej")
Run Code Online (Sandbox Code Playgroud)

这使得更新它们是一项繁琐的工作.我希望将它作为一个,即:

{ key: "hello", value_en: "hello", value_se: "hej" }
Run Code Online (Sandbox Code Playgroud)

或类似的,以便以一种形式更新一个密钥的所有实例.我似乎找不到任何关于那个的东西,这让我很困惑.

有没有办法轻松做到这一点?任何类型的黑客也都可以.

rubygems ruby-on-rails rails-i18n

8
推荐指数
1
解决办法
204
查看次数

主目录中的Rails命令导致"i18n gem not available"错误

我在我的Ubuntu主目录中,试图创建一个新的rails应用程序rails new,但我收到此错误:

i18n宝石不可用.请将其添加到您的Gemfile并运行bundle install

我运行的任何rails命令都会出错.我真的很困惑,因为我不在应用程序中.我就在我的主目录中.没有gemfile.我尝试将'i18n'安装到我的主目录中gem install 'i18n',并且它有效,但我仍然遇到了这个错误.

我之前在我的主目录中从未遇到过rails命令的任何问题.当我cd进入我的个人应用程序时,所有与rails相关的工作正常.这是怎么回事?

此外,我现在在所有现有的rails应用程序中遇到同样的错误.铁轨突然变得依赖于那颗宝石了吗?或者可以删除我的主目录中的gem以某种方式使其在我的应用程序中不可用?


UPDATE

我尝试gem cleanup rails并重新安装,但没有任何改变.结果如下:

$ gem cleanup rails
  Cleaning up installed gems...
  Attempting to uninstall rails-4.0.10
  Successfully uninstalled rails-4.0.10
  Attempting to uninstall rails-4.2.1
  Successfully uninstalled rails-4.2.1
  Attempting to uninstall rails-4.2.4
  Successfully uninstalled rails-4.2.4
  Attempting to uninstall rails-5.0.1
  Successfully uninstalled rails-5.0.1
  Attempting to uninstall rails-5.0.2
  Successfully uninstalled rails-5.0.2
  Attempting to uninstall rails-5.0.3
  Successfully uninstalled rails-5.0.3
  Attempting to uninstall rails-5.0.4
  Successfully uninstalled rails-5.0.4
  Clean …
Run Code Online (Sandbox Code Playgroud)

ruby ubuntu rubygems ruby-on-rails rails-i18n

8
推荐指数
1
解决办法
2349
查看次数

i18n路由到已安装的引擎 - 忽略区域设置

我有一个应用程序(my_test_app),内置了i18n支持.目前,有两种语言文件可用,FR&EN,如果我在它们之间来回切换,一切正常,因为我希望看到非引擎功能,如用户索引/显示/编辑/删除(ISED)选项.

在my_test_app中,我安装了一个Rails引擎(my_engine),它有一个控制器和模型集(engine_job).所以,一个可行的URL应该是

http://0.0.0.0:3000/fr/my_engine/engine_job
Run Code Online (Sandbox Code Playgroud)

然而,无论我选择何种语言,它总是出现在EN中.检查参数显示:

--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
locale: fr
action: index
controller: my_engine/engine_job
Run Code Online (Sandbox Code Playgroud)

然而,所选择的翻译是EN.

my_test_app route.rb:

MyTestApp::Application.routes.draw do

  scope "(:locale)", locale: /#{I18n.available_locales.join("|")}/ do
    mount MyEngine::Engine, at: "/my_engine"
  end # scope locale

  match '*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: lambda { |req| !req.path.starts_with? "/#{I18n.default_locale}/" and !req.path == "/#{I18n.default_locale}/"}
  match '', to: redirect("/#{I18n.default_locale}/")
end
Run Code Online (Sandbox Code Playgroud)

my_engine route.rb:

MyEngine::Engine.routes.draw do
  resources :my_jobs
end
Run Code Online (Sandbox Code Playgroud)

耙路线:

my_engine        (/:locale)/my_engine           MyEngine::Engine {:locale=>/en|fr/}
                             /*path(.:format)                    :controller#:action
                             /                                   :controller#:action
                users GET    (/:locale)/users(.:format)          users#index {:locale=>/en|fr/}
                      POST   (/:locale)/users(.:format)          users#create {:locale=>/en|fr/}
             new_user GET    (/:locale)/users/new(.:format)      users#new {:locale=>/en|fr/}
            edit_user …
Run Code Online (Sandbox Code Playgroud)

rails-routing rails-engines ruby-on-rails-3.2 rails-i18n

7
推荐指数
1
解决办法
1669
查看次数

如何在Rails 4中翻译占位符文本?

我希望Rails像表单标签一样自动翻译占位符文本.我怎样才能做到这一点?

表单标签会自动翻译,如下所示:

= f.text_field :first_name
Run Code Online (Sandbox Code Playgroud)

此帮助程序使用区域设置文件:

en:
  active_model:
    models:
      user:
        attributes:
          first_name: Your name
Run Code Online (Sandbox Code Playgroud)

哪个输出这个HTML

<label for="first_name">Your name</label>
Run Code Online (Sandbox Code Playgroud)

如何才能使占位符翻译?我是否必须输入如下所示的完整范围:

= f.text_field :first_name,
    placeholder: t('.first_name', scope: 'active_model.models.user.attributes.first_name')
Run Code Online (Sandbox Code Playgroud)

有更简单的方法吗?

ruby-on-rails internationalization rails-i18n

7
推荐指数
1
解决办法
3844
查看次数

Rails I18n-js:缺少翻译

我正在使用I18n-js gem来定位js文件.我已经在gem自述文件的帮助下安装了它并且它第一次工作.

问题是当我向我的translations.js文件中添加新的翻译时rake i18n:js:export,我的模板中没有显示rake任务翻译 - 仅限missing translation(开发和生产具有相同的情况),尽管translations.js内容包含所有新翻译.

的application.js

//= require i18n
//= require i18n/translations
Run Code Online (Sandbox Code Playgroud)

我错过了什么?如果您需要更多信息,请对其进行评论.谢谢

javascript ruby-on-rails rails-i18n ruby-on-rails-4

7
推荐指数
2
解决办法
2047
查看次数

区域设置不能切换到Rails 4

我的Rails应用程序是在rails 4.0.2上,我在使用locale变量和params[:locale]从官方rails 指南之后的url方案切换翻译时遇到问题.我有一个单页的网站我的网站.

我的国际化路线:

scope "(:locale)", locale: /en|de/ do
  #my routes here
end
Run Code Online (Sandbox Code Playgroud)

我的应用控制器

before_filter :set_locale
  def set_locale
     I18n.locale = params[:locale] || I18n.default_locale
     #Rails.application.routes.default_url_options[:locale]= I18n.locale
  end

  # app/controllers/application_controller.rb
  def default_url_options(options = {})
     { locale: I18n.locale }.merge options
  end
Run Code Online (Sandbox Code Playgroud)

用于更改视图中区域设置变量的链接:

<%= link_to_unless I18n.locale == :en, "English", locale: :en %>
|
<%= link_to_unless I18n.locale == :de, "Deutsch", locale: :de %>
Run Code Online (Sandbox Code Playgroud)

会发生什么:locale变量设置正确但翻译没有切换.如果我删除其中一个翻译文件(目前用于英语和德语),语言将切换到剩余的翻译文件.当我放回另一个翻译文件并尝试通过更改语言环境变量切换到它时,它永远不会切换到另一种语言.

为什么我的代码没有改变翻译?

ruby ruby-on-rails rails-i18n ruby-on-rails-4

7
推荐指数
1
解决办法
1088
查看次数

如何在I18n.translate中传递参数

I18n.translate可以翻译error.messages,如下所示:

I18n.translate('error.messages.taken')
-> has already been taken
Run Code Online (Sandbox Code Playgroud)

但是有一些错误消息包含如下参数:

I18n.translate('error.messages.greater_than_or_equal_to')
-> must be greater than or equal to %{count}"
Run Code Online (Sandbox Code Playgroud)

是否可以在I18n.translate中传递参数'count'?

ruby-on-rails rails-i18n

7
推荐指数
3
解决办法
5230
查看次数

Rails 5:你能用两个不同的计数将字符串中的两个单词复数吗?

我正在为列出产品评论摘要的商店构建视图。我正在按分数对评论进行分组,我希望在每组顶部有一个字符串,形式为“10 条 5 星评论”。我知道,如果我只想将“评论”复数化,我可以这样做en.rb

en: {
  reviews_header: {
    one: "1 review",
    other: "%{count} reviews"
  }
}
Run Code Online (Sandbox Code Playgroud)

是否有一种reviews_header哈希格式可以让我指定“评论”和“明星”的计数,以便在必要时将它们都复数化?在伪代码中,我想象的是:

en: {
    reviews_header: {
        counts: [ :review_count, :star_count ],
        review_count: {
            one: {
                star_count: {
                    one: "1 review with 1 star",
                    other: "1 review with %{star_count} stars"
                }
            },
            other: {
                star_count: {
                    one: "%{review_count} reviews with 1 star",
                    other: "%{review_count} reviews with %{star_count} stars"
                }
            }        
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我会用t(:reviews_header, review_count: 10, star_count: 5).

我现在正在做的是将字符串更改为“10 条 …

ruby-on-rails internationalization rails-i18n

7
推荐指数
1
解决办法
546
查看次数