index.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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. let getUrl = (href, queryArr) => {
  7. queryArr.forEach((item) => {
  8. if (!browser.hasURLParam(item.key)) {
  9. let ttt = href.split("index.html?");
  10. href = `${ttt[0]}index.html?${item.key}=${item.val}&${ttt[1]}`;
  11. } else {
  12. href = browser.replaceQueryString(href, item.key, item.val);
  13. }
  14. });
  15. return href;
  16. };
  17. export function getLocale() {
  18. let lang = browser.getURLParam('lang')
  19. if (!lang) {
  20. lang = window.navigator.language || window.navigator.userLanguage || null
  21. if (lang && /^en/.test(lang)) {
  22. console.log('自动获取浏览器语言:' + lang)
  23. lang = 'en'
  24. }
  25. else if (lang && /^zh_CN/.test(lang)) {
  26. lang = 'zh_CN'
  27. }
  28. else {
  29. lang = 'zh_HK'
  30. }
  31. }
  32. return lang
  33. }
  34. export function setupI18n(options = { locale: 'zh_HK' }) {
  35. console.log(options.locale);
  36. const i18n = createI18n(options)
  37. setI18nLanguage(i18n, options.locale)
  38. return i18n
  39. }
  40. export function setI18nLanguage(i18n, locale) {
  41. if (i18n.mode === 'legacy') {
  42. i18n.global.locale = locale
  43. } else {
  44. i18n.global.locale.value = locale
  45. }
  46. /**
  47. * NOTE:
  48. * If you need to specify the language setting for headers, such as the `fetch` API, set it here.
  49. * The following is an example for axios.
  50. *
  51. * axios.defaults.headers.common['Accept-Language'] = locale
  52. */
  53. let tmp = getUrl(window.location.href, [
  54. {
  55. key: "lang",
  56. val: locale,
  57. },
  58. ]);
  59. history.replaceState(null, null, tmp);
  60. document.querySelector('html').setAttribute('lang', locale)
  61. }
  62. export async function loadLocaleMessages(i18n, locale) {
  63. // load locale messages with dynamic import
  64. // set locale and locale message
  65. const messages = await import(/* webpackChunkName: "locale-[request]" */ `../locales/${locale}.json`)
  66. i18n.global.setLocaleMessage(locale, messages.default)
  67. return nextTick()
  68. }
  69. export default setupI18n({
  70. globalInjection: true,
  71. legacy: false,
  72. locale: '',
  73. fallbackLocale: 'zh_HK',
  74. })