在我的項目中,我使用Polymer 1和i18next
(和i18next-xhr-backend
)來實現國際化。我做的基本方法(見下文)工作得很好,但當用戶更改語言時,聚合物數據綁定不會更新。I18Next&Polymer:更新語言更改時的數據綁定
目前的方法是如下:
const i18next = require('i18next');
const i18nextXHRBackend = require('i18next-xhr-backend');
i18next
.use(i18nextXHRBackend)
.init({
fallbackLng: ['en', 'default'],
debug: true,
backend: {
loadPath: '/locale/locales/{{lng}}.json',
crossDomain: false
}
}, function(err, t) {
console.log("Init done...");
});
if (!Polymer || !Polymer.Base) {
console.warn('CoolI18N needs Polymer to be loaded.');
}
Polymer.CoolI18N = i18next;
Polymer.Base._addFeature({
myVeryCoolTranslationMethod: function(...params) {
return i18next.t(params);
}
});
而在我的元素我通過
Polymer.CoolI18N.t('application.welcomeMessage')
達到像
<div>[[myVeryCoolTranslationMethod('application.welcomeMessage')]]</div>
或程序翻譯的問題是:當我在運行時加載一種新語言(如de
),它會按需要加載,但數據綁定不會更新,並且所有字符串均在en
或default
中設置。
i18next
觸發一個事件languageChanged
我能趕上這樣的:
i18next.on('languageChanged', (newLang) => {
console.log("language changed to:", newLang);
});
而這正是聚合物需要知道的東西改變了點...
是否有可能實現的,這些數據綁定會得到通知?我不想手動更新每一個綁定...
預先感謝您!
從i18next側 - >您在i18next上得到了回調。changeLanguage裏面,你可以觸發任何更新聚合物中的綁定(不使用聚合物,所以沒有想法...對不起)。 或綁定changeLanguage通過https://www.i18next.com/api.html#onlanguagechanged 對不起,不能幫助聚合物部分... – jamuhl
是的,這是真的 - 我geht'i18enxt.on(' languageChanged」,...'事件,但是這正是我不知道如何通知聚合物點... – sebastian
據https://stackoverflow.com/questions/27159625/polymer-using-a-function- IN-A-數據綁定表達式聚合物是看PARAMS在數據綁定更新功能,所以也許你可以添加語言鍵作爲參數傳遞給譯者來電!? – SJFrK