Локализация с нокаутом

Я пытаюсь локализовать (перевести на другие языки) пользовательский интерфейс своего приложения, написанного нокаутом. В настоящее время я изучаю возможные решения и проблемы, которые они могут создать.

Поэтому я построил свою первую попытку со следующим кодом (проверьте fiddle для реального кода):

var translation = {
    'En' : {  
        name: 'Type your name',
        surname: 'Type your surname'
    },
    ...
};


function AppViewModel() {
    self = this;
    this.translation = ko.observable(translation['En']);
    this.change = function(lang){
        self.translation = ko.observable(translation[lang]);
        console.log(self.translation());
    }
}

ko.applyBindings(new AppViewModel());

Поэтому я ожидаю, что при нажатии кнопки «En», «Fr», «Ch» будут изменены 2 строки текста. Видимо так не бывает (иначе я бы сюда не писал). Но если вы откроете консоль, то увидите, что this.translation меняется.

Я предполагаю, что проблема в том, что я инициализирую его как наблюдаемый (но это объект). Но нет такой вещи, как наблюдаемый объект.

Итак, мой вопрос: как я могу заставить это работать, но, что более важно, есть ли приемлемый способ локализации вашего приложения, написанного с нокаутом? PS. этот вопрос совершенно другой, несмотря на его название.


person Salvador Dali    schedule 28.03.2014    source источник
comment
Вы переопределяете свой наблюдаемый объект, а не переназначаете его. Это должно быть self.translation(translation[lang]); jsfiddle.net/5PJ4N, и ваше самообслуживание также содержит ошибки... вы отсутствует var в self = this;, поэтому должно быть var self = this   -  person nemesv    schedule 28.03.2014


Ответы (1)


Хотя у вас есть ответ, опубликованный выше nemseve. Не думаю, что вам стоит локализовать приложение описанным способом. Я бы посоветовал вам взглянуть на фреймворк локализации, такой как i18next, а затем поискать в стеке, как использовать его с нокаутом, см. ссылку ниже.

Если ваше приложение не маленькое, вы окажетесь в мире боли, делая это так, как вы делали выше.

нокаут il8next

person Piotr Stulinski    schedule 14.01.2015