Files
mtgodot-poc/docs/ZH-LOCALE.md
T
shenleiandClaude Opus 5.5 cd9e5b259d android: build.sh installs and syncs the game files when a phone is attached
After building the APK, android/build.sh now picks the attached device (ANDROID_SERIAL for several),
installs the APK (reinstalling on a signature mismatch), syncs the zh client into files/Client and, with
--launch, wakes the phone and starts the app. Without a device it only builds.

push-client.sh is now incremental (android/sync_client.py): the device keeps files/Client/.mt_sync
(size, mtime, path of what the last sync wrote), so later syncs send only new and changed files as one
tar streamed through `adb shell -T run-as` (no copy in /data/local/tmp) and delete the ones gone
locally. Only game resources are synced; settings and logs the app writes there are kept. --locale zh
rebuilds build/zh-locale/Client first when its inputs changed. android/adb_env.sh picks adb and falls
back to server port 5038 when :5037 cannot bind.

Verified against a fake adb device: first sync (1.4 GB, byte-identical), no-op resync, changed files,
deletions, locale switch, --full, the install/launch path and the no-device path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 16:36:21 +09:00

6.4 KiB
Raw Blame History

40250 简体中文适配

语言包(2026-09-28 起为正式 pack)

cmake --build build/native --target locale_proto_patch eterpack_pack
python3 scripts/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(tests/port/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/src/host/mt_native_render \
  --live-client build/zh-locale/Client --login-screen --width 1024 --height 768

Android:./android/build.sh 连着手机时自动执行 ./android/push-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 个。scripts/build_zh_server_locale.py 保留原字典的 733 个键 及其原始 GBK 译文,补齐 36 个 40250 键,并修复两条丢失 %d 参数的译文;旧字典 特有的 7 个键继续保留。生成文件有 769 个键,全部译文按 GBK 编码,格式参数与 韩文调用键逐条一致。生成产物在 build/zh-locale/server/newcibn/locale_string.txt; python3 scripts/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 个名称不含汉字。 scripts/audit_zh_server_names.py 将线上 VNUM 与旧中文名称表比对,发现物品 1 处、 怪物/NPC 20 处同 VNUM 不同名(例如 VNUM 101 在线上是 Wild Dog,旧表是幼狼)。 旧表并非完整的 40250 名称表,因此本轮没有批量修改数据库。客户端已改用本次 只读导出的服务端名称快照,见 data/zh_40250/README.md,两侧 VNUM 名称由此一致。