43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
|
import type { App } from 'vue'
|
||
|
import { createI18n } from 'vue-i18n'
|
||
|
import { useLocaleStoreWithOut } from '@/store/modules/locale'
|
||
|
import type { I18n, I18nOptions } from 'vue-i18n'
|
||
|
import { setHtmlPageLang } from './helper'
|
||
|
|
||
|
export let i18n: ReturnType<typeof createI18n>
|
||
|
|
||
|
const createI18nOptions = async (): Promise<I18nOptions> => {
|
||
|
const localeStore = useLocaleStoreWithOut()
|
||
|
const locale = localeStore.getCurrentLocale
|
||
|
const localeMap = localeStore.getLocaleMap
|
||
|
const defaultLocal = await import(`../../locales/${locale.lang}.ts`)
|
||
|
const message = defaultLocal.default ?? {}
|
||
|
|
||
|
setHtmlPageLang(locale.lang)
|
||
|
|
||
|
localeStore.setCurrentLocale({
|
||
|
lang: locale.lang
|
||
|
// elLocale: elLocal
|
||
|
})
|
||
|
|
||
|
return {
|
||
|
legacy: false,
|
||
|
locale: locale.lang,
|
||
|
fallbackLocale: locale.lang,
|
||
|
messages: {
|
||
|
[locale.lang]: message
|
||
|
},
|
||
|
availableLocales: localeMap.map((v) => v.lang),
|
||
|
sync: true,
|
||
|
silentTranslationWarn: true,
|
||
|
missingWarn: false,
|
||
|
silentFallbackWarn: true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export const setupI18n = async (app: App<Element>) => {
|
||
|
const options = await createI18nOptions()
|
||
|
i18n = createI18n(options) as I18n
|
||
|
app.use(i18n)
|
||
|
}
|