我目前在根应用程序的配置/语言环境中有以下 4 个文件:
-en.yml
-de.yml
-simple_form.en.yml
-simple_form.de.yml
在我的 application.rb 中,它驻留在用于测试应用程序 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
我现在希望向我的语言环境文件夹的文件结构介绍结构,但是当我添加其他文件夹并更改 application.rb 中的加载路径时,我收到翻译未找到错误。这是我的尝试:
尝试在我的根应用程序的配置/语言环境中包含结构:
-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
要测试主机应用程序,您需要将i18n.load_path更改为主应用程序的配置文件夹,而不是用于测试目的的虚拟规范。代码如下:
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
config.i18n.default_locale = :en
我有一个类似的问题,我通过将这一行添加到我的 application.rb 配置中来解决它:
# load the subfolders in the locales
config.i18n.load_path += Dir["#{Rails.root.to_s}/config/locales/**/*.{rb,yml}"]
以下选项都对我有用
config.i18n.load_path += Dir["#{Rails.root.to_s}/config/locales/**/*.yml"]
config.i18n.load_path += Dir["#{Rails.root.to_s}/config/locales/**/*.{rb,yml}"]
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**' '*.{rb,yml}').to_s]
重新启动网络服务器后当然...
想提一下。上述所有解决方案还再次将文件包含在目录中config/locales
(第一次 time 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"]
在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