先放项目地址:
https://github.com/HIllya51/LunaTranslator基本上所有galgame都可以,只要是能hook出文本的都能用这个方法
原理:luna翻译器会记录所有的hook和翻译记录,将记录导出后用支持gpt接口的机翻软件翻译,最后再导入luna翻译器(预翻译功能)
感觉这个方法是很有必要的,只要体验过gpt实时翻译的玩家都知道翻译速度有多慢
而且如果是免费账户还会有每分钟调用3次api的限制。
这是个门槛低但是复杂度高的方法。有技术的的可以考虑直接解包出游戏文本用于翻译,或者制作机翻版本以下是详细流程(建议先下载好对应软件再看):
一、用luna翻译器勾出文本,hook的方法网上挺多就不再赘述。然后关闭所有翻译接口,
并把hook设置中的刷新延迟改到10ms以下1ms,接下来用快进(ctrl键或者游戏自带的skip)过一遍游戏全程,翻译器会记录所有的文本。这个文件保存在路径LunaTranslator\translation_record下,不用管这个路径。点击luna翻译器→翻译设置→导出翻译记录为json文件。至此我们得到了json格式的游戏文本。
二、机翻软件我用的翻译君:
https://github.com/sh2288/transer有20r的费用,买断制。
有坛友给出了激活码生成方式可以使用其它平替软件。
但是以下的操作不适用于其它翻译软件。以纯文本格式导入json文件。
行匹配正则:
行间过滤:
上面这个正则表达式的解读很简单(以下是原理可以不用管),json的格式是
复制代码- "原文": {
- "userTrans": "",
- "machineTrans": ""
- },
|
那么只需要匹配以 { 结尾的所有行,并过滤 { " : 这三种特殊符号。
然后选用gpt接口进行翻译。
三、翻译完毕后选择“导出原文译文”,注意不是“导出所有剧本”。后者是用译文替换原文,而我们需要的是原文和译文,原文供检索使用。txt格式的原文和译文的行数是相同的,将编码改为utf-8格式,然后用这个脚本将两者合并为最终的新的json文件:
复制代码- import os, json
- def merge_txt2json(jp, cn, output, encoding='utf-8'):
- with open(jp, 'r', encoding=encoding) as file1, open(cn, 'r', encoding=encoding) as file2, open(output, 'w', encoding='utf-8') as output_file:
- lines1 = file1.readlines()
- lines2 = file2.readlines()
- data = {}
-
- for i in range(len(lines1)):
- line1 = lines1[i].strip()
- line2 = lines2[i].strip()
- data[line1] = {"userTrans": line2}
-
- content = json.dumps(data, ensure_ascii=False, indent=4)
- output_file.write(content)
- def main():
- jp = input("输入原文文件: ")
- cn = input("输入译文文件: ")
- encoding = input("输入文件的编码方式(留空则选择utf-8): ").strip() or 'utf-8'
- output = jp + '_output.json'
- merge_txt2json(jp, cn, output, encoding)
- if __name__ == '__main__':
- main()
|
这个脚本需要python环境,如何安装可以参考这个回答:
https://chat.openai.com/share/d8557244-609a-4479-ae4f-a8a077e05c86如果出现报错请检查:
1.文件名不能包含空格
2.两个txt文档行数必须相同(如果按上面操作就不会有这个问题)
3.txt文档应该为utf-8编码,如果不是那就用文本编辑器修改,或者将代码第4行的utf-8改为对应编码更新:把这个脚本做成了可视化exe程序,不依赖于python环境,上面的代码随便看看就行了
链接:
https://pan.baidu.com/s/1jsT35QrClMCoa8xngWJZgw?pwd=yjmm最后打开luna翻译器→翻译设置→人工翻译,导入最后得到的json文件。
记得打开预翻译的“模糊匹配”,因为不同的特殊码可能会导致勾出的文本有细微差别。
补充:有人选择ainiee机翻。mtool转luna预翻译格式
复制代码- import json
- def luna_json_maker(trans, output):
- with open(trans, 'r', encoding='utf-8') as t, open(output, 'w', encoding='utf-8') as o:
- d1 = json.loads(t.read())
- d3 = dict()
- for key in d1:
- d3[key] = {}
- d3[key]["userTrans"] = d1[key]
- data = json.dumps(d3, ensure_ascii=False, indent=4)
- o.write(data)
- def main():
- d1 = input('TrsData: ')
- out = d1 + '_output.json'
- luna_json_maker(d1, out)
- if __name__ == '__main__':
- main()
|
以上是全部内容,欢迎提问。