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 键?
您可以在 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)
| 归档时间: |
|
| 查看次数: |
2109 次 |
| 最近记录: |