在 Socket.io 中访问 i18n
Access to i18n inside Socket.io
我使用 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
。我该如何解决这个问题?
如果您查看 i18n-2 的 expressBind method,它所做的只是将 i18n
属性 附加到请求对象以及响应对象的一些方法代理(在我假设的模板中使用)。你可以对你的客户做同样的事情。
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 相同的方法,但我个人更喜欢第一种方法。
我使用 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
。我该如何解决这个问题?
如果您查看 i18n-2 的 expressBind method,它所做的只是将 i18n
属性 附加到请求对象以及响应对象的一些方法代理(在我假设的模板中使用)。你可以对你的客户做同样的事情。
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 相同的方法,但我个人更喜欢第一种方法。