i18n(desktop): localize runtime activity titles and details to Chinese
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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<void> {
|
||||
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<void> {
|
||||
}
|
||||
|
||||
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<void> {
|
||||
}
|
||||
|
||||
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<void> {
|
||||
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<void> {
|
||||
|
||||
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<void> {
|
||||
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<vo
|
||||
const message = errorMessage(error);
|
||||
state.lastError = message;
|
||||
setSchedulerError(message);
|
||||
recordActivity("warn", "Lease Extend Failed", `${taskId} 续租失败:${message}`);
|
||||
recordActivity("warn", "租约续期失败", `${taskId} 续租失败:${message}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1145,7 +1145,7 @@ function handleAuthExpired(error: unknown): void {
|
||||
const message = errorMessage(error);
|
||||
state.lastError = message;
|
||||
setTransportAuthState("expired");
|
||||
recordActivity("danger", "Desktop Client Token Expired", message);
|
||||
recordActivity("danger", "客户端令牌已过期", message);
|
||||
stopRuntime();
|
||||
}
|
||||
|
||||
@@ -1226,6 +1226,10 @@ function resolveTaskTitle(
|
||||
return existing?.title ?? defaultTaskTitle(task.kind, task.platform);
|
||||
}
|
||||
|
||||
function describeRouting(routing: RuntimeTaskRouting): string {
|
||||
return routing === "rabbitmq-primary" ? "主消息队列通道" : "数据库兜底拉取";
|
||||
}
|
||||
|
||||
function defaultTaskTitle(kind: "publish" | "monitor", platform?: string): string {
|
||||
return `${kind === "publish" ? "发布任务" : "监控任务"}${platform ? ` · ${platform}` : ""}`;
|
||||
}
|
||||
@@ -1235,7 +1239,7 @@ function summaryFromTaskStatus(status: RuntimeTaskStatus): string {
|
||||
case "queued":
|
||||
return "任务已排队,等待客户端领取租约。";
|
||||
case "in_progress":
|
||||
return "任务正在执行,结果回写需要携带有效 lease_token。";
|
||||
return "任务正在执行,结果回写需要携带有效租约凭证。";
|
||||
case "succeeded":
|
||||
return "任务执行成功。";
|
||||
case "failed":
|
||||
@@ -1250,7 +1254,7 @@ function summaryFromTaskStatus(status: RuntimeTaskStatus): string {
|
||||
function summaryFromEventType(type: DesktopTaskEventMessage["type"], status: RuntimeTaskStatus): string {
|
||||
switch (type) {
|
||||
case "task_available":
|
||||
return "RabbitMQ fanout 已送达当前客户端,等待领取租约。";
|
||||
return "主消息队列事件已送达当前客户端,等待领取租约。";
|
||||
case "task_leased":
|
||||
return "服务端已确认租约归属。";
|
||||
case "task_extended":
|
||||
|
||||
Reference in New Issue
Block a user