From 93ecda76172ba4022709686a222f2b4427672bd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E6=B5=A9?= Date: Thu, 23 Oct 2025 18:15:45 +0800 Subject: [PATCH] =?UTF-8?q?feat(layout):=20=E8=8F=9C=E5=8D=95=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=9B=BD=E9=99=85=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/layouts/base-layout/base-layout-sider.vue | 28 ++++++++++++++++--- src/layouts/base-layout/base-layout.vue | 16 +++++++---- src/pages/_page-title-locales/en-US.ts | 12 ++++++++ src/pages/_page-title-locales/zh-CN.ts | 12 ++++++++ src/pages/demos/api-demo.page.vue | 4 +-- src/pages/demos/counter-demo.page.vue | 4 +-- src/pages/demos/i18n-demo.page.vue | 4 +-- src/pages/demos/index.page.vue | 2 +- src/pages/demos/websocket-demo.page.vue | 4 +-- src/plugins/router-plugin.ts | 2 ++ src/plugins/vueI18n-plugin.ts | 8 ++++++ ...font-dl.ts => x-vite-plugin-webfont-dl.ts} | 0 vite.config.ts | 3 ++ 13 files changed, 76 insertions(+), 23 deletions(-) create mode 100644 src/pages/_page-title-locales/en-US.ts create mode 100644 src/pages/_page-title-locales/zh-CN.ts rename vite-plugins/{vite-plugin-webfont-dl.ts => x-vite-plugin-webfont-dl.ts} (100%) diff --git a/src/layouts/base-layout/base-layout-sider.vue b/src/layouts/base-layout/base-layout-sider.vue index 3d9734e..6a8c033 100644 --- a/src/layouts/base-layout/base-layout-sider.vue +++ b/src/layouts/base-layout/base-layout-sider.vue @@ -3,7 +3,25 @@ import { createGetRoutes, router } from '@/plugins/router-plugin'; import type { MenuOption } from 'naive-ui'; import { RouterLink, type RouteRecordRaw } from 'vue-router'; import IconMenuRounded from '~icons/material-symbols/menu-rounded'; -import { useAppStore } from '../../stores/app-store'; +import { useAppStore } from '@/stores/app-store'; + +import zhCN from '@/pages/_page-title-locales/zh-CN'; +import enUS from '@/pages/_page-title-locales/en-US'; + +const { t, te } = useI18n({ + inheritLocale: true, + useScope: 'local', + missing: (locale, key) => { + consola.warn(`菜单翻译缺失: locale=${locale}, key=${key}`); + return key; + }, + fallbackRoot: true, + messages: { + 'zh-CN': zhCN, + 'en-US': enUS, + }, +}); + // 路由转换为菜单树的辅助函数 function convertRoutesToMenuOptions(routes: Readonly): MenuOption[] { const menuMap = new Map(); @@ -31,7 +49,9 @@ function convertRoutesToMenuOptions(routes: Readonly): MenuOpt // 构建菜单树 for (const route of validRoutes) { const pathSegments = route.path.split('/').filter(Boolean); - const text = route.meta?.title || route.name; + const routeName = route.name as string; + const text = te(routeName) ? t(routeName) : route.meta?.title || routeName; + const menuOption: MenuOption = { label: () => (route.meta?.link === false ? text : {text}), key: route.path, @@ -72,8 +92,8 @@ function convertRoutesToMenuOptions(routes: Readonly): MenuOpt const routes = createGetRoutes(router)(); const menuOptions = computed(() => convertRoutesToMenuOptions(routes)); -console.debug('原始路由:', JSON.stringify(routes, null, 0)); -console.debug('转换后的菜单:', JSON.stringify(menuOptions.value, null, 0)); +// console.debug('原始路由:', JSON.stringify(routes, null, 0)); +// console.debug('转换后的菜单:', JSON.stringify(menuOptions.value, null, 0)); const menuInstRef = useTemplateRef('menuInstRef'); const selectedKey = ref(''); diff --git a/src/layouts/base-layout/base-layout.vue b/src/layouts/base-layout/base-layout.vue index 07470e6..12836ad 100644 --- a/src/layouts/base-layout/base-layout.vue +++ b/src/layouts/base-layout/base-layout.vue @@ -7,7 +7,12 @@ const appStore = useAppStore();