基于 Translator++ 的 Ren'Py 游戏汉化大纲
逗比去哪2
2024年03月10日 09:47
收录于文集
共10篇

前言

本大纲将介绍如何利用 Translator++ 这个机翻软件来节省自己大量的汉化时间。

本大纲将包含以下内容:

  1. 翻译所需的工具

  2. 基础的 Ren'Py 翻译流程

  3. Translator++ 的使用

  4. 过程可能出现的问题

那么废话不多说,直接开始。

所需工具

首先,1 个自己用的顺手的文本编辑器,什么是文本编辑器?记事本就是一个文本编辑器。本文使用 VS Code 并安装了 Ren'Py 插件。

接着安装好 Python,并将对应路径加入到系统的环境变量,本大纲使用的 Python 版本为 3.10.6,并且利用 anaconda 在系统上搭载了多个虚拟环境。

然后是下列工具(链接均为官方出处):

  1. UnRen-forall - https://f95zone.to/threads/unrengui-unren-forall-v9-4-unren-powershell-forall-v9-4-unren-old.92717/

  2. Ren'Py SDK - https://www.renpy.org/latest.html

  3. Translator++ - https://dreamsavior.net/download/

请先确保自己的网络能够正常连接上述网站。

解释:

UnRen-forall 是一个整合了 rpatool 和 unrpyc 的用于解压 .rpa 和反编译 .rpyc 的批处理工具,是翻译的必要步骤,如果不喜欢使用整合工具,更喜欢自己来的可以分别去 https://github.com/Shizmob/rpatool 和 https://github.com/CensoredUsername/unrpyc 单独下载 rpatool 和 unrpyc,但记得请自行阅读相关页面(你仍然需要安装 Python),rpatool 和 unrpyc 的使用方法未在本大纲中列出。

Ren'Py SDK 用于快速提取游戏的翻译文件,方便节省大量时间,如果喜欢自己一个个文件查看、喜欢亲力亲为的可以免去此步骤。须知:请根据要翻译的游戏版本下载对应的 SDK,比如 Ren'Py 7 就下载Ren'Py 7的,Ren'Py 8 的就下载 Ren'Py 8 的,可以在对应游戏的根目录下 game\script_version.txt 中找到对应的版本。

Translator++ is a CAT (Computer Aided Translation) or computer-aided human translation (CAHT) software for games. It helps translators to produce quality translation efficiently and quickly for various types of game engines such as RPG Makers, Wolf RPG Editor, RenPy, KiriKiri, and many more. 这是本大纲的一个必要工具。

Ren'Py 游戏翻译流程基础

翻译使用 Ren'Py 引擎编写的游戏非常简单,只需简单的 3 步:

  1. 第一步,将游戏文本找出来,涉及的操作包含反编译

  2. 第二步,用 SDK 提取翻译文件

  3. 第三步,将提取的翻译文件进行翻译即可。

要达成第一步目标,需要如下步骤:

首先,将下载下来的 UnRen-forall 压缩包中的 UnRen-forall.bat 文件放置在游戏的根目录,然后双击打开:

按下回车后进入主菜单:

输入数字进行相应的操作,这里根据游戏文件的实际情况进行选择,或者你也可以无脑输入 9 执行 1-8 的所有操作。

本大纲以某个 Ren'Py 游戏为例,这个游戏下的 game 目录如图所示:

可以看到这里主要有 2 个 .rpa 压缩文件,那么现在介绍第一步翻译规则:遇到 rpa 就要先无脑解压。

回到 UnRen-forall 主菜单,输入 1 然后回车确认,此时会询问在解压后是否要删除原来的 .rpa 文件,建议删除前做好备份,本大纲已经做好备份,所以输入 y 并回车:

回到游戏的 game 目录下,可以看到解压后的目录变成了这样:

可以发现多了很多文件夹和 .rpyc 文件,这些都是解压了所找到的 images.rpa 和 scripts.rpa 的结果。

此时用文本编辑器打开 .rpyc 发现是不可读的,这些文件是 Ren'Py 引擎的编译文件,可以理解为 Java 中的 class 字节码文件。回到刚才的 UnRen-forall 菜单,输入 2 然后回车,工具就会对所有的 .rpyc 文件进行反编译然后在旁边生成对应的 .rpy 文件,图就不放出了。

至此,第一步的目标已经完成。

接下来就是利用 SDK 为我们生成翻译文件,

打开下载好的与游戏对应的 Ren'Py SDK 压缩包,在本大纲中,游戏所使用的 RenPy 版本为7.4.6,将其解压到你硬盘上的某个地方,然后打开:

因为本大纲已经打开过,所以没有第一次打开的截图,但是为了能够让游戏在左侧工程列表中显示,请在 SDK 的右下角设置 - 工程目录处选择到游戏所在目录的上一级目录,如图所示:

设置完成后返回即可在左侧工程列表中找到游戏位置。

接着要点击对应的游戏,在右侧的操作一栏中,点击生成翻译文件,在语言那里填你要放置翻译文件的文件夹名称,比如我喜欢使用 schinese 这个名称表示存放简体中文翻译,这样 SDK 就会在 game/tl/ 下就会生成一个 schinese 文件夹,里面都是原文注释 + 待翻译文本,有些游戏代码写得烂,可能会导致识别不了,所以建议最后还是得要自己手动确认一下,手动确认办法未在本大纲列出。

在本大纲中,一定要取消勾选 【为翻译生产空字符串】,因为等会要用 Translator++ 为我们自动化翻译。

最后,点击【生成翻译文件】,等待 SDK 自动在 game 目录下生成本地化文件,至此,第二步的目标完成。

第三步就是翻译,此时在 game/tl/schinese 中都是已经生成好的待翻译的本地化文件,这里可以选择进行自己进行手动精翻,还是往下看先用 Translator++ 机翻一遍再手动润色,完全凭自己的选择。

对于字体等问题,比如翻译了后进入游戏显示不出,中文变方块等,全部都在后面的 可能出现的问题 一节中。

Translator++ 的使用

下载安装好 Translator++ 后,打开 Translator++,点击左侧大大的创建新的工程,在弹出的新窗口拉下来找到 Ren'Py Games,噢等一下,我们还有一步工作要做:

使用支持打开文件夹的文本编辑器打开game目录下的 tl 文件夹,比如本大纲所使用的 VS Code 可以直接在文件夹右键选择使用 Code 打开,然后使用全局搜索(Shift+Ctrl+F)功能搜索【old "】,然后搜索的结果全部替换为 【# old "】,目的是在前面加上一个 #​ 注释掉所有的 old 的一行,防止 Translator++ 将 old 行的原文也一并翻译。

完成了后回到 Translator++,找到 Ren'Py Games并点击之后,取消掉那 2 个选项,然后点击 Select executable file from your the game:

图片看不清楚的可以浏览器右键-新标签页打开看大图。

接着会提示 Are you sure want to start a project without decompiling the rpyc files? 那肯定是要点击确定的,因为我们已经提前把 rpyc 文件都反编译过了,何必再用你多此一举。点击确定后找到游戏的 exe 文件,可能会提示说这不是 Ren'Py 的可执行文件,问你要不要继续,废话当然要继续啦。

然后 Translator++ 就会开始对目录下的文件进行解析,主要还是那堆 .rpy 文件,等待解析完成后,在左侧的项目一栏那里的 Filter 输入 tl/schinese 将生成的翻译文件筛选出来,然后随便在一个文件上右键,全选:

然后为了让 Translator++ 在翻译的时候忽略 [] 和 {} 括起来的内容(大多数情况下是不用翻的,但还是要视你的游戏而定),还需要再:

打开选项(螺丝刀和扳手图标),然后点击左侧 "翻译引擎&语言",右侧拉到下面,然后添加这两个 js 的正则表达式:(纳闷了 B 站的新版编辑器怎么取消了代码块,求求你们兼容一下 MarkDown)

/\{([^}]*)\}/g,

/\{([^}]*)\}/g,

如图:

然后可以在下方 Tester 那里测试一下,如果 [xxx] 内容或者 {xxx} 被高亮显示了,说明正则表达式生效了,之后遇到这些东西都不会翻译了。

搞定后就可以用 Translator++ 一键生成机翻了:

根据自己的情况选择翻译引擎,然后点击现在翻译,接下来的事情,等着就好。

翻译完成后将翻译结果导出到文件夹,然后放在一个目录中,我随便选了一个目录就放进去了:

然后用 VS Code 打开导出的文件夹,全局搜索 【# old "】,替换回【old "】取消掉之前添加的注释。

好了现在这个文件夹的内容就是一键生成的机翻了,接下来的工作可以是【机翻润色】->【精翻】,比如把某些【他妈的】再重新翻译成恰当的动词等等。

现在离大功告成还差一步了,翻译完全后,将整个 tl 文件放到 game 目录下,然后继续测试你的翻译,确保游玩过程中不会出现什么错误。

为了提高载入时间和减少出错情况,不建议放在解包后的游戏内游玩,希望你之前备份好游戏了。

有兴趣的读者还可以尝试使用 raptool 将自己的翻译和字体打包成一个单独的 .rpa 文件作为汉化包分享。

过程可能出现的问题

​最最最最常出现的问题1 —— 进入游戏还是英文:

在游戏没有那个啥,也就是默认没有支持多语言的情况下,需要通过代码手动指定使用的翻译语言,在游戏的 game 目录下新建一个 .rpy 文件,虽然但是,建议不要中文命名,然后添加内容:

# 设置默认语言

define config.language = "schinese"

# 切换renpy的语言 - 影响主菜单按钮文本

init python:

   Language("schinese")

里面的 schinese 是 tl 目录下的语言文件夹,自己按需修改。

最最最最常出现的问题2 —— 进入游戏中文显示不出来(或者方框):

问题出在使用的字体上,一般而言是游戏所使用的字体缺少中文字符。

这个问题没有万能的办法去解决,因为游戏不同,代码也不同,你需要学会看游戏内的 renpy 代码(实际上就是 python),但是此处可以提供一个覆盖大多数情况的办法:

在 game 目录下新建一个 .rpy 文件,然后添加以下内容

translate schinese python:     style.default.font = "msyhbd.ttc"     gui.system_font = "msyh.ttc"         gui.main_font = "msyh.ttc"     gui.text_font = "msyh.ttc"     gui.text_font_bold = "msyhbd.ttc"         gui.interface_text_font = "msyhl.ttc"     gui.name_text_font = "msyhbd.ttc"     gui.glyph_font = "msyhl.ttc"     gui.button_text_font = "msyhl.ttc"     gui.choice_button_text_font = "msyhbd.ttc"

按需填入你自己的字体文件,本大纲喜欢微软雅黑,所以就全部复制了一份到

tl/schinese 目录下。

某些游戏还可能会自定义一堆 style 来影响部分按钮文本的字体,此时上述换字体的代码可能无法影响到,这些自定义 style 一般会定义在 screen.rpy 中,或者你使用全局搜索进行查找:

style custom_menu_style_header_btn:

   font "candara.ttf"

   size 35

   hover_color "#fe9416"

   selected_color "#fe9416"

   color "#ffffff"

   insensitive_color "#808080"

对于这种情况,可以在我们的.rpy文件中添加:

translate schinese python:

   style.custom_menu_style_header_btn.font = "msyh.ttc"

除了上述之外,还有一种简单粗暴的办法,那就是直接在翻译文件中指定字体,如:

old "English"

new "{font=msyh.ttc}英语{/font}"

或者还可以再粗暴点,直接把游戏文件内的所有字体文件都替换成你的字体文件,但是不保证你能全部都替换完全。

每次修改自己的 .rpy 文件后都建议删除掉打开游戏后生成的 .rpyc 文件,否则很可能不会再次编译 .rpy 文件而导致游戏直接使用了未修改的 .rpyc 文件。

最最最最常出现的问题3 —— SDK 提取翻译缺少内容

翻译过来就是 —— 游戏代码写的太烂或者就是干脆没考虑支持多语言而导致 SDK 没能识别出可本地化字符。

这种情况非常复杂,视游戏的代码而定,为了避免翻译导致的游戏出错,在此不提供解决方案。

常出现的问题4——玩着玩着就跳出错误

这种情况首先要点击回滚,然后马上存个档,然后再继续对话跳出错误,看看是哪句翻译出现问题,然后继续用你的那个支持打开文件夹+支持全局搜索的文本编辑器搜索出现问题的翻译,一般可能是:

1.{xx} 等之类的标签没有闭合,即本来应该是{font}xxxx{/font}的但是在翻译的过程中莫名奇妙将其变成了 {字体}xxxx{/font},导致标签没有闭合进而游戏出错。改回去就好了。

2.百分号问题,在renpy中,表示百分比需要使用两个百分号,如翻译文本为 “现在已经到达了 50% 的动力” 应该要改成 “现在已经到达了 50%% 的动力” 才会正确显示。

3.涉及 [xxxx] 等变量的改动检查此类变量是不是被翻译了,如果你像此大纲添加了相应的正则表达式应该就不会出现此类问题。

具体情况具体分析,主要还是看出错指向的文件位置,还有,反编译出来的代码 ≠ 源码,本大纲不提倡在解包后的游戏中继续游玩。