I18narrays中的插值

我在区域设置文件中使用数组,以便能够以区域设置特定的各种输出方法(ActionMailer模板,Prawn文档,HAML模板)生成文本块。 它工作得很好,但有时我想将变量传递给这些I18n调用。 但是,这不起作用。

假设我的语言环境文件如下所示:

en: my_array: - "Line 1" - "Line 2" - "Line 3 has a %{variable}" - "Line 4" 

我希望I18n.t('my_array', :variable => 'variable named variable')如下:

 ["Line 1", "Line 2", "Line 3 has a variable named variable", "Line 4"] 

但是,输出是:

 ["Line 1", "Line 2", "Line 3 has a %{variable}", "Line 4"] 

检索数组后,我是否必须自己进行插值? 或者有更好的方法吗?

我认为在i18n gem中本身不支持这样的东西,但它可以使用一些元编程魔法。

在初始化程序(例如, config/initializers/i18n.rb )中添加以下内容

 I18n.backend.instance_eval do def interpolate(locale, string, values = {}) if string.is_a?(::Array) && !values.empty? string.map { |el| super(locale, el, values) } else super end end end