
经验分析与仓库总结
一、这次汉化的完整历程(经验分析)
阶段 1:启用官方中文 ------ 发现"官方简体"是个误区
游戏文件里其实自带全部语言的本地化 (中文字符串、CJK 字体都在基础 BSA 里),启用只需两步:ini 里 sLanguage=CHINESE + 把 BSA 里的 fontconfig_cn.txt 提取为散装文件。不做第二步就是全 UI 方框------这是"官方中文变方框"问题的真正根因。
最有价值的取证发现:强制 Steam 按简体重校验(改 manifest 语言 + 删缓存 manifest + 置 StateFlags=2),结果重新拉取的清单与英文版完全一致、零下载。证明国际版的"chinese"本地化就是繁体,Steam 的简体选项没有独立内容。
阶段 2:简体的两条死胡同
- 自转字符串 :OpenCC 转换本身可行,但踩了重大格式坑------
.ILSTRINGS/.DLSTRINGS用 4 字节长度前缀而非 NUL 结尾,第一次转换后引擎启动直接黑屏死循环(读到垃圾长度值) - 手搓字体库 :逆向确认原版
fonts_cn.swf用的是 Scaleform 私有标签格式(code 75/73 配对,字形是私有压缩编码),手工构造的标准 SWF 无论多规范都不会被 GFx 注册------标准格式路线对 Skyrim 判死刑
阶段 3:浏览器自动化拿下最终拼图
游侠网页面的"本地下载"只是页面锚点+广告漏斗,没有直链;3DM MOD 站的"本地"按钮则通过 window.open 打开带 base64 参数的地址------解码即得真实文件直链,断点续传拿下 40MB 汤镬汉化包。集成时还发现它没带 Translate_chinese.txt(主菜单文字来源),补上我转的简体版后全部完成。
六条可复用的经验
- 方框问题先查 fontconfig 散装覆盖,再查字体字形覆盖
- 三种字符串文件是不同格式(STRINGS=NUL 结尾;IL/DL=长度前缀),且条目共享偏移需去重
- 主菜单等 UI 文字来自
Translate_chinese.txt(UTF-16LE),不是 .STRINGS - 散装
Data\文件优先级高于 BSA------覆盖式汉化的基础 - 验证截图必须
SetProcessDPIAware,否则高 DPI 屏截图裁切会造成假象 - 网盘/广告漏斗型下载站,浏览器自动化 + 钩子捕获
window.open参数是拿直链的通用手法
二、仓库介绍
线上地址 :https://gitee.com/feudal_1/skyrim-chn-tools(已推送,`main` 分支)
skyrim-chn-tools/
├── redist/ ← 现成安装包:Data 整体复制到游戏根目录即简体(51MB,与游戏生效文件 MD5 全量一致)
│ ├── INSTALL.md 新机器安装说明 + 切回繁体步骤
│ ├── restore_traditional/ 官方繁体字体配置(回退用)
├── tools/ ← 三个自研工具(参数化,可复用)
│ ├── bsa_extract_strings.py BSA v105 解析器(逐字节逆向的 SE 实际布局)
│ ├── strings_t2s.py 字符串繁→简(三种格式差异、共享偏移、哨兵全部处理)
│ └── ttf_to_swf_fontlib.py TTF→标准 SWF 字体库(⚠ 游戏不认标准格式,仅作参考实现保留)
├── docs/findings.md ← 逆向详录:Steam depot 结论、字符串二进制布局、
│ BSA 布局、GFx 私有标签结构、启动验证技巧
└── README.md ← 项目总览
给未来自己的三个入口:
- 换电脑玩 → 只看
redist/INSTALL.md,两步完成 - 出新游戏版本要重做汉化 →
tools/三个脚本按 README 工作流跑一遍 - 想深入研究 →
docs/findings.md记录了所有踩坑点和未确认字段
仓库里现在唯一的"半成品"是 ttf_to_swf_fontlib.py------它输出的 SWF 完全符合标准规范但 Scaleform 不认,注释里已写明警告,留给将来若拿到 Scaleform 官方字体工具时对照用。