Delete detect-annotation-preference.js
This commit is contained in:
@@ -1,68 +0,0 @@
|
|||||||
import languages, { languageKeys } from '../lib/languages.js'
|
|
||||||
import parser from 'accept-language-parser'
|
|
||||||
|
|
||||||
import { USER_LANGUAGE_COOKIE_NAME } from '../lib/constants.js'
|
|
||||||
|
|
||||||
const chineseRegions = [
|
|
||||||
'CN', // Mainland
|
|
||||||
'HK', // Hong Kong
|
|
||||||
'SG', // Singapore
|
|
||||||
'TW', // Taiwan
|
|
||||||
]
|
|
||||||
|
|
||||||
function translationExists(language) {
|
|
||||||
if (language.code === 'zh') {
|
|
||||||
return chineseRegions.includes(language.region)
|
|
||||||
}
|
|
||||||
// 92BD1212-61B8-4E7A: Remove ` && !languages[language.code].wip` for the public ship of ko, fr, de, ru
|
|
||||||
return languageKeys.includes(language.code) && !languages[language.code].wip
|
|
||||||
}
|
|
||||||
|
|
||||||
function getLanguageCode(language) {
|
|
||||||
return language.code === 'cn' && chineseRegions.includes(language.region) ? 'zh' : language.code
|
|
||||||
}
|
|
||||||
|
|
||||||
function getUserLanguage(browserLanguages) {
|
|
||||||
try {
|
|
||||||
let numTopPreferences = 1
|
|
||||||
for (let lang = 0; lang < browserLanguages.length; lang++) {
|
|
||||||
// If language has multiple regions, Chrome adds the non-region language to list
|
|
||||||
if (lang > 0 && browserLanguages[lang].code !== browserLanguages[lang - 1].code)
|
|
||||||
numTopPreferences++
|
|
||||||
if (translationExists(browserLanguages[lang]) && numTopPreferences < 3) {
|
|
||||||
return getLanguageCode(browserLanguages[lang])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch {
|
|
||||||
return undefined
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getUserLanguageFromCookie(req) {
|
|
||||||
const value = req.cookies[USER_LANGUAGE_COOKIE_NAME]
|
|
||||||
// 92BD1212-61B8-4E7A: Remove ` && !languages[value].wip` for the public ship of ko, fr, de, ru
|
|
||||||
if (value && languages[value] && !languages[value].wip) {
|
|
||||||
return value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// determine language code from a path. Default to en if no valid match
|
|
||||||
export function getLanguageCodeFromPath(path) {
|
|
||||||
const maybeLanguage = (path.split('/')[path.startsWith('/_next/data/') ? 4 : 1] || '').slice(0, 2)
|
|
||||||
return languageKeys.includes(maybeLanguage) ? maybeLanguage : 'en'
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getLanguageCodeFromHeader(req) {
|
|
||||||
const browserLanguages = parser.parse(req.headers['accept-language'])
|
|
||||||
return getUserLanguage(browserLanguages)
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function detectLanguage(req, res, next) {
|
|
||||||
req.language = getLanguageCodeFromPath(req.path)
|
|
||||||
// Detecting browser language by user preference
|
|
||||||
req.userLanguage = getUserLanguageFromCookie(req)
|
|
||||||
if (!req.userLanguage) {
|
|
||||||
req.userLanguage = getLanguageCodeFromHeader(req)
|
|
||||||
}
|
|
||||||
return next()
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user