引擎指南FAQPatreonDiscord下载
登录
RuneTranslate · 端到端翻译日式游戏
引擎指南对比图片文字存档编辑器作弊模式FAQ下载PatreonDiscordYouTube隐私政策服务条款联系我们
全部文章
rpg-maker · how-to · engine · control-codes

如何翻译 RPG Maker 游戏

2026年8月18日·10 分钟阅读

RPG Maker 是现存最好翻译的引擎 —— 文本就摆在普通数据文件里。本文讲清如何辨认你手上的版本、导出一个能玩的译好构建,并让控制码完好无损。

去找日本独立游戏时,你最可能撞上的引擎就是 RPG Maker,而它也是最好翻译的那一个。游戏的文本没有被编译进可执行文件 —— 它就摆在随游戏一同发布的普通 JSON 或 Ruby 序列化数据文件里。这正是 RPG Maker 翻译得以成立的原因,也是下面这套流程最终交给你一个真能玩的构建、而非一个靠猜屏幕上有什么的覆盖层的原因。

本指南讲清如何辨认你手上是哪一代 RPG Maker、导出流程、到底哪些东西会被翻译、控制码如何熬过机器翻译,以及一行译文回来不对时该怎么办。无论你是否用 RuneTranslate 来做,它都该有用。

我手上是哪一代 RPG Maker?

问这个问题的人多半不知道自己手上是哪个版本,而答案决定了什么做得到、什么做不到。打开游戏文件夹,看下面这份清单里第一个对得上的:

  • 一个 `www/` 文件夹,里面有 www/data/*.json —— RPG Maker MV。游戏是一个 nw.js 应用;可执行文件通常是 www/ 旁边的 Game.exe。
  • 一个光秃秃的 `data/` 文件夹,装着 .json 文件,没有 www/ —— RPG Maker MZ。MZ 把一切上移了一层,这是分辨两者最快的办法。
  • `Data/` 里装着 .rxdata、.rvdata 或 .rvdata2 —— 分别是 RPG Maker XP、VX 和 VX Ace。如果 Data/ 看起来是空的,去根目录找 Game.rgssad、Game.rgss2a 或 Game.rgss3a;那是同一批数据,装在一个加密归档里。
  • 根目录下的 `RPG_RT.exe`,配上 .lmt 和 .lmu 文件 —— RPG Maker 2000 或 2003。完全是另一代引擎。
  • 一个几十上百 MB 的 .exe,旁边既没有 www/ 也没有 data/ —— 很可能是一个 Enigma Virtual Box 构建,数据被打进了可执行文件里面。见下文。

MV 和 MZ 太像了,人们经常搞混,而一旦动手编辑,它们的差别就要紧起来。MV 与 MZ 对比逐条讲了文件夹布局、插件格式和消息框的差别。

RPG Maker 2000 和 2003 的游戏文本不支持。 RuneTranslate 只通过存档编辑器读它们的 .lsd 存档文件,此外别无其他。如果你手上是一个 RPG_RT.exe 游戏、想翻译它的剧本,该用的工具是 EasyRPG,不是这一个。与其花上一小时才吃力地弄明白,不如现在就离开本页。

四步流程

  1. 把新建项目指向游戏文件夹。 选包含 Game.exe 的那个文件夹。引擎是从里面的内容检测出来的 —— 你不用在下拉框里选 MV 还是 MZ,而如果检测结果和你以为的不一样,那本身就值得当作信息来读。
  2. 选一个翻译服务和一个目标语言。 有九种翻译服务可用,其中三种完全不需要 API 密钥或账号。
  3. 翻译。 运行器会把单元分批、失败时带退避重试,并显示一个带 ETA 的真实进度条。运行中和跑完之后,你都能编辑表格里的任意一行。
  4. 把一个能玩的构建导出到你选的文件夹。落在那里的是一份完整、可运行的游戏副本,译好的数据文件已经就位。

原始游戏文件夹永远不会被修改。每一次写入都落进你选的输出文件夹,这意味着一次糟糕的导出只花掉你一点磁盘空间 —— 删掉再导出一次即可。这也意味着你可以让日文构建照旧装着、随时能玩,两边并存。

RuneTranslate 运行在 Windows 10 和 11 上,也能在 Wine 或 Proton 下跑在 Linux 和 Steam Deck 上。首次启动需要一次免费的 Patreon 登录。免费档位解锁了每一种引擎和每一种翻译服务 —— 它限制的是吞吐量、同时只保留一个项目,而不是把功能锁在付费墙后面。

到底哪些东西会被翻译

对 MV 和 MZ,提取器会遍历每一个地图文件和每一份事件命令列表,把产生玩家可见文本的命令拉出来:

  • `401` Show Text —— 对话行。在任何一款 RPG Maker 游戏里,这都是大头。
  • `405` Show Scrolling Text —— 开场、制作人员名单、书信、滚动的背景交代。
  • `102` Show Choices —— 选项窗口里的条目。When [choice] 分支标签由同一个数组渲染,所以翻译了选项就等于两边都翻译了。
  • `320` / `324` / `325` —— Change Actor Name、Nickname 和 Profile,游戏用它们来做剧情中途的身份揭晓和形态转变。
  • 数据库 —— Actors.json(名字、昵称、简介)、Classes.json、Skills.json(名称、说明,以及 message1 / message2 战斗提示行)、Items.json、Weapons.json、Armors.json、Enemies.json、States.json。
  • `System.json` —— 游戏标题、货币单位,以及整张术语表:引擎绘制的每一个菜单标签、命令名和基础状态字符串。
  • `MapInfos.json` 的地图名和 CommonEvents.json —— 在把对话统一路由给一个共用处理器的游戏里,公共事件承载的剧本多得出人意料。
  • plugins.js 里的插件参数,以及 MZ 的插件命令参数(命令码 357)。很多现代 MV/MZ 游戏的菜单文本就放在这里。

事件注释(108 及其 408 续行)是开发者笔记,引擎不会显示给玩家,所以默认排除。它们不会被删掉 —— 它们以可勾选的选择加入行出现,因为确实有少数气泡和弹窗消息插件会渲染它们。分类器判定为代码标识符或文件路径的东西也是同样待遇:排除,但可见、可逆。

控制码,以及它们为何会毁掉译文

RPG Maker 的对话不是纯文本。它带着引擎在绘制时才展开的内联转义码:

  • \C[1] —— 把文字颜色切到调色板索引 1。
  • \N[2] —— 代入 2 号角色的名字。
  • \V[3] —— 代入 3 号变量的值。
  • \G —— 货币单位。
  • \I[123] —— 内联绘制 123 号图标。
  • \. \| \! \{ \} —— 停顿一拍、停顿一秒、等待输入、放大字号、缩小字号。

把这些原样丢给机器翻译,回来的一定是被搅乱的。Google Translate 会重排它们。小型本地模型会掉一个括号、把字母变成小写,或者把 ASCII 方括号换成全角的。LLM 偶尔会认定 \C[1] 是个错字,然后热心地删掉它。在游戏里的结果就是:文本框打出一个字面的反斜杠、颜色到一半就丢了,或者本该是角色名字的地方一片空白。

RuneTranslate 会在翻译服务看到字符串之前,把每一个码屏蔽成带编号的占位符 —— [[T0]]、[[T1]] —— 之后再按映射还原。还原是刻意宽容的:占位符回来时少了一边括号、里面多了空格、字母变成小写,或者括号变成全角,它都认,因为实践中这四种情况全都会发生。如果一个码整个不见了,那个单元会被标记出来,而不是悄无声息地随导出发走。

另外两种没那么显眼的情况由同一套机制覆盖。RPG Maker 还用 printf 风格的替换 —— Terms 和技能战斗提示里的 %1 和 %2,比如 %1の攻撃! 里的 %1 会变成角色名 —— 那些也会被屏蔽,因为弱一点的翻译服务会在原地编出一堆括号垃圾。此外很多游戏带一个名字替换插件,用 [名前] 或 [呼名] 这样光秃秃的方括号标记,引擎在运行时把它换成玩家的名字;那些同样会被屏蔽,而且范围收得足够窄,普通带方括号的正文不受影响。

插件自定义的多字母码,比如 \FFF[20] 或 \FH[ON],命中同一个模式,无需任何逐插件配置就受到保护。

46 字符自动换行

日语每个字符承载的意思远多于英语。一行在日语里舒舒服服填满消息框的文字,译过来就会冲出右边缘,而 RPG Maker 不会替你换行 —— 它就那么画到窗口外面,溢出的部分你根本看不见。直到玩家来告诉你半句话不见了,你才会察觉。

导出时,401 和 405 命令里的对话会按每行 46 个字符自动换行,这大致就是默认字号下默认消息窗口能容纳的量。断行插在词边界上,源文里已有的换行会被保留,所以作者自己的分页和刻意的断句都能留住。用了自定义消息系统或更小字号的游戏也许需要另一个数字;而在更宽窗口里绘制文本的游戏,只会比它实际需要的更早换行,那是观感问题,不是坏掉。

加密的图像和归档

MV 和 MZ 带一个素材加密选项,会把图像改名为 .rpgmvp 或 .png_,并在头部异或上一段数据。RuneTranslate 不假定它用的是标准方案 —— 它从文件自身的字节里恢复出头部长度、异或段长度和密钥,用 PNG 签名作为已知明文、用 IHDR 的 CRC32 作校验。这一点要紧,因为确实存在参数不同的加密插件(32 字节头部、32 字节异或段、一把镜像过的密钥),也因为不少游戏的 System.json 里密钥已经被抠掉了。RPG Maker 自家的方案在第一次迭代就能验证通过,所以常见情形不会有任何变慢;而写回去的东西会用同一套方案重新加密,游戏自己的解密器照样加载得了。

对 XP、VX 和 VX Ace,.rgssad / .rgss2a / .rgss3a 归档是直接读取的,里面的 Ruby Marshal 数据用 TypeScript 解析 —— 不用装 Ruby,也不用外部拆包工具。这一块是尽力而为:XP 和 VX 游戏把文本存为 Shift-JIS 字节串,而非带标签的 UTF-8,所以编码上的边角情况比 MZ 更容易出现。

画进美术素材里的文本 —— 标题画面、菜单按钮、CG 里的一块招牌 —— 不在任何数据文件里,任何提取器都够不到。那是 Image Studio 的活儿:识别文字区域、清理底板、排上替换文字,再按游戏自己的图像格式烘焙回去,包括加密在内。

Enigma Virtual Box 打包的游戏

相当一部分流传的 RPG Maker 游戏根本看不到 www/ 或 data/ 文件夹,因为整个虚拟文件系统被 Enigma Virtual Box 打进了可执行文件里。破绽是 exe 里的 EVB\0 标记,以及一个空得可疑的游戏文件夹。

这些是能检测并处理的。打包的文件系统会被解包进一个每项目工作区,数据照常提取和翻译,而导出时整个虚拟文件系统会被写成一个可运行的文件夹 —— 还原出的内层可执行文件、它的 DLL 和 www/ —— 译好的数据已经打好补丁。你运行那个抽出来的内层可执行文件,它到那时就是一个读取松散数据文件的普通未打包游戏。

只能这么做。早先有一种做法是把译好的 www/ 丢在打包过的可执行文件旁边,结果它悄无声息地什么也没干:正在运行的外壳从它自己内嵌的虚拟文件系统里解析 www/,对磁盘上的文件视而不见。如果你在用别的工具手工做这件事,那就是陷阱 —— 翻译看起来应用上了,游戏照样加载原文。

该选哪个翻译服务

支持九种翻译服务,其中三种不需要任何 API 密钥、也不需要在任何地方注册:Google、免费的 DeepL 端点,以及可选 Classic 或 Next-gen 模型的 DeepL。你完全可以不掏一分钱、不注册任何东西就翻完一整款 RPG Maker 游戏。付费选项是 DeepL API、OpenAI、Anthropic Claude、DeepSeek、任意 OpenAI 兼容端点,以及 —— 如果你更希望什么都不离开自己的机器 —— 通过 Ollama 或 LM Studio 跑的本地模型。

针对 RPG Maker 的简短结论:免费抓取器对菜单、物品名和短行完全够用,大多数人也应该从它们开始。它们在拟声词上吃力 —— 如果一个翻译服务把原文原样退回来,那个单元会被标为失败并附上说明,而不是让日语悄悄混进你的导出里。LLM 在长对话、语气,以及任何说话人语域要紧的地方明显更好。翻译服务对比列出了实际的取舍,AI 润色器则讲了在译完之后再跑一遍把它收拾干净。

让名字保持一致

对一款机翻 RPG Maker 游戏最常见的抱怨,就是主角有四个不同的叫法。术语表能治它 —— 在开跑之前把每个角色、地名、物品和技能的写法钉死,之后每一批都会照着用。术语表 101 讲了怎么建一份。翻译记忆在同一个方向上帮忙:整个项目里相同的源文会得到相同的译文,这在一款同一段物品说明会出现在商店、菜单和宝箱事件里的引擎中格外要紧。

一个 RPG Maker 特有的陷阱:某些插件按说话人的名字字符串做完全相等的匹配 —— MZ 的 TRP Skit 系列是有名的一例。你把 Actors.json 里的名字译了、却把插件数据里的留着,匹配就会悄无声息地失败,立绘或小剧场永远不触发。RuneTranslate 在导出时会同步两边。如果你是手工编辑,请记住:RPG Maker 里的一个名字可以同时既是显示文本、又是查找键。

出问题的时候

有一行还是日语

通常有三个原因。它根本没被提取,因为它住在提取器不去遍历的地方 —— 某个自定义插件自己的数据文件,或者烘焙进图像里的文字。它被提取了但被排除了,因为分类器把它读成了标识符;去选择加入行里找到它并勾上。再不然就是翻译服务把原文原样退了回来,那会显示为一个失败单元,你可以换一个翻译服务重跑。如果你是在更新应用之前翻译的这款游戏,请用编辑器 ⋯ 菜单里的重新扫描源文 —— 重新扫描只会增加单元,绝不会删掉你已有的译文。

文字溢出消息框

默认的换行是照着默认窗口来的。用了自定义消息系统、更大字号,或者有一张立绘吃掉半个框的游戏,需要更短的行。直接编辑出问题的那个单元、插入你自己的换行 —— 手工断行会原样通过导出。译文单纯太啰嗦时,这也是解法:把它改写得更短,而不是去和自动换行较劲。

导出之后游戏起不来

几乎总是某个数据文件坏了,而不是文本有问题。确认你启动的是输出文件夹里的可执行文件,而不是原来那个。在 EVB 构建上,确认你运行的是抽出来的内层可执行文件。如果是某个具体事件崩溃,嫌疑犯就是一个没能熬过来的控制码 —— 打开那个单元,把它的码和源文对一遍。让原始游戏文件夹保持不动,你就永远有一个能用的基准可以对照。

有一条插件字符串绝不能翻译

插件参数会把显示文本和开关名、文件路径、按键绑定、模式标志混在同一块里。任何读起来像代码标识符或路径的东西都会被自动排除,但一个拿日语词当内部键用的插件会漏过去。把那些单元标为排除,导出时它们就保持源语言。当一个插件的参数共享某种命名模式时,正则过滤器能成批地做这件事。

诚实的边界

  • RPG Maker 2000 / 2003 的游戏文本不在支持范围内。 只有存档文件,通过存档编辑器。剧本请用 EasyRPG。
  • XP、VX 和 VX Ace 是尽力而为。 归档读取器和 Ruby Marshal 解析器是纯 TypeScript 的,也确实能用,但更老的 Shift-JIS 字符串处理比 MV/MZ 更毛糙。
  • 编译进自定义插件 JavaScript 里的文本,只有在看起来像数据时才够得到。 一个把字符串硬编码进自身逻辑里的插件,得手工改。
  • 原生保护的 MZ 构建 —— 数据在 JavaScript 层之下被解密的那种 —— 走的是运行时捕获加覆盖的路子,而不是去逆向那套加密。它能用;把它当作尽力而为,在投入一次长时间运行之前先验证导出。
  • 这里没有任何东西能替代真的去玩一遍构建。 提取数量和一条绿色进度条都不是证据。启动导出的游戏,把开头十分钟读完。

两件相邻的、值得知道的事

作弊模式会读取一款 RPG Maker 游戏自己的开关、变量和物品并让你随手改动,这是抵达某个你需要检查译文的后期事件最快的办法 —— 大多数人也正是这样验证一次导出,而不用重玩二十小时。存档编辑器可以直接打开 MV/MZ、XP/VX/VX Ace 以及 2000/2003 的 .lsd 存档,所以一次卡住的流程或一件丢失的关键道具不会让一轮游戏就此终结。

如果你想先看看全景,引擎清单覆盖了全部十七种支持的格式,RPG Maker 引擎页面有格式细节,而通用教程是本指南不限引擎的那个版本。准备好了就去下载页面拿安装程序。

相关阅读
01

如何翻译 Unreal Engine 游戏

unrealguidesenginelocalization2026年8月18日 · 9 分钟
阅读 →
02

如何翻译游戏的 .po 和 .mo 文件(gettext)

gettextpomoenginetutorial2026年8月4日 · 7 分钟
阅读 →
03

如何翻译 AliceSoft System 游戏(Rance、Evenicle……)

alicesoftranceengine2026年6月26日 · 6 分钟
阅读 →

准备好试用 RuneTranslate 了吗?

免费版即可解锁全部引擎 + 全部翻译服务商。支持者($3/mo)解锁全速翻译。

下载 Windows 版