Rails 5:如何从另一个Yaml配置文件引用I18n转换?

时间:2019-04-26 09:02:54

标签: ruby-on-rails ruby ruby-on-rails-5 rails-i18n

我有一个配置文件:

real    0m51.037s
user    0m5.297s
sys     0m8.094s

它具有一个对应的初始化程序:

# 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" yaml文件来处理。

如何引用现有翻译?

locales/

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

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

将文件重命名为# config/meta.yml base_meta: title: t(:title) 也不起作用。

是否可以从我的配置文件中引用I18n密钥?

2 个答案:

答案 0 :(得分:3)

您可以在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'

因此它只返回该键:

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"

答案 1 :(得分:-1)

尝试用以下命令替换 config.i18n.load_path 参数的application.rb默认值:

$pod

对我有用。