Initial commit

This commit is contained in:
2026-02-02 22:47:52 +03:00
committed by GitHub
commit f53016aeda
239 changed files with 84360 additions and 0 deletions

149
src/i18n/language.ts Normal file
View File

@@ -0,0 +1,149 @@
/**
* 统一的语言配置文件
* 所有语言相关的映射和配置都从这里导出
*/
export interface LanguageConfig {
/** 翻译服务使用的语言代码 */
translateCode: string;
/** 语言显示名称 */
displayName: string;
/** Intl.DateTimeFormat 使用的 locale */
locale: string;
/** 语言图标(国旗 emoji */
icon: string;
}
/**
* 支持的语言配置
* 单一数据源,避免重复定义
*/
export const LANGUAGE_CONFIG = {
zh: {
translateCode: "chinese_simplified",
displayName: "中文",
locale: "zh-CN",
icon: "🇨🇳",
},
en: {
translateCode: "english",
displayName: "English",
locale: "en-US",
icon: "🇺🇸",
},
ja: {
translateCode: "japanese",
displayName: "日本語",
locale: "ja-JP",
icon: "🇯🇵",
},
ko: {
translateCode: "korean",
displayName: "한국어",
locale: "ko-KR",
icon: "🇰🇷",
},
es: {
translateCode: "spanish",
displayName: "Español",
locale: "es-ES",
icon: "🇪🇸",
},
th: {
translateCode: "thai",
displayName: "ไทย",
locale: "th-TH",
icon: "🇹🇭",
},
vi: {
translateCode: "vietnamese",
displayName: "Tiếng Việt",
locale: "vi-VN",
icon: "🇻🇳",
},
tr: {
translateCode: "turkish",
displayName: "Türkçe",
locale: "tr-TR",
icon: "🇹🇷",
},
id: {
translateCode: "indonesian",
displayName: "Bahasa Indonesia",
locale: "id-ID",
icon: "🇮🇩",
},
fr: {
translateCode: "french",
displayName: "Français",
locale: "fr-FR",
icon: "🇫🇷",
},
de: {
translateCode: "german",
displayName: "Deutsch",
locale: "de-DE",
icon: "🇩🇪",
},
ru: {
translateCode: "russian",
displayName: "Русский",
locale: "ru-RU",
icon: "🇷🇺",
},
ar: {
translateCode: "arabic",
displayName: "العربية",
locale: "ar-SA",
icon: "🇸🇦",
},
} as const satisfies Record<string, LanguageConfig>;
/** 支持的语言代码列表 */
export const SUPPORTED_LANGUAGES = Object.keys(LANGUAGE_CONFIG) as Array<
keyof typeof LANGUAGE_CONFIG
>;
export type SupportedLanguage = keyof typeof LANGUAGE_CONFIG;
/**
* 配置文件语言代码到翻译服务语言代码的映射
* 自动从 LANGUAGE_CONFIG 生成
*/
export const langToTranslateMap: Record<string, string> = Object.fromEntries(
Object.entries(LANGUAGE_CONFIG).map(([lang, config]) => [
lang,
config.translateCode,
]),
);
/**
* 翻译服务语言代码到配置文件语言代码的映射
* 自动从 LANGUAGE_CONFIG 生成
*/
export const translateToLangMap: Record<string, string> = Object.fromEntries(
Object.entries(LANGUAGE_CONFIG).map(([lang, config]) => [
config.translateCode,
lang,
]),
);
/**
* 语言代码到 locale 的映射
* 自动从 LANGUAGE_CONFIG 生成
*/
export const langToLocaleMap: Record<string, string> = Object.fromEntries(
Object.entries(LANGUAGE_CONFIG).map(([lang, config]) => [lang, config.locale]),
);
/**
* 获取所有支持翻译的语言列表(用于 Translator
*/
export function getSupportedTranslateLanguages() {
return Object.entries(LANGUAGE_CONFIG).map(([code, config]) => ({
code: config.translateCode,
name: config.displayName,
icon: config.icon,
langCode: code,
}));
}