Files
AI_Translator/apps/web/lib/languages.ts
2025-12-26 16:03:12 +08:00

77 lines
1.6 KiB
TypeScript

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
}