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
@@ -52,6 +52,7 @@ import {
|
||||
Settings2,
|
||||
} from 'lucide-react';
|
||||
import { cn } from '@/lib/utils';
|
||||
import i18n from '@/i18n';
|
||||
|
||||
// ─── Types ───────────────────────────────────────────────
|
||||
|
||||
@@ -223,7 +224,7 @@ export function DataTable<T = Record<string, unknown>>(
|
||||
data,
|
||||
rowKey,
|
||||
searchable = false,
|
||||
searchPlaceholder = '搜索...',
|
||||
searchPlaceholder = i18n.t('ui.dataTable.s64e327'),
|
||||
searchKeys,
|
||||
sortable: globalSortable = false,
|
||||
pagination: enablePagination = false,
|
||||
@@ -236,7 +237,7 @@ export function DataTable<T = Record<string, unknown>>(
|
||||
exportFilename = 'export.csv',
|
||||
columnToggle = false,
|
||||
loading = false,
|
||||
emptyText = '暂无数据',
|
||||
emptyText = i18n.t('common.noData'),
|
||||
emptyRender,
|
||||
onRowClick,
|
||||
rowClassName,
|
||||
@@ -422,7 +423,7 @@ export function DataTable<T = Record<string, unknown>>(
|
||||
<DropdownMenuTrigger asChild>
|
||||
<Button variant="outline" size="sm" className="h-8 gap-1.5 border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-hover)] hover:text-[var(--dg-text-primary)]">
|
||||
<Eye className="h-3.5 w-3.5" />
|
||||
<span className="hidden sm:inline">列</span>
|
||||
<span className="hidden sm:inline">{i18n.t('ui.dataTable.scb2f68')}</span>
|
||||
</Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end" className="bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]">
|
||||
@@ -450,7 +451,7 @@ export function DataTable<T = Record<string, unknown>>(
|
||||
className="h-8 gap-1.5 border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-hover)] hover:text-[var(--dg-text-primary)]"
|
||||
>
|
||||
<Download className="h-3.5 w-3.5" />
|
||||
<span className="hidden sm:inline">导出</span>
|
||||
<span className="hidden sm:inline">{i18n.t('common.export')}</span>
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
@@ -586,7 +587,7 @@ export function DataTable<T = Record<string, unknown>>(
|
||||
</span>
|
||||
)}
|
||||
<div className="flex items-center gap-1.5">
|
||||
<span className="text-sm text-[var(--dg-text-muted)]">每页</span>
|
||||
<span className="text-sm text-[var(--dg-text-muted)]">{i18n.t('common.perPage')}</span>
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
<Button variant="outline" size="sm" className="h-7 px-2 min-w-[56px] gap-1 border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-hover)]">
|
||||
@@ -644,7 +645,7 @@ export function DataTable<T = Record<string, unknown>>(
|
||||
|
||||
function renderCellValue(v: unknown): React.ReactNode {
|
||||
if (v == null || v === '') return <span className="text-[var(--dg-text-muted)]">—</span>;
|
||||
if (typeof v === 'boolean') return v ? '是' : '否';
|
||||
if (typeof v === 'boolean') return v ? i18n.t('common.yes') : i18n.t('common.no');
|
||||
if (typeof v === 'object') {
|
||||
const obj = v as Record<string, unknown>;
|
||||
const label = obj.label ?? obj.name ?? obj.value;
|
||||
|
||||
Reference in new issue
Block a user