发现了几个问题(和答案):How is internationalization configured for Hogan.js? ,等等。
但非特别考虑到词序。我需要能力:
步骤1.给出一个键 - >用特定语言查找句子。
第2步。这句话可能包含{{var}},需要为 用json-values代替。
步骤2.单独是一般的胡子模板。
步骤1.可以使用多种技术单独完成,但我更喜欢不涉及Mustache / Hogan引擎之外的任何专用代码的技术(当然,结合i18n资源包)。 Hogan似乎支持这一点,例如:(来自上面的url)
var template = "{{#i18n}}Name{{/i18n}}: {{username}}",
context = {
username: "Jean Luc",
i18n: function (i18nKey) {return translatedStrings[i18nKey];}
};
但是,要结合1.和2.在此示例中,我希望translatedStrings[i18nKey]
返回一个可能包含{{<some expansion>}}
的字符串。
有人知道这样做的优雅方式吗?
理由: 通常,语言在单词顺序等方面存在很大差异,这使得复杂的模板没有这种能力。
答案 0 :(得分:4)
最新版本的Hogan.js将处理从lambda返回的结果中的Mustache标记。然而,对你问题中代码的一个小改动是,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,用最新版本演示了这一点。