From 72bfb0e12d02736d96e36a7fe1ba05c95031c9ea Mon Sep 17 00:00:00 2001 From: attacker Date: Fri, 3 Jul 2026 02:02:29 +0800 Subject: [PATCH] =?UTF-8?q?fix(i18n):=20=E5=9B=9E=E9=80=80=E5=88=B0?= =?UTF-8?q?=E7=A8=B3=E5=AE=9A=E7=9A=84=2032%=20=E8=A6=86=E7=9B=96=E7=8E=87?= =?UTF-8?q?=E7=8A=B6=E6=80=81=20(tsc=20+=20Vite=20=E6=9E=84=E5=BB=BA?= =?UTF-8?q?=E9=80=9A=E8=BF=87)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 批量转换脚本引入的语法错误已回退,保留稳定的 i18n 转换: - 翻译词典: 22 namespaces, 3600+ keys - 已接入: 145+ 文件 (Dashboard/Login/K8s 主页面/Monitor/System/Deploy) - 语言切换器在 Header 中可用 (🇨🇳/🇺🇸) - tsc 零错误, Vite 构建成功 --- frontend/src/components/agent/AgentAlerts.tsx | 44 +- .../src/components/agent/AgentMonitor.tsx | 45 +- .../src/components/agent/AgentRuleDialog.tsx | 38 +- frontend/src/components/agent/AgentWizard.tsx | 44 +- .../src/components/agent/HostDetailDialog.tsx | 31 +- .../src/components/agent/agentAlertHelper.tsx | 51 +- .../src/components/aiops/AIAlertAnalyzer.tsx | 20 +- .../src/components/aiops/AIOpsAssistant.tsx | 69 +- .../aiops/AIPredictiveAnalytics.tsx | 44 +- frontend/src/components/aiops/AgentCLI.tsx | 111 +- frontend/src/components/aiops/LLMConfig.tsx | 127 +- .../components/cloud/BillingRecordDialog.tsx | 32 +- .../components/cloud/BillingRuleDialog.tsx | 42 +- .../components/cloud/CloudBillingHelpers.tsx | 13 +- .../src/components/cloud/PlatformManager.tsx | 77 +- .../components/deploy/BuildNodesManager.tsx | 78 +- .../deploy/CredentialFormDialog.tsx | 16 +- .../components/deploy/DeployCredentials.tsx | 88 +- frontend/src/components/deploy/DeployRBAC.tsx | 87 +- .../components/deploy/FileBrowserDialog.tsx | 16 +- .../deploy/PipelineDetailDialog.tsx | 4 +- .../components/deploy/PipelineFormDialog.tsx | 4 +- .../components/deploy/PipelineRunDetail.tsx | 108 +- .../components/deploy/ReleaseApplyDialog.tsx | 32 +- .../deploy/ReleaseApproveDialog.tsx | 16 +- .../src/components/deploy/ToolConfigTab.tsx | 68 +- .../components/deploy/UserGroupsManager.tsx | 60 +- .../components/deploy/WorkspaceTermDialog.tsx | 10 +- .../credential-manager/CredDetailDialog.tsx | 74 +- .../credential-manager/CredFormDialog.tsx | 90 +- .../deploy/credential-manager/constants.ts | 15 +- .../components/deploy/pipeline-helpers.tsx | 76 +- .../pipeline-manager/DeployTargetFields.tsx | 32 +- .../deploy/pipeline-manager/PipelineCard.tsx | 2 +- .../pipeline-manager/PipelineRunPanel.tsx | 23 +- .../deploy/pipeline-manager/constants.ts | 15 +- .../components/kubernetes/CapacityPage.tsx | 16 +- .../kubernetes/ClusterComparePage.tsx | 68 +- .../kubernetes/ClusterOverviewPage.tsx | 26 +- .../kubernetes/DeploymentDetail.tsx | 30 +- .../kubernetes/DeploymentEditAdvanced.tsx | 26 +- .../kubernetes/DeploymentEditBasic.tsx | 36 +- .../kubernetes/DeploymentEditContainers.tsx | 28 +- .../kubernetes/DeploymentEditService.tsx | 64 +- .../kubernetes/DeploymentEditStorage.tsx | 49 +- .../components/kubernetes/DeploymentView.tsx | 40 +- .../kubernetes/DeploymentWorkload.tsx | 80 +- .../src/components/kubernetes/EventTable.tsx | 16 +- .../src/components/kubernetes/EventsPage.tsx | 41 +- .../kubernetes/K8sShortcutRedirect.tsx | 4 +- .../components/kubernetes/KubectlTerminal.tsx | 10 +- .../kubernetes/KubernetesClusterDialog.tsx | 36 +- .../kubernetes/KubernetesClusters.tsx | 65 +- .../components/kubernetes/KubernetesNodes.tsx | 28 +- .../kubernetes/KubernetesWorkloads.tsx | 36 +- .../kubernetes/NamespaceManagementPage.tsx | 42 +- .../kubernetes/NamespaceOverviewPage.tsx | 25 +- .../kubernetes/NamespaceResourcePage.tsx | 141 +- .../components/kubernetes/NodeDetailPage.tsx | 56 +- .../components/kubernetes/PodExecTerminal.tsx | 30 +- .../components/kubernetes/PodFileBrowser.tsx | 14 +- .../components/kubernetes/PodLogsViewer.tsx | 57 +- .../components/kubernetes/PodMetricsPage.tsx | 20 +- .../kubernetes/ResourceVisualEditor.tsx | 141 +- .../components/kubernetes/TopologyView.tsx | 8 +- .../kubernetes/WorkloadViewPage.tsx | 97 +- .../kubernetes/YamlImportDialog.tsx | 14 +- .../src/components/kubernetes/YamlViewer.tsx | 12 +- .../kubernetes/deployment-bundle-yaml.ts | 7 +- .../deployment-detail/CreateHPADialog.tsx | 26 +- .../deployment-detail/DeploymentOverview.tsx | 24 +- .../deployment-edit/ContainerEditor.tsx | 103 +- .../deployment-edit/ContainerGroupSection.tsx | 14 +- .../kubernetes/deployment-manifest-save.ts | 3 +- .../kubernetes/deployment-storage-fields.tsx | 34 +- .../kubernetes/deployment-view/helpers.tsx | 24 +- .../CICDWebhookContent.tsx | 59 +- .../deployment-workload/EditModeContainer.tsx | 12 +- .../deployment-workload/PodLogsModal.tsx | 12 +- .../deployment-workload/UpdateImageModal.tsx | 30 +- .../components/kubernetes/k8s-event-utils.ts | 9 +- .../kubernetes/topology-helpers.tsx | 27 +- frontend/src/components/layout/Breadcrumb.tsx | 6 +- .../src/components/layout/ErrorBoundary.tsx | 13 +- .../components/monitor/AlertChannelDialog.tsx | 28 +- .../src/components/monitor/AlertManager.tsx | 26 +- .../components/monitor/AlertRuleDialog.tsx | 52 +- .../src/components/monitor/AlertRulesTab.tsx | 38 +- .../alert-center/AlertChannelDialog.tsx | 46 +- .../monitor/alert-center/AlertChannelsTab.tsx | 34 +- .../monitor/alert-center/AlertRulesTab.tsx | 33 +- .../monitor/alert-center/ContactDialog.tsx | 43 +- .../alert-center/ContactGroupDialog.tsx | 28 +- .../monitor/alert-center/MetricCatalogTab.tsx | 26 +- .../alert-center/MonitorRuleDialog.tsx | 53 +- .../monitor/alert-center/NotifyPolicyTab.tsx | 67 +- .../monitor/alert-center/SilenceDialog.tsx | 65 +- .../monitor/alert-center/SilenceRuleTab.tsx | 65 +- .../alert-center/SilenceRulesPanel.tsx | 57 +- .../alert-center/alert-center-helpers.tsx | 43 +- .../src/components/monitor/alertShared.tsx | 19 +- .../monitor/dashboard/GrafanaPanelContent.tsx | 16 +- .../dashboard/HostMonitorDashboard.tsx | 70 +- .../monitor/dashboard/PrometheusDashboard.tsx | 19 +- .../monitor/dashboard/ZabbixDashboard.tsx | 18 +- .../PrometheusDatasourceManager.tsx | 38 +- .../datasource/ZabbixDatasourceManager.tsx | 80 +- .../prometheus-ds/PromDsFormDialog.tsx | 46 +- .../datasource/prometheus-ds/helpers.ts | 7 +- .../monitor/log-center/EnhancedLogResults.tsx | 20 +- .../monitor/log-center/EsIndexPicker.tsx | 10 +- .../log-center/LogAlertFromQueryDialog.tsx | 34 +- .../monitor/log-center/LogAlertsPanel.tsx | 12 +- .../monitor/log-center/LogClusterPanel.tsx | 7 +- .../log-center/LogDatasourceDialog.tsx | 42 +- .../monitor/log-center/LogDatasourcePage.tsx | 44 +- .../monitor/log-center/LogDingAssistant.tsx | 6 +- .../monitor/log-center/LogFieldSidebar.tsx | 5 +- .../monitor/log-center/LogHistogram.tsx | 4 +- .../components/monitor/log-center/LogNav.tsx | 13 +- .../monitor/log-center/LogQueryToolbar.tsx | 21 +- .../components/monitor/log-center/LogRBAC.tsx | 85 +- .../monitor/log-center/LokiLabelBrowser.tsx | 4 +- .../monitor/log-center/QueryHistoryPanel.tsx | 21 +- .../monitor/log-center/QuickQueryBar.tsx | 57 +- .../monitor/log-center/SaveQueryDialog.tsx | 39 +- .../monitor/log-center/SavedQueriesPanel.tsx | 10 +- .../monitor/log-center/TimeRangePicker.tsx | 91 +- .../monitor/log-center/UnifiedQueryPanel.tsx | 83 +- .../monitor/log-center/query-url-state.ts | 3 +- .../components/monitor/log-center/types-v3.ts | 39 +- .../components/monitor/trace/TraceManager.tsx | 140 +- .../components/server/CloudServerImport.tsx | 75 +- .../components/server/ExcelServerImport.tsx | 66 +- .../components/server/ServerFileBrowser.tsx | 38 +- frontend/src/components/server/ServerForm.tsx | 50 +- .../components/server/ServerStatsStrip.tsx | 10 +- .../src/components/server/ServerTableRow.tsx | 8 +- .../src/components/server/TerminalDialog.tsx | 22 +- frontend/src/components/server/WebShell.tsx | 30 +- .../components/system/CredentialManager.tsx | 85 +- .../src/components/system/CsvImportDialog.tsx | 18 +- .../components/system/LdapImportDialog.tsx | 20 +- .../system/LdapManagementSection.tsx | 80 +- .../components/system/LiveMonitorDialog.tsx | 20 +- .../components/system/ResetPasswordDialog.tsx | 20 +- .../src/components/system/RoleFormDialog.tsx | 47 +- .../src/components/system/SystemLogsTab.tsx | 26 +- .../src/components/system/SystemManager.tsx | 32 +- .../src/components/system/SystemRolesTab.tsx | 54 +- .../components/system/SystemSettingsTab.tsx | 162 +- .../src/components/system/SystemUserTab.tsx | 26 +- .../components/system/TerminalSessionsTab.tsx | 44 +- .../components/system/UserDetailDialog.tsx | 20 +- .../src/components/system/UserFormDialog.tsx | 38 +- .../components/system/useLdapManagement.ts | 35 +- .../src/components/task/CronJobFormDialog.tsx | 59 +- .../src/components/task/CronJobManager.tsx | 68 +- .../src/components/task/RemoteExecPage.tsx | 31 +- .../src/components/task/ScriptManager.tsx | 52 +- frontend/src/components/task/ScriptTable.tsx | 18 +- .../src/components/task/TerminalOutput.tsx | 7 +- .../src/components/task/script-helpers.tsx | 7 +- frontend/src/components/ui/data-table.tsx | 13 +- .../components/user/ApiAccessKeySection.tsx | 88 +- frontend/src/locales/en-US.json | 2433 ++++---------- frontend/src/locales/zh-CN.json | 2802 ++++++----------- frontend/src/pages/monitor/HostMonitor.tsx | 114 +- .../src/pages/monitor/MetricsExplorer.tsx | 33 +- .../src/pages/monitor/MiddlewareMonitor.tsx | 46 +- frontend/src/pages/monitor/MonitorCenter.tsx | 15 +- frontend/src/pages/monitor/SNMPMonitor.tsx | 62 +- frontend/src/pages/monitor/SiteMonitor.tsx | 82 +- .../monitor/host-monitor/DualLineChart.tsx | 8 +- .../host-monitor/HealthProbeSection.tsx | 50 +- .../host-monitor/HostTimeRangePicker.tsx | 10 +- .../monitor/host-monitor/PortPolicyDialog.tsx | 24 +- .../host-monitor/ZoomableAreaChart.tsx | 7 +- .../src/pages/monitor/host-monitor/types.ts | 17 +- .../src/pages/monitor/host-monitor/utils.ts | 3 +- .../middleware-monitor/MiddlewareDialog.tsx | 34 +- .../middleware-monitor/MwOverviewCharts.tsx | 17 +- .../MwTargetChartsPanel.tsx | 43 +- .../monitor/middleware-monitor/helpers.ts | 53 +- .../pages/monitor/shared/ChartRangeHint.tsx | 4 +- .../site-monitor/SiteProtocolPieChart.tsx | 6 +- .../monitor/site-monitor/SiteResultsPanel.tsx | 65 +- .../src/pages/monitor/site-monitor/helpers.ts | 35 +- .../site-monitor/observability/analytics.ts | 21 +- .../snmp-monitor/SnmpDeviceChartsPanel.tsx | 14 +- .../snmp-monitor/SnmpOverviewCharts.tsx | 14 +- 191 files changed, 5057 insertions(+), 7592 deletions(-) diff --git a/frontend/src/components/agent/AgentAlerts.tsx b/frontend/src/components/agent/AgentAlerts.tsx index e2a3d89..7a802ff 100644 --- a/frontend/src/components/agent/AgentAlerts.tsx +++ b/frontend/src/components/agent/AgentAlerts.tsx @@ -28,10 +28,8 @@ import { } from './agentAlertHelper'; import { AgentRuleDialog } from './AgentRuleDialog'; import type { JsonData } from '@/types/common'; -import { useTranslation } from 'react-i18next'; export function AgentAlerts() { - const { t } = useTranslation(); const confirm = useConfirm(); const [activeTab, setActiveTab] = useState('events'); const [alerts, setAlerts] = useState([]); @@ -54,7 +52,7 @@ export function AgentAlerts() { setRules(asList(rulesRes)); } catch (err) { console.error(err); - toast.error(t('agent.agentalerts.s7ffaa4')); + toast.error('加载告警数据失败'); } finally { setLoading(false); } @@ -66,14 +64,14 @@ export function AgentAlerts() { // ============ 告警事件 ============ const handleResolve = async (id: number) => { - const ok = await confirm({ title: t('agent.agentalerts.sd56d01'), description: t('agent.agentalerts.s99f0fb'), confirmText: t('common.resume') }); + const ok = await confirm({ title: '恢复告警', description: '确定将此告警标记为已恢复?', confirmText: '恢复' }); if (!ok) return; try { await agentApi.resolveAlert(id); - toast.success(t('agent.agentalerts.s0e2352')); + toast.success('告警已恢复'); loadData(); } catch (err) { - toast.error(err?.message || t('common.operationFailed')); + toast.error(err?.message || '操作失败'); } }; @@ -89,14 +87,14 @@ export function AgentAlerts() { }; const handleDeleteRule = async (id: number) => { - const ok = await confirm({ title: t('alert.deleteRule'), description: t('agent.agentalerts.sd30155'), confirmText: t('common.delete'), variant: 'destructive' }); + const ok = await confirm({ title: '删除规则', description: '确定删除此告警规则?', confirmText: '删除', variant: 'destructive' }); if (!ok) return; try { await agentApi.deleteRule(id); - toast.success(t('agent.agentalerts.s8b2798')); + toast.success('规则已删除'); loadData(); } catch (err) { - toast.error(err?.message || t('common.deleteFailed')); + toast.error(err?.message || '删除失败'); } }; @@ -105,7 +103,7 @@ export function AgentAlerts() { await agentApi.updateRule(rule.id, { ...rule, enabled: !rule.enabled }); loadData(); } catch (err) { - toast.error(err?.message || t('common.operationFailed')); + toast.error(err?.message || '操作失败'); } }; @@ -114,8 +112,8 @@ export function AgentAlerts() { {/* 页头 */}
-

{t('agent.agentalerts.s87efbd')}

-

{t('agent.agentalerts.s03a08c')}

+

Agent 告警

+

基于 Agent 上报指标的告警规则与事件

diff --git a/frontend/src/components/agent/AgentMonitor.tsx b/frontend/src/components/agent/AgentMonitor.tsx index 13a3e77..34c2975 100644 --- a/frontend/src/components/agent/AgentMonitor.tsx +++ b/frontend/src/components/agent/AgentMonitor.tsx @@ -23,7 +23,6 @@ import { } from '@/components/ui/dialog'; import { -import { useTranslation } from 'react-i18next'; Cpu, MemoryStick, HardDrive, @@ -42,7 +41,6 @@ import { useTranslation } from 'react-i18next'; // ============ 组件 ============ export function AgentMonitor() { - const { t } = useTranslation(); const [hosts, setHosts] = useState([]); const [loading, setLoading] = useState(true); const [refreshing, setRefreshing] = useState(false); @@ -70,7 +68,7 @@ export function AgentMonitor() { if (fresh) setSelectedHost(fresh); } } catch (err) { - if (!silent) toast.error(t('agent.agentmonitor.s5760f6')); + if (!silent) toast.error('加载主机列表失败'); console.error(err); } finally { setLoading(false); @@ -99,7 +97,7 @@ export function AgentMonitor() { // 提交远程命令(直连 SSH 即时返回) const submitCommand = async () => { if (!cmdCommand.trim()) { - toast.error(t('agent.agentmonitor.s9358aa')); + toast.error('请输入要执行的命令'); return; } setCmdSubmitting(true); @@ -113,11 +111,11 @@ 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) || t('agent.agentmonitor.s26d45b'), + result: (resData.output as string) || (res?.message as string) || '无输出', error: resData.error as string | undefined, }); } catch (err) { - setCmdResult({ status: 'failed', result: err?.message || t('automation.scriptFailed') }); + setCmdResult({ status: 'failed', result: err?.message || '执行失败' }); } finally { setCmdSubmitting(false); loadLatest(true); @@ -131,9 +129,9 @@ export function AgentMonitor() { const onlineCount = hosts.filter((h) => isOnline(h.last_report || h.last_reported_at || h.updated_at)).length; const stats = [ - { label: t('agent.agentmonitor.sd94cd2'), value: hosts.length, icon: Server, color: 'dg-text-blue' }, - { label: t('common.online'), value: onlineCount, icon: Wifi, color: 'dg-text-green' }, - { label: t('common.offline'), value: hosts.length - onlineCount, icon: WifiOff, color: 'dg-text-red' }, + { label: '主机总数', value: hosts.length, icon: Server, color: 'dg-text-blue' }, + { label: '在线', value: onlineCount, icon: Wifi, color: 'dg-text-green' }, + { label: '离线', value: hosts.length - onlineCount, icon: WifiOff, color: 'dg-text-red' }, ]; return ( @@ -141,8 +139,8 @@ export function AgentMonitor() { {/* 页头 */}
-

{t('agent.agentMonitor')}

-

{t('agent.agentmonitor.sa75d75')}

+

Agent 监控

+

实时监控 Agent 上报的主机指标