From faf87eccb036d47de2cf55843d97656f30d08dcd Mon Sep 17 00:00:00 2001 From: JiWoong Sul Date: Wed, 21 Jan 2026 17:34:39 +0900 Subject: [PATCH] =?UTF-8?q?feat(l10n):=20=EB=8B=A4=EA=B5=AD=EC=96=B4=20?= =?UTF-8?q?=EB=AC=B8=EC=9E=90=EC=97=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 옵션 메뉴, 통계, 도움말 등 UI 문자열 추가 - en, ko, ja, zh 지원 --- lib/data/game_text_l10n.dart | 20 ++ lib/l10n/app_en.arb | 165 +++++++++++++++- lib/l10n/app_ja.arb | 54 ++++- lib/l10n/app_ko.arb | 54 ++++- lib/l10n/app_localizations.dart | 306 +++++++++++++++++++++++++++++ lib/l10n/app_localizations_en.dart | 161 +++++++++++++++ lib/l10n/app_localizations_ja.dart | 161 +++++++++++++++ lib/l10n/app_localizations_ko.dart | 158 +++++++++++++++ lib/l10n/app_localizations_zh.dart | 161 +++++++++++++++ lib/l10n/app_zh.arb | 54 ++++- 10 files changed, 1290 insertions(+), 4 deletions(-) diff --git a/lib/data/game_text_l10n.dart b/lib/data/game_text_l10n.dart index 3018fd1..60754ae 100644 --- a/lib/data/game_text_l10n.dart +++ b/lib/data/game_text_l10n.dart @@ -1226,3 +1226,23 @@ String get elementChaos => _l('Chaos', '혼돈', 'カオス'); // 스킬 상세 정보 없음 String get skillNoDetails => _l('No details', '상세 정보 없음', '詳細情報なし'); + +// ============================================================================ +// 알림 텍스트 (Notification Texts) +// ============================================================================ + +String get notifyLevelUp => _l('LEVEL UP!', '레벨 업!', 'レベルアップ!'); +String notifyLevel(int level) => + _l('Level $level', '레벨 $level', 'レベル $level'); +String get notifyQuestComplete => + _l('QUEST COMPLETE!', '퀘스트 완료!', 'クエスト完了!'); +String get notifyPrologueComplete => + _l('PROLOGUE COMPLETE!', '프롤로그 완료!', 'プロローグ完了!'); +String notifyActComplete(int actNumber) => _l( + 'ACT $actNumber COMPLETE!', + '${actNumber}막 완료!', + '第${actNumber}幕完了!', +); +String get notifyNewSpell => _l('NEW SPELL!', '새 주문!', '新しい呪文!'); +String get notifyNewEquipment => _l('NEW EQUIPMENT!', '새 장비!', '新しい装備!'); +String get notifyBossDefeated => _l('BOSS DEFEATED!', '보스 처치!', 'ボス撃破!'); diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index cc97ee4..77d22f7 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -310,5 +310,168 @@ "@endingTapToSkip": { "description": "Tap to skip hint" }, "endingHoldToSpeedUp": "HOLD TO SPEED UP", - "@endingHoldToSpeedUp": { "description": "Hold to speed up scrolling hint" } + "@endingHoldToSpeedUp": { "description": "Hold to speed up scrolling hint" }, + + "menuTitle": "MENU", + "@menuTitle": { "description": "Menu panel title" }, + + "optionsTitle": "OPTIONS", + "@optionsTitle": { "description": "Options menu title" }, + + "soundTitle": "SOUND", + "@soundTitle": { "description": "Sound dialog title" }, + + "controlSection": "CONTROL", + "@controlSection": { "description": "Control section title" }, + + "infoSection": "INFO", + "@infoSection": { "description": "Info section title" }, + + "settingsSection": "SETTINGS", + "@settingsSection": { "description": "Settings section title" }, + + "saveExitSection": "SAVE / EXIT", + "@saveExitSection": { "description": "Save/Exit section title" }, + + "ok": "OK", + "@ok": { "description": "OK button" }, + + "rechargeButton": "RECHARGE", + "@rechargeButton": { "description": "Recharge button" }, + + "createButton": "CREATE", + "@createButton": { "description": "Create button" }, + + "previewTitle": "PREVIEW", + "@previewTitle": { "description": "Preview panel title" }, + + "nameTitle": "NAME", + "@nameTitle": { "description": "Name panel title" }, + + "statsTitle": "STATS", + "@statsTitle": { "description": "Stats panel title" }, + + "raceTitle": "RACE", + "@raceTitle": { "description": "Race panel title" }, + + "classSection": "CLASS", + "@classSection": { "description": "Class panel title" }, + + "bgmLabel": "BGM", + "@bgmLabel": { "description": "BGM volume label" }, + + "sfxLabel": "SFX", + "@sfxLabel": { "description": "SFX volume label" }, + + "hpLabel": "HP", + "@hpLabel": { "description": "HP bar label" }, + + "mpLabel": "MP", + "@mpLabel": { "description": "MP bar label" }, + + "expLabel": "EXP", + "@expLabel": { "description": "EXP bar label" }, + + "notifyLevelUp": "LEVEL UP!", + "@notifyLevelUp": { "description": "Level up notification title" }, + + "notifyLevel": "Level {level}", + "@notifyLevel": { + "description": "Level notification subtitle", + "placeholders": { + "level": { "type": "int" } + } + }, + + "notifyQuestComplete": "QUEST COMPLETE!", + "@notifyQuestComplete": { "description": "Quest complete notification title" }, + + "notifyPrologueComplete": "PROLOGUE COMPLETE!", + "@notifyPrologueComplete": { "description": "Prologue complete notification title" }, + + "notifyActComplete": "ACT {number} COMPLETE!", + "@notifyActComplete": { + "description": "Act complete notification title", + "placeholders": { + "number": { "type": "int" } + } + }, + + "notifyNewSpell": "NEW SPELL!", + "@notifyNewSpell": { "description": "New spell notification title" }, + + "notifyNewEquipment": "NEW EQUIPMENT!", + "@notifyNewEquipment": { "description": "New equipment notification title" }, + + "notifyBossDefeated": "BOSS DEFEATED!", + "@notifyBossDefeated": { "description": "Boss defeated notification title" }, + + "rechargeRollsTitle": "RECHARGE ROLLS", + "@rechargeRollsTitle": { "description": "Recharge rolls dialog title" }, + + "rechargeRollsFree": "Recharge 5 rolls for free?", + "@rechargeRollsFree": { "description": "Recharge rolls free user message" }, + + "rechargeRollsAd": "Watch an ad to recharge 5 rolls?", + "@rechargeRollsAd": { "description": "Recharge rolls ad message" }, + + "debugTitle": "DEBUG", + "@debugTitle": { "description": "Debug section title" }, + + "debugCheatsTitle": "DEBUG CHEATS", + "@debugCheatsTitle": { "description": "Debug cheats section title" }, + + "debugToolsTitle": "DEBUG TOOLS", + "@debugToolsTitle": { "description": "Debug tools section title" }, + + "debugDeveloperTools": "DEVELOPER TOOLS", + "@debugDeveloperTools": { "description": "Developer tools header" }, + + "debugSkipTask": "SKIP TASK (L+1)", + "@debugSkipTask": { "description": "Skip task cheat label" }, + + "debugSkipTaskDesc": "Complete task instantly", + "@debugSkipTaskDesc": { "description": "Skip task cheat description" }, + + "debugSkipQuest": "SKIP QUEST (Q!)", + "@debugSkipQuest": { "description": "Skip quest cheat label" }, + + "debugSkipQuestDesc": "Complete quest instantly", + "@debugSkipQuestDesc": { "description": "Skip quest cheat description" }, + + "debugSkipAct": "SKIP ACT (P!)", + "@debugSkipAct": { "description": "Skip act cheat label" }, + + "debugSkipActDesc": "Complete act instantly", + "@debugSkipActDesc": { "description": "Skip act cheat description" }, + + "debugCreateTestCharacter": "CREATE TEST CHARACTER", + "@debugCreateTestCharacter": { "description": "Create test character button" }, + + "debugCreateTestCharacterDesc": "Register Level 100 character to Hall of Fame", + "@debugCreateTestCharacterDesc": { "description": "Create test character description" }, + + "debugCreateTestCharacterTitle": "CREATE TEST CHARACTER?", + "@debugCreateTestCharacterTitle": { "description": "Create test character dialog title" }, + + "debugCreateTestCharacterMessage": "Current character will be converted to Level 100\nand registered to the Hall of Fame.\n\n⚠️ Current save file will be deleted.\nThis action cannot be undone.", + "@debugCreateTestCharacterMessage": { "description": "Create test character confirmation message" }, + + "debugTurbo": "DEBUG: TURBO (20x)", + "@debugTurbo": { "description": "Debug turbo mode label" }, + + "debugIapPurchased": "IAP PURCHASED", + "@debugIapPurchased": { "description": "IAP purchased debug toggle" }, + + "debugIapPurchasedDesc": "ON: Behave as paid user (ads removed)", + "@debugIapPurchasedDesc": { "description": "IAP purchased debug description" }, + + "debugOfflineHours": "OFFLINE HOURS", + "@debugOfflineHours": { "description": "Offline hours debug label" }, + + "debugOfflineHoursDesc": "Test return rewards (applies on restart)", + "@debugOfflineHoursDesc": { "description": "Offline hours debug description" }, + + "debugTestCharacterDesc": "Modify current character to Level 100\nand register to the Hall of Fame.", + "@debugTestCharacterDesc": { "description": "Test character creation description" } } diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index f0b2c4c..fa7df02 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -93,5 +93,57 @@ "endingHallOfFameButton": "殿堂入り", "endingSkip": "スキップ", "endingTapToSkip": "タップでスキップ", - "endingHoldToSpeedUp": "長押しで高速スクロール" + "endingHoldToSpeedUp": "長押しで高速スクロール", + + "menuTitle": "MENU", + "optionsTitle": "OPTIONS", + "soundTitle": "SOUND", + "controlSection": "CONTROL", + "infoSection": "INFO", + "settingsSection": "SETTINGS", + "saveExitSection": "SAVE / EXIT", + "ok": "OK", + "rechargeButton": "RECHARGE", + "createButton": "CREATE", + "previewTitle": "PREVIEW", + "nameTitle": "NAME", + "statsTitle": "STATS", + "raceTitle": "RACE", + "classSection": "CLASS", + "bgmLabel": "BGM", + "sfxLabel": "SFX", + "hpLabel": "HP", + "mpLabel": "MP", + "expLabel": "EXP", + "notifyLevelUp": "LEVEL UP!", + "notifyLevel": "Level {level}", + "notifyQuestComplete": "QUEST COMPLETE!", + "notifyPrologueComplete": "PROLOGUE COMPLETE!", + "notifyActComplete": "ACT {number} COMPLETE!", + "notifyNewSpell": "NEW SPELL!", + "notifyNewEquipment": "NEW EQUIPMENT!", + "notifyBossDefeated": "BOSS DEFEATED!", + "rechargeRollsTitle": "RECHARGE ROLLS", + "rechargeRollsFree": "Recharge 5 rolls for free?", + "rechargeRollsAd": "Watch an ad to recharge 5 rolls?", + "debugTitle": "DEBUG", + "debugCheatsTitle": "DEBUG CHEATS", + "debugToolsTitle": "DEBUG TOOLS", + "debugDeveloperTools": "DEVELOPER TOOLS", + "debugSkipTask": "SKIP TASK (L+1)", + "debugSkipTaskDesc": "Complete task instantly", + "debugSkipQuest": "SKIP QUEST (Q!)", + "debugSkipQuestDesc": "Complete quest instantly", + "debugSkipAct": "SKIP ACT (P!)", + "debugSkipActDesc": "Complete act instantly", + "debugCreateTestCharacter": "CREATE TEST CHARACTER", + "debugCreateTestCharacterDesc": "Register Level 100 character to Hall of Fame", + "debugCreateTestCharacterTitle": "CREATE TEST CHARACTER?", + "debugCreateTestCharacterMessage": "Current character will be converted to Level 100\nand registered to the Hall of Fame.\n\n⚠️ Current save file will be deleted.\nThis action cannot be undone.", + "debugTurbo": "DEBUG: TURBO (20x)", + "debugIapPurchased": "IAP PURCHASED", + "debugIapPurchasedDesc": "ON: Behave as paid user (ads removed)", + "debugOfflineHours": "OFFLINE HOURS", + "debugOfflineHoursDesc": "Test return rewards (applies on restart)", + "debugTestCharacterDesc": "Modify current character to Level 100\nand register to the Hall of Fame." } diff --git a/lib/l10n/app_ko.arb b/lib/l10n/app_ko.arb index 800c66b..ae27e5e 100644 --- a/lib/l10n/app_ko.arb +++ b/lib/l10n/app_ko.arb @@ -93,5 +93,57 @@ "endingHallOfFameButton": "명예의 전당", "endingSkip": "건너뛰기", "endingTapToSkip": "탭하여 건너뛰기", - "endingHoldToSpeedUp": "길게 누르면 빨리 스크롤" + "endingHoldToSpeedUp": "길게 누르면 빨리 스크롤", + + "menuTitle": "메뉴", + "optionsTitle": "옵션", + "soundTitle": "사운드", + "controlSection": "제어", + "infoSection": "정보", + "settingsSection": "설정", + "saveExitSection": "저장 / 종료", + "ok": "확인", + "rechargeButton": "충전", + "createButton": "생성", + "previewTitle": "미리보기", + "nameTitle": "이름", + "statsTitle": "능력치", + "raceTitle": "종족", + "classSection": "직업", + "bgmLabel": "BGM", + "sfxLabel": "효과음", + "hpLabel": "HP", + "mpLabel": "MP", + "expLabel": "경험치", + "notifyLevelUp": "레벨 업!", + "notifyLevel": "레벨 {level}", + "notifyQuestComplete": "퀘스트 완료!", + "notifyPrologueComplete": "프롤로그 완료!", + "notifyActComplete": "{number}막 완료!", + "notifyNewSpell": "새 주문!", + "notifyNewEquipment": "새 장비!", + "notifyBossDefeated": "보스 처치!", + "rechargeRollsTitle": "굴리기 충전", + "rechargeRollsFree": "무료로 5회 충전하시겠습니까?", + "rechargeRollsAd": "광고를 보고 5회 충전하시겠습니까?", + "debugTitle": "디버그", + "debugCheatsTitle": "디버그 치트", + "debugToolsTitle": "디버그 도구", + "debugDeveloperTools": "개발자 도구", + "debugSkipTask": "태스크 건너뛰기 (L+1)", + "debugSkipTaskDesc": "태스크 즉시 완료", + "debugSkipQuest": "퀘스트 건너뛰기 (Q!)", + "debugSkipQuestDesc": "퀘스트 즉시 완료", + "debugSkipAct": "액트 건너뛰기 (P!)", + "debugSkipActDesc": "액트 즉시 완료", + "debugCreateTestCharacter": "테스트 캐릭터 생성", + "debugCreateTestCharacterDesc": "레벨 100 캐릭터를 명예의 전당에 등록", + "debugCreateTestCharacterTitle": "테스트 캐릭터 생성?", + "debugCreateTestCharacterMessage": "현재 캐릭터가 레벨 100으로 변환되어\n명예의 전당에 등록됩니다.\n\n⚠️ 현재 세이브 파일이 삭제됩니다.\n이 작업은 되돌릴 수 없습니다.", + "debugTurbo": "디버그: 터보 (20x)", + "debugIapPurchased": "IAP 구매됨", + "debugIapPurchasedDesc": "ON: 유료 유저로 동작 (광고 제거)", + "debugOfflineHours": "오프라인 시간", + "debugOfflineHoursDesc": "복귀 보상 테스트 (재시작 시 적용)", + "debugTestCharacterDesc": "현재 캐릭터를 레벨 100으로 수정하여\n명예의 전당에 등록합니다." } diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index a0b4e65..99fc68c 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -652,6 +652,312 @@ abstract class L10n { /// In en, this message translates to: /// **'HOLD TO SPEED UP'** String get endingHoldToSpeedUp; + + /// Menu panel title + /// + /// In en, this message translates to: + /// **'MENU'** + String get menuTitle; + + /// Options menu title + /// + /// In en, this message translates to: + /// **'OPTIONS'** + String get optionsTitle; + + /// Sound dialog title + /// + /// In en, this message translates to: + /// **'SOUND'** + String get soundTitle; + + /// Control section title + /// + /// In en, this message translates to: + /// **'CONTROL'** + String get controlSection; + + /// Info section title + /// + /// In en, this message translates to: + /// **'INFO'** + String get infoSection; + + /// Settings section title + /// + /// In en, this message translates to: + /// **'SETTINGS'** + String get settingsSection; + + /// Save/Exit section title + /// + /// In en, this message translates to: + /// **'SAVE / EXIT'** + String get saveExitSection; + + /// OK button + /// + /// In en, this message translates to: + /// **'OK'** + String get ok; + + /// Recharge button + /// + /// In en, this message translates to: + /// **'RECHARGE'** + String get rechargeButton; + + /// Create button + /// + /// In en, this message translates to: + /// **'CREATE'** + String get createButton; + + /// Preview panel title + /// + /// In en, this message translates to: + /// **'PREVIEW'** + String get previewTitle; + + /// Name panel title + /// + /// In en, this message translates to: + /// **'NAME'** + String get nameTitle; + + /// Stats panel title + /// + /// In en, this message translates to: + /// **'STATS'** + String get statsTitle; + + /// Race panel title + /// + /// In en, this message translates to: + /// **'RACE'** + String get raceTitle; + + /// Class panel title + /// + /// In en, this message translates to: + /// **'CLASS'** + String get classSection; + + /// BGM volume label + /// + /// In en, this message translates to: + /// **'BGM'** + String get bgmLabel; + + /// SFX volume label + /// + /// In en, this message translates to: + /// **'SFX'** + String get sfxLabel; + + /// HP bar label + /// + /// In en, this message translates to: + /// **'HP'** + String get hpLabel; + + /// MP bar label + /// + /// In en, this message translates to: + /// **'MP'** + String get mpLabel; + + /// EXP bar label + /// + /// In en, this message translates to: + /// **'EXP'** + String get expLabel; + + /// Level up notification title + /// + /// In en, this message translates to: + /// **'LEVEL UP!'** + String get notifyLevelUp; + + /// Level notification subtitle + /// + /// In en, this message translates to: + /// **'Level {level}'** + String notifyLevel(int level); + + /// Quest complete notification title + /// + /// In en, this message translates to: + /// **'QUEST COMPLETE!'** + String get notifyQuestComplete; + + /// Prologue complete notification title + /// + /// In en, this message translates to: + /// **'PROLOGUE COMPLETE!'** + String get notifyPrologueComplete; + + /// Act complete notification title + /// + /// In en, this message translates to: + /// **'ACT {number} COMPLETE!'** + String notifyActComplete(int number); + + /// New spell notification title + /// + /// In en, this message translates to: + /// **'NEW SPELL!'** + String get notifyNewSpell; + + /// New equipment notification title + /// + /// In en, this message translates to: + /// **'NEW EQUIPMENT!'** + String get notifyNewEquipment; + + /// Boss defeated notification title + /// + /// In en, this message translates to: + /// **'BOSS DEFEATED!'** + String get notifyBossDefeated; + + /// Recharge rolls dialog title + /// + /// In en, this message translates to: + /// **'RECHARGE ROLLS'** + String get rechargeRollsTitle; + + /// Recharge rolls free user message + /// + /// In en, this message translates to: + /// **'Recharge 5 rolls for free?'** + String get rechargeRollsFree; + + /// Recharge rolls ad message + /// + /// In en, this message translates to: + /// **'Watch an ad to recharge 5 rolls?'** + String get rechargeRollsAd; + + /// Debug section title + /// + /// In en, this message translates to: + /// **'DEBUG'** + String get debugTitle; + + /// Debug cheats section title + /// + /// In en, this message translates to: + /// **'DEBUG CHEATS'** + String get debugCheatsTitle; + + /// Debug tools section title + /// + /// In en, this message translates to: + /// **'DEBUG TOOLS'** + String get debugToolsTitle; + + /// Developer tools header + /// + /// In en, this message translates to: + /// **'DEVELOPER TOOLS'** + String get debugDeveloperTools; + + /// Skip task cheat label + /// + /// In en, this message translates to: + /// **'SKIP TASK (L+1)'** + String get debugSkipTask; + + /// Skip task cheat description + /// + /// In en, this message translates to: + /// **'Complete task instantly'** + String get debugSkipTaskDesc; + + /// Skip quest cheat label + /// + /// In en, this message translates to: + /// **'SKIP QUEST (Q!)'** + String get debugSkipQuest; + + /// Skip quest cheat description + /// + /// In en, this message translates to: + /// **'Complete quest instantly'** + String get debugSkipQuestDesc; + + /// Skip act cheat label + /// + /// In en, this message translates to: + /// **'SKIP ACT (P!)'** + String get debugSkipAct; + + /// Skip act cheat description + /// + /// In en, this message translates to: + /// **'Complete act instantly'** + String get debugSkipActDesc; + + /// Create test character button + /// + /// In en, this message translates to: + /// **'CREATE TEST CHARACTER'** + String get debugCreateTestCharacter; + + /// Create test character description + /// + /// In en, this message translates to: + /// **'Register Level 100 character to Hall of Fame'** + String get debugCreateTestCharacterDesc; + + /// Create test character dialog title + /// + /// In en, this message translates to: + /// **'CREATE TEST CHARACTER?'** + String get debugCreateTestCharacterTitle; + + /// Create test character confirmation message + /// + /// In en, this message translates to: + /// **'Current character will be converted to Level 100\nand registered to the Hall of Fame.\n\n⚠️ Current save file will be deleted.\nThis action cannot be undone.'** + String get debugCreateTestCharacterMessage; + + /// Debug turbo mode label + /// + /// In en, this message translates to: + /// **'DEBUG: TURBO (20x)'** + String get debugTurbo; + + /// IAP purchased debug toggle + /// + /// In en, this message translates to: + /// **'IAP PURCHASED'** + String get debugIapPurchased; + + /// IAP purchased debug description + /// + /// In en, this message translates to: + /// **'ON: Behave as paid user (ads removed)'** + String get debugIapPurchasedDesc; + + /// Offline hours debug label + /// + /// In en, this message translates to: + /// **'OFFLINE HOURS'** + String get debugOfflineHours; + + /// Offline hours debug description + /// + /// In en, this message translates to: + /// **'Test return rewards (applies on restart)'** + String get debugOfflineHoursDesc; + + /// Test character creation description + /// + /// In en, this message translates to: + /// **'Modify current character to Level 100\nand register to the Hall of Fame.'** + String get debugTestCharacterDesc; } class _L10nDelegate extends LocalizationsDelegate { diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index 3bf7074..b70f94d 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -297,4 +297,165 @@ class L10nEn extends L10n { @override String get endingHoldToSpeedUp => 'HOLD TO SPEED UP'; + + @override + String get menuTitle => 'MENU'; + + @override + String get optionsTitle => 'OPTIONS'; + + @override + String get soundTitle => 'SOUND'; + + @override + String get controlSection => 'CONTROL'; + + @override + String get infoSection => 'INFO'; + + @override + String get settingsSection => 'SETTINGS'; + + @override + String get saveExitSection => 'SAVE / EXIT'; + + @override + String get ok => 'OK'; + + @override + String get rechargeButton => 'RECHARGE'; + + @override + String get createButton => 'CREATE'; + + @override + String get previewTitle => 'PREVIEW'; + + @override + String get nameTitle => 'NAME'; + + @override + String get statsTitle => 'STATS'; + + @override + String get raceTitle => 'RACE'; + + @override + String get classSection => 'CLASS'; + + @override + String get bgmLabel => 'BGM'; + + @override + String get sfxLabel => 'SFX'; + + @override + String get hpLabel => 'HP'; + + @override + String get mpLabel => 'MP'; + + @override + String get expLabel => 'EXP'; + + @override + String get notifyLevelUp => 'LEVEL UP!'; + + @override + String notifyLevel(int level) { + return 'Level $level'; + } + + @override + String get notifyQuestComplete => 'QUEST COMPLETE!'; + + @override + String get notifyPrologueComplete => 'PROLOGUE COMPLETE!'; + + @override + String notifyActComplete(int number) { + return 'ACT $number COMPLETE!'; + } + + @override + String get notifyNewSpell => 'NEW SPELL!'; + + @override + String get notifyNewEquipment => 'NEW EQUIPMENT!'; + + @override + String get notifyBossDefeated => 'BOSS DEFEATED!'; + + @override + String get rechargeRollsTitle => 'RECHARGE ROLLS'; + + @override + String get rechargeRollsFree => 'Recharge 5 rolls for free?'; + + @override + String get rechargeRollsAd => 'Watch an ad to recharge 5 rolls?'; + + @override + String get debugTitle => 'DEBUG'; + + @override + String get debugCheatsTitle => 'DEBUG CHEATS'; + + @override + String get debugToolsTitle => 'DEBUG TOOLS'; + + @override + String get debugDeveloperTools => 'DEVELOPER TOOLS'; + + @override + String get debugSkipTask => 'SKIP TASK (L+1)'; + + @override + String get debugSkipTaskDesc => 'Complete task instantly'; + + @override + String get debugSkipQuest => 'SKIP QUEST (Q!)'; + + @override + String get debugSkipQuestDesc => 'Complete quest instantly'; + + @override + String get debugSkipAct => 'SKIP ACT (P!)'; + + @override + String get debugSkipActDesc => 'Complete act instantly'; + + @override + String get debugCreateTestCharacter => 'CREATE TEST CHARACTER'; + + @override + String get debugCreateTestCharacterDesc => + 'Register Level 100 character to Hall of Fame'; + + @override + String get debugCreateTestCharacterTitle => 'CREATE TEST CHARACTER?'; + + @override + String get debugCreateTestCharacterMessage => + 'Current character will be converted to Level 100\nand registered to the Hall of Fame.\n\n⚠️ Current save file will be deleted.\nThis action cannot be undone.'; + + @override + String get debugTurbo => 'DEBUG: TURBO (20x)'; + + @override + String get debugIapPurchased => 'IAP PURCHASED'; + + @override + String get debugIapPurchasedDesc => 'ON: Behave as paid user (ads removed)'; + + @override + String get debugOfflineHours => 'OFFLINE HOURS'; + + @override + String get debugOfflineHoursDesc => + 'Test return rewards (applies on restart)'; + + @override + String get debugTestCharacterDesc => + 'Modify current character to Level 100\nand register to the Hall of Fame.'; } diff --git a/lib/l10n/app_localizations_ja.dart b/lib/l10n/app_localizations_ja.dart index a682b90..a7ad8be 100644 --- a/lib/l10n/app_localizations_ja.dart +++ b/lib/l10n/app_localizations_ja.dart @@ -297,4 +297,165 @@ class L10nJa extends L10n { @override String get endingHoldToSpeedUp => '長押しで高速スクロール'; + + @override + String get menuTitle => 'MENU'; + + @override + String get optionsTitle => 'OPTIONS'; + + @override + String get soundTitle => 'SOUND'; + + @override + String get controlSection => 'CONTROL'; + + @override + String get infoSection => 'INFO'; + + @override + String get settingsSection => 'SETTINGS'; + + @override + String get saveExitSection => 'SAVE / EXIT'; + + @override + String get ok => 'OK'; + + @override + String get rechargeButton => 'RECHARGE'; + + @override + String get createButton => 'CREATE'; + + @override + String get previewTitle => 'PREVIEW'; + + @override + String get nameTitle => 'NAME'; + + @override + String get statsTitle => 'STATS'; + + @override + String get raceTitle => 'RACE'; + + @override + String get classSection => 'CLASS'; + + @override + String get bgmLabel => 'BGM'; + + @override + String get sfxLabel => 'SFX'; + + @override + String get hpLabel => 'HP'; + + @override + String get mpLabel => 'MP'; + + @override + String get expLabel => 'EXP'; + + @override + String get notifyLevelUp => 'LEVEL UP!'; + + @override + String notifyLevel(int level) { + return 'Level $level'; + } + + @override + String get notifyQuestComplete => 'QUEST COMPLETE!'; + + @override + String get notifyPrologueComplete => 'PROLOGUE COMPLETE!'; + + @override + String notifyActComplete(int number) { + return 'ACT $number COMPLETE!'; + } + + @override + String get notifyNewSpell => 'NEW SPELL!'; + + @override + String get notifyNewEquipment => 'NEW EQUIPMENT!'; + + @override + String get notifyBossDefeated => 'BOSS DEFEATED!'; + + @override + String get rechargeRollsTitle => 'RECHARGE ROLLS'; + + @override + String get rechargeRollsFree => 'Recharge 5 rolls for free?'; + + @override + String get rechargeRollsAd => 'Watch an ad to recharge 5 rolls?'; + + @override + String get debugTitle => 'DEBUG'; + + @override + String get debugCheatsTitle => 'DEBUG CHEATS'; + + @override + String get debugToolsTitle => 'DEBUG TOOLS'; + + @override + String get debugDeveloperTools => 'DEVELOPER TOOLS'; + + @override + String get debugSkipTask => 'SKIP TASK (L+1)'; + + @override + String get debugSkipTaskDesc => 'Complete task instantly'; + + @override + String get debugSkipQuest => 'SKIP QUEST (Q!)'; + + @override + String get debugSkipQuestDesc => 'Complete quest instantly'; + + @override + String get debugSkipAct => 'SKIP ACT (P!)'; + + @override + String get debugSkipActDesc => 'Complete act instantly'; + + @override + String get debugCreateTestCharacter => 'CREATE TEST CHARACTER'; + + @override + String get debugCreateTestCharacterDesc => + 'Register Level 100 character to Hall of Fame'; + + @override + String get debugCreateTestCharacterTitle => 'CREATE TEST CHARACTER?'; + + @override + String get debugCreateTestCharacterMessage => + 'Current character will be converted to Level 100\nand registered to the Hall of Fame.\n\n⚠️ Current save file will be deleted.\nThis action cannot be undone.'; + + @override + String get debugTurbo => 'DEBUG: TURBO (20x)'; + + @override + String get debugIapPurchased => 'IAP PURCHASED'; + + @override + String get debugIapPurchasedDesc => 'ON: Behave as paid user (ads removed)'; + + @override + String get debugOfflineHours => 'OFFLINE HOURS'; + + @override + String get debugOfflineHoursDesc => + 'Test return rewards (applies on restart)'; + + @override + String get debugTestCharacterDesc => + 'Modify current character to Level 100\nand register to the Hall of Fame.'; } diff --git a/lib/l10n/app_localizations_ko.dart b/lib/l10n/app_localizations_ko.dart index 1455d6c..4628d3e 100644 --- a/lib/l10n/app_localizations_ko.dart +++ b/lib/l10n/app_localizations_ko.dart @@ -297,4 +297,162 @@ class L10nKo extends L10n { @override String get endingHoldToSpeedUp => '길게 누르면 빨리 스크롤'; + + @override + String get menuTitle => '메뉴'; + + @override + String get optionsTitle => '옵션'; + + @override + String get soundTitle => '사운드'; + + @override + String get controlSection => '제어'; + + @override + String get infoSection => '정보'; + + @override + String get settingsSection => '설정'; + + @override + String get saveExitSection => '저장 / 종료'; + + @override + String get ok => '확인'; + + @override + String get rechargeButton => '충전'; + + @override + String get createButton => '생성'; + + @override + String get previewTitle => '미리보기'; + + @override + String get nameTitle => '이름'; + + @override + String get statsTitle => '능력치'; + + @override + String get raceTitle => '종족'; + + @override + String get classSection => '직업'; + + @override + String get bgmLabel => 'BGM'; + + @override + String get sfxLabel => '효과음'; + + @override + String get hpLabel => 'HP'; + + @override + String get mpLabel => 'MP'; + + @override + String get expLabel => '경험치'; + + @override + String get notifyLevelUp => '레벨 업!'; + + @override + String notifyLevel(int level) { + return '레벨 $level'; + } + + @override + String get notifyQuestComplete => '퀘스트 완료!'; + + @override + String get notifyPrologueComplete => '프롤로그 완료!'; + + @override + String notifyActComplete(int number) { + return '$number막 완료!'; + } + + @override + String get notifyNewSpell => '새 주문!'; + + @override + String get notifyNewEquipment => '새 장비!'; + + @override + String get notifyBossDefeated => '보스 처치!'; + + @override + String get rechargeRollsTitle => '굴리기 충전'; + + @override + String get rechargeRollsFree => '무료로 5회 충전하시겠습니까?'; + + @override + String get rechargeRollsAd => '광고를 보고 5회 충전하시겠습니까?'; + + @override + String get debugTitle => '디버그'; + + @override + String get debugCheatsTitle => '디버그 치트'; + + @override + String get debugToolsTitle => '디버그 도구'; + + @override + String get debugDeveloperTools => '개발자 도구'; + + @override + String get debugSkipTask => '태스크 건너뛰기 (L+1)'; + + @override + String get debugSkipTaskDesc => '태스크 즉시 완료'; + + @override + String get debugSkipQuest => '퀘스트 건너뛰기 (Q!)'; + + @override + String get debugSkipQuestDesc => '퀘스트 즉시 완료'; + + @override + String get debugSkipAct => '액트 건너뛰기 (P!)'; + + @override + String get debugSkipActDesc => '액트 즉시 완료'; + + @override + String get debugCreateTestCharacter => '테스트 캐릭터 생성'; + + @override + String get debugCreateTestCharacterDesc => '레벨 100 캐릭터를 명예의 전당에 등록'; + + @override + String get debugCreateTestCharacterTitle => '테스트 캐릭터 생성?'; + + @override + String get debugCreateTestCharacterMessage => + '현재 캐릭터가 레벨 100으로 변환되어\n명예의 전당에 등록됩니다.\n\n⚠️ 현재 세이브 파일이 삭제됩니다.\n이 작업은 되돌릴 수 없습니다.'; + + @override + String get debugTurbo => '디버그: 터보 (20x)'; + + @override + String get debugIapPurchased => 'IAP 구매됨'; + + @override + String get debugIapPurchasedDesc => 'ON: 유료 유저로 동작 (광고 제거)'; + + @override + String get debugOfflineHours => '오프라인 시간'; + + @override + String get debugOfflineHoursDesc => '복귀 보상 테스트 (재시작 시 적용)'; + + @override + String get debugTestCharacterDesc => '현재 캐릭터를 레벨 100으로 수정하여\n명예의 전당에 등록합니다.'; } diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart index 97d3ad5..33b81a4 100644 --- a/lib/l10n/app_localizations_zh.dart +++ b/lib/l10n/app_localizations_zh.dart @@ -297,4 +297,165 @@ class L10nZh extends L10n { @override String get endingHoldToSpeedUp => '长按加速滚动'; + + @override + String get menuTitle => 'MENU'; + + @override + String get optionsTitle => 'OPTIONS'; + + @override + String get soundTitle => 'SOUND'; + + @override + String get controlSection => 'CONTROL'; + + @override + String get infoSection => 'INFO'; + + @override + String get settingsSection => 'SETTINGS'; + + @override + String get saveExitSection => 'SAVE / EXIT'; + + @override + String get ok => 'OK'; + + @override + String get rechargeButton => 'RECHARGE'; + + @override + String get createButton => 'CREATE'; + + @override + String get previewTitle => 'PREVIEW'; + + @override + String get nameTitle => 'NAME'; + + @override + String get statsTitle => 'STATS'; + + @override + String get raceTitle => 'RACE'; + + @override + String get classSection => 'CLASS'; + + @override + String get bgmLabel => 'BGM'; + + @override + String get sfxLabel => 'SFX'; + + @override + String get hpLabel => 'HP'; + + @override + String get mpLabel => 'MP'; + + @override + String get expLabel => 'EXP'; + + @override + String get notifyLevelUp => 'LEVEL UP!'; + + @override + String notifyLevel(int level) { + return 'Level $level'; + } + + @override + String get notifyQuestComplete => 'QUEST COMPLETE!'; + + @override + String get notifyPrologueComplete => 'PROLOGUE COMPLETE!'; + + @override + String notifyActComplete(int number) { + return 'ACT $number COMPLETE!'; + } + + @override + String get notifyNewSpell => 'NEW SPELL!'; + + @override + String get notifyNewEquipment => 'NEW EQUIPMENT!'; + + @override + String get notifyBossDefeated => 'BOSS DEFEATED!'; + + @override + String get rechargeRollsTitle => 'RECHARGE ROLLS'; + + @override + String get rechargeRollsFree => 'Recharge 5 rolls for free?'; + + @override + String get rechargeRollsAd => 'Watch an ad to recharge 5 rolls?'; + + @override + String get debugTitle => 'DEBUG'; + + @override + String get debugCheatsTitle => 'DEBUG CHEATS'; + + @override + String get debugToolsTitle => 'DEBUG TOOLS'; + + @override + String get debugDeveloperTools => 'DEVELOPER TOOLS'; + + @override + String get debugSkipTask => 'SKIP TASK (L+1)'; + + @override + String get debugSkipTaskDesc => 'Complete task instantly'; + + @override + String get debugSkipQuest => 'SKIP QUEST (Q!)'; + + @override + String get debugSkipQuestDesc => 'Complete quest instantly'; + + @override + String get debugSkipAct => 'SKIP ACT (P!)'; + + @override + String get debugSkipActDesc => 'Complete act instantly'; + + @override + String get debugCreateTestCharacter => 'CREATE TEST CHARACTER'; + + @override + String get debugCreateTestCharacterDesc => + 'Register Level 100 character to Hall of Fame'; + + @override + String get debugCreateTestCharacterTitle => 'CREATE TEST CHARACTER?'; + + @override + String get debugCreateTestCharacterMessage => + 'Current character will be converted to Level 100\nand registered to the Hall of Fame.\n\n⚠️ Current save file will be deleted.\nThis action cannot be undone.'; + + @override + String get debugTurbo => 'DEBUG: TURBO (20x)'; + + @override + String get debugIapPurchased => 'IAP PURCHASED'; + + @override + String get debugIapPurchasedDesc => 'ON: Behave as paid user (ads removed)'; + + @override + String get debugOfflineHours => 'OFFLINE HOURS'; + + @override + String get debugOfflineHoursDesc => + 'Test return rewards (applies on restart)'; + + @override + String get debugTestCharacterDesc => + 'Modify current character to Level 100\nand register to the Hall of Fame.'; } diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 39a3acd..4194053 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -93,5 +93,57 @@ "endingHallOfFameButton": "荣誉殿堂", "endingSkip": "跳过", "endingTapToSkip": "点击跳过", - "endingHoldToSpeedUp": "长按加速滚动" + "endingHoldToSpeedUp": "长按加速滚动", + + "menuTitle": "MENU", + "optionsTitle": "OPTIONS", + "soundTitle": "SOUND", + "controlSection": "CONTROL", + "infoSection": "INFO", + "settingsSection": "SETTINGS", + "saveExitSection": "SAVE / EXIT", + "ok": "OK", + "rechargeButton": "RECHARGE", + "createButton": "CREATE", + "previewTitle": "PREVIEW", + "nameTitle": "NAME", + "statsTitle": "STATS", + "raceTitle": "RACE", + "classSection": "CLASS", + "bgmLabel": "BGM", + "sfxLabel": "SFX", + "hpLabel": "HP", + "mpLabel": "MP", + "expLabel": "EXP", + "notifyLevelUp": "LEVEL UP!", + "notifyLevel": "Level {level}", + "notifyQuestComplete": "QUEST COMPLETE!", + "notifyPrologueComplete": "PROLOGUE COMPLETE!", + "notifyActComplete": "ACT {number} COMPLETE!", + "notifyNewSpell": "NEW SPELL!", + "notifyNewEquipment": "NEW EQUIPMENT!", + "notifyBossDefeated": "BOSS DEFEATED!", + "rechargeRollsTitle": "RECHARGE ROLLS", + "rechargeRollsFree": "Recharge 5 rolls for free?", + "rechargeRollsAd": "Watch an ad to recharge 5 rolls?", + "debugTitle": "DEBUG", + "debugCheatsTitle": "DEBUG CHEATS", + "debugToolsTitle": "DEBUG TOOLS", + "debugDeveloperTools": "DEVELOPER TOOLS", + "debugSkipTask": "SKIP TASK (L+1)", + "debugSkipTaskDesc": "Complete task instantly", + "debugSkipQuest": "SKIP QUEST (Q!)", + "debugSkipQuestDesc": "Complete quest instantly", + "debugSkipAct": "SKIP ACT (P!)", + "debugSkipActDesc": "Complete act instantly", + "debugCreateTestCharacter": "CREATE TEST CHARACTER", + "debugCreateTestCharacterDesc": "Register Level 100 character to Hall of Fame", + "debugCreateTestCharacterTitle": "CREATE TEST CHARACTER?", + "debugCreateTestCharacterMessage": "Current character will be converted to Level 100\nand registered to the Hall of Fame.\n\n⚠️ Current save file will be deleted.\nThis action cannot be undone.", + "debugTurbo": "DEBUG: TURBO (20x)", + "debugIapPurchased": "IAP PURCHASED", + "debugIapPurchasedDesc": "ON: Behave as paid user (ads removed)", + "debugOfflineHours": "OFFLINE HOURS", + "debugOfflineHoursDesc": "Test return rewards (applies on restart)", + "debugTestCharacterDesc": "Modify current character to Level 100\nand register to the Hall of Fame." }