PvZ-Portable中文和英文版界面文字缺失?一个XML文件快速修复非英文资源问题

原创2026-10-30 00:00:091,635 阅读

PvZ-Portable中文和英文版界面文字缺失?一个XML文件快速修复非英文资源问题

PvZ-Portable 是一款跨平台的《植物大战僵尸》GOTY 版社区重制项目,支持 Windows、Linux、macOS、Android、iOS、Switch 和 Web 等系统,能还原接近 100% 的原始游戏体验。很多中文用户在使用中文资源(main.pak + properties 文件夹)时,会发现界面上某些按钮、图鉴描述显示为英文甚至直接缺失——这通常不是 Bug,而是缺少一个 XML 兼容文件。本文介绍如何用 pvz-portable.xml 一键修复 PvZ-Portable 非英文资源的界面文字问题。

PvZ-Portable 跨平台重制植物大战僵尸

为什么中文资源会出现"缺字"?

先理解 PvZ-Portable 的文字加载顺序,就能明白问题出在哪。游戏启动时按以下优先级依次加载文字资源(数值越大越优先覆盖):

  1. main.pak 内的 Properties/LawnStrings.txt —— 原版游戏的所有文字(随语言版本而定)
  2. properties/default.xml —— 原版语言文件
  3. properties/Layout.xml
  4. properties/pvz-portable.xml —— PvZ-Portable 专用的覆盖文件(最高优先级)

加载顺序可以在源码 LawnApp.cpp 中确认,注释也写得很清楚:"Load localized properties AFTER LawnStrings so they can override string values"。

关键问题来了:PvZ-Portable 是重制项目,代码中用了一些原版游戏并不存在的文字键(例如重加的关卡重试按钮、植物图鉴新排版标题、新成就文案等)。这些键在原版中文 LawnStrings.txt 里找不到,程序就会回退到代码中写死的英文默认值——这就是你看到"中文界面里夹杂英文"或文字空缺的根本原因。回退逻辑见 SexyAppBase.cpp 的 GetString 实现:查不到键时返回第二个参数(英文默认文本)。

快速修复步骤:生成 pvz-portable.xml

🛠️ 项目自带了一个官方脚本 make-compat-overrides.py,它会直接读取你的 main.pak,提取对应语言的字符串,自动生成 properties/pvz-portable.xml 覆盖文件。

步骤 1:确认资源文件已放对位置。main.pak 和 properties/ 文件夹必须与 pvz-portable 可执行文件在同一目录(中文资源请整套使用中文版游戏数据,不要混搭中英文的 pak 和 properties)。如果位置错误,游戏会直接弹窗提示 "Please place main.pak and the properties/ folder into:",此时按提示移动即可(见 SexyAppBase.cpp 的报错逻辑)。

步骤 2:在仓库根目录运行脚本,指向你的 main.pak:

python3 scripts/make-compat-overrides.py path/to/main.pak

脚本会默认在 main.pak 旁边的 properties/pvz-portable.xml 写入结果,你也可以用 -o 参数指定输出路径,文件已存在时用 --force 覆盖。

步骤 3:重新运行游戏,缺失的界面文字即会被替换为中文资源中的对应文案。

不想跑脚本?手动写 XML 也很简单

pvz-portable.xml 的格式非常直白,就是一个 <Properties> 容器加若干 <String id="键名">文字</String> 条目。你可以参照脚本生成的格式(make-compat-overrides.py)手动创建该文件,例如:

<Properties>
    <String id="RESTART_LEVEL">重新开始</String>
</Properties>

几个常见需要覆盖的键名:

键名 对应界面位置
RESTART_LEVEL 关卡重试按钮
NOT_ENCOUNTERED_YET 图鉴未解锁植物/僵尸的占位描述
CRAZY_DAVE_1700 疯帽子卖植物提示
各类 *_DESCRIPTION 植物/僵尸图鉴描述(脚本会自动补全标题行)

注意 XML 中的特殊字符需要转义(< 写作 &lt;、& 写作 &amp;),这一点脚本已经自动处理好了(转义逻辑),手动编辑时别漏掉。

其他常见"文字缺失"排查点

  • 弹窗提示 "Image resource not found" 之类的报错:说明 properties/resources.xml 清单与 main.pak 内容对不上,请确保两者来自同一份游戏数据。清单解析逻辑在 ResourceManager.cpp 中。
  • 资源清单文件格式:由 properties/resources.xml 描述,解析器实现见 XMLParser.h 和 ResourceManager.cpp 的 ParseResourcesFile。
  • 命令行指定资源目录:如果资源放在别处,可以用 -resdir <path> 参数告诉游戏去哪找 main.pak 和 properties/,详见 README.md。
  • 多语言支持:项目官方支持中文、德文、西班牙文、法文、意大利文等 GOTY 官方资源(README.md),换成目标语言的数据文件后,记得重新跑一次兼容脚本。

总结

✅ PvZ-Portable 界面文字缺失的完整排查路径:

  1. 确认 main.pak + properties/ 放在可执行文件旁,且为同一语言版本的完整资源;
  2. 运行 python3 scripts/make-compat-overrides.py <main.pak> 生成 properties/pvz-portable.xml;
  3. 重启游戏,界面文字恢复完整。

整个过程不需要改一行代码——这就是 XML 数据驱动架构的魅力:所有界面文案都可以通过一个文件随时覆盖。祝你在 PvZ-Portable 里玩得开心!🌱🧟

登录后查看全文
PvZ-Portable