如何为I18n添加密钥进行测试?

时间:2015-08-27 16:00:24

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

我正在处理Rails应用中的某个功能,该功能取决于特定于语言环境的信息。在测试中,我想表明某些行为取决于语言环境包含的内容。

如何在测试中动态添加或编辑I18n.t使用的翻译?

1 个答案:

答案 0 :(得分:4)

I18n.backend.store_translations

# Will add a key or overwrite the existing value
I18n.backend.store_translations("en", {cat: "cat"})
I18n.backend.store_translations("es", {cat: "gato"})

I18n.t(:cat, locale: "en") # => "cat"
I18n.t(:cat, locale: "es") # => "gato"

请注意,您无法以这种方式为任意区域设置添加密钥;你会得到I18n::InvalidLocale。要确定可用的区域设置,您可以使用:

existing_locales = I18n.config.available_locales
new_locales      = existing_locales + Set.new(["es", :es])
I18n.config.available_locales = new_locales

最后,请注意,如果您进行类似测试的全局更改,您可能希望在测试后将其更改为清理,以便其他测试不会受到影响。