亮点与主要变更
本版本包含 3 个 PR,覆盖 Windows 桌面壳层菜单汉化、壳层词库覆盖率提升,以及 193MB 大档案重打包 OOM 修复。
1. Windows 桌面壳层菜单汉化 + ASAR 完整性预检(合入 #227 by @lbchs5343,修复 #223)
问题背景:桌面壳层的语言白名单不含中文,且渲染进程约 1 秒后会把 locale 写回 en-US,所以只往 resources/i18n/ 放 zh-CN.json 不会被选中,原生菜单栏、任务栏右键菜单始终显示英文。
修复内容:
- 在
app.asar内就地补入resources/i18n/<lang>.json,并把词库字符串合并覆盖进en-US.json(缺失键补入、非字符串跳过、无变化不写回);ion-dist.asar的i18n/en-US.json同样处理; - 不重建
app.asar:真实包含unpacked(node-pty、office365-mcp、github-mcp-server 等原生模块)、executable、link条目,重建会丢元数据。改为只重写头部、原 payload 流式拷贝、新内容追加到尾部,app.asar.unpacked\完全不动; - 新增
Assert-ClaudeExeIntegrityMarkers:安装[2/7]在改动任何 asar 之前只读校验 exe 完整性标记,格式不兼容时零副作用失败,避免 4.4212 那种「asar 已改完、exe 哈希写不回去」的半坏状态; - 路径越界判断改用
[IO.Path]::DirectorySeparatorChar,Linux 下跑测试不再误判。
副作用提示:合并覆盖 en-US 后,界面即使选择 English 也会显示中文,需卸载或恢复安装备份才能还原(README 已说明)。
2. 补齐 74 条桌面壳层词条,覆盖率 91.0% → 98.8%(合入 #230 by @happycooltony)
1.4.20 之后,app.asar!/resources/i18n/en-US.json 的 947 条壳层词条会由 resources/desktop-zh-CN.json 合并覆盖,但当时只覆盖 862 条(91.0%)。本次补译 74 条,覆盖:
- 菜单与关于对话框:Terms of Service、Commercial Terms、Privacy Policy、View Changelog、Send Feedback…、New Project… 等;
- 证书与本地信任类报错:证书过期、证书不受信任、证书对应其他地址、证书已被吊销等;
- 无障碍朗读提示:
Reading page→ 正在朗读页面、Opening a page→ 正在打开页面,以及Clicking/Typing/Scrolling等状态提示; - 插件与代码会话:代码会话被组织停用、上传插件、插件上传提示等;
- 其余为
{n, plural, …}/{x, select, …}模板,ICU 分支结构、变量名、#占位全部原样保留。
同时修正 2 条既有译文:o4XUrv4/d7 与 sEOEdrJBYH 同英文两种译法,统一为「另外 # 项 / 另外 # 項」;x9PJxSK6R7 简繁引号不一致,统一为 “”。剩余 11 条为产品名、USB、{pct}% 等不应翻译的标识,刻意保留英文。
3. 修复 193MB ion-dist.asar 重打包 OOM(合入 #228 by @Oct1AtJoe)
问题背景:Claude 4.4212 的 ion-dist.asar 为 193 MB / 4612 条目,旧实现重打包 15 分钟仍未完成、内存涨到 14 GB+,普通用户机器会 OOM 或卡死。
修复内容:
Get-AsarFileIntegrity:ReadAllBytes整文件读入改为 4 MB 分块 +TransformBlock流式 SHA256;New-AsarArchive:ConvertTo-Json -Depth 100改为StringBuilder手拼紧凑 JSON,避免 4612 节点全量物化;- 函数签名、返回值、header 字节格式全部不变。
效果:重打包从 15 分钟未完成 / 14 GB+ 降到 约 20 秒 / < 100 MB;真实 4.4212 归档 4612 条完整往返验证通过,分块边界 7 个用例与旧实现逐字节等价。
验证与测试
- CI(Ubuntu / Windows)全部通过;
- 三份词库各 1,201 条,键集与顺序一致;新增条目逐条比对英文原文,占位符、plural/select 类型、分支、
#数量均无差异; - 真实 193 MB
ion-dist.asar往返验证:4612/4612 条目通过,重打包约 20 秒、内存 < 100 MB; git diff --check无格式问题。