1

我想在我的应用程序中做一些基本的 i18n

我将 i18n 插件(来自 require.js)加载到我的应用程序并创建了一个目录nls,其中我有几个文件,例如project.js

main.js我在文件中设置了默认位置,例如

config : {
    i18n : {
        locale : 'de-de'
    }
}

我现在想使用我的视图/模板中的文件。有人可以向我解释这是如何完成的吗?模板设置在一个 template.js 文件中

我的观点:

define(['marionette', 'templates', 'i18n!nls/project'], function (marionette, templates, msg) {

    return marionette.CompositeView.extend({
        template : templates.project
    });

});

我的模板:

<div class="container">
    <div class="well">
        <h2>Projects</h2>
    </div>
</div>

有人可以向我解释如何在我的视图/模板中使用该文件吗?提前致谢!

编辑:

我通过一些尝试和错误找到了解决方案。当我通过 require.js tpl 加载模板时!插件如果我调用它们,我不需要编译它们require('tpl!templates/dashboard.tmpl')。我可以简单地传递我加载的 i18n 文件'i18n!nls/dashboard'。在 Marionette 中,视图默认呈现,所以我这样做了:

define(['marionette', 'templates', 'i18n!nls/dashboard'], function (Marionette, templates, msg) {

    return Marionette.CompositeView.extend({

        template : function () {
            return templates.dashboard(msg);
        },

        initialize : function() {

        }
    });

});

i18n 插件的文件在这里得到了很好的解释: http ://requirejs.org/docs/api.html#i18n

我必须一步一步地做这个,首先我错过了根,然后我想知道为什么我的德语语言环境没有加载,但我只是忘记de-de : true在根文件中设置。现在一切都像魅力一样运作

4

1 回答 1

5

首先,您通过 require.js 将 i18 文件加载到您的视图中。我在此示例中使用车把模板。

define([
    'marionette',
    'handlebars',
    'text!modules/tableModule/templates/myTmpl.html',
    'i18n!nls/dashboard',
],
function(Marionette, Handlebars, tmpl, locals) { ...

然后你用 i18 对象编译和加载你的模板。

var template = Handlebars.compile(tmpl);
this.template = template(locals.myVar);

你也可以去做复杂的组合

  var template = Handlebars.compile(tmpl);  
  var data =_.extend(options, {lang:locals});
  this.template = template(data); 

您的 nls 文件将如下所示

define({

    "root": {
         "myVar" : "some text in",
         "canBeAnObjectTo": {
                      "title"   : "my title ",
                      "contact" : "Contact",
            }

你的观点将是这样的:

  <div class="cssClass">
<div class="table-caption pull-left">{{this.myVar}}</div>
  </div>

希望有帮助

于 2013-02-11T07:40:00.033 回答