其实前天就已经做好了工具,只是不知道要不要放出来。看到现在网上放流的机翻已经这么多,即使放出来也不会引起太大动乱,所以就果断把这个项目写进博客,全当为大家多提供些许玩具吧。

首先感谢Leohearts负责了解包封包。

项目地址:https://github.com/cmd2001/mangekyo5_Chs

GitHub链接放出来,知道我想要什么了吧。

求Star!求Watch!求Fork!一声不吭只管clone的白嫖怪最讨厌了~

免责声明:本项目仅包含翻译制作工具,不包含游戏本体。请从合法正规手段获取游戏本体后使用本项目辅助翻译。

使用方法:

首先感谢hz86/filepack,请使用这个工具完成解包封包。

接着,填写百度翻译API内容,并于指定内容运行翻译脚本。(具体用法readme写得很清楚)

翻译过程截图:

效果图:

为什么出了第一幕外截图都是莲华?莲华我老婆~不接受反驳。

(总感觉上面那句话很适合我)

由于只改动了文本,选项当然是没有汉化的啦~

关于字体一大一小的问题,是由于原版程序默认日文字体,缺少简体字符,字体渲染fallback所致。更改字体即可:

关于本工具的具体实现,无非就是解析文本+逐句翻译。这里感谢Leohearts帮我完成文本解析工作。

work.py是该翻译器的主要部分,其工作原理为从文件读入句子,空格分离,跳过无需翻译的指令语句,去除对话中的注音语句,并将剩余部分利用百度翻译API进行翻译。

源码如下:

import argparse
from BaiduTrans import translate
import time


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--filePath', type=str)
    arguments = parser.parse_args()

file = open(arguments.filePath, 'r', encoding='utf-16')
data = file.read().split('\n')
file.close()
out = []

def removeRB(s):
    ret = ''
    i = 0
    while i < len(s):
        if s[i] != '[':
            ret = ret + s[i]
        else:
            j = i
            while s[j] != ']':
                j = j + 1
            s2 = s[i + 1:j - 1]
            ret = ret + s2.split(',')[1]
            i = j
        i = i + 1
    return ret


for x in data:
    if x != '' and x[0] != '%' and x[0] != '^' and x[0] != '@' and x[0] != '\\' and x[0] != '【':
        y = translate(removeRB(x)).replace('莲花', '莲华').replace('荷花', '莲华')
        print(y)
        out.append(y)
        time.sleep(0.1)
    else:
        out.append(x)

file = open(arguments.filePath, 'w', encoding='utf-16')
for x in out:
    file.write(x + '\n')

关于replace('莲花', '莲华').replace('荷花', '莲华'),只要老婆名字译对了其余错再多了不管啦~

BaiduTrans.py,参考官方API实现翻译函数:

import http.client
import hashlib
import urllib
import random
import json

def translate(q):
    appid = '' # Your baidu translation API Appid
    secretKey = '' # Your baidu translation API Key

    httpClient = None
    myurl = '/api/trans/vip/translate'

    fromLang = 'jp'
    toLang = 'zh'
    salt = random.randint(32768, 65536)
    sign = appid + q + str(salt) + secretKey
    sign = hashlib.md5(sign.encode()).hexdigest()
    myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(
    salt) + '&sign=' + sign

    httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
    httpClient.request('GET', myurl)

    response = httpClient.getresponse()
    result_all = response.read().decode("utf-8")
    result = json.loads(result_all)

    return result['trans_result'][0]['dst']

由于百度翻译API有调用频率限制,所以work.py中不得不sleep。不过百度翻译处理东亚语言确实比Google翻译更好一些,不知道DeepL效果怎样(DeepL python3 API好像不支持翻译日文中文?)

最后,有一张图我不知该不该发:

开玩笑,大家当然要注意身体啦~


透露出一股死宅的气息(本站游走在宕机边缘)