index.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { nextTick } from 'vue'
  2. import { useI18n, createI18n } from 'vue-i18n'
  3. import browser from '@/utils/browser'
  4. export { useI18n }
  5. export const SUPPORT_LOCALES = ['zh_CN', 'en', 'zh_HK']
  6. export function getLocale() {
  7. let lang = browser.getURLParam('lang')
  8. if (!lang) {
  9. lang = window.navigator.language || window.navigator.userLanguage || null
  10. if (lang && /^en/.test(lang)) {
  11. console.log('自动获取浏览器语言:' + lang)
  12. lang = 'en'
  13. }
  14. else if (lang && /^zh_CN/.test(lang)) {
  15. lang = 'zh_CN'
  16. }
  17. else {
  18. lang = 'zh_HK'
  19. }
  20. }
  21. return lang
  22. }
  23. export function setupI18n(options = { locale: 'zh_HK' }) {
  24. console.log(options.locale);
  25. const i18n = createI18n(options)
  26. setI18nLanguage(i18n, options.locale)
  27. return i18n
  28. }
  29. export function setI18nLanguage(i18n, locale) {
  30. if (i18n.mode === 'legacy') {
  31. i18n.global.locale = locale
  32. } else {
  33. i18n.global.locale.value = locale
  34. }
  35. /**
  36. * NOTE:
  37. * If you need to specify the language setting for headers, such as the `fetch` API, set it here.
  38. * The following is an example for axios.
  39. *
  40. * axios.defaults.headers.common['Accept-Language'] = locale
  41. */
  42. document.querySelector('html').setAttribute('lang', locale)
  43. }
  44. export async function loadLocaleMessages(i18n, locale) {
  45. // load locale messages with dynamic import
  46. // set locale and locale message
  47. const messages = await import(/* webpackChunkName: "locale-[request]" */ `../locales/${locale}.json`)
  48. i18n.global.setLocaleMessage(locale, messages.default)
  49. return nextTick()
  50. }
  51. export default setupI18n({
  52. globalInjection: true,
  53. legacy: false,
  54. locale: '',
  55. fallbackLocale: 'zh_HK',
  56. })