用戶請求某個頁面,我想知道(在服務器端)他/她的瀏覽器中的語言是什麼。所以我可以使用正確的消息來呈現模板。
如何在node.js(express.js)中獲取瀏覽器語言?
在客戶端很容易:
var language = window.navigator.userLanguage || window.navigator.language
用戶請求某個頁面,我想知道(在服務器端)他/她的瀏覽器中的語言是什麼。所以我可以使用正確的消息來呈現模板。
如何在node.js(express.js)中獲取瀏覽器語言?
在客戶端很容易:
var language = window.navigator.userLanguage || window.navigator.language
您可以使用req.headers [「接受語言」]獲得語言/區域的用戶已在其瀏覽器中設置。
要獲得更容易的支持,您可能需要查看locale module。
request.acceptsLanguages
將包含request.headers['accept-language']
的解析版本。
隨着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');
...
}
});
要獲得所有接受語言列表,使用快遞4.x版本,也可以使用該模塊accepts。
var express = require('express'), accepts = require('accepts');
app.get('/translation', function(request, response) {
console.log(accepts(request).languages());
...
});
實際上,'req.acceptsLanguages'只是使用接受模塊下的「應用」所以如果你不傳遞任何參數,你會得到相同的語言列表(作爲首選項的數組)。請注意,雖然沒有文檔化的行爲,但Express文檔聲稱需要'lang'參數。 – Inkling 2016-01-20 03:28:12
您需要解析字符串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
以上)。
req.headers [「accept-language」]返回:「uk,ru; q = 0.8,en-us; q = 0.5,en; q = 0.3」所選語言爲「uk」。如何從列表中獲得這種語言? – 2012-08-07 12:15:21
@OlegDats語言環境模塊將幫助您解析該問題,但基本上這意味着,用戶需要的語言環境(優先順序)英國英語,俄語ru,俄語en,美國英語en英語),q是權重因子,q越高意味着偏好越高。 – 2012-08-07 12:19:01
@JoachimIsaksson英國不是英語,那將是'en-gb'。可能英國人是烏克蘭人。前兩個字母總是lanuages,而不是地區。 – UpTheCreek 2012-09-04 06:45:07