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']); });