这是一个简单的示例,但随着您的应用变得越来越复杂,您可能希望使用 i18next 之类的内容。
小提琴: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),然后将 observables 设置为正确的单词。
有关订阅可观察对象和一般可观察对象的更多信息,请查看淘汰文档,其中有很好的示例:
http://knockoutjs.com/documentation/observables.html
我在视图模型的开头使用 var self=this; 捕获了“this”,以确保我们在调用订阅代码时引用了语言文本 observables(否则它不会像 'this'不会是视图模型)。
出于演示的目的,我创建了一个语言数组(只有两种),我们将其绑定到选择下拉菜单以允许选择语言;该值绑定到 viewmodel 的 Language observable,然后触发 subscribe 函数中的代码切换语言。
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>
小提琴:http://jsfiddle.net/jiggle/dZ9Em/