refactor(i18n): U19 i18n hash 键治理 — 删除 866 死键 + 重命名 21 高频键
死键清理: 从 zh-CN.json 和 en-US.json 移除 866 个重构遗弃的 unreferenced
hash keys (filename.hash 格式)。这些键在组件迁移到语义化键后成为孤儿。
Live 键重命名 (21 个):
ui.datatable.s1a2b3c4d → selectedCount
ui.datatable.s2b3c4d5e → columns
ui.datatable.s3c4d5e6f → totalCount
aiops.predictive.s{1-3} → metricsTab/capacityTab/costTab
aiops.predictivecost.s{1-3} → aiFailed/overview/aiInsight
task.systemtaskspanel.s{1-3} → monitor/cleanup/finops
aiops.agentcli.s{1-3} → archLayer/archDesc/securityLayer
system.useldapmanageme.s{1-2} → ouExists/createOuFailed
common.requestts.sd3ab821c → common.request.tokenExpired
k8s.editAdvanced.s0c1fec65 → secondsPlaceholder
k8s.{kubectl,podExec}.sc8107726 → connectErrorAnsi
影响: zh/en 7597→6731 keys 对齐, 文件 328KB→276KB (-16%)
仍有 172 个 live hash keys 待后续重命名
tsc -b=0, npm build✓ (17.45s), ESLint=0/66/0, go build=0, 17/17 测试通过
This commit is contained in:
1 parent
543365596d
commit
bb2b50276a
12 files changed
+74
-73
No files matched your search
@@ -216,7 +216,7 @@ export const aiApi = {
|
||||
if (res.status === 401) {
|
||||
clearToken();
|
||||
useUserStore.getState().logout();
|
||||
throw new Error(i18n.t('common.requestts.sd3ab821c'));
|
||||
throw new Error(i18n.t('common.request.tokenExpired'));
|
||||
}
|
||||
if (!res.body) throw new Error(i18n.t('aiops.assistantts.s16f94bee'));
|
||||
const reader = res.body.getReader();
|
||||
|
||||
@@ -120,9 +120,9 @@ export function AIPredictiveAnalytics() {
|
||||
};
|
||||
|
||||
const pageTabs = [
|
||||
{ id: 'metrics', label: t('aiops.predictive.s1a2b3c4d') },
|
||||
{ id: 'capacity', label: t('aiops.predictive.s2b3c4d5e') },
|
||||
{ id: 'cost', label: t('aiops.predictive.s3c4d5e6f') },
|
||||
{ id: 'metrics', label: t('aiops.predictive.metricsTab') },
|
||||
{ id: 'capacity', label: t('aiops.predictive.capacityTab') },
|
||||
{ id: 'cost', label: t('aiops.predictive.costTab') },
|
||||
];
|
||||
|
||||
return (
|
||||
|
||||
@@ -60,7 +60,7 @@ export function PredictiveCostTab({
|
||||
const res = await aiApi.chat([{ role: 'user', content: prompt }]);
|
||||
setInsight(res?.content || '');
|
||||
} catch {
|
||||
toast.error(t('aiops.predictivecost.s1a2b3c4d'));
|
||||
toast.error(t('aiops.predictivecost.aiFailed'));
|
||||
} finally {
|
||||
setAnalyzing(false);
|
||||
}
|
||||
@@ -73,7 +73,7 @@ export function PredictiveCostTab({
|
||||
<div className="flex items-center justify-between">
|
||||
<CardTitle className="text-[var(--dg-text-primary)] flex items-center gap-2">
|
||||
<Wallet className="h-5 w-5 dg-text-emerald" />
|
||||
{t('aiops.predictivecost.s2b3c4d5e')}
|
||||
{t('aiops.predictivecost.overview')}
|
||||
</CardTitle>
|
||||
{!loading && hasData && (
|
||||
<Button
|
||||
@@ -88,7 +88,7 @@ export function PredictiveCostTab({
|
||||
) : (
|
||||
<Sparkles className="h-3.5 w-3.5 mr-1" />
|
||||
)}
|
||||
{t('aiops.predictivecost.s3c4d5e6f')}
|
||||
{t('aiops.predictivecost.aiInsight')}
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -109,7 +109,7 @@ export function KubectlTerminal({ open, onOpenChange, clusterId, clusterName }:
|
||||
ws.onerror = () => {
|
||||
setError(i18n.t('k8s.kubectl.failed'));
|
||||
setHasOutput(true);
|
||||
term.write(i18n.t('k8s.kubectl.sc8107726'));
|
||||
term.write(i18n.t('k8s.kubectl.connectError'));
|
||||
};
|
||||
|
||||
return () => {
|
||||
|
||||
@@ -47,7 +47,7 @@ export function TolerationsCard({ tolerations, onAdd, onRemove, onUpdate }: Tole
|
||||
<option value="PreferNoSchedule">PreferNoSchedule</option>
|
||||
<option value="NoExecute">NoExecute</option>
|
||||
</select>
|
||||
<Input value={t.tolerationSeconds} placeholder={i18n.t('k8s.editAdvanced.s0c1fec65')} disabled={t.effect !== 'NoExecute'}
|
||||
<Input value={t.tolerationSeconds} placeholder={i18n.t('k8s.editAdvanced.seconds')} disabled={t.effect !== 'NoExecute'}
|
||||
onChange={e => onUpdate(i, { tolerationSeconds: e.target.value })}
|
||||
className="h-7 dg-input text-xs font-mono" />
|
||||
<Button variant="ghost" size="icon" className="h-7 w-7 dg-text-red" onClick={() => onRemove(i)}>
|
||||
|
||||
@@ -146,7 +146,7 @@ export function useLdapManagement(onUsersChanged: () => Promise<void> | void) {
|
||||
} catch (e) {
|
||||
const msg = e?.message || '';
|
||||
if (msg.includes('Already Exists') || msg.includes('68')) {
|
||||
toast.error(i18n.t('system.useldapmanageme.s1a2b3c4d', { name: ouForm.ou_name }));
|
||||
toast.error(i18n.t('system.useldapmanageme.ouExists', { name: ouForm.ou_name }));
|
||||
} else {
|
||||
toast.error(i18n.t('创建失败: ') + msg);
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@ import {
|
||||
} from 'lucide-react';
|
||||
|
||||
const categoryLabel: Record<string, string> = {
|
||||
get monitor() { return i18n.t('task.systemtaskspanel.s1a2b3c4d'); },
|
||||
get cleanup() { return i18n.t('task.systemtaskspanel.s2b3c4d5e'); },
|
||||
get finops() { return i18n.t('task.systemtaskspanel.s3c4d5e6f'); },
|
||||
get monitor() { return i18n.t('task.systemtaskspanel.monitor'); },
|
||||
get cleanup() { return i18n.t('task.systemtaskspanel.cleanup'); },
|
||||
get finops() { return i18n.t('task.systemtaskspanel.finops'); },
|
||||
};
|
||||
|
||||
function statusBadge(status?: string) {
|
||||
|
||||
@@ -412,7 +412,7 @@ export function DataTable<T = Record<string, unknown>>(
|
||||
)}
|
||||
{selectable && (selectedIds?.length ?? 0) > 0 && (
|
||||
<Badge variant="secondary" className="bg-[var(--dg-bg-active)] text-[var(--dg-text-secondary)] border-[var(--dg-border)]">
|
||||
{i18n.t("ui.datatable.s1a2b3c4d", { count: selectedIds!.length })}
|
||||
{i18n.t("ui.datatable.selectedCount", { count: selectedIds!.length })}
|
||||
</Badge>
|
||||
)}
|
||||
</div>
|
||||
@@ -423,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">{i18n.t("ui.datatable.s2b3c4d5e")}</span>
|
||||
<span className="hidden sm:inline">{i18n.t("ui.datatable.columns")}</span>
|
||||
</Button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent align="end" className="bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]">
|
||||
@@ -579,7 +579,7 @@ export function DataTable<T = Record<string, unknown>>(
|
||||
<div className="flex items-center justify-between gap-2 px-1 py-2 flex-wrap">
|
||||
<div className="flex items-center gap-3">
|
||||
<span className="text-sm text-[var(--dg-text-muted)]">
|
||||
{i18n.t("ui.datatable.s3c4d5e6f", { count: sortedData.length })}
|
||||
{i18n.t("ui.datatable.totalCount", { count: sortedData.length })}
|
||||
</span>
|
||||
{selectable && (selectedIds?.length ?? 0) > 0 && (
|
||||
<span className="text-sm text-[var(--dg-text-muted)]">
|
||||
|
||||
@@ -376,7 +376,6 @@
|
||||
"remark": "Remark",
|
||||
"rename": "Rename",
|
||||
"report": "Report",
|
||||
"requestts.sd3ab821c": "Session expired, please log in again",
|
||||
"required": "Required",
|
||||
"reset": "Reset",
|
||||
"restart": "Restart",
|
||||
@@ -511,7 +510,8 @@
|
||||
"createFailed": "Create failed",
|
||||
"created": "Created",
|
||||
"severity": "Severity",
|
||||
"critical": "Critical"
|
||||
"critical": "Critical",
|
||||
"request.tokenExpired": "Session expired, please log in again"
|
||||
},
|
||||
"menu": {
|
||||
"dashboard": "Dashboard",
|
||||
@@ -2979,7 +2979,6 @@
|
||||
"namespace": "所有命名空间"
|
||||
},
|
||||
"editAdvanced": {
|
||||
"s0c1fec65": "seconds",
|
||||
"noManifest": "Manifest data not loaded. Please use YAML editor to modify directly.",
|
||||
"updateStrategy": "Update Strategy",
|
||||
"rollingUpdate": "Rolling Update",
|
||||
@@ -3002,7 +3001,8 @@
|
||||
"hostPIDDesc": "Share host PID namespace",
|
||||
"shareProcessDesc": "Share process namespace",
|
||||
"save": "Save",
|
||||
"saved": "update submitted"
|
||||
"saved": "update submitted",
|
||||
"secondsPlaceholder": "seconds"
|
||||
},
|
||||
"editBasic": {
|
||||
"synced": "Synced",
|
||||
@@ -3040,8 +3040,8 @@
|
||||
"kubectl": {
|
||||
"disconnected": "\\r\\n\\x1b[31m[连接已断开]\\x1b[0m\\r\\n",
|
||||
"failed": "WebSocket 连接失败",
|
||||
"sc8107726": "\\r\\n\\x1b[31m[连接发生错误]\\x1b[0m\\r\\n",
|
||||
"cluster": "正在连接集群..."
|
||||
"cluster": "正在连接集群...",
|
||||
"connectErrorAnsi": "\\r\\n\\x1b[31m[连接发生错误]\\x1b[0m\\r\\n"
|
||||
},
|
||||
"misc": {
|
||||
"cluster1": "加载集群列表失败:",
|
||||
@@ -3069,7 +3069,6 @@
|
||||
"execError": "Execution error",
|
||||
"reconnect": "\\r\\n\\x1b[33m⚠ bash 不可用,请切换 /bin/sh 后重连。\\x1b[0m",
|
||||
"close": "\\r\\n\\x1b[33m[连接已关闭]\\x1b[0m\\r\\n",
|
||||
"sc8107726": "\\r\\n\\x1b[31m[连接发生错误]\\x1b[0m\\r\\n",
|
||||
"connected": "Connected",
|
||||
"connecting": "Connecting",
|
||||
"connectionError": "Connection error",
|
||||
@@ -3082,7 +3081,8 @@
|
||||
"fullscreen": "Fullscreen",
|
||||
"close1": "Close",
|
||||
"container1": "正在进入容器...",
|
||||
"enterPod": "Enter Pod container to execute commands"
|
||||
"enterPod": "Enter Pod container to execute commands",
|
||||
"connectErrorAnsi": "\\r\\n\\x1b[31m[连接发生错误]\\x1b[0m\\r\\n"
|
||||
},
|
||||
"podMetrics": {
|
||||
"resources2": "Pod 资源用量",
|
||||
@@ -4473,9 +4473,6 @@
|
||||
"cronjobformdial.s2e10ee70": "Configure Cron Job",
|
||||
"cronjobformdial.s3b56b1f9": "Format: min hour day month weekday",
|
||||
"cronjobformdial.s15d864c1": "Execution Type",
|
||||
"systemtaskspanel.s1a2b3c4d": "Monitor",
|
||||
"systemtaskspanel.s2b3c4d5e": "Cleanup",
|
||||
"systemtaskspanel.s3c4d5e6f": "Cost",
|
||||
"systemtaskspanel.s4d5e6f7g": "Built-in",
|
||||
"systemtaskspanel.s5e6f7g8h": "Process-level built-in scheduling, not editable; cleanup and cost tasks support manual trigger",
|
||||
"systemtaskspanel.s6f7g8h9i": "{{count}} tasks",
|
||||
@@ -4493,7 +4490,10 @@
|
||||
"systemtaskspanel.s8r9s0t1u": "Execution completed",
|
||||
"systemtaskspanel.s9s0t1u2v": "Execution failed",
|
||||
"systemtaskspanel.s0t1u2v3w": "Failed to load system tasks",
|
||||
"systemtaskspanel.s1u2v3w4x": "No system tasks"
|
||||
"systemtaskspanel.s1u2v3w4x": "No system tasks",
|
||||
"systemtaskspanel.monitor": "Monitor",
|
||||
"systemtaskspanel.cleanup": "Cleanup",
|
||||
"systemtaskspanel.finops": "Cost"
|
||||
},
|
||||
"rbac": {
|
||||
"logRole": {
|
||||
@@ -4571,12 +4571,12 @@
|
||||
"codeSnippet": {
|
||||
"copyDisabled": "Copy disabled"
|
||||
},
|
||||
"datatable.s1a2b3c4d": "{{count}} selected",
|
||||
"datatable.s2b3c4d5e": "Cols",
|
||||
"datatable.s3c4d5e6f": "{{count}} total",
|
||||
"datatable.s4d5e6f7g": "{{count}} selected",
|
||||
"datatable.s5e6f7g8h": "Yes",
|
||||
"datatable.s6f7g8h9i": "No"
|
||||
"datatable.s6f7g8h9i": "No",
|
||||
"datatable.selectedCount": "{{count}} selected",
|
||||
"datatable.columns": "Cols",
|
||||
"datatable.totalCount": "{{count}} total"
|
||||
},
|
||||
"kubernetes": {
|
||||
"cluster": {
|
||||
@@ -6608,8 +6608,8 @@
|
||||
"useauditsetting.s32e8a76e": "Failed to load audit settings",
|
||||
"useauditsetting.s51680af0": "Please select valid retention days",
|
||||
"useauditsetting.s7d55bd57": ", no expired records",
|
||||
"useldapmanageme.s1a2b3c4d": "OU \"{{name}}\" already exists, please use a different name",
|
||||
"useldapmanageme.s2b3c4d5e": "Failed to create OU: "
|
||||
"useldapmanageme.ouExists": "OU \"{{name}}\" already exists, please use a different name",
|
||||
"useldapmanageme.createOuFailed": "Failed to create OU: "
|
||||
},
|
||||
"aiops": {
|
||||
"title": "AIOps",
|
||||
@@ -7009,9 +7009,6 @@
|
||||
"predictutilsts.providerTencent": "Tencent Cloud",
|
||||
"predictutilsts.providerHuawei": "Huawei Cloud",
|
||||
"predictutilsts.daysUntilThreshold": "Threshold in {{days}} days",
|
||||
"agentcli.s1a2b3c4d": "LLM + Tool Layer",
|
||||
"agentcli.s2b3c4d5e": "OpenAI-compatible LLM; tools include ssh_execute (remote execution) and analyze_output (output analysis).",
|
||||
"agentcli.s3c4d5e6f": "Security + Prompt",
|
||||
"agentcli.s4d5e6f7g": "Five-level risk assessment + three-level safety mode; dangerous commands blocked, high-risk requires confirmation.",
|
||||
"agentcli.s5e6f7g8h": "ReAct Core Engine",
|
||||
"agentcli.s6f7g8h9i": "Think-Act-Observe loop (up to 16 rounds), retry on failure, loop detection to prevent infinite loops.",
|
||||
@@ -7078,9 +7075,6 @@
|
||||
"agentcli.s7y8z9a0b": "Denied execution: {{name}}",
|
||||
"agentcli.s8z9a0b1c": "Please select a target host first",
|
||||
"agentcli.s4f5g6h7i": "Connection not ready, please try again later",
|
||||
"predictivecost.s1a2b3c4d": "AI analysis failed, check LLM configuration or try again later",
|
||||
"predictivecost.s2b3c4d5e": "Cloud Cost Prediction Overview",
|
||||
"predictivecost.s3c4d5e6f": "AI Deep Analysis",
|
||||
"predictivecost.s4d5e6f7g": "Loading billing data...",
|
||||
"predictivecost.s5e6f7g8h": "No billing data, add cost records in Cloud Billing Management first",
|
||||
"predictivecost.s6f7g8h9i": "Bills front-loaded at month start, recent 7-day avg {{avg}}; may contain pre-paid or retired resources; prediction uses recent run rate.",
|
||||
@@ -7104,9 +7098,6 @@
|
||||
"predictivecost.s4x5y6z7a": "Monthly budget",
|
||||
"predictivecost.s5y6z7a8b": "Current {{current}} / Threshold {{threshold}}, Predicted {{predicted}}",
|
||||
"predictivecost.s6z7a8b9c": "Breach probability",
|
||||
"predictive.s1a2b3c4d": "Metric Forecast",
|
||||
"predictive.s2b3c4d5e": "Capacity Planning",
|
||||
"predictive.s3c4d5e6f": "Cost Forecast",
|
||||
"predictive.s4d5e6f7g": "Predictive Analysis",
|
||||
"predictive.s5e6f7g8h": "Linear regression prediction, capacity planning and cost forecasting based on real-time metrics and cloud billing",
|
||||
"predictive.s6f7g8h9i": "Confidence",
|
||||
@@ -7142,7 +7133,16 @@
|
||||
"predictutilsts.su1v2w3x4": "1. Use **bold subtitles** for sections with 1 key point each, e.g.: **Data Anomalies**, **Idle Resource Cleanup**, **Billing Mode Optimization**, **Storage Lifecycle**",
|
||||
"predictutilsts.sv2w3x4y5": "2. If monthly avg and recent 7-day avg clearly contradict predicted month-end, explain in 'Data Anomalies' (pre-paid/shutdown etc.)",
|
||||
"predictutilsts.sw3x4y5z6": "3. Give actionable recommendations per top service (EIP/disk/ECS spec/OSS lifecycle/reserved instances etc.)",
|
||||
"predictutilsts.sx4y5z6a7": "4. Pick 3-5 most relevant recommendations, under 350 words, no generic platitudes"
|
||||
"predictutilsts.sx4y5z6a7": "4. Pick 3-5 most relevant recommendations, under 350 words, no generic platitudes",
|
||||
"predictive.metricsTab": "Metric Forecast",
|
||||
"predictive.capacityTab": "Capacity Planning",
|
||||
"predictive.costTab": "Cost Forecast",
|
||||
"predictivecost.aiFailed": "AI analysis failed, check LLM configuration or try again later",
|
||||
"predictivecost.overview": "Cloud Cost Prediction Overview",
|
||||
"predictivecost.aiInsight": "AI Deep Analysis",
|
||||
"agentcli.archLayer": "LLM + Tool Layer",
|
||||
"agentcli.archDesc": "OpenAI-compatible LLM; tools include ssh_execute (remote execution) and analyze_output (output analysis).",
|
||||
"agentcli.securityLayer": "Security + Prompt"
|
||||
},
|
||||
"breadcrumb": {
|
||||
"dashboard": "Dashboard",
|
||||
|
||||
@@ -376,7 +376,6 @@
|
||||
"remark": "备注",
|
||||
"rename": "重命名",
|
||||
"report": "报告",
|
||||
"requestts.sd3ab821c": "登录已过期,请重新登录",
|
||||
"required": "必填",
|
||||
"reset": "重置",
|
||||
"restart": "重启",
|
||||
@@ -511,7 +510,8 @@
|
||||
"createFailed": "创建失败",
|
||||
"created": "已创建",
|
||||
"severity": "级别",
|
||||
"critical": "严重"
|
||||
"critical": "严重",
|
||||
"request.tokenExpired": "登录已过期,请重新登录"
|
||||
},
|
||||
"menu": {
|
||||
"dashboard": "仪表盘",
|
||||
@@ -2979,7 +2979,6 @@
|
||||
"namespace": "所有命名空间"
|
||||
},
|
||||
"editAdvanced": {
|
||||
"s0c1fec65": "秒",
|
||||
"noManifest": "未获取到 manifest 数据,请使用 YAML 编辑模式直接修改。",
|
||||
"updateStrategy": "更新策略 (Strategy)",
|
||||
"rollingUpdate": "滚动更新",
|
||||
@@ -3002,7 +3001,8 @@
|
||||
"hostPIDDesc": "共享主机 PID 命名空间",
|
||||
"shareProcessDesc": "共享进程命名空间",
|
||||
"save": "保存",
|
||||
"saved": "更新已提交"
|
||||
"saved": "更新已提交",
|
||||
"secondsPlaceholder": "秒"
|
||||
},
|
||||
"editBasic": {
|
||||
"synced": "已同步",
|
||||
@@ -3040,8 +3040,8 @@
|
||||
"kubectl": {
|
||||
"disconnected": "\\r\\n\\x1b[31m[连接已断开]\\x1b[0m\\r\\n",
|
||||
"failed": "WebSocket 连接失败",
|
||||
"sc8107726": "\\r\\n\\x1b[31m[连接发生错误]\\x1b[0m\\r\\n",
|
||||
"cluster": "正在连接集群..."
|
||||
"cluster": "正在连接集群...",
|
||||
"connectErrorAnsi": "\\r\\n\\x1b[31m[连接发生错误]\\x1b[0m\\r\\n"
|
||||
},
|
||||
"misc": {
|
||||
"cluster1": "加载集群列表失败:",
|
||||
@@ -3069,7 +3069,6 @@
|
||||
"execError": "执行错误",
|
||||
"reconnect": "\\r\\n\\x1b[33m⚠ bash 不可用,请切换 /bin/sh 后重连。\\x1b[0m",
|
||||
"close": "\\r\\n\\x1b[33m[连接已关闭]\\x1b[0m\\r\\n",
|
||||
"sc8107726": "\\r\\n\\x1b[31m[连接发生错误]\\x1b[0m\\r\\n",
|
||||
"connected": "已连接",
|
||||
"connecting": "正在连接",
|
||||
"connectionError": "连接错误",
|
||||
@@ -3082,7 +3081,8 @@
|
||||
"fullscreen": "全屏",
|
||||
"close1": "关闭",
|
||||
"container1": "正在进入容器...",
|
||||
"enterPod": "进入 Pod 容器执行命令"
|
||||
"enterPod": "进入 Pod 容器执行命令",
|
||||
"connectErrorAnsi": "\\r\\n\\x1b[31m[连接发生错误]\\x1b[0m\\r\\n"
|
||||
},
|
||||
"podMetrics": {
|
||||
"resources2": "Pod 资源用量",
|
||||
@@ -4473,9 +4473,6 @@
|
||||
"cronjobformdial.s2e10ee70": "配置 Cron 定时任务",
|
||||
"cronjobformdial.s3b56b1f9": "格式: 分 时 日 月 周",
|
||||
"cronjobformdial.s15d864c1": "执行类型",
|
||||
"systemtaskspanel.s1a2b3c4d": "监控",
|
||||
"systemtaskspanel.s2b3c4d5e": "清理",
|
||||
"systemtaskspanel.s3c4d5e6f": "成本",
|
||||
"systemtaskspanel.s4d5e6f7g": "内置",
|
||||
"systemtaskspanel.s5e6f7g8h": "进程内置调度,不可编辑;清理与成本类任务支持手动触发",
|
||||
"systemtaskspanel.s6f7g8h9i": "{{count}} 个任务",
|
||||
@@ -4493,7 +4490,10 @@
|
||||
"systemtaskspanel.s8r9s0t1u": "执行完成",
|
||||
"systemtaskspanel.s9s0t1u2v": "执行失败",
|
||||
"systemtaskspanel.s0t1u2v3w": "加载系统任务失败",
|
||||
"systemtaskspanel.s1u2v3w4x": "暂无系统任务"
|
||||
"systemtaskspanel.s1u2v3w4x": "暂无系统任务",
|
||||
"systemtaskspanel.monitor": "监控",
|
||||
"systemtaskspanel.cleanup": "清理",
|
||||
"systemtaskspanel.finops": "成本"
|
||||
},
|
||||
"rbac": {
|
||||
"logRole": {
|
||||
@@ -4571,12 +4571,12 @@
|
||||
"codeSnippet": {
|
||||
"copyDisabled": "不可复制"
|
||||
},
|
||||
"datatable.s1a2b3c4d": "已选 {{count}} 项",
|
||||
"datatable.s2b3c4d5e": "列",
|
||||
"datatable.s3c4d5e6f": "共 {{count}} 条",
|
||||
"datatable.s4d5e6f7g": "已选 {{count}}",
|
||||
"datatable.s5e6f7g8h": "是",
|
||||
"datatable.s6f7g8h9i": "否"
|
||||
"datatable.s6f7g8h9i": "否",
|
||||
"datatable.selectedCount": "已选 {{count}} 项",
|
||||
"datatable.columns": "列",
|
||||
"datatable.totalCount": "共 {{count}} 条"
|
||||
},
|
||||
"kubernetes": {
|
||||
"cluster": {
|
||||
@@ -6608,8 +6608,8 @@
|
||||
"useauditsetting.s32e8a76e": "加载审计设置失败",
|
||||
"useauditsetting.s51680af0": "请选择有效的保留天数",
|
||||
"useauditsetting.s7d55bd57": ",无超期记录",
|
||||
"useldapmanageme.s1a2b3c4d": "OU \"{{name}}\" 已存在,请使用其他名称",
|
||||
"useldapmanageme.s2b3c4d5e": "创建 OU 失败:"
|
||||
"useldapmanageme.ouExists": "OU \"{{name}}\" 已存在,请使用其他名称",
|
||||
"useldapmanageme.createOuFailed": "创建 OU 失败:"
|
||||
},
|
||||
"aiops": {
|
||||
"title": "AIOps 智能",
|
||||
@@ -7009,9 +7009,6 @@
|
||||
"predictutilsts.providerTencent": "腾讯云",
|
||||
"predictutilsts.providerHuawei": "华为云",
|
||||
"predictutilsts.daysUntilThreshold": "{{days}} 天后触及阈值",
|
||||
"agentcli.s1a2b3c4d": "LLM + 工具层",
|
||||
"agentcli.s2b3c4d5e": "OpenAI 兼容 LLM;工具含 ssh_execute(远程执行)与 analyze_output(输出分析)。",
|
||||
"agentcli.s3c4d5e6f": "安全 + Prompt",
|
||||
"agentcli.s4d5e6f7g": "五级风险评估 + 三级安全模式;危险命令硬性拒绝,高危命令弹框确认。",
|
||||
"agentcli.s5e6f7g8h": "ReAct 核心引擎",
|
||||
"agentcli.s6f7g8h9i": "思考→行动→观察循环(最多 16 轮),失败换法重试,循环检测防死循环。",
|
||||
@@ -7078,9 +7075,6 @@
|
||||
"agentcli.s7y8z9a0b": "已拒绝执行:{{name}}",
|
||||
"agentcli.s8z9a0b1c": "请先选择目标主机",
|
||||
"agentcli.s4f5g6h7i": "连接未就绪,请稍后重试",
|
||||
"predictivecost.s1a2b3c4d": "AI 解读失败,请检查大模型配置或稍后重试",
|
||||
"predictivecost.s2b3c4d5e": "云成本预测总览",
|
||||
"predictivecost.s3c4d5e6f": "AI 深度解读",
|
||||
"predictivecost.s4d5e6f7g": "加载账单数据...",
|
||||
"predictivecost.s5e6f7g8h": "暂无账单数据,请先在云账单管理中录入费用记录",
|
||||
"predictivecost.s6f7g8h9i": "账单呈月初集中、近7日日均 {{avg}},可能含预付费或资源已停用;预测已按近期运行费率外推。",
|
||||
@@ -7104,9 +7098,6 @@
|
||||
"predictivecost.s4x5y6z7a": "月预算",
|
||||
"predictivecost.s5y6z7a8b": "当前 {{current}} / 阈值 {{threshold}},预测 {{predicted}}",
|
||||
"predictivecost.s6z7a8b9c": "触线概率",
|
||||
"predictive.s1a2b3c4d": "指标预测",
|
||||
"predictive.s2b3c4d5e": "容量规划",
|
||||
"predictive.s3c4d5e6f": "成本预测",
|
||||
"predictive.s4d5e6f7g": "预测分析",
|
||||
"predictive.s5e6f7g8h": "基于实时指标与云账单的线性回归预测、容量规划与成本前瞻",
|
||||
"predictive.s6f7g8h9i": "置信度",
|
||||
@@ -7142,7 +7133,16 @@
|
||||
"predictutilsts.su1v2w3x4": "1. 用 **加粗小标题** 分段,每段下 1 条要点,例如:**数据疑点**、**闲置资源清理**、**计费模式优化**、**存储生命周期**",
|
||||
"predictutilsts.sv2w3x4y5": "2. 若全月日均与近7日日均、预测月末存在明显矛盾,必须在「数据疑点」中说明原因(预付费/资源停机等)",
|
||||
"predictutilsts.sw3x4y5z6": "3. 结合 Top 服务给出可落地建议(EIP/云盘/ECS规格/OSS生命周期/预留实例等)",
|
||||
"predictutilsts.sx4y5z6a7": "4. 选 3~5 条最相关建议,总字数 350 字以内,不要空泛套话"
|
||||
"predictutilsts.sx4y5z6a7": "4. 选 3~5 条最相关建议,总字数 350 字以内,不要空泛套话",
|
||||
"predictive.metricsTab": "指标预测",
|
||||
"predictive.capacityTab": "容量规划",
|
||||
"predictive.costTab": "成本预测",
|
||||
"predictivecost.aiFailed": "AI 解读失败,请检查大模型配置或稍后重试",
|
||||
"predictivecost.overview": "云成本预测总览",
|
||||
"predictivecost.aiInsight": "AI 深度解读",
|
||||
"agentcli.archLayer": "LLM + 工具层",
|
||||
"agentcli.archDesc": "OpenAI 兼容 LLM;工具含 ssh_execute(远程执行)与 analyze_output(输出分析)。",
|
||||
"agentcli.securityLayer": "安全 + Prompt"
|
||||
},
|
||||
"breadcrumb": {
|
||||
"dashboard": "仪表盘",
|
||||
|
||||
@@ -101,7 +101,7 @@ async function request<T = any>(
|
||||
clearToken();
|
||||
useUserStore.getState().logout();
|
||||
window.location.href = '/login';
|
||||
throw new Error(i18n.t('common.requestts.sd3ab821c'));
|
||||
throw new Error(i18n.t('common.request.tokenExpired'));
|
||||
}
|
||||
|
||||
let json: ApiResponse<T>;
|
||||
|
||||
Reference in new issue
Block a user