feat: 菜单名称国际化

This commit is contained in:
caiyuchao
2025-05-20 18:16:38 +08:00
parent 403eb9181c
commit b4d91ef9c6
8 changed files with 228 additions and 4 deletions

View File

@@ -5,6 +5,7 @@ import type {
} from '@vben/types';
import { generateAccessible } from '@vben/access';
import { $te } from '@vben/locales';
import { preferences } from '@vben/preferences';
import { useAccessStore } from '@vben/stores';
import { convertServerMenuToRouteRecordStringComponent } from '@vben/utils';
@@ -28,7 +29,10 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) {
// 由于 yudao 通过 accessStore 读取,所以不在进行 message.loading 提示
// 补充说明accessStore.accessMenus 一开始是 AppRouteRecordRaw 类型(后端加载),后面被赋值成 MenuRecordRaw 类型(前端转换)
const accessMenus = accessStore.accessMenus as AppRouteRecordRaw[];
return convertServerMenuToRouteRecordStringComponent(accessMenus);
return convertServerMenuToRouteRecordStringComponent(
convertMenuToI18nKey(accessMenus),
);
},
// 可以指定没有权限跳转403页面
forbiddenComponent,
@@ -38,4 +42,24 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) {
});
}
/**
* 将菜单名称转换为国际化键
* @param menuList 菜单列表
* @returns 转换后的菜单列表
*/
function convertMenuToI18nKey(
menuList: AppRouteRecordRaw[],
): AppRouteRecordRaw[] {
return menuList.map((menu) => {
const { i18nKey } = menu;
if (i18nKey) {
menu.name = $te(i18nKey) ? i18nKey : menu.name;
}
if (menu.children) {
menu.children = convertMenuToI18nKey(menu.children);
}
return menu;
});
}
export { generateAccess };