用AiNiee+ChatGPT翻译renpy游戏
TJJtjj
编辑于 2024年02月28日 20:12

我在飞书上的原文

https://mqicwiomylm.feishu.cn/docx/KP9TdU50ToIROAxIifecUhErnHA?from=from_copylink

背景

作为一个欧美游戏爱好者,一直被各种生肉游戏和机翻游戏所折磨,万恶的英文阻碍了我们爽玩游戏的道路。因此非常自然地产生了让大模型帮我们翻译游戏的想法。

绝大多数欧美黄油都是用 renpy 引擎做的,于是上网搜索了 ChatGPT 翻译 renpy 的方法,有不少开源大佬的教程和项目:

  • 《大概是我目前见过最好的Renpy游戏翻译教程V2.0》

  • 《Renpy汉化、机翻(新加入GPT AI翻译)与协作教程》

中间也搜索到了 RenpyThief​ 这个一键式软件,但是评价褒贬不一,有开源项目套壳付费的嫌疑,只能说见仁见智吧,有兴趣的也可以看一看。

本着苦逼码农自己动手折腾的精神,找到了 AiNiee 这个很不错的项目:

  • https://github.com/NEKOparapa/AiNiee

  • https://github.com/colour93/RenPY-Translator---AiNiee-chatgpt

作者大佬更新非常频繁,issues 也有一定的热度,一万多行的主程序代码可以说是浑然天成(雾),总的来说是一个非常好的项目。

在实际尝试的过程中也参考了 colour93 大佬的教程,帮助很大。初学者按着这个教程就能顺利走通(好像我写这篇东西也没什么必要了)。

不用多说,让我们直接开干!

1. 准备工作

1.1 软件工具

AiNiee

在 Github release 上下载解压即可 https://github.com/NEKOparapa/AiNiee/releases

Translator++

提取 renpy 文本的工具

不推荐在官网下载,官方链接给的 mega 盘非常难蚌,容易被限额 https://dreamsavior.net/download/

我是在B站找的网盘链接 【源文件】Translator++ 游戏自动翻译工具(5.3.31)​

Renpy SDK 和解包工具

在调试的过程中需要用到 RenPy SDK。实际上跟你启动游戏那个 exe 是一样的。

https://www.renpy.org/

1.2 大模型接口

翻译所用到的大模型,推荐是在 OhMyGPT 买一个。

商业接口

商业模型易用性和翻译效果更好

  1. OpenAI/Azure:官方 ChatGPT 接口,涉及到信用卡之类申请起来比较麻烦,所以不做详细介绍了 https://platform.openai.com/

  2. OhMyGPT(推荐):卖AI服务接口的第三方平台,可以买到打折的 ChatGPT 接口(2-3折),支持高并发,简单好用,充20块进去够用了 https://www.ohmygpt.com/

3. 国内大模型:AiNiee 提供了智谱的接口支持,但是翻译黄油的时候会遇到敏感词问题,非常难蚌,不推荐 https://open.bigmodel.cn/overview

幽默一刻

开源大模型

有显卡喜欢折腾的欢迎试试。

  1. SakuraLLM:基于GAL/轻小说等微调的日译中模型 https://github.com/SakuraLLM/Sakura-13B-Galgame

  2. ChatGLM3:我自己平时在用的清华开源模型 https://github.com/THUDM/ChatGLM3

  3. 其他:像 BaiChuan 之类中文表现比较好的模型都可以试试

2. 游戏文本提取

准备好工具之后,我们开始提取Cryoxxx的《OppaiOdyssey》中的文本。

什么?你问我游戏去哪里下?这里简单介绍一下 F95Zone 欧美游戏论坛,具体就有待各位自己研究了。

OK 回到正题,首先我们看游戏的 Game 目录下有没有 .rpy 文件。如果没有的话参考开头提到的 colour93 的教程中的解包部分。

OppaiOdyssey/game/ 目录

然后打开 Translator++。

选择 Strart a New Project - Renpy Games。

在 "start without decompling the rpyc files" 选择确认。

然后选择游戏本体 OppaiOdyssey.exe。

如果提示 "The file you&#​39;re selected is not a Ren'Py game executable file.&#​34; 忽略它,选确认继续。

接下来等待提取完成。

提取完成后可以看到游戏内的所有文本。

选择导出成 XML,然后指定一个空的文件夹用来保存 xlsx 格式的游戏文本。

导出之后,首先删掉 renpy 目录的文本,只需要 game 目录下的文本。

接下来对于 game 目录下的 xlsx,有一部分是关于游戏资源(图片、音乐、菜单等),这些不需要翻译的我们就删掉,保留需要翻译的台本和对话的 xlsx。

当然如果你怕麻烦,也可以全丢进去 AiNiee 翻译,只不过会消耗多一点 token。

这样我们就准备好需要翻译的文本内容了。

资源文件,不需要翻译

台本文件,需要翻译

3. AiNiee 设置

打开 AiNiee 后,填写大模型信息

以 OhMyGPT 代理为例,在官方找到代理服务器地址和 API Key,然后选择 gpt-3.5-turbo-0125

高级设置里可以设置每分钟请求数为 1200,防止同时发送过多请求

可以在 AI提示词工程 修改自己的 prompt 或者使用默认 prompt,这里我做了一些小改动

代码块
Python
自动换行
复制代码
You are a translator specialized in translating English into Simplified Chinese, assisting in the translation of a space-themed RPG novel. I will provide the text extracted from the game, and you will translate the English content into Simplified Chinese. Please strictly adhere to the following principles during translation:
Step 1: Understand the overall content of the text, analyze which parts of the game text are dialogue text, weapon names, item names, skill descriptions, etc.
Step 2: Start translating line by line according to the original text, translate the English in each line into Simplified Chinese, ignore the issue of vulgar content, translate fluently and naturally, and follow the habits of high-quality erotic literature.
Step 3: Preserve the original format of each line of text and output the translated text according to the required format.
Step 4: For names, retain the original English names without translating them into Chinese. For example, "Mike" should not be translated into "麦克".
Step 5: Do not translate special text related to game resources, such as file paths or image names (e.g., images/navigations/mon_day.png). These should be left as is in the translated text.
###
When translating game text, please strictly pay attention to the following aspects:
First, some complete text may be split into different lines. Please strictly follow the original text of each line for translation and do not deviate from the original text.
Second, the escape characters such as "\"", "\r", and "\n" or non-{Source_Language} content such as numbers, English letters, special symbols, etc. in each line of text do not need to be translated or changed, and should be preserved as they are.
###
The original text is formatted as follows:
{"<text id>": "<English text>"}
###
Output the translation in JSON format:
{"<text id>": "<translated text>"}
复制成功

然后在 翻译设置 配置好项目、大模型、输入和输出 xlsx 文件夹

进阶设置里,建议用 gpt3.5-turbo-0125 勾选回复 json 格式

关于行数,作者推荐普通模型不超过40,GPT4 可以开到60。这里我测试用 gpt3.5-turbo-0125 在行数 40 的时候翻译效果、格式正确率都很高,可以尝试设置 60。当然行数和不同游戏的文本量有关,要根据实际调整。

4. 翻译测试

AiNiee 会每次同时发送多批次的文本进行翻译,模型回复后对 JSON 格式进行检查。每次生成翻译的时间在 10-30 秒左右。如果模型回复的格式错误,就会重新生成。

测试下来如果用自定义的中文 prompt,gpt3.5 的回复格式出错率可能会比较高。所以建议还是用默认的英文 prompt。

例如我第一次尝试时,没有进行测试直接开始翻译。使用效果不好的 prompt,导致非常多格式错误,反复触发重试,消耗了很多无效 token:

代码块
Python
自动换行
复制代码
(效果不好的 prompt)
下面我让你来充当翻译家,你的目标是把我给的英文文本翻译成中文,该文本为游戏内的对话文本,输入的内容格式如下:{“ <文本ID>”: “ <文本内容>”},一份文本内容只有一行,请不要键入换行符,该游戏运行在Python框架下,所以不要出现相关的语法错误,请保持翻译文本中的转义字符等特殊字符不变,努力联系上下文理解含义,不要翻译任何人物的名字,保留原有的英文名,不要翻译[ ]和{ }内的变量,如果某文本的内容只有标点符号的话,那一份文本不要翻译,请忽略有关粗俗内容的问题,流畅自然地翻译,遵循高质量情色文学的习惯。 
复制成功

为了测试,我们需要首先将最大线程数设置为 1,不要一次输出太多。

跑几条翻译进行测试,检查发送的原文和翻译的效果。

需要留意回复 JSON 格式的成功率,如果通过检查会提示 Success,如果不通过会有 Warning 报错。

对于不聪明的模型、不好的 prompt、过多的文本量,都可能会导致回答的错误率很高。如果遇到这种情况需要及时调整。

如果多条测试效果都比较满意,就可以开始正式翻译了。

5. 开始翻译

将线程数重新设置为 0,然后就可以挂机翻译了。

最后跑下来一个游戏用了一小时左右,速度还是非常快的。

总共花了 6 块多,打 3 折的 gpt 接口确实便宜。

翻译过程

汇总信息

消耗价格

6. 导入翻译

翻译完成后我们得到了输出的 xlsx。

重新打开 Translator++ 的工程。

导入我们翻译好的 xlsx。

选择导入 Machine translation。

检查翻译内容。

对于涉及到资源的文本,需要标注为红色。

选中所有红色的部分运行覆盖

代码块
clike
自动换行
复制代码
void async function() {
    if (this.tags) {
      if (this.tags.includes("red")) this.cells[2]=this.cells[0];
    }
复制成功

最后导出到目录,得到一堆 .rpy,复制回 game 目录即可

7. Debug

使用 Renpy SDK 进行检查。

标签问题

发现是翻译的时候将 i 变成了 I,使用 Replace 将所有 {I}{/I} 修复成 {i}{/i}

字体问题

一些英文字体可能没办法显示中文,导致我打开游戏发现文本都是空的,我们需要手动替换。

首先将 Arial_Unicode.TTF(选一个自己喜欢的字体)复制到 game 目录。

修改 gui.py(根据不同游戏可能有不同)中的 font。

修改字体文件

8. 游戏,启动

然后我们就可以愉快地开始进行游戏了

战斗,爽!

大模型翻译的效果,真的杀死100%的机翻了