35 lines
953 B
JavaScript
35 lines
953 B
JavaScript
const languageCodes = Object.keys(require('../lib/languages'))
|
|
|
|
const codes = {
|
|
zh: 'cn',
|
|
'zh-hk': 'cn',
|
|
'zh-cn': 'cn',
|
|
'zh-sq': 'zh-SQ',
|
|
'zh-tw': 'zh-TW'
|
|
}
|
|
|
|
function convertLanguageCode (language) {
|
|
const languageLowerCase = language.toLowerCase()
|
|
return codes[languageLowerCase] || languageLowerCase.substring(0, 2)
|
|
}
|
|
|
|
module.exports = function detectLanguage (req, res, next) {
|
|
// determine language code from first part of URL, or default to English
|
|
// /en/articles/foo
|
|
// ^^
|
|
const firstPartOfPath = req.path.split('/')[1]
|
|
|
|
req.language = languageCodes.includes(firstPartOfPath) ? firstPartOfPath : 'en'
|
|
// Detecting browser language by user preference
|
|
if (req.headers['accept-language']) {
|
|
const browserLanguage = req.headers['accept-language'].split(/\s*[,;]\s*/, 1)[0]
|
|
try {
|
|
req.userLanguage = convertLanguageCode(browserLanguage)
|
|
} catch (err) {
|
|
console.log(err)
|
|
}
|
|
}
|
|
|
|
return next()
|
|
}
|