TH1/Tools/translate_data.py
2026-05-13 21:46:36 +08:00

293 lines
19 KiB
Python
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.

# -*- coding: utf-8 -*-
"""
TH1 Multilingual.xlsx 翻译数据
规则:
- 占位符 **<xxx>** 全部替换为 **<>** (内容留空,外壳保留)
- Staff 姓名/异常数据: 四语言全填原样 (在 KEEP_RAW_IDS)
- 19746 版本日志: 仅繁中+英文,日韩留空 (在 ZH_TW_EN_ONLY_IDS)
- 其余: 四语言完整翻译,繁中走 opencc s2tw
"""
# 这些 ID 四语言全部保留中文/英文原样
KEEP_RAW_IDS = {
'19739', # asfasfasf 测试输入
'19759', # Shenlan 调试命令
'19760', # Toggle Shenlan visual skill on/off
'19773', # 天火人雪糕
'19785', # 白哉
'19787', # 久九
'19789', # BING
'19791', # P君
'19793', # 娇阳
'19795', # 蛋卷
'19797', # 深澜
'19798', # 绝壁的夜鹭子
'19799', # 亮蓝
'19801', # 黎玄
'19803', # 阿令
'19805', # 星期六上线
'19807', # Q群群友
'19821', # X 推特图标
'19822', # QQ群:952618884
}
# 这些 ID 仅做繁中+英文,日韩留空
ZH_TW_EN_ONLY_IDS = {
'19746', # Beta 0.7.1g 版本日志
}
# 英/日/韩 翻译表 (key=ID, value=(en, ja, ko))
# 注意: 占位符 **<>** 由脚本统一处理,这里翻译文本中的占位符也写成 **<>**
TRANSLATIONS = {
# ---- 技能/能力描述 ----
'19734': (
"Can move within 1 hex of any **<>**, granting **<>** within **<>** and 1 **<>** to that **<>**. Stacks if used multiple times in the same turn. Each **<>** also accumulates **<>** equal to the current stack count.",
"任意の**<>**から1マス以内に移動でき、**<>**にいる**<>**に**<>**と1の**<>**を付与する。同一ターン内で複数回使用すると層数が累積する。**<>**を使用するたび、現在の層数と同じ**<>**が蓄積される。",
"임의의 **<>** 주변 1칸 범위 내로 이동할 수 있으며, **<>**의 **<>**에게 **<>**과 1의 **<>**을 부여한다. 같은 턴 내 반복 사용 시 누적된다. **<>**을 사용할 때마다 현재 누적 수치와 동일한 **<>**이 누적된다.",
),
'19740': (
"Free Mode",
"フリーモード",
"자유 모드",
),
'19741': (
"Enemy Control",
"敵勢力支配",
"적 통제",
),
'19742': (
"Can only attack enemy city centers. Spawns a number of **<>** based on the city's level, and steals that city's gold income for this turn. The user vanishes. While stealthed, movement ignores **<>**, and grants 1 **<>** after moving,",
"敵の都市中心のみ攻撃可能。都市レベルに応じた数の**<>**を生み出し、その都市の今ターンの金収入を奪う。使用後、自身は消滅する。隠密状態での移動は**<>**を無視し、移動後に1の**<>**を獲得する、",
"적 도시 중심만 공격 가능. 도시 레벨에 따라 일정 수의 **<>**를 생성하며, 해당 도시의 이번 턴 골드 수입을 탈취한다. 사용 후 자신은 소멸한다. 은신 상태에서의 이동은 **<>**의 영향을 받지 않으며, 이동 후 1의 **<>**을 획득한다,",
),
'19743': (
"If you did not move last turn, gain 1 **<>** at the start of this turn. Moving costs 1 **<>**, climbing mountains costs 2 **<>**. If stamina is insufficient, lose 3 HP instead. Moving costs no stamina when a friendly hero is nearby.",
"前ターンに移動しなかった場合、ターン開始時に1の**<>**を獲得する。 移動は**<>**を1、登山は**<>**を2消費する。体力が不足する場合は代わりにHPを3失う。移動時に近くに味方英雄がいる場合は体力を消費しない。",
"지난 턴에 이동하지 않았다면, 턴 시작 시 1의 **<>**을 획득한다. 이동은 **<>**을 1, 등산은 **<>**을 2 소모한다. 체력이 부족하면 대신 HP를 3 소모한다. 이동 시 주변에 아군 영웅이 있으면 체력을 소모하지 않는다.",
),
'19744': (
"Each stack grants: +0.5 ATK, +0.5 DEF, +1 sight, +1 HP auto-regen. When stamina ≥ 2, range +1. Stamina cap is 2 (4 at Lv.3).",
"1層ごとに攻撃+0.5、防御+0.5、視界+1、HP自動回復+1。 体力が2以上の時、射程+1。体力上限は2Lv.3で4",
"각 누적층마다: 공격 +0.5, 방어 +0.5, 시야 +1, HP 자동 회복 +1. 체력 ≥2일 때 사거리 +1. 체력 상한은 2 (Lv.3에서 4).",
),
'19745': (
"At the start of the turn, gain **<>** based on terrain. On plains: gain **<>**, can heal an ally for 5 HP. If the land is adjacent to water, also gain **<>**, blocking 1 instance of damage. If the land is mountainous, also gain **<>**, range +1. Each stone type can be stored up to 1 (2 at Lv.4), consumed automatically.",
"ターン開始時、地形に応じて**<>**を獲得する。陸地では**<>**を獲得味方を5回復できる。陸地が水域に隣接する場合、追加で**<>**を獲得し、1回の被ダメージを防ぐ。陸地が山脈の場合、追加で**<>**を獲得し、射程+1。各種の魔力石は最大1個まで保管できるLv.4で2、自動で消費される。",
"턴 시작 시 지형에 따라 **<>**을 획득한다. 육지: **<>**을 획득, 아군을 5 회복할 수 있다. 육지가 수역에 인접하면 추가로 **<>**을 획득, 피해 1회를 차단한다. 육지가 산맥이면 추가로 **<>**을 획득, 사거리 +1. 각 마력석은 최대 1개까지 보관 가능 (Lv.4에서 2), 자동으로 소모된다.",
),
'19747': ("Target Language", "対象言語", "대상 언어"),
'19748': ("Reference Language", "参照言語", "참조 언어"),
'19749': ("Step 2: Export Template & Fill In", "ステップ2テンプレート出力と入力", "Step 2: 템플릿 내보내기 및 작성"),
'19750': ("1. Export Name", "1. 出力名", "1. 내보내기 이름"),
'19751': ("2. Export Template", "2. テンプレート出力", "2. 템플릿 내보내기"),
'19752': ("3. Fill In Template", "3. テンプレート入力", "3. 템플릿 작성"),
'19753': ("Step 3: Upload / Update Mod", "ステップ3MODをアップロード/更新", "Step 3: 모드 업로드/업데이트"),
'19754': (
"After attacking a unit, apply 1 stack of **<>** to the target. When infantry attack a unit with **<>**, each stack grants +0.5 ATK.",
"ユニットを攻撃した後、対象に**<>**を1層付与する。歩兵が**<>**を持つユニットを攻撃する際、層ごとに攻撃+0.5を得る。",
"유닛을 공격한 후 대상에게 **<>** 1층을 부여한다. 보병이 **<>**을 가진 유닛을 공격할 때, 각 층마다 공격력 +0.5를 얻는다.",
),
'19755': (
"Like infantry, artillery can also apply **<>**, and gain the attack bonus when attacking.",
"歩兵と同様、砲兵も**<>**を付与でき、攻撃時に攻撃力ボーナスを得る。",
"보병과 마찬가지로 포병도 **<>**을 부여할 수 있으며, 공격 시 공격력 보너스를 얻는다.",
),
'19757': (
"Shenlan's Color Show",
"深瀾の色彩ショー",
"Shenlan의 색채 쇼",
),
'19765': ("#0 Tutorial", "#0 チュートリアル", "#0 튜토리얼"),
'19766': (
"Master Empire Gensokyo in just 5 steps!",
"わずか5ステップで帝国幻想郷を完全マスター",
"단 5단계로 제국 환상향을 완전 마스터!",
),
'19767': (
"Just 5 steps to master it, really?!",
"本当に5ステップでマスターできるの",
"정말로 5단계만에 마스터할 수 있다고?!",
),
'19768': (
"With my Lady's skill, there's no doubt!",
"お嬢様のお力なら、きっと大丈夫です!",
"아가씨의 실력이라면, 분명 문제없을 거예요!",
),
'19769': (
"A color effect arranged by tournament staff Shenlan for the players. Trigger again to dismiss.",
"大会スタッフ深瀾が選手のために用意した色彩エフェクト。再度発動で解除。",
"대회 스태프 Shenlan이 선수를 위해 마련한 색채 효과. 다시 발동하면 해제된다.",
),
'19774': (
"Game Design / Development / Art / UI / Writing",
"ゲームデザイン / 開発 / アート / UI / シナリオ",
"게임 디자인 / 개발 / 아트 / UI / 시나리오",
),
'19775': ("Music & SFX", "音楽&効果音", "음악 & 효과음"),
'19777': ("Credits", "スタッフロール", "스태프 명단"),
'19778': ("Core Team", "コアチーム", "코어 팀"),
'19779': ("Game Design", "ゲームデザイン", "게임 디자인"),
'19784': (
"Game Design / Programming / Art / UI / Writing",
"ゲームデザイン / プログラミング / アート / UI / シナリオ",
"게임 디자인 / 프로그래밍 / 아트 / UI / 시나리오",
),
'19786': ("Programming", "プログラム開発", "프로그램 개발"),
'19788': ("Character Art // Main Key Visual", "キャラクター立ち絵 // メインキービジュアル", "캐릭터 일러스트 // 메인 키 비주얼"),
'19790': ("Character Art", "キャラクター立ち絵", "캐릭터 일러스트"),
'19792': (
"Illustrations / Story Comics / Scenes / Tokens",
"イラスト / シナリオ漫画 / 背景 / 駒",
"일러스트 / 스토리 만화 / 배경 / 말",
),
'19794': ("Scenes", "背景", "배경"),
'19796': ("Tokens", "", ""),
'19800': ("Localization", "多言語ローカライズ", "다국어 현지화"),
'19802': ("English Localization", "英語ローカライズ", "영문 현지화"),
'19804': (
"UI Style Design / Interaction Design",
"UIスタイルデザイン / インタラクションデザイン",
"UI 스타일 디자인 / 인터랙션 디자인",
),
'19806': ("Setting Consultant", "設定考証", "설정 자문"),
'19808': ("I love you all!", "みんな大好きだー!", "여러분 정말 사랑해요!"),
'19809': (
"Friends from Discord",
"Discordの友人たち",
"디스코드의 친구들",
),
'19810': ("Thank you for your support!", "ご支援ありがとうございます!", "여러분의 성원에 감사드립니다!"),
'19811': (
"Every player who joined the playtest",
"テストプレイに参加してくれた全てのプレイヤー",
"테스트 플레이에 참여해주신 모든 플레이어",
),
'19832': ("You", "あなた", "당신"),
'19816': (
"Click End Turn to gain gold income!",
"「次のターン」をクリックして金収入を獲得しよう!",
"다음 턴을 클릭하여 골드 수입을 얻어보세요!",
),
'19817': (
'Click the "End Turn" button at the bottom-right',
"右下の「次のターン」ボタンをクリック",
'오른쪽 아래의 "다음 턴" 버튼을 클릭',
),
'19818': (
"Click your city and train 1 Infantry!",
"都市をクリックして歩兵を1体訓練しよう",
"도시를 클릭하여 보병 1명을 훈련하세요!",
),
'19819': (
'Click the city, then click "Train Infantry" in the left info panel',
"都市をクリックし、左の情報パネルで「歩兵を訓練」をクリック",
'도시를 클릭하고 왼쪽 정보 패널에서 "보병 훈련"을 클릭',
),
'19823': ("Art", "アート", "아트"),
'19824': ("Art Support", "アート協力", "아트 협력"),
'19825': ("Game Design Support", "ゲームデザイン協力", "게임 디자인 협력"),
'19826': ("Localization Support", "ローカライズ協力", "현지화 협력"),
'19827': ("Music & Sound", "音楽・効果音", "음악·효과음"),
'19828': ("UI & Interaction", "UI・インタラクション", "UI · 인터랙션"),
'19829': ("Special Thanks", "スペシャルサンクス", "스페셜 땡스"),
'19830': (
"<b>Presented by</b>: Remilia Command\n<b>Original Work</b>: Team Shanghai Alice\n<color=grey>This is a derivative doujin work of Touhou Project</color>",
"<b>制作</b>:レミリア司令部\n<b>原作</b>:上海アリス幻樂団\n<color=grey>本作品は東方Projectの二次創作です</color>",
"<b>제작</b>: 레미리아 사령부\n<b>원작</b>: 상하이 앨리스 환악단\n<color=grey>본 작품은 동방 프로젝트의 2차 동인 창작물입니다</color>",
),
'19831': (
"Thanks for your feedback during the test!",
"体験&フィードバックをありがとう!",
"체험과 피드백에 감사드립니다!",
),
'19833': (
"Thank you for playing this game!",
"ゲームをプレイしてくれてありがとう!",
"이 게임을 플레이해주셔서 감사합니다!",
),
'19836': (
"Open the Tech Tree, research **<>**, and upgrade the city to Lv.4!",
"テックツリーを開き、**<>**を研究して都市をLv.4まで強化しよう!",
"기술 트리를 열어 **<>**을 연구하고, 도시를 Lv.4까지 업그레이드하세요!",
),
'19837': (
'Click the "Tech" button at the bottom-right, find **<>** and research it. Then select a **<>** tile and gather **<>** to raise the city level!',
"右下の「テック」ボタンをクリックし、**<>**を見つけて研究しよう。次に**<>**マスを選択し、**<>**を採集して都市レベルを上げよう!",
'오른쪽 아래의 "기술" 버튼을 클릭하여 **<>**을 찾아 연구하세요. 그런 다음 **<>** 타일을 선택하여 **<>**을 채집해 도시 레벨을 올리세요!',
),
'19838': (
"You've completed the entire tutorial! Feel free to quit or keep playing~",
"チュートリアルをすべて完了しました!終了するも、続けて遊ぶも自由です~",
"튜토리얼을 모두 완료했습니다! 종료하거나 계속 플레이해도 됩니다~",
),
'19839': (
"The game will end automatically on turn 30",
"ゲームは30ターン目で自動的に終了します",
"게임은 30번째 턴에 자동으로 종료됩니다",
),
'19840': (
"For matching entries, MODs on top will override MODs below",
"同一の翻訳項目では、上にあるMODが下のMODを上書きします",
"동일한 번역 항목의 경우, 위쪽의 MOD가 아래쪽의 MOD를 덮어씁니다",
),
'19841': (
"Convert **<>** into **<>** and upgrade your city!",
"**<>**を**<>**に改造して都市をアップグレードしよう!",
"**<>**을 **<>**으로 개조하여 도시를 업그레이드하세요!",
),
'19842': (
'Click a **<>** tile, then select "Convert to Farm" in the left info panel.',
"**<>**マスをクリックし、左の情報パネルで「農田に改造」を選択する。",
'**<>** 타일을 클릭하고 왼쪽 정보 패널에서 "농지로 개조"를 선택하세요.',
),
'19843': (
"Move your Infantry, explore the surroundings, and capture 1 new **<>**!",
"歩兵を移動して周囲を探索し、新たな**<>**を1つ占領しよう",
"보병을 이동시켜 주변을 탐색하고, 새로운 **<>**을 하나 점령하세요!",
),
'19844': (
"Each unit can only move once per turn! Click End Turn to keep moving. Can't find a **<>**? Try exploring further out!",
"1ターンに移動できるのは1回のみ「次のターン」をクリックして移動を続けよう**<>**が見つからない場合は、もっと外側を探索してみよう!",
"각 유닛은 턴당 한 번만 이동할 수 있습니다! 다음 턴을 클릭해 계속 이동하세요! **<>**을 찾을 수 없다면 더 멀리 탐색해보세요!",
),
}
# 19746 版本日志 (仅繁中+英文)
VERSION_LOG_EN = """[Beta 0.7.1g]
Release Date: 2026.5.11
------- [New Content] -------
1. New BGM: Tenma Empire, Lunar Empire
2. New encyclopedia sub-module: Music Room.
3. New multilingual MOD module — you can create translation versions in other languages via Steam Workshop (accessed through Settings).
4. Match history can now be filtered by Komeiji Empire, Classic Mode, Free Mode, and 217 player count.
------- [Bug Fixes] -------
1. Fixed a bug where Reisen would incorrectly command non-allied Lunar Rabbit illusions to shoot.
2. Fixed a bug where Houraisan Kaguya's "Eternal Night Return" skill was not displayed in the skill bar.
3. Fixed a bug with incorrect Lv.4 values for Hakushiki Zanmu (puppet).
4. Fixed a bug where Reiuji Utsuho could enter an ally's city center directly.
5. Fixed a bug where allied cities could not be captured after the ally retired.
6. Fixed a bug where the game might not end properly after defeating all enemies in non-Classic Mode.
7. Fixed a bug where Izayoi Sakuya at Lv.4 would not accumulate Fatigue.
8. Fixed a bug with miscounted achievements for some heroes.
9. Fixed a bug where Komeiji Satori's upgrade quest was miscounted when killing units.
10. Fixed a bug where Komeiji Koishi could enter stealth again by moving after leveling up on a turn she had already moved.
11. Fixed a bug where the popup hint was incorrect when encountering a newly-met enemy whose portrait was already shown.
12. Fixed a bug with incorrect token symbols for Komeiji Empire common units.
13. Fixed incorrect pricing on Hero Shrines (Forest Shrine 15, others unified to 20).
14. Fixed a bug where splash damage did not put two nations into a War diplomatic state.
15. Fixed a bug in online lobbies where repeated player join/leave caused 1P/2P numbering to go out of order.
16. Fixed a bug where viewing another empire's diplomatic relations could display incorrectly.
17. Fixed a bug where Komeiji Koishi's "Echoes of Black Heaven" would error out when allies were present at trigger time.
18. Fixed a bug where the surrounding Udonge Courtyard level did not update in time when new Youkai Rabbits were created.
19. Fixed a bug where the Komeiji Empire's initial score was miscalculated (higher than normal).
------- [Improvements] -------
1. Improved scroll speed on the ranking screen.
2. Improved encyclopedia display — heroes now show their signature actions.
3. Added a kick button in online lobbies.
4. Clarified the description of Patchouli's Stamina cap and Magic Stone storage cap.
5. Added a chat log viewing button in online lobbies.
6. Added a new diplomatic relation "Aware" alongside Neutral, War, Betrayed, Allied — this relation applies when you have encountered the other side but they have not yet encountered you."""