如何为节点服务器上的不同用户创建单独的i18next实例?

时间:2015-12-29 13:36:15

标签: node.js i18next

我是node.js的新手。我在节点应用程序中使用i18next进行国际化。这是代码 utils.js

i18n.use(Backend).init({
  debug: true,
  load: ['ar','en'],
  fallbackLng: 'en',
      backend: {
      loadPath: path.join(__dirname,'/{{lng}}/{{ns}}.json')
      },
      getAsync:false
}, (err, t) => {
      return t;
});
exports.i18n=i18n;

对于每个请求,我通过cookie检查用户语言,如果不匹配,我试图强制翻译成该特定语言。

以下是摘录

app.all('*',function(req,res,next){
    var lng = utils.getLanguage;
    lng(req,res,function(data){
        var i18n = utils.i18n;
        i18n(function(i18n){
            var nodeLanguage = i18n.options.lng||i18n.options.fallbackLng;
            if(nodeLanguage == data){
                next();
            }
            else{
                console.log("not same");
                i18n.options.lng = data;
                i18n.init(i18n.options,function(){
                    next();
                });
            }
        });
    });
});

此代码对我来说很好,因为我是单个用户。但是如果在不同的浏览器中点击相同的网址,它会以用户选择的语言显示,但i18next正在初始化为最新用户选择的语言。例如: -

case1 :在浏览器-1中,选择了 en ,然后i18next.init方法将语言设置为 en

case2 :在浏览器-2中,选择了 fr ,然后i18next.init方法设置为 fr

如果我在浏览器-1中点击相同的URL,则再次调用i18next.init方法。 如何为个别用户创建单独的i18next实例,以避免调用init方法继续?请帮帮我。

感谢。

1 个答案:

答案 0 :(得分:0)

使用中间件快递:https://github.com/i18next/i18next-express-middleware你需要的就是那里,包括。语言检测。