2015-11-06 74 views
0

我希望某些翻译根据环境具有不同的值。每个环境下的不同翻译

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

完成这个我可以想像几个方法:

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

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

有没有?

回答

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') 
+0

这不是一个很好的解决方案 - 它不允许用per-env值覆盖任意键。 – vemv

+0

然后看[pluralization rules](http://guides.rubyonrails.org/i18n.html#pluralization) - 可能是Ruby on Rails允许使用另一个翻译规则,不仅适用于复数形式? –

+1

感谢您指出正确的方向。 'I18n.backend.store_translations'允许覆盖条目,如果需要的话,以env相关的方式。添加到你的答案,我会接受它:) – vemv