前期分析见:https://www.chinaavg.com/read.php?tid=12966
& i1 l/ [7 `! X: ]* v: P6 Q w
解包后得到的messages.txt 即为字幕文件
/ M8 k# }- y$ H7 X7 R: d& ~9 h
5 \2 T. K& P9 s+ a7 }. X9 \看起来似乎比较乱,实际上字幕存放地非常工整
6 {5 z2 F1 w: F( Z7 K& l: @' @; u3 [7 S+ r( y4 U" p
把文件中每一个0x0A替换为0x0D0x0A即回车符后,即可得到整齐的文本' R6 G" F i* N0 N2 A
例:- # ----------------------------
- # Common dialog texts
- # ----------------------------
- # Start Again dialog
- SAD_MainText Do you want to continue your saved game?
- SAD_Title Adventure
- SAD_Continue Continue Game
- SAD_StartNew Start New
- SAD_Cancel Cancel
- # Select Player dialog
- SPD_SelectPlayer Select Player
- SPD_Select Select
- SPD_Cancel Cancel
- SPD_Delete Delete
- SPD_CreateNew Create Player
- SPD_DeletePlayer Delete Player
- SPD_BtnConfirmDelete Delete
- SPD_BtnCancelDelete Cancel
- SPD_ConfirmDelete Are you sure you want to delete this player?
- # Create Player Dialog
- CPD_EnterYourName Please enter your name
- CPD_CreatePlayer Create Player
- CPD_OK OK
- CPD_Cancel Cancel
复制代码 字幕中,#后面的是注释,每一句前面是变量名,这些都是不用翻译的。因此在导出时,每一句导出两遍,句间留空行,如:- 360 19 MMPlay Start Game
- MMPlay 开始游戏
- 380 13 MMExit Exit
- MMExit Exit
- 394 18 MMOptions Options
- MMOptions 选项
- 413 28 MMChangePlayer Change Player
- MMChangePlayer Change Player
- 442 34 MMCurrentPlayer Current Detective
- MMCurrentPlayer Current Detective
- 0 0
复制代码 每一句前面的数字是该句字幕在原文件中的偏移量和长度。% ?$ w" `0 U$ x9 d9 a2 c, o5 ?
翻译的时候就如上直接在第二行上修改即可,方便上下对应,注意翻译后字幕不能大于原字幕长度。6 z9 ]- R7 p, T1 p6 L, ]
翻译时写入的是utf-8字符。检验方式:写入中文后保存,用16进制编辑器打开,如前三个字节为16进制的 EF BB BF 即说明是utf-87 }0 a: _% D k! L8 ^6 X+ V
5 M) s/ P. B; v; C: T————————————————————————————————————————————& _) N. B. m- L# D7 m$ M+ {) \, n
工具使用方法:
# C0 A6 Q% M# }( W$ w& Q2 ^1,字幕导出工具
% ^6 y( h/ C7 B6 {, K2 K8 q$ |" R命令行下:scan <InputFileName> <OutputFileName> <y or n>
^" n2 g; ]2 r3 I( F. ]8 f第三个变量表示是否按翻译模式导出,输入n则如上面第一段,输出工整的原始字幕,做参考。9 M: O* l* B: `; {; B# n, O# z
输入y则如上面第二段,做翻译用。( E6 ?( u$ |- I% }
例:scan Messages.txt input.txt y
( P9 M9 b6 R+ R& u2 N P, }+ O
0 _0 Z8 a4 M7 r, O# k2,字幕回写工具; m$ y1 ?2 _' ~# p6 V0 C- v0 H" d
命令行下:trans <InputFileName> <OutputFileName> <OriginalFileName>
9 z* ?+ A! \0 ]2 b7 t; }, P/ n1 Z- d第三个变量是原始文件,默认就是Messages.txt |