2014-03-28 79 views
0

我想本地化(翻譯成其他語言)我的應用程序的用戶界面,用knockout編寫。目前,我正在調查可能的解決方案以及他們可能引入的問題。本地化與淘汰賽

所以我建立我用下面的代碼第一次嘗試(檢查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()); 

因此,我希望一個按鈕被點擊「恩」,「神父」,「頻道」時,2個文本行將被改變。顯然這不會發生(否則我不會在這裏寫)。但是如果你打開控制檯,你可以看到this.translation正在改變。

我認爲問題是因爲我初始化它爲可觀察的(但這是一個對象)。但是沒有可觀察對象的東西。

所以我的問題是:我該如何做這項工作,但更重要的是有一種可接受的本地化應用程序的方式,用knockout編寫? PS。 this question是完全不同的,但它的名字。

+3

您是**重寫**並且不重新分配您的可觀察值。它應該是'self.translation(translation [lang]);'你的這個,自我處理也是越野車......你在'self = this中缺少'var'; '所以它應該'var self = this' – nemesv

回答

0

雖然你有nemseve公佈的答案。我不認爲你應該以所描述的方式本地化應用程序。我會敦促你去查看一個本地化框架,比如i18next,然後搜索堆棧如何使用knockout來查看下面的鏈接。

除非你的應用程序很小,否則你將最終處於一個痛苦的世界中,這樣做就像你在上面那樣。

knockout il8next