Files
FileCodeBoxFronted2026/src/i18n/index.ts
T
2026-06-03 02:01:57 +08:00

52 lines
1.2 KiB
TypeScript

import { createI18n } from 'vue-i18n'
import zhCN from './locales/zh-CN'
import enUS from './locales/en-US'
import { readStoredLocale, writeStoredLocale } from '@/utils/preference-storage'
// 获取浏览器语言设置
const getDefaultLocale = (): string => {
const savedLocale = readStoredLocale()
if (savedLocale) {
return savedLocale
}
const browserLocale = navigator.language.toLowerCase()
if (browserLocale.startsWith('zh')) {
return 'zh-CN'
}
return 'en-US'
}
const messages = {
'zh-CN': zhCN,
'en-US': enUS
}
const i18n = createI18n({
legacy: false, // 使用 Composition API 模式
locale: getDefaultLocale(),
fallbackLocale: 'zh-CN',
messages,
globalInjection: true // 全局注入 $t 函数
})
export default i18n
// 导出切换语言的函数
export const setLocale = (locale: string) => {
i18n.global.locale.value = locale as 'zh-CN' | 'en-US'
writeStoredLocale(locale)
document.documentElement.lang = locale
}
// 导出获取当前语言的函数
export const getCurrentLocale = () => {
return i18n.global.locale.value
}
// 导出可用语言列表
export const availableLocales = [
{ code: 'zh-CN', name: '中文' },
{ code: 'en-US', name: 'English' }
]