github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/ui/src/locales/index.js (about)

     1  import Vue from 'vue'
     2  import VueI18n from 'vue-i18n'
     3  import storage from 'store'
     4  import moment from 'moment'
     5  
     6  // default lang
     7  import enUS from './lang/en-US'
     8  
     9  Vue.use(VueI18n)
    10  
    11  export const defaultLang = 'en-US'
    12  
    13  const messages = {
    14    'en-US': {
    15      ...enUS
    16    }
    17  }
    18  
    19  const i18n = new VueI18n({
    20    silentTranslationWarn: true,
    21    locale: defaultLang,
    22    fallbackLocale: defaultLang,
    23    messages
    24  })
    25  
    26  const loadedLanguages = [defaultLang]
    27  
    28  function setI18nLanguage (lang) {
    29    i18n.locale = lang
    30    // request.headers['Accept-Language'] = lang
    31    document.querySelector('html').setAttribute('lang', lang)
    32    return lang
    33  }
    34  
    35  export function loadLanguageAsync (lang = defaultLang) {
    36    return new Promise(resolve => {
    37      // 缓存语言设置
    38      storage.set('lang', lang)
    39      if (i18n.locale !== lang) {
    40        if (!loadedLanguages.includes(lang)) {
    41          return import(/* webpackChunkName: "lang-[request]" */ `./lang/${lang}`).then(msg => {
    42            const locale = msg.default
    43            i18n.setLocaleMessage(lang, locale)
    44            loadedLanguages.push(lang)
    45            moment.updateLocale(locale.momentName, locale.momentLocale)
    46            return setI18nLanguage(lang)
    47          })
    48        }
    49        return resolve(setI18nLanguage(lang))
    50      }
    51      return resolve(lang)
    52    })
    53  }
    54  
    55  export function i18nRender (key) {
    56    return i18n.t(`${key}`)
    57  }
    58  
    59  export default i18n