在rails app中组织Locale文件

时间:2012-05-24 10:41:24

标签: ruby-on-rails-3 internationalization locale i18n-gem load-path

我目前在我的根应用程序的 config / locales 中有以下4个文件:

-en.yml
-de.yml
-simple_form.en.yml
-simple_form.de.yml

在我的 application.rb 中,它位于 spec / dummy 文件夹中,用于测试应用程序gem我有以下代码行,似乎正在检索翻译为预期:

# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
config.i18n.default_locale = :de

我现在想介绍一下我的locales文件夹的文件结构,但是当我添加其他文件夹并更改 application.rb 中的加载路径时,我发现翻译未找到错误。这是我的尝试:

尝试在我的根应用程序的 config / locales 中包含结构:

-views
  -en.yml
  -de.yml
-models
  -en.yml
  -de.yml
-forms
  -simple_form.en.yml
  -simple_form.de.yml

我在 application.rb 中的加载路径更改为:

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]

根据以下导轨指南: http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-domain-name

5 个答案:

答案 0 :(得分:12)

要测试主机应用程序,您需要将i18n.load_path更改为主应用程序的config文件夹,而不是用于测试目的的虚拟规范。代码如下:

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
config.i18n.default_locale = :en

答案 1 :(得分:8)

我有类似的问题,我通过将此行添加到我的application.rb config:

来解决它
# load the subfolders in the locales
config.i18n.load_path += Dir["#{Rails.root.to_s}/config/locales/**/*.{rb,yml}"]

答案 2 :(得分:2)

以下选项对我有用

Microsoft.Build.Framework

重新启动后,当然是网络服务器......

答案 3 :(得分:0)

config/application.rb

module PointsProject
  class Application < Rails::Application
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
  end
end

来自Rails的国际化指南:http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-domain-name

答案 4 :(得分:0)

想提。上面的所有解决方案还再次在config/locales目录中包含文件(第一次使用rails会自动将其添加)。如果用相同的键重写值,这不是问题。但是,如果您只想在config/locales中包含子目录文件,则最好使用 config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*', '**', '*.{rb,yml}')]

示例。 我的结构:

config/
  locales/
    en.yml
    breadcrumbs/
      breadcrumbs.en.yml

如果您执行config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')],则会多次添加en.yml:

irb(main):001:0> Rails.application.config.i18n.load_path
=> ["/home/air/projects/qq2/config/locales/en.yml"]
irb(main):002:0> Rails.application.config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
irb(main):003:0> Rails.application.config.i18n.load_path
=> ["/home/air/projects/qq2/config/locales/en.yml", "/home/air/projects/qq2/config/locales/en.yml", "/home/air/projects/qq2/config/locales/breadcrumbs/breadcrumbs.en.yml"]

Dir[Rails.root.join('config', 'locales', '*', '**', '*.{rb,yml}')]

irb(main):001:0> Rails.application.config.i18n.load_path
=> ["/home/air/projects/qq2/config/locales/en.yml"]
irb(main):002:0> Rails.application.config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '*', '**', '*.{rb,yml}')]
irb(main):003:0> Rails.application.config.i18n.load_path
=> ["/home/air/projects/qq2/config/locales/en.yml", "/home/air/projects/qq2/config/locales/breadcrumbs/breadcrumbs.en.yml"]