/** * @program: kicc-ui * @description: 国际化相关操作 * @author: entfrm开发团队-王翔 * @create: 2022/4/8 */ import type { LocaleType } from '/#/config'; import { i18n } from './setupI18n'; import { useLocaleStoreWithOut } from '/@/store/modules/locale'; import { unref, computed } from 'vue'; import { loadLocalePool, setHtmlPageLang } from './helper'; interface LangModule { message: Recordable; } function setI18nLanguage(locale: LocaleType) { const localeStore = useLocaleStoreWithOut(); if (i18n.mode === 'legacy') { i18n.global.locale = locale; } else (i18n.global.locale as any).value = locale; localeStore.setLocaleInfo({ locale }); setHtmlPageLang(locale); } export function useLocale() { const localeStore = useLocaleStoreWithOut(); const getLocale = computed(() => localeStore.getLocale); const getShowLocalePicker = computed(() => localeStore.getShowPicker); const getAntdLocale = computed((): any => { return i18n.global.getLocaleMessage(unref(getLocale))?.antdLocale ?? {}; }); // 切换语言会改变useI18n的语言环境 async function changeLocale(locale: LocaleType) { const globalI18n = i18n.global; const currentLocale = unref(globalI18n.locale); if (currentLocale === locale) return locale; if (loadLocalePool.includes(locale)) { setI18nLanguage(locale); return locale; } const langModule = ((await import(`./lang/${locale}.ts`)) as any).default as LangModule; if (!langModule) return; const { message } = langModule; globalI18n.setLocaleMessage(locale, message); loadLocalePool.push(locale); setI18nLanguage(locale); return locale; } return { getLocale, getShowLocalePicker, changeLocale, getAntdLocale, }; }