MENU

Ren'Py制作汉化完全教程

April 16, 2020 • Read: 5207 • 默认分类阅读设置

上次发DDLC OurTime汉化的时候, 只是粗略了带过了一下制作汉化的部分, 这次来好好叙述一下

其实Ren'Py的汉化有很多种方法:

1.替换式
2.生成式

这里我个人更推荐使用renpy的生成翻译进行汉化, 因为使用这个汉化可以支持之后版本更新的迭代
后面润色什么的, 也来的更方便一些

如果是自己制作的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"
Last Modified: June 26, 2020
Leave a Comment

2 Comments
  1. @(阴险)新的机翻:https://www.deepl.com/translator

    1. @c0sMx@(滑稽)我欧尼酱其实用机翻之人!? 真香