From 25dad49ed3a2b407d8cda1293ba6622a75c0b88d Mon Sep 17 00:00:00 2001 From: liangxu Date: Mon, 20 Apr 2026 14:17:56 +0800 Subject: [PATCH] i18n(desktop): localize runtime activity titles and details to Chinese Co-Authored-By: Claude Opus 4.7 (1M context) --- .../src/main/runtime-controller.ts | 52 ++++++++++--------- .../src/renderer/views/HomeView.vue | 33 +++++++++++- 2 files changed, 60 insertions(+), 25 deletions(-) diff --git a/apps/desktop-client/src/main/runtime-controller.ts b/apps/desktop-client/src/main/runtime-controller.ts index 85faaf5..7e6406b 100644 --- a/apps/desktop-client/src/main/runtime-controller.ts +++ b/apps/desktop-client/src/main/runtime-controller.ts @@ -211,8 +211,8 @@ export function syncRuntimeSession(next: DesktopRuntimeSessionSyncRequest | null clearRuntimeState(); recordActivity( "info", - "Desktop Runtime Armed", - `Client ${normalized.desktop_client?.device_name ?? normalized.desktop_client?.id ?? "unknown"} 已准备消费桌面任务。`, + "任务消费端已就绪", + `客户端 ${normalized.desktop_client?.device_name ?? normalized.desktop_client?.id ?? "未知客户端"} 已准备消费桌面任务。`, ); } @@ -282,7 +282,7 @@ function startRuntime(): void { state.running = true; setSchedulerPhase("running"); setSchedulerError(null); - recordActivity("success", "Desktop Runtime Started", "已启动 SSE、heartbeat 和 pull fallback。"); + recordActivity("success", "调度节点已启动", "已启动 SSE、心跳上报和兜底拉取。"); connectEventStream(); scheduleHeartbeatLoop(); @@ -402,7 +402,7 @@ function connectEventStream(): void { state.lastServerTime = payload.server_time; } - recordActivity("success", "Desktop Stream Connected", "服务端已建立定向任务事件流。"); + recordActivity("success", "单点事件流已连接", "服务端已建立定向任务事件流。"); }); sseClient.on("ping", () => { @@ -437,14 +437,14 @@ function connectEventStream(): void { const message = errorMessage(payload); state.lastError = message; setSchedulerError(message); - recordActivity("warn", "Desktop Stream Reconnecting", message); + recordActivity("warn", "单点事件流重连中", message); }); sseClient.on("reconnect", (payload) => { if (!isReconnectPayload(payload)) { return; } - recordActivity("info", "Desktop Stream Backoff", `将在 ${payload.delayMs}ms 后重连 SSE。`); + recordActivity("info", "单点事件流退避等待", `将在 ${payload.delayMs}ms 后重连 SSE。`); }); state.sseClient = sseClient; @@ -510,7 +510,7 @@ async function sendHeartbeat(source: "startup" | "timer"): Promise { setSchedulerError(null); if (source === "startup" || previousStatus === "failed") { - recordActivity("success", "Heartbeat Healthy", "client heartbeat 已写回服务端。"); + recordActivity("success", "心跳连接正常", "客户端心跳已回写到服务端。"); } } catch (error) { state.lastHeartbeatAt = Date.now(); @@ -526,7 +526,7 @@ async function sendHeartbeat(source: "startup" | "timer"): Promise { } if (source === "startup" || previousStatus !== "failed") { - recordActivity("danger", "Heartbeat Failed", state.lastError); + recordActivity("danger", "心跳连接失败", state.lastError); } } } @@ -635,7 +635,7 @@ async function syncAccounts(source: "startup" | "manual"): Promise { } if (source === "startup") { - recordActivity("info", "Accounts Synced", `已同步 ${state.accounts.length} 个桌面账号。`); + recordActivity("info", "本地账号同步", `已同步 ${state.accounts.length} 个桌面账号。`); } refreshAccountNames(); @@ -650,7 +650,7 @@ async function syncAccounts(source: "startup" | "manual"): Promise { return; } - recordActivity("warn", "Account Sync Failed", message); + recordActivity("warn", "账号同步失败", message); } } @@ -686,7 +686,7 @@ export async function unbindRuntimeAccount(accountId: string, syncVersion: numbe if (matchedAccount) { recordActivity( "info", - "Account Unbound", + "账号已解绑", `${matchedAccount.display_name} 已解绑,并清理了当前机器上的本地会话缓存。`, ); } @@ -749,7 +749,7 @@ async function leaseSpecificTask(request: PendingTaskRequest): Promise { state.lastError = errorMessage(error); setSchedulerError(state.lastError); - recordActivity("warn", "Specific Lease Missed", `${request.taskId} 未能成功领取:${state.lastError}`); + recordActivity("warn", "指定任务领取失败", `${request.taskId} 未能成功领取:${state.lastError}`); } finally { if (state.leaseInFlight) { state.leaseInFlight = false; @@ -793,7 +793,7 @@ async function pullNextTask(): Promise { return; } - recordActivity("warn", "Pull Fallback Failed", state.lastError); + recordActivity("warn", "兜底拉取失败", state.lastError); } finally { state.leaseInFlight = false; } @@ -823,13 +823,13 @@ async function executeLeasedTask( routing, attemptId: leased.attempt_id ?? null, leaseToken: leased.lease_token, - summary: `已领取租约,开始执行 ${routing === "rabbitmq-primary" ? "MQ 唤醒" : "pull fallback"} 消费。`, + summary: `已领取租约,开始执行 ${routing === "rabbitmq-primary" ? "MQ 唤醒" : "兜底拉取"} 消费。`, }); recordActivity( "info", - "Task Leased", - `${taskRecord.title} 已被当前 desktop client 领取,routing=${routing}。`, + "任务已领取", + `${taskRecord.title} 已由当前客户端领取,路由:${describeRouting(routing)}。`, ); const abortController = new AbortController(); @@ -859,10 +859,10 @@ async function executeLeasedTask( recordActivity( execution.status === "failed" ? "danger" : execution.status === "unknown" ? "warn" : "success", execution.status === "failed" - ? "Task Completed As Failed" + ? "任务执行失败" : execution.status === "unknown" - ? "Task Completed As Unknown" - : "Task Succeeded", + ? "任务执行结果待确认" + : "任务执行成功", `${taskRecord.title} ${execution.summary}`, ); } catch (error) { @@ -894,7 +894,7 @@ async function executeLeasedTask( } noteLeaseReleased("failed"); - recordActivity("danger", "Task Failed", `${taskRecord.title} 执行失败:${failureMessage || "unknown_error"}`); + recordActivity("danger", "任务执行失败", `${taskRecord.title} 执行失败:${failureMessage || "未知错误"}`); } finally { clearInterval(extendHandle); state.currentExecutionAbort = null; @@ -922,7 +922,7 @@ async function extendActiveLease(taskId: string, leaseToken: string): Promise = { + "已启动 SSE、heartbeat 和 pull fallback。": "已启动 SSE、心跳上报和兜底拉取。", + "client heartbeat 已写回服务端。": "客户端心跳已回写到服务端。", + }; + + return (exactMap[detail] || detail) + .replace(/\brouting=rabbitmq-primary\b/gi, "路由:主消息队列通道") + .replace(/\brouting=db-recovery\b/gi, "路由:数据库兜底拉取") + .replace(/\bdesktop client\b/gi, "桌面客户端") + .replace(/\bclient heartbeat\b/gi, "客户端心跳") + .replace(/\bpull fallback\b/gi, "兜底拉取") + .replace(/\bheartbeat\b/gi, "心跳上报") + .replace(/\bClient\b/g, "客户端") + .replace(/\bunknown_error\b/gi, "未知错误"); +} + function formatUid(uid: string) { return (uid || "").replace(/^(?:platform:)+/gi, ""); } @@ -145,7 +176,7 @@ const subsystemCards = computed(() => { {{ formatRelativeTime(entry.at) }} -

{{ entry.detail }}

+

{{ translateEventDetail(entry.detail) }}

当前没有最近事件记录。