Files
mtgodot-poc/docs/ZH-LOCALE.md
T
shenleiandClaude Opus 5.5 a1ae69aa7a zh locale: pack locale_zh and add reviewed Chinese names
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>
2026-09-28 18:45:58 +09:00

97 lines
6.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 40250 简体中文适配
## 语言包(2026-09-28 起为正式 pack)
```sh
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 启动:
```sh
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);
原英文测试中的名称断言及依赖英文布局的仓库点击断言不再适用,完整中文流程待专门验收。
## 后续验收
1. 物品/怪物译名和界面回退键已在客户端补齐(overlay);是否同步写入服务端
`gb2312name` 需另行核对后决定。`itemdesc`、`skilldesc` 仍需按 40250 键和语义逐项合并。
2. (已完成)46 个英文回退键已补齐。
3. 在游戏窗口验证中文字符、字体、输入法、换行和 UI 宽度,再联机检查登录、背包、
商店、任务、公告及聊天。
4. 中文 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 名称由此一致。