Skip to content

Commit 1d70d71

Browse files
committed
feat: Support dayjs and component library in multiple languages
1 parent ca1cad0 commit 1d70d71

File tree

15 files changed

+99
-20
lines changed

15 files changed

+99
-20
lines changed

.vscode/settings.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,10 @@
171171
"packages/@vben-core/shared/design-tokens/src/**/*.css"
172172
],
173173

174-
"i18n-ally.localesPaths": ["packages/locales/src/langs"],
174+
"i18n-ally.localesPaths": [
175+
"packages/locales/src/langs",
176+
"packages/@core/shared/i18n/src/langs"
177+
],
175178
"i18n-ally.enabledParsers": ["json", "ts", "js", "yaml"],
176179
"i18n-ally.sourceLanguage": "en",
177180
"i18n-ally.displayLanguage": "zh-CN",

apps/web-antd/src/app.vue

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,11 @@ import { GlobalProvider } from '@vben/widgets';
55
import { preferences, usePreferences } from '@vben-core/preferences';
66
77
import { App, ConfigProvider, theme } from 'ant-design-vue';
8-
import zhCN from 'ant-design-vue/es/locale/zh_CN';
9-
import dayjs from 'dayjs';
108
11-
import 'dayjs/locale/zh-cn';
9+
import { antdLocale } from '#/forward';
1210
1311
defineOptions({ name: 'App' });
1412
15-
dayjs.locale(zhCN.locale);
16-
1713
const { isDark } = usePreferences();
1814
1915
const tokenTheme = computed(() => {
@@ -35,7 +31,7 @@ const tokenTheme = computed(() => {
3531

3632
<template>
3733
<GlobalProvider>
38-
<ConfigProvider :locale="zhCN" :theme="tokenTheme">
34+
<ConfigProvider :locale="antdLocale" :theme="tokenTheme">
3935
<App>
4036
<RouterView />
4137
</App>

apps/web-antd/src/bootstrap.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { setupI18n } from '@vben/locales';
44
import '@vben/styles';
55
import { preferences } from '@vben-core/preferences';
66

7+
import { loadThirdPartyMessage } from '#/forward';
78
import { setupStore } from '#/store';
89

910
import App from './app.vue';
@@ -13,7 +14,10 @@ async function bootstrap(namespace: string) {
1314
const app = createApp(App);
1415

1516
// 国际化 i18n 配置
16-
await setupI18n(app, { defaultLocale: preferences.app.locale });
17+
await setupI18n(app, {
18+
defaultLocale: preferences.app.locale,
19+
loadThirdPartyMessage,
20+
});
1721

1822
// 配置 pinia-store
1923
await setupStore(app, { namespace });

apps/web-antd/src/forward/README.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# forward
2+
3+
用于扩展、转发大仓的包以及其他功能,方便在app内自定义不同的逻辑
4+
5+
## request
6+
7+
用于扩展请求的功能,例如添加header、错误响应等
8+
9+
## locale
10+
11+
用于扩展国际化的功能,例如扩展 dayjs、antd组件库的多语言切换

apps/web-antd/src/forward/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
export * from './locale';
12
export * from './request';

apps/web-antd/src/forward/locale.ts

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import type { SupportedLanguagesType } from '@vben/types';
2+
import type { Locale } from 'ant-design-vue/es/locale';
3+
4+
import { ref } from 'vue';
5+
6+
import defaultLocale from 'ant-design-vue/es/locale/zh_CN';
7+
import dayjs from 'dayjs';
8+
9+
const antdLocale = ref<Locale>(defaultLocale);
10+
11+
async function loadDayjsLocale(lang: SupportedLanguagesType) {
12+
let locale;
13+
switch (lang) {
14+
case 'zh-CN': {
15+
locale = await import('dayjs/locale/zh-cn');
16+
break;
17+
}
18+
case 'en-US': {
19+
locale = await import('dayjs/locale/en');
20+
break;
21+
}
22+
default: {
23+
locale = await import('dayjs/locale/en');
24+
} // 默认使用英语
25+
}
26+
dayjs.locale(locale);
27+
}
28+
29+
async function loadAntdLocale(lang: SupportedLanguagesType) {
30+
switch (lang) {
31+
case 'zh-CN': {
32+
antdLocale.value = defaultLocale;
33+
break;
34+
}
35+
case 'en-US': {
36+
antdLocale.value = (await import(
37+
'ant-design-vue/es/locale/en_US'
38+
)) as unknown as Locale;
39+
break;
40+
}
41+
}
42+
}
43+
44+
async function loadThirdPartyMessage(land: SupportedLanguagesType) {
45+
await Promise.all([loadAntdLocale(land), loadDayjsLocale(land)]);
46+
}
47+
48+
export { antdLocale, loadThirdPartyMessage };

apps/web-antd/src/layouts/index.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const BasicLayout = () => import('./basic.vue');
22

33
const IFrameView = () => import('@vben/layouts').then((m) => m.IFrameView);
44

5-
const AuthPageLayoutType = () =>
6-
import('@vben/layouts').then((m) => m.AuthPageLayoutType);
5+
const AuthPageLayout = () =>
6+
import('@vben/layouts').then((m) => m.AuthPageLayout);
77

8-
export { AuthPageLayoutType, BasicLayout, IFrameView };
8+
export { AuthPageLayout, BasicLayout, IFrameView };

apps/web-antd/src/router/routes/_essentials.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { RouteRecordRaw } from 'vue-router';
33
import { DEFAULT_HOME_PATH } from '@vben/constants';
44
import { $t } from '@vben/locales';
55

6-
import { AuthPageLayoutType } from '#/layouts';
6+
import { AuthPageLayout } from '#/layouts';
77
import Login from '#/views/_essential/authentication/login.vue';
88

99
/** 全局404页面 */
@@ -30,7 +30,7 @@ const essentialsRoutes: RouteRecordRaw[] = [
3030
redirect: DEFAULT_HOME_PATH,
3131
},
3232
{
33-
component: AuthPageLayoutType,
33+
component: AuthPageLayout,
3434
meta: {
3535
title: 'Authentication',
3636
},

packages/@core/ui-kit/menu-ui/src/styles/index.scss

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,11 +495,12 @@
495495
padding-right: 12px !important;
496496
}
497497

498-
&:not(.is-active):hover {
498+
// &:not(.is-active):hover {
499+
&:hover {
499500
color: var(--menu-submenu-hover-color);
500501
text-decoration: none;
501502
cursor: pointer;
502-
background: var(--menu-submenu-hover-background-color);
503+
background: var(--menu-submenu-hover-background-color) !important;
503504

504505
svg {
505506
fill: var(--menu-submenu-hover-color);

0 commit comments

Comments
 (0)