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

Ole*_*ats 43 javascript node.js express

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

在客户端,它很容易:

var language = window.navigator.userLanguage || window.navigator.language
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 69

您可以使用req.headers ["accept-language"]来获取用户在其浏览器中设置的语言/区域设置.

为了便于支持,您可能需要查看区域设置模块.

  • @JoachimIsaksson英国不是英国人,那将是'en-gb'.可能是英国的乌克兰人.前两个字母总是语言,而不是区域. (14认同)
  • @OlegDats语言环境模块将帮助您解析它,但基本上它意味着,用户想要语言环境(按优先顺序)英国(英国英语),ru(俄语),en-us(美国英语),en(普通英语) ),q是权重因子,q越高意味着更高的偏好. (5认同)
  • req.headers["accept-language"] 返回:"uk,ru;q=0.8,en-us;q=0.5,en;q=0.3" 选择的语言是 "uk"。如何从列表中获取这种语言? (2认同)

小智 25

request.acceptsLanguages将包含解析版本request.headers['accept-language'].

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

  • 底层包是谈判者https://github.com/federomero/negotiator (2认同)
  • 在Express 4中,您可以使用`req.acceptedLanguages`来检查用户是否接受单个或一组语言.看看:http://blog.hubii.com/dev-detecting-header-language-on-express-js/ (2认同)

jgr*_*cha 24

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

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');
        ...
    }
});
Run Code Online (Sandbox Code Playgroud)

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

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


Ned*_*rov 5

用于设置请求语言并全局使用它的中间件:

\n
// place this middleware before declaring any routes\napp.use((req, res, next) => {\n    // This reads the accept-language header\n    // and returns the language if found or false if not\n    const lang = req.acceptsLanguages('bg', 'en')\n    \n    if (lang) { // if found, attach it as property to the request\n        req.lang = lang\n    } else { // else set the default language\n        req.lang = 'en'\n    }\n\n    next()\n})\n
Run Code Online (Sandbox Code Playgroud)\n

现在您可以访问“req.lang”

\n
app.get('/', (req, res) => {\n    res.send(`The request language is '${req.lang}'`)\n})\n
Run Code Online (Sandbox Code Playgroud)\n

使用翻译的示例

\n
const translate = {\n    en: {\n        helloWorld: "Hello World!"\n    },\n    bg: {\n        helloWorld: "\xd0\x97\xd0\xb4\xd1\x80\xd0\xb0\xd0\xb2\xd0\xb5\xd0\xb9 \xd0\xa1\xd0\xb2\xd1\x8f\xd1\x82!"\n    }\n}\napp.get('/hello-world', (req, res) => {\n    res.send(translate[req.lang].helloWorld)\n})\n
Run Code Online (Sandbox Code Playgroud)\n