В данном случае локализацию и интернационализацию можно считать синонимами
Пока что решил для себя хранить настройки локали в отдельной Backbone модели и передавать её каждому представлению.
Может подскажете более интересное и элегантное решение.
// набор параметров локали/интернационализации
var i18n = {
en : {
language : 'English',
greeting : 'Hello'
},
ru : {
language : 'Русский',
greeting : 'Привет'
}
};
// В самой модели локали ничего особенного
var LocaleModel = Backbone.Model.extend();
// Некая модель (для примера не имеет значения)
var MyAppModel = Backbone.Model.extend();
// Вьюха приложения, использующая данные локали
var MyAppView = Backbone.View.extend({
initialize: function(options)
{
this.i18n = options.i18n;
this.i18n.bind('change', this.onLocaleChange, this);
},
setLocale: function(locale)
{
this.i18n.set(i18n[locale]);
},
onLocaleChange: function()
{
console.log('locale has been changed to: ' + language);
}
});
var locale = new LocaleModel(i18n.en);
var app = new MyAppView ({
model : new MyAppModel({username:'John Doe'}),
i18n : locale
});
// Совсем другая вьюха, но она так же использует текущую локаль
// Смена локали в любом месте затрагивает все подвязанные представления
var OtherAppView = Backbone.View.extend({
...
});
var otherApp = new OtherAppView({
model : new OtherModel(),
i18n : locale
});
пример смены локали
app.setLocale('ru');
в контексте MyAppView можно обратиться к настройкам локали таким образом
this.i18n.get('language');
Посмотреть простенький
пример использования
UPD:
Локаль является глобальным объектом и передаётся разным представлениям.
// Мы можем сменить локаль и на это событие отреагируют все подписанные представления.
locale.set(i18n.ru);