Rails 5: Как мне сослаться на переводы I18n из другого файла конфигурации yaml? - PullRequest
2 голосов
/ 26 апреля 2019

У меня есть файл конфигурации:

# 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 из моего файла конфигурации?

Ответы [ 2 ]

3 голосов
/ 26 апреля 2019

Вместо его значения вы можете добавить ключ для существующего перевода в вашем файле 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"
0 голосов
/ 26 апреля 2019

Попробуйте заменить в application.rb значение по умолчанию config.i18n.load_path на это:

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

У меня работает.

...