15

この質問は、backbone.js を介して require.js とアンダースコア テンプレートを使用して、テンプレート化とローカライズに関するものです。アプリケーションはその場でローカライズする必要があります。

後で問題が判明した道に着手する前に、私が検討しているものよりも優れた解決策がありますか?言語配列を繰り返しマージして処理することで、速度とメモリが心配です。2 ~ 3,000 の言語文字列があるとします。

現在のアプローチ(機能しますが、プロセッサが重いように見えます):

  1. I18N バンドル アプローチを使用して、すべてのテンプレートの翻訳された要素を本質的に含む言語「インクルード」を作成します。
  2. このオブジェクト/要素の配列をモデル属性 (バックボーンから) とマージし、マージされたロットをアンダースコア テンプレートに渡します。

.

define(['backbone', 'models/model', 'text!template.html', 'i18n!my/nls/translatedbits'],
  function(Backbone, MyModel, TemplateText, TranslationObject) {
  var View = Backbone.View.extend({
    model: {},

    initialize : function(params) {
      this.model = new MyModel();
    },

    render : function(callBack) {
      // Get the model attributes
      var templateParams = _.clone(this.model.attributes);
      // Bolt on the tranlsated elements (established from require.js I18N plugin)
      templateParams.t = TranslationObject;
      // Pass the lot ot the template
      var template = _.template(TemplateText, this.model.attributes);
      $(this.el).html( template );
      return this;
    }

  });
  return View;
  }
);

次に、テンプレートが読み込まれます

<%= modelAttribute1 %> <%= t.translationString1 %>

より良いソリューションまたはより優れたテンプレート エンジンはありますか? [この目的に適しています - 口ひげには他の利点があるかもしれませんが、より簡単にローカライズできますか、それともローカライズされた結果をキャッシュして、後でモデル属性を渡すことができますか?]

言語は「その場で」変更する必要があるかもしれないことに注意してください。これは、I18N プラグインに関するもう 1 つの懸念事項です。テンプレートモデルを介してJSONリクエストによるトランザクションを取得することになるかもしれませんが、これにはまだオブジェクトのマージが必要です。これは私が避けようとしているものです。

4

2 に答える 2

9

完全を期すために、最も最適化されていると感じた解決策は次のとおりです。

  1. サーバーからテンプレートが要求されると、Cookie が言語を判別し、正しいテンプレートが配信されました。

  2. PHP バックエンドを使用してテンプレートを事前解析しました。これらは正しい言語でmemcachedに保存されました

  3. 要求された言語テンプレートは、ブラウザによってキャッシュされ、バックボーン モデルの内部にキャッシュされるため、JavaScript ですばやく再利用できます。

理由:

  • より高速な JS (正規表現の置換がはるかに少ない)。ベンチマークを行ったことはありませんが、関数を完全に削除した場合にのみ論理的です。
  • クライアントへの巨大な言語ファイルの転送を保存しました
于 2012-11-26T05:48:17.127 に答える