123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import type { LocaleSetupOptions, SupportedLanguagesType } from '@vben/locales';
- import type { Locale } from 'ant-design-vue/es/locale';
- import type { App } from 'vue';
- import { ref } from 'vue';
- import { $t, setupI18n as coreSetup, loadLocalesMap } from '@vben/locales';
- import { preferences } from '@vben/preferences';
- import antdEnLocale from 'ant-design-vue/es/locale/en_US';
- import antdDefaultLocale from 'ant-design-vue/es/locale/zh_CN';
- import dayjs from 'dayjs';
- const antdLocale = ref<Locale>(antdDefaultLocale);
- const modules = import.meta.glob('./langs/*.json');
- const localesMap = loadLocalesMap(modules);
- /**
- * 加载应用特有的语言包
- * 这里也可以改造为从服务端获取翻译数据
- * @param lang
- */
- async function loadMessages(lang: SupportedLanguagesType) {
- const [appLocaleMessages] = await Promise.all([
- localesMap[lang](),
- loadThirdPartyMessage(lang),
- ]);
- return appLocaleMessages.default;
- }
- /**
- * 加载第三方组件库的语言包
- * @param lang
- */
- async function loadThirdPartyMessage(lang: SupportedLanguagesType) {
- await Promise.all([loadAntdLocale(lang), loadDayjsLocale(lang)]);
- }
- /**
- * 加载dayjs的语言包
- * @param lang
- */
- async function loadDayjsLocale(lang: SupportedLanguagesType) {
- let locale;
- switch (lang) {
- case 'zh-CN': {
- locale = await import('dayjs/locale/zh-cn');
- break;
- }
- case 'en-US': {
- locale = await import('dayjs/locale/en');
- break;
- }
- // 默认使用英语
- default: {
- locale = await import('dayjs/locale/en');
- }
- }
- dayjs.locale(locale);
- }
- /**
- * 加载antd的语言包
- * @param lang
- */
- async function loadAntdLocale(lang: SupportedLanguagesType) {
- switch (lang) {
- case 'zh-CN': {
- antdLocale.value = antdDefaultLocale;
- break;
- }
- case 'en-US': {
- antdLocale.value = antdEnLocale;
- break;
- }
- }
- }
- async function setupI18n(app: App, options: LocaleSetupOptions = {}) {
- await coreSetup(app, {
- defaultLocale: preferences.app.locale,
- loadMessages,
- missingWarn: !import.meta.env.PROD,
- ...options,
- });
- }
- export { $t, antdLocale, loadMessages, setupI18n };
|