每个环境不同的翻译

时间:2015-11-06 02:15:47

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

我希望某些翻译具有不同的值,具体取决于环境。

Rails.env.test? && I18n.t('foo') # => 'A value'
Rails.env.development? && I18n.t('foo') # => 'A different value'

为了实现这一目标,我可以设想一些方法:

  • 能够在en.yml中嵌入ERB
  • 能够创建每个环境的区域设置文件,例如en.test.yml
  • 能够直接设置条目:I18n.set('foo', 'bar') if Rails.env.test?

但是,我无法找到任何可以使用的解决方案。

有吗?

1 个答案:

答案 0 :(得分:1)

我认为你需要这样的东西:

en.production.yml

en:
  production:
    foo: "Foo"
    bar: "Bar"

en.development.yml

en:
  development:
    foo: "foo"
    bar: "bar"

en.test.yml

en:
  test:
    foo: "-foo-"
    bar: "-bar-"

并使用视图和控制器:

I18n.t("#{Rails.env}.foo")
I18n.t("#{Rails.env}.bar")

<小时/> 更新:

如果您只需要将变量替换为平移,请使用插值:

en.yml

en:
  foo: "Foo %{variable}"
  bar: "%{var} Bar"

并使用:

I18n.t('foo', :variable => 'Bar')
I18n.t('bar', :var => 'Foo')