找回密码
 初始化身份识别芯片
搜索
查看: 128|回复: 2

0.98.5a汉化安超指南

[复制链接]
奖 58 星币 回复本帖可获得 2 星币奖励! 每人限 1 次

战列舰长

发表于 2 小时前 | 显示全部楼层 |阅读模式
0.98.5a汉化安超指南
从 0.98a-RC8 中文汉化到 0.98.5a-RC3 的完整流程 · 公开版 · 第 1 版 · 2026-11-13

零、发布说明与适用范围

这份指南是个人基于DSH整理的移植流程。经远星汉化组成员同意,可以公开发布,最重要的三点放在最前面:
·代表个人发布,不代表汉化组的工作。
·原汉化归属为远星汉化组。
· 文中聊天截图已获对方同意附上。
image.png

图 1:与汉化组成员AnyIDElse 的沟通(已获同意附上)
image.png
图 2:与管理员灰色渡鸦的沟通

适用范围:将0.98a-RC8中文汉化未改变的内容照搬至0.98.5a-RC3;0.98.5a-RC3新增的内容按优先级与分类补译。本地需要同时装两份对应版本游戏(需做好备份)。

一、版本对照与所需文件

先确认所需下载的两个游戏版本。注意,中文汉化版选择传统版本,优化测试版在结构上存在较多区别。

1.1 中文汉化版:0.98a-RC8 · 黑体

image.png

图 3:论坛里0.98a-RC8 中文汉化版的下载项(黑体 / 综艺体 / 宋体)
汉化版提供三个字体版本:黑体、综艺体、宋体。三者正文文本一致,只是字库不同;本指南以「黑体」版本为参照。用综艺体或宋体,移植步骤理论上完全相同,但并未进行实际验证。


1.2 英文原版:0.98.5a-RC3
image.png

图 4:0.985 的英文完整游戏下载项

英文版用论坛最左侧的下载链接,右侧下载的内容我没弄明白是什么情况。

1.3 文件与环境清单
· 0.98a-RC8 中文汉化版(黑体):安装后保证能正常运行,用于取旧译文。
· 0.98.5a-RC3 英文版:安装后保证能正常运行,用于取原文与待改的 jar。
· 0.98 英文原版 starfarer_obf.jar:从 GitHub 下载后存成 源\starfarer_obf.en.jar(这里是dsh工作区文件夹地址,之后会进行详细解释),地址:https://raw.githubusercontent.com/TruthOriginem/Starsector-Localization-CN/master/game%20data/starfarer_obf.jar
· 汉化仓库源码 zip(134,218,468字节):从 GitHub 下载后解压到 源\Starsector-Localization-CN-master,game data/data 里是译文与数据层素材,地址:https://github.com/TruthOriginem/Starsector-Localization-CN/archive/refs/heads/master.zip
· JDK 21:需要 javac、jar、javap。
· Python 3.10 以上:工程里的脚本全部基于 Python。
· 工程目录:脚本、产出、源、备份四块,见第三节。
· 备份空间:不小于游戏目录的 2 倍。
· 文本编辑器与解压工具各一。

二、总体思路

先将是否存在已翻译内容作为第一判据,把文本分成两类:
· 类一:0.98已经译过、0.985 原文完全一致的部分。直接照搬,内容较多但难度不高。
· 类二:0.985纯新增、98 里没有的内容。没有旧译可抄,只能自行翻译。

再按文本存储地点分成三种载体,分别使用不同工具处理:
· data 目录的表格:csv、json、少量Java 数据,按 id 对齐,整格搬或按单元格替换。
· jar 里的字符串常量:改编译后的类文件常量池,只换「被String 常量引用」的那条 Utf8。
· 代码里拼出来的句子:变量、词形、人名地名混在一起,基本只能人工看(其实也是交给dsh处理)。
搬旧译的匹配判据只有一条:同一位置的原文,98 英文快照与 985 完全一致,且98 中文版这里是中文,才直接更换。任何一条不满足就不动,留给类二。

三、目录与约定
· 工程根:E:\SQ\小肥鲸管家\模组工程\汉化工程(各位请自行设置工作区,这里以帖主环境为例)。
· 产出\data:最终覆盖层,698 个文件。
· 产出\starfarer_obf.jar:6,135,400字节,3,916 处替换,涉及 580 个类。
· 产出\starfarer.api.jar:7,746,024字节,5,831 处替换,涉及 1,039 个类。
· 脚本:按编号的 Python 工具,从对照表、打补丁到校验都在里面。
· 源:0.98英文快照等参考资料;注意这份快照比正式发行版旧,不能拿它算「985 新增」。
· 源\starfarer_obf.en.jar:0.98英文原版 jar,和中文版逐类对照用。
· 源\Starsector-Localization-CN-master:汉化仓库源码,译文与数据层素材从这里取。
· 备份:每一步改动前的存档。

约定:所有改动只写 产出,不直接改游戏安装目录;要试玩时整包复制到测试目录(别在dsh工作区运行游戏,存在沙盒阻挡)。每次改动前先备份,脚本重跑前先确认输入版本。

四、数据层(data)

4.1 覆盖层怎么来
以 0.98a-RC8 汉化版(黑体)的 data 为底,逐文件与0.98.5a-RC3 的 data 对照:文件名、表头、行数、id 集合。只把「98 有译文且 985 需要」的文件放进覆盖层,其余不碰。

03-数据层-CSV.py · 04-数据层-JSON.py · 05-数据层-Java.py

4.2 CSV 对齐
按id 列对齐,不按行号:985 会插入新行,行号会漂。对齐后逐列判断——整格搬(98 与 985 该列都非空且原文一致)或按单元格替换;id、键名、枚举值永远不译。
· rules.csv 约 1.2 万行,是最大的一块。
· descriptions、船体、武器、技能等表按同样规则处理。
· 每批改完跑 03b-校验CSV.py,核对列数、引号数、行数。

4.3 rules.csv 的三列
rules.csv 的文本不只在 text 列:options 列是对话选项,script列里还有 AddText、SetTooltip 这类调用里的句子。1a 阶段只搬了 script 列,options 列漏了 4,999 行,到 1f 才补齐(4,955行整格 + 3 处部分 + 40 行手工)。
· 搬任何一列之前,先把三列都过一遍。
· 选项 id序列要和 98 对得上,英文标签也要一致,才能整格搬。

4.4 编码与格式
· rules.csv 覆盖层必须是UTF-8 BOM + CRLF。
· 改完先验 CRLF 与引号数,再跑校验脚本。
· JSON 类文件单独用 04b-校验JSON.py。

五、jar 层

5.1 只动「被引用的字符串」
类文件的常量池里,CONSTANT_String(tag 8)指向一条 Utf8;同一条Utf8 也可能被类名、字段名、方法名或描述符共用。只替换被 String 常量引用的 Utf8,并且克隆一条新 Utf8 再改指向,原常量不动。这样不会碰到 JVM 元数据。

5.2 按位置搬(626 个类)

同一位置取三份 ldc 序列:98 英文、98 中文、985。逐位比对,满足「EN98[k] == 985[k] 且 ZH98[k] 是中文」才换。EN98 用的就是第一节里下载的 源\starfarer_obf.en.jar。

01-建对照表.py · 01b-建对照表-ldc.py · 08-按位置应用.py

5.3 兜底(873 个类)
位置对不上的类走兜底:只换被 String 常量引用的串,排除被类名 / 字段名 / 方法名/ 描述符共享的 Utf8。兜底只翻「看着像给人看的句子」,不碰短小的、像字段名的串。

79-api兜底v3.py · 61-第9步-api兜底v2.py

5.4 手工补丁
· 23-批次4-补丁.py:批次 4 的 3 条。
· 34-第7步-打补丁.py:1 个类、83 处。
· 技能效果行在 api jar 的skills/*.class 里,用 159-技能修复.py(13 类 25 条)与 161-技能修复2.py(5 类 9 条)按类限定替换。
· 125-回退SDR.py:把被误翻的ACA/ARC/VSDC insurgent activity 三条退回英文。

5.5 打包与校验
改完的类写回 jar,用 jar --create 或 Python 的zipfile 重写;重写后必须整包校验。
06b-校验jar.py:结构校验(常量池可解析、类数一致)
24-
校验-非字符串常量.py:严格校验,约 12 分钟,期间不要让别的进程读 jar
jar 校验最容易踩的两个坑:zipfile 没 close 就 replace(Windows会报 WinError 5),以及校验时游戏或编辑器还占着 jar。

六、类二(985 新增)

6.1 分档

按出现频率分三档,只做甲、乙:
· 甲档(高频):开局选项、通用对话回复、短提示、api 新增文案。约 5 万字符。
· 乙档(中频):市场风味、酒吧事件、纯 script 提示、星系档案等,甲乙合计约 9 万字符。
· 丙档(长剧情):约 357 行、近 95 万字符,暂不排期。

清单与分批表在 产出\类二-清单.md,里面按 2甲-1~4、2乙-1~6 列了行数与字符数。

6.2 每批的固定流程
· 素材:93-类二细化.py 按 id 前缀与 text 长度分桶,导出待译清单。
· 译文:按批写进脚本,不要把译文写进临时文件再手工粘。
· 打补丁:整格替换或按 key 替换,写完立刻抽查。
· 校验:跑对应校验脚本,再抽 5 到 10 条对照原文。
· 记录:行数、字符数、改动文件写回清单。

6.3 翻译规范
· 人名、地名、船名保留拉丁原文;变量、占位符、%s、$heOrShe 这类不译。
· OR 之类的分隔符保留,别换成中文标点。
· 术语统一,先查已有译法再动笔;同一词在不同上下文可以有不同译法,但同一类界面要一致。
· 语气按角色:叙事文本正常译,娜迦台词按她的口吻。
· id、键名、枚举值、类名一律不译。

6.4 审核
· 54-校验api.py:3,688 条,核对元数据、非字符串常量。
· 翻短小的、像字段名的串之前,先跑 37-审计键用法.py 看它后面跟的是addPara 还是 JSONObject.has。
· 抽 5% 回读,确认没有把整句拆碎或误伤变量。

七、组装与测试
· 把 产出\data、产出\starfarer_obf.jar、产出\starfarer.api.jar复制到测试版目录,配 11 套字体与 cjkMode 配置,整包约 474 MB。
· 先启动器:能起来、模组列表正常。
· 再主菜单:语言、按钮、设置界面。
· 新开档:开局选项、对话、UI、提示。
· 读档:老档能读,界面无异常。
· 记录版本串与两个 jar 的 MD5,写回交接笔记。

八、已知的坑
· JVM 元数据(InnerClasses/ NestHost)被当成文本翻了:类文件损坏,启动直接崩。
· Object 被当 UI 词翻成「目标」:启动器NoSuchMethodError。
· 兜底只翻「含空格的句子」:Missions、Settings这类单词标签漏掉。
· TSV 双重转义、Windows 文件句柄没关:替换失败或损坏。
· 看着像标签、其实是数据键:sellprice mult 是 commodities.csv 的列名,翻了就读不到数据。
· rules.csv 的options 列漏搬:对话选项整片英文。
· 技能效果描述在 api jar 的skills/*.class:只改 skill_data.csv 不够。
· SDR 三条标签翻成中文后会被 SDR_CMD 当键用:必须退回英文。
· api 兜底曾把性格 id、类名附近的串翻掉:改前先跑 37 审计,改后跑 54 校验。
· 98 英文快照比正式发行版旧:按它逐行比 id 会把「985 有、快照没有」误算成新增,判断剩余量要看覆盖层里还残留的纯英文行。

九、回滚与备份
· 改动前备份对应文件;批量替换脚本一律先写临时文件再原子替换。
· jar 改坏:从 备份 恢复对应 jar,重跑该批补丁。
· data 改坏:覆盖层可整层重建,按文件恢复即可。
· 测试版目录:每次组装前先清空,避免旧文件残留。

十、给 DSH 会话的执行约定

如果这份文件交给 DSH 会话执行移植,按下面的约定来:
· 输入:本文件、工程根路径、0.98a-RC8 汉化版路径、0.98.5a-RC3 英文版路径、测试版路径。
· 本文件已经包含步骤、批次说明与验收标准,不需要额外的工程笔记;开工前先读第二、三节和「十一、批次编号说明」,用第一节确认两份游戏的版本。
· 文中的E:\SQ\小肥鲸管家\... 只是帖主的环境示例,按自己的工作区与安装位置替换,不要照抄。
· 所有写入只落在 产出;要改游戏目录时先复制到测试版,不原地改。
· 每批改动前后各跑一次对应校验,把结果写进报告。
· 遇到「不确定该不该翻」的串,停下来列清单问人,不要自行决定。
· 报告格式:批次号、改了哪些文件、行数或条数、校验结果、遗留问题。

十一、批次编号说明

这份文件里会出现 8a、1a、2甲-3 这样的编号,它们是实际工作时的批次代号,不是必须按顺序执行的步骤。这里一次讲清,别人接手时可以直接对照。

11.1 类一的批次
· 8a:物品、机制与名字。985 新增的物品与机制条目,命名和说法可以大量参考 98。
· 8b:行星与势力描述(descriptions.csv),33 条、约 3.1 万字符。同一条描述可能横跨 text1、text3、text4 几列,动手前先看列布局。
· 1a:rules.csv的 script 列,571 行。
· 1b:rules.csv里 98 与 985 原文有差异、但能参考旧译的行:75 行整格搬 + 56 处替换 + 1句台词。
· 1c:starfarer_obf.jar里可搬的串,87 处。
· 1d:starfarer.api.jar里可搬的串,321 处。
· 1e:Volturn相关的 4 条。
· 第 9 步:api jar 的搬运与兜底,两遍共 6,113 处、约 8.1 万汉字。
· 1f:rules.csv的 options 列补齐(4,955 行整格 + 3 处部分 + 40 行手工)。它属于类一的漏项,不属类二。
8a、8b 不叫 1x 的原因:它们原本是「第 8 步(985新增内容)」的两批,编号早于后来按「有无旧译」重分的类一/类二;重分后发现这两批能大量参考 98 的写法,就归进类一并沿用了原名,所以编号会跳。

11.2 类二的批次
· 2甲-1:开局与模式选项,10 行、406 字符。
· 2甲-2:通用对话回复,21 行、2,938 字符。
· 2甲-3:短提示,165 行、7,709 字符;实际分两批做,剧情向 88 行、DEV 菜单 77 行。
· 2甲-4:api 新增文案,718 条、39,718字符;先译 269 条完整句子,再处理 124 条标签与标题。
· 2乙-1:市场风味,4 行、2,362 字符。
· 2乙-2:酒吧事件,113 行、25,261 字符,分 a、b、c 三批。
· 2乙-3:纯 script 提示,59 行、9,046字符。
· 2乙-4:七星系档案,7 行、4,400 字符,分 a、b 两批。
· 乙-0 /乙-补:进入乙档之前的选项补齐与补充,合计 261 行选项,按 98 的 id 序列整格搬。

11.3 丙档与不做的部分
· 丙档:中段叙事 275 行、65,012 字符;长剧情82 行、48,060 字符;askoniaCrisis26,113 行、840,604 字符。合计 357 行、约 95 万字符,暂不处理。
· 98 自己没译的:229 行,不处理。
· 地名:1 行,保留原文。

11.4 编号怎么用

编号只用于指代批次,不代表执行顺序。实际推进是:先把类一(8a、8b、1a~1e、第 9 步)做完,再补 1f 的选项,然后做类二的甲档、乙-0/乙-补与乙档;丙档搁置。动手时按批次领活,不要按编号大小排序。

十二、当前进度(2026-11-13)
· 类一:全部完成(8a、8b、1a~1e、第 9 步 api jar),实机验证正常。
· 类二:甲档、1f 选项补齐、乙-0/乙-补、乙档全部完成。
· rules.csv 仍含英文的只剩 587 行:丙档 357、98 自己没译 229、地名 1。
· 丙档(约95 万字符)已定近期不处理;下一步是实机测试与收尾。

十三、致谢与署名

本指南由个人整理,不代表远星汉化组的工作。感谢远星汉化组成员 AnyIDElse 同意分享流程并允许附上聊天截图,感谢管理员灰色渡鸦的意见,也感谢汉化组多年来维护的简体中文汉化。

如果你按这份指南做出了自己的版本,请遵守相关协议与论坛规定,不发布不分享相关修改文件,仅可用于自用。






势力巨擘

左舷失压!

发表于 半小时前 | 显示全部楼层

回帖奖励 +2 星币

现在安超要支付双倍工资
不知道的还以为是到了峰值会死人的安全超弛协议(  详情 回复 发表于 25 分钟前
唯有死亡不可避免,唯有生命不可辜负

战列舰长

 楼主| 发表于 25 分钟前 | 显示全部楼层
爱丽丝ちゃん 发表于 2026-11-13 13:12
现在安超要支付双倍工资

不知道的还以为是到了峰值会死人的安全超弛协议(

本版积分规则

Archiver|手机版|小黑屋|远行星号中文论坛

GMT+8, 2026-11-13 13:47

Powered by Discuz! X3.5

© 2001-2077 Tencent Cloud | Durian Software Studio | IP地址位置数据由纯真CZ88提供支持

快速回复 返回顶部 返回列表