这个问题涉及到使用require.js和backbone.js通过underscore模板进行模板化和本地化。应用程序需要在运行时进行本地化。
在采取可能会出现问题的路径之前,是否有比我考虑的更好的解决方案?我担心重复合并和处理语言数组会影响速度和内存。假设有2-3千个语言字符串。
当前的方法(可行,但看起来很占用处理器):
1.使用I18N捆绑方法创建包含所有模板翻译元素的语言"包含"。
2.将此对象/数组与backbone的模型属性合并,并将合并后的内容传递给underscore模板。
然后模板将读取。
在采取可能会出现问题的路径之前,是否有比我考虑的更好的解决方案?我担心重复合并和处理语言数组会影响速度和内存。假设有2-3千个语言字符串。
当前的方法(可行,但看起来很占用处理器):
1.使用I18N捆绑方法创建包含所有模板翻译元素的语言"包含"。
2.将此对象/数组与backbone的模型属性合并,并将合并后的内容传递给underscore模板。
.
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 %>
我是否可以使用更好的解决方案或更好的模板引擎?[更适合此目的 - mustache可能具有其他优点,但它能否更容易地本地化,或者能否缓存本地化结果以允许稍后传递模型属性?]
请注意,语言可能需要“即时”更改 - 这是我对I18N插件的另一个担忧。我最终可能会通过模板模型通过JSON请求获取翻译,但这仍然需要对象合并,这正是我试图避免的。