在应用运行期间捕获界面原文,并使用可复用字典替换为目标语言,不修改目标应用安装文件。
国内下载/更新地址(夸克): https://pan.quark.cn/s/f36d7f35b609
Github开源地址(需魔法): https://github.com/Yuelioi/glyphshift
特点
- 即点即用,不用手动查找和修改程序里的文字资源。
- AI 接入,批量搞定翻译,也可以自己改。
- 字典可以导入导出,方便分享和重复使用。
- 适用场景广泛,后续还会支持更多场景。
适用场景
- 传统 Windows 软件
- 工具类软件
- 游戏
原理简单介绍
软件出现“文字”,大部分是通过某一种渲染方式显示的。我们针对这些渲染接口,或者引擎里的文字对象,在目标进程中拦截原文,查找字典并替换成译文。
不同软件用的方式不一样,同一个软件也可能用好几种,所以需要不同的适配器配合。图片里的文字和已经变成纹理的文字,目前不一定能处理。
目前支持的适配器(场景)
- ExtTextOutW:传统 Windows 软件,支持字距、裁剪和部分字形索引。
- TextOutW:传统 Windows 控件和简单自绘界面。
- DrawTextW / DrawTextExW:传统按钮、标签和窗口中的矩形文字布局。
- GdipDrawString:使用 GDI+ 的自绘面板和图形界面。
- DirectWrite TextLayout:使用 DirectWrite / Direct2D 的界面,目前支持单一格式文字,复杂混合格式保持原样。
- Qt Painter drawText:动态链接的 MSVC Qt 5(x86 / x64)和 Qt 6(x64)Widgets 界面,不支持静态 Qt 和 QML。
- Qt Quick 标准文字:动态 Qt 6.8.3 x64 的 QML 标签、菜单和提示,不支持输入框、富文本和自绘文字。
- GTK 3 / Pango:动态链接的 GTK 3 界面,不支持 GTK 4。
- raylib DrawTextEx:动态链接的 raylib 5.5 文字,不支持静态链接或已经缓存成纹理的文字。
- MonoGame 标准文字:Windows x86 / x64、.NET 6+ 的 MonoGame DrawString 标准文字,支持缺字字体回退,自绘纹理文字不覆盖。停用后恢复原文,组件保留到目标退出。
- Unity Mono 标准界面:Windows x86 / x64 的 Unity Mono 标准文字,包括受支持的 uGUI 和 TextMeshPro 文字。需要匹配的 Mono 接口,不支持 IL2CPP、UI Toolkit、NGUI 和自绘文字。
- VGUI 本地化查询(实验):已验证的 Windows x86 VGUI 本地化短标签。标准标签支持刷新和恢复,未识别的控件需要重新打开界面,带格式化参数的文字暂不替换。还需要更多游戏测试。
- CatSystem2 对话文字(实验):已验证的 x86 UTF-8 和经典 ANSI 对话文字,支持刷新和恢复。历史记录目前只验证了 UTF-8 分支,不支持的控制标记或无法编码的译文会保留原文。还需要更多游戏测试。
支持某种适配器,不代表用了这个引擎的软件就能全部翻译,具体看实际效果。
怎么用
- 打开目标软件和 Glyphshift,权限保持一致。
- 新建探针,选择目标软件和适配器。默认创建新字典,也可以用已有字典。
- 在目标软件里打开菜单、设置或对话,让探针收集文字。
- 自己填写译文,或者接入 AI 批量翻译。
- 看目标里的文字有没有变。没变可以点刷新,有些界面需要重新打开,有些对话需要往下走一句。
- 测试没问题后,可以建一个工作流,后面继续用这套字典和配置。
不用了就点“停止运行”,字典不会删除。部分适配器的组件会保留到目标软件退出。
字典
- 支持 JSON、CSV 导入导出。
- CSV 没有语言等信息,检查格式通过后再补充。
- 导入支持追加、同词条覆盖、整体替换。整体替换前记得备份。
- 探针支持排除字典,方便分开整理,避免重复收集。
- 工作流可以组合多个字典。
AI
支持 OpenAI、Anthropic、Gemini、兼容 OpenAI 接口的服务、Ollama,以及本机已登录的 Codex 订阅。
翻译速度看模型和网络,翻译结果也可以自己改。用云端 AI 时,待翻译文字会发给你选的服务;API Key 目前明文保存在本机。
目前还有的问题
- 有些软件只能翻译一部分,还需要补适配器。
- 抓到原文,不代表画面一定能马上替换。
- 刷新不是所有控件都支持,有些需要重新打开界面。
- 出现次数增加只代表又抓到了文字,不代表刷新成功。
- 软件或游戏更新后,可能需要重新测试。
协议
GPL-3.0-only,完整内容见项目里的 LICENSE。第三方依赖保留各自协议。