|
import zhCN from './lang/zh-CN' |
|
import enUS from './lang/en-US' |
|
import zhHK from './lang/zh-HK' |
|
import zhTW from './lang/zh-TW' |
|
import frFR from './lang/fr-FR' |
|
import trTR from './lang/tr-TR' |
|
import jaJP from './lang/ja-JP' |
|
import cookie from 'react-cookies' |
|
import { getQueryVariable, isBrowser, mergeDeep } from './utils' |
|
|
|
|
|
|
|
|
|
|
|
const LANGS = { |
|
'en-US': enUS, |
|
'zh-CN': zhCN, |
|
'zh-HK': zhHK, |
|
'zh-TW': zhTW, |
|
'fr-FR': frFR, |
|
'tr-TR': trTR, |
|
'ja-JP': jaJP |
|
} |
|
|
|
export default LANGS |
|
|
|
|
|
|
|
|
|
|
|
|
|
export function generateLocaleDict(langString) { |
|
const supportedLocales = Object.keys(LANGS) |
|
let userLocale |
|
|
|
|
|
const [language, region] = langString?.split(/[-_]/) |
|
|
|
|
|
const specificLocale = `${language}-${region}` |
|
if (supportedLocales.includes(specificLocale)) { |
|
userLocale = LANGS[specificLocale] |
|
} |
|
|
|
|
|
if (!userLocale) { |
|
const languageOnlyLocales = supportedLocales.filter(locale => locale.startsWith(language)) |
|
if (languageOnlyLocales.length > 0) { |
|
userLocale = LANGS[languageOnlyLocales[0]] |
|
} |
|
} |
|
|
|
|
|
if (!userLocale) { |
|
const fallbackLocale = supportedLocales.find(locale => locale.startsWith('en')) |
|
userLocale = LANGS[fallbackLocale] |
|
} |
|
|
|
return mergeDeep({}, LANGS['en-US'], userLocale) |
|
} |
|
|
|
|
|
|
|
|
|
|
|
export function initLocale(lang, locale, changeLang, changeLocale) { |
|
if (isBrowser) { |
|
const queryLang = getQueryVariable('lang') || loadLangFromCookies() |
|
let currentLang = lang |
|
if (queryLang && queryLang !== 'undefined' && queryLang !== lang) { |
|
currentLang = queryLang |
|
} |
|
|
|
changeLang(currentLang) |
|
saveLangToCookies(currentLang) |
|
|
|
const targetLocale = generateLocaleDict(currentLang) |
|
if (JSON.stringify(locale) !== JSON.stringify(currentLang)) { |
|
changeLocale(targetLocale) |
|
} |
|
} |
|
} |
|
|
|
|
|
|
|
|
|
export const loadLangFromCookies = () => { |
|
return cookie.load('lang') |
|
} |
|
|
|
|
|
|
|
|
|
|
|
export const saveLangToCookies = (lang) => { |
|
cookie.save('lang', lang, { path: '/' }) |
|
} |
|
|