Files
mtgodot-poc/scripts/test_build_zh_translate_lua.py
T
shenleiandClaude Opus 5.5 671155eecc zh quests: translate.lua builder + first 100 quest strings
40250 quests say gameforge.<quest>.<key>, loaded by game from
share/locale/<locale>/translate.lua at start. build_zh_translate_lua.py
lays the reviewed data/zh_40250/quest_translate_zh.tsv over the English
file line by line (nested tables kept), re-wraps at the quest window
width, and writes GBK with 0x5C trail bytes doubled. Deployed on 203;
blacksmith dialog shows Chinese.

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

42 lines
1.9 KiB
Python

#!/usr/bin/env python3
"""Safeguards for the Chinese translate.lua build."""
import importlib.util
import tempfile
import unittest
from pathlib import Path
SPEC = importlib.util.spec_from_file_location("build_zh_translate_lua",
Path(__file__).with_name("build_zh_translate_lua.py"))
MODULE = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(MODULE)
class TranslateLuaTest(unittest.TestCase):
def test_build(self):
with tempfile.TemporaryDirectory() as directory:
root = Path(directory)
en, table, out = root / "translate.lua", root / "table.tsv", root / "out.lua"
en.write_bytes(
b'exportTestForCharset = "\xfc "\ngameforge = {}\ngameforge.q = {}\ngameforge.q.sub = {}\n'
b'gameforge.q._10_say = "Hello[ENTER]there. "\n'
b'gameforge.q._20_say = "Hello[ENTER]there. "\n'
b'gameforge.q.sub._30_say = "Let\xb4s say \\"hi\\" "\n'
b'gameforge.q._40_say = "Long "\n')
# 乗 is 0x81 0x5C in GBK.
table.write_text("# comment\nq._10_say\t你好。\nq._40_say\t" + "长" * 30 + "乗\n", encoding="utf-8")
done, total = MODULE.build(en, table, out)
self.assertEqual((done, total), (3, 4))
lines = out.read_bytes().split(b"\n")
self.assertEqual(lines[3], b"gameforge.q.sub = {}")
self.assertEqual(lines[4], 'gameforge.q._10_say = "你好。 "'.encode("gbk"))
self.assertEqual(lines[5], lines[4].replace(b"_10_", b"_20_")) # same English text
self.assertEqual(lines[6], b'gameforge.q.sub._30_say = "Let\'s say \\"hi\\" "')
wrapped = ("长" * 25 + "[ENTER]" + "长" * 5).encode("gbk") + b"\x81\\\\"
self.assertEqual(lines[7], b'gameforge.q._40_say = "' + wrapped + b' "')
if __name__ == "__main__":
unittest.main()