2012-04-04 41 views
1

發現一對夫婦的問題(和答案)本:How is internationalization configured for Hogan.js? 等。小鬍子/霍根國際化,並採取詞序考慮

,但特別是採取詞序考慮非。我需要以下能力:

  • 第1步。給定一個鍵 - >查找特定語言的句子。

  • 第2步。這句話可能包含{{var}},它需要被
    替換爲json-values。

第2步。單獨是一般的小鬍子模板。

第1步。單獨可以使用多種技術完成,但我更喜歡在Mustache/Hogan引擎之外不涉及任何專門代碼的技術(與國際資源綁定的課程相結合)。霍根似乎喜歡的東西來支持這一點:(從上面URL)

var template = "{{#i18n}}Name{{/i18n}}: {{username}}", 
    context = { 
     username: "Jean Luc", 
     i18n: function (i18nKey) {return translatedStrings[i18nKey];} 
    }; 

但是在這個例子中1和2聯合,我想translatedStrings[i18nKey]返回可能含有{{<some expansion>}}以及一個字符串。一個優雅的方式來做到這一點

有人知道?

理由: 通常語言差別很大的詞序等,這使得沒有這個能力,複雜的模板。

回答

4

Hogan.js的最新版本將處理鬍子標籤從一個lambda返回的結果中。然而,在你的問題的代碼的一個微小的變化是,拉姆達的結果應該是一個功能,以修改字符串:

var translatedStrings = { name: "Nom {{rank}}" }; 

var template = "{{#i18n}}name{{/i18n}}: {{username}}", 
    context = { 
     username: "Jean Luc", 
     rank: 'Captain', 
     i18n: function() { 
      return function (i18nKey) {return translatedStrings[i18nKey];}; 
     } 
    }; 

document.write(Hogan.compile(template).render(context));​ // Nom Captain: Jean Luc 

我創建了一個jsfiddle與最新版本的說明了這一點。