为 Edmund McMillen 的猫咪养成 roguelike 游戏 Mewgenics 制作的社区中文本地化补丁。
⚠️ 游戏处于 Early Access 阶段,翻译内容可能随版本更新而变化。
- 从 Releases 下载
mewpatch.exe - 将
mewpatch.exe放入游戏目录(Steam/steamapps/common/Mewgenics/) - 双击运行
mewpatch.exe,等待自动完成(解包→翻译→字体替换→打包→应用) - 启动游戏,在设置中将语言切换为中文
工具会自动备份原始 resources.gpak 为 resources.gpak.bak。如需还原,将备份文件改回 resources.gpak 即可。
也可以在命令行中使用
mewpatch help查看所有命令。
- 从 Releases 下载
resources.gpak - 备份游戏目录下的原始
resources.gpak(重命名为resources.gpak.bak即可) - 将下载的
resources.gpak放入游戏目录 - 启动游戏,在设置中将语言切换为中文
如需还原,将备份文件改回 resources.gpak 即可。
翻译存储在 translation_progress.json 中,格式为:
{
"文件名::KEY": "中文译文",
"misc.csv::AREA_NAME_TUTORIAL": "小径",
...
}- Fork 本仓库
- 编辑
translation_progress.json,修正你认为不准确的翻译 - 提交 Pull Request,说明修改了哪些条目及原因
或者直接提交issue进行讨论。
- 参考
glossary.json中的术语表,保持译名一致 - 保留所有标记标签,不翻译标签内容:
| 标记 | 含义 |
|---|---|
[m:happy] |
角色表情 |
[s:1.5] |
文字缩放 |
[b]...[/b] |
粗体 |
[i]...[/i] |
斜体 |
[w:500] |
等待(毫秒) |
{catname} |
动态变量(猫名) |
{his} {he} |
代词变量 |
|
不换行空格 |
- 译文要自然流畅,符合中文游戏玩家的阅读习惯
- 如果原文只是标点或无需翻译,保持原样
将本仓库克隆到游戏目录(Steam/steamapps/common/Mewgenics/)。
补丁工具是一个 Go 程序,编译为单个独立二进制文件 mewpatch.exe。翻译数据(translation_progress.json)、中文字体(MaoKenZhuYuanTi-MaokenZhuyuanTi-2.ttf)以及游戏原始字体备份(unicodefont.swf.bak,作为 CJK fallback)通过 go:embed 嵌入到二进制中,用户无需额外文件。
需要 Go 1.25+:
go mod tidy # 解析依赖
go build -o mewpatch.exe ./cmd/ # 编译
⚠️ 编译前置条件:仓库未包含unicodefont.swf.bak(属于游戏原始资源,体积大且涉及版权)。 编译前需要从你的游戏目录手动复制:
- 用
mewpatch extract解包游戏的resources.gpak- 将
extracted/swfs/unicodefont.swf复制为本仓库根目录下的unicodefont.swf.bak
| 命令 | 说明 |
|---|---|
mewpatch patch |
一键执行全部步骤(解包→翻译→字体→打包→替换) |
mewpatch extract |
解包 resources.gpak 到 extracted/ |
mewpatch apply-translations |
将内嵌翻译数据应用到 CSV 文件 |
mewpatch replace-font |
替换 unicodefont.swf 中的 CJK 字体 |
mewpatch pack |
重新打包为 resources_patched.gpak |
mewpatch apply |
用补丁文件替换 resources.gpak(自动备份) |
mewpatch info |
查看 GPAK 文件信息 |
mewpatch help |
显示帮助 |
双击运行时默认执行
patch,完成后等待按回车退出。
| 文件 | 说明 |
|---|---|
embed.go |
go:embed 嵌入翻译数据和字体文件(package mewpatch) |
cmd/main.go |
CLI 入口和 patch 一键流程 |
cmd/gpak.go |
GPAK 格式解析、解包、打包 |
cmd/translate.go |
读取内嵌翻译数据,应用到 CSV 的 zh 列 |
cmd/font.go |
TTF → SWF 字形转换,替换 unicodefont.swf |
安装 uv,然后按以下流程操作。
uv sync # 初始化项目和依赖
uv run main.py extract # 1. 解包资源文件
uv run main.py add-zh-column # 2. 为 CSV 添加 zh 列
uv run main.py translate # 3. AI 自动翻译(需要 API Key)
uv run main.py wrap # 4. 自动换行(按显示宽度)
uv run main.py pack # 5. 重新打包
uv run main.py apply # 6. 应用补丁从 resources.gpak 解包全部 18524 个文件到 extracted/ 目录(约 4.7 GB)。同时生成两个元数据文件供 pack 使用:
extracted/__gpak_header.bin— GPAK 文件头(4 字节)extracted/__gpak_index.txt— 文件名列表(保持原始顺序)
uv run main.py extract为 extracted/data/text/ 下所有 CSV 文件的每一行末尾追加空的 zh 列。如果 zh 列已存在则跳过。对 additions.csv 还会自动设置语言元数据(CURRENT_LANGUAGE_NAME → 中文)。
uv run main.py add-zh-column调用通义千问(qwen3-max)将英文文本翻译为中文,写入 CSV 的 zh 列。翻译进度保存在 translation_progress.json,中断后可续译。20 线程并发调用 API,翻译时参考 glossary.json 术语表保证译名一致。
需要先设置 API Key:
export DASHSCOPE_API_KEY="your-api-key" # Linux/macOS
set DASHSCOPE_API_KEY=your-api-key # Windows CMD
$env:DASHSCOPE_API_KEY="your-api-key" # PowerShelluv run main.py translate # 翻译全部
uv run main.py translate --dry # 仅查看进度,不翻译
uv run main.py translate --apply-only # 仅应用已有翻译,不调用 AI
uv run main.py translate --files events.csv # 只翻译指定文件
uv run main.py translate --batch-size 100 # 每批 100 条| 参数 | 默认值 | 说明 |
|---|---|---|
--dry |
— | 仅显示翻译进度统计,不调用 API |
--apply-only |
— | 仅将已有翻译写入 CSV,不调用 AI |
--files FILE [FILE ...] |
全部 19 个 CSV | 只翻译指定的 CSV 文件 |
--batch-size N |
50 | 每次 API 调用包含的文本条数 |
按显示宽度对翻译文本自动插入换行符。中文字符宽度计为 2,英文/数字计为 1,标签([...]、{...})计为 0。优先在中文标点(句号、逗号等)后断行,避免在词中间断开。
uv run main.py wrap # 默认宽度 40 换行
uv run main.py wrap --max-width 50 # 指定最大显示宽度
uv run main.py wrap --dry # 仅查看会修改的条目
uv run main.py wrap --files items.csv # 只处理指定文件| 参数 | 默认值 | 说明 |
|---|---|---|
--max-width N |
40 | 每行最大显示宽度(中文字符=2,英文=1) |
--files FILE [FILE ...] |
全部 | 只处理指定的 CSV 文件 |
--dry |
— | 仅显示会修改的条目,不写入文件 |
将 extracted/ 目录按原始索引顺序重新打包为 resources_patched.gpak。未解包的文件会从原始 resources.gpak 中读取。
uv run main.py pack将 resources_patched.gpak 替换为 resources.gpak。首次执行时自动备份原文件为 resources.gpak.bak。
uv run main.py apply显示 resources.gpak 的文件数量、大小、文件类型分布、CSV 文件列表等。
uv run main.py info游戏自带 unicodefont.swf 作为 CJK fallback 字体。如果觉得默认字体不好看,可以替换:
uv run replace_unicode_font.py # 用默认 TTF 替换
uv run replace_unicode_font.py --font other.ttf # 用指定 TTF 替换
uv run replace_unicode_font.py --restore # 恢复原始字体| 参数 | 默认值 | 说明 |
|---|---|---|
--font FILE |
MaoKenZhuYuanTi-MaokenZhuyuanTi-2.ttf |
要嵌入的 TTF 字体文件 |
--dry |
— | 仅显示转换信息,不写入文件 |
--restore |
— | 从备份恢复原始字体 |
替换后需要重新 pack 和 apply 才能在游戏中生效。
2026/4 版本起:游戏将所有文本合并到单个
data/text/combined.csv(约 6.4 MB,UTF-8 BOM)。 文件中以// 文件名.csv注释行作为 section 分隔,translation_progress.json仍按文件名::KEY索引,工具会自动识别 section。
combined.csv 包含的 19 个 section:
| section | 内容 |
|---|---|
events.csv |
随机事件文本(战斗、探索、剧情事件) |
npc_dialog.csv |
NPC 对话 |
abilities.csv |
主动技能名称和效果描述 |
items.csv |
物品名称和描述 |
passives.csv |
被动技能名称和效果描述 |
units.csv |
单位/角色名称和描述 |
keyword_tooltips.csv |
游戏关键词的工具提示说明 |
cutscene_text.csv |
过场动画文本 |
furniture.csv |
家具名称和描述 |
misc.csv |
杂项文本(UI、地名、系统提示等) |
mutations.csv |
猫咪变异名称和效果描述 |
progression.csv |
游戏进度相关(解锁提示、成就等) |
enemy_abilities.csv |
敌人技能名称和描述 |
additions.csv |
追加文本(含语言元数据) |
weather.csv |
天气名称和描述 |
teamnames.csv |
队伍名称 |
additions2.csv |
追加文本 2 |
pronouns.csv |
代词系统(动态替换角色性别代词) |
additions3.csv |
追加文本 3 |
运行 uv run main.py translate --dry 查看各 section 翻译完成度。
| 文件 | 说明 |
|---|---|
embed.go |
Go embed 嵌入翻译数据和字体 |
cmd/main.go |
Go 补丁工具 CLI 入口 |
cmd/gpak.go |
GPAK 格式解析、解包、打包 |
cmd/translate.go |
应用内嵌翻译到 CSV |
cmd/font.go |
TTF → SWF 字形转换 |
main.py |
Python CLI 入口(解包/打包/应用补丁) |
translate.py |
AI 翻译逻辑(批量翻译、术语提取、进度管理) |
ai.py |
AI API 封装(通义千问 qwen3-max) |
glossary.json |
术语表(英文 → 中文映射,翻译时强制使用) |
translation_progress.json |
翻译数据(文件名::KEY → 中文译文,社区协作核心文件) |
replace_unicode_font.py |
替换 unicodefont.swf 中的 CJK fallback 字体 |
补丁工具(编译):
- Go >= 1.25
golang.org/x/image(TTF 字体解析)
翻译工作流(开发):
- Python >= 3.14
- uv
openai(AI 翻译时需要)fonttools(替换字体时需要)
- 如果需要临时运行命令,就使用
uv run python即可。
本项目为社区汉化工具,不包含任何游戏资源文件。