import { i18n } from './setupI18n'; import { useLocaleStoreWithOut } from '@jdlinker/func'; import { unref, computed } from 'vue'; import { loadLocalePool, setHtmlPageLang } from './helper'; interface LangModule { message: any; dateLocale: any; dateLocaleName: string; } function setI18nLanguage(locale: any) { 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 => { // @ts-ignore return i18n.global.getLocaleMessage(unref(getLocale))?.antdLocale ?? {}; }); // Switching the language will change the locale of useI18n // And submit to configuration modification async function changeLocale(locale: any) { const globalI18n = i18n.global; const currentLocale = unref(globalI18n.locale); if (currentLocale === locale) { return locale; } if (loadLocalePool.includes(locale)) { setI18nLanguage(locale); return locale; } // const messages = locale === 'zh_CN' ? zh_CN : en; const messages = await import(/* @vite-ignore */ `./${locale}.ts`); const langModule = messages as LangModule; if (!langModule) return; const { message } = langModule; globalI18n.setLocaleMessage(locale, message); loadLocalePool.push(locale); setI18nLanguage(locale); return locale; } return { getLocale, getShowLocalePicker, changeLocale, getAntdLocale }; }