mirror of
https://github.com/setube/ogame-vue-ts.git
synced 2026-05-12 16:05:12 +08:00
docs: 新增西班牙语和日语README并优化多语言文档
新增README-ES.md(西班牙语)和README-JA.md(日语)文档,完善多语言README互链。优化各语言README徽章、技术栈、外链格式及语言切换区,提升文档一致性与可读性。
This commit is contained in:
@@ -1,14 +1,73 @@
|
||||
// 默认语言(打包在主包中)
|
||||
import zhCN from './zh-CN'
|
||||
import zhTW from './zh-TW'
|
||||
import en from './en'
|
||||
import de from './de'
|
||||
import ru from './ru'
|
||||
import ko from './ko'
|
||||
import ja from './ja'
|
||||
|
||||
export type Locale = 'zh-CN' | 'zh-TW' | 'en' | 'de' | 'ru' | 'ko' | 'ja'
|
||||
export type Locale = 'zh-CN' | 'zh-TW' | 'en' | 'de' | 'ru' | 'ko' | 'ja' | 'es-LA'
|
||||
|
||||
export const locales = { 'zh-CN': zhCN, 'zh-TW': zhTW, en, de, ru, ko, ja }
|
||||
export type TranslationSchema = typeof zhCN
|
||||
|
||||
// 语言加载器 - 使用动态导入实现按需加载
|
||||
// 注意: 各语言文件可能有细微差异,缺失的键会在运行时回退到 key 本身
|
||||
type LocaleModule = { default: TranslationSchema }
|
||||
const localeLoaders: Record<Locale, () => Promise<LocaleModule>> = {
|
||||
'zh-CN': () => Promise.resolve({ default: zhCN }),
|
||||
'zh-TW': () => import('./zh-TW') as unknown as Promise<LocaleModule>,
|
||||
en: () => import('./en') as unknown as Promise<LocaleModule>,
|
||||
de: () => import('./de') as unknown as Promise<LocaleModule>,
|
||||
ru: () => import('./ru') as unknown as Promise<LocaleModule>,
|
||||
ko: () => import('./ko') as unknown as Promise<LocaleModule>,
|
||||
ja: () => import('./ja') as unknown as Promise<LocaleModule>,
|
||||
'es-LA': () => import('./es-LA') as unknown as Promise<LocaleModule>
|
||||
}
|
||||
|
||||
// 已加载的语言缓存
|
||||
const loadedLocales: Partial<Record<Locale, TranslationSchema>> = {
|
||||
'zh-CN': zhCN // 默认语言预加载
|
||||
}
|
||||
|
||||
/**
|
||||
* 异步加载指定语言
|
||||
* @param locale 语言代码
|
||||
* @returns 语言翻译对象
|
||||
*/
|
||||
export const loadLocale = async (locale: Locale): Promise<TranslationSchema> => {
|
||||
// 如果已经加载过,直接返回缓存
|
||||
if (loadedLocales[locale]) {
|
||||
return loadedLocales[locale]!
|
||||
}
|
||||
|
||||
// 动态加载语言文件
|
||||
const loader = localeLoaders[locale]
|
||||
if (!loader) {
|
||||
console.warn(`Locale "${locale}" not found, falling back to zh-CN`)
|
||||
return zhCN
|
||||
}
|
||||
|
||||
try {
|
||||
const module = await loader()
|
||||
loadedLocales[locale] = module.default
|
||||
return module.default
|
||||
} catch (error) {
|
||||
console.error(`Failed to load locale "${locale}":`, error)
|
||||
return zhCN
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步获取已加载的语言(如果未加载则返回默认语言)
|
||||
* @param locale 语言代码
|
||||
* @returns 语言翻译对象
|
||||
*/
|
||||
export const getLocale = (locale: Locale): TranslationSchema => {
|
||||
return loadedLocales[locale] || zhCN
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查语言是否已加载
|
||||
* @param locale 语言代码
|
||||
*/
|
||||
export const isLocaleLoaded = (locale: Locale): boolean => {
|
||||
return locale in loadedLocales
|
||||
}
|
||||
|
||||
export const localeNames: Record<Locale, string> = {
|
||||
'zh-CN': '简体中文',
|
||||
@@ -17,7 +76,8 @@ export const localeNames: Record<Locale, string> = {
|
||||
de: 'Deutsch',
|
||||
ru: 'Русский',
|
||||
ko: '한국어',
|
||||
ja: '日本語'
|
||||
ja: '日本語',
|
||||
'es-LA': 'Español (LA)'
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -44,10 +104,9 @@ export const detectBrowserLocale = (): Locale => {
|
||||
return 'de'
|
||||
} else if (lang.startsWith('ru')) {
|
||||
return 'ru'
|
||||
} else if (lang.startsWith('es')) {
|
||||
return 'es-LA'
|
||||
}
|
||||
|
||||
// 默认返回简体中文
|
||||
return 'zh-CN'
|
||||
}
|
||||
|
||||
export type TranslationSchema = typeof zhCN
|
||||
|
||||
Reference in New Issue
Block a user