extends SceneTree const Locale = preload("res://locale.gd") const ItemTooltip = preload("res://ui/item_tooltip.gd") const NetPlay = preload("res://net_play.gd") func _init() -> void: print("=== Starting test_chinese_locale ===") var assets := AssetRoot.path() var passed := 0 var failed := 0 # 1. Default language var default_lang := Locale.get_default_lang() if default_lang == "zh": print("PASS: Default language is 'zh'") passed += 1 else: printerr("FAIL: Default language expected 'zh', got '%s'" % default_lang) failed += 1 # 2. Locale setup var loc = Locale.new() loc.setup(assets, "zh") if loc.lang() == "zh": print("PASS: Locale lang is 'zh'") passed += 1 else: printerr("FAIL: Locale lang expected 'zh', got '%s'" % loc.lang()) failed += 1 # 3. Item names var sword_name := loc.item_name(10) if sword_name == "武士刀+0": print("PASS: Item 10 name is 武士刀+0") passed += 1 else: printerr("FAIL: Item 10 name expected '武士刀+0', got '%s'" % sword_name) failed += 1 var yang_name := loc.item_name(1) if yang_name == "金币": print("PASS: Item 1 name is 金币") passed += 1 else: printerr("FAIL: Item 1 name expected '金币', got '%s'" % yang_name) failed += 1 var dress_name := loc.item_name(11901) if dress_name == "礼服": print("PASS: Item 11901 name is 礼服") passed += 1 else: printerr("FAIL: Item 11901 name expected '礼服', got '%s'" % dress_name) failed += 1 # 4. Mob names var dog_name := loc.mob_name(101) if dog_name == "幼狼": print("PASS: Mob 101 name is 幼狼") passed += 1 else: printerr("FAIL: Mob 101 name expected '幼狼', got '%s'" % dog_name) failed += 1 # 5. System messages var arrow_msg := loc.t("CANNOT_SHOOT_EMPTY_ARROW") if arrow_msg == "没有箭了,请装备箭": print("PASS: CANNOT_SHOOT_EMPTY_ARROW translation matches") passed += 1 else: printerr("FAIL: CANNOT_SHOOT_EMPTY_ARROW expected '没有箭了,请装备箭', got '%s'" % arrow_msg) failed += 1 var align_msg := loc.t("ALIGNMENT_NAME") if align_msg == "善恶值 :": print("PASS: ALIGNMENT_NAME translation matches") passed += 1 else: printerr("FAIL: ALIGNMENT_NAME expected '善恶值 :', got '%s'" % align_msg) failed += 1 # 6. ItemTooltip integration var tt = ItemTooltip.new() var tt_ok := tt.setup(assets, "zh") if tt_ok: print("PASS: ItemTooltip setup succeeded for zh") passed += 1 else: printerr("FAIL: ItemTooltip setup failed") failed += 1 var model := tt.build_model(10, 1, {}) if String(model.get("title", "")) == "武士刀+0": print("PASS: ItemTooltip build_model resolved title 武士刀+0 without proto") passed += 1 else: printerr("FAIL: Expected title '武士刀+0', got '%s'" % model.get("title", "")) failed += 1 # 7. NetPlay._entity_name resolution for mobs, stones, NPCs, and PCs var np := NetPlay.new() np.locale = loc # 7a. Monster: stray_dog (race 101) -> 幼狼 var mob_dog := np._entity_name({"race": 101, "kind": 2, "name": "stray_dog"}) if mob_dog == "幼狼": print("PASS: NetPlay._entity_name(race 101 stray_dog) resolved to '幼狼'") passed += 1 else: printerr("FAIL: Expected '幼狼', got '%s'" % mob_dog) failed += 1 # 7b. Monster: wolf (race 102) -> 灰狼 var mob_wolf := np._entity_name({"race": 102, "kind": 2, "name": "wolf"}) if mob_wolf == "灰狼": print("PASS: NetPlay._entity_name(race 102 wolf) resolved to '灰狼'") passed += 1 else: printerr("FAIL: Expected '灰狼', got '%s'" % mob_wolf) failed += 1 # 7c. Metin Stone: race 8001 -> 鱼跃陨石 var stone := np._entity_name({"race": 8001, "kind": 3, "name": "metin_sorrow"}) if stone == "鱼跃陨石": print("PASS: NetPlay._entity_name(race 8001) resolved to '鱼跃陨石'") passed += 1 else: printerr("FAIL: Expected '鱼跃陨石', got '%s'" % stone) failed += 1 # 7d. NPC: Blacksmith (race 20016) -> 王铁匠 var npc_smith := np._entity_name({"race": 20016, "kind": 1, "name": "blacksmith"}) if npc_smith == "王铁匠": print("PASS: NetPlay._entity_name(race 20016) resolved to '王铁匠'") passed += 1 else: printerr("FAIL: Expected '王铁匠', got '%s'" % npc_smith) failed += 1 # 7e. PC: Player Warrior (race 0) keeps player name var pc_warrior := np._entity_name({"race": 0, "kind": 0, "name": "无双战神"}) if pc_warrior == "无双战神": print("PASS: NetPlay._entity_name(PC warrior) preserved player name '无双战神'") passed += 1 else: printerr("FAIL: Expected '无双战神', got '%s'" % pc_warrior) failed += 1 # 7f. PC: Player Ninja (race 1) keeps player name var pc_ninja := np._entity_name({"race": 1, "kind": 0, "name": "暗影刺客"}) if pc_ninja == "暗影刺客": print("PASS: NetPlay._entity_name(PC ninja) preserved player name '暗影刺客'") passed += 1 else: printerr("FAIL: Expected '暗影刺客', got '%s'" % pc_ninja) failed += 1 np.free() print("\n=== %d / %d CHINESE LOCALE TESTS PASSED (Failed: %d) ===" % [passed, passed + failed, failed]) if failed > 0: quit(1) else: quit(0)