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

use*_*603 3 ruby ruby-on-rails rails-i18n ruby-on-rails-5

我有一个配置文件:

# config/meta.yml
base_meta:
  title: 'Top 10 Cats'
Run Code Online (Sandbox Code Playgroud)

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

# config/meta.yml
base_meta:
  title: 'Top 10 Cats'
Run Code Online (Sandbox Code Playgroud)

我可以像这样访问标题:

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

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

如何引用现有的翻译?

# config/locales/en.yml
en:
  title: 'Top 10 Cats'
Run Code Online (Sandbox Code Playgroud)

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

# config/meta.yml
base_meta:
  title: t(:title)
Run Code Online (Sandbox Code Playgroud)

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

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

Ste*_*fan 5

您可以在 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'
Run Code Online (Sandbox Code Playgroud)

所以它只是返回该键:

META['base_meta']['title'] #=> "cats.title"
Run Code Online (Sandbox Code Playgroud)

然后可以将其传递给I18n.t

I18n.locale = :en

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

I18n.locale = :de

t(META['base_meta']['title']) #=> "Top 10 Katzen"
Run Code Online (Sandbox Code Playgroud)