您如何使用 knockout.js 处理本地化?
似乎 knockback.js 有一个漂亮的实用程序来处理本地化,我想知道是否有任何第三方库可以与 knockout.js 一起使用来处理本地化,而不必实际切换到 knocback.js 来获得那些功能(因为我真的不需要这个简单应用程序的主干模型或路由)。像 Mapping 插件这样简单易用的东西是理想的。
谢谢!!
您如何使用 knockout.js 处理本地化?
似乎 knockback.js 有一个漂亮的实用程序来处理本地化,我想知道是否有任何第三方库可以与 knockout.js 一起使用来处理本地化,而不必实际切换到 knocback.js 来获得那些功能(因为我真的不需要这个简单应用程序的主干模型或路由)。像 Mapping 插件这样简单易用的东西是理想的。
谢谢!!
这是一个简单的小提琴,演示了两种语言之间的 Knockout 切换。它非常初级,但是您的问题缺乏任何细节,无法让您更加复杂。
HTML
<div data-bind="with: selectedLanguage">
<h1 data-bind="text: header"></h1>
<h2 data-bind="text: subHeader"></h2>
<p data-bind="text: body"></p>
</div>
<select data-bind="options: languages, optionsText: 'name', value: selectedLanguage"></select>
视图模型
var Language = function(language) {
this.name = ko.observable(language.name);
this.header = ko.observable(language.header);
this.subHeader = ko.observable(language.subHeader);
this.body = ko.observable(language.body);
};
var ViewModel = function(data) {
var self = this;
self.languages = ko.observableArray(
ko.utils.arrayMap(data, function(i) {
return new Language(i);
}));
self.selectedLanguage = ko.observable();
};
我认为没有必要进行映射,也不需要为每个标签使用 observables。
var ViewModel = function () {
this.l = ko.observable(spanish);
this.chooseenglish = function () {
this.l(english);
};
this.choosespanish = function () {
this.l(spanish);
};
};
var spanish = {
header: "Bienvenidos",
body: "Esta es la demostración de idioma"
};
var english = {
header: "Welcome",
body: "This is the language demo"
}
ko.applyBindings(new ViewModel());
在 html 代码中,您只需要调用 observable 和标签名称:
<h1 data-bind='text: l().header'></h1>
<button data-bind='click: chooseenglish'>English</button>
<button data-bind='click:choosespanish'>Spanish</button>
<p data-bind='text: l().body'></p>
有一个很棒的i18next-ko项目,它在底层使用了i18next。
定义你的翻译:
var resourceStore = {
en: {
translation: {
'testTranslation': 'Test translation',
'testTranslation2': 'Test translation __param__'
}
},
de: {
translation: {
'testTranslation': 'Test-Übersetzung',
'testTranslation2': 'Test-Übersetzung __param__'
}
}
}
初始化 i18next-ko:
i18nextko.init(resourceStore, 'en', ko);
随意切换语言:
i18nextko.setLanguage('de');
并绑定:
data-bind="i18n: 'testTranslation'"
或者:
data-bind="i18n: { key: 'testTranslation2', options: { param: paramObservable } }"