Files
one-pipe-system/src/locales/index.ts
sexygoat 222e5bb11a Initial commit: One Pipe System
完整的管理系统,包含账户管理、卡片管理、套餐管理、财务管理等功能模块。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-22 16:35:33 +08:00

56 lines
1.3 KiB
TypeScript

import { createI18n } from 'vue-i18n'
import type { I18n, I18nOptions } from 'vue-i18n'
import { LanguageEnum } from '@/enums/appEnum'
import { getSystemStorage } from '@/utils/storage'
// 动态导入语言文件
const messages = {
[LanguageEnum.EN]: () => import('./langs/en.json'),
[LanguageEnum.ZH]: () => import('./langs/zh.json')
}
// 语言选项
export const languageOptions = [
{ value: LanguageEnum.ZH, label: '简体中文' },
{ value: LanguageEnum.EN, label: 'English' }
]
// 获取初始语言
const getDefaultLanguage = (): LanguageEnum => {
const sys = getSystemStorage()
if (!sys) return LanguageEnum.ZH
try {
const { user } = JSON.parse(sys)
return user?.language || LanguageEnum.ZH
} catch (error) {
console.error('获取初始语言失败', error)
return LanguageEnum.ZH
}
}
const i18nOptions: I18nOptions = {
locale: getDefaultLanguage(),
legacy: false,
globalInjection: true,
fallbackLocale: LanguageEnum.ZH,
messages: {}
}
const i18n: I18n = createI18n(i18nOptions)
// 异步加载语言文件
Object.keys(messages).forEach((locale) => {
;(messages as Record<string, () => Promise<any>>)[locale]().then((msg) => {
i18n.global.setLocaleMessage(locale, msg.default)
})
})
interface Translation {
(key: string): string
}
export const $t = i18n.global.t as Translation
export default i18n