From 7c2bffa1a495cc4a3a263f654c08c231009c5c4e Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期四, 02 四月 2026 10:59:45 +0800
Subject: [PATCH] #i18n

---
 rsf-design/src/utils/backend-menu-title.js |   96 ++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 77 insertions(+), 19 deletions(-)

diff --git a/rsf-design/src/utils/backend-menu-title.js b/rsf-design/src/utils/backend-menu-title.js
index 8db1f59..0f363bc 100644
--- a/rsf-design/src/utils/backend-menu-title.js
+++ b/rsf-design/src/utils/backend-menu-title.js
@@ -125,31 +125,89 @@
   'menu.whMat': '搴撳尯鐗╂枡鍏崇郴'
 }
 
-export function resolveBackendMenuTitle(title) {
-  if (typeof title !== 'string') {
+const DASHBOARD_MENU_KEYS = new Set(['menus.dashboard.title', 'menus.dashboard.console'])
+const BACKEND_MENU_TITLE_KEY_MAP = Object.entries(LEGACY_BACKEND_MENU_TITLES).reduce(
+  (accumulator, [key, value]) => {
+    accumulator[key] = key
+    accumulator[value] = key
+    return accumulator
+  },
+  {
+    '浠〃鐩�': 'menus.dashboard.title',
+    '宸ヤ綔鍙�': 'menus.dashboard.console',
+    'menus.dashboard.title': 'menus.dashboard.title',
+    'menus.dashboard.console': 'menus.dashboard.console'
+  }
+)
+
+function normalizeComponentMenuKey(componentKey) {
+  if (typeof componentKey !== 'string') {
     return ''
   }
 
-  const trimmedTitle = title.trim()
-  if (!trimmedTitle) {
+  const normalizedComponentKey = componentKey.trim()
+  if (!normalizedComponentKey) {
     return ''
   }
 
-  if (LEGACY_BACKEND_MENU_TITLES[trimmedTitle]) {
-    return LEGACY_BACKEND_MENU_TITLES[trimmedTitle]
+  if (normalizedComponentKey === 'console') {
+    return 'menus.dashboard.console'
   }
 
-  if (trimmedTitle.startsWith('menus.')) {
-    const legacyMenuKey = `menu.${trimmedTitle.slice('menus.'.length)}`
-    if (LEGACY_BACKEND_MENU_TITLES[legacyMenuKey]) {
-      return LEGACY_BACKEND_MENU_TITLES[legacyMenuKey]
-    }
-    return trimmedTitle.split('.').pop() || trimmedTitle
-  }
-
-  if (trimmedTitle.startsWith('menu.')) {
-    return trimmedTitle.split('.').pop() || trimmedTitle
-  }
-
-  return trimmedTitle
+  return `menu.${normalizedComponentKey}`
 }
+
+function normalizeMenuKey(menuKey) {
+  if (!menuKey) {
+    return ''
+  }
+
+  if (DASHBOARD_MENU_KEYS.has(menuKey)) {
+    return menuKey
+  }
+
+  if (menuKey.startsWith('menus.')) {
+    const leaf = menuKey.slice('menus.'.length)
+    const aliasKey = `menu.${leaf}`
+    if (Object.prototype.hasOwnProperty.call(LEGACY_BACKEND_MENU_TITLES, aliasKey)) {
+      return aliasKey
+    }
+  }
+
+  return menuKey
+}
+
+function containsHan(value) {
+  return /[\u3400-\u9fff]/.test(value)
+}
+
+export function resolveBackendMenuTitle(title, componentKey = '') {
+  const trimmedTitle = typeof title === 'string' ? title.trim() : ''
+
+  if (trimmedTitle) {
+    if (trimmedTitle.startsWith('menu.') || trimmedTitle.startsWith('menus.')) {
+      const normalizedExistingKey = normalizeMenuKey(trimmedTitle)
+      if (normalizedExistingKey) {
+        return normalizedExistingKey
+      }
+    }
+
+    const mappedKey = BACKEND_MENU_TITLE_KEY_MAP[trimmedTitle]
+    if (mappedKey) {
+      return normalizeMenuKey(mappedKey)
+    }
+  }
+
+  const componentMenuKey = normalizeMenuKey(normalizeComponentMenuKey(componentKey))
+  if (componentMenuKey) {
+    return componentMenuKey
+  }
+
+  if (trimmedTitle && !containsHan(trimmedTitle)) {
+    return trimmedTitle
+  }
+
+  return ''
+}
+
+export { LEGACY_BACKEND_MENU_TITLES }

--
Gitblit v1.9.1