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