2012-04-20 54 views
0

Rails的報價傳遞變量的功能翻譯:Rails的翻譯變量在JavaScript

http://guides.rubyonrails.org/i18n.html#passing-variables-to-translations

我希望能夠在JavaScript中使用客戶端上的這些文件,即。這些文件已經被轉換爲JSON,但我希望能夠在翻譯後的字符串中設置參數。

例如:

There are %{apple_count} apples in basket ID %{basket_id}.

%{apple_count}%{basket_id}將與參數來代替。

這是我想在JS使用的呼叫(即我想要實現origStr):

var str = replaceParams(origStr, {apple_count: 5, basket_id: "aaa"});

我猜測最好的策略是使用正則表達式。如果是這樣,請提供一個好的正則表達式。但我很樂意聽取其他的選擇。

回答

1

如果您始終提供所有參數(即永不忽略它們),且不再需要使用正則表達式,並且模板中不再使用參數。

function replaceParams(origStr, params) { 
    for (var p in params) origStr = origStr.replace("%{" + p+ "}", params[p]); 
    return origStr; 
} 

在如果你只是想正則表達式的其他情況下,很容易與回調做取代:

function replaceParams(origStr, params) { 
    return origStr.replace(/%{(\w+)}/g, function(m, pName){ 
     return params[pName]; 
     // this will return "undefined" if you forget to pass some param. 
     // you may use `params[pName] || ""` but it would make param's value `0` (number) 
     // rendered as empty string. You may check whether param is passed with 
     // if (pName in params) 
    }); 
}