???????為了順應(yīng)國際化的腳步,有時會碰到多語言切換的需求晕窑,例如Amazon官網(wǎng)上的這一幕
???????那么為了協(xié)商使用何種語言顯示頁面抑片,就可以通過
Accept-Language
檢測瀏覽器的語言(每種語言類型用逗號進行分隔,其權(quán)重值由分號進行分隔杨赤,未設(shè)置的權(quán)重默認為1)接著用代碼簡單模擬一遍實現(xiàn)流程~~
- 準備好語言包后首先將
Accept-Language
解析成一個個對象并存入數(shù)組當中敞斋。每個對象都含有兩個屬性:語言類型和權(quán)重值 - 按照權(quán)重值從大到小對數(shù)組進行排序
- 依次將數(shù)組中每個對象的語言類型與服務(wù)端的語言包進行匹配,一旦匹配成功則結(jié)束遍歷疾牲,否則按默認語言類型返回數(shù)據(jù)
let http = require('http');
let server = http.createServer(request);
server.listen(8080);
// 簡單版的語言包
const lanPack = {
en: {
title: 'Hey,bro'
},
zh: {
title: '嘿,兄弟'
},
default: 'en'
}
function request(req, res) {
// 實現(xiàn)服務(wù)器和客戶端的協(xié)議植捎,選擇客戶端最想要的,并且服務(wù)器剛好有的
// Accept-Language: en,zh-CN;q=0.9,zh;q=0.8
let acceptLanguage = req.headers['accept-language'];
if (acceptLanguage) {
const lans = acceptLanguage.split(',').map(function (item) {
let values = item.split(';');
let name = values[0];
let q = values[1] ? parseFloat(values[1].split('=')[1]) : 1;
return {
name, q
}
}).sort((a, b) => b.q - a.q);
let lan = lanPack.default;// 默認語種
console.log(lans); // [ { name: 'en', q: 1 }, { name: 'zh-CN', q: 0.9 }, { name: 'zh', q: 0.8 } ]
for (let i = 0; i < lans.length; i++) {
// 如果說此語言在語言包里有阳柔,那么就使用此語言
if (lanPack[lans[i].name]) {
lan = lans[i].name;
break;
}
}
res.end(lanPack[lan].title);
}
}
最后焰枢,補充一下,如果想要修改Accept-Language
中的優(yōu)先順序盔沫,可以參考Chrome瀏覽器如何修改Accept Language医咨?