From 39a4432f7985ccd6e56ca64a8154e9d5d1aa6b2c Mon Sep 17 00:00:00 2001 From: attacker Date: Tue, 14 Jul 2026 05:27:49 +0800 Subject: [PATCH] =?UTF-8?q?refactor(i18n):=20U43=20=E6=B7=B1=E5=BA=A6?= =?UTF-8?q?=E6=AE=8B=E4=BD=99=E7=A1=AC=E7=BC=96=E7=A0=81=E4=B8=AD=E6=96=87?= =?UTF-8?q?=20UI=20=E6=96=87=E6=9C=AC=E6=B8=85=E9=9B=B6=20=E2=80=94=2017?= =?UTF-8?q?=20=E6=96=87=E4=BB=B6=20~40=20=E5=A4=84=E2=86=920?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 趋势标签(上升/下降/平稳) + K8s 卡片标题(Pod级别/安全上下文/实例/详情) + data-table 默认值(搜索/暂无数据) + Deployment 编辑器标签(数据卷/挂载/只读写/manifest提示/镜像拉取凭证) + HostSettings 4 个命名空间描述 + 7 个 K8s 页面刷新按钮 + 资源编辑器新建/编辑 + Agent 执行命令描述 + 账单保存成功 toast + 容量预警标题 新增 common 30 语义化翻译键, zh/en 7898→7928 对齐 tsc -b=0, npm build✓ (16.55s), ESLint=0/43/any=0, go build=0, 17/17 测试通过 --- ROADMAP.md | 1 + .../src/components/agent/AgentMonitor.tsx | 2 +- .../src/components/agent/HostDetailDialog.tsx | 8 ++--- .../aiops/AIPredictiveAnalytics.tsx | 2 +- .../aiops/PredictiveCapacityTab.tsx | 4 +-- .../components/aiops/PredictiveCostTab.tsx | 8 ++--- .../components/cloud/BillingRecordDialog.tsx | 2 +- .../components/cloud/BillingRuleDialog.tsx | 2 +- .../components/kubernetes/CapacityPage.tsx | 4 +-- .../kubernetes/ClusterOverviewPage.tsx | 6 ++-- .../kubernetes/DeploymentEditContainers.tsx | 4 +-- .../kubernetes/DeploymentEditStorage.tsx | 10 +++--- .../src/components/kubernetes/EventsPage.tsx | 4 +-- .../components/kubernetes/KubernetesNodes.tsx | 4 +-- .../kubernetes/NamespaceManagementPage.tsx | 4 +-- .../kubernetes/NamespaceResourcePage.tsx | 4 +-- .../components/kubernetes/PodDetailDialog.tsx | 2 +- .../components/kubernetes/PodMetricsPage.tsx | 4 +-- .../kubernetes/ResourceVisualEditor.tsx | 2 +- .../HostSettingsCard.tsx | 8 ++--- .../deployment-edit-advanced/PodMiscCard.tsx | 4 ++- .../PodSecurityCard.tsx | 4 ++- .../workload-view/PodInstancesTable.tsx | 2 +- frontend/src/components/ui/data-table.tsx | 12 ++++--- frontend/src/locales/en-US.json | 36 +++++++++++++++++-- frontend/src/locales/zh-CN.json | 36 +++++++++++++++++-- 26 files changed, 117 insertions(+), 62 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index e588036..5384e6b 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -529,6 +529,7 @@ services/api.ts (1324L) | 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** | | U41 | i18n 残余硬编码中文清零 — 工具函数 + 审计RDP标签 + AIOps分析 + Monitor残余 + 审批选项(18 文件 ~35 处→0: agent-utils.ts timeAgo 秒前/分钟前/小时前 + utils.ts formatDistanceToNow 分钟前/小时前/天前 + request.ts 响应解析失败 + ActiveSessionsPanel RDP在线会话 + HistorySessionsPanel RDP历史会话/RDP会话共N条 + MetricsExplorer 清除/已选/最近1小时 + HostMonitor 当前主机 + AIAnalysisResult 证据链(useTranslation hook) + capacity-predict.ts 容量预测摘要模板 + ApprovalResourcePage 阿里云/腾讯云/华为云 + ApprovalPermissionPage 堡垒机 + site-monitor/helpers.ts 推荐频率/秒/分钟/小时/天 + site-monitor/analytics.ts 证书剩余/失败/延迟波动 + middleware-monitor/MwTargetChartsPanel 选择实例/已用/集群节点/慢查询 + MwTrendChart 暂无趋势数据 + middleware-monitor/helpers.ts 相对时间 + snmp-monitor/SnmpMetricTrendChart 暂无趋势数据等待采集 + SnmpDeviceChartsPanel 点击设备/可观测/刷新/暂无指标 + host-monitor/utils.ts 图表点数 + PortPolicyDialog 系统进程端口说明 — 新增 common.duration.secAgo/hourAgo/dayAgo + common.selected/responseParseError/rdpActiveSessions/rdpHistorySessions/rdpSessionCount/evidenceChain/last1Hour/currentHost + monitor.lbl 10键 + monitor.siteMonitor 8键 + approval.provider 3键 + approval.permType 1键 + monitor.portPolicyDialog.systemProcessDesc + aiops.capacity.summary 共 34 翻译键, zh/en 7813→7847 对齐;tsc -b=0, npm build✓ (17.31s), ESLint=0/43/any=0, go build=0, 17/17 测试通过) | P3 | **done** | +| U43 | i18n 深度残余硬编码中文 UI 文本清零 — 趋势标签 + K8s 卡片标题 + data-table 默认值 + 趋势文本 + 卡片描述(17 文件 ~40 处→0: AIPredictiveAnalytics 上升/下降/平稳 + PredictiveCostTab 上升/下降/平稳×2 + 当前/阈值/预测 + PredictiveCapacityTab 容量规划预警 + data-table.tsx 搜索.../暂无数据默认值(useTranslation hook) + PodMiscCard Pod 级别 + PodSecurityCard Pod 安全上下文 + HostSettingsCard 4 个主机命名空间描述 + PodInstancesTable Pod 实例 + PodDetailDialog Pod 详情 + HostDetailDialog 指标趋势/端口发现/远程命令/关闭 + DeploymentEditContainers manifest 提示/镜像拉取凭证 + DeploymentEditStorage 数据卷/空状态/挂载/只读/读写 + ClusterOverviewPage 管理全部 + ResourceVisualEditor 新建/编辑 + AgentMonitor 在...上执行命令 + 7 个 K8s 页面刷新按钮(PodMetrics/Capacity/Events/NamespaceResource/NamespaceMgmt/ClusterOverview/KubernetesNodes) + BillingRecord/BillingRuleDialog 保存成功 toast/保存按钮 — 新增 common 30 语义化翻译键(trendUp/trendDown/trendStable/executeOn/podLevel/podSecurityContext/hostNetworkDesc/hostIPCDesk/hostPIDDesk/shareProcessNamespaceDesc/podInstances/podDetail/metricTrend/portDiscovery/remoteCommand/searchPlaceholder/imagePullSecrets/noManifestHint/volumeDefinition/noVolumeHint/mountToContainers/readOnly/readWrite/manageAll/createNew/saveSuccess), zh/en 7898→7928 对齐;tsc -b=0, npm build✓ (16.55s), ESLint=0/43/any=0, go build=0, 17/17 测试通过) | P3 | **done** | | U42 | i18n 残余硬编码中文彻底清零 — 全量 JSX children + toast/confirm + sr-only 描述(33 文件 54 处→0: PredictiveCapacityTab AI深度解读/紧急/警告/7天使用率预测/预计N天/后达到阈值/AI建议 + PredictiveCostTab AI深度解读 + event-handler.ts 高危操作确认 toast + DeployCredentials 启用/禁用 + DeployRBAC 删除角色 confirm + WorkspaceTermDialog 标题 + CredFormDialog Windows用户 + ClusterOverviewPage 核 + DeploymentEditContainers Pod级别 + DeploymentEditService 无selector/个关联/Ingresses应用路由/暂无Service/暂无Ingress/自动高亮 + DeploymentEditStorage 无容器 + KubectlTerminal sr-only + KubernetesClusterDialog 已配置 + ResourceVisualEditor YAML编辑 + CreateHPADialog CPU目标 + UpdateStrategyCard maxSurge/maxUnavailable/revisionHistoryLimit/progressDeadlineSeconds 说明 + IngressCreateForm host域名/Service端口 + ServiceCreateForm 端口配置/个端口/selector自动检测 + PodInstancesTable Pod名称 + UpdateStrategySelectorCards Pod管理策略 + AlertRulesTab 删除confirm/分钟 + PrometheusDatasourceManager 删除confirm + LogDatasourcePage 删除confirm + QueryHistoryPanel 条 + ServerFileBrowser sr-only + TerminalDialog sr-only + CredentialManager 删除confirm + RdpAuditViewer sr-only + SystemManager 删除用户/批量删除 confirm + TerminalSessionsTab 删除confirm + SecuritySettingsTab 30分钟/2小时 + CronJobViewDialog 次 — 新增 k8s.editAdvanced 6键+k8s.editService 11键+k8s.cluster 2键+k8s.clusterDialog 1键+k8s.kubectlTerminalDesc/k8s.rve.yamlEditBtn/k8s.hpa.cpuTarget/k8s.podLevel/k8s.podNameLabel/k8s.podManagePolicy 共 28键 + aiops.capacity 8键+aiops.cost 1键+aiops.cli 2键 + deploy.cred.windowsUser/deploy.workspaceTerminalTitle/deploy.rbac.deleteRoleDesc/deploy.cred.badgeDefault 4键 + monitor.deleteRulesConfirmDesc/deleteDatasourceConfirmDesc/deleteLogDsConfirmDesc/durationMinutes/queryHistory.count 5键 + system.rdpLiveAudit/rdpHistoryReplay/rdpAuditDesc/sshTerminalDesc/sftpFileDesc/sftpFileLabel/deleteUserConfirmDesc/batchDeleteUsersConfirmDesc/deleteCredConfirmDesc/deleteTermSessionsConfirmDesc 10键 + task.cronJob.runCount 1键 + common.minutes30/hours2 2键, zh/en 7847→7898 对齐;tsc -b=0, npm build✓ (17.71s), 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/AgentMonitor.tsx b/frontend/src/components/agent/AgentMonitor.tsx index 9ffe16e..eec08a6 100644 --- a/frontend/src/components/agent/AgentMonitor.tsx +++ b/frontend/src/components/agent/AgentMonitor.tsx @@ -303,7 +303,7 @@ export function AgentMonitor() { {t("agent.agentmonitortsx.s8h9i0j1k")} - 在 {cmdHost} 上执行命令 + {t('common.executeOn', { host: cmdHost })} diff --git a/frontend/src/components/agent/HostDetailDialog.tsx b/frontend/src/components/agent/HostDetailDialog.tsx index 17f35b2..88fcc33 100644 --- a/frontend/src/components/agent/HostDetailDialog.tsx +++ b/frontend/src/components/agent/HostDetailDialog.tsx @@ -102,7 +102,7 @@ export function HostDetailDialog({
- 指标趋势 + {i18n.t('common.metricTrend')} + {i18n.t('common.refresh')} + {i18n.t('common.refresh')} )} > {/* 节点列表 // Logan.Li */} @@ -188,7 +186,7 @@ export default function ClusterOverviewPage() { {i18n.t("common.namespaceLabel")} - 管理全部 + {i18n.t('common.manageAll')}
diff --git a/frontend/src/components/kubernetes/DeploymentEditContainers.tsx b/frontend/src/components/kubernetes/DeploymentEditContainers.tsx index 91d67d3..0618b10 100644 --- a/frontend/src/components/kubernetes/DeploymentEditContainers.tsx +++ b/frontend/src/components/kubernetes/DeploymentEditContainers.tsx @@ -123,7 +123,7 @@ export function DeploymentEditContainers({ clusterCode, namespace, deploymentNam return ( - 未获取到 manifest 数据,请使用 YAML 编辑模式直接修改。 + {i18n.t('common.noManifestHint')} ); @@ -136,7 +136,7 @@ export function DeploymentEditContainers({ clusterCode, namespace, deploymentNam - 镜像拉取凭证 (imagePullSecrets) + {i18n.t('common.imagePullSecrets')} {i18n.t('k8s.podLevel')} diff --git a/frontend/src/components/kubernetes/DeploymentEditStorage.tsx b/frontend/src/components/kubernetes/DeploymentEditStorage.tsx index da1f053..380ae68 100644 --- a/frontend/src/components/kubernetes/DeploymentEditStorage.tsx +++ b/frontend/src/components/kubernetes/DeploymentEditStorage.tsx @@ -196,7 +196,7 @@ export function DeploymentEditStorage({ clusterCode, namespace, deploymentName,
- 数据卷 + {i18n.t('common.volumeDefinition')} {entries.length}

{i18n.t('kubernetes.storage.volumeDesc')}

@@ -210,7 +210,7 @@ export function DeploymentEditStorage({ clusterCode, namespace, deploymentName, {entries.length === 0 ? (
- 未配置数据卷,点击「添加数据卷」开始 + {i18n.t('common.noVolumeHint')}
) : entries.map((entry, i) => { const vol = entry.volume; @@ -282,7 +282,7 @@ export function DeploymentEditStorage({ clusterCode, namespace, deploymentName,

- 将上述数据卷挂载到容器 + {i18n.t('common.mountToContainers')}

+ {i18n.t('common.refresh')} )} > diff --git a/frontend/src/components/kubernetes/KubernetesNodes.tsx b/frontend/src/components/kubernetes/KubernetesNodes.tsx index 47a5e23..3d71d31 100644 --- a/frontend/src/components/kubernetes/KubernetesNodes.tsx +++ b/frontend/src/components/kubernetes/KubernetesNodes.tsx @@ -101,9 +101,7 @@ export function KubernetesNodes() { + {i18n.t('common.refresh')} )} > diff --git a/frontend/src/components/kubernetes/NamespaceManagementPage.tsx b/frontend/src/components/kubernetes/NamespaceManagementPage.tsx index 18a212a..53900fd 100644 --- a/frontend/src/components/kubernetes/NamespaceManagementPage.tsx +++ b/frontend/src/components/kubernetes/NamespaceManagementPage.tsx @@ -137,9 +137,7 @@ export default function NamespaceManagementPage() { actions={( <> + {i18n.t('common.refresh')} + {i18n.t('common.refresh')} {BULK_EXPORT_TYPES.includes(type) && ( <>
diff --git a/frontend/src/components/kubernetes/PodMetricsPage.tsx b/frontend/src/components/kubernetes/PodMetricsPage.tsx index 216d9a2..fd2effc 100644 --- a/frontend/src/components/kubernetes/PodMetricsPage.tsx +++ b/frontend/src/components/kubernetes/PodMetricsPage.tsx @@ -115,9 +115,7 @@ export default function PodMetricsPage() { + {i18n.t('common.refresh')} )} > diff --git a/frontend/src/components/kubernetes/ResourceVisualEditor.tsx b/frontend/src/components/kubernetes/ResourceVisualEditor.tsx index 0c19ede..d1a7e5f 100644 --- a/frontend/src/components/kubernetes/ResourceVisualEditor.tsx +++ b/frontend/src/components/kubernetes/ResourceVisualEditor.tsx @@ -182,7 +182,7 @@ export function ResourceVisualEditor({ clusterCode, namespace, resource, name, o

- {isCreate ? `新建 ${meta.title}` : `${meta.title} 编辑`} + {isCreate ? i18n.t('common.createNew') + ' ' + meta.title : meta.title + ' ' + i18n.t('common.edit')}

onHostNetworkChange(e.target.checked)} className="accent-blue-500" /> - hostNetwork(共享主机网络命名空间) + {i18n.t('common.hostNetworkDesc')} diff --git a/frontend/src/components/kubernetes/deployment-edit-advanced/PodMiscCard.tsx b/frontend/src/components/kubernetes/deployment-edit-advanced/PodMiscCard.tsx index a5d34eb..0469ec0 100644 --- a/frontend/src/components/kubernetes/deployment-edit-advanced/PodMiscCard.tsx +++ b/frontend/src/components/kubernetes/deployment-edit-advanced/PodMiscCard.tsx @@ -1,6 +1,7 @@ // PodMiscCard.tsx — Pod 级别杂项设置卡片 (Q21 提取) // dnsPolicy / restartPolicy / schedulerName / terminationGracePeriodSeconds / serviceAccountName import { Settings } from 'lucide-react'; +import { useTranslation } from 'react-i18next'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; @@ -25,11 +26,12 @@ export function PodMiscCard({ terminationGracePeriodSeconds, onTerminationGracePeriodSecondsChange, serviceAccountName, onServiceAccountNameChange, }: PodMiscCardProps) { + const { t } = useTranslation(); return ( - Pod 级别 + {t('common.podLevel')} diff --git a/frontend/src/components/kubernetes/deployment-edit-advanced/PodSecurityCard.tsx b/frontend/src/components/kubernetes/deployment-edit-advanced/PodSecurityCard.tsx index 63b75ca..51ec23d 100644 --- a/frontend/src/components/kubernetes/deployment-edit-advanced/PodSecurityCard.tsx +++ b/frontend/src/components/kubernetes/deployment-edit-advanced/PodSecurityCard.tsx @@ -1,5 +1,6 @@ // PodSecurityCard.tsx — Pod 安全上下文 (securityContext) 卡片 (Q21 提取) import { Shield } from 'lucide-react'; +import { useTranslation } from 'react-i18next'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; @@ -21,11 +22,12 @@ export function PodSecurityCard({ podRunAsGroup, onPodRunAsGroupChange, podRunAsNonRoot, onPodRunAsNonRootChange, }: PodSecurityCardProps) { + const { t } = useTranslation(); return ( - Pod 安全上下文 (securityContext) + {t('common.podSecurityContext')} diff --git a/frontend/src/components/kubernetes/workload-view/PodInstancesTable.tsx b/frontend/src/components/kubernetes/workload-view/PodInstancesTable.tsx index 4cb2b10..8ee6957 100644 --- a/frontend/src/components/kubernetes/workload-view/PodInstancesTable.tsx +++ b/frontend/src/components/kubernetes/workload-view/PodInstancesTable.tsx @@ -23,7 +23,7 @@ export function PodInstancesTable({ - Pod 实例 ({pods.length}) + {i18n.t('common.podInstances', { count: pods.length })} diff --git a/frontend/src/components/ui/data-table.tsx b/frontend/src/components/ui/data-table.tsx index 257b5b4..ce2a06f 100644 --- a/frontend/src/components/ui/data-table.tsx +++ b/frontend/src/components/ui/data-table.tsx @@ -22,6 +22,7 @@ * ``` */ import * as React from 'react'; +import { useTranslation } from 'react-i18next'; import { Table, TableBody, @@ -224,7 +225,7 @@ export function DataTable>( data, rowKey, searchable = false, - searchPlaceholder = '搜索...', + searchPlaceholder = undefined, searchKeys, sortable: globalSortable = false, pagination: enablePagination = false, @@ -237,7 +238,7 @@ export function DataTable>( exportFilename = 'export.csv', columnToggle = false, loading = false, - emptyText = '暂无数据', + emptyText = undefined, emptyRender, onRowClick, rowClassName, @@ -247,6 +248,9 @@ export function DataTable>( toolbarExtra, } = props; + const { t } = useTranslation(); + const effectiveSearchPlaceholder = searchPlaceholder ?? t('common.searchPlaceholder'); + const effectiveEmptyText = emptyText ?? t('common.noData'); // ── Search state ── const [searchTerm, setSearchTerm] = React.useState(''); @@ -405,7 +409,7 @@ export function DataTable>( type="text" value={searchTerm} onChange={(e) => setSearchTerm(e.target.value)} - placeholder={searchPlaceholder} + placeholder={effectiveSearchPlaceholder} className="pl-9 h-9 w-56 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]" />

@@ -532,7 +536,7 @@ export function DataTable>( colSpan={visibleColumns.length + (selectable ? 1 : 0)} className="text-center text-[var(--dg-text-muted)] py-16" > - {emptyRender ? emptyRender() : emptyText} + {emptyRender ? emptyRender() : effectiveEmptyText} ) : ( diff --git a/frontend/src/locales/en-US.json b/frontend/src/locales/en-US.json index 85cf9bc..cbb9b4c 100644 --- a/frontend/src/locales/en-US.json +++ b/frontend/src/locales/en-US.json @@ -636,7 +636,33 @@ "last1Hour": "Last 1 hour", "currentHost": "Current host: {{host}}", "minutes30": "30 min", - "hours2": "2 hours" + "hours2": "2 hours", + "trendUp": "Up", + "trendDown": "Down", + "trendStable": "Stable", + "executeOn": "Execute command on {{host}}", + "podLevel": "Pod Level", + "podSecurityContext": "Pod Security Context", + "hostNetworkDesc": "hostNetwork (share host network namespace)", + "hostIPCDesk": "hostIPC (share host IPC namespace)", + "hostPIDDesk": "hostPID (share host PID namespace)", + "shareProcessNamespaceDesc": "shareProcessNamespace (share process namespace)", + "podInstances": "Pod Instances ({{count}})", + "podDetail": "Pod Details", + "metricTrend": "Metric Trends", + "portDiscovery": "Port Discovery ({{count}})", + "remoteCommand": "Remote Command", + "searchPlaceholder": "Search...", + "imagePullSecrets": "Image Pull Secrets", + "noManifestHint": "No manifest data available. Please use YAML edit mode to modify directly.", + "volumeDefinition": "Volumes", + "noVolumeHint": "No volumes configured. Click \"Add Volume\" to start.", + "mountToContainers": "Mount volumes to containers", + "readOnly": "Read Only", + "readWrite": "Read Write", + "manageAll": "Manage All", + "createNew": "Create New", + "saveSuccess": "Saved successfully" }, "menu": { "aiAgentCli": "Agent CLI", @@ -3713,7 +3739,8 @@ "kubectlTerminalDesc": "Kubernetes cluster command-line terminal", "podLevel": "Pod Level", "podNameLabel": "Pod Name", - "podManagePolicy": "Pod Management Policy" + "podManagePolicy": "Pod Management Policy", + "uploadFile": "Upload" }, "monitor": { "acknowledge": "Acknowledge", @@ -8021,7 +8048,10 @@ "expectedToReach": "Expected to", "days": "days", "afterReachThreshold": "until threshold reached", - "aiSuggestion": "AI Suggestion" + "aiSuggestion": "AI Suggestion", + "warningTitle": "Capacity Planning Alerts", + "currentThreshold": "Current {{current}} / Threshold {{threshold}}", + "predictedLabel": ", Predicted {{predicted}}" }, "capacityPlanPrompt": "Based on the following host resource usage, provide cost optimization and capacity planning advice (identify idle/overloaded hosts; suggest scale-down/scale-up)", "capacityPlanning": "Capacity Planning", diff --git a/frontend/src/locales/zh-CN.json b/frontend/src/locales/zh-CN.json index 90213f8..e927eb2 100644 --- a/frontend/src/locales/zh-CN.json +++ b/frontend/src/locales/zh-CN.json @@ -636,7 +636,33 @@ "last1Hour": "最近 1 小时", "currentHost": "当前主机: {{host}}", "minutes30": "30分钟", - "hours2": "2小时" + "hours2": "2小时", + "trendUp": "上升", + "trendDown": "下降", + "trendStable": "平稳", + "executeOn": "在 {{host}} 上执行命令", + "podLevel": "Pod 级别", + "podSecurityContext": "Pod 安全上下文 (securityContext)", + "hostNetworkDesc": "hostNetwork(共享主机网络命名空间)", + "hostIPCDesk": "hostIPC(共享主机 IPC 命名空间)", + "hostPIDDesk": "hostPID(共享主机 PID 命名空间)", + "shareProcessNamespaceDesc": "shareProcessNamespace(共享进程命名空间)", + "podInstances": "Pod 实例 ({{count}})", + "podDetail": "Pod 详情", + "metricTrend": "指标趋势", + "portDiscovery": "端口发现 ({{count}})", + "remoteCommand": "远程命令", + "searchPlaceholder": "搜索...", + "imagePullSecrets": "镜像拉取凭证 (imagePullSecrets)", + "noManifestHint": "未获取到 manifest 数据,请使用 YAML 编辑模式直接修改。", + "volumeDefinition": "数据卷", + "noVolumeHint": "未配置数据卷,点击「添加数据卷」开始", + "mountToContainers": "将上述数据卷挂载到容器", + "readOnly": "只读", + "readWrite": "读写", + "manageAll": "管理全部", + "createNew": "新建", + "saveSuccess": "保存成功" }, "menu": { "aiAgentCli": "Agent CLI", @@ -3713,7 +3739,8 @@ "kubectlTerminalDesc": "Kubernetes 集群命令行终端", "podLevel": "Pod 级别", "podNameLabel": "Pod 名称", - "podManagePolicy": "Pod 管理策略" + "podManagePolicy": "Pod 管理策略", + "uploadFile": "上传" }, "monitor": { "acknowledge": "确认告警", @@ -8021,7 +8048,10 @@ "expectedToReach": "预计", "days": "天", "afterReachThreshold": "后达到阈值", - "aiSuggestion": "AI建议" + "aiSuggestion": "AI建议", + "warningTitle": "容量规划预警", + "currentThreshold": "当前 {{current}} / 阈值 {{threshold}}", + "predictedLabel": ",预测 {{predicted}}" }, "capacityPlanPrompt": "根据以下主机资源使用数据,提供成本优化和容量规划建议(识别闲置/过载主机,给出缩容/扩容建议)", "capacityPlanning": "容量规划",