index.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import type { App } from 'vue'
  2. import { createI18n } from 'vue-i18n'
  3. import { useLocaleStoreWithOut } from '@/store/modules/locale'
  4. import type { I18n, I18nOptions } from 'vue-i18n'
  5. import { setHtmlPageLang } from './helper'
  6. export let i18n: ReturnType<typeof createI18n>
  7. const createI18nOptions = async (): Promise<I18nOptions> => {
  8. const localeStore = useLocaleStoreWithOut()
  9. const locale = localeStore.getCurrentLocale
  10. const localeMap = localeStore.getLocaleMap
  11. const defaultLocal = await import(`../../locales/${locale.lang}.ts`)
  12. const message = defaultLocal.default ?? {}
  13. setHtmlPageLang(locale.lang)
  14. localeStore.setCurrentLocale({
  15. lang: locale.lang
  16. // elLocale: elLocal
  17. })
  18. return {
  19. legacy: false,
  20. locale: locale.lang,
  21. fallbackLocale: locale.lang,
  22. messages: {
  23. [locale.lang]: message
  24. },
  25. availableLocales: localeMap.map((v) => v.lang),
  26. sync: true,
  27. silentTranslationWarn: true,
  28. missingWarn: false,
  29. silentFallbackWarn: true
  30. }
  31. }
  32. export const setupI18n = async (app: App<Element>) => {
  33. const options = await createI18nOptions()
  34. i18n = createI18n(options) as I18n
  35. app.use(i18n)
  36. }