18

我的根应用程序的配置/语言环境中目前有以下 4 个文件:

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

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

# 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中的加载路径时,我得到了未找到翻译的错误。这是我的尝试:

尝试在我的根应用程序的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

4

5 回答 5

14

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

config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
config.i18n.default_locale = :en
于 2012-05-24T14:26:58.180 回答
8

我有一个类似的问题,我通过将此行添加到我的 application.rb 配置来解决它:

# load the subfolders in the locales
config.i18n.load_path += Dir["#{Rails.root.to_s}/config/locales/**/*.{rb,yml}"]
于 2012-09-12T08:51:13.707 回答
3

以下选项都对我有用

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]

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

于 2016-04-01T18:05:18.257 回答
1

想提一下。上述所有解决方案还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"]
于 2020-06-10T08:43:24.530 回答
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

于 2017-07-09T15:24:34.483 回答