index.js 1.3 KB

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