其实前天就已经做好了工具,只是不知道要不要放出来。看到现在网上放流的机翻已经这么多,即使放出来也不会引起太大动乱,所以就果断把这个项目写进博客,全当为大家多提供些许玩具吧。
首先感谢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好像不支持翻译日文中文?)
最后,有一张图我不知该不该发:

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


                    
                    
                    
                    
                    
                    

评论~ 2 条评论
DeepL效果确实好, 论文洗稿神器(大雾)下次试试这个?
蛇蛇,谢了