如何获得node.js(express.js)中的浏览器语言?

用户请求某个页面,我想知道(在服务器端)他/她的浏览器中的语言是什么。 所以我可以使用正确的消息来呈现模板。

在客户端很容易:

var language = window.navigator.userLanguage || window.navigator.language 

您可以使用req.headers [“accept-language”]来获取用户在浏览器中设置的语言/语言环境。

为了更容易的支持,您可能需要查看一个语言环境模块 。

request.acceptsLanguages将包含一个parsing版本的request.headers['accept-language']

请参阅: http : //expressjs.com/en/api.html#req.acceptsLanguages

使用Express 4.x,您可以使用req.acceptsLanguages(lang [,…])中的构build来检查某些语言是否被接受。

 var express = require('express'); app.get('/translation', function(request, response) { var lang = request.acceptsLanguages('fr', 'es', 'en'); if (lang) { console.log('The first accepted of [fr, es, en] is: ' + lang); ... } else { console.log('None of [fr, es, en] is accepted'); ... } }); 

要获得所有可用的语言列表,使用Express 4.x,您可以使用模块接受 。

 var express = require('express'), accepts = require('accepts'); app.get('/translation', function(request, response) { console.log(accepts(request).languages()); ... }); 

您需要parsingreq.headers["accept-language"]的string。 哪个会给你一个客户端首选语言的优先列表。 如果你的语言被支持req.acceptsLanguages(lang [, ...])你也可以检查req.acceptsLanguages(lang [, ...])

我强烈build议使用expression请求语言来做任何语言匹配工作,因为要在第一时间把它做好是很困难的。

大多数情况下,匹配一种语言是不够的。 用户可能想要更改首选语言。 express-request-language帮助您将首选语言存储在Cookie中,同时也为您的服务器提供了URLpath来更改首选语言。

以上所有function都可以通过几行代码完成:

 app.use(requestLanguage({ languages: ['en-US', 'zh-CN'], cookie: { name: 'language', options: { maxAge: 24*3600*1000 }, url: '/languages/{language}' } })); 

如果不匹配,则中间件也将匹配默认语言(上面的en-US )。