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

时间:2012-08-07 11:59:04

标签: javascript node.js express

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

在客户端,这很简单:

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

5 个答案:

答案 0 :(得分:61)

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

为了便于支持,您可能需要查看locale module

答案 1 :(得分:24)

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

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

答案 2 :(得分: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');
        ...
    }
});

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

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

答案 3 :(得分:1)

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

linkBuilder.navigationInfoParameters = DynamicLinkNavigationInfoParameters()
linkBuilder.navigationInfoParameters?.isForcedRedirectEnabled = true

现在你可以访问'req.lang'

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

    next()
})

使用翻译的示例

app.get('/', (req, res) => {
    res.send(`The request language is '${req.lang}'`)
})

答案 4 :(得分:0)

您需要在req.headers["accept-language"]中解析字符串。这将为您提供客户端首选语言的优先级列表。如果您的语言受支持,您也可以查看req.acceptsLanguages(lang [, ...])

我强烈建议您使用express-request-language进行任何语言匹配工作,因为第一次完成它可能非常困难。

大多数情况下,匹配语言是不够的。用户可能想要更改首选语言。 express-request-language可帮助您将首选语言存储在Cookie中,它还会为您的服务器提供更改首选语言的URL路径。

以上所有功能都只需几行代码即可完成:

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

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