6

現在、Backbone.Marionette とアンダースコア テンプレートを使用して、中規模のアプリに国際化を追加する必要があります。

徹底的な調査の結果、2 つの有効な選択肢が浮かび上がってきました。

  • underscoreとの直接統合を提供しますが、フランス語と英語以外のサポートに不可欠となる複数形を欠いています。
  • 強力な API を提供しますが、ハンドルバーテンプレート との直接統合のみを提供するi18next

より多くの言語にローカライズするには、より長い期間が必要になるため (うまくいけば!)、underi18n はおそらく不足し、実行可能な唯一の解決策は i18next になります。

先に進む前に、私の 2 つの質問の概要を説明し、それから私が経験した完全な背景と調査プロセスを提供します。

  1. i18next と Marionette を使用してテンプレートのローカリゼーションを一元化するにはどうすればよいですか
  2. すべてのアンダースコア テンプレートにグローバル ヘルパーを挿入するにはどうすればよいですか

テンプレートのローカライズを一元化

i18n で非常に面倒だと思うことの 1 つは、すべての onRender 関数で i18n を呼び出さなければならないことです。これは、多数の現在のビューと将来のすべてのビューのすべてに呼び出しを追加することを意味します。私が見ているように、間違っている場合は修正してください。これは次のようになります。

MyView = Marionette.ItemView.extend({

  template: myUnlocalizedTemplate,

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

と何度も繰り返されます。

実装とメンテナンスの観点からこれは非常に不便だと思うので、バックボーンとマリオネットを掘り下げ始めました。過去のプロジェクトから、テンプレートをグローバルに前処理する方法があったことを思い出しました。
仕事に適したツールと思われる Marionette.Renderer に出くわしました。しかし、i18next の完全なインストールと実装に入る前に、正しい道を進んでいることを確認したいと思います。
なぜなら、underi18n がどのよう_.template(under18n.template(myTemplate, t));にレンダラーとうまく統合され、テンプレートを前処理してローカライズするためのグローバル ソリューションを提供できるかを明確に理解できたとしても、この場合に i18next を使用する方法については確信が持てないからです。
誰もがそれを行っている例を見つけることができなかったという事実は、私も心配しています。誰もがハンドルバーテンプレートを使用するか、手動で呼び出しますか?.i18n()各ビューで?現時点では、翻訳をバインドするための jquery 要素がないため、これがどのように可能になるかについてかなり困惑しています。

私が達成しようとしていることの例、さらなるドキュメント、または行く途中のヒントを提供するものは何でも答えていただければ幸いです!

4

2 に答える 2

0

ヘルパーでビュー インスタンスにアクセスする必要がある場合の別の解決策:

// Global template helpers in Marionette
var _mixinTemplateHelpers = Marionette.View.prototype.mixinTemplateHelpers;
Marionette.View.prototype.mixinTemplateHelpers = function(target) {
    var _this = this;
    target = _.extend({
        // generate a unique id in the view's scope
        _id: function(baseName) {
            return _this.cid + '-' + baseName;
        },
    }, target);
    return _mixinTemplateHelpers.call(this, target);
};
于 2015-12-15T19:45:42.250 に答える