1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /**
- * Multi-language related operations
- */
- import type { LocaleType } from '/#/config';
- import moment from 'moment';
- import { i18n } from './setupI18n';
- import { useLocaleStoreWithOut } from '/@/store/modules/locale';
- import { unref, computed } from 'vue';
- interface LangModule {
- message: Recordable;
- momentLocale: Recordable;
- momentLocaleName: string;
- }
- const loadLocalePool: LocaleType[] = [];
- export function setLoadLocalePool(cb: (loadLocalePool: LocaleType[]) => void) {
- cb(loadLocalePool);
- }
- 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 });
- document.querySelector('html')?.setAttribute('lang', 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, momentLocale, momentLocaleName } = langModule;
- globalI18n.setLocaleMessage(locale, message);
- moment.updateLocale(momentLocaleName, momentLocale);
- loadLocalePool.push(locale);
- setI18nLanguage(locale);
- return locale;
- }
- return {
- getLocale,
- getShowLocalePicker,
- changeLocale,
- getAntdLocale,
- };
- }
|