工具完成
This commit is contained in:
53
src/composables/useLanguage.ts
Normal file
53
src/composables/useLanguage.ts
Normal file
@ -0,0 +1,53 @@
|
||||
import { ref, computed } from 'vue'
|
||||
import type { Language } from '@/types/tools'
|
||||
import { locales } from '@/config/i18n'
|
||||
|
||||
// 全局语言状态
|
||||
const currentLanguage = ref<Language>('zh')
|
||||
|
||||
export const useLanguage = () => {
|
||||
// 获取当前语言的翻译对象
|
||||
const translation = computed(() => locales[currentLanguage.value])
|
||||
|
||||
// 翻译函数
|
||||
const t = (key: string, params?: Record<string, string>) => {
|
||||
const keys = key.split('.')
|
||||
let value: any = translation.value
|
||||
|
||||
for (const k of keys) {
|
||||
value = value?.[k]
|
||||
}
|
||||
|
||||
let result = value || key
|
||||
|
||||
// 替换参数
|
||||
if (params && typeof result === 'string') {
|
||||
Object.keys(params).forEach(param => {
|
||||
result = result.replace(`{${param}}`, params[param])
|
||||
})
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// 切换语言
|
||||
const switchLanguage = (lang: Language) => {
|
||||
currentLanguage.value = lang
|
||||
localStorage.setItem('preferred-language', lang)
|
||||
}
|
||||
|
||||
// 从本地存储恢复语言
|
||||
const restoreLanguage = () => {
|
||||
const saved = localStorage.getItem('preferred-language') as Language
|
||||
if (saved && (saved === 'zh' || saved === 'en')) {
|
||||
currentLanguage.value = saved
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
language: currentLanguage,
|
||||
t,
|
||||
switchLanguage,
|
||||
restoreLanguage
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user