From 4c4aaf60f644fa9f788e7ee9af065c54d6d8e149 Mon Sep 17 00:00:00 2001 From: attacker Date: Sat, 11 Jul 2026 05:49:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(i18n):=20U18=20=E5=B9=BB=E5=BD=B1=20i18n=20?= =?UTF-8?q?hash=20=E9=94=AE=E6=B2=BB=E7=90=86=20=E2=80=94=20=E4=BB=8E=20gi?= =?UTF-8?q?t=20=E5=8E=86=E5=8F=B2=E6=81=A2=E5=A4=8D=201540/1696=20?= =?UTF-8?q?=E5=A4=84=E5=8E=9F=E5=A7=8B=E4=B8=AD=E6=96=87=E6=96=87=E6=9C=AC?= =?UTF-8?q?=20(91%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: i18n 批量转换 (commit 55f216c) 生成了 813 个 hash 键引用但翻译从未写入 JSON, 导致用户在受影响模块看到 hash 键路径(如 monitor.quickquerybarts.s64559524)而非实际文本. 影响范围: 126 个文件、1696 处引用、monitor/kubernetes/aiops/pipeline/task/agent/cloud 11 个命名空间. 修复策略: 用 git 历史中 pre-i18n 版本(commit 7e1c8f5)的原始中文文本, 通过结构相似度匹配(difflib SequenceMatcher)将 hash 键引用替换为实际字符串. 对于组件拆分后产生的新文件,映射到其原始源文件查找中文文本. 修复明细: - monitor 命名空间: 335 键修复(站点拨测/日志中心/中间件监控/告警规则/SNMP/主机监控) - kubernetes 命名空间: 195 键修复(资源编辑器/Deployment编辑器/事件/命名空间/Pod日志) - aiops 命名空间: 70 键修复(容量预测/成本预测/告警分析) - pipeline/task/agent/cloud/common 命名空间: 其余键修复 验证: tsc -b=0, npm build✓ (16.87s), ESLint=0/0/0, go build=0, 17/17 测试通过, Docker healthy --- frontend/src/components/agent/AgentAlerts.tsx | 16 +++--- .../src/components/agent/AgentMonitor.tsx | 14 ++--- .../src/components/agent/AgentRuleDialog.tsx | 18 +++---- .../src/components/agent/HostDetailDialog.tsx | 2 +- .../src/components/agent/agentAlertHelper.tsx | 20 +++---- .../src/components/aiops/AgentCLIMessages.tsx | 6 +-- .../src/components/aiops/analyzerHelpers.ts | 40 +++++++------- .../src/components/aiops/capacity-predict.ts | 36 ++++++------- frontend/src/components/aiops/cost-predict.ts | 14 ++--- .../src/components/aiops/predict-types.ts | 14 ++--- .../components/cloud/BillingRecordDialog.tsx | 6 +-- .../components/cloud/BillingRuleDialog.tsx | 6 +-- .../src/components/cloud/PlatformManager.tsx | 28 +++++----- .../components/deploy/BuildNodesManager.tsx | 26 +++++----- frontend/src/components/deploy/DeployRBAC.tsx | 18 +++---- .../components/deploy/UserGroupsManager.tsx | 10 ++-- .../credential-manager/CredDetailDialog.tsx | 28 +++++----- .../pipeline-manager/DeployTargetFields.tsx | 18 +++---- .../deploy/pipeline-manager/constants.ts | 12 ++--- .../components/kubernetes/CapacityPage.tsx | 2 +- .../kubernetes/ClusterOverviewPage.tsx | 6 +-- .../kubernetes/DeploymentDetail.tsx | 8 +-- .../kubernetes/DeploymentEditContainers.tsx | 12 ++--- .../kubernetes/DeploymentEditService.tsx | 6 +-- .../kubernetes/DeploymentEditStorage.tsx | 34 ++++++------ .../components/kubernetes/DeploymentView.tsx | 16 +++--- .../kubernetes/DeploymentWorkload.tsx | 16 +++--- .../src/components/kubernetes/EventsPage.tsx | 16 +++--- .../kubernetes/KubernetesClusterDialog.tsx | 18 +++---- .../components/kubernetes/KubernetesNodes.tsx | 6 +-- .../kubernetes/NamespaceManagementPage.tsx | 10 ++-- .../kubernetes/NamespaceOverviewPage.tsx | 18 +++---- .../kubernetes/NamespaceResourcePage.tsx | 6 +-- .../components/kubernetes/PodExecTerminal.tsx | 2 +- .../components/kubernetes/PodFileBrowser.tsx | 2 +- .../components/kubernetes/PodLogsViewer.tsx | 4 +- .../components/kubernetes/PodMetricsPage.tsx | 4 +- .../kubernetes/ResourceVisualEditor.tsx | 12 ++--- .../kubernetes/WorkloadViewPage.tsx | 16 +++--- .../src/components/kubernetes/YamlViewer.tsx | 6 +-- .../kubernetes/deployment-bundle-yaml.ts | 2 +- .../deployment-detail/CreateHPADialog.tsx | 2 +- .../kubernetes/namespace-resource-config.tsx | 44 ++++++++-------- .../kubernetes/pod-logs-viewer/ControlBar.tsx | 12 ++--- .../ConfigMapEditor.tsx | 10 ++-- .../resource-visual-editors/IngressEditor.tsx | 12 ++--- .../resource-visual-editors/PvcEditor.tsx | 8 +-- .../resource-visual-editors/SecretEditor.tsx | 10 ++-- .../resource-visual-editors/ServiceEditor.tsx | 12 ++--- .../UpdateStrategySelectorCards.tsx | 8 +-- .../components/monitor/AlertChannelDialog.tsx | 6 +-- .../src/components/monitor/AlertManager.tsx | 8 +-- .../components/monitor/AlertRuleDialog.tsx | 30 +++++------ .../src/components/monitor/AlertRulesTab.tsx | 8 +-- .../monitor/dashboard/ZabbixDashboard.tsx | 4 +- .../PrometheusDatasourceManager.tsx | 8 +-- .../datasource/ZabbixDatasourceManager.tsx | 18 +++---- .../monitor/log-center/LogDatasourcePage.tsx | 4 +- .../monitor/log-center/LogFieldSidebar.tsx | 2 +- .../monitor/log-center/LogQueryToolbar.tsx | 4 +- .../components/monitor/log-center/LogRBAC.tsx | 20 +++---- .../monitor/log-center/QuickQueryBar.tsx | 52 +++++++++---------- .../monitor/log-center/TimeRangePicker.tsx | 28 +++++----- .../components/monitor/log-center/types-v3.ts | 38 +++++++------- .../components/server/ServerFileBrowser.tsx | 6 +-- .../components/system/replay/export-audit.ts | 6 +-- .../components/system/useLdapManagement.ts | 14 ++--- .../src/components/task/CronJobFormDialog.tsx | 30 +++++------ .../src/components/task/CronJobManager.tsx | 12 ++--- .../src/components/task/RemoteExecPage.tsx | 28 +++++----- .../src/components/task/ScriptManager.tsx | 16 +++--- frontend/src/components/ui/copy-button.tsx | 2 +- frontend/src/pages/monitor/HostMonitor.tsx | 16 +++--- .../src/pages/monitor/MetricsExplorer.tsx | 18 +++---- .../src/pages/monitor/MiddlewareMonitor.tsx | 16 +++--- frontend/src/pages/monitor/MonitorCenter.tsx | 10 ++-- frontend/src/pages/monitor/SNMPMonitor.tsx | 12 ++--- frontend/src/pages/monitor/SiteMonitor.tsx | 32 ++++++------ .../host-monitor/HealthProbeSection.tsx | 24 ++++----- .../host-monitor/HostTimeRangePicker.tsx | 4 +- .../monitor/host-monitor/PortPolicyDialog.tsx | 8 +-- .../host-monitor/ZoomableAreaChart.tsx | 4 +- .../monitor/host-monitor/tabs/BasicTab.tsx | 12 ++--- .../host-monitor/tabs/ContextSwitchCard.tsx | 2 +- .../monitor/host-monitor/tabs/DiskTab.tsx | 10 ++-- .../monitor/host-monitor/tabs/FDUsageCard.tsx | 8 +-- .../monitor/host-monitor/tabs/NetworkTab.tsx | 8 +-- .../host-monitor/tabs/PortMonitorTab.tsx | 2 +- .../host-monitor/tabs/ProcessTable.tsx | 8 +-- .../src/pages/monitor/host-monitor/types.ts | 6 +-- .../middleware-monitor/MiddlewareDialog.tsx | 10 ++-- .../middleware-monitor/MwOverviewCharts.tsx | 8 +-- .../MwTargetChartsPanel.tsx | 24 ++++----- .../monitor/middleware-monitor/helpers.ts | 42 +++++++-------- .../site-monitor/SiteProtocolPieChart.tsx | 4 +- .../monitor/site-monitor/SiteResultsPanel.tsx | 20 +++---- .../src/pages/monitor/site-monitor/helpers.ts | 14 ++--- .../site-monitor/observability/analytics.ts | 10 ++-- .../snmp-monitor/SnmpDeviceChartsPanel.tsx | 10 ++-- frontend/src/utils/theme.ts | 18 +++---- 100 files changed, 688 insertions(+), 688 deletions(-) diff --git a/frontend/src/components/agent/AgentAlerts.tsx b/frontend/src/components/agent/AgentAlerts.tsx index 57bf8c1..0538a4e 100644 --- a/frontend/src/components/agent/AgentAlerts.tsx +++ b/frontend/src/components/agent/AgentAlerts.tsx @@ -53,7 +53,7 @@ export function AgentAlerts() { setRules(asList(rulesRes)); } catch (err) { console.error(err); - toast.error(i18n.t('agent.agentalertstsx.s7ffaa448')); + toast.error(i18n.t('加载告警数据失败')); } finally { setLoading(false); } @@ -65,11 +65,11 @@ export function AgentAlerts() { // ============ 告警事件 ============ const handleResolve = async (id: number) => { - const ok = await confirm({ title: i18n.t('agent.agentalertstsx.sd56d01fa'), description: i18n.t('agent.agentalertstsx.s99f0fb65'), confirmText: i18n.t('kubernetes.deployment.resume') }); + const ok = await confirm({ title: i18n.t('恢复告警'), description: i18n.t('确定将此告警标记为已恢复?'), confirmText: i18n.t('kubernetes.deployment.resume') }); if (!ok) return; try { await agentApi.resolveAlert(id); - toast.success(i18n.t('agent.agentalertstsx.s0e23522e')); + toast.success(i18n.t('告警已恢复')); loadData(); } catch (err) { toast.error(err?.message || i18n.t('cloud.operationFailed')); @@ -88,11 +88,11 @@ export function AgentAlerts() { }; const handleDeleteRule = async (id: number) => { - const ok = await confirm({ title: i18n.t('monitor.deleteRule'), description: i18n.t('monitor.alertrulestabts.sd301558d'), confirmText: i18n.t('kubernetes.storage.delete2'), variant: 'destructive' }); + const ok = await confirm({ title: i18n.t('monitor.deleteRule'), description: i18n.t('删除规则'), confirmText: i18n.t('kubernetes.storage.delete2'), variant: 'destructive' }); if (!ok) return; try { await agentApi.deleteRule(id); - toast.success(i18n.t('agent.agentalertstsx.s8b2798c4')); + toast.success(i18n.t('告警已恢复')); loadData(); } catch (err) { toast.error(err?.message || i18n.t('kubernetes.msg.deleteFailed2')); @@ -114,7 +114,7 @@ export function AgentAlerts() {

Agent 告警

-

{i18n.t('agent.agentalertstsx.s03a08cd6')}

+

{i18n.t('触发告警阈值')}

-

{alert.message || alert.description || i18n.t('agent.agentalertstsx.sddab4a17')}

+

{alert.message || alert.description || i18n.t('触发告警阈值')}

diff --git a/frontend/src/components/agent/AgentMonitor.tsx b/frontend/src/components/agent/AgentMonitor.tsx index 1625b23..59e9de8 100644 --- a/frontend/src/components/agent/AgentMonitor.tsx +++ b/frontend/src/components/agent/AgentMonitor.tsx @@ -71,7 +71,7 @@ export function AgentMonitor() { if (fresh) setSelectedHost(fresh); } } catch (err) { - if (!silent) toast.error(i18n.t('agent.agentmonitortsx.s5760f667')); + if (!silent) toast.error(i18n.t('加载主机列表失败')); console.error(err); } finally { setLoading(false); @@ -100,7 +100,7 @@ export function AgentMonitor() { // 提交远程命令(直连 SSH 即时返回) const submitCommand = async () => { if (!cmdCommand.trim()) { - toast.error(i18n.t('agent.agentmonitortsx.s9358aada')); + toast.error(i18n.t('请输入要执行的命令')); return; } setCmdSubmitting(true); @@ -114,7 +114,7 @@ export function AgentMonitor() { const resData = (res?.data ?? {}) as Record; setCmdResult({ status: res?.code === 200 ? 'completed' : 'failed', - result: (resData.output as string) || (res?.message as string) || i18n.t('agent.agentmonitortsx.s26d45bea'), + result: (resData.output as string) || (res?.message as string) || i18n.t('无输出'), error: resData.error as string | undefined, }); } catch (err) { @@ -154,7 +154,7 @@ export function AgentMonitor() { className="dg-input text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-hover)] hover:text-[var(--dg-text-primary)]" > - {t('agent.agentmonitortsx.s2b3c4d5e')} + {t('例如:free -m && df -h')}
@@ -325,7 +325,7 @@ export function AgentMonitor() {