refactor(i18n): U39 残余 JSX 属性/模板字面量中文清零 — 14 处→0
10 文件修复: - DualLineChart: subtitle 接收/发送→i18n.t(monitor.lbl.receiveSend) - NetworkTab: 5处 unit="个"→t(common.unitCount) - FDUsageCard: subtitle 当前→t(monitor.lbl.currentFDUsage) - NamespaceOverviewPage: subtitle 命名空间概览→i18n.t(k8s.nsOverview.subtitle) - NamespaceManagementPage: subtitle 资源配额→i18n.t(k8s.nsMgmt.quotaSubtitle) - CreateHPADialog: title+text 命名空间→i18n.t(k8s.hpa.targetInfo) - LogFieldSidebar: title 个值→i18n.t(common.fieldValues) - LiveMonitorDialog: title 全屏/退出全屏→t(common.fullscreen/exitFullscreen) - ExecutionHistoryDialog: title 成功/失败→t(task.execHistory.successFail) - LdapSettingsTab: className 成功检查→ldapTestSuccess boolean 状态 新增 11 翻译键 (common.unitCount/fieldValues/exitFullscreen/fullscreen + monitor.lbl.receiveSend/currentFDUsage + k8s.nsOverview.subtitle/nsMgmt.quotaSubtitle/hpa.targetInfo + task.execHistory.successFail), zh/en 7751→7762 对齐 tsc -b=0, npm build✓ (16.94s), ESLint=0/0/any=0, go build=0, 17/17 测试通过
This commit is contained in:
1 parent
a1d82574a7
commit
5205def47f
14 files changed
+67
-29
No files matched your search
@@ -121,7 +121,7 @@ export default function NamespaceManagementPage() {
|
||||
<PageShell
|
||||
variant="list"
|
||||
title={i18n.t('k8s.nsMgmt.title')}
|
||||
subtitle={`${clusterCode} · 资源配额与生命周期管理`}
|
||||
subtitle={i18n.t('k8s.nsMgmt.quotaSubtitle', { code: clusterCode })}
|
||||
icon={<Boxes className="h-5 w-5" />}
|
||||
metrics={!loading ? (
|
||||
<StatStrip
|
||||
|
||||
@@ -68,7 +68,7 @@ export default function NamespaceOverviewPage() {
|
||||
<PageShell
|
||||
variant="default"
|
||||
title={namespace || i18n.t('kubernetes.namespace.title')}
|
||||
subtitle={`${clusterCode} · 命名空间概览`}
|
||||
subtitle={i18n.t('k8s.nsOverview.subtitle', { code: clusterCode })}
|
||||
icon={<Cloud className="h-5 w-5" />}
|
||||
loading={loading}
|
||||
loadingLabel={i18n.t('k8s.nsOverview.loadingStats')}
|
||||
|
||||
@@ -72,8 +72,8 @@ export function CreateHPADialog({ clusterCode, namespace, deploymentName, onCrea
|
||||
</div>
|
||||
<div>
|
||||
<Label className="dg-text-secondary text-sm">{i18n.t("common.target")}</Label>
|
||||
<p className="text-[var(--dg-text-secondary)] text-sm mt-1 bg-[var(--dg-bg-tertiary)] rounded px-3 py-2 truncate" title={`Deployment: ${deploymentName} · 命名空间: ${namespace}`}>
|
||||
Deployment: {deploymentName} · 命名空间: {namespace}
|
||||
<p className="text-[var(--dg-text-secondary)] text-sm mt-1 bg-[var(--dg-bg-tertiary)] rounded px-3 py-2 truncate" title={i18n.t('k8s.hpa.targetInfo', { deploy: deploymentName, ns: namespace })}>
|
||||
{i18n.t('k8s.hpa.targetInfo', { deploy: deploymentName, ns: namespace })}
|
||||
</p>
|
||||
</div>
|
||||
<div className="grid grid-cols-2 gap-3">
|
||||
|
||||
@@ -92,7 +92,7 @@ export function LogFieldSidebar({
|
||||
className="flex items-center gap-1.5 py-1 px-1.5 rounded cursor-pointer hover:opacity-80 transition-colors"
|
||||
style={{ background: selectedFields.includes(f.name) ? 'var(--dg-bg-tertiary)' : 'transparent' }}
|
||||
onClick={() => onFieldClick?.(f.name)}
|
||||
title={`${f.name} (${f.type || 'text'})${f.count ? ` · ${f.count} 个值` : ''}`}
|
||||
title={`${f.name} (${f.type || 'text'})${f.count ? ` · ${i18n.t('common.fieldValues', { count: f.count })}` : ''}`}
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
|
||||
@@ -232,7 +232,7 @@ export function LiveMonitorDialog({ open, onOpenChange, sessionId, sessionInfo }
|
||||
type="button"
|
||||
onClick={() => setFullscreen(!fullscreen)}
|
||||
className="p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]"
|
||||
title={fullscreen ? '退出全屏' : '全屏'}
|
||||
title={fullscreen ? t('common.exitFullscreen') : t('common.fullscreen')}
|
||||
>
|
||||
{fullscreen ? <Minimize2 className="h-4 w-4" /> : <Maximize2 className="h-4 w-4" />}
|
||||
</button>
|
||||
|
||||
@@ -57,6 +57,7 @@ export interface SystemSettingsTabProps {
|
||||
ldapSaving: boolean;
|
||||
ldapTesting: boolean;
|
||||
ldapTestResult: string | null;
|
||||
ldapTestSuccess: boolean;
|
||||
handleLdapSave: () => void;
|
||||
handleLdapTest: () => void;
|
||||
// LDAP management - pass-through to LdapManagementSection
|
||||
|
||||
@@ -17,6 +17,7 @@ type LdapSettingsTabProps = Pick<
|
||||
| "ldapSaving"
|
||||
| "ldapTesting"
|
||||
| "ldapTestResult"
|
||||
| "ldapTestSuccess"
|
||||
| "handleLdapSave"
|
||||
| "handleLdapTest"
|
||||
> &
|
||||
@@ -75,6 +76,7 @@ export function LdapSettingsTab(props: LdapSettingsTabProps) {
|
||||
ldapSaving,
|
||||
ldapTesting,
|
||||
ldapTestResult,
|
||||
ldapTestSuccess,
|
||||
handleLdapSave,
|
||||
handleLdapTest,
|
||||
} = props;
|
||||
@@ -204,7 +206,7 @@ export function LdapSettingsTab(props: LdapSettingsTabProps) {
|
||||
<div className="flex items-center gap-3 mt-4 pt-4 border-t border-[var(--dg-border)]">
|
||||
{ldapTestResult && (
|
||||
<span
|
||||
className={`text-xs ${ldapTestResult.includes("成功") ? "dg-text-green" : "dg-text-red"}`}
|
||||
className={`text-xs ${ldapTestSuccess ? "dg-text-green" : "dg-text-red"}`}
|
||||
>
|
||||
{ldapTestResult}
|
||||
</span>
|
||||
|
||||
@@ -38,6 +38,7 @@ export function useLdapManagement(onUsersChanged: () => Promise<void> | void) {
|
||||
const [ldapSaving, setLdapSaving] = useState(false);
|
||||
const [ldapTesting, setLdapTesting] = useState(false);
|
||||
const [ldapTestResult, setLdapTestResult] = useState<string | null>(null);
|
||||
const [ldapTestSuccess, setLdapTestSuccess] = useState(false);
|
||||
const [ldapMgmtOpen, setLdapMgmtOpen] = useState(false);
|
||||
const [importFeedback, setImportFeedback] = useState<string | null>(null);
|
||||
const [importResultOpen, setImportResultOpen] = useState(false);
|
||||
@@ -101,11 +102,14 @@ export function useLdapManagement(onUsersChanged: () => Promise<void> | void) {
|
||||
const handleLdapTest = async () => {
|
||||
setLdapTesting(true);
|
||||
setLdapTestResult(null);
|
||||
setLdapTestSuccess(false);
|
||||
try {
|
||||
await ldapApi.updateConfig(ldapForm);
|
||||
const res = await ldapApi.testConnection();
|
||||
setLdapTestSuccess(!!res?.success);
|
||||
setLdapTestResult(res?.message || (res?.success ? i18n.t('aiops.llmTestSuccess') : i18n.t('aiops.llmTestFailed')));
|
||||
} catch (error) {
|
||||
setLdapTestSuccess(false);
|
||||
setLdapTestResult(error?.message || i18n.t('aiops.llmTestFailed'));
|
||||
} finally {
|
||||
setLdapTesting(false);
|
||||
@@ -293,6 +297,7 @@ export function useLdapManagement(onUsersChanged: () => Promise<void> | void) {
|
||||
ldapSaving,
|
||||
ldapTesting,
|
||||
ldapTestResult,
|
||||
ldapTestSuccess,
|
||||
handleLdapSave,
|
||||
handleLdapTest,
|
||||
ldapMgmtOpen,
|
||||
|
||||
@@ -182,7 +182,7 @@ export function ExecutionHistoryDialog({
|
||||
? 'linear-gradient(to top, #ef4444 0%, #22c55e 100%)'
|
||||
: item.total > 0 ? '#22c55e' : 'var(--dg-border)',
|
||||
}}
|
||||
title={`${item.label}: 成功 ${item.success} / 失败 ${item.failed}`}
|
||||
title={t('task.execHistory.successFail', { label: item.label, success: item.success, failed: item.failed })}
|
||||
/>
|
||||
</div>
|
||||
<span className="text-[10px] dg-text-muted">{item.label}</span>
|
||||
|
||||
Reference in new issue
Block a user