Ruby on rails i18n动态插值参数

Ruby on rails i18n动态插值参数,ruby-on-rails,ruby,rails-i18n,Ruby On Rails,Ruby,Rails I18n,假设我有一个由多个部分组成的字段,这些部分用分号(;)分隔。例如,如下所示: 'range_numeric; 10; 100' 'length_numeric; 5' en: length_numeric: "%{1} digits" range_numeric: "%{1} - %{2} digits" t(:range_numeric, 10, 100) # returns "%{1} - %{2} digits" 第一部分将是翻译的关键,任何后续部分将是插入文本的插值值。基本上

假设我有一个由多个部分组成的字段,这些部分用分号(
)分隔。例如,如下所示:

'range_numeric; 10; 100'
'length_numeric; 5'
en:
 length_numeric: "%{1} digits"
 range_numeric: "%{1} - %{2} digits"
t(:range_numeric, 10, 100) # returns "%{1} - %{2} digits" 
第一部分将是翻译的关键,任何后续部分将是插入文本的插值值。基本上,它是作为命名参数传递的,但我不想为每个插值值定义键,我尝试使用
I18n
,如下所示:

'range_numeric; 10; 100'
'length_numeric; 5'
en:
 length_numeric: "%{1} digits"
 range_numeric: "%{1} - %{2} digits"
t(:range_numeric, 10, 100) # returns "%{1} - %{2} digits" 
我试图传递插值值,如下所示:

'range_numeric; 10; 100'
'length_numeric; 5'
en:
 length_numeric: "%{1} digits"
 range_numeric: "%{1} - %{2} digits"
t(:range_numeric, 10, 100) # returns "%{1} - %{2} digits" 

那么,这样做可能吗?有什么建议吗

您可以根据数组项的位置将数组转换为哈希:

values = [10, 100]
mapped_values = Hash[(0...values.size).map(&:to_s).map(&:to_sym).zip(values)]
t(:range_numeric, mapped_values)

(插值键将以0
%{0}
开头)

您可以根据数组项的位置将数组转换为哈希:

values = [10, 100]
mapped_values = Hash[(0...values.size).map(&:to_s).map(&:to_sym).zip(values)]
t(:range_numeric, mapped_values)

(插值键将以0
%{0}
开始)

我不知道如何与rails接口,但是用数组插值字符串很容易。使用
%s
进行简单的字符串替换。通过使用适当的格式语法,您甚至可以进行更精细的控制

"%s - %s digits" % [10, 100]
# => "10 - 100 digits"

我不知道如何与rails接口,但是用数组插入字符串很容易。使用
%s
进行简单的字符串替换。通过使用适当的格式语法,您甚至可以进行更精细的控制

"%s - %s digits" % [10, 100]
# => "10 - 100 digits"

为了避免索引从0开始,您可以编写
(1..values.size)
来代替
(0..values.size)
,我认为这一点也更清楚。这样做的想法是在不使用插值键的情况下传递参数。但是谢谢你,很好的建议为了避免索引从0开始,你可以编写
(1..values.size)
来代替
(0…values.size)
,我认为这也更清楚。这样做的想法是不使用插值键传递参数。但是谢谢你,很好的建议如果你已经有了一个序列
:range\u numeric,10100
(或者和数组
[:range\u numeric,10100]
),那么这意味着你用分号提及你的格式与问题无关。问题应该显示相应的数组。请只写与问题相关的内容。如果您已经有一个序列
:range\u numeric,10100
(或和数组
[:range\u numeric,10100]
),那么这意味着您用分号提及您的格式与问题无关。问题应该显示相应的数组。请只写与问题相关的内容。