Node.js,Socket.io:如何获取客户端浏览器的语言?

我正在尝试获取用户使用的语言,以便使用socket.io和node.js为播放video提供正确的声音文件。 我是一个总的初学者与node.js和socket.io。 我用“navigator.language”在客户端获得了语言,并且想要在连接/握手到socket.io时发送它。

var language = navigator.language; var socket = io.connect('http://localhost:1337', { query: language }); 

而在服务器端:

 io.set('authorization', function(handshakeData, cb) { console.log(handshakeData.query); cb(null, true);}); 

但是我得到的是:

 {'en-US': 'undefined', t: '1396002389530'} 

我想第二个属性“t”是已添加的握手标识。 但是,如何访问“en-US”?


我的第二种方法是使用模块“locale”( https://github.com/jed/locale ),但是当我使用它时,我总是得到相同的语言,所以我觉得它总是findSERVER的语言。 我想我在请求/响应处理程序中使用它,当一个新的客户端请求该页面,并发送其http头。

 var handler = function(req, res) { lang = new locale.Locales(req.headers["accept-language"]); lang=lang.best(supported); console.log(pf); } 

我希望你得到我想要做的,也许知道一个更好的解决scheme。 先谢谢你。

你快到了。 做这个:

 var socket = io.connect('http://localhost:1337', { lang: language }); 

而不是{query: language}因为查询是一个保留的对象。

你可以通过这样做来访问它:

 io.set('authorization', function(handshakeData, cb) { console.log(handshakeData.query.lang); cb(null, true);}); 

你也可以像这样访问它:

 io.sockets.on('connection', function(socket){ console.log(socket.handshake.query.lang); }); 

如果你不想追加语言variables来query那么你可以通过这个访问语言:

 io.sockets.on('connection', function(socket){ console.log(socket.handshake.headers['accept-language']); });