36 lines
899 B
TypeScript
36 lines
899 B
TypeScript
|
import { i18n } from '@/plugins/vueI18n'
|
||
|
import { useLocaleStoreWithOut } from '@/store/modules/locale'
|
||
|
import { setHtmlPageLang } from '@/plugins/vueI18n/helper'
|
||
|
|
||
|
const setI18nLanguage = (locale: LocaleType) => {
|
||
|
const localeStore = useLocaleStoreWithOut()
|
||
|
|
||
|
if (i18n.mode === 'legacy') {
|
||
|
i18n.global.locale = locale
|
||
|
} else {
|
||
|
;(i18n.global.locale as any).value = locale
|
||
|
}
|
||
|
localeStore.setCurrentLocale({
|
||
|
lang: locale
|
||
|
})
|
||
|
setHtmlPageLang(locale)
|
||
|
}
|
||
|
|
||
|
export const useLocale = () => {
|
||
|
// Switching the language will change the locale of useI18n
|
||
|
// And submit to configuration modification
|
||
|
const changeLocale = async (locale: LocaleType) => {
|
||
|
const globalI18n = i18n.global
|
||
|
|
||
|
const langModule = await import(`../../locales/${locale}.ts`)
|
||
|
|
||
|
globalI18n.setLocaleMessage(locale, langModule.default)
|
||
|
|
||
|
setI18nLanguage(locale)
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
changeLocale
|
||
|
}
|
||
|
}
|