この質問は、backbone.js を介して require.js とアンダースコア テンプレートを使用して、テンプレート化とローカライズに関するものです。アプリケーションはその場でローカライズする必要があります。
後で問題が判明した道に着手する前に、私が検討しているものよりも優れた解決策がありますか?言語配列を繰り返しマージして処理することで、速度とメモリが心配です。2 ~ 3,000 の言語文字列があるとします。
現在のアプローチ(機能しますが、プロセッサが重いように見えます):
- I18N バンドル アプローチを使用して、すべてのテンプレートの翻訳された要素を本質的に含む言語「インクルード」を作成します。
- このオブジェクト/要素の配列をモデル属性 (バックボーンから) とマージし、マージされたロットをアンダースコア テンプレートに渡します。
.
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リクエストによるトランザクションを取得することになるかもしれませんが、これにはまだオブジェクトのマージが必要です。これは私が避けようとしているものです。