mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-13 23:16:47 +00:00
多语言适配
This commit is contained in:
48
lib/lang.js
48
lib/lang.js
@@ -22,34 +22,36 @@ export default lang
|
||||
|
||||
/**
|
||||
* 获取当前语言字典
|
||||
* 提升兼容性
|
||||
* @returns 不同语言对应字典
|
||||
*/
|
||||
export function generateLocaleDict(langString) {
|
||||
let userLocale = lang['en-US']
|
||||
const supportedLocales = Object.keys(lang)
|
||||
let userLocale
|
||||
|
||||
switch (langString.toLowerCase()) {
|
||||
case 'zh-cn':
|
||||
case 'zh-sg':
|
||||
userLocale = lang['zh-CN']
|
||||
break
|
||||
case 'zh-hk':
|
||||
userLocale = lang['zh-HK']
|
||||
break
|
||||
case 'zh-tw':
|
||||
userLocale = lang['zh-TW']
|
||||
break
|
||||
case 'fr':
|
||||
userLocale = lang['fr-FR']
|
||||
break
|
||||
case 'tr':
|
||||
userLocale = lang['tr-TR']
|
||||
break
|
||||
case 'ja':
|
||||
userLocale = lang['ja-JP']
|
||||
break
|
||||
default:
|
||||
userLocale = lang['en-US']
|
||||
// 将语言字符串拆分为语言和地区代码,例如将 "zh-CN" 拆分为 "zh" 和 "CN"
|
||||
const [language, region] = langString.split(/[-_]/)
|
||||
|
||||
// 优先匹配语言和地区都匹配的情况
|
||||
const specificLocale = `${language}-${region}`
|
||||
if (supportedLocales.includes(specificLocale)) {
|
||||
userLocale = lang[specificLocale]
|
||||
}
|
||||
|
||||
// 然后尝试匹配只有语言匹配的情况
|
||||
if (!userLocale) {
|
||||
const languageOnlyLocales = supportedLocales.filter(locale => locale.startsWith(language))
|
||||
if (languageOnlyLocales.length > 0) {
|
||||
userLocale = lang[languageOnlyLocales[0]]
|
||||
}
|
||||
}
|
||||
|
||||
// 如果还没匹配到,则返回最接近的语言包
|
||||
if (!userLocale) {
|
||||
const fallbackLocale = supportedLocales.find(locale => locale.startsWith('en'))
|
||||
userLocale = lang[fallbackLocale]
|
||||
}
|
||||
|
||||
return mergeDeep({}, lang['en-US'], userLocale)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user