Вот простой пример, но вы, возможно, захотите использовать что-то вроде i18next как ваше приложение получает больше сложный.
Fiddle: http://jsfiddle.net/jiggle/dZ9Em/
function AppViewModel() {
var self = this;
self.Username = ko.observable("Username");
self.Password = ko.observable("Password");
self.Rememberpassword = ko.observable("Remember Password");
self.Language =ko.observable("english");
self.Language.subscribe(function(lang){
if (lang=="norwegian"){
self.Username("Brukernavn");
self.Password("Passord");
self.Rememberpassword("Husk passord");
};
if (lang=="english"){
self.Username("Username");
self.Password("Password");
self.Rememberpassword("Remember Password");
};
});
self.Languagelist=['english','norwegian'];
return self;
}
var vm = new AppViewModel();
ko.applyBindings(vm);
код устанавливает текст языка как нокаут наблюдаемые, а также текущим язык, то мы подписываться на язык наблюдаемых, таким образом, что при его обновлении (пользователь выбирает другой язык), мы проверяем, что новое значение (lang), а затем устанавливаем наблюдаемые правильные слова.
Для получения дополнительной информации о subcribing для наблюдаемых и наблюдаемых в целом имеет выгляди документацию нокаута, что есть хорошие примеры:
http://knockoutjs.com/documentation/observables.html
Я захватил «это» с помощью вара самостоятельно = это; в начале viewmodel, чтобы убедиться, что мы ссылаемся на текстовый текст, наблюдаемый при вызове кода подписи (он не будет работать иначе, поскольку «это» не будет viewmodel).
Для целей demo, я создал массив языков (только два), и мы привязываем это к выберите раскрывающийся список, чтобы разрешить выбор языка; значение привязывается к видимому языку viewmodel, который затем запускает код в функции подписки для переключения языка.
HTML:
<select data-bind="options: Languagelist,value:Language"></select>
<div>
<div data-bind="text:Username"></div>
<div data-bind="text:Password"></div>
<div data-bind="text:Rememberpassword"></div>
</div>
Fiddle: http://jsfiddle.net/jiggle/dZ9Em/
Спасибо за подробный ответ! Я также отмечаю, что это применимо только к текущему представлению пользователей - как мне применить KO по всему приложению? – Publicus
Это довольно сложный вопрос и зависит от вашего приложения, это приложение с одной страницей (например, с использованием дюрандального, углового и т. Д.)? или традиционные .net как веб-страницы/формы/mvc? Поиск нокаутом + i18следующий здесь. В частности, большой ответ в этом вопросе пользователем «отлично», http://stackoverflow.com/questions/16882171/durandal-knockout-app-with-multilanguage-support. На самом базовом уровне вы можете сохранить выбор языка в файле cookie или локальном хранилище и на каждой странице, получить это значение и создать язык viewModel для этой конкретной страницы. Я бы определенно рассмотрел использование i18next. –
Это одностраничное приложение, использующее Kendo UI Mobile. Поэтому применить его к текущему DOM будет достаточно. – Publicus