Hime nochi Honey 汉化
https://www.bilibili.com/read/cv20898536/
翻译teakaDanshi的时候偶然想起来自己之前买了asa project的Hime nochi Honey, 但是没玩通,因为用lunatranslator会不时崩游戏,中途弃了。今天拿krkrExtracter测试了一下,解包出来的文件完全可以用,是非加密的 shift-jis编码脚本。引擎是 krkr 2.
中文保存的时候需要转换编码,不过可以顺利被读取。封包的时候需要用上面的xp3viewer.
这样一来思路就是:
解包获得文本文件 -> 转换编码为 utf-16 le -> 提取游戏文本 -> 机翻 -> 回填 -> 制作封包 -> 测试发布。
工具
引擎是 krkr 2, 使用 xp3viewer
进行解包和打包;创建 patch
文件夹,拖动即可打包为 patch.xp3
正则分析
danshi之后,找到了黑屏的原因,暂时先考虑正则提取,并且翻译一个文件试试看;
json regex
[信太郎]「おい、お兄さん達」
[男]「あぁ?なんだてめぇ…[setQuake t=600 se="殴る:ドゴォ" wq=false]ガァァ!!?」
[??? n=理緒]「うわぁぁあああああ」
[??? n=理緒][big2]「うわぁぁあああああー!!!」
[??? n=理緒]「[f t=とう]藤[f t=ま]間[f t=り]理[f t=お]緒…よろしくな。呼ぶときは苗字じゃなく名前で頼む」
[鶴未]「…(雅、…彼が起こしたという鳳きよらへの暴行事件…[z]
@charaOnL st="鶴未A2制服-怒10"
あれは恐らくデマだ)」
[鶴未]「貴様…それでいいのか?[z]
@charaOnCY st="鶴未A2制服-怒13"
負け犬のままこの学園を去る…確かに簡単だが、[z]
@charaOnCY st="鶴未A2制服-怒26"
同時に『逃げ』だ」
;005.ks
[鶴未]「最後は私が全て丸く収めた。[z]
@charaOnCY st="鶴未A2制服-喜05"
聞いただろ、拍手喝采だった。[z]
@charaOnCY st="鶴未A2制服-喜01"
ある種のショウ…見世物だったと思え」
Note
说话,[name] 「text」; 会有效果提示,[控制语句]
暂时性的名字,会有n=name的语句;字体大小用[big]控制;
特别的,若有单字控制,会包含在「」内部,用[]提示,里面的内容包括[]不能翻译;
一句话不一定只在一行内完成,也可能是分行,为了中途变换立绘。标志是[z], 出现在第一行结尾, 以及所有的非结束对话文本的结尾。
[※]振り向き様に一発。完全に油断していたのか、男達はきょとんとアホ面を並べている。
[※]その隙をご丁寧に待ってやるような義理もない。
[※]鋼の意志を持つ男…それがこの俺、[f t=まき]巻[f t=しん]信[f t=た]太[f t=ろう]郎だ…くくく。
[※][B2]……な、[big2]殴りてぇ…[rf]!
旁白,[※]text, 和对话一样会出现控制符。
^[※](?P
旁白,不匹配标识符。但是会出现[big2]等控制符,规律是,每行的控制符都是第一个[]之后出现的,找一个忽略这些控制符的regex
02_skip=^[@;]
03_skip=^\[[A-za-z].*$
10_search=^\[※\](?P<msg>.+?)$
11_search=^\[(?P<name>.+?)\].*(?P<msg>「.+」\s*)$
12_search=^\[(?P<name>.+?)\].*(?P<unfinish>「.+?)\[z\]$
13_search=^(?P<unfinish>.+?)\[z\]$
25_search=^(.+?)(?<=」|。)\s*$
structure=paragraph
02, 跳过注释,所有@开头的语句
03, 跳过控制语句
10, 匹配旁白,单行,不可避免地会有[]
控制符;
11, 匹配单行文本, 一行内有「」
;\s*
针对结尾可能存在的空格,希望004.ks的是个例吧
12,匹配多行文本,并且不分段
13, 匹配单行对话文本,不分段,结尾为[z]
25,匹配对话文本结尾;
默认的分隔符是 \r\n
二次提取
可能用脚本会更加快捷?可能最关键的是,😎不会被翻译为别的什么东西。这样一来就不是使用SE二次提取,而是用脚本自己替换;
引擎:json 分隔符:😎 encode: utf-8 无签名
https://github.com/satan53x/SExtractor/issues/59 , 匹配[]以外的内容到行尾,所有[
之前的部分全部作为unfinish分组。
编码策略
解包文件是cp932的编码,先用python转换为utf-16 le, 使用sextracter和sakurallm翻译后再用python批量写入bom;
脚本预处理
先转换为utf-16 le, 方便后续使用sextractor;
一个思路是二次翻译,先用SE提取文本;再用一次SE将[控制语句]的字符删除; https://github.com/satan53x/SExtractor/issues/59
二次提取json文件需要修改json文件的段落分隔符,比如修改为🤣
https://github.com/satan53x/SExtractor/issues/45
关于各种函数的说明(没有说明):https://github.com/satan53x/SExtractor/issues/45
note
70.ks 没东西,不需要补丁; end-all.ks, first.ks 同理; select.ks, 和选择支有关,暂时不翻译;
未提取出人名, 似乎是因为结尾是空格而不是」
;
004.ks, 翻译后 1344行混淆;gpt重复翻译某个脚本之前需要确认input文件夹内是否更新文本格式;
原文档的config.ks里有标题的定义语句,修改为“bdd自制汉化”,但是标题界面默认shift-jis格式,于是汉
一字无法显示。
Success
目前已经在2dfan发布汉化补丁! 评论数:0!~~超有成就感的hhh~~
Bug
由于galtransl提供了人名替换表,我尝试替换了 きよら
为中文翻译 清羽
但是问题在于krkr里 控制字符和name挂钩,翻译后会无法识别标志,除非将标志内容一同翻译。这样一来后期最快捷的方式就是直接用正则替换翻译过的人名。
todo
选择支 ~~不想管了~~
应该是在 select.ks
里面控制,实际游玩测试的时候再说吧。