2015-11-06 95 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