我在我的应用程序中使用Backbone.js,在我的应用程序中使用i18next插件作为语言切换功能。当我将值传递给lng
函数调用中的init
选项时,它会正确翻译我的页面。
现在我想通过语言选择器动态执行此操作。我有四种语言<select>
,我想将所选语言的值传递给init函数的lng
选项。
这是我的代码:
HTML
<div class="col-xs-6>
<select class="form-control language-selector">
<option value="de">Deutsch</option>
<option value="en">English</option>
<option value="fr">Français</option>
<option value="it">Italiano</option>
</select>
</div>
的JavaScript
i18next.init({
debug: true,
languages: ['de','en','fr','it'],
lng: 'de',
fallbackLng: false,
load: 'current',
resources: resBundle
}, function(err, t){
});
'change .language-selector': function(e){
e.preventDefault();
i18next.setLng($(e.target).val(), (err, t) => {
console.log(arguments);
this.render();
});
}
答案 0 :(得分:7)
更改语言的功能是i18next.changeLanguage
。您只需要拨打电话,无需再次拨打init
或&#34;更改初始选项&#34; ,因为选项是i18next内的属性,它们通过API(函数)进行管理。
i18next.init({
lng: 'en',
fallbackLng: ['en', 'de', 'fr', 'it'],
});
// catch the event and make changes accordingly
i18next.on('languageChanged', function(lng) {
// E.g. set the moment locale with the current language
moment.locale(lng);
// then re-render your app
app.render();
});
在带语言选择器的视图中:
var LangView = Backbone.View.extend({
events: {
'change .language-selector': 'onLangChange',
},
onLangChange: function(e) {
// only change the language
i18next.changeLanguage(e.currentTarget.value);
}
});
var app = {};
app.translations = {
"fr": {
"translation": {
"label": "Choisir une langue",
"fr": "Français",
"en": "Anglais"
}
},
"en": {
"translation": {
"label": "Choose a language",
"fr": "French",
"en": "English"
}
}
};
i18next.init({
lng: 'en',
fallbackLng: ['en', 'fr'],
resources: app.translations,
});
// catch the event and make changes accordingly
i18next.on('languageChanged', function(lng) {
// then re-render your app
app.view.render();
});
var LangView = Backbone.View.extend({
template: _.template($('#selector').html()),
langTemplate: _.template('<option value="<%= value %>"><%= name %></option>'),
events: {
'change .language-selector': 'onLangChange',
},
render: function() {
this.$el.html(this.template({
label: i18next.t('label')
}));
// cache the jQuery object of the select
this.$selector = this.$('.language-selector');
// then dynamically populate it
this.populateSelector();
return this;
},
populateSelector: function() {
// for each languages in i18next, add an option to the select
_.each(i18next.languages, this.addLanguage, this);
},
addLanguage: function(lang) {
// adding the option with the translated names
this.$selector.append(this.langTemplate({
value: lang,
name: i18next.t(lang),
}));
},
onLangChange: function(e) {
// change the language
i18next.changeLanguage(e.currentTarget.value);
}
});
app.view = new LangView();
$('#app').html(app.view.render().el);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.3.3/backbone-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next/4.1.1/i18next.min.js"></script>
<div id="app"></div>
<script type="text/template" id="selector">
<label>
<%=label %>
</label>
<select class="form-control language-selector"></select>
</script>
&#13;
关于翻译语言名称,请查看Language of language names in the language selector?
答案 1 :(得分:1)
$(document).ready(function () {
i18n.init({
"lng": 'en',
"resStore": resources,
"fallbackLng" : 'en'
}, function (t) {
$(document).i18n();
});
'change .language-selector': function(e){
e.preventDefault();
i18n.init({
lng: $(e.target).val()}, (err, t) => {
console.log(arguments);
$(document).i18n();
});
}
}
我不知道backbone.js。 Working solution in normal JavaScript is here