feat:重构UI
This commit is contained in:
76
apps/web/lib/languages.ts
Normal file
76
apps/web/lib/languages.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
import languageMap from './languages.zh.json'
|
||||
|
||||
export type LanguageOption = {
|
||||
code: string
|
||||
name: string
|
||||
search: string
|
||||
}
|
||||
|
||||
type LanguageMap = Record<string, string>
|
||||
|
||||
const raw = languageMap as LanguageMap
|
||||
|
||||
const hasCjk = (text: string) => /[\u4e00-\u9fff]/.test(text)
|
||||
|
||||
const normalized = Object.entries(raw)
|
||||
.map(([code, name]) => ({ code: code.replace(/_/g, '-'), name }))
|
||||
.filter(({ code }) => code.length <= 10)
|
||||
.sort((a, b) => {
|
||||
const aGroup = hasCjk(a.name) ? 0 : 1
|
||||
const bGroup = hasCjk(b.name) ? 0 : 1
|
||||
if (aGroup !== bGroup) return aGroup - bGroup
|
||||
return a.name.localeCompare(b.name, 'zh-CN')
|
||||
})
|
||||
|
||||
const nameByCode: Record<string, string> = Object.fromEntries(
|
||||
normalized.map(({ code, name }) => [code, name])
|
||||
)
|
||||
|
||||
export const AUTO_LANGUAGE: LanguageOption = {
|
||||
code: 'auto',
|
||||
name: '自动检测',
|
||||
search: 'auto 自动检测',
|
||||
}
|
||||
|
||||
export const LANGUAGE_OPTIONS: LanguageOption[] = normalized.map(({ code, name }) => ({
|
||||
code,
|
||||
name,
|
||||
search: `${name} ${code}`.toLowerCase(),
|
||||
}))
|
||||
|
||||
export const COMMON_LANGUAGE_CODES = [
|
||||
'zh',
|
||||
'zh-Hant',
|
||||
'en',
|
||||
'ja',
|
||||
'ko',
|
||||
'fr',
|
||||
'de',
|
||||
'es',
|
||||
'ru',
|
||||
'pt',
|
||||
'it',
|
||||
'ar',
|
||||
'hi',
|
||||
'th',
|
||||
'vi',
|
||||
'id',
|
||||
'tr',
|
||||
'uk',
|
||||
'pl',
|
||||
'nl',
|
||||
'sv',
|
||||
]
|
||||
|
||||
export const COMMON_LANGUAGE_OPTIONS: LanguageOption[] = COMMON_LANGUAGE_CODES
|
||||
.map((code) => {
|
||||
const name = nameByCode[code]
|
||||
if (!name) return null
|
||||
return { code, name, search: `${name} ${code}`.toLowerCase() }
|
||||
})
|
||||
.filter((v): v is LanguageOption => Boolean(v))
|
||||
|
||||
export function getLanguageName(code: string): string {
|
||||
if (code === AUTO_LANGUAGE.code) return AUTO_LANGUAGE.name
|
||||
return nameByCode[code] ?? code
|
||||
}
|
||||
Reference in New Issue
Block a user