你如何使用knockout.js處理本地化?如何在knockout.js中處理本地化?
看起來knockback.js有一個很好看的工具來處理本地化,我想知道是否有任何第三方庫可以與knockout.js一起使用來處理本地化而無需切換到knocback。 js來獲得這些功能(因爲我不需要這個簡單的應用程序的骨幹模型或路由)。像Mapping插件一樣簡單的使用會很理想。
謝謝!
你如何使用knockout.js處理本地化?如何在knockout.js中處理本地化?
看起來knockback.js有一個很好看的工具來處理本地化,我想知道是否有任何第三方庫可以與knockout.js一起使用來處理本地化而無需切換到knocback。 js來獲得這些功能(因爲我不需要這個簡單的應用程序的骨幹模型或路由)。像Mapping插件一樣簡單的使用會很理想。
謝謝!
這裏是一個simple fiddle展示淘汰賽兩種語言之間進行切換。它非常基本,但你的問題缺乏任何細節給你更復雜。
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>
的ViewModels
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();
};
很酷,謝謝!這是一個很好的方法來處理它。 – 2012-07-12 16:36:21
沒有必要讓語言的每個屬性都是可觀察的! 如果你有很多標籤,它會減慢頁面的速度。我編輯你的罰款: http://jsfiddle.net/runjep/KRS2A/63/ – 2013-09-23 11:38:12
這是一個很好的觀點,謝謝符文 – Tyrsius 2013-09-23 15:10:20
我不認爲這是必要做的映射,也沒有爲每個標籤使用觀測。
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代碼:
<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閣:
i18nextko.init(resourceStore, 'en', ko);
切換語言的意願:
i18nextko.setLanguage('de');
和綁定:
data-bind="i18n: 'testTranslation'"
或者:
data-bind="i18n: { key: 'testTranslation2', options: { param: paramObservable } }"
如果從服務器獲取您的本地化字符串,那麼所有你需要做的就是使用'text'結合設置的所有字符串起來。你有什麼具體問題? – Tyrsius 2012-07-11 16:46:53
@Tyrsius,好吧,我沒有從服務器獲取本地化的字符串,這可能是一個解決方案。我將不得不考慮一個好方法來設置它。我特別關注這個問題的方式是處理在knockout.js中切換本地化字符串的方式,類似於knockback.js如何處理它們(例如,[see](http://kmalakoff.github .com/knockback/tutorial_locale_manager.html)。)以便我不必修改服務器端API。感謝您的建議! – 2012-07-11 18:07:56
你剛剛鏈接到一個教程,回答自己的問題的人。 Knockback *使用*淘汰賽。 *閱讀鏈接*。 – Tyrsius 2012-07-11 22:38:34