From c6e0d6ca573455a4cfb5cf8eed3a6403dd7dfea5 Mon Sep 17 00:00:00 2001 From: attacker Date: Tue, 14 Jul 2026 00:51:36 +0800 Subject: [PATCH] =?UTF-8?q?refactor(i18n):=20U42=20=E6=AE=8B=E4=BD=99?= =?UTF-8?q?=E7=A1=AC=E7=BC=96=E7=A0=81=E4=B8=AD=E6=96=87=E5=BD=BB=E5=BA=95?= =?UTF-8?q?=E6=B8=85=E9=9B=B6=20=E2=80=94=2033=E6=96=87=E4=BB=B654?= =?UTF-8?q?=E5=A4=84=E2=86=920,=20zh/en=207847=E2=86=927898=E5=AF=B9?= =?UTF-8?q?=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 全量 JSX children + toast/confirm + sr-only 描述硬编码中文清零: - Kubernetes模块: UpdateStrategyCard maxSurge/maxUnavailable说明 + IngressCreateForm host域名/Service端口 + ServiceCreateForm 端口配置/selector + DeploymentEditService 无selector/个关联/暂无Service/Ingress + ClusterOverviewPage 核 + KubernetesClusterDialog 已配置 + KubectlTerminal/ResourceVisualEditor/CreateHPADialog/DeploymentEditContainers/Storage + PodInstancesTable/UpdateStrategySelectorCards - AI模块: PredictiveCapacityTab AI深度解读/紧急/警告/7天预测/预计N天 + PredictiveCostTab AI深度解读 + event-handler.ts 高危操作确认toast - Deploy模块: DeployCredentials 启用/禁用 + DeployRBAC 删除角色confirm + WorkspaceTermDialog + CredFormDialog Windows用户 - Monitor模块: AlertRulesTab 删除confirm/分钟 + PrometheusDatasourceManager/LogDatasourcePage 删除confirm + QueryHistoryPanel 条 - System模块: ServerFileBrowser/TerminalDialog/RdpAuditViewer sr-only + SystemManager/CredentialManager/TerminalSessionsTab 删除confirm + SecuritySettingsTab 30分钟/2小时 - Task模块: CronJobViewDialog 次 新增 61 翻译键 (k8s.editAdvanced 6 + k8s.editService 11 + k8s.cluster 2 + k8s.misc 9 + aiops.capacity 9 + aiops.cost 1 + aiops.cli 2 + deploy 4 + monitor 5 + system 10 + task 1 + common 2) tsc -b=0, npm build✓ (17.71s), ESLint=0/43/any=0, go build=0, 17/17 测试通过 --- ROADMAP.md | 1 + .../aiops/PredictiveCapacityTab.tsx | 20 ++-- .../components/aiops/PredictiveCostTab.tsx | 2 +- .../aiops/agent-cli/event-handler.ts | 9 +- .../components/deploy/DeployCredentials.tsx | 2 +- frontend/src/components/deploy/DeployRBAC.tsx | 2 +- .../components/deploy/WorkspaceTermDialog.tsx | 2 +- .../credential-manager/CredFormDialog.tsx | 2 +- .../kubernetes/ClusterOverviewPage.tsx | 2 +- .../kubernetes/DeploymentEditContainers.tsx | 2 +- .../kubernetes/DeploymentEditService.tsx | 12 +-- .../kubernetes/DeploymentEditStorage.tsx | 2 +- .../components/kubernetes/KubectlTerminal.tsx | 2 +- .../kubernetes/KubernetesClusterDialog.tsx | 4 +- .../kubernetes/ResourceVisualEditor.tsx | 2 +- .../deployment-detail/CreateHPADialog.tsx | 2 +- .../UpdateStrategyCard.tsx | 12 +-- .../IngressCreateForm.tsx | 4 +- .../ServiceCreateForm.tsx | 4 +- .../workload-view/PodInstancesTable.tsx | 4 +- .../UpdateStrategySelectorCards.tsx | 2 +- .../src/components/monitor/AlertRulesTab.tsx | 4 +- .../PrometheusDatasourceManager.tsx | 2 +- .../monitor/log-center/LogDatasourcePage.tsx | 2 +- .../monitor/log-center/QueryHistoryPanel.tsx | 2 +- .../components/server/ServerFileBrowser.tsx | 4 +- .../src/components/server/TerminalDialog.tsx | 2 +- .../components/system/CredentialManager.tsx | 2 +- .../src/components/system/RdpAuditViewer.tsx | 5 +- .../src/components/system/SystemManager.tsx | 4 +- .../components/system/TerminalSessionsTab.tsx | 2 +- .../system-settings/SecuritySettingsTab.tsx | 4 +- .../src/components/task/CronJobViewDialog.tsx | 2 +- frontend/src/locales/en-US.json | 99 ++++++++++++++----- frontend/src/locales/zh-CN.json | 93 +++++++++++++---- 35 files changed, 217 insertions(+), 104 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 92327ac..e588036 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** | +| 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/aiops/PredictiveCapacityTab.tsx b/frontend/src/components/aiops/PredictiveCapacityTab.tsx index 75dbe14..469a7ec 100644 --- a/frontend/src/components/aiops/PredictiveCapacityTab.tsx +++ b/frontend/src/components/aiops/PredictiveCapacityTab.tsx @@ -76,7 +76,7 @@ export function PredictiveCapacityTab({
- AI 深度解读 + {t('aiops.capacity.aiInsight')}
{looksLikeMarkdown(insight) ? ( @@ -103,24 +103,24 @@ export function PredictiveCapacityTab({ } > {forecast.daysUntilThreshold <= 7 - ? '紧急' + ? t('aiops.capacity.urgency') : forecast.daysUntilThreshold <= 14 - ? '警告' - : '正常'} + ? t('aiops.capacity.warning') + : t('common.normal')}
- 7天使用率预测 + {t('aiops.capacity.sevenDayForecast')} {forecast.daysUntilThreshold >= 999 ? ( - '增长平缓,暂无触顶风险' + t('aiops.capacity.noRisk') ) : ( <> - 预计{' '} - {forecast.daysUntilThreshold}天{' '} - 后达到阈值 + {t('aiops.capacity.expectedToReach')}{' '} + {forecast.daysUntilThreshold}{t('aiops.capacity.days')}{' '} + {t('aiops.capacity.afterReachThreshold')} )} @@ -147,7 +147,7 @@ export function PredictiveCapacityTab({
- AI建议: + {t('aiops.capacity.aiSuggestion')}:

{forecast.recommendation}

diff --git a/frontend/src/components/aiops/PredictiveCostTab.tsx b/frontend/src/components/aiops/PredictiveCostTab.tsx index c77b441..f12c4f6 100644 --- a/frontend/src/components/aiops/PredictiveCostTab.tsx +++ b/frontend/src/components/aiops/PredictiveCostTab.tsx @@ -108,7 +108,7 @@ export function PredictiveCostTab({
- AI 深度解读 + {t('aiops.cost.aiInsight')}
{looksLikeMarkdown(insight) ? ( diff --git a/frontend/src/components/aiops/agent-cli/event-handler.ts b/frontend/src/components/aiops/agent-cli/event-handler.ts index fa56b99..09da3bb 100644 --- a/frontend/src/components/aiops/agent-cli/event-handler.ts +++ b/frontend/src/components/aiops/agent-cli/event-handler.ts @@ -5,6 +5,7 @@ import type { Dispatch, SetStateAction, RefObject } from 'react'; import type { ChatItem } from '../AgentCLIMessages'; import type { WsEvent } from '../agent-cli-constants'; import type { ConfirmOptions } from '@/components/ui/confirm-dialog'; +import i18n from '@/i18n'; export interface WsEventHandlerDeps { push: (it: Omit) => void; @@ -31,10 +32,10 @@ export function createWsEventHandler(deps: WsEventHandlerDeps) { // 高危命令确认(后端驱动 → 弹框 → 回传) async function handleConfirm(ev: WsEvent) { const ok = await confirm({ - title: '⚠️ 确认执行高危操作', - description: `工具:${ev.tool_name}\n风险:${ev.risk}\n命令:${ev.command || '(无)'}`, - confirmText: '确认执行', - cancelText: '拒绝', + title: i18n.t('aiops.cli.confirmHighRiskTitle'), + description: i18n.t('aiops.cli.confirmHighRiskDesc', { tool: ev.tool_name, risk: ev.risk, command: ev.command || '(无)' }), + confirmText: i18n.t('common.confirm'), + cancelText: i18n.t('common.cancel'), variant: 'destructive', }); wsRef.current?.send(JSON.stringify({ type: ok ? 'confirm' : 'deny', confirm_id: ev.confirm_id })); diff --git a/frontend/src/components/deploy/DeployCredentials.tsx b/frontend/src/components/deploy/DeployCredentials.tsx index b5dd7ba..7d47738 100644 --- a/frontend/src/components/deploy/DeployCredentials.tsx +++ b/frontend/src/components/deploy/DeployCredentials.tsx @@ -312,7 +312,7 @@ export default function DeployCredentials() {
{env.sort_order} - {env.enabled ? '启用' : '禁用'} + {env.enabled ? t('common.enable') : t('common.disable')}
diff --git a/frontend/src/components/deploy/DeployRBAC.tsx b/frontend/src/components/deploy/DeployRBAC.tsx index f739273..700997d 100644 --- a/frontend/src/components/deploy/DeployRBAC.tsx +++ b/frontend/src/components/deploy/DeployRBAC.tsx @@ -148,7 +148,7 @@ export default function DeployRBAC() { const handleDelete = async (role: ItemRole) => { const ok = await _confirm({ title: i18n.t('deploy.rbac.policy.deletePolicy'), - description: `确定删除「${role.name}」?将影响 ${matchCount[role.id]?.length || 0} 个发布任务`, + description: i18n.t("deploy.rbac.deleteRoleDesc", { name: role.name, count: matchCount[role.id]?.length || 0 }), variant: 'destructive', }); if (!ok) return; diff --git a/frontend/src/components/deploy/WorkspaceTermDialog.tsx b/frontend/src/components/deploy/WorkspaceTermDialog.tsx index 7752179..af26334 100644 --- a/frontend/src/components/deploy/WorkspaceTermDialog.tsx +++ b/frontend/src/components/deploy/WorkspaceTermDialog.tsx @@ -156,7 +156,7 @@ export function WorkspaceTermDialog({ )} style={fullscreen ? { maxWidth: '100vw', width: '100vw', height: '100vh' } : { maxWidth: '900px', width: '90vw' }} > - Workspace 终端 #{buildNumber} + {t("deploy.workspaceTerminalTitle", { num: buildNumber })} {t("common.buildTerminal")}
diff --git a/frontend/src/components/deploy/credential-manager/CredFormDialog.tsx b/frontend/src/components/deploy/credential-manager/CredFormDialog.tsx index d772dcf..fe96cd0 100644 --- a/frontend/src/components/deploy/credential-manager/CredFormDialog.tsx +++ b/frontend/src/components/deploy/credential-manager/CredFormDialog.tsx @@ -292,7 +292,7 @@ export function CredFormDialog({ open, onClose, onSaved, editData }: CredFormDia {secretType === 'rdp' && (
- + setRdpUsername(e.target.value)} placeholder="Administrator" className="bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]" />
diff --git a/frontend/src/components/kubernetes/ClusterOverviewPage.tsx b/frontend/src/components/kubernetes/ClusterOverviewPage.tsx index 104d7bf..5e2fb8e 100644 --- a/frontend/src/components/kubernetes/ClusterOverviewPage.tsx +++ b/frontend/src/components/kubernetes/ClusterOverviewPage.tsx @@ -157,7 +157,7 @@ export default function ClusterOverviewPage() { {cpuPct.toFixed(0)}%
) : ( - {cpuCores} 核 + {cpuCores} {i18n.t("k8s.cluster.cpuCores", { count: cpuCores })} )} diff --git a/frontend/src/components/kubernetes/DeploymentEditContainers.tsx b/frontend/src/components/kubernetes/DeploymentEditContainers.tsx index be2b6fc..91d67d3 100644 --- a/frontend/src/components/kubernetes/DeploymentEditContainers.tsx +++ b/frontend/src/components/kubernetes/DeploymentEditContainers.tsx @@ -137,7 +137,7 @@ export function DeploymentEditContainers({ clusterCode, namespace, deploymentNam 镜像拉取凭证 (imagePullSecrets) - Pod 级别 + {i18n.t('k8s.podLevel')} diff --git a/frontend/src/components/kubernetes/DeploymentEditService.tsx b/frontend/src/components/kubernetes/DeploymentEditService.tsx index cd78785..963ce50 100644 --- a/frontend/src/components/kubernetes/DeploymentEditService.tsx +++ b/frontend/src/components/kubernetes/DeploymentEditService.tsx @@ -262,7 +262,7 @@ export function DeploymentEditService({ clusterCode, namespace, deploymentName, {k}={v} ))} {Object.keys(selectorLabels).length === 0 && ( - (无 selector) + {i18n.t('k8s.editService.noSelector')} )}
-

backend 指向关联 Service 的 Ingress 自动高亮

+

{i18n.t('k8s.editService.ingressAutoHighlight')}

{ingresses.length === 0 ? (
- 当前命名空间暂无 Ingress + {i18n.t('k8s.editService.noIngInNs')}
) : (
diff --git a/frontend/src/components/kubernetes/DeploymentEditStorage.tsx b/frontend/src/components/kubernetes/DeploymentEditStorage.tsx index 88bb6cc..da1f053 100644 --- a/frontend/src/components/kubernetes/DeploymentEditStorage.tsx +++ b/frontend/src/components/kubernetes/DeploymentEditStorage.tsx @@ -296,7 +296,7 @@ export function DeploymentEditStorage({ clusterCode, namespace, deploymentName, onChange={(e) => updateMount(i, mi, { containerName: e.target.value })} className="h-8 min-w-[140px] max-w-[280px] bg-[var(--dg-bg-tertiary)] border border-[var(--dg-border)] rounded-md text-sm text-[var(--dg-text-primary)] px-2 font-medium truncate" > - {containers.length === 0 && } + {containers.length === 0 && } {containers.map((cn) => )}
diff --git a/frontend/src/components/kubernetes/KubectlTerminal.tsx b/frontend/src/components/kubernetes/KubectlTerminal.tsx index cebe571..8e5048a 100644 --- a/frontend/src/components/kubernetes/KubectlTerminal.tsx +++ b/frontend/src/components/kubernetes/KubectlTerminal.tsx @@ -161,7 +161,7 @@ export function KubectlTerminal({ open, onOpenChange, clusterId, clusterName }: style={fullscreen ? { maxWidth: '100vw', width: '100vw', height: '100vh' } : { maxWidth: '900px', width: '90vw' }} > kubectl — {clusterName} - Kubernetes 集群命令行终端 + {i18n.t('k8s.kubectlTerminalDesc')} {/* 头部 */}
diff --git a/frontend/src/components/kubernetes/KubernetesClusterDialog.tsx b/frontend/src/components/kubernetes/KubernetesClusterDialog.tsx index 2836d9d..2f9a87c 100644 --- a/frontend/src/components/kubernetes/KubernetesClusterDialog.tsx +++ b/frontend/src/components/kubernetes/KubernetesClusterDialog.tsx @@ -219,7 +219,7 @@ export function KubernetesClusterDialog({ {formData.config_type === 0 ? (