首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用Mustache.js做高级i18n?

如何用Mustache.js做高级i18n?
EN

Stack Overflow用户
提问于 2011-11-08 21:46:39
回答 3查看 8.3K关注 0票数 19

似乎推特正在使用Mustache.jsfork来为它的模板提供i18n?

有人能给出一个简短的例子,说明这是如何做到的,也许还可以概述一下众包这些翻译需要什么语义?

当然有这个简单的例子:

代码语言:javascript
运行
复制
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 )函数和文本来提供条件、单数、复数等。

EN

回答 3

Stack Overflow用户

发布于 2012-03-07 14:42:17

我知道我真的没有回答你的问题,但是除非你计划在这个项目上花费大量的时间,否则我会认真考虑把这个作为一个数据问题。

代码语言:javascript
运行
复制
{
    title : {
        key: 'título',
        value: 'bienvenida'
    }
}

和:

代码语言:javascript
运行
复制
{
    title : {
        key: 'لقب',
        value: 'ترحيب'
    }
}

然后将模板设为泛型:

代码语言:javascript
运行
复制
<h1>{{title.key}}: {{title.value}}</h1>

和:

代码语言:javascript
运行
复制
<h1>{{title.value}} {{title.key}}</h1>

您所需要维护的就是模板和数据之间的1:1映射。

代码语言:javascript
运行
复制
Mustache.render(data[language], template[language]);

保持简单:)

票数 7
EN

Stack Overflow用户

发布于 2011-12-27 12:29:08

构造更高级的案例,包括条件、循环等,其方式与常规的Mustache库完全相同。您可以使用新的I18N {{_i}}开始和{{/i}}结束标记来包装模板的某些部分,以便进行翻译。

如果您的模板是:

代码语言:javascript
运行
复制
<h1>Title: {{title}}</h1>
<ul>
   {{#a_list}}
      <li>{{label}}</li>
   {{/a_list}}
</ul>

您可以只换行第一行

代码语言:javascript
运行
复制
<h1>{{_i}}Title: {{title}}{{/i}}</h1>

并将内部部分包括在转换映射中。

有关完整的示例,请参阅http://jsfiddle.net/ZsqYG/2/

票数 5
EN

Stack Overflow用户

发布于 2013-01-03 02:32:40

我相信你想要做的就是在Mustache中使用i18n特性。这可以通过重载Mustache.render方法来实现,如下所示:

代码语言:javascript
运行
复制
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));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8051370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档