i18n.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import Vue from 'vue'
  2. import VueI18n from 'vue-i18n'
  3. import { Locale } from 'vant'
  4. import { getLang } from '@/utils/auth'
  5. import { I18N_LOCALE, I18N_FALLBACK_LOCALE } from '@/constant'
  6. Vue.use(VueI18n)
  7. function loadLocaleMessages() {
  8. const locales = require.context('./locales', true, /[A-Za-z0-9-_,\s]+\.json$/i)
  9. const messages = {}
  10. for (const key of locales.keys()) {
  11. const matched = key.match(/([A-Za-z0-9-_]+)\./i)
  12. if (matched && matched.length > 1) {
  13. const locale = matched[1]
  14. const localeVant = require(`vant/lib/locale/lang/${locales(key)._element}`)
  15. messages[locale] = {
  16. ...locales(key),
  17. ...localeVant ? localeVant.default : {}
  18. }
  19. }
  20. }
  21. return messages
  22. }
  23. const messages = loadLocaleMessages()
  24. Vue.prototype.$languages = Object.keys(messages).map(langlage => ({
  25. label: messages[langlage]._name,
  26. value: langlage
  27. }))
  28. const i18n = new VueI18n({
  29. locale: getLang() || I18N_LOCALE,
  30. fallbackLocale: I18N_FALLBACK_LOCALE,
  31. messages
  32. })
  33. Locale.use(i18n.locale, messages[i18n.locale])
  34. export default i18n