其实前天就已经做好了工具,只是不知道要不要放出来。看到现在网上放流的机翻已经这么多,即使放出来也不会引起太大动乱,所以就果断把这个项目写进博客,全当为大家多提供些许玩具吧。
首先感谢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 条评论
leohearts 博主
DeepL效果确实好, 论文洗稿神器(大雾)下次试试这个?
redjgray 博主
蛇蛇,谢了