import { i18n } from '@/plugins/vue-i18n'
|
import { useLocaleStoreWithOut } from '@/store/modules/locale'
|
import { setHtmlPageLang } from '@/plugins/vue-i18n/helper'
|
import { PATH_URL } from '@/config/axios/service'
|
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)
|
}
|
|
const loadRemoteI18n = async (option: any) => {
|
const name = option.lang.replace('-', '_')
|
const path =
|
PATH_URL.startsWith('./') && PATH_URL.length > 2
|
? window.location.pathname + PATH_URL.substring(2)
|
: PATH_URL
|
const url = `${path}/i18n/custom_${name}_front_${option.name}.js`
|
return await import(url)
|
}
|
|
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
|
let langModule = null
|
if (['zh-CN', 'en', 'tw'].includes(locale)) {
|
langModule = await import(`../../locales/${locale}.ts`)
|
} else {
|
const localeStore = useLocaleStoreWithOut()
|
const currentLocale = localeStore.getCurrentLocale
|
const localeMap = await localeStore.getLocaleMap
|
const cMap: any = localeMap.find(item => {
|
return item.lang === currentLocale.lang
|
})
|
langModule = await loadRemoteI18n(cMap)
|
}
|
// const langModule = await import(`../../locales/${locale}.ts`)
|
|
globalI18n.setLocaleMessage(locale, langModule.default)
|
|
setI18nLanguage(locale)
|
}
|
|
return {
|
changeLocale
|
}
|
}
|