I18n数组中的插值

时间:2014-02-05 10:40:16

标签: ruby-on-rails arrays interpolation rails-i18n

我在区域设置文件中使用数组,以便能够以特定于语言环境的各种输出方法(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"]

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

1 个答案:

答案 0 :(得分:5)

我认为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