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值。重新启动应用程序。再次阅读问题,这也不是问题所在。