我希望使用hogan.js在浏览器中创建html格式的模板。我读过hogan支持i18n,但我无法找到一个如何工作的例子。如何将翻译后的文本传递给hogan以及您在模板中添加了什么标记,我已经看到了{{_i}}和{{i18n}}?
答案 0 :(得分:3)
似乎我混淆了来自Twitter的older fork Mustache.js,Hogan来自twitter的http://mustache.github.com/mustache.5.html个独立的胡子编译器。 fork确实支持{{_i}}
标记以进行国际化。然后,这将调用名为_
的全局函数,在该函数中,您可以使用自己的方法查找已翻译的值。 E.g。
translatedStrings = {
name: "Nom";
}
function _(i18nKey) {
return translatedStrings[i18nKey];
}
var template = "{{_i}}Name{{/i}}: {{username}}",
context = {username: "Jean Luc"};
Mustache.to_html(template, context);
将返回“Nom:Jean Luc”。 Hogan的国际化是通过正常的胡子lambdas实现的,例如:
translatedStrings = {
name: "Nom";
}
var template = "{{#i18n}}Name{{/i18n}}: {{username}}",
context = {
username: "Jean Luc",
i18n: function (i18nKey) {return translatedStrings[i18nKey];}
};
Hogan.compile(template).render(context);
有关提供lambda的更多信息,请参阅{{3}}。因此,主要的区别在于,在使用Hogan进行渲染时,必须始终在上下文中提供查找翻译的函数,而小胡子叉将查找全局方法。
答案 1 :(得分:1)
将其与其他国际化方法结合起来实际上很容易。 我们正在使用jquery-i18n-properties,这是一个支持使用.properties文件的jQuery插件, 它与Java兼容。
框架尝试下载名为Messages.properties的文件,具体取决于浏览器语言 Messages_en.properties和Messages_en_US.properties。这允许非常快速地构建翻译层次结构。
稍微改变slashnick的例子并使用hogan / mustache,我写道:
var template = "{{#i18n}}Name{{/i18n}}: {{username}}",
context = {
username: "Jean Luc",
i18n: function (i18nKey) {return jQuery.i18n.prop(key);}
};
// Init i18n
jQuery.i18n.properties(
{
name:'Messages',
path:'some/path',
mode : 'map'
});
Hogan.compile(template).render(context);
Messages.properties文件:
Name = Name
Messages_fr.properties文件:
Name = nom
我真的没有看到使用特殊胡子版本查找全局函数的优势(性能可能?)。