我使用tap-i18n将我的网站国际化。
我想让用户更改他/她选择的语言。
我可以在文件client/setLanguage.js
中更改启动语言:
getUserLanguage = function () {
return "fr";
};
Meteor.startup(function () {
var language = getUserLanguage();
TAPi18n.setLanguage(newLanguage).done(function () {
console.log("language changed");
}).fail(function (error_message) {
console.log(error_message);
});
});
但我想让语言设置遵循用户选择的内容,而不是仅仅在启动时手动设置语言。
我是否应该创建一个包含可以使用
更新语言的表单的页面Meteor.users.update({ userId: userId }, { $set: { language: newLanguage } }
然后设置
var newLanguage = Meteor.findOne(Meteor.userId()).language;
TAPi18n.setLanguage(newLanguage);
在客户端的某个地方?
我只是认为这段代码有点不足,而且经常进行数据库调用是否有效?我不应该只在启动时和设置页面上设置语言吗?
答案 0 :(得分:0)
用户选择语言的最佳方式是在页面顶部选择输入:
lang http://www.acclaro.com/assets/images/blog/Image/international%20website%20nav%20drop%20down.png
您可以为onChange设置一个事件选择语言并保存默认语言:
Meteor.users.update({ userId: userId }, { $set: { language: newLanguage }});
TAPi18n.setLanguage(newLanguage);
如果用户离开页面/应用程序,您可以在启动时设置其默认语言,并在他返回时设置其默认语言:
getUserLanguage = function () {
var userLang = 'fr';
if (Meteor.user()) {
userLang = Meteor.user().language
}
return userLang;
};
Meteor.startup(function () {
var language = getUserLanguage();
TAPi18n.setLanguage(language).done(function () {
console.log("language changed");
}).fail(function (err) {
console.log(err);
});
});
但您必须发布/订阅用户数据(语言):
//null parameter will cause automatic publish, you don't need to subscribe
Meteor.publish(null, function() {
return Meteor.users.find(
{ _id: this.userId },
{ fields: { language: 1 }}
);
});