Javascript 访问Socket.io内部的i18n

Javascript 访问Socket.io内部的i18n,javascript,node.js,express,socket.io,i18next,Javascript,Node.js,Express,Socket.io,I18next,我使用的国际化方法如下: router.get('/route', function (req, res, next) { res.redirect('/route/?lang=' + req.i18n.getLocale()); }); io.on('connection', function(client){ client.on('event', function(data){ ... });

我使用的国际化方法如下:

    router.get('/route', function (req, res, next) {
      res.redirect('/route/?lang=' + req.i18n.getLocale());
   });
    io.on('connection', function(client){ 
        client.on('event', function(data){
          ...
        });
    });
现在,我想访问Socket.io块内部的
req.i18n
。我使用Socket.io的方式如下:

    router.get('/route', function (req, res, next) {
      res.redirect('/route/?lang=' + req.i18n.getLocale());
   });
    io.on('connection', function(client){ 
        client.on('event', function(data){
          ...
        });
    });
但是在这里,我不访问
req
来使用
i18n
。如何解决这个问题?

如果您查看i18n-2的示例,它所做的只是将一个
i18n
属性附加到请求对象以及响应对象的一些方法代理(我假设在模板中使用)。你可以对你的客户做同样的事情

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

您还可以使用fancier为客户提供i18n所拥有的相同方法,但我个人更喜欢第一种方法

旁注:如果要获取用户的默认区域设置,必须手动将其传递回服务器端套接字。你可以使用这个对象来帮助解决这个问题。一天之后,我无法解决这个问题。要知道,express和Socket.io的分离对我来说是个大问题。我有一个工作良好的网站,通过Socket.io有一些功能。但我需要它们共享相同的请求和响应,才能使用i18n-2之类的功能。现在,我像您所说的那样设置了i18n-2,但是client.i18.getLocale()为我提供的默认语言环境与express当时的不同。我怎样才能克服这个问题?我不明白你的旁注。你应该检查一下,或者如果你需要全面的功能