Rails 5:如何从另一个 yaml 配置文件引用 I18n 翻译?

Rails 5: How do I reference I18n translations from another yaml config file?

我有一个配置文件:

# config/meta.yml
base_meta:
  title: 'Top 10 Cats'

它有一个对应的初始化器:

# config/initializers/meta.rb
META = YAML.load_file("#{Rails.root.to_s}/config/meta.yml")

我可以这样访问标题:

META['base_meta']['title'] #=> "Top 10 Cats"

但是,我想国际化我的元数据。我相信这应该由现有的 locales/ yaml 文件处理。

如何引用现有翻译?

# config/locales/en.yml
en:
  title: 'Top 10 Cats'

我尝试过使用 erb,但它不起作用:

# config/meta.yml
base_meta:
  title: t(:title)

将文件重命名为 config/meta.yml.erb 也没有效果。

有没有办法从我的配置文件中引用 I18n 密钥?

尝试将 application.rb config.i18n.load_path 参数的默认值替换为:

config.i18n.load_path += Dir[Rails.root.join('config/locales/**/*.yml').to_s]

对我有用。

您可以为 YAML 文件中的现有翻译添加 key 而不是它的值:

# config/locales/en.yml
en:
  cats:
    title: 'Top 10 Cats'

# config/locales/de.yml
de:
  cats:
    title: 'Top 10 Katzen'

# config/meta.yml
base_meta:
  title: 'cats.title'

所以它只是 returns 那个键:

META['base_meta']['title'] #=> "cats.title"

然后可以传递给 I18n.t:

I18n.locale = :en

t(META['base_meta']['title']) #=> "Top 10 Cats"

I18n.locale = :de

t(META['base_meta']['title']) #=> "Top 10 Katzen"