如何为Hogan.js配置国际化?

时间:2012-02-09 12:55:28

标签: javascript mustache hogan.js

我希望使用hogan.js在浏览器中创建html格式的模板。我读过hogan支持i18n,但我无法找到一个如何工作的例子。如何将翻译后的文本传递给hogan以及您在模板中添加了什么标记,我已经看到了{{_i}}和{{i18n}}?

2 个答案:

答案 0 :(得分:3)

似乎我混淆了来自Twitter的older fork Mustache.jsHogan来自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

我真的没有看到使用特殊胡子版本查找全局函数的优势(性能可能?)。