【发布时间】:2019-04-26 09:02:53
【问题描述】:
我有一个配置文件:
# 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 键?
【问题讨论】:
-
也许您可以使用alias node 来引用先前定义的锚点。或者通过erb手动解析文件,见YAML with erb is not parsing。
-
顺便说一句,假设您有多个语言环境,例如
locales/en.yml和locales/de.yml。您是否希望META['base_meta']['title']返回当前所选语言环境的值或静态值,例如en一个? -
它应该返回特定于当前语言环境的值。
-
在这种情况下,erb 不是一个选项——它会插入应用程序默认语言环境的值。 YAML 别名也不是,因为它不支持语言环境。在你的 YAML 文件中插入 I18n 键,即
title: title,并在运行时通过t(META['base_meta']['title'])检索它的值呢? -
是的,这听起来是一个更好的方法。
标签: ruby-on-rails ruby ruby-on-rails-5 rails-i18n