似乎推特正在使用Mustache.js的fork来为它的模板提供i18n?
有人能给出一个简短的例子,说明这是如何做到的,也许还可以概述一下众包这些翻译需要什么语义?
当然有这个简单的例子:
var template = "{{_i}}{{name}} is using mustache.js!{{/i}}"
var view = {
name: "Matt"
};
var translationTable = {
// Welsh, according to Google Translate
"{{name}} is using mustache.js!": "Mae {{name}} yn defnyddio mustache.js!"
};
function _(text) {
return translationTable[text] || text;
}
alert(Mustache.to_html(template, view));
// alerts "Mae Matt yn defnyddio mustache.js!"但我想更深入地了解如何构造_( translationTable )函数和文本来提供条件、单数、复数等。
发布于 2012-03-07 14:42:17
我知道我真的没有回答你的问题,但是除非你计划在这个项目上花费大量的时间,否则我会认真考虑把这个作为一个数据问题。
{
title : {
key: 'título',
value: 'bienvenida'
}
}和:
{
title : {
key: 'لقب',
value: 'ترحيب'
}
}然后将模板设为泛型:
<h1>{{title.key}}: {{title.value}}</h1>和:
<h1>{{title.value}} {{title.key}}</h1>您所需要维护的就是模板和数据之间的1:1映射。
Mustache.render(data[language], template[language]);保持简单:)
发布于 2011-12-27 12:29:08
构造更高级的案例,包括条件、循环等,其方式与常规的Mustache库完全相同。您可以使用新的I18N {{_i}}开始和{{/i}}结束标记来包装模板的某些部分,以便进行翻译。
如果您的模板是:
<h1>Title: {{title}}</h1>
<ul>
{{#a_list}}
<li>{{label}}</li>
{{/a_list}}
</ul>您可以只换行第一行
<h1>{{_i}}Title: {{title}}{{/i}}</h1>并将内部部分包括在转换映射中。
有关完整的示例,请参阅http://jsfiddle.net/ZsqYG/2/。
发布于 2013-01-03 02:32:40
我相信你想要做的就是在Mustache中使用i18n特性。这可以通过重载Mustache.render方法来实现,如下所示:
var lang = {
'is_using_pre': 'Mae ',
'is_using': 'yn defnyddio'
};
var Mustache = (function (Mustache) {
var _render = Mustache.render;
Mustache.render = function (template, view, partials) {
view['lang'] = lang;
return _render (template, view, partials);
};
return Mustache;
}(Mustache));
var template = "{{_i}}{{lang.is_using_pre}}{{name}} {{lang.is_using}} mustache.js!{{/i}}";
var view = {
name: "Matt"
};
alert(Mustache.to_html(template, view));https://stackoverflow.com/questions/8051370
复制相似问题