mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 07:03:53 +08:00
80 lines
1.9 KiB
TypeScript
80 lines
1.9 KiB
TypeScript
import type { Language } from '@/store/lang'
|
|
import { ref } from 'vue'
|
|
import { useLangStore } from '@/store/lang'
|
|
|
|
import de from './de'
|
|
import en from './en'
|
|
import pt_BR from './pt_BR'
|
|
import vi from './vi'
|
|
// 导入各个语言的翻译文件
|
|
import zh_CN from './zh_CN'
|
|
import zh_TW from './zh_TW'
|
|
|
|
// 语言包映射
|
|
const messages = {
|
|
zh_CN,
|
|
en,
|
|
zh_TW,
|
|
de,
|
|
vi,
|
|
pt_BR,
|
|
}
|
|
|
|
// 当前使用的语言
|
|
const currentLang = ref<Language>('zh_CN')
|
|
|
|
// 初始化语言
|
|
export function initI18n() {
|
|
const langStore = useLangStore()
|
|
currentLang.value = langStore.currentLang
|
|
}
|
|
|
|
// 切换语言
|
|
export function changeLanguage(lang: Language) {
|
|
currentLang.value = lang
|
|
const langStore = useLangStore()
|
|
langStore.changeLang(lang)
|
|
}
|
|
|
|
// 获取翻译文本
|
|
export function t(key: string, params?: Record<string, string | number>): string {
|
|
const langMessages = messages[currentLang.value]
|
|
|
|
// 直接查找扁平键名
|
|
if (langMessages && typeof langMessages === 'object' && key in langMessages) {
|
|
const value = langMessages[key]
|
|
if (typeof value === 'string') {
|
|
// 处理参数替换
|
|
if (params) {
|
|
let result = value
|
|
Object.entries(params).forEach(([paramKey, paramValue]) => {
|
|
const regex = new RegExp(`\{${paramKey}\}`, 'g')
|
|
result = result.replace(regex, String(paramValue))
|
|
})
|
|
return result
|
|
}
|
|
return value
|
|
}
|
|
return key
|
|
}
|
|
|
|
return key // 如果找不到对应的翻译,返回key本身
|
|
}
|
|
|
|
// 获取当前语言
|
|
export function getCurrentLanguage(): Language {
|
|
return currentLang.value
|
|
}
|
|
|
|
// 获取支持的语言列表
|
|
export function getSupportedLanguages(): { code: Language, name: string }[] {
|
|
return [
|
|
{ code: 'zh_CN', name: '简体中文' },
|
|
{ code: 'en', name: 'English' },
|
|
{ code: 'zh_TW', name: '繁體中文' },
|
|
{ code: 'de', name: 'Deutsch' },
|
|
{ code: 'vi', name: 'Tiếng Việt' },
|
|
{ code: 'pt_BR', name: 'Português (Brasil)' },
|
|
]
|
|
}
|