一次偶然的发现
很多人下载 Codex 后,第一反应就是把它改成中文界面。但设置里找不到语言选项,网上的教程又大多指向一个需要外网才能访问的语言包下载地址。我过去也卡在这一步,直到最近与 AI 助手对话时,才得知一个被我忽略已久的事实:Codex 从 v1.4.2 开始,已经把中文语言包直接打包进了安装文件。
我的版本是 26.730.61309,运行在 Codex & OWL 环境下。AI 助手确认这个版本自带中文资源,于是我让 Codex 自己检查安装目录。结果发现,那个体积很小的 Codex Installer.exe 只是微软商店的在线安装器,真正的应用本体藏在 WindowsApps 目录里。在应用目录中,既有浏览器内核的 zh-CN.pak 文件,也有应用自己打包的中文界面资源。
换句话说,语言包一直就在我电脑上,只是从未被加载。
罪魁祸首:enable_i18n
真正挡住中文的,是一个叫 enable_i18n 的开关。它默认关闭,并且还要依赖远端配置来决定最终状态。没有外网时,远端配置拿不到,界面就只能保持英文。这解释了一个奇怪的现象:本地中文文件明明完整,应用却视而不见。
在我看来,这其实是很多 Electron 应用的常见设计——把所有语言资源全部打包,再用配置项决定显示哪种语言。好处是分发时只需一个安装包,坏处是普通用户完全不知道还有这种隐藏开关。如果不是 AI 助手点破,我可能永远找不到入口。
便携副本:绕过限制的可行方案
Codex 给出的方案是制作一个便携副本。具体操作是:把已安装的 Codex 应用目录完整复制到 Codex-CN 文件夹,完全不碰原来的 Store 安装;然后在副本的 app.asar 中找到 enable_i18n,把默认值从 false 改成 true,同时更新 asar 的完整性哈希;最后用独立的 user-data-dir 启动副本。
改完以后重新打开,效果立竿见影。进程启动参数里出现了 zh-CN,浏览器 profile 的语言也变成了 zh-CN,日志中能看到本地 zh-CN 翻译文件被成功加载,状态码 200。设置页和聊天界面都切换成了中文。
容易踩的坑与我的思考
整个过程中有几个容易踩的坑,值得单独拿出来说:
第一,原安装别改。只改复制出来的副本,万一有问题,把副本和数据目录删掉就能回到原样。第二,app.asar 是 Electron 的打包格式,不能只做字符串替换,文件内容和头部哈希必须一起改,否则应用可能打不开。第三,不同版本里 enable_i18n 所在文件可能不一样,别硬记文件名,先搜索再定位。第四,Store 版更新不会碰到便携副本,便携版也不会自动更新。以后想升级中文版,需要重新复制新版本,再打一次同样的补丁。
这件事也让我重新思考了软件本地化的逻辑。厂商把语言包放在安装目录里,却又用开关把它锁住,导致大量用户重复造轮子。如果官方能在设置页提供一个“使用本地语言包”的选项,或许能省去无数篇教程。不过从另一个角度看,Electron 应用的开放性也给了用户更多自主权——只要愿意研究,总能找到打开开关的办法。
如果你也和我一样,没有外网、没有 ChatGPT 账号,平时用 cc-switch 和 DeepSeek 跑 Codex,可以直接把下面这段提示词发给 Codex,让它自己完成复制、补丁、启动和验证:
请帮我实现 Codex 中文界面便携版,不改原 Store 安装。核心思路:1. 复制已安装 Codex 的 app 目录到用户可写目录;2. 在副本 app.asar 中把 enable_i18n 默认 false 改为 true;3. 同步更新 asar integrity,不能只改字符串;4. 保持 .codex/config.toml 的 localeOverride 为 zh-CN;5. 用独立 user-data-dir 启动便携版;6. 生成启动 bat 或桌面快捷方式。关键坑:1. 不要改 WindowsApps 原安装;2. 先搜索 enable_i18n 定位,不要硬编码文件名;3. 原 Store 版和便携版用不同 user-data-dir;4. 验证启动参数带 zh-CN,并实际加载 zh-CN 翻译文件;5. 回滚方法是删除便携目录和数据目录。
