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

Ruby on rails Rails 5:如何从另一个yaml配置文件引用I18n翻译?,ruby-on-rails,ruby,ruby-on-rails-5,rails-i18n,Ruby On Rails,Ruby,Ruby On Rails 5,Rails I18n,我有一个配置文件: # config/meta.yml base_meta: title: 'Top 10 Cats' 它具有相应的初始值设定项: #config/initializers/meta.rb META=YAML.load_文件(“#{Rails.root.to_s}/config/META.yml”) 我可以这样访问标题: META['base_-META']['title'].=>“十大猫” 然而,我想国际化我的元数据。我认为这应该由现有的locales/yaml文件来

我有一个配置文件:

# config/meta.yml
base_meta:
  title: 'Top 10 Cats'
它具有相应的初始值设定项:

#config/initializers/meta.rb
META=YAML.load_文件(“#{Rails.root.to_s}/config/META.yml”)
我可以这样访问标题:

META['base_-META']['title'].=>“十大猫”
然而,我想国际化我的元数据。我认为这应该由现有的
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\u path参数的默认值:

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

它适用于我。

您可以在YAML文件中添加现有翻译的密钥,而不是它的值:

# 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'
所以它只返回该键:

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"

也许您可以使用引用先前定义的锚。或者通过erb手动解析文件,请参见.BTW,假设您有多个区域设置,例如
locales/en.yml
locales/de.yml
。您希望
META['base\u META']['title']
返回当前所选区域设置的值还是静态值,例如
en
one?它应该返回特定于当前区域设置的值。在这种情况下,erb不是选项–它将插入应用程序默认区域设置的值。也不是YAML别名,因为它不支持区域设置。在YAML文件中插入I18n密钥,即
title:title
,并在运行时通过
t(META['base\u META']['title'])
检索其值,怎么样?是的,这听起来是一种更好的方法。问题不是加载文件,而是引用文件中的I18n值。重新启动应用程序。再次阅读问题,这也不是问题所在。