Этот вопрос касается шаблонов и локализации, используя шаблоны require.js и underscore через backbone.js. Приложение должно быть локализовано "на лету".
Прежде чем приступить к пути, который позже оказался проблематичным, есть ли лучшее решение, чем тот, который я рассматриваю, - я обеспокоен скоростью и памятью с многократным слиянием и обработкой языкового массива. Предположим, что это 2-3 тысячи языковых строк.
Текущий подход (который работает, но выглядит тяжело процессорным):
- Используя подход к связыванию 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. Я могу закончить получение транзакций по запросу JSON через шаблонную модель, но для этого все еще требуется слияние объектов, чего я пытаюсь избежать.