Commit 30740d73 authored by 郑磊's avatar 郑磊

更新语言判断逻辑

parent fb6c9380
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
{
"name": "fj-captcha-vue",
"version": "1.0.4",
"version": "1.0.5",
"type": "module",
"main": "./esm/index.js",
"typings": "./esm/index.d.ts",
......
......@@ -11,11 +11,6 @@ const translations: Record<string, Record<string, string>> = {
'zh-tw': zhTw,
}
/**
* 可用的语言标识
*/
const availableLanguages = Object.keys(translations)
/**
* 默认的语言标识
*/
......@@ -25,12 +20,16 @@ const DEFAULT_LANGUAGE = 'zh-cn'
* 标准化语言标识
* @param language
*/
function normalizeLanguage(language: string): string {
const parts = language.split(/_|-/)
if (parts.length > 2) {
parts.splice(1, parts.length - 2)
function normalizeLanguage(language: string) {
const parts = language.toLowerCase().split(/_|-/)
const lang = parts[0]
const country = parts.length > 1 ? parts[parts.length - 1] : undefined
const variant = parts.length > 2 ? parts[1] : undefined
return {
lang,
country,
variant,
}
return parts.map((t) => t.toLowerCase()).join('-')
}
/**
......@@ -45,28 +44,32 @@ export function getLanguage(language?: string): string {
? navigator.languages
: [DEFAULT_LANGUAGE]
languages = languages.map((t) => normalizeLanguage(t))
const langs = languages.map((t) => normalizeLanguage(t))
for (let language of languages) {
for (let lang of langs) {
//如果是英文那就返回英文
if (language === 'en' || language.startsWith('en-')) {
return 'en'
}
if (lang.lang === 'en') return 'en'
if (lang.lang === 'zh') {
//有变体优先判断变体
if (lang.variant === 'hans') {
return 'zh-cn'
} else if (lang.variant === 'hant') {
return 'zh-tw'
}
//如果是中文那就判断是简体还是繁体
if (language === 'zh' || language.startsWith('zh-')) {
if (availableLanguages.includes(language)) {
return language
//没有变体判断国家标识
if (lang.country === 'cn') {
return 'zh-cn'
} else if (lang.country === 'tw') {
return 'zh-tw'
}
//中文就默认用简体
//没有变体也没有国家标识就用简体中文
return 'zh-cn'
}
//都不是就继续循环
}
//到这里表示既不是英文,也不包含任何中文标识,那就用英文
return 'en'
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment