diff --git a/lib/data/game_text_l10n.dart b/lib/data/game_text_l10n.dart index 266817a..849b629 100644 --- a/lib/data/game_text_l10n.dart +++ b/lib/data/game_text_l10n.dart @@ -22,6 +22,16 @@ bool get isKoreanLocale => _currentLocale == 'ko'; /// 일본어 여부 확인 bool get isJapaneseLocale => _currentLocale == 'ja'; +/// 로케일별 문자열 반환 헬퍼 (리팩토링용) +/// +/// 영문(en), 한국어(ko), 일본어(ja) 순서로 인자를 받아 +/// 현재 로케일에 맞는 문자열을 반환합니다. +String _l(String en, String ko, String ja) { + if (isKoreanLocale) return ko; + if (isJapaneseLocale) return ja; + return en; +} + /// 각 단어 첫 글자를 대문자로 변환 (Title Case) /// /// 예: "syntax error" → "Syntax Error" @@ -70,768 +80,396 @@ List get prologueTexts { // 태스크 캡션 // ============================================================================ -String get taskCompiling { - if (isKoreanLocale) return '컴파일 중'; - if (isJapaneseLocale) return 'コンパイル中'; - return 'Compiling'; -} +String get taskCompiling => _l('Compiling', '컴파일 중', 'コンパイル中'); +String get taskPrologue => _l('Prologue', '프롤로그', 'プロローグ'); -String get taskPrologue { - if (isKoreanLocale) return '프롤로그'; - if (isJapaneseLocale) return 'プロローグ'; - return 'Prologue'; -} +String taskHeadingToMarket() => _l( + 'Heading to the Data Market to trade loot', + '전리품을 팔기 위해 데이터 마켓으로 이동 중', + '戦利品を売るためデータマーケットへ移動中', + ); -String taskHeadingToMarket() { - if (isKoreanLocale) return '전리품을 팔기 위해 데이터 마켓으로 이동 중'; - if (isJapaneseLocale) return '戦利品を売るためデータマーケットへ移動中'; - return 'Heading to the Data Market to trade loot'; -} +String taskUpgradingHardware() => _l( + 'Upgrading hardware at the Tech Shop', + '테크 샵에서 하드웨어 업그레이드 중', + 'テックショップでハードウェアをアップグレード中', + ); -String taskUpgradingHardware() { - if (isKoreanLocale) return '테크 샵에서 하드웨어 업그레이드 중'; - if (isJapaneseLocale) return 'テックショップでハードウェアをアップグレード中'; - return 'Upgrading hardware at the Tech Shop'; -} +String taskEnteringDebugZone() => + _l('Entering the Debug Zone', '디버그 존 진입 중', 'デバッグゾーンに進入中'); -String taskEnteringDebugZone() { - if (isKoreanLocale) return '디버그 존 진입 중'; - if (isJapaneseLocale) return 'デバッグゾーンに進入中'; - return 'Entering the Debug Zone'; -} +String taskDebugging(String monsterName) => _l( + 'Debugging $monsterName', + '$monsterName 디버깅 중', + '$monsterName をデバッグ中', + ); -String taskDebugging(String monsterName) { - if (isKoreanLocale) return '$monsterName 디버깅 중'; - if (isJapaneseLocale) return '$monsterName をデバッグ中'; - return 'Debugging $monsterName'; -} +String taskFinalBoss(String bossName) => _l( + 'Final Battle: $bossName', + '최종 보스와 대결: $bossName', + '最終ボスと対決: $bossName', + ); -String taskFinalBoss(String bossName) { - if (isKoreanLocale) return '최종 보스와 대결: $bossName'; - if (isJapaneseLocale) return '最終ボスと対決: $bossName'; - return 'Final Battle: $bossName'; -} - -String taskSelling(String itemDescription) { - if (isKoreanLocale) return '$itemDescription 판매 중'; - if (isJapaneseLocale) return '$itemDescription を販売中'; - return 'Selling $itemDescription'; -} +String taskSelling(String itemDescription) => _l( + 'Selling $itemDescription', + '$itemDescription 판매 중', + '$itemDescription を販売中', + ); // ============================================================================ // 부활 시퀀스 메시지 // ============================================================================ /// 부활 애니메이션 중 표시 메시지 -String get animationResurrecting { - if (isKoreanLocale) return '부활 중...'; - if (isJapaneseLocale) return '復活中...'; - return 'Resurrecting...'; -} - -String get taskReturningToTown { - if (isKoreanLocale) return '마을로 귀환 중...'; - if (isJapaneseLocale) return '町に戻っている...'; - return 'Returning to town...'; -} - -String get taskRestockingAtShop { - if (isKoreanLocale) return '상점에서 장비 정비 중...'; - if (isJapaneseLocale) return 'ショップで装備を整備中...'; - return 'Restocking at shop...'; -} - -String get taskHeadingToHuntingGrounds { - if (isKoreanLocale) return '사냥터로 이동 중...'; - if (isJapaneseLocale) return '狩り場へ向かっている...'; - return 'Heading to hunting grounds...'; -} +String get animationResurrecting => _l('Resurrecting...', '부활 중...', '復活中...'); +String get taskReturningToTown => + _l('Returning to town...', '마을로 귀환 중...', '町に戻っている...'); +String get taskRestockingAtShop => + _l('Restocking at shop...', '상점에서 장비 정비 중...', 'ショップで装備を整備中...'); +String get taskHeadingToHuntingGrounds => + _l('Heading to hunting grounds...', '사냥터로 이동 중...', '狩り場へ向かっている...'); // ============================================================================ // 사망 화면 메시지 // ============================================================================ -String get deathYouDied { - if (isKoreanLocale) return '사망'; - if (isJapaneseLocale) return '死亡'; - return 'YOU DIED'; -} +String get deathYouDied => _l('YOU DIED', '사망', '死亡'); +String get deathSacrificedToResurrect => + _l('Sacrificed to Resurrect', '부활 대가로 희생됨', '復活のために犠牲'); +String get deathEquipment => _l('Equipment', '장비', '装備'); +String get deathNoSacrificeNeeded => + _l('No sacrifice needed', '희생 없이 부활', '犠牲なしで復活'); +String get deathCoinRemaining => _l('Coin Remaining', '남은 코인', '残りコイン'); +String get deathResurrect => _l('Resurrect', '부활', '復活'); +String get deathAutoResurrect => _l('Auto Resurrect', '자동 부활', '自動復活'); +String get deathCombatLog => _l('Combat Log', '전투 기록', '戦闘ログ'); -String get deathSacrificedToResurrect { - if (isKoreanLocale) return '부활 대가로 희생됨'; - if (isJapaneseLocale) return '復活のために犠牲'; - return 'Sacrificed to Resurrect'; -} - -String get deathEquipment { - if (isKoreanLocale) return '장비'; - if (isJapaneseLocale) return '装備'; - return 'Equipment'; -} - -String get deathNoSacrificeNeeded { - if (isKoreanLocale) return '희생 없이 부활'; - if (isJapaneseLocale) return '犠牲なしで復活'; - return 'No sacrifice needed'; -} - -String get deathCoinRemaining { - if (isKoreanLocale) return '남은 코인'; - if (isJapaneseLocale) return '残りコイン'; - return 'Coin Remaining'; -} - -String get deathResurrect { - if (isKoreanLocale) return '부활'; - if (isJapaneseLocale) return '復活'; - return 'Resurrect'; -} - -String get deathAutoResurrect { - if (isKoreanLocale) return '자동 부활'; - if (isJapaneseLocale) return '自動復活'; - return 'Auto Resurrect'; -} - -String get deathCombatLog { - if (isKoreanLocale) return '전투 기록'; - if (isJapaneseLocale) return '戦闘ログ'; - return 'Combat Log'; -} - -String deathKilledBy(String killerName) { - if (isKoreanLocale) return '$killerName에게 사망'; - if (isJapaneseLocale) return '$killerNameに倒された'; - return 'Killed by $killerName'; -} - -String get deathEnvironmentalHazard { - if (isKoreanLocale) return '환경 피해로 사망'; - if (isJapaneseLocale) return '環境ダメージで死亡'; - return 'Environmental hazard'; -} +String deathKilledBy(String killerName) => + _l('Killed by $killerName', '$killerName에게 사망', '$killerNameに倒された'); +String get deathEnvironmentalHazard => + _l('Environmental hazard', '환경 피해로 사망', '環境ダメージで死亡'); // ============================================================================ // UI 일반 메시지 // ============================================================================ -String get uiNoPotions { - if (isKoreanLocale) return '포션 없음'; - if (isJapaneseLocale) return 'ポーションなし'; - return 'No potions'; -} - -String get uiTapToContinue { - if (isKoreanLocale) return '탭하여 계속'; - if (isJapaneseLocale) return 'タップして続行'; - return 'Tap to continue'; -} - -String get uiNoSkills { - if (isKoreanLocale) return '습득한 스킬이 없습니다'; - if (isJapaneseLocale) return 'スキルなし'; - return 'No skills'; -} - -String get uiNoBonusStats { - if (isKoreanLocale) return '추가 스탯 없음'; - if (isJapaneseLocale) return 'ボーナスステータスなし'; - return 'No bonus stats'; -} - -String get uiNoActiveBuffs { - if (isKoreanLocale) return '활성 버프 없음'; - if (isJapaneseLocale) return 'アクティブバフなし'; - return 'No active buffs'; -} - -String get uiReady { - if (isKoreanLocale) return '준비'; - if (isJapaneseLocale) return '準備完了'; - return 'Ready'; -} - -String get uiPotions { - if (isKoreanLocale) return '포션'; - if (isJapaneseLocale) return 'ポーション'; - return 'Potions'; -} - -String get uiBuffs { - if (isKoreanLocale) return '버프'; - if (isJapaneseLocale) return 'バフ'; - return 'Buffs'; -} +String get uiNoPotions => _l('No potions', '포션 없음', 'ポーションなし'); +String get uiTapToContinue => _l('Tap to continue', '탭하여 계속', 'タップして続行'); +String get uiNoSkills => _l('No skills', '습득한 스킬이 없습니다', 'スキルなし'); +String get uiNoBonusStats => + _l('No bonus stats', '추가 스탯 없음', 'ボーナスステータスなし'); +String get uiNoActiveBuffs => + _l('No active buffs', '활성 버프 없음', 'アクティブバフなし'); +String get uiReady => _l('Ready', '준비', '準備完了'); +String get uiPotions => _l('Potions', '포션', 'ポーション'); +String get uiBuffs => _l('Buffs', '버프', 'バフ'); // ============================================================================ // 스탯 약어 // ============================================================================ -String get statStr { - if (isKoreanLocale) return '힘'; - if (isJapaneseLocale) return '筋力'; - return 'STR'; -} - -String get statCon { - if (isKoreanLocale) return '체력'; - if (isJapaneseLocale) return '耐久'; - return 'CON'; -} - -String get statDex { - if (isKoreanLocale) return '민첩'; - if (isJapaneseLocale) return '敏捷'; - return 'DEX'; -} - -String get statInt { - if (isKoreanLocale) return '지능'; - if (isJapaneseLocale) return '知力'; - return 'INT'; -} - -String get statWis { - if (isKoreanLocale) return '지혜'; - if (isJapaneseLocale) return '精神'; - return 'WIS'; -} - -String get statCha { - if (isKoreanLocale) return '매력'; - if (isJapaneseLocale) return '魅力'; - return 'CHA'; -} +String get statStr => _l('STR', '힘', '筋力'); +String get statCon => _l('CON', '체력', '耐久'); +String get statDex => _l('DEX', '민첩', '敏捷'); +String get statInt => _l('INT', '지능', '知力'); +String get statWis => _l('WIS', '지혜', '精神'); +String get statCha => _l('CHA', '매력', '魅力'); // ============================================================================ // 패시브 능력 설명 // ============================================================================ -String passiveHpBonus(int percent) { - if (isKoreanLocale) return 'HP +$percent%'; - if (isJapaneseLocale) return 'HP +$percent%'; - return 'HP +$percent%'; -} +// HP/MP 보너스는 동일 형식이므로 그대로 유지 +String passiveHpBonus(int percent) => 'HP +$percent%'; +String passiveMpBonus(int percent) => 'MP +$percent%'; -String passiveMpBonus(int percent) { - if (isKoreanLocale) return 'MP +$percent%'; - if (isJapaneseLocale) return 'MP +$percent%'; - return 'MP +$percent%'; -} - -String passivePhysicalBonus(int percent) { - if (isKoreanLocale) return '물리 공격 +$percent%'; - if (isJapaneseLocale) return '物理攻撃 +$percent%'; - return 'Physical +$percent%'; -} - -String passiveDefenseBonus(int percent) { - if (isKoreanLocale) return '방어력 +$percent%'; - if (isJapaneseLocale) return '防御力 +$percent%'; - return 'Defense +$percent%'; -} - -String passiveMagicBonus(int percent) { - if (isKoreanLocale) return '마법 공격 +$percent%'; - if (isJapaneseLocale) return '魔法攻撃 +$percent%'; - return 'Magic +$percent%'; -} - -String passiveEvasionBonus(int percent) { - if (isKoreanLocale) return '회피율 +$percent%'; - if (isJapaneseLocale) return '回避率 +$percent%'; - return 'Evasion +$percent%'; -} - -String passiveCritBonus(int percent) { - if (isKoreanLocale) return '크리티컬 +$percent%'; - if (isJapaneseLocale) return 'クリティカル +$percent%'; - return 'Critical +$percent%'; -} - -String passiveHpRegen(int percent) { - if (isKoreanLocale) return '전투 후 HP $percent% 회복'; - if (isJapaneseLocale) return '戦闘後HP $percent%回復'; - return 'Recover $percent% HP after combat'; -} - -String passiveMpRegen(int percent) { - if (isKoreanLocale) return '전투 후 MP $percent% 회복'; - if (isJapaneseLocale) return '戦闘後MP $percent%回復'; - return 'Recover $percent% MP after combat'; -} +String passivePhysicalBonus(int percent) => + _l('Physical +$percent%', '물리 공격 +$percent%', '物理攻撃 +$percent%'); +String passiveDefenseBonus(int percent) => + _l('Defense +$percent%', '방어력 +$percent%', '防御力 +$percent%'); +String passiveMagicBonus(int percent) => + _l('Magic +$percent%', '마법 공격 +$percent%', '魔法攻撃 +$percent%'); +String passiveEvasionBonus(int percent) => + _l('Evasion +$percent%', '회피율 +$percent%', '回避率 +$percent%'); +String passiveCritBonus(int percent) => + _l('Critical +$percent%', '크리티컬 +$percent%', 'クリティカル +$percent%'); +String passiveHpRegen(int percent) => _l( + 'Recover $percent% HP after combat', + '전투 후 HP $percent% 회복', + '戦闘後HP $percent%回復', + ); +String passiveMpRegen(int percent) => _l( + 'Recover $percent% MP after combat', + '전투 후 MP $percent% 회복', + '戦闘後MP $percent%回復', + ); // ============================================================================ // 전투 로그 메시지 // ============================================================================ -String combatYouHit(String targetName, int damage) { - if (isKoreanLocale) return '$targetName에게 $damage 데미지'; - if (isJapaneseLocale) return '$targetNameに$damageダメージ'; - return 'You hit $targetName for $damage damage'; -} +String combatYouHit(String targetName, int damage) => _l( + 'You hit $targetName for $damage damage', + '$targetName에게 $damage 데미지', + '$targetNameに$damageダメージ', + ); +String combatYouEvaded(String targetName) => _l( + 'You evaded $targetName\'s attack!', + '$targetName의 공격 회피!', + '$targetNameの攻撃を回避!', + ); +String combatEvadedAttackFrom(String targetName) => _l( + 'Evaded attack from $targetName', + '$targetName의 공격 회피', + '$targetNameの攻撃を回避', + ); +String combatHealedFor(int amount) => + _l('Healed for $amount HP', 'HP $amount 회복', 'HP $amount回復'); +String combatCritical(int damage, String targetName) => _l( + 'CRITICAL! $damage damage to $targetName!', + '크리티컬! $targetName에게 $damage 데미지!', + 'クリティカル! $targetNameに$damageダメージ!', + ); +String combatMonsterHitsYou(String monsterName, int damage) => _l( + '$monsterName hits you for $damage damage', + '$monsterName이(가) $damage 데미지', + '$monsterNameが$damageダメージを与えた', + ); +String combatMonsterEvaded(String monsterName) => _l( + '$monsterName evaded your attack!', + '$monsterName이(가) 공격 회피!', + '$monsterNameが攻撃を回避!', + ); +String combatBlocked(int damage) => _l( + 'Blocked! Reduced to $damage damage', + '방어! $damage 데미지로 감소', + 'ブロック! $damageダメージに軽減', + ); -String combatYouEvaded(String targetName) { - if (isKoreanLocale) return '$targetName의 공격 회피!'; - if (isJapaneseLocale) return '$targetNameの攻撃を回避!'; - return 'You evaded $targetName\'s attack!'; -} - -String combatEvadedAttackFrom(String targetName) { - if (isKoreanLocale) return '$targetName의 공격 회피'; - if (isJapaneseLocale) return '$targetNameの攻撃を回避'; - return 'Evaded attack from $targetName'; -} - -String combatHealedFor(int amount) { - if (isKoreanLocale) return 'HP $amount 회복'; - if (isJapaneseLocale) return 'HP $amount回復'; - return 'Healed for $amount HP'; -} - -String combatCritical(int damage, String targetName) { - if (isKoreanLocale) return '크리티컬! $targetName에게 $damage 데미지!'; - if (isJapaneseLocale) return 'クリティカル! $targetNameに$damageダメージ!'; - return 'CRITICAL! $damage damage to $targetName!'; -} - -String combatMonsterHitsYou(String monsterName, int damage) { - if (isKoreanLocale) return '$monsterName이(가) $damage 데미지'; - if (isJapaneseLocale) return '$monsterNameが$damageダメージを与えた'; - return '$monsterName hits you for $damage damage'; -} - -String combatMonsterEvaded(String monsterName) { - if (isKoreanLocale) return '$monsterName이(가) 공격 회피!'; - if (isJapaneseLocale) return '$monsterNameが攻撃を回避!'; - return '$monsterName evaded your attack!'; -} - -String combatBlocked(int damage) { - if (isKoreanLocale) return '방어! $damage 데미지로 감소'; - if (isJapaneseLocale) return 'ブロック! $damageダメージに軽減'; - return 'Blocked! Reduced to $damage damage'; -} - -String combatParried(int damage) { - if (isKoreanLocale) return '패리! $damage 데미지로 감소'; - if (isJapaneseLocale) return 'パリィ! $damageダメージに軽減'; - return 'Parried! Reduced to $damage damage'; -} +String combatParried(int damage) => _l( + 'Parried! Reduced to $damage damage', + '패리! $damage 데미지로 감소', + 'パリィ! $damageダメージに軽減', + ); // 스킬 관련 전투 메시지 -String combatSkillCritical(String skillName, int damage) { - if (isKoreanLocale) return '크리티컬 $skillName! $damage 데미지!'; - if (isJapaneseLocale) return 'クリティカル$skillName! $damageダメージ!'; - return 'CRITICAL $skillName! $damage damage!'; -} - -String combatSkillDamage(String skillName, int damage) { - if (isKoreanLocale) return '$skillName: $damage 데미지'; - if (isJapaneseLocale) return '$skillName: $damageダメージ'; - return '$skillName: $damage damage'; -} - -String combatSkillHeal(String skillName, int amount) { - if (isKoreanLocale) return '$skillName: +$amount HP'; - if (isJapaneseLocale) return '$skillName: +$amount HP'; - return '$skillName: +$amount HP'; -} - -String get uiHeal { - if (isKoreanLocale) return '힐'; - if (isJapaneseLocale) return 'ヒール'; - return 'Heal'; -} - -String combatBuffActivated(String skillName) { - if (isKoreanLocale) return '$skillName 발동!'; - if (isJapaneseLocale) return '$skillName 発動!'; - return '$skillName activated!'; -} - -String combatDebuffApplied(String skillName, String targetName) { - if (isKoreanLocale) return '$skillName → $targetName에 적용!'; - if (isJapaneseLocale) return '$skillName → $targetNameに適用!'; - return '$skillName applied to $targetName!'; -} - -String combatDotTick(String skillName, int damage) { - if (isKoreanLocale) return '$skillName: $damage 지속 데미지'; - if (isJapaneseLocale) return '$skillName: $damage 継続ダメージ'; - return '$skillName ticks for $damage damage'; -} - -String combatPotionUsed(String potionName, int amount, String statName) { - if (isKoreanLocale) return '$potionName: +$amount $statName'; - if (isJapaneseLocale) return '$potionName: +$amount $statName'; - return '$potionName: +$amount $statName'; -} - -String combatPotionDrop(String potionName) { - if (isKoreanLocale) return '획득: $potionName'; - if (isJapaneseLocale) return '獲得: $potionName'; - return 'Dropped: $potionName'; -} +String combatSkillCritical(String skillName, int damage) => _l( + 'CRITICAL $skillName! $damage damage!', + '크리티컬 $skillName! $damage 데미지!', + 'クリティカル$skillName! $damageダメージ!', + ); +String combatSkillDamage(String skillName, int damage) => + _l('$skillName: $damage damage', '$skillName: $damage 데미지', '$skillName: $damageダメージ'); +// HP 형식이 동일하므로 단순화 +String combatSkillHeal(String skillName, int amount) => '$skillName: +$amount HP'; +String get uiHeal => _l('Heal', '힐', 'ヒール'); +String combatBuffActivated(String skillName) => + _l('$skillName activated!', '$skillName 발동!', '$skillName 発動!'); +String combatDebuffApplied(String skillName, String targetName) => _l( + '$skillName applied to $targetName!', + '$skillName → $targetName에 적용!', + '$skillName → $targetNameに適用!', + ); +String combatDotTick(String skillName, int damage) => _l( + '$skillName ticks for $damage damage', + '$skillName: $damage 지속 데미지', + '$skillName: $damage 継続ダメージ', + ); +// 포션 형식이 동일하므로 단순화 +String combatPotionUsed(String potionName, int amount, String statName) => + '$potionName: +$amount $statName'; +String combatPotionDrop(String potionName) => + _l('Dropped: $potionName', '획득: $potionName', '獲得: $potionName'); // 사망 화면 전투 로그 (death overlay) -String combatBlockedAttack(String monsterName, int reducedDamage) { - if (isKoreanLocale) return '$monsterName의 공격 방어 ($reducedDamage 감소)'; - if (isJapaneseLocale) return '$monsterNameの攻撃を防御 ($reducedDamage軽減)'; - return 'Blocked $monsterName\'s attack ($reducedDamage reduced)'; -} - -String combatParriedAttack(String monsterName, int reducedDamage) { - if (isKoreanLocale) return '$monsterName의 공격 패리 ($reducedDamage 감소)'; - if (isJapaneseLocale) return '$monsterNameの攻撃をパリィ ($reducedDamage軽減)'; - return 'Parried $monsterName\'s attack ($reducedDamage reduced)'; -} - -String get deathSelfInflicted { - if (isKoreanLocale) return '자해 데미지로 사망'; - if (isJapaneseLocale) return '自傷ダメージで死亡'; - return 'Self-inflicted damage'; -} +String combatBlockedAttack(String monsterName, int reducedDamage) => _l( + 'Blocked $monsterName\'s attack ($reducedDamage reduced)', + '$monsterName의 공격 방어 ($reducedDamage 감소)', + '$monsterNameの攻撃を防御 ($reducedDamage軽減)', + ); +String combatParriedAttack(String monsterName, int reducedDamage) => _l( + 'Parried $monsterName\'s attack ($reducedDamage reduced)', + '$monsterName의 공격 패리 ($reducedDamage 감소)', + '$monsterNameの攻撃をパリィ ($reducedDamage軽減)', + ); +String get deathSelfInflicted => + _l('Self-inflicted damage', '자해 데미지로 사망', '自傷ダメージで死亡'); // ============================================================================ // 퀘스트 캡션 // ============================================================================ -String questPatch(String name) { - if (isKoreanLocale) return '$name 패치하기'; - if (isJapaneseLocale) return '$name をパッチする'; - return 'Patch $name'; -} - -String questLocate(String item) { - if (isKoreanLocale) return '$item 찾기'; - if (isJapaneseLocale) return '$item を探す'; - return 'Locate $item'; -} - -String questTransfer(String item) { - if (isKoreanLocale) return '이 $item 전송하기'; - if (isJapaneseLocale) return 'この$item を転送する'; - return 'Transfer this $item'; -} - -String questDownload(String item) { - if (isKoreanLocale) return '$item 다운로드하기'; - if (isJapaneseLocale) return '$item をダウンロードする'; - return 'Download $item'; -} - -String questStabilize(String name) { - if (isKoreanLocale) return '$name 안정화하기'; - if (isJapaneseLocale) return '$name を安定化する'; - return 'Stabilize $name'; -} +String questPatch(String name) => + _l('Patch $name', '$name 패치하기', '$name をパッチする'); +String questLocate(String item) => + _l('Locate $item', '$item 찾기', '$item を探す'); +String questTransfer(String item) => + _l('Transfer this $item', '이 $item 전송하기', 'この$item を転送する'); +String questDownload(String item) => + _l('Download $item', '$item 다운로드하기', '$item をダウンロードする'); +String questStabilize(String name) => + _l('Stabilize $name', '$name 안정화하기', '$name を安定化する'); // ============================================================================ // Act 제목 // ============================================================================ -String actTitle(String romanNumeral) { - if (isKoreanLocale) return '$romanNumeral막'; - if (isJapaneseLocale) return '第$romanNumeral幕'; - return 'Act $romanNumeral'; -} +String actTitle(String romanNumeral) => + _l('Act $romanNumeral', '$romanNumeral막', '第$romanNumeral幕'); // ============================================================================ // 시네마틱 텍스트 - 시나리오 1: 캐시 존 // ============================================================================ -String cinematicCacheZone1() { - if (isKoreanLocale) return '지쳐서 손상된 네트워크의 안전한 캐시 존에 도착하다'; - if (isJapaneseLocale) return '疲れ果てて、破損したネットワークの安全なキャッシュゾーンに到着する'; - return 'Exhausted, you reach a safe Cache Zone in the corrupted network'; -} - -String cinematicCacheZone2() { - if (isKoreanLocale) return '옛 동맹들과 재연결하고 새로운 동료들을 포크하다'; - if (isJapaneseLocale) return '古い同盟者と再接続し、新しい仲間をフォークする'; - return 'You reconnect with old allies and fork new ones'; -} - -String cinematicCacheZone3() { - if (isKoreanLocale) return '디버거 기사단 회의에 참석하다'; - if (isJapaneseLocale) return 'デバッガー騎士団の会議に参加する'; - return 'You attend a council of the Debugger Knights'; -} - -String cinematicCacheZone4() { - if (isKoreanLocale) return '많은 버그들이 기다린다. 당신이 패치하도록 선택되었다!'; - if (isJapaneseLocale) return '多くのバグが待っている。あなたがパッチを当てるよう選ばれた!'; - return 'Many bugs await. You are chosen to patch them!'; -} +String cinematicCacheZone1() => _l( + 'Exhausted, you reach a safe Cache Zone in the corrupted network', + '지쳐서 손상된 네트워크의 안전한 캐시 존에 도착하다', + '疲れ果てて、破損したネットワークの安全なキャッシュゾーンに到着する', + ); +String cinematicCacheZone2() => _l( + 'You reconnect with old allies and fork new ones', + '옛 동맹들과 재연결하고 새로운 동료들을 포크하다', + '古い同盟者と再接続し、新しい仲間をフォークする', + ); +String cinematicCacheZone3() => _l( + 'You attend a council of the Debugger Knights', + '디버거 기사단 회의에 참석하다', + 'デバッガー騎士団の会議に参加する', + ); +String cinematicCacheZone4() => _l( + 'Many bugs await. You are chosen to patch them!', + '많은 버그들이 기다린다. 당신이 패치하도록 선택되었다!', + '多くのバグが待っている。あなたがパッチを当てるよう選ばれた!', + ); // ============================================================================ // 시네마틱 텍스트 - 시나리오 2: 전투 // ============================================================================ -String cinematicCombat1() { - if (isKoreanLocale) return '목표가 눈앞에 있지만, 치명적인 버그가 길을 막는다!'; - if (isJapaneseLocale) return 'ターゲットは目の前だが、致命的なバグが道を塞ぐ!'; - return 'Your target is in sight, but a critical bug blocks your path!'; -} - -String cinematicCombat2(String nemesis) { - if (isKoreanLocale) return '$nemesis와의 필사적인 디버깅 세션이 시작되다'; - if (isJapaneseLocale) return '$nemesisとの必死のデバッグセッションが始まる'; - return 'A desperate debugging session begins with $nemesis'; -} - -String cinematicCombatLocked(String nemesis) { - if (isKoreanLocale) return '$nemesis와 치열한 디버깅 중'; - if (isJapaneseLocale) return '$nemesisと激しいデバッグ中'; - return 'Locked in intense debugging with $nemesis'; -} - -String cinematicCombatCorrupts(String nemesis) { - if (isKoreanLocale) return '$nemesis가 당신의 스택 트레이스를 손상시키다'; - if (isJapaneseLocale) return '$nemesisがあなたのスタックトレースを破損させる'; - return '$nemesis corrupts your stack trace'; -} - -String cinematicCombatWorking(String nemesis) { - if (isKoreanLocale) return '당신의 패치가 $nemesis에게 효과를 보이는 것 같다'; - if (isJapaneseLocale) return 'あなたのパッチが$nemesisに効いているようだ'; - return 'Your patch seems to be working against $nemesis'; -} - -String cinematicCombatVictory(String nemesis) { - if (isKoreanLocale) return '승리! $nemesis가 패치되었다! 복구를 위해 시스템이 재부팅된다'; - if (isJapaneseLocale) return '勝利!$nemesisはパッチされた!復旧のためシステムが再起動する'; - return 'Victory! $nemesis is patched! System reboots for recovery'; -} - -String cinematicCombatWakeUp() { - if (isKoreanLocale) return '안전 모드에서 깨어나지만, 커널이 기다린다'; - if (isJapaneseLocale) return 'セーフモードで目覚めるが、カーネルが待ち構えている'; - return 'You wake up in a Safe Mode, but the kernel awaits'; -} +String cinematicCombat1() => _l( + 'Your target is in sight, but a critical bug blocks your path!', + '목표가 눈앞에 있지만, 치명적인 버그가 길을 막는다!', + 'ターゲットは目の前だが、致命的なバグが道を塞ぐ!', + ); +String cinematicCombat2(String nemesis) => _l( + 'A desperate debugging session begins with $nemesis', + '$nemesis와의 필사적인 디버깅 세션이 시작되다', + '$nemesisとの必死のデバッグセッションが始まる', + ); +String cinematicCombatLocked(String nemesis) => _l( + 'Locked in intense debugging with $nemesis', + '$nemesis와 치열한 디버깅 중', + '$nemesisと激しいデバッグ中', + ); +String cinematicCombatCorrupts(String nemesis) => _l( + '$nemesis corrupts your stack trace', + '$nemesis가 당신의 스택 트레이스를 손상시키다', + '$nemesisがあなたのスタックトレースを破損させる', + ); +String cinematicCombatWorking(String nemesis) => _l( + 'Your patch seems to be working against $nemesis', + '당신의 패치가 $nemesis에게 효과를 보이는 것 같다', + 'あなたのパッチが$nemesisに効いているようだ', + ); +String cinematicCombatVictory(String nemesis) => _l( + 'Victory! $nemesis is patched! System reboots for recovery', + '승리! $nemesis가 패치되었다! 복구를 위해 시스템이 재부팅된다', + '勝利!$nemesisはパッチされた!復旧のためシステムが再起動する', + ); +String cinematicCombatWakeUp() => _l( + 'You wake up in a Safe Mode, but the kernel awaits', + '안전 모드에서 깨어나지만, 커널이 기다린다', + 'セーフモードで目覚めるが、カーネルが待ち構えている', + ); // ============================================================================ // 시네마틱 텍스트 - 시나리오 3: 배신 // ============================================================================ -String cinematicBetrayal1(String guy) { - if (isKoreanLocale) return '안도감! $guy의 보안 서버에 도착하다'; - if (isJapaneseLocale) return '安堵!$guyのセキュアサーバーに到着する'; - return 'What relief! You reach the secure server of $guy'; -} - -String cinematicBetrayal2(String guy) { - if (isKoreanLocale) return '축하가 이어지고, $guy와 수상한 비밀 핸드셰이크를 나누다'; - if (isJapaneseLocale) return '祝賀が続き、$guyと怪しい秘密のハンドシェイクを交わす'; - return 'There is celebration, and a suspicious private handshake with $guy'; -} - -String cinematicBetrayal3(String item) { - if (isKoreanLocale) return '$item을 잊고 다시 가져오러 돌아가다'; - if (isJapaneseLocale) return '$itemを忘れて取りに戻る'; - return 'You forget your $item and go back to retrieve it'; -} - -String cinematicBetrayal4() { - if (isKoreanLocale) return '이게 뭐지!? 손상된 패킷을 가로채다!'; - if (isJapaneseLocale) return 'これは何だ!?破損したパケットを傍受する!'; - return 'What is this!? You intercept a corrupted packet!'; -} - -String cinematicBetrayal5(String guy) { - if (isKoreanLocale) return '$guy가 글리치 신의 백도어일 수 있을까?'; - if (isJapaneseLocale) return '$guyはグリッチゴッドのバックドアなのか?'; - return 'Could $guy be a backdoor for the Glitch God?'; -} - -String cinematicBetrayal6() { - if (isKoreanLocale) return '이 정보를 누구에게 맡길 수 있을까!? -- 바이너리 신전이다'; - if (isJapaneseLocale) return 'この情報を誰に託せるか!? -- バイナリ神殿だ'; - return 'Who can be trusted with this intel!? -- The Binary Temple, of course'; -} +String cinematicBetrayal1(String guy) => _l( + 'What relief! You reach the secure server of $guy', + '안도감! $guy의 보안 서버에 도착하다', + '安堵!$guyのセキュアサーバーに到着する', + ); +String cinematicBetrayal2(String guy) => _l( + 'There is celebration, and a suspicious private handshake with $guy', + '축하가 이어지고, $guy와 수상한 비밀 핸드셰이크를 나누다', + '祝賀が続き、$guyと怪しい秘密のハンドシェイクを交わす', + ); +String cinematicBetrayal3(String item) => _l( + 'You forget your $item and go back to retrieve it', + '$item을 잊고 다시 가져오러 돌아가다', + '$itemを忘れて取りに戻る', + ); +String cinematicBetrayal4() => _l( + 'What is this!? You intercept a corrupted packet!', + '이게 뭐지!? 손상된 패킷을 가로채다!', + 'これは何だ!?破損したパケットを傍受する!', + ); +String cinematicBetrayal5(String guy) => _l( + 'Could $guy be a backdoor for the Glitch God?', + '$guy가 글리치 신의 백도어일 수 있을까?', + '$guyはグリッチゴッドのバックドアなのか?', + ); +String cinematicBetrayal6() => _l( + 'Who can be trusted with this intel!? -- The Binary Temple, of course', + '이 정보를 누구에게 맡길 수 있을까!? -- 바이너리 신전이다', + 'この情報を誰に託せるか!? -- バイナリ神殿だ', + ); // ============================================================================ // 몬스터 수식어 // ============================================================================ -String modifierDead(String s) { - if (isKoreanLocale) return '쓰러진 $s'; - if (isJapaneseLocale) return '倒れた$s'; - return 'fallen $s'; -} +String modifierDead(String s) => _l('fallen $s', '쓰러진 $s', '倒れた$s'); +String modifierComatose(String s) => _l('lurking $s', '잠복하는 $s', '潜む$s'); +String modifierCrippled(String s) => _l('twisted $s', '흉측한 $s', '歪んだ$s'); +String modifierSick(String s) => _l('tainted $s', '오염된 $s', '汚染された$s'); +String modifierUndernourished(String s) => + _l('ravenous $s', '굶주린 $s', '飢えた$s'); +String modifierFoetal(String s) => _l('nascent $s', '태동기 $s', '胎動期$s'); +String modifierBaby(String s) => _l('fledgling $s', '초기형 $s', '初期型$s'); +String modifierPreadolescent(String s) => + _l('evolving $s', '진화 중인 $s', '進化中の$s'); +String modifierTeenage(String s) => _l('lesser $s', '하급 $s', '下級$s'); +String modifierUnderage(String s) => + _l('incomplete $s', '불완전한 $s', '不完全な$s'); +String modifierGreater(String s) => _l('greater $s', '상위 $s', '上位$s'); +String modifierMassive(String s) => _l('massive $s', '거대한 $s', '巨大な$s'); +String modifierEnormous(String s) => _l('enormous $s', '초거대 $s', '超巨大$s'); +String modifierGiant(String s) => + _l('giant $s', '자이언트 $s', 'ジャイアント$s'); -String modifierComatose(String s) { - if (isKoreanLocale) return '잠복하는 $s'; - if (isJapaneseLocale) return '潜む$s'; - return 'lurking $s'; -} - -String modifierCrippled(String s) { - if (isKoreanLocale) return '흉측한 $s'; - if (isJapaneseLocale) return '歪んだ$s'; - return 'twisted $s'; -} - -String modifierSick(String s) { - if (isKoreanLocale) return '오염된 $s'; - if (isJapaneseLocale) return '汚染された$s'; - return 'tainted $s'; -} - -String modifierUndernourished(String s) { - if (isKoreanLocale) return '굶주린 $s'; - if (isJapaneseLocale) return '飢えた$s'; - return 'ravenous $s'; -} - -String modifierFoetal(String s) { - if (isKoreanLocale) return '태동기 $s'; - if (isJapaneseLocale) return '胎動期$s'; - return 'nascent $s'; -} - -String modifierBaby(String s) { - if (isKoreanLocale) return '초기형 $s'; - if (isJapaneseLocale) return '初期型$s'; - return 'fledgling $s'; -} - -String modifierPreadolescent(String s) { - if (isKoreanLocale) return '진화 중인 $s'; - if (isJapaneseLocale) return '進化中の$s'; - return 'evolving $s'; -} - -String modifierTeenage(String s) { - if (isKoreanLocale) return '하급 $s'; - if (isJapaneseLocale) return '下級$s'; - return 'lesser $s'; -} - -String modifierUnderage(String s) { - if (isKoreanLocale) return '불완전한 $s'; - if (isJapaneseLocale) return '不完全な$s'; - return 'incomplete $s'; -} - -String modifierGreater(String s) { - if (isKoreanLocale) return '상위 $s'; - if (isJapaneseLocale) return '上位$s'; - return 'greater $s'; -} - -String modifierMassive(String s) { - if (isKoreanLocale) return '거대한 $s'; - if (isJapaneseLocale) return '巨大な$s'; - return 'massive $s'; -} - -String modifierEnormous(String s) { - if (isKoreanLocale) return '초거대 $s'; - if (isJapaneseLocale) return '超巨大$s'; - return 'enormous $s'; -} - -String modifierGiant(String s) { - if (isKoreanLocale) return '자이언트 $s'; - if (isJapaneseLocale) return 'ジャイアント$s'; - return 'giant $s'; -} - -String modifierTitanic(String s) { - if (isKoreanLocale) return '타이타닉 $s'; - if (isJapaneseLocale) return 'タイタニック$s'; - return 'titanic $s'; -} - -String modifierVeteran(String s) { - if (isKoreanLocale) return '베테랑 $s'; - if (isJapaneseLocale) return 'ベテラン$s'; - return 'veteran $s'; -} - -String modifierBattle(String s) { - if (isKoreanLocale) return '전투-$s'; - if (isJapaneseLocale) return '戦闘-$s'; - return 'Battle-$s'; -} - -String modifierCursed(String s) { - if (isKoreanLocale) return '저주받은 $s'; - if (isJapaneseLocale) return '呪われた$s'; - return 'cursed $s'; -} - -String modifierWarrior(String s) { - if (isKoreanLocale) return '전사 $s'; - if (isJapaneseLocale) return '戦士$s'; - return 'warrior $s'; -} - -String modifierWere(String s) { - if (isKoreanLocale) return '늑대인간-$s'; - if (isJapaneseLocale) return '狼男-$s'; - return 'Were-$s'; -} - -String modifierUndead(String s) { - if (isKoreanLocale) return '언데드 $s'; - if (isJapaneseLocale) return 'アンデッド$s'; - return 'undead $s'; -} - -String modifierDemon(String s) { - if (isKoreanLocale) return '데몬 $s'; - if (isJapaneseLocale) return 'デーモン$s'; - return 'demon $s'; -} - -String modifierMessianic(String s) { - if (isKoreanLocale) return '메시아닉 $s'; - if (isJapaneseLocale) return 'メシアニック$s'; - return 'messianic $s'; -} - -String modifierImaginary(String s) { - if (isKoreanLocale) return '상상의 $s'; - if (isJapaneseLocale) return '想像上の$s'; - return 'imaginary $s'; -} - -String modifierPassing(String s) { - if (isKoreanLocale) return '지나가는 $s'; - if (isJapaneseLocale) return '通りすがりの$s'; - return 'passing $s'; -} +String modifierTitanic(String s) => + _l('titanic $s', '타이타닉 $s', 'タイタニック$s'); +String modifierVeteran(String s) => + _l('veteran $s', '베테랑 $s', 'ベテラン$s'); +String modifierBattle(String s) => _l('Battle-$s', '전투-$s', '戦闘-$s'); +String modifierCursed(String s) => + _l('cursed $s', '저주받은 $s', '呪われた$s'); +String modifierWarrior(String s) => _l('warrior $s', '전사 $s', '戦士$s'); +String modifierWere(String s) => _l('Were-$s', '늑대인간-$s', '狼男-$s'); +String modifierUndead(String s) => + _l('undead $s', '언데드 $s', 'アンデッド$s'); +String modifierDemon(String s) => _l('demon $s', '데몬 $s', 'デーモン$s'); +String modifierMessianic(String s) => + _l('messianic $s', '메시아닉 $s', 'メシアニック$s'); +String modifierImaginary(String s) => + _l('imaginary $s', '상상의 $s', '想像上の$s'); +String modifierPassing(String s) => + _l('passing $s', '지나가는 $s', '通りすがりの$s'); // ============================================================================ // 시간 표시 // ============================================================================ -String roughTimeSeconds(int seconds) { - if (isKoreanLocale) return '$seconds초'; - if (isJapaneseLocale) return '$seconds秒'; - return '$seconds seconds'; -} - -String roughTimeMinutes(int minutes) { - if (isKoreanLocale) return '$minutes분'; - if (isJapaneseLocale) return '$minutes分'; - return '$minutes minutes'; -} - -String roughTimeHours(int hours) { - if (isKoreanLocale) return '$hours시간'; - if (isJapaneseLocale) return '$hours時間'; - return '$hours hours'; -} - -String roughTimeDays(int days) { - if (isKoreanLocale) return '$days일'; - if (isJapaneseLocale) return '$days日'; - return '$days days'; -} +String roughTimeSeconds(int seconds) => + _l('$seconds seconds', '$seconds초', '$seconds秒'); +String roughTimeMinutes(int minutes) => + _l('$minutes minutes', '$minutes분', '$minutes分'); +String roughTimeHours(int hours) => + _l('$hours hours', '$hours시간', '$hours時間'); +String roughTimeDays(int days) => _l('$days days', '$days일', '$days日'); // ============================================================================ // 영어 문법 함수 (한국어/일본어에서는 단순화) @@ -1219,780 +857,252 @@ String translateSpell(String englishName) { // 프론트 화면 텍스트 // ============================================================================ -String get uiHallOfFame { - if (isKoreanLocale) return '명예의 전당'; - if (isJapaneseLocale) return '栄誉の殿堂'; - return 'Hall of Fame'; -} - -String get uiLocalArena { - if (isKoreanLocale) return '로컬 아레나'; - if (isJapaneseLocale) return 'ローカルアリーナ'; - return 'Local Arena'; -} - -String get frontDescription { - if (isKoreanLocale) return '레트로 감성의 오프라인 싱글플레이어 RPG'; - if (isJapaneseLocale) return 'レトロ感のあるオフラインシングルプレイヤーRPG'; - return 'A retro-style offline single-player RPG'; -} - -String get frontTodayFocus { - if (isKoreanLocale) return '오늘의 중점'; - if (isJapaneseLocale) return '今日のフォーカス'; - return "Today's focus"; -} +String get uiHallOfFame => _l('Hall of Fame', '명예의 전당', '栄誉の殿堂'); +String get uiLocalArena => _l('Local Arena', '로컬 아레나', 'ローカルアリーナ'); +String get frontDescription => _l( + 'A retro-style offline single-player RPG', + '레트로 감성의 오프라인 싱글플레이어 RPG', + 'レトロ感のあるオフラインシングルプレイヤーRPG', + ); +String get frontTodayFocus => + _l("Today's focus", '오늘의 중점', '今日のフォーカス'); // ============================================================================ // 명예의 전당 화면 텍스트 // ============================================================================ -String get hofNoHeroes { - if (isKoreanLocale) return '영웅이 아직 없습니다'; - if (isJapaneseLocale) return 'まだ英雄がいません'; - return 'No heroes yet'; -} +String get hofNoHeroes => + _l('No heroes yet', '영웅이 아직 없습니다', 'まだ英雄がいません'); +String get hofDefeatGlitchGod => _l( + 'Defeat the Glitch God to enshrine your legend!', + '글리치 신을 처치하여 전설을 남기세요!', + 'グリッチゴッドを倒して伝説を刻もう!', + ); +String get hofVictory => _l('VICTORY!', '승리!', '勝利!'); +String get hofDefeatedGlitchGod => _l( + 'You have defeated the Glitch God!', + '글리치 신을 처치했습니다!', + 'グリッチゴッドを倒しました!', + ); +String get hofLegendEnshrined => _l( + 'Your legend has been enshrined in the Hall of Fame!', + '당신의 전설이 명예의 전당에 기록되었습니다!', + 'あなたの伝説が栄誉の殿堂に刻まれました!', + ); +String get hofViewHallOfFame => + _l('View Hall of Fame', '명예의 전당 보기', '栄誉の殿堂を見る'); +String get hofNewGame => _l('New Game', '새 게임', '新しいゲーム'); +String get hofLevel => _l('Level', '레벨', 'レベル'); +String get hofTime => _l('Time', '시간', '時間'); +String get hofDeaths => _l('Deaths', '사망', '死亡'); +String get hofQuests => _l('Quests', '퀘스트', 'クエスト'); +String get hofStats => _l('Statistics', '통계', '統計'); +String get hofMonsters => _l('Monsters', '몬스터', 'モンスター'); +String get hofCleared => _l('Cleared', '클리어', 'クリア'); +String get hofSkills => _l('Skills', '스킬', 'スキル'); +String get hofNoSkills => _l('No Skills', '스킬 없음', 'スキルなし'); +String get hofCombatStats => _l('Combat Stats', '전투 스탯', '戦闘ステータス'); +String get hofCharacterPreview => + _l('Character Preview', '캐릭터 미리보기', 'キャラクタープレビュー'); +String get buttonClose => _l('Close', '닫기', '閉じる'); -String get hofDefeatGlitchGod { - if (isKoreanLocale) return '글리치 신을 처치하여 전설을 남기세요!'; - if (isJapaneseLocale) return 'グリッチゴッドを倒して伝説を刻もう!'; - return 'Defeat the Glitch God to enshrine your legend!'; -} - -String get hofVictory { - if (isKoreanLocale) return '승리!'; - if (isJapaneseLocale) return '勝利!'; - return 'VICTORY!'; -} - -String get hofDefeatedGlitchGod { - if (isKoreanLocale) return '글리치 신을 처치했습니다!'; - if (isJapaneseLocale) return 'グリッチゴッドを倒しました!'; - return 'You have defeated the Glitch God!'; -} - -String get hofLegendEnshrined { - if (isKoreanLocale) return '당신의 전설이 명예의 전당에 기록되었습니다!'; - if (isJapaneseLocale) return 'あなたの伝説が栄誉の殿堂に刻まれました!'; - return 'Your legend has been enshrined in the Hall of Fame!'; -} - -String get hofViewHallOfFame { - if (isKoreanLocale) return '명예의 전당 보기'; - if (isJapaneseLocale) return '栄誉の殿堂を見る'; - return 'View Hall of Fame'; -} - -String get hofNewGame { - if (isKoreanLocale) return '새 게임'; - if (isJapaneseLocale) return '新しいゲーム'; - return 'New Game'; -} - -String get hofLevel { - if (isKoreanLocale) return '레벨'; - if (isJapaneseLocale) return 'レベル'; - return 'Level'; -} - -String get hofTime { - if (isKoreanLocale) return '시간'; - if (isJapaneseLocale) return '時間'; - return 'Time'; -} - -String get hofDeaths { - if (isKoreanLocale) return '사망'; - if (isJapaneseLocale) return '死亡'; - return 'Deaths'; -} - -String get hofQuests { - if (isKoreanLocale) return '퀘스트'; - if (isJapaneseLocale) return 'クエスト'; - return 'Quests'; -} - -String get hofStats { - if (isKoreanLocale) return '통계'; - if (isJapaneseLocale) return '統計'; - return 'Statistics'; -} - -String get hofMonsters { - if (isKoreanLocale) return '몬스터'; - if (isJapaneseLocale) return 'モンスター'; - return 'Monsters'; -} - -String get hofCleared { - if (isKoreanLocale) return '클리어'; - if (isJapaneseLocale) return 'クリア'; - return 'Cleared'; -} - -String get hofSkills { - if (isKoreanLocale) return '스킬'; - if (isJapaneseLocale) return 'スキル'; - return 'Skills'; -} - -String get hofNoSkills { - if (isKoreanLocale) return '스킬 없음'; - if (isJapaneseLocale) return 'スキルなし'; - return 'No Skills'; -} - -String get hofCombatStats { - if (isKoreanLocale) return '전투 스탯'; - if (isJapaneseLocale) return '戦闘ステータス'; - return 'Combat Stats'; -} - -String get hofCharacterPreview { - if (isKoreanLocale) return '캐릭터 미리보기'; - if (isJapaneseLocale) return 'キャラクタープレビュー'; - return 'Character Preview'; -} - -String get buttonClose { - if (isKoreanLocale) return '닫기'; - if (isJapaneseLocale) return '閉じる'; - return 'Close'; -} - -String uiLevel(int level) { - if (isKoreanLocale) return 'Lv.$level'; - if (isJapaneseLocale) return 'Lv.$level'; - return 'Lv.$level'; -} +// Lv. 형식이 모든 언어에서 동일 +String uiLevel(int level) => 'Lv.$level'; // ============================================================================ // 시네마틱 뷰 텍스트 // ============================================================================ -String get uiSkip { - if (isKoreanLocale) return '건너뛰기'; - if (isJapaneseLocale) return 'スキップ'; - return 'SKIP'; -} +String get uiSkip => _l('SKIP', '건너뛰기', 'スキップ'); // ============================================================================ // 게임 플레이 화면 텍스트 // ============================================================================ -String get uiLevelUp { - if (isKoreanLocale) return '레벨 업!'; - if (isJapaneseLocale) return 'レベルアップ!'; - return 'Level Up!'; -} - -String uiQuestComplete(String questName) { - if (isKoreanLocale) return '퀘스트 완료: $questName'; - if (isJapaneseLocale) return 'クエスト完了: $questName'; - return 'Quest Complete: $questName'; -} +String get uiLevelUp => _l('Level Up!', '레벨 업!', 'レベルアップ!'); +String uiQuestComplete(String questName) => + _l('Quest Complete: $questName', '퀘스트 완료: $questName', 'クエスト完了: $questName'); // ============================================================================ // 장비 패널 텍스트 // ============================================================================ -String get uiEquipmentScore { - if (isKoreanLocale) return '장비 점수'; - if (isJapaneseLocale) return '装備スコア'; - return 'Equipment Score'; -} - -String get uiEmpty { - if (isKoreanLocale) return '(비어있음)'; - if (isJapaneseLocale) return '(空)'; - return '(empty)'; -} - -String uiWeight(int weight) { - if (isKoreanLocale) return '무게 $weight'; - if (isJapaneseLocale) return '重量 $weight'; - return 'Wt.$weight'; -} - +String get uiEquipmentScore => + _l('Equipment Score', '장비 점수', '装備スコア'); +String get uiEmpty => _l('(empty)', '(비어있음)', '(空)'); +String uiWeight(int weight) => _l('Wt.$weight', '무게 $weight', '重量 $weight'); /// 남은 시간 표시 -String uiTimeRemaining(String time) { - if (isKoreanLocale) return '$time 남음'; - if (isJapaneseLocale) return '残り$time'; - return '$time remaining'; -} +String uiTimeRemaining(String time) => + _l('$time remaining', '$time 남음', '残り$time'); // 장비 슬롯 이름 -String get slotWeapon { - if (isKoreanLocale) return '무기'; - if (isJapaneseLocale) return '武器'; - return 'Weapon'; -} - -String get slotShield { - if (isKoreanLocale) return '방패'; - if (isJapaneseLocale) return '盾'; - return 'Shield'; -} - -String get slotHelm { - if (isKoreanLocale) return '투구'; - if (isJapaneseLocale) return '兜'; - return 'Helm'; -} - -String get slotHauberk { - if (isKoreanLocale) return '갑옷'; - if (isJapaneseLocale) return '鎧'; - return 'Hauberk'; -} - -String get slotBrassairts { - if (isKoreanLocale) return '상완갑'; - if (isJapaneseLocale) return '上腕甲'; - return 'Brassairts'; -} - -String get slotVambraces { - if (isKoreanLocale) return '전완갑'; - if (isJapaneseLocale) return '前腕甲'; - return 'Vambraces'; -} - -String get slotGauntlets { - if (isKoreanLocale) return '건틀릿'; - if (isJapaneseLocale) return 'ガントレット'; - return 'Gauntlets'; -} - -String get slotGambeson { - if (isKoreanLocale) return '패딩'; - if (isJapaneseLocale) return 'パッデッドアーマー'; - return 'Gambeson'; -} - -String get slotCuisses { - if (isKoreanLocale) return '허벅지갑'; - if (isJapaneseLocale) return '腿当て'; - return 'Cuisses'; -} - -String get slotGreaves { - if (isKoreanLocale) return '정강이갑'; - if (isJapaneseLocale) return '脛当て'; - return 'Greaves'; -} - -String get slotSollerets { - if (isKoreanLocale) return '철제부츠'; - if (isJapaneseLocale) return '鉄靴'; - return 'Sollerets'; -} +String get slotWeapon => _l('Weapon', '무기', '武器'); +String get slotShield => _l('Shield', '방패', '盾'); +String get slotHelm => _l('Helm', '투구', '兜'); +String get slotHauberk => _l('Hauberk', '갑옷', '鎧'); +String get slotBrassairts => _l('Brassairts', '상완갑', '上腕甲'); +String get slotVambraces => _l('Vambraces', '전완갑', '前腕甲'); +String get slotGauntlets => _l('Gauntlets', '건틀릿', 'ガントレット'); +String get slotGambeson => _l('Gambeson', '패딩', 'パッデッドアーマー'); +String get slotCuisses => _l('Cuisses', '허벅지갑', '腿当て'); +String get slotGreaves => _l('Greaves', '정강이갑', '脛当て'); +String get slotSollerets => _l('Sollerets', '철제부츠', '鉄靴'); // 스탯 약어 (장비용) -String get statAtk { - if (isKoreanLocale) return '공격'; - if (isJapaneseLocale) return '攻撃'; - return 'ATK'; -} - -String get statMAtk { - if (isKoreanLocale) return '마공'; - if (isJapaneseLocale) return '魔攻'; - return 'MATK'; -} - -String get statCri { - if (isKoreanLocale) return '치명'; - if (isJapaneseLocale) return 'クリ'; - return 'CRI'; -} - -String get statParry { - if (isKoreanLocale) return '패리'; - if (isJapaneseLocale) return 'パリィ'; - return 'PARRY'; -} - -String get statDef { - if (isKoreanLocale) return '방어'; - if (isJapaneseLocale) return '防御'; - return 'DEF'; -} - -String get statMDef { - if (isKoreanLocale) return '마방'; - if (isJapaneseLocale) return '魔防'; - return 'MDEF'; -} - -String get statBlock { - if (isKoreanLocale) return '블록'; - if (isJapaneseLocale) return 'ブロック'; - return 'BLOCK'; -} - -String get statEva { - if (isKoreanLocale) return '회피'; - if (isJapaneseLocale) return '回避'; - return 'EVA'; -} - -String get statHp { - if (isKoreanLocale) return 'HP'; - if (isJapaneseLocale) return 'HP'; - return 'HP'; -} - -String get statMp { - if (isKoreanLocale) return 'MP'; - if (isJapaneseLocale) return 'MP'; - return 'MP'; -} - -String get statSpeed { - if (isKoreanLocale) return '속도'; - if (isJapaneseLocale) return '速度'; - return 'SPEED'; -} +String get statAtk => _l('ATK', '공격', '攻撃'); +String get statMAtk => _l('MATK', '마공', '魔攻'); +String get statCri => _l('CRI', '치명', 'クリ'); +String get statParry => _l('PARRY', '패리', 'パリィ'); +String get statDef => _l('DEF', '방어', '防御'); +String get statMDef => _l('MDEF', '마방', '魔防'); +String get statBlock => _l('BLOCK', '블록', 'ブロック'); +String get statEva => _l('EVA', '회피', '回避'); +// HP/MP는 모든 언어에서 동일 +String get statHp => 'HP'; +String get statMp => 'MP'; +String get statSpeed => _l('SPEED', '속도', '速度'); // ============================================================================ // 스킬 패널 텍스트 // ============================================================================ -String get uiDot { - if (isKoreanLocale) return '지속'; - if (isJapaneseLocale) return 'DOT'; - return 'DOT'; -} +String get uiDot => _l('DOT', '지속', 'DOT'); // ============================================================================ // 아이템 희귀도 // ============================================================================ -String get rarityCommon { - if (isKoreanLocale) return '일반'; - if (isJapaneseLocale) return 'コモン'; - return 'COMMON'; -} - -String get rarityUncommon { - if (isKoreanLocale) return '고급'; - if (isJapaneseLocale) return 'アンコモン'; - return 'UNCOMMON'; -} - -String get rarityRare { - if (isKoreanLocale) return '희귀'; - if (isJapaneseLocale) return 'レア'; - return 'RARE'; -} - -String get rarityEpic { - if (isKoreanLocale) return '영웅'; - if (isJapaneseLocale) return 'エピック'; - return 'EPIC'; -} - -String get rarityLegendary { - if (isKoreanLocale) return '전설'; - if (isJapaneseLocale) return 'レジェンダリー'; - return 'LEGENDARY'; -} +String get rarityCommon => _l('COMMON', '일반', 'コモン'); +String get rarityUncommon => _l('UNCOMMON', '고급', 'アンコモン'); +String get rarityRare => _l('RARE', '희귀', 'レア'); +String get rarityEpic => _l('EPIC', '영웅', 'エピック'); +String get rarityLegendary => _l('LEGENDARY', '전설', 'レジェンダリー'); // ============================================================================ // 캐릭터 생성 화면 텍스트 // ============================================================================ -String uiRollHistory(int count) { - if (isKoreanLocale) return '리롤 기록: $count회'; - if (isJapaneseLocale) return 'リロール履歴: $count回'; - return '$count roll(s) in history'; -} - -String get uiEnterName { - if (isKoreanLocale) return '이름을 입력해주세요.'; - if (isJapaneseLocale) return '名前を入力してください。'; - return 'Please enter a name.'; -} - -String get uiTestMode { - if (isKoreanLocale) return '테스트 모드'; - if (isJapaneseLocale) return 'テストモード'; - return 'Test Mode'; -} - -String get uiTestModeDesc { - if (isKoreanLocale) return '웹에서 모바일 레이아웃 사용'; - if (isJapaneseLocale) return 'Webでモバイルレイアウトを使用'; - return 'Use mobile layout on web'; -} +String uiRollHistory(int count) => + _l('$count roll(s) in history', '리롤 기록: $count회', 'リロール履歴: $count回'); +String get uiEnterName => _l( + 'Please enter a name.', + '이름을 입력해주세요.', + '名前を入力してください。', + ); +String get uiTestMode => _l('Test Mode', '테스트 모드', 'テストモード'); +String get uiTestModeDesc => _l( + 'Use mobile layout on web', + '웹에서 모바일 레이아웃 사용', + 'Webでモバイルレイアウトを使用', + ); // ============================================================================ // 캐로셀 네비게이션 텍스트 // ============================================================================ -String get navSkills { - if (isKoreanLocale) return '스킬'; - if (isJapaneseLocale) return 'スキル'; - return 'Skills'; -} - -String get navInventory { - if (isKoreanLocale) return '인벤토리'; - if (isJapaneseLocale) return '所持品'; - return 'Inventory'; -} - -String get navEquipment { - if (isKoreanLocale) return '장비'; - if (isJapaneseLocale) return '装備'; - return 'Equip'; -} - -String get navCharacter { - if (isKoreanLocale) return '캐릭터'; - if (isJapaneseLocale) return 'キャラ'; - return 'Character'; -} - -String get navCombatLog { - if (isKoreanLocale) return '전투로그'; - if (isJapaneseLocale) return '戦闘ログ'; - return 'Combat'; -} - -String get navStory { - if (isKoreanLocale) return '스토리'; - if (isJapaneseLocale) return 'ストーリー'; - return 'Story'; -} - -String get navQuest { - if (isKoreanLocale) return '퀘스트'; - if (isJapaneseLocale) return 'クエスト'; - return 'Quest'; -} +String get navSkills => _l('Skills', '스킬', 'スキル'); +String get navInventory => _l('Inventory', '인벤토리', '所持品'); +String get navEquipment => _l('Equip', '장비', '装備'); +String get navCharacter => _l('Character', '캐릭터', 'キャラ'); +String get navCombatLog => _l('Combat', '전투로그', '戦闘ログ'); +String get navStory => _l('Story', '스토리', 'ストーリー'); +String get navQuest => _l('Quest', '퀘스트', 'クエスト'); // ============================================================================ // 옵션 메뉴 텍스트 // ============================================================================ -String get menuOptions { - if (isKoreanLocale) return '옵션'; - if (isJapaneseLocale) return 'オプション'; - return 'Options'; -} +String get menuOptions => _l('Options', '옵션', 'オプション'); +String get menuPause => _l('Pause', '일시정지', '一時停止'); +String get menuResume => _l('Resume', '재개', '再開'); +String get menuSpeed => _l('Speed', '속도', '速度'); +String get menuSave => _l('Save', '저장', 'セーブ'); +String get menuSaved => _l('Game saved', '저장되었습니다', '保存しました'); +String get menuLanguage => _l('Language', '언어', '言語'); +String get languageEnglish => _l('English', '영어', '英語'); +String get languageKorean => _l('Korean', '한국어', '韓国語'); +String get languageJapanese => _l('Japanese', '일본어', '日本語'); +String get menuDeleteSave => _l('Delete Save', '세이브 삭제', 'セーブ削除'); +String get menuNewGame => _l('New Game', '새로하기', '新規ゲーム'); +String get confirmDeleteTitle => _l('Delete Save', '세이브 삭제', 'セーブ削除'); -String get menuPause { - if (isKoreanLocale) return '일시정지'; - if (isJapaneseLocale) return '一時停止'; - return 'Pause'; -} - -String get menuResume { - if (isKoreanLocale) return '재개'; - if (isJapaneseLocale) return '再開'; - return 'Resume'; -} - -String get menuSpeed { - if (isKoreanLocale) return '속도'; - if (isJapaneseLocale) return '速度'; - return 'Speed'; -} - -String get menuSave { - if (isKoreanLocale) return '저장'; - if (isJapaneseLocale) return 'セーブ'; - return 'Save'; -} - -String get menuSaved { - if (isKoreanLocale) return '저장되었습니다'; - if (isJapaneseLocale) return '保存しました'; - return 'Game saved'; -} - -String get menuLanguage { - if (isKoreanLocale) return '언어'; - if (isJapaneseLocale) return '言語'; - return 'Language'; -} - -String get languageEnglish { - if (isKoreanLocale) return '영어'; - if (isJapaneseLocale) return '英語'; - return 'English'; -} - -String get languageKorean { - if (isKoreanLocale) return '한국어'; - if (isJapaneseLocale) return '韓国語'; - return 'Korean'; -} - -String get languageJapanese { - if (isKoreanLocale) return '일본어'; - if (isJapaneseLocale) return '日本語'; - return 'Japanese'; -} - -String get menuDeleteSave { - if (isKoreanLocale) return '세이브 삭제'; - if (isJapaneseLocale) return 'セーブ削除'; - return 'Delete Save'; -} - -String get menuNewGame { - if (isKoreanLocale) return '새로하기'; - if (isJapaneseLocale) return '新規ゲーム'; - return 'New Game'; -} - -String get confirmDeleteTitle { - if (isKoreanLocale) return '세이브 삭제'; - if (isJapaneseLocale) return 'セーブ削除'; - return 'Delete Save'; -} - -String get confirmDeleteMessage { - if (isKoreanLocale) return '정말 삭제하시겠습니까?\n모든 진행 상황이 사라집니다.'; - if (isJapaneseLocale) return '本当に削除しますか?\nすべての進行状況が失われます。'; - return 'Are you sure?\nAll progress will be lost.'; -} - -String get buttonConfirm { - if (isKoreanLocale) return '확인'; - if (isJapaneseLocale) return '確認'; - return 'Confirm'; -} - -String get buttonCancel { - if (isKoreanLocale) return '취소'; - if (isJapaneseLocale) return 'キャンセル'; - return 'Cancel'; -} +String get confirmDeleteMessage => _l( + 'Are you sure?\nAll progress will be lost.', + '정말 삭제하시겠습니까?\n모든 진행 상황이 사라집니다.', + '本当に削除しますか?\nすべての進行状況が失われます。', + ); +String get buttonConfirm => _l('Confirm', '확인', '確認'); +String get buttonCancel => _l('Cancel', '취소', 'キャンセル'); // ============================================================================ // 프론트 화면 경고/푸터 텍스트 // ============================================================================ -String get uiWarning { - if (isKoreanLocale) return '경고'; - if (isJapaneseLocale) return '警告'; - return 'Warning'; -} - -String get warningDeleteSave { - if (isKoreanLocale) return '기존 저장 파일이 삭제됩니다. 계속하시겠습니까?'; - if (isJapaneseLocale) return '既存のセーブファイルが削除されます。続行しますか?'; - return 'Existing save file will be deleted. Continue?'; -} - -String get copyrightText { - // 카피라이트 텍스트는 언어에 따라 변하지 않음 - return '© 2025 NatureBridgeAi & cclabs all rights reserved'; -} +String get uiWarning => _l('Warning', '경고', '警告'); +String get warningDeleteSave => _l( + 'Existing save file will be deleted. Continue?', + '기존 저장 파일이 삭제됩니다. 계속하시겠습니까?', + '既存のセーブファイルが削除されます。続行しますか?', + ); +// 카피라이트 텍스트는 언어에 따라 변하지 않음 +String get copyrightText => '© 2025 NatureBridgeAi & cclabs all rights reserved'; // ============================================================================ // 테마 설정 텍스트 // ============================================================================ -String get menuTheme { - if (isKoreanLocale) return '테마'; - if (isJapaneseLocale) return 'テーマ'; - return 'Theme'; -} - -String get themeLight { - if (isKoreanLocale) return '라이트'; - if (isJapaneseLocale) return 'ライト'; - return 'Light'; -} - -String get themeDark { - if (isKoreanLocale) return '다크'; - if (isJapaneseLocale) return 'ダーク'; - return 'Dark'; -} - -String get themeSystem { - if (isKoreanLocale) return '시스템'; - if (isJapaneseLocale) return 'システム'; - return 'System'; -} +String get menuTheme => _l('Theme', '테마', 'テーマ'); +String get themeLight => _l('Light', '라이트', 'ライト'); +String get themeDark => _l('Dark', '다크', 'ダーク'); +String get themeSystem => _l('System', '시스템', 'システム'); // ============================================================================ // 로딩 텍스트 // ============================================================================ -String get uiLoading { - if (isKoreanLocale) return '불러오는 중...'; - if (isJapaneseLocale) return '読み込み中...'; - return 'Loading...'; -} +String get uiLoading => _l('Loading...', '불러오는 중...', '読み込み中...'); // ============================================================================ // 설정 화면 텍스트 // ============================================================================ -String get uiSettings { - if (isKoreanLocale) return '설정'; - if (isJapaneseLocale) return '設定'; - return 'Settings'; -} - -String get uiStatistics { - if (isKoreanLocale) return '통계'; - if (isJapaneseLocale) return '統計'; - return 'Statistics'; -} - -String get uiHelp { - if (isKoreanLocale) return '도움말'; - if (isJapaneseLocale) return 'ヘルプ'; - return 'Help'; -} - -String get uiTheme { - if (isKoreanLocale) return '테마'; - if (isJapaneseLocale) return 'テーマ'; - return 'Theme'; -} - -String get uiThemeLight { - if (isKoreanLocale) return '라이트'; - if (isJapaneseLocale) return 'ライト'; - return 'Light'; -} - -String get uiThemeDark { - if (isKoreanLocale) return '다크'; - if (isJapaneseLocale) return 'ダーク'; - return 'Dark'; -} - -String get uiThemeSystem { - if (isKoreanLocale) return '시스템'; - if (isJapaneseLocale) return 'システム'; - return 'System'; -} - -String get uiLanguage { - if (isKoreanLocale) return '언어'; - if (isJapaneseLocale) return '言語'; - return 'Language'; -} - -String get uiSound { - if (isKoreanLocale) return '사운드'; - if (isJapaneseLocale) return 'サウンド'; - return 'Sound'; -} - -String get uiBgmVolume { - if (isKoreanLocale) return 'BGM 볼륨'; - if (isJapaneseLocale) return 'BGM音量'; - return 'BGM Volume'; -} - -String get uiSfxVolume { - if (isKoreanLocale) return '효과음 볼륨'; - if (isJapaneseLocale) return '効果音音量'; - return 'SFX Volume'; -} - -String get uiSoundOff { - if (isKoreanLocale) return '음소거'; - if (isJapaneseLocale) return 'ミュート'; - return 'Muted'; -} - -String get uiAnimationSpeed { - if (isKoreanLocale) return '애니메이션 속도'; - if (isJapaneseLocale) return 'アニメーション速度'; - return 'Animation Speed'; -} - -String get uiSpeedSlow { - if (isKoreanLocale) return '느림'; - if (isJapaneseLocale) return '遅い'; - return 'Slow'; -} - -String get uiSpeedNormal { - if (isKoreanLocale) return '보통'; - if (isJapaneseLocale) return '普通'; - return 'Normal'; -} - -String get uiSpeedFast { - if (isKoreanLocale) return '빠름'; - if (isJapaneseLocale) return '速い'; - return 'Fast'; -} - -String get uiAbout { - if (isKoreanLocale) return '정보'; - if (isJapaneseLocale) return '情報'; - return 'About'; -} - -String get uiAboutDescription { - if (isKoreanLocale) return 'ASCII 아트와 레트로 감성의 오프라인 싱글플레이어 RPG입니다.'; - if (isJapaneseLocale) return 'ASCIIアートとレトロ感のあるオフラインシングルプレイヤーRPGです。'; - return 'An offline single-player RPG with ASCII art and retro vibes.'; -} +String get uiSettings => _l('Settings', '설정', '設定'); +String get uiStatistics => _l('Statistics', '통계', '統計'); +String get uiHelp => _l('Help', '도움말', 'ヘルプ'); +String get uiTheme => _l('Theme', '테마', 'テーマ'); +String get uiThemeLight => _l('Light', '라이트', 'ライト'); +String get uiThemeDark => _l('Dark', '다크', 'ダーク'); +String get uiThemeSystem => _l('System', '시스템', 'システム'); +String get uiLanguage => _l('Language', '언어', '言語'); +String get uiSound => _l('Sound', '사운드', 'サウンド'); +String get uiBgmVolume => _l('BGM Volume', 'BGM 볼륨', 'BGM音量'); +String get uiSfxVolume => _l('SFX Volume', '효과음 볼륨', '効果音音量'); +String get uiSoundOff => _l('Muted', '음소거', 'ミュート'); +String get uiAnimationSpeed => + _l('Animation Speed', '애니메이션 속도', 'アニメーション速度'); +String get uiSpeedSlow => _l('Slow', '느림', '遅い'); +String get uiSpeedNormal => _l('Normal', '보통', '普通'); +String get uiSpeedFast => _l('Fast', '빠름', '速い'); +String get uiAbout => _l('About', '정보', '情報'); +String get uiAboutDescription => _l( + 'An offline single-player RPG with ASCII art and retro vibes.', + 'ASCII 아트와 레트로 감성의 오프라인 싱글플레이어 RPG입니다.', + 'ASCIIアートとレトロ感のあるオフラインシングルプレイヤーRPGです。', + ); // ============================================================================ // 공통 UI 액션 텍스트 // ============================================================================ -String get uiConfirm { - if (isKoreanLocale) return '확인'; - if (isJapaneseLocale) return '確認'; - return 'Confirm'; -} +String get uiConfirm => _l('Confirm', '확인', '確認'); -String get uiCancel { - if (isKoreanLocale) return '취소'; - if (isJapaneseLocale) return 'キャンセル'; - return 'Cancel'; -} - -String get uiDelete { - if (isKoreanLocale) return '삭제'; - if (isJapaneseLocale) return '削除'; - return 'Delete'; -} - -String get uiConfirmDelete { - if (isKoreanLocale) return '정말로 삭제하시겠습니까?'; - if (isJapaneseLocale) return '本当に削除しますか?'; - return 'Are you sure you want to delete?'; -} - -String get uiDeleted { - if (isKoreanLocale) return '삭제되었습니다'; - if (isJapaneseLocale) return '削除されました'; - return 'Deleted'; -} - -String get uiError { - if (isKoreanLocale) return '오류가 발생했습니다'; - if (isJapaneseLocale) return 'エラーが発生しました'; - return 'An error occurred'; -} - -String get uiSaved { - if (isKoreanLocale) return '저장됨'; - if (isJapaneseLocale) return '保存しました'; - return 'Saved'; -} - -String get uiSaveBattleLog { - if (isKoreanLocale) return '배틀로그 저장'; - if (isJapaneseLocale) return 'バトルログ保存'; - return 'Save Battle Log'; -} +String get uiCancel => _l('Cancel', '취소', 'キャンセル'); +String get uiDelete => _l('Delete', '삭제', '削除'); +String get uiConfirmDelete => + _l('Are you sure you want to delete?', '정말로 삭제하시겠습니까?', '本当に削除しますか?'); +String get uiDeleted => _l('Deleted', '삭제되었습니다', '削除されました'); +String get uiError => + _l('An error occurred', '오류가 발생했습니다', 'エラーが発生しました'); +String get uiSaved => _l('Saved', '저장됨', '保存しました'); +String get uiSaveBattleLog => + _l('Save Battle Log', '배틀로그 저장', 'バトルログ保存');