eterpack_pack writes locale packs in the original format (COMPRESS entries, LZO+TEA index), and build_zh_locale.py packs locale/zh into locale_zh.eix/.epk registered in pack/Index instead of leaving loose files. The reviewed translations for names and keys still in English are kept apart from the server snapshot in data/zh_40250/*_zh_overlay.txt (1,607 items, 231 mobs/NPCs, 45 locale_game keys) and override it at build time. Only YMIR, the coordinate-named warp markers and the empty TOOLTIP_UNSEAL_LEFT_TIME remain English. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6.4 KiB
40250 简体中文适配
语言包(2026-09-28 起为正式 pack)
cmake --build build-native --target locale_proto_patch eterpack_pack
python3 script/build_zh_locale.py
生成器复制 40250 Eternexus/locale_en/locale/en 的文件结构到暂存目录
build/zh-locale/locale-src/zh,将中文内容按键合入 locale_game.txt、locale_interface.txt。
旧龙驹语言包缺失或占位符与 40250 不一致的键,改用 data/zh_40250/locale_game_zh_overlay.txt
中经审核的译文(同样校验占位符);报告在
build/zh-locale/zh-locale-report.json。职业与帝国说明采用龙驹中文文本。
暂存目录随后由 eterpack_pack(extension/tests/eterpack_pack.cpp,直接调用移植的 40250
CEterPack::Put / EncryptIndexFile)打成 locale_zh.eix/.epk,格式与原版 locale_en 等
相同:231 个文件全部为 COMPRESS(LZO),索引经 LZO + TEA 加密。工具写完后以只读方式
重新打开 pack,逐个经 CEterPack::Get 读回并与源文件比对。用同一工具重打原版
locale_en 源文件,文件名、类型、CRC 和解压内容与原版 pack 逐项一致。
输出客户端 build/zh-locale/Client:
pack/:原版 pack 逐个符号链接,加上locale_zh.eix/.epk,以及在locale/en/之前 注册locale/zh/→locale_zh的Index(CRLF,与原版一致)。locale.cfg与locale_zh.cfg:10002 936 zh。- 不留散装的
locale/zh:客户端默认先查散装文件,留着会绕过 pack。
仓库 Client/ 是 audit/assets/40250-client.json 校验的原版资源,不做修改。
macOS 启动:
build-native/native_render/mt_native_render \
--live-client build/zh-locale/Client --login-screen --width 1024 --height 768
Android:./push-android-client.sh --locale zh(默认推送 build/zh-locale/Client,符号链接按
目标文件复制,并以 locale_zh.cfg 写入设备上的 locale.cfg)。
物品与怪物原型从 40250 原版解压,按线上 40250 服务端 gb2312name 的 VNUM 快照
只替换 szLocaleName 字段后按原格式
重新压缩加密;生成器验证记录数、结构大小、除名称外所有字节不变,以及写出后的
解压往返一致。itemdesc.txt、skilldesc.txt、skilltable.txt、地图坐标、UI 脚本和图像
仍为 40250 原版。龙驹版本的原型不能整份覆盖。
已核对的差异
- 40250
locale_game.txt有 817 个键;771 个来自龙驹,45 个来自审核译文, 仅TOOLTIP_UNSEAL_LEFT_TIME保留英文原文(原文为空,40250 脚本未使用)。 - 40250
locale_interface.txt的 326 个键均找到中文对应项。 - 40250 客户端物品原型 5,743 条、怪物/NPC 原型 1,334 条都已按 VNUM 写入
data/zh_40250/中的服务端名称快照;快照里分别有 1,608 和 346 个名称不含汉字。 2026-09-28 审核确认的译文放在item_names_zh_overlay.txt(1,607 条)和mob_names_zh_overlay.txt(231 条),构建时覆盖快照同 VNUM 的名称;快照本身保持服务端原样。 剩余英文仅为 vnum 2 占位物品YMIR和 115 个名称为地图坐标的传送点标记(游戏内不显示)。 客户端显示译名,服务端数据库仍为英文,服务端发出的含名称消息会显示英文。 - 40250 服务端(
192.168.21.203,2026-09-27 只读 SSH 核对)当前数据库配置为LOCALE=newcibn、DB_NAME_COLUMN=gb2312name,有newcibn语言目录。 因此客户端采用 CP936;服务端广播字典已在 2026-09-28 完成首轮补齐,名称与任务文本仍需核对。 - 文本阶段的
port_login_flow_test使用生成目录通过完整离线登录、进场、移动、战斗、 商店及仓库流程;macOS 原生窗口的登录服务器选择文字已目视确认显示中文。 名称原型加入后,测试运行确认原生客户端已加载中文的物品 19(武士刀+9); 原英文测试中的名称断言及依赖英文布局的仓库点击断言不再适用,完整中文流程待专门验收。
后续验收
- 物品/怪物译名和界面回退键已在客户端补齐(overlay);是否同步写入服务端
gb2312name需另行核对后决定。itemdesc、skilldesc仍需按 40250 键和语义逐项合并。 - (已完成)46 个英文回退键已补齐。
- 在游戏窗口验证中文字符、字体、输入法、换行和 UI 宽度,再联机检查登录、背包、 商店、任务、公告及聊天。
- 中文 pack 已注册到
pack/Index(见上);macOS 登录界面已确认从 pack 读取中文, Android 真机/模拟器待测。
服务端适配进度(2026-09-28)
服务端 newcibn/locale_string.txt 原有 733 个中文键,和 40250 英文参考字典的
762 个键比对后缺少 36 个。script/build_zh_server_locale.py 保留原字典的 733 个键
及其原始 GBK 译文,补齐 36 个 40250 键,并修复两条丢失 %d 参数的译文;旧字典
特有的 7 个键继续保留。生成文件有 769 个键,全部译文按 GBK 编码,格式参数与
韩文调用键逐条一致。生成产物在 build/zh-locale/server/newcibn/locale_string.txt;
python3 script/test_build_zh_server_locale.py 验证键和旧译文保持不变。
已将该文件部署到 /usr/metin2/server/share/locale/newcibn/locale_string.txt,远端
SHA-256 为 7f16a8c7b9d08774ec90c4a86b80b17364b072c0af9e2b76a0ea9df027adaef8。
原文件保存在同目录的 locale_string.txt.pre-zh-20260928。在确认没有外部玩家连接后,
仅重启了第 1 频道的三个 game 进程和 game99,认证及数据库进程未重启;四个
游戏进程和对应监听端口均已恢复。服务端日志中还存在此前就有的
new_quest_lv52 缺少 is_destination_village 函数错误,本轮没有修改任务脚本。
只读导出的线上数据库中,item_proto 有 5,743 条、mob_proto 有 1,334 条,
gb2312name 全部能按 GBK 解码,但分别有 1,608 和 346 个名称不含汉字。
script/audit_zh_server_names.py 将线上 VNUM 与旧中文名称表比对,发现物品 1 处、
怪物/NPC 20 处同 VNUM 不同名(例如 VNUM 101 在线上是 Wild Dog,旧表是幼狼)。
旧表并非完整的 40250 名称表,因此本轮没有批量修改数据库。客户端已改用本次
只读导出的服务端名称快照,见 data/zh_40250/README.md,两侧 VNUM 名称由此一致。