import { reactive, ref } from 'vue' import { deepAssign } from '../components/_utils' import type { BaseLang } from './lang/baseLang' import { EnUSLang } from './lang/en-US' import { IdIDLang } from './lang/id-ID' import { ZhCNLang } from './lang/zh-CN' import { ZhTWLang } from './lang/zh-TW' // 组件默认语言设置 export type langKeys = 'zh-CN' | 'en-US' | 'zh-tw' | 'id-id' export type Lang = Partial> export type DeepPartial = { [K in keyof T]?: T[K] extends Record ? DeepPartial : T[K] } export { EnUSLang, IdIDLang, ZhCNLang, ZhTWLang } const currentLang = ref('zh-CN') const langs = reactive({ 'zh-CN': ZhCNLang(), 'en-US': EnUSLang(), }) export const useCurrentLang = () => currentLang export const Locale = { languages(): BaseLang { return langs[currentLang.value] }, use(lang: keyof Lang, Languages?: DeepPartial) { currentLang.value = lang if (Languages) langs[lang] = Languages }, merge(Languages: DeepPartial) { deepAssign(this.languages() as any, Languages) }, }