index.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import type { SupportedLanguagesType } from '@vben/types';
  2. import type { Locale } from 'ant-design-vue/es/locale';
  3. import { ref } from 'vue';
  4. import { $t, loadLocalesMap, setupI18n } from '@vben-core/locales';
  5. import defaultLocale from 'ant-design-vue/es/locale/zh_CN';
  6. import dayjs from 'dayjs';
  7. const antdLocale = ref<Locale>(defaultLocale);
  8. const modules = import.meta.glob('./langs/*.json');
  9. const localesMap = loadLocalesMap(modules);
  10. /**
  11. * 加载应用特有的语言包
  12. * 这里也可以改造为从服务端获取翻译数据
  13. * @param lang
  14. */
  15. async function loadMessages(lang: SupportedLanguagesType) {
  16. const [appLocaleMessages] = await Promise.all([
  17. localesMap[lang](),
  18. loadThirdPartyMessage(lang),
  19. ]);
  20. return appLocaleMessages.default;
  21. }
  22. /**
  23. * 加载第三方组件库的语言包
  24. * @param lang
  25. */
  26. async function loadThirdPartyMessage(lang: SupportedLanguagesType) {
  27. await Promise.all([loadAntdLocale(lang), loadDayjsLocale(lang)]);
  28. }
  29. /**
  30. * 加载dayjs的语言包
  31. * @param lang
  32. */
  33. async function loadDayjsLocale(lang: SupportedLanguagesType) {
  34. let locale;
  35. switch (lang) {
  36. case 'zh-CN': {
  37. locale = await import('dayjs/locale/zh-cn');
  38. break;
  39. }
  40. case 'en-US': {
  41. locale = await import('dayjs/locale/en');
  42. break;
  43. }
  44. // 默认使用英语
  45. default: {
  46. locale = await import('dayjs/locale/en');
  47. }
  48. }
  49. dayjs.locale(locale);
  50. }
  51. /**
  52. * 加载antd的语言包
  53. * @param lang
  54. */
  55. async function loadAntdLocale(lang: SupportedLanguagesType) {
  56. switch (lang) {
  57. case 'zh-CN': {
  58. antdLocale.value = defaultLocale;
  59. break;
  60. }
  61. case 'en-US': {
  62. antdLocale.value = (await import(
  63. 'ant-design-vue/es/locale/en_US'
  64. )) as unknown as Locale;
  65. break;
  66. }
  67. }
  68. }
  69. export { $t, antdLocale, loadMessages, setupI18n };