访问Socket.io中的i18n

时间:2015-06-13 18:09:10

标签: javascript node.js express socket.io i18next

我使用i18n-2进行国际化,如下所示:

    router.get('/route', function (req, res, next) {
      res.redirect('/route/?lang=' + req.i18n.getLocale());
   });

现在,我想访问Socket.io块中的req.i18n。我像这样使用Socket.io:

    io.on('connection', function(client){ 
        client.on('event', function(data){
          ...
        });
    });

但是在这里,我无法访问req来使用i18n。我怎么解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果查看i18n-2的expressBind method,它所做的就是将i18n属性附加到请求对象以及响应对象的一些方法代理(用于模板I)会假设)。您可以与客户做同样的事情。

var I18n = require('i18n-2');
io.on('connection', function(client) {
  client.i18n = new I18n(/* options */);
  client.on('event', function(data) {
    // use client.i18n.__
  });
});

你也可以变得更加漂亮并使用util.inherits给客户提供与i18n相同的方法,但我个人更喜欢第一种方式。