UNPKG

create-iking-admin

Version:

金合技术中台脚手架

78 lines (65 loc) 2.06 kB
/* * @Author: wfl * @LastEditors: wfl * @description: * @updateInfo: * @Date: 2022-07-29 11:45:14 * @LastEditTime: 2022-07-29 12:00:32 */ /** * Multi-language related operations */ import type { LocaleType } from '@t/config'; import { useLocaleStoreWithOut } from '@/global/store/modules/locale'; import { computed, unref } from 'vue'; import { loadLocalePool, setHtmlPageLang } from './helper'; import { i18n } from './setupI18n'; interface LangModule { message: Recordable; momentLocale: Recordable; momentLocaleName: string; } 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 ?? {}; }); // Switching the language will change the locale of useI18n // And submit to configuration modification 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, }; }