From 4e2ba77aa81fe582699698623ae7bb913d0717e8 Mon Sep 17 00:00:00 2001 From: attacker Date: Mon, 13 Jul 2026 19:45:45 +0800 Subject: [PATCH] =?UTF-8?q?refactor(i18n):=20U40=20Monitor=20+=20Agent=20?= =?UTF-8?q?=E5=AD=90=E7=BB=84=E4=BB=B6=E6=AE=8B=E4=BD=99=E7=A1=AC=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E4=B8=AD=E6=96=87=20i18n=20=E8=A1=A5=E5=85=A8=20?= =?UTF-8?q?=E2=80=94=2014=20=E6=96=87=E4=BB=B6=20~50=20=E5=A4=84=E2=86=920?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ContextSwitchCard: CTX/IRQ/次 → t() - ProcessTable: agentWaitData/cpuUsagePercent → t() - FDUsageCard: fdHandles → t() - PortMonitorTab: 黑名单/白名单/策略配置/暂无端口数据 → t() - PortPolicyDialog: 白名单全量上报/黑名单仅上报/端口列表/逗号分隔/白名单无需配置/已输入端口 → t() - HostTimeRangePicker: 时间范围/自定义/取消/应用 → t() - DualLineChart: 接收/发送 → t(), i18n.t→useTranslation hook - ZoomableAreaChart: 暂无数据 → t() - SiteResultsPanel: 选择任务/次/可用率/立即拨测/SSL证书预警/到期/剩余/阈值/天 → t() - MiddlewareMonitor: Redis单机集群/上次更新/添加平台默认/暂无实例 → t() - SiteMonitor: subtitle → t() - SNMPMonitor: 标题/采集间隔/IP地址/OID模板/SNMP版本/确认/暂无设备/采集指标/暂无指标 → t() - HealthProbeSection: TCP目标地址/TCP端口 → t() - AgentAlerts: Agent告警/刷新/未恢复/已恢复/恢复/新建规则/创建第一条规则 → i18n.t() 新增 monitor.lbl 46 语义化翻译键 + agent.alerts 6 键 zh/en 7762→7814 对齐 tsc -b=0, npm build✓ (16.88s), ESLint=0/43/any=0, go build=0, 17/17 测试通过 --- ROADMAP.md | 1 + frontend/src/components/agent/AgentAlerts.tsx | 14 ++--- frontend/src/locales/en-US.json | 57 ++++++++++++++++++- frontend/src/locales/zh-CN.json | 57 ++++++++++++++++++- .../src/pages/monitor/MiddlewareMonitor.tsx | 8 +-- frontend/src/pages/monitor/SNMPMonitor.tsx | 18 +++--- frontend/src/pages/monitor/SiteMonitor.tsx | 2 +- .../monitor/host-monitor/DualLineChart.tsx | 13 +++-- .../host-monitor/HealthProbeSection.tsx | 4 +- .../host-monitor/HostTimeRangePicker.tsx | 8 +-- .../monitor/host-monitor/PortPolicyDialog.tsx | 10 ++-- .../host-monitor/ZoomableAreaChart.tsx | 2 +- .../host-monitor/tabs/ContextSwitchCard.tsx | 8 +-- .../monitor/host-monitor/tabs/FDUsageCard.tsx | 2 +- .../host-monitor/tabs/PortMonitorTab.tsx | 8 +-- .../host-monitor/tabs/ProcessTable.tsx | 4 +- .../monitor/site-monitor/SiteResultsPanel.tsx | 10 ++-- 17 files changed, 165 insertions(+), 61 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 0448707..639d41c 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -527,6 +527,7 @@ services/api.ts (1324L) | U36 | 全量 JSX 属性 + toast 硬编码中文清零(20 文件 30 处→0: TerminalLoadingOverlay/copy-button/AppRelease/DeployCredentials/PipelineManager/WorkspaceTermDialog/CredFormDialog/JobRoleCreateDialog/PipelineCreateDialog/AdvancedSettingsPanel/ServerForm/LdapManagementSection/LiveMonitorDialog/SystemManager/ActiveSessionsPanel/HistorySessionsPanel/AlertRulesTab/PrometheusDatasourceManager/SNMPMonitor/PredictiveCapacityTab — 23 JSX 属性 + 7 toast 调用全量清零, copy-button 从 import i18n→useTranslation hook, 4 组件新增 useTranslation hook;新增 25 翻译键;zh/en 7616→7640 +24 对齐;tsc -b=0, npm build✓ (17.25s), ESLint=0/43/any=0, go build=0, 17/17 测试通过) | P3 | **done** | | U38 | i18n phantom CTK 清理 — 模板字面量 + JSX 属性残余中文清零(13 文件 16 处→0: LogsHeader "行"suffix + analyzerHelpers "当前值" + DeploymentEditStorage 2 toast description + WorkloadViewPage 2 toast description + ServerFileBrowser confirm + LogDatasourcePage toast + LogAlertsPanel confirm + DeployTargetFields JSX hint + UserGroupsManager 3 处 confirm/desc + BuildNodesManager JSX "(可选)" + useLdapManagement confirm — 新增 14 语义化翻译键 (common.lineSuffix/currentValue/memberCount/fillIfMultiContainer/confirmDeleteType + k8s.editStorage.*Desc + k8s.workloadView.restartSentDesc + k8s.workloads.scaleSuccessDesc + aiops.reachable + monitor.deleteRuleConfirmDesc + deploy.rbac.deleteGroupDesc + pipeline.removeMemberDesc + system.ldapMgmt.deleteEntryDesc),zh/en 7737→7751 +14 对齐;tsc -b=0, npm build✓ (16.86s), ESLint=0/43/any=0, go build=0, 17/17 测试通过) | P3 | **done** | | U39 | 残余 JSX 属性/模板字面量中文清零(10 文件 14 处→0: DualLineChart subtitle 接收/发送 + NetworkTab 5处 unit="个" + FDUsageCard subtitle 当前 + NamespaceOverviewPage/NamespaceManagementPage subtitle + CreateHPADialog title+text 命名空间 + LogFieldSidebar title 个值 + LiveMonitorDialog title 全屏/退出全屏 + ExecutionHistoryDialog title 成功/失败 + LdapSettingsTab className 成功检查→ldapTestSuccess boolean 状态替代字符串匹配 — 新增 11 翻译键, zh/en 7751→7762 对齐;tsc -b=0, npm build✓ (16.94s), ESLint=0/0/any=0, go build=0, 17/17 测试通过) | P3 | **done** | +| U40 | Monitor + Agent 子组件残余硬编码中文 i18n 补全(14 文件 ~50 处→0: ContextSwitchCard CTX/IRQ/次 + ProcessTable agentWaitData/cpuUsagePercent + FDUsageCard fdHandles + PortMonitorTab 黑名单/白名单/策略配置/暂无端口数据 + PortPolicyDialog 白名单全量上报/黑名单仅上报选中/端口列表/逗号分隔/白名单无需配置/已输入端口 + HostTimeRangePicker 时间范围/自定义/取消/应用 + DualLineChart 接收/发送 (i18n.t→useTranslation hook) + ZoomableAreaChart 暂无数据 + SiteResultsPanel 选择任务/次/可用率/立即拨测/SSL证书预警/到期/剩余/阈值/天 + MiddlewareMonitor Redis单机集群/上次更新/添加平台默认/暂无实例 + SiteMonitor subtitle + SNMPMonitor 标题/采集间隔/IP地址/OID模板/SNMP版本/确认/暂无设备/采集指标/暂无指标 + HealthProbeSection TCP目标地址/TCP端口 + AgentAlerts Agent告警/刷新/未恢复/已恢复/恢复/新建规则/创建第一条规则 — 新增 monitor.lbl 46 语义化翻译键 + agent.alerts 6 键, zh/en 7762→7814 对齐;tsc -b=0, npm build✓ (16.88s), ESLint=0/43/any=0, go build=0, 17/17 测试通过) | P3 | **done** | | U37 | 全量 JSX 文本节点硬编码中文清零(65 文件 151 处→0: MiddlewareMonitor/SiteMonitor/SNMPMonitor/HealthProbeSection/ContextSwitchCard/ProcessTable/PortMonitorTab/MwTargetChartsPanel/MiddlewareDialog/ChartRangeHint/SnmpDeviceChartsPanel/AlertRulesTab/LogClusterPanel/LogDatasourcePage/LogQueryToolbar/LogAlertsPanel/PrometheusDatasourceManager/PodMetricsPage/CapacityPage/NamespaceManagementPage/NamespaceResourcePage/DeploymentEditService/EventsPage/DeploymentDetail/ClusterOverviewPage/DeploymentEditContainers/DeploymentEditStorage/WorkloadViewPage/BottomStatusBar/UpdateStrategySelectorCards/PodInstancesTable/shared-components/UpdateStrategyCard/TolerationsCard/HostSettingsCard/IngressListItem/ServiceListItem/ServiceCreateForm/IngressCreateForm/CreateHPADialog/DeployCredentials/DeployRBAC/UserGroupsManager/BuildNodesManager/DeployTargetFields/PipelineCreateDialog/CredFormDialog/WorkspaceTermDialog/AgentAlerts/AgentRuleDialog/LiveMonitorDialog/RoleFormDialog/CronJobViewDialog/TerminalOutput/AIAnalysisResult/AIPredictiveAnalytics/PredictiveCostTab/PredictiveCapacityTab/ActiveSessionsPanel/HistorySessionsPanel/TerminalDialog/ServerFileBrowser/PodFileBrowser/SiteResultsPanel/SiteProtocolPieChart — 151 JSX 文本节点中文全部替换为 t()/i18n.t() 调用;新增 common.* 98 翻译键 (selectedCount/itemsCount/newValue/namespaceLabel/containerLabel/replicasLabel/minReplicas/maxReplicas/createNamespace/noNamespace/unknownResource/exportYaml/loadTrend/loadCapacity/predicted/threshold/hostSettings/addVolume/addMount/createService/createIngress/editAction/updateStrategy/selectAndLabel/historyVersion/fileBrowser/scale/back/createHpa/allNamespaces/certLabel/observable/deviceList/addDevice/addMonitor/collectNow/addTask/addProbe/restoreFull/contextSwitch/processTop/listenPorts/terminalRealtime/auditWebssh/buildTerminal/fileBrowse/newDir/loadDeployment/notLinked/selectedPerms/none/hasLabel/deleteNamespace/deleteNamespaceWarn/allResources/notFoundDeploy/nodeList/fileLabel/addCustom/newInstanceService/newInstanceIngress/totalContainers/workContainers/loadingEllipsis/volumeClaimTemplates/containerTemplate/passwordOptional/updated/page/perPage/clusterMode/totalLogs/countLabel/percentage/queryTime/addDatasource/newPermission/newEnv/envLabel/displayName/newUserGroup/auditTrace/predictValue/confidence/predictMonthEnd/noCapacityData/securityMode/standardRdp/domainLabel/noRdpActive/noRdpHistory/buffer/matched/podLogs/createHpaTitle/password/events/total);37 文件已有 import i18n→i18n.t() 模式, 2 文件新增 import i18n;zh/en 7640→3526 namespace-flat +98 键对齐;tsc -b=0, npm build✓ (17.96s), ESLint=0/43/any=0, go build=0, 17/17 测试通过) | P3 | **done** | --- diff --git a/frontend/src/components/agent/AgentAlerts.tsx b/frontend/src/components/agent/AgentAlerts.tsx index 8cd5c4a..ccb1ae7 100644 --- a/frontend/src/components/agent/AgentAlerts.tsx +++ b/frontend/src/components/agent/AgentAlerts.tsx @@ -113,12 +113,12 @@ export function AgentAlerts() { {/* 页头 */}
-

Agent 告警

+

{i18n.t('agent.alerts.title')}

{i18n.t('agent.alerts.thresholdTriggered')}

@@ -137,7 +137,7 @@ export function AgentAlerts() { onClick={() => setResolvedView(false)} className={!resolvedView ? 'bg-blue-600 hover:bg-blue-700 text-white' : 'dg-input text-[var(--dg-text-secondary)]'} > - 未恢复 + {i18n.t('agent.alerts.unresolved')} @@ -207,7 +207,7 @@ export function AgentAlerts() { className="shrink-0 h-8 dg-input dg-text-green hover:bg-emerald-500/10 hover:dg-text-green" > - 恢复 + {i18n.t('agent.alerts.resolve')} )} @@ -223,7 +223,7 @@ export function AgentAlerts() {
@@ -241,7 +241,7 @@ export function AgentAlerts() {

{i18n.t('monitor.noRules')}

diff --git a/frontend/src/locales/en-US.json b/frontend/src/locales/en-US.json index 2fd2a64..dde5c93 100644 --- a/frontend/src/locales/en-US.json +++ b/frontend/src/locales/en-US.json @@ -4377,7 +4377,53 @@ "noProbeHint": "No health probes. Click \"{{action}}\" to create one.", "searchFields": "Search fields", "receiveSend": "RX {{rx}} · TX {{tx}}", - "currentFDUsage": "Current {{pct}}%" + "currentFDUsage": "Current {{pct}}%", + "ctxPerSec": "CTX switches/sec", + "irqPerSec": "IRQ interrupts/sec", + "times": "times", + "agentWaitData": "Agent v2.0+ required, waiting for data…", + "cpuUsagePercent": "CPU Usage(%)", + "fdHandles": "FD File Handles", + "blacklistLabel": "Blacklist", + "whitelistModeLabel": "Whitelist mode", + "policyConfig": "Policy Config", + "noPortData": "No port data", + "whitelistFullReport": "Whitelist — Report all", + "blacklistSelectedOnly": "Blacklist — Report selected only", + "portListLabel": "Port list", + "portListHint": "(comma-separated, e.g.: 80,443,3306,6379)", + "whitelistNoConfig": "— No config needed in whitelist mode", + "portsEntered": "{{count}} ports entered", + "timeRange": "Time range", + "custom": "Custom", + "apply": "Apply", + "rx": "RX", + "tx": "TX", + "noData": "No data", + "selectTaskHint": "Select a task to view protocol-specific metrics", + "probeNow": "Probe now", + "sslCertWarning": "SSL Certificate Warning", + "sslExpiring": "Expires", + "sslRemaining": "remaining", + "sslThreshold": "threshold", + "sslDays": "days", + "availabilityRate": "Availability", + "redisMysqlAutoRefresh": "Redis standalone/cluster · MySQL · 30s auto refresh", + "lastUpdate": "Last update", + "addPlatformDefault": "Add platform default", + "noInstancePrefix": "No", + "instanceSuffix": "instances", + "siteMonitorSubtitle": "HTTP Web probe · SSL cert detection · TCP / DNS / PING", + "snmpMonitorTitle": "SNMP Monitor", + "snmpCollectInterval": "5 min collection · 7 day retention", + "tcpTargetAddr": "TCP target address", + "tcpPort": "TCP port", + "ipAddress": "IP address", + "snmpOidTemplate": "OID Template", + "snmpVersion": "SNMP Version", + "snmpNoDevice": "No SNMP devices. Click \"Add Device\" to start monitoring.", + "snmpCollectMetrics": "Collected Metrics", + "snmpNoMetrics": "No metrics yet. Please collect first." }, "logAlertBell": { "linked": "Alert Policy Linked", @@ -7043,7 +7089,7 @@ "loadFailed": "Failed to load alert data", "resolveAlert": "Resolve Alert", "resolveConfirm": "Mark this alert as resolved?", - "resolved": "Alert resolved", + "resolved": "Resolved", "deleteRule": "Delete Rule", "thresholdTriggered": "Alert threshold triggered", "noResolved": "No resolved alerts", @@ -7051,7 +7097,12 @@ "metricSwap": "Swap Usage", "metricLoad1": "1-min Load Average", "metricInode": "Inode Usage", - "metricTcpEst": "TCP Established" + "metricTcpEst": "TCP Established", + "title": "Agent Alerts", + "unresolved": "Unresolved", + "resolve": "Resolve", + "newRule": "New Rule", + "createFirstRule": "Create your first rule" }, "allPortsHint": "All ports reported automatically", "allPortsMode": "All Ports", diff --git a/frontend/src/locales/zh-CN.json b/frontend/src/locales/zh-CN.json index ac6b68e..7048109 100644 --- a/frontend/src/locales/zh-CN.json +++ b/frontend/src/locales/zh-CN.json @@ -4377,7 +4377,53 @@ "noProbeHint": "暂无健康探针,点击「{{action}}」创建", "searchFields": "搜索字段", "receiveSend": "接收 {{rx}} · 发送 {{tx}}", - "currentFDUsage": "当前 {{pct}}%" + "currentFDUsage": "当前 {{pct}}%", + "ctxPerSec": "CTX 切换/秒", + "irqPerSec": "IRQ 中断/秒", + "times": "次", + "agentWaitData": "Agent v2.0+ 支持,等待数据上报…", + "cpuUsagePercent": "CPU使用率(%)", + "fdHandles": "FD 文件句柄", + "blacklistLabel": "黑名单", + "whitelistModeLabel": "白名单模式", + "policyConfig": "策略配置", + "noPortData": "暂无端口数据", + "whitelistFullReport": "白名单 ─ 全量上报", + "blacklistSelectedOnly": "黑名单 ─ 仅上报选中", + "portListLabel": "端口列表", + "portListHint": "(逗号分隔,如: 80,443,3306,6379)", + "whitelistNoConfig": "— 白名单模式无需配置", + "portsEntered": "已输入 {{count}} 个端口", + "timeRange": "时间范围", + "custom": "自定义", + "apply": "应用", + "rx": "接收", + "tx": "发送", + "noData": "暂无数据", + "selectTaskHint": "选择任务查看协议专属可观测指标", + "probeNow": "立即拨测", + "sslCertWarning": "SSL 证书预警", + "sslExpiring": "到期", + "sslRemaining": "剩余", + "sslThreshold": "阈值", + "sslDays": "天", + "availabilityRate": "可用率", + "redisMysqlAutoRefresh": "Redis 单机/集群 · MySQL · 30s 自动刷新", + "lastUpdate": "上次更新", + "addPlatformDefault": "添加平台默认", + "noInstancePrefix": "暂无", + "instanceSuffix": "实例", + "siteMonitorSubtitle": "HTTP Web 拨测 · SSL 证书检测 · TCP / DNS / PING", + "snmpMonitorTitle": "SNMP 监控", + "snmpCollectInterval": "5 分钟采集 · 指标保留 7 天", + "tcpTargetAddr": "TCP 目标地址", + "tcpPort": "TCP 端口", + "ipAddress": "IP 地址", + "snmpOidTemplate": "OID 模板", + "snmpVersion": "SNMP 版本", + "snmpNoDevice": "暂无 SNMP 设备,点击「添加设备」开始监控", + "snmpCollectMetrics": "采集指标", + "snmpNoMetrics": "暂无指标,请先采集" }, "logAlertBell": { "linked": "已关联告警策略", @@ -7043,7 +7089,7 @@ "loadFailed": "加载告警数据失败", "resolveAlert": "恢复告警", "resolveConfirm": "确定将此告警标记为已恢复?", - "resolved": "告警已恢复", + "resolved": "已恢复", "deleteRule": "删除规则", "thresholdTriggered": "触发告警阈值", "noResolved": "暂无已恢复的告警", @@ -7051,7 +7097,12 @@ "metricSwap": "Swap 使用率", "metricLoad1": "1分钟负载", "metricInode": "Inode 使用率", - "metricTcpEst": "TCP 已建立" + "metricTcpEst": "TCP 已建立", + "title": "Agent 告警", + "unresolved": "未恢复", + "resolve": "恢复", + "newRule": "新建规则", + "createFirstRule": "创建第一条规则" }, "allPortsHint": "全部端口自动上报", "allPortsMode": "全量上报", diff --git a/frontend/src/pages/monitor/MiddlewareMonitor.tsx b/frontend/src/pages/monitor/MiddlewareMonitor.tsx index 758257b..beb0ee9 100644 --- a/frontend/src/pages/monitor/MiddlewareMonitor.tsx +++ b/frontend/src/pages/monitor/MiddlewareMonitor.tsx @@ -153,10 +153,10 @@ export function MiddlewareMonitor() {

{t('monitor.alertHelper.srcMiddleware')}

- Redis 单机/集群 · MySQL · 30s 自动刷新 + {t('monitor.lbl.redisMysqlAutoRefresh')} {lastRefreshAt && ( - 上次更新 {lastRefreshAt.toLocaleTimeString()} + {t('monitor.lbl.lastUpdate')} {lastRefreshAt.toLocaleTimeString()} {refreshing && t('monitor.lbl.refreshing')} )} @@ -172,7 +172,7 @@ export function MiddlewareMonitor() { {targets.length === 0 && ( )} diff --git a/frontend/src/pages/monitor/SNMPMonitor.tsx b/frontend/src/pages/monitor/SNMPMonitor.tsx index bab0050..9cddfa4 100644 --- a/frontend/src/pages/monitor/SNMPMonitor.tsx +++ b/frontend/src/pages/monitor/SNMPMonitor.tsx @@ -183,8 +183,8 @@ export function SNMPMonitor() { {/* 工具栏 */}

-

SNMP 监控

-

5 分钟采集 · 指标保留 7 天

+

{t('monitor.lbl.snmpMonitorTitle')}

+

{t('monitor.lbl.snmpCollectInterval')}

- + setForm({ ...form, ip: e.target.value })} placeholder="192.168.1.1" />
@@ -217,7 +217,7 @@ export function SNMPMonitor() {
- + setForm({ ...form, snmp_version: v as 'v2c' | 'v3' })}> @@ -247,7 +247,7 @@ export function SNMPMonitor() { @@ -278,7 +278,7 @@ export function SNMPMonitor() { - 暂无 SNMP 设备,点击「添加设备」开始监控 + {t('monitor.lbl.snmpNoDevice')} ) : ( @@ -348,14 +348,14 @@ export function SNMPMonitor() { - {metricsDevice?.name} — 采集指标 + {metricsDevice?.name} — {t('monitor.lbl.snmpCollectMetrics')} {metricsDevice?.ip} · {templateName(metricsDevice?.template_id || 0)} {metricsLoading ? (
{t('monitor.logPanel.logResults.loading')}
) : metrics.length === 0 ? (
- 暂无指标,请先采集 + {t('monitor.lbl.snmpNoMetrics')} {metricsDevice?.last_error &&

{metricsDevice.last_error}

}
) : ( diff --git a/frontend/src/pages/monitor/SiteMonitor.tsx b/frontend/src/pages/monitor/SiteMonitor.tsx index 1c20fce..774bdb3 100644 --- a/frontend/src/pages/monitor/SiteMonitor.tsx +++ b/frontend/src/pages/monitor/SiteMonitor.tsx @@ -213,7 +213,7 @@ export function SiteMonitor() {

{t('monitor.alertRulesTab.catSite')}

-

HTTP Web 拨测 · SSL 证书检测 · TCP / DNS / PING

+

{t('monitor.lbl.siteMonitorSubtitle')}

{customOpen && ( @@ -110,10 +110,10 @@ export function HostTimeRangePicker({ value, onChange }: Props) {
diff --git a/frontend/src/pages/monitor/host-monitor/PortPolicyDialog.tsx b/frontend/src/pages/monitor/host-monitor/PortPolicyDialog.tsx index 283a7c0..a982de4 100644 --- a/frontend/src/pages/monitor/host-monitor/PortPolicyDialog.tsx +++ b/frontend/src/pages/monitor/host-monitor/PortPolicyDialog.tsx @@ -43,13 +43,13 @@ export function PortPolicyDialog({ className={`flex-1 h-9 rounded text-xs font-medium border transition-colors ${portPolicyMode === 'whitelist' ? 'bg-blue-500/20 border-blue-500 dg-text-blue' : 'bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] text-[var(--dg-text-muted)]'}`} onClick={() => onModeChange('whitelist')} > - 白名单 ─ 全量上报 + {t('monitor.lbl.whitelistFullReport')}

@@ -61,8 +61,8 @@ export function PortPolicyDialog({