小编Mik*_*aos的帖子

Marionette.Renderer,Underscore模板和i18next的国际化

我们目前需要使用Backbone.Marionette和下划线模板为中型应用添加国际化.

经过一番深入研究后,出现了两个有效的选择:

  • underi18n提供与下划线的直接集成,但缺乏多元化,这对于支持法语和英语更为重要
  • i18next提供强大的API,但只与手柄模板 直接集成

我们需要在更长的时间内本地化更多的语言(希望如此!)因此,underi18n可能会达不到,唯一可行的解​​决方案就是i18next.

在进一步讨论之前,我将概述我的两个问题,然后提供我所经历的完整背景和研究过程.

  1. 如何使用i18next和Marionette集中模板的本地化
  2. 如何在所有下划线模板中注入全局帮助器

集中模板的本地化

我发现i18n非常麻烦的一件事是你必须在你所有的onRender功能中调用它,这意味着在我们的几十个当前视图和我们未来的所有视图中添加一个调用.在我看来,纠正我,如果我弄错了,这将是这样的:

MyView = Marionette.ItemView.extend({

  template: myUnlocalizedTemplate,

  onRender: function () {
    /* ... some logic ... */
    this.$el.i18n();
  }
  /* And everything else... */
});
Run Code Online (Sandbox Code Playgroud)

并反复重复.

从实施和维护的角度来看,我觉得这很不方便,所以我开始深入研究Backbone和Marionette,记得从过去的项目中有一些全局预处理模板的方法.
我偶然发现了Marionette.Renderer,它似乎是这项工作的正确工具.但在进入i18next的完整安装和实现之前,我想确保我走在正确的道路上.
因为如果我可以清楚地看到如何underi18n并_.template(under18n.template(myTemplate, t));可能与渲染器以及集成和提供给我一个全球性的解决方案,预处理和本地化我的模板,我不那么肯定去与i18next在这种情况下的方式.
事实上我找不到任何人这样做的例子也让我担心,每个人都要使用车把模板还是.i18n()在每个视图中手动调用?在这一点上,没有jquery元素可以绑定翻译,所以我很困惑这可能是怎么回事.

将是一个非常赞赏的答案,提供我想要完成的一个例子,进一步的文档或途中的提示!

internationalization i18next marionette underscore.js-templating

6
推荐指数
1
解决办法
2197
查看次数

grunt-contrib-jasmine与PhantomJS,EJS模板和XMLHttpRequest异常101

我正在尝试为一个简单的项目建立一个基本的单元测试环境,但是我遇到了一个奇怪的障碍,经过数小时的研究后我无法克服这个障碍.

出于某种原因,我Error: NETWORK_ERR: XMLHttpRequest Exception 101直接从EJS返回尝试使用XHR加载模板,但只是偶尔使用一次.

案例很简单,我有一个骨干应用程序,实例化一个呈现EJS模板的骨干视图.这看起来像这样:

BackboneView = Backbone.View.extend({
  initialize: function() {
    this.template = new EJS({url: '/app/views/root/root.template.ejs'});
  }
});
Run Code Online (Sandbox Code Playgroud)

要设置grunt-contrib-jasmine,我的Gruntfile中有以下代码段:

jasmine: {
  cms: {
    src: "app/**/*.js"
    options: {
      specs: "tests/fe/spec/*Spec.js",
      vendor: [
          "vendor/jquery/dist/jquery.js",
          "vendor/underscore/underscore.js",
          "vendor/backbone/backbone.js",
          "vendor/ejs/ejs.js",
      ],
      keepRunner : true,
      outfile : "tests/fe/_SpecRunner.html",
      host : "http://0.0.0.0:8000"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我大部分时间都可以运行我的测试套件:

$ grunt jasmine
Running "jasmine:cms" (jasmine) task
Testing jasmine specs via PhantomJS

log: came in request!, /app/views/root/root.template.ejs

log: 200

log: /app/views/root/root.template.ejs

 website.header
   header.test()
     - test should return …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing ejs phantomjs grunt-contrib-jasmine

6
推荐指数
0
解决办法
536
查看次数