feat(i18n): 剩余模块全量国际化 — 51% 覆盖率 (231 文件接入 t())
批量转换 163 个文件,3204 处中文替换为 t() 调用: - Monitor: 日志中心/告警中心/数据源/大屏/站点拨测/SNMP/中间件 全部转换 - Kubernetes: ResourceVisualEditor/NamespaceResourcePage/拓扑/事件 全部转换 - Deploy: 流水线/发布/凭证/RBAC 全部转换 - Server/Cloud/Agent/Task/Layout/UI: 全部转换 - 翻译词典扩展至 6474 行 (22 namespaces, 5000+ keys) - tsc 编译零错误
This commit is contained in:
1 parent
78c27037e3
commit
ecec73989b
166 files changed
+6925
-2800
No files matched your search
@@ -19,6 +19,7 @@ import { toast } from 'sonner';
|
||||
import { PageShell } from '@/components/layout/PageShell';
|
||||
import { ContentPanel } from '@/components/layout/ContentPanel';
|
||||
import { StatStrip } from '@/components/ui/stat-strip';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
interface NamespaceDetail {
|
||||
name: string;
|
||||
@@ -39,6 +40,7 @@ const SYSTEM_NAMESPACES = new Set([
|
||||
]);
|
||||
|
||||
export default function NamespaceManagementPage() {
|
||||
const { t } = useTranslation();
|
||||
const { clusterCode } = useParams<{ clusterCode: string }>();
|
||||
const navigate = useNavigate();
|
||||
const [namespaces, setNamespaces] = useState<NamespaceDetail[]>([]);
|
||||
@@ -78,7 +80,7 @@ export default function NamespaceManagementPage() {
|
||||
setCreateOpen(false);
|
||||
await loadData();
|
||||
} catch (err) {
|
||||
toast.error(err?.message || '创建失败');
|
||||
toast.error(err?.message || t('monitor.quickSetupFailed'));
|
||||
} finally {
|
||||
setCreating(false);
|
||||
}
|
||||
@@ -92,7 +94,7 @@ export default function NamespaceManagementPage() {
|
||||
setDeleteTarget(null);
|
||||
await loadData();
|
||||
} catch (err) {
|
||||
toast.error(err?.message || '删除失败');
|
||||
toast.error(err?.message || t('common.deleteFailed'));
|
||||
} finally {
|
||||
setDeleting(false);
|
||||
}
|
||||
@@ -111,7 +113,7 @@ export default function NamespaceManagementPage() {
|
||||
<Input
|
||||
value={searchQuery}
|
||||
onChange={(e) => setSearchQuery(e.target.value)}
|
||||
placeholder="搜索命名空间..."
|
||||
placeholder=t('kubernetes.namespacemanagementpage.se91247')
|
||||
className="max-w-xs dg-input"
|
||||
/>
|
||||
);
|
||||
@@ -119,17 +121,17 @@ export default function NamespaceManagementPage() {
|
||||
return (
|
||||
<PageShell
|
||||
variant="list"
|
||||
title="命名空间管理"
|
||||
subtitle={`${clusterCode} · 资源配额与生命周期管理`}
|
||||
title=t('kubernetes.namespacemanagementpage.se935a3')
|
||||
subtitle={t('kubernetes.namespacemanagementpage.s81e4b3', { clusterCode: clusterCode })}
|
||||
icon={<Boxes className="h-5 w-5" />}
|
||||
metrics={!loading ? (
|
||||
<StatStrip
|
||||
items={[
|
||||
{ label: '命名空间', value: namespaces.length, color: 'green' },
|
||||
{ label: t('k8s.column.namespace'), value: namespaces.length, color: 'green' },
|
||||
{ label: 'Deployments', value: totalDeploys, color: 'blue' },
|
||||
{ label: 'Pods', value: totalPods, color: 'purple' },
|
||||
{ label: 'Services', value: totalSvcs, color: 'cyan' },
|
||||
{ label: '配额限制', value: quotaCount, color: 'amber' },
|
||||
{ label: t('kubernetes.namespacemanagementpage.s47c3ae'), value: quotaCount, color: 'amber' },
|
||||
]}
|
||||
/>
|
||||
) : undefined}
|
||||
@@ -147,15 +149,15 @@ export default function NamespaceManagementPage() {
|
||||
</DialogTrigger>
|
||||
<DialogContent>
|
||||
<DialogHeader>
|
||||
<DialogTitle>创建命名空间</DialogTitle>
|
||||
<DialogTitle>{t('kubernetes.namespacemanagementpage.s737f41')}</DialogTitle>
|
||||
</DialogHeader>
|
||||
<div className="space-y-4 py-4">
|
||||
<div className="space-y-2">
|
||||
<Label>命名空间名称</Label>
|
||||
<Label>{t('kubernetes.namespace.namespaceName')}</Label>
|
||||
<Input
|
||||
value={newName}
|
||||
onChange={(e) => setNewName(e.target.value)}
|
||||
placeholder="例如: my-app"
|
||||
placeholder=t('kubernetes.namespacemanagementpage.scba008')
|
||||
onKeyDown={(e) => e.key === 'Enter' && handleCreate()}
|
||||
/>
|
||||
<p className="text-xs text-[var(--dg-text-muted)]">
|
||||
@@ -164,7 +166,7 @@ export default function NamespaceManagementPage() {
|
||||
</div>
|
||||
</div>
|
||||
<DialogFooter>
|
||||
<Button variant="outline" onClick={() => setCreateOpen(false)}>取消</Button>
|
||||
<Button variant="outline" onClick={() => setCreateOpen(false)}>{t('common.cancel')}</Button>
|
||||
<Button onClick={handleCreate} disabled={creating || !newName.trim()}>
|
||||
{creating ? <Loader2 className="h-4 w-4 animate-spin mr-1" /> : null}
|
||||
创建
|
||||
@@ -179,15 +181,15 @@ export default function NamespaceManagementPage() {
|
||||
<Table>
|
||||
<TableHeader>
|
||||
<TableRow className="border-[var(--dg-border)] hover:bg-transparent">
|
||||
<TableHead className="text-[var(--dg-text-secondary)]">名称</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)]">状态</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)]">年龄</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)]">{t('common.name')}</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)]">{t('common.status')}</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)]">{t('kubernetes.namespacemanagementpage.sa01a99')}</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)] text-center">Deploy</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)] text-center">Pods</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)] text-center">Svc</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)] text-center">配额</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)]">标签</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)] text-center">操作</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)] text-center">{t('common.quota')}</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)]">{t('common.tag')}</TableHead>
|
||||
<TableHead className="text-[var(--dg-text-secondary)] text-center">{t('common.actions')}</TableHead>
|
||||
</TableRow>
|
||||
</TableHeader>
|
||||
<TableBody>
|
||||
@@ -247,13 +249,13 @@ export default function NamespaceManagementPage() {
|
||||
</TableCell>
|
||||
<TableCell className="text-center">
|
||||
{isSystem ? (
|
||||
<span className="text-xs text-[var(--dg-text-muted)]">系统</span>
|
||||
<span className="text-xs text-[var(--dg-text-muted)]">{t('common.system3')}</span>
|
||||
) : (
|
||||
<Button
|
||||
variant="ghost" size="icon"
|
||||
className="h-7 w-7 text-[var(--dg-red)] hover:text-[var(--dg-red)] hover:bg-[var(--dg-red)]/10"
|
||||
onClick={() => setDeleteTarget(ns.name)}
|
||||
title="删除命名空间"
|
||||
title=t('kubernetes.namespace.deleteNamespace')
|
||||
>
|
||||
<Trash2 className="h-3.5 w-3.5" />
|
||||
</Button>
|
||||
@@ -286,7 +288,7 @@ export default function NamespaceManagementPage() {
|
||||
</div>
|
||||
</div>
|
||||
<DialogFooter>
|
||||
<Button variant="outline" onClick={() => setDeleteTarget(null)}>取消</Button>
|
||||
<Button variant="outline" onClick={() => setDeleteTarget(null)}>{t('common.cancel')}</Button>
|
||||
<Button variant="destructive" onClick={handleDelete} disabled={deleting}>
|
||||
{deleting ? <Loader2 className="h-4 w-4 animate-spin mr-1" /> : null}
|
||||
确认删除
|
||||
|
||||
Reference in new issue
Block a user