index.ts 1.8 KB

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