【问题标题】:Node.js, Socket.io: How to get client browser-language?Node.js、Socket.io:如何获取客户端浏览器语言?
【发布时间】:2014-03-28 10:38:16
【问题描述】:

我正在尝试获取用户使用的语言,以便使用 socket.io 和 node.js 为正在播放的视频提供正确的声音文件。 我是 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”是已经添加的握手ID。但是我如何访问“en-US”?


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

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

我希望你能得到我想要做的事情,并且可能知道更好的解决方案。 提前谢谢你。

【问题讨论】:

    标签: javascript node.js sockets socket.io locale


    【解决方案1】:

    你快到了。 这样做:

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

    如果您不想将语言变量附加到query,那么您可以通过以下方式访问该语言:

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

    【讨论】:

    • 我试过了,但它返回“未定义”,因为它以某种方式重新排列了数组,如上所示“{'en-US': 'undefined', t: '1396002389530'}”。所以实际的语言是变量名,它的值是“未定义的”。我不知道为什么。我附加到“handshakeData.query”中的内容(如 lang 或 blabla)甚至都没有关系,它始终未定义。所以找不到名字
    • 信不信由你,它在我的电脑上工作。 navigator.language 在您的浏览器中是否也未定义?
    • 真的吗?那很奇怪。您能想出另一种解决方案如何获取用户语言设置吗?
    • 我用你的最后一种方法得到了它,但我得到 "de-DE,de;q0.8,en-US;q=0.6,en;q=04" 如何过滤语言,只需分割该字符串的前 2 个字符?
    • 是的,只要用 socket.io 谷歌视频流,你会发现很多。有诸如 socket.io 流和套接字流之类的模块可以满足你的目的
    猜你喜欢
    • 1970-01-01
    • 2015-10-21
    • 2012-08-04
    • 2016-05-08
    • 1970-01-01
    • 2020-02-12
    • 2015-03-19
    • 2014-10-01
    • 2018-03-29
    相关资源
    最近更新 更多