MENU

Ren'Py制作汉化完全教程

April 16, 2020 • Read: 21803 • 默认分类

感谢一位曾经的b站用户进行了更深入的补充, 如果这篇文章有不明确的地方可以参考他的文章: https://www.bilibili.com/read/cv15545713

其实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: September 17, 2023
Leave a Comment

9 Comments
  1. ikun ikun

    为什么我翻译完后,运行游戏时只要遇到[]就会报错 看别人的汉化的游戏都有[]都没报错

  2. ikun ikun

    为什么我翻译完后,运行游戏时只要遇到[]就会报错 看别人的汉化的游戏都有[]都没报错

  3. Many thanks! Numerous content!

  4. leo leo

    你好,大佬,我想请问一下,我输入
    vbox:
    style_prefix "radio"
    label _("Language")
    textbutton _("English") action Language(None)
    textbutton _("Chinese") text_font "SourceHanSansLite.ttf" action Language("chinese")
    这一串代码后,我的界面变空白了,一个字都没有。这该怎么办呢

    1. AyaSwan AyaSwan

      @leo这个是因为没有翻译相关文本,在文档开头第一句下面加上默认文本为英文的代码,如果英文显示了,就说明确实是这个问题,去查看翻译的文档里有没有“”这种没有翻译的主界面翻译,如果出现大量圈圈或者口口口,将gui.rpy下的ttf字体文件替换,同时将新的字体放入game或是游戏文件夹中。

  5. ziyo001 ziyo001

    你好,我最近对一款游戏自己进行尝试汉化,使用renpy建好工程后没有screens.rpy文件, 显示灰色怎么办,是不是就没有办法汉化了,游戏是开源的,下好就有rpy文件就是没有game文件夹下的几个文件

    1. AyaSwan AyaSwan

      @ziyo001这个就是因为没有解包,楼主讲了,去github下载