2013-09-25 46 views
0

假設我有一個由分號分隔的多個部分組成的字段女巫(;)。例如,這將如下所示:i18n動態插值參數

'range_numeric; 10; 100' 
'length_numeric; 5' 

第一部分將是關鍵的翻譯和任何後續部分將插值填充到文本。基本上,它是作爲一個命名參數傳遞,但我不想定義鍵每個插值結果,我嘗試使用I18n如下:

en: 
length_numeric: "%{1} digits" 
range_numeric: "%{1} - %{2} digits" 

我試圖通過類似以下插值:

t(:range_numeric, 10, 100) # returns "%{1} - %{2} digits" 

那麼,這是可能做到這一點嗎?有什麼建議麼 ?

+1

如果已經有一個序列':range_numeric,10,100'(或與陣列'[:range_numeric,10,100]'),那麼這意味着你提有關使用分號您的格式是無關的題。問題應該顯示相應的數組。請只寫出與問題相關的內容。 – sawa

回答

2

(插值鍵將與0 %{0}開始),我不知道如何與接口導軌,但用數組插入字符串很容易。使用%s進行簡單的字符串替換。您甚至可以通過使用適當的格式語法進行更好的控制。

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

有趣的建議,工作正常。謝謝 –

3

您可以通過該數組項的位置數組轉換成散列:

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

+1

爲了避免索引從0開始,你可以寫'(1..values.size)'來代替'(0 ... values.size)',這也更加清楚,IMO。 – toro2k

+0

這樣做的想法是沒有內插鍵的傳遞參數。但是,謝謝你,好建議 –