我在 BackboneJS 应用程序中使用 i18n.js 进行文本本地化。但陷入了我需要在应用程序中更改语言时重新加载文本翻译的阶段。我在语言更改时调用设置 view render() 函数,但对我不起作用,但在重新加载 index.html 时它起作用。那么我如何重新加载翻译文件并查看以反射(reflect)更改。以下是我尝试过的--
应用程序引导.js
var locale = {};
locale.language = "en-us";//default
locale.setLanguage = function (language) {
localStorage.setItem('localLanguage', '' + language);
};
locale.getLanguage = function () {
return localStorage.getItem('localLanguage');
};
require.config({
config: {
i18n: {
locale: locale.getLanguage()
}
}
});
settingView.js
define(['compiled/settingTmpl','i18n!nls/setting'
], function (SettingTmpl,setting) {
'use strict';
var SettingView = Backbone.View.extend({
events: {
"change #languageSelect": "changeLocale"
},
initialize: function () {
WellNation.helper.log("Setting view initialize");
this.render();
},
changeLocale: function (e) {
var locale = e.currentTarget.value;
WellNation.locale.setLanguage(locale);
this.render();
},
render: function () {
this.$el.html(SettingTmpl({speak:setting}));
return this;
}
});
return SettingView;
});
设置Tmpl.handlebars
<div class="row">
<label>{{speak.language}}</label>
<select id="languageSelect">
<option value="en-us">English (United States)</option>
<option value="fr-fr">Francais (France)</option>
</select>
</div>
nls/fr-fr/setting.js
define({
"language" : "langue"
});
nls/setting.js
define({
"root" : {
"language" : "Language"
},
"fr-fr" : true // The system will accept French
});
最佳答案
根据this所以问题和this github issue无法使用 i18n.js 在运行时更改区域设置。
从官方文档来看,并不清楚我们是否可以在运行时使用它:“RequireJS 将使用浏览器的 navigator.language 或 navigator.userLanguage 属性来确定要使用的区域设置值my/nls/colors,因此您的应用程序不必更改。如果您喜欢设置区域设置,您可以使用模块配置将区域设置传递给插件"
因此,经过一些研究并遍历 i18n.js 源代码后,我发现最好的解决方案是保持相同的结构并使用 location.reload()
。
关于javascript - 在 Backbone 应用程序中重新加载主干 View 和 i18n 翻译文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26650501/