如何在Meteor中设置用户语言设置?

时间:2015-07-17 08:27:19

标签: javascript node.js meteor internationalization

我使用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);

在客户端的某个地方?

我只是认为这段代码有点不足,而且经常进行数据库调用是否有效?我不应该只在启动时和设置页面上设置语言吗?

1 个答案:

答案 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 }}
  );
});