UnisKB/ui/src/locales/index.ts

72 lines
1.7 KiB
TypeScript
Raw Normal View History

2025-01-20 10:00:53 +00:00
import { useLocalStorage, usePreferredLanguages } from '@vueuse/core'
import { computed } from 'vue'
2025-01-20 10:00:53 +00:00
import { createI18n } from 'vue-i18n'
import useStore from '@/stores'
const { user } = useStore()
// 导入语言文件
2025-01-20 10:00:53 +00:00
const langModules = import.meta.glob('./lang/*/index.ts', { eager: true }) as Record<
string,
() => Promise<{ default: Object }>
>
2025-01-20 10:00:53 +00:00
const langModuleMap = new Map<string, Object>()
2025-01-20 10:00:53 +00:00
export const langCode: Array<string> = []
2025-01-20 10:00:53 +00:00
export const localeConfigKey = 'MaxKB-locale'
// 获取浏览器默认语言环境
2025-01-20 10:00:53 +00:00
const languages = usePreferredLanguages()
// 生成语言模块列表
const generateLangModuleMap = () => {
2025-01-20 10:00:53 +00:00
const fullPaths = Object.keys(langModules)
fullPaths.forEach((fullPath) => {
const k = fullPath.replace('./lang', '')
const startIndex = 1
const lastIndex = k.lastIndexOf('/')
const code = k.substring(startIndex, lastIndex)
langCode.push(code)
langModuleMap.set(code, langModules[fullPath])
})
}
// 导出 Message
const importMessages = computed(() => {
2025-01-20 10:00:53 +00:00
generateLangModuleMap()
2025-01-20 10:00:53 +00:00
const message: Recordable = {}
langModuleMap.forEach((value: any, key) => {
message[key] = value.default
})
return message
})
export const i18n = createI18n({
2025-01-20 10:00:53 +00:00
legacy: false,
locale: user.getLanguage() || languages.value[0] || 'zh_CN',
fallbackLocale: 'zh_CN',
messages: importMessages.value,
globalInjection: true
})
export const langList = computed(() => {
2025-01-20 10:00:53 +00:00
if (langModuleMap.size === 0) generateLangModuleMap()
2025-01-20 10:00:53 +00:00
const list: any = []
langModuleMap.forEach((value: any, key) => {
list.push({
label: value.default.lang,
value: key
})
})
2025-01-20 10:00:53 +00:00
return list
})
// @ts-ignore
2025-01-20 10:00:53 +00:00
export const { t } = i18n.global
2025-01-20 10:00:53 +00:00
export default i18n