感谢一位曾经的b站用户进行了更深入的补充, 如果这篇文章有不明确的地方可以参考他的文章: https://www.bilibili.com/read/cv15545713
其实Ren'Py的汉化有很多种方法:
1.替换式
2.生成式
这里我个人更推荐使用renpy的生成翻译进行汉化, 因为使用这个汉化可以支持之后版本更新的迭代
后面润色什么的, 也来的更方便一些
如果是自己制作的renpy项目, 想要支持多语言的切换的话, 可以直接在renpy的主页右下角进行翻译生成
然后进入生成翻译的配置界面, 语言可以随意填写, 并且无所谓大小写, 不过推荐使用小写
然后点击生成翻译文件, 就可以为你的renpy项目生成文件了
生成的翻译文件会在游戏中的/game/tl/
目录中, 进行翻译就可以了
而如果你想为某个游戏制作汉化MOD
你也许会需要unrpyc和unrpa来解包游戏文件, 可以直接在Github中搜索
然后你可以先使用renpy创建一个项目
然后进入创建的项目目录, 删除掉全部文件, 这里我用DDLC来进行举例
用renpy创建项目, 打开创建项目的目录, 删除全部文件, 将DDLC的全部文件复制过来
注意是全部, 不光是game目录, 整个游戏文件都要弄过来
然后再回到renpy中, 生成翻译就可以了
然后还需要几步配置, 首先添加字体文件
在tl中的翻译目录下创建style.rpy配置要翻译语言的字体
比如要翻译成中文, 就添加中文字体
下面我分享一个DDLC可以使用的fonts.rpa与style.rpy的范文
如果翻译DDLC的mod的话, 可以直接使用以下内容
translate chinese python:
gui.default_font = "gui/font/wrht.ttf"
gui.name_font = "gui/font/fzht.ttf"
gui.interface_font = "gui/font/wrht.ttf"
gui.choice_button_text_font = gui.default_font
gui.button_text_font = gui.interface_font
translate chinese style edited:
font "gui/font/wrht.ttf"
translate chinese style poemgame_text:
font "gui/font/wqywmh.ttf"
translate chinese style navigation_button_text:
font "gui/font/fzht.ttf"
translate chinese style game_menu_label_text:
font "gui/font/fzht.ttf"
translate chinese style pref_label_text:
font "gui/font/fzht.ttf"
translate chinese style radio_button_text:
font "gui/font/wqywmh.ttf"
translate chinese style check_button_text:
font "gui/font/wqywmh.ttf"
缩进要求一定保持一致, 不然会出错误.
fonts.rpa文件自取:
链接: https://pan.baidu.com/s/1-QcVZQsDYQv-oosBPTON2A 提取码: 5ke1
Google drive兜底:
https://drive.google.com/file/d/10vH41qxBgPsq7JH7HcTley74LUvSjy0I/view?usp=sharing
然后就是在游戏设置目录中, 添加切换语言的选项
到game中找到screens.rpy
, 在其中搜索preferences()
在下图位置中, 添加如下代码
vbox:
style_prefix "radio"
label _("Language")
textbutton _("English") action Language(None)
textbutton _("Chinese") action Language("chinese")
然后打开游戏大概就是这个效果
第二个textbutton后面action language括号中的内容一定要跟你在renpy填写的生成翻译语言的名字保持一致
在翻译文件里,你可以看到一些以#开头的文本
这些是注释,删去不会影响程序的任何运行,而且把文件进行编译再反编译,这些注释信息会丢失。
Renpy生成翻译文件时,原文就是以注释的形式给出的,因此修改注释里面的原文不会影响程序
真正起到把原文和翻译文本一一对号作用的是标识号
你可以看到tl文件夹下有很多rpy文件,除了我们已经创建和修改的,每个rpy里都有要翻译的文本,把他们都翻译就好了。
怎么翻译呢?举个例子。
打开一个rpy
# game/day_1.rpy:1247
translate chinese the_truth_fcb0f1ca:
# mc "You mean King?"
mc "这里填上上面那行的翻译就好了"
之后,你可以正常启动游戏,然后点击settings,把右上角的language改成Chinese就可以看到中文了。
如果希望游戏一打开默认是中文,可以打开game目录下的screens.rpy(注:生成翻译文件后,tl目录下还会有一个screens.rpy,所以这里强调是game目录),在文件最前面添上下面这句:
define config.language = "chinese"
然后就可以进行愉快的翻译了
翻译文件有时并不能翻译全部的文本,比如游戏标题和输入名称的对话框
就不会出现在翻译文件里,那么应该怎样翻译这些文本呢?
Renpy提供了两种解决方案,动态定义和字符串翻译,这里只介绍字符串翻译。
字符串翻译在生成的翻译文件中可以见到,它们采用这样的格式开头:
translate chinese strings:
old "balbla"
new "blabla"
Old里面的内容是原文英文,new是翻译成的中文。因此,当你发现游戏有部分文本在翻译文件里是没有的(以游戏标题名举例),可以在tl文件夹内新建一个rpy,叫什么名字都可以,然后仿照如下格式进行翻译:
translate sc strings:
#名字输入对话框
old "Please enter your name"
new "请输入你的名字"
#标题名,可以在options.rpy里看到
old "Doki Doki Literature Club - xxx"
new "心跳!心跳!文学部 xxx"
#以此类推
有时候,在做汉化时,会遇到需要跳过一些语句或是拆分一句话的情况,举例:
translate sc natsukiRoute_Stress_30b0f19c:
# o "Ahem. First name?"
o ""
translate sc natsukiRoute_Stress_3bf104ad:
# mc "[player]."
mc ""
translate sc natsukiRoute_Stress_196fbbf9:
# o "Last name?"
o ""
中国人不会分开询问一个人的姓和名,因此可以这样处理:
translate sc natsukiRoute_Stress_30b0f19c:
# o "Ahem. First name?"
o "啊。请问您的姓名?"
translate sc natsukiRoute_Stress_3bf104ad:
# mc "[player]."
mc "[player]。"
translate sc natsukiRoute_Stress_196fbbf9:
# o "Last name?"
pass
最后一句pass,会将这句话直接跳过,这样就不需要再单独询问名和姓了。
但一定要注意,跳过某句话一定要使用pass,不可以直接删除这个translate
否则会把英文原文显示出来,而不是不显示这句话。
如果想把一条语句进行拆分,可以使用下面的格式:
translate sc natsukiRoute_Stress_3bf104ad:
# mc "lalalalalala"
mc "lalala"
mc "lalala"
@(阴险)新的机翻:https://www.deepl.com/translator
@(滑稽)我欧尼酱其实用机翻之人!? 真香