Jaa*_*ans 5 arrays interpolation ruby-on-rails rails-i18n
我在区域设置文件中使用数组,以便能够以区域设置特定的各种输出方法(ActionMailer模板,Prawn文档,HAML模板)生成文本块.它工作得很好,但有时我想将变量传递给这些I18n调用.但是,这不起作用.
假设我的语言环境文件如下所示:
en:
my_array:
- "Line 1"
- "Line 2"
- "Line 3 has a %{variable}"
- "Line 4"
Run Code Online (Sandbox Code Playgroud)
我希望输出I18n.t('my_array', :variable => 'variable named variable')如下:
["Line 1", "Line 2", "Line 3 has a variable named variable", "Line 4"]
Run Code Online (Sandbox Code Playgroud)
但是,输出是:
["Line 1", "Line 2", "Line 3 has a %{variable}", "Line 4"]
Run Code Online (Sandbox Code Playgroud)
检索数组后,我是否必须自己进行插值?或者有更好的方法吗?
我认为在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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1472 次 |
| 最近记录: |