feat(game): 포션 시스템 및 UI 패널 추가
- 포션 시스템 구현 (PotionService, Potion 모델) - 포션 인벤토리 패널 위젯 - 활성 버프 패널 위젯 - 장비 스탯 패널 위젯 - 스킬 시스템 확장 - 일본어 번역 추가 - 전투 이벤트/상태 모델 개선
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
// 게임 텍스트 로컬라이제이션 (BuildContext 없이 사용)
|
||||
// progress_service.dart, pq_logic.dart 등에서 사용
|
||||
// 지원 언어: 한국어(ko), 영어(en), 일본어(ja)
|
||||
|
||||
import 'package:askiineverdie/data/game_translations_ko.dart';
|
||||
import 'package:askiineverdie/data/game_translations_ja.dart';
|
||||
|
||||
/// 현재 게임 로케일 설정 (전역)
|
||||
String _currentLocale = 'en';
|
||||
@@ -17,6 +19,9 @@ void setGameLocale(String locale) {
|
||||
/// 한국어 여부 확인
|
||||
bool get isKoreanLocale => _currentLocale == 'ko';
|
||||
|
||||
/// 일본어 여부 확인
|
||||
bool get isJapaneseLocale => _currentLocale == 'ja';
|
||||
|
||||
// ============================================================================
|
||||
// 프롤로그 텍스트
|
||||
// ============================================================================
|
||||
@@ -35,199 +40,417 @@ const _prologueTextsKo = [
|
||||
'예상치 못한 결의로 널(Null) 왕국을 향한 위험한 여정을 시작하다',
|
||||
];
|
||||
|
||||
List<String> get prologueTexts =>
|
||||
isKoreanLocale ? _prologueTextsKo : _prologueTextsEn;
|
||||
const _prologueTextsJa = [
|
||||
'コードの神から不吉な幻影を受ける',
|
||||
'老いたコンパイラー賢者が予言を明かす:「グリッチゴッドが目覚めた」',
|
||||
'突然のバッファオーバーフローが村をリセットし、あなただけが唯一の生存者となる',
|
||||
'予想外の決意で、ヌル(Null)王国への危険な旅に出発する',
|
||||
];
|
||||
|
||||
List<String> get prologueTexts {
|
||||
if (isKoreanLocale) return _prologueTextsKo;
|
||||
if (isJapaneseLocale) return _prologueTextsJa;
|
||||
return _prologueTextsEn;
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 태스크 캡션
|
||||
// ============================================================================
|
||||
|
||||
String get taskCompiling => isKoreanLocale ? '컴파일 중' : 'Compiling';
|
||||
String get taskCompiling {
|
||||
if (isKoreanLocale) return '컴파일 중';
|
||||
if (isJapaneseLocale) return 'コンパイル中';
|
||||
return 'Compiling';
|
||||
}
|
||||
|
||||
String get taskPrologue => isKoreanLocale ? '프롤로그' : 'Prologue';
|
||||
String get taskPrologue {
|
||||
if (isKoreanLocale) return '프롤로그';
|
||||
if (isJapaneseLocale) return 'プロローグ';
|
||||
return 'Prologue';
|
||||
}
|
||||
|
||||
String taskHeadingToMarket() =>
|
||||
isKoreanLocale ? '전리품을 팔기 위해 데이터 마켓으로 이동 중' : '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() =>
|
||||
isKoreanLocale ? '테크 샵에서 하드웨어 업그레이드 중' : 'Upgrading hardware at the Tech Shop';
|
||||
String taskUpgradingHardware() {
|
||||
if (isKoreanLocale) return '테크 샵에서 하드웨어 업그레이드 중';
|
||||
if (isJapaneseLocale) return 'テックショップでハードウェアをアップグレード中';
|
||||
return 'Upgrading hardware at the Tech Shop';
|
||||
}
|
||||
|
||||
String taskEnteringDebugZone() =>
|
||||
isKoreanLocale ? '디버그 존 진입 중' : 'Entering the Debug Zone';
|
||||
String taskEnteringDebugZone() {
|
||||
if (isKoreanLocale) return '디버그 존 진입 중';
|
||||
if (isJapaneseLocale) return 'デバッグゾーンに進入中';
|
||||
return 'Entering the Debug Zone';
|
||||
}
|
||||
|
||||
String taskDebugging(String monsterName) =>
|
||||
isKoreanLocale ? '$monsterName 디버깅 중' : 'Debugging $monsterName';
|
||||
String taskDebugging(String monsterName) {
|
||||
if (isKoreanLocale) return '$monsterName 디버깅 중';
|
||||
if (isJapaneseLocale) return '$monsterName をデバッグ中';
|
||||
return 'Debugging $monsterName';
|
||||
}
|
||||
|
||||
String taskSelling(String itemDescription) =>
|
||||
isKoreanLocale ? '$itemDescription 판매 중' : 'Selling $itemDescription';
|
||||
String taskSelling(String itemDescription) {
|
||||
if (isKoreanLocale) return '$itemDescription 판매 중';
|
||||
if (isJapaneseLocale) return '$itemDescription を販売中';
|
||||
return 'Selling $itemDescription';
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 퀘스트 캡션
|
||||
// ============================================================================
|
||||
|
||||
String questPatch(String name) =>
|
||||
isKoreanLocale ? '$name 패치하기' : 'Patch $name';
|
||||
String questPatch(String name) {
|
||||
if (isKoreanLocale) return '$name 패치하기';
|
||||
if (isJapaneseLocale) return '$name をパッチする';
|
||||
return 'Patch $name';
|
||||
}
|
||||
|
||||
String questLocate(String item) =>
|
||||
isKoreanLocale ? '$item 찾기' : 'Locate $item';
|
||||
String questLocate(String item) {
|
||||
if (isKoreanLocale) return '$item 찾기';
|
||||
if (isJapaneseLocale) return '$item を探す';
|
||||
return 'Locate $item';
|
||||
}
|
||||
|
||||
String questTransfer(String item) =>
|
||||
isKoreanLocale ? '이 $item 전송하기' : 'Transfer this $item';
|
||||
String questTransfer(String item) {
|
||||
if (isKoreanLocale) return '이 $item 전송하기';
|
||||
if (isJapaneseLocale) return 'この$item を転送する';
|
||||
return 'Transfer this $item';
|
||||
}
|
||||
|
||||
String questDownload(String item) =>
|
||||
isKoreanLocale ? '$item 다운로드하기' : 'Download $item';
|
||||
String questDownload(String item) {
|
||||
if (isKoreanLocale) return '$item 다운로드하기';
|
||||
if (isJapaneseLocale) return '$item をダウンロードする';
|
||||
return 'Download $item';
|
||||
}
|
||||
|
||||
String questStabilize(String name) =>
|
||||
isKoreanLocale ? '$name 안정화하기' : 'Stabilize $name';
|
||||
String questStabilize(String name) {
|
||||
if (isKoreanLocale) return '$name 안정화하기';
|
||||
if (isJapaneseLocale) return '$name を安定化する';
|
||||
return 'Stabilize $name';
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Act 제목
|
||||
// ============================================================================
|
||||
|
||||
String actTitle(String romanNumeral) =>
|
||||
isKoreanLocale ? '$romanNumeral막' : 'Act $romanNumeral';
|
||||
String actTitle(String romanNumeral) {
|
||||
if (isKoreanLocale) return '$romanNumeral막';
|
||||
if (isJapaneseLocale) return '第$romanNumeral幕';
|
||||
return 'Act $romanNumeral';
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 시네마틱 텍스트 - 시나리오 1: 캐시 존
|
||||
// ============================================================================
|
||||
|
||||
String cinematicCacheZone1() => isKoreanLocale
|
||||
? '지쳐서 손상된 네트워크의 안전한 캐시 존에 도착하다'
|
||||
: 'Exhausted, you reach a safe Cache Zone in the corrupted network';
|
||||
String cinematicCacheZone1() {
|
||||
if (isKoreanLocale) return '지쳐서 손상된 네트워크의 안전한 캐시 존에 도착하다';
|
||||
if (isJapaneseLocale) return '疲れ果てて、破損したネットワークの安全なキャッシュゾーンに到着する';
|
||||
return 'Exhausted, you reach a safe Cache Zone in the corrupted network';
|
||||
}
|
||||
|
||||
String cinematicCacheZone2() => isKoreanLocale
|
||||
? '옛 동맹들과 재연결하고 새로운 동료들을 포크하다'
|
||||
: 'You reconnect with old allies and fork new ones';
|
||||
String cinematicCacheZone2() {
|
||||
if (isKoreanLocale) return '옛 동맹들과 재연결하고 새로운 동료들을 포크하다';
|
||||
if (isJapaneseLocale) return '古い同盟者と再接続し、新しい仲間をフォークする';
|
||||
return 'You reconnect with old allies and fork new ones';
|
||||
}
|
||||
|
||||
String cinematicCacheZone3() => isKoreanLocale
|
||||
? '디버거 기사단 회의에 참석하다'
|
||||
: 'You attend a council of the Debugger Knights';
|
||||
String cinematicCacheZone3() {
|
||||
if (isKoreanLocale) return '디버거 기사단 회의에 참석하다';
|
||||
if (isJapaneseLocale) return 'デバッガー騎士団の会議に参加する';
|
||||
return 'You attend a council of the Debugger Knights';
|
||||
}
|
||||
|
||||
String cinematicCacheZone4() => isKoreanLocale
|
||||
? '많은 버그들이 기다린다. 당신이 패치하도록 선택되었다!'
|
||||
: 'Many bugs await. You are chosen to patch them!';
|
||||
String cinematicCacheZone4() {
|
||||
if (isKoreanLocale) return '많은 버그들이 기다린다. 당신이 패치하도록 선택되었다!';
|
||||
if (isJapaneseLocale) return '多くのバグが待っている。あなたがパッチを当てるよう選ばれた!';
|
||||
return 'Many bugs await. You are chosen to patch them!';
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 시네마틱 텍스트 - 시나리오 2: 전투
|
||||
// ============================================================================
|
||||
|
||||
String cinematicCombat1() => isKoreanLocale
|
||||
? '목표가 눈앞에 있지만, 치명적인 버그가 길을 막는다!'
|
||||
: 'Your target is in sight, but a critical bug blocks your path!';
|
||||
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) => isKoreanLocale
|
||||
? '$nemesis와의 필사적인 디버깅 세션이 시작되다'
|
||||
: 'A desperate debugging session begins with $nemesis';
|
||||
String cinematicCombat2(String nemesis) {
|
||||
if (isKoreanLocale) return '$nemesis와의 필사적인 디버깅 세션이 시작되다';
|
||||
if (isJapaneseLocale) return '$nemesisとの必死のデバッグセッションが始まる';
|
||||
return 'A desperate debugging session begins with $nemesis';
|
||||
}
|
||||
|
||||
String cinematicCombatLocked(String nemesis) => isKoreanLocale
|
||||
? '$nemesis와 치열한 디버깅 중'
|
||||
: 'Locked in intense debugging 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) => isKoreanLocale
|
||||
? '$nemesis가 당신의 스택 트레이스를 손상시키다'
|
||||
: '$nemesis corrupts your stack trace';
|
||||
String cinematicCombatCorrupts(String nemesis) {
|
||||
if (isKoreanLocale) return '$nemesis가 당신의 스택 트레이스를 손상시키다';
|
||||
if (isJapaneseLocale) return '$nemesisがあなたのスタックトレースを破損させる';
|
||||
return '$nemesis corrupts your stack trace';
|
||||
}
|
||||
|
||||
String cinematicCombatWorking(String nemesis) => isKoreanLocale
|
||||
? '당신의 패치가 $nemesis에게 효과를 보이는 것 같다'
|
||||
: 'Your patch seems to be working against $nemesis';
|
||||
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) => isKoreanLocale
|
||||
? '승리! $nemesis가 패치되었다! 복구를 위해 시스템이 재부팅된다'
|
||||
: 'Victory! $nemesis is patched! System reboots for recovery';
|
||||
String cinematicCombatVictory(String nemesis) {
|
||||
if (isKoreanLocale) return '승리! $nemesis가 패치되었다! 복구를 위해 시스템이 재부팅된다';
|
||||
if (isJapaneseLocale) return '勝利!$nemesisはパッチされた!復旧のためシステムが再起動する';
|
||||
return 'Victory! $nemesis is patched! System reboots for recovery';
|
||||
}
|
||||
|
||||
String cinematicCombatWakeUp() => isKoreanLocale
|
||||
? '안전 모드에서 깨어나지만, 커널이 기다린다'
|
||||
: 'You wake up in a Safe Mode, but the kernel awaits';
|
||||
String cinematicCombatWakeUp() {
|
||||
if (isKoreanLocale) return '안전 모드에서 깨어나지만, 커널이 기다린다';
|
||||
if (isJapaneseLocale) return 'セーフモードで目覚めるが、カーネルが待ち構えている';
|
||||
return 'You wake up in a Safe Mode, but the kernel awaits';
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 시네마틱 텍스트 - 시나리오 3: 배신
|
||||
// ============================================================================
|
||||
|
||||
String cinematicBetrayal1(String guy) => isKoreanLocale
|
||||
? '안도감! $guy의 보안 서버에 도착하다'
|
||||
: 'What relief! You reach the secure server of $guy';
|
||||
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) => isKoreanLocale
|
||||
? '축하가 이어지고, $guy와 수상한 비밀 핸드셰이크를 나누다'
|
||||
: 'There is celebration, and a suspicious private handshake with $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) => isKoreanLocale
|
||||
? '$item을 잊고 다시 가져오러 돌아가다'
|
||||
: 'You forget your $item and go back to retrieve it';
|
||||
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() => isKoreanLocale
|
||||
? '이게 뭐지!? 손상된 패킷을 가로채다!'
|
||||
: 'What is this!? You intercept a corrupted packet!';
|
||||
String cinematicBetrayal4() {
|
||||
if (isKoreanLocale) return '이게 뭐지!? 손상된 패킷을 가로채다!';
|
||||
if (isJapaneseLocale) return 'これは何だ!?破損したパケットを傍受する!';
|
||||
return 'What is this!? You intercept a corrupted packet!';
|
||||
}
|
||||
|
||||
String cinematicBetrayal5(String guy) => isKoreanLocale
|
||||
? '$guy가 글리치 신의 백도어일 수 있을까?'
|
||||
: 'Could $guy be a backdoor for the Glitch God?';
|
||||
String cinematicBetrayal5(String guy) {
|
||||
if (isKoreanLocale) return '$guy가 글리치 신의 백도어일 수 있을까?';
|
||||
if (isJapaneseLocale) return '$guyはグリッチゴッドのバックドアなのか?';
|
||||
return 'Could $guy be a backdoor for the Glitch God?';
|
||||
}
|
||||
|
||||
String cinematicBetrayal6() => isKoreanLocale
|
||||
? '이 정보를 누구에게 맡길 수 있을까!? -- 바이너리 신전이다'
|
||||
: 'Who can be trusted with this intel!? -- The Binary Temple, of course';
|
||||
String cinematicBetrayal6() {
|
||||
if (isKoreanLocale) return '이 정보를 누구에게 맡길 수 있을까!? -- 바이너리 신전이다';
|
||||
if (isJapaneseLocale) return 'この情報を誰に託せるか!? -- バイナリ神殿だ';
|
||||
return 'Who can be trusted with this intel!? -- The Binary Temple, of course';
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 몬스터 수식어
|
||||
// ============================================================================
|
||||
|
||||
String modifierDead(String s) => isKoreanLocale ? '쓰러진 $s' : 'fallen $s';
|
||||
String modifierComatose(String s) => isKoreanLocale ? '잠복하는 $s' : 'lurking $s';
|
||||
String modifierCrippled(String s) => isKoreanLocale ? '흉측한 $s' : 'twisted $s';
|
||||
String modifierSick(String s) => isKoreanLocale ? '오염된 $s' : 'tainted $s';
|
||||
String modifierUndernourished(String s) =>
|
||||
isKoreanLocale ? '굶주린 $s' : 'ravenous $s';
|
||||
String modifierDead(String s) {
|
||||
if (isKoreanLocale) return '쓰러진 $s';
|
||||
if (isJapaneseLocale) return '倒れた$s';
|
||||
return 'fallen $s';
|
||||
}
|
||||
|
||||
String modifierFoetal(String s) => isKoreanLocale ? '태동기 $s' : 'nascent $s';
|
||||
String modifierBaby(String s) => isKoreanLocale ? '초기형 $s' : 'fledgling $s';
|
||||
String modifierPreadolescent(String s) =>
|
||||
isKoreanLocale ? '진화 중인 $s' : 'evolving $s';
|
||||
String modifierTeenage(String s) => isKoreanLocale ? '하급 $s' : 'lesser $s';
|
||||
String modifierUnderage(String s) => isKoreanLocale ? '불완전한 $s' : 'incomplete $s';
|
||||
String modifierComatose(String s) {
|
||||
if (isKoreanLocale) return '잠복하는 $s';
|
||||
if (isJapaneseLocale) return '潜む$s';
|
||||
return 'lurking $s';
|
||||
}
|
||||
|
||||
String modifierGreater(String s) => isKoreanLocale ? '상위 $s' : 'greater $s';
|
||||
String modifierMassive(String s) => isKoreanLocale ? '거대한 $s' : 'massive $s';
|
||||
String modifierEnormous(String s) => isKoreanLocale ? '초거대 $s' : 'enormous $s';
|
||||
String modifierGiant(String s) => isKoreanLocale ? '자이언트 $s' : 'giant $s';
|
||||
String modifierTitanic(String s) => isKoreanLocale ? '타이타닉 $s' : 'titanic $s';
|
||||
String modifierCrippled(String s) {
|
||||
if (isKoreanLocale) return '흉측한 $s';
|
||||
if (isJapaneseLocale) return '歪んだ$s';
|
||||
return 'twisted $s';
|
||||
}
|
||||
|
||||
String modifierVeteran(String s) => isKoreanLocale ? '베테랑 $s' : 'veteran $s';
|
||||
String modifierBattle(String s) => isKoreanLocale ? '전투-$s' : 'Battle-$s';
|
||||
String modifierCursed(String s) => isKoreanLocale ? '저주받은 $s' : 'cursed $s';
|
||||
String modifierWarrior(String s) => isKoreanLocale ? '전사 $s' : 'warrior $s';
|
||||
String modifierWere(String s) => isKoreanLocale ? '늑대인간-$s' : 'Were-$s';
|
||||
String modifierUndead(String s) => isKoreanLocale ? '언데드 $s' : 'undead $s';
|
||||
String modifierDemon(String s) => isKoreanLocale ? '데몬 $s' : 'demon $s';
|
||||
String modifierSick(String s) {
|
||||
if (isKoreanLocale) return '오염된 $s';
|
||||
if (isJapaneseLocale) return '汚染された$s';
|
||||
return 'tainted $s';
|
||||
}
|
||||
|
||||
String modifierMessianic(String s) => isKoreanLocale ? '메시아닉 $s' : 'messianic $s';
|
||||
String modifierImaginary(String s) => isKoreanLocale ? '상상의 $s' : 'imaginary $s';
|
||||
String modifierPassing(String s) => isKoreanLocale ? '지나가는 $s' : 'passing $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 roughTimeSeconds(int seconds) =>
|
||||
isKoreanLocale ? '$seconds초' : '$seconds seconds';
|
||||
String roughTimeSeconds(int seconds) {
|
||||
if (isKoreanLocale) return '$seconds초';
|
||||
if (isJapaneseLocale) return '$seconds秒';
|
||||
return '$seconds seconds';
|
||||
}
|
||||
|
||||
String roughTimeMinutes(int minutes) =>
|
||||
isKoreanLocale ? '$minutes분' : '$minutes minutes';
|
||||
String roughTimeMinutes(int minutes) {
|
||||
if (isKoreanLocale) return '$minutes분';
|
||||
if (isJapaneseLocale) return '$minutes分';
|
||||
return '$minutes minutes';
|
||||
}
|
||||
|
||||
String roughTimeHours(int hours) =>
|
||||
isKoreanLocale ? '$hours시간' : '$hours hours';
|
||||
String roughTimeHours(int hours) {
|
||||
if (isKoreanLocale) return '$hours시간';
|
||||
if (isJapaneseLocale) return '$hours時間';
|
||||
return '$hours hours';
|
||||
}
|
||||
|
||||
String roughTimeDays(int days) =>
|
||||
isKoreanLocale ? '$days일' : '$days days';
|
||||
String roughTimeDays(int days) {
|
||||
if (isKoreanLocale) return '$days일';
|
||||
if (isJapaneseLocale) return '$days日';
|
||||
return '$days days';
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 영어 문법 함수 (한국어에서는 단순화)
|
||||
// 영어 문법 함수 (한국어/일본어에서는 단순화)
|
||||
// ============================================================================
|
||||
|
||||
/// 관사 + 명사 (한국어: 수량만 표시)
|
||||
/// 관사 + 명사 (한국어/일본어: 수량만 표시)
|
||||
String indefiniteL10n(String s, int qty) {
|
||||
if (isKoreanLocale) {
|
||||
return qty == 1 ? s : '$qty $s';
|
||||
}
|
||||
if (isJapaneseLocale) {
|
||||
return qty == 1 ? s : '$qty $s';
|
||||
}
|
||||
// 영어 로직
|
||||
if (qty == 1) {
|
||||
const vowels = 'AEIOUÜaeiouü';
|
||||
@@ -238,9 +461,9 @@ String indefiniteL10n(String s, int qty) {
|
||||
return '$qty ${_pluralize(s)}';
|
||||
}
|
||||
|
||||
/// the + 명사 (한국어: 그냥 명사)
|
||||
/// the + 명사 (한국어/일본어: 그냥 명사)
|
||||
String definiteL10n(String s, int qty) {
|
||||
if (isKoreanLocale) {
|
||||
if (isKoreanLocale || isJapaneseLocale) {
|
||||
return s;
|
||||
}
|
||||
// 영어 로직
|
||||
@@ -266,70 +489,202 @@ String _pluralize(String s) {
|
||||
// impressiveGuy 관련
|
||||
// ============================================================================
|
||||
|
||||
String impressiveGuyPattern1(String title, String race) => isKoreanLocale
|
||||
String impressiveGuyPattern1(String title, String race) {
|
||||
if (isKoreanLocale) {
|
||||
// ignore: unnecessary_brace_in_string_interps
|
||||
? '${race}들의 $title' // 한국어 조사 연결을 위해 중괄호 필요
|
||||
: 'the $title of the ${_pluralize(race)}';
|
||||
return '${race}들의 $title'; // 한국어 조사 연결을 위해 중괄호 필요
|
||||
}
|
||||
if (isJapaneseLocale) {
|
||||
// ignore: unnecessary_brace_in_string_interps
|
||||
return '${race}たちの$title'; // 일본어 연결을 위해 중괄호 필요
|
||||
}
|
||||
return 'the $title of the ${_pluralize(race)}';
|
||||
}
|
||||
|
||||
String impressiveGuyPattern2(String title, String name1, String name2) =>
|
||||
isKoreanLocale
|
||||
? '$name2의 $title $name1'
|
||||
: '$title $name1 of $name2';
|
||||
String impressiveGuyPattern2(String title, String name1, String name2) {
|
||||
if (isKoreanLocale) return '$name2의 $title $name1';
|
||||
if (isJapaneseLocale) return '$name2の$title $name1';
|
||||
return '$title $name1 of $name2';
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// namedMonster 관련
|
||||
// ============================================================================
|
||||
|
||||
String namedMonsterFormat(String generatedName, String monsterType) =>
|
||||
isKoreanLocale
|
||||
? '$monsterType $generatedName'
|
||||
: '$generatedName the $monsterType';
|
||||
String namedMonsterFormat(String generatedName, String monsterType) {
|
||||
if (isKoreanLocale) return '$monsterType $generatedName';
|
||||
if (isJapaneseLocale) return '$monsterType $generatedName';
|
||||
return '$generatedName the $monsterType';
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 게임 데이터 번역 함수 (BuildContext 없이 사용)
|
||||
// 지원 언어: 한국어(ko), 영어(en), 일본어(ja)
|
||||
// ============================================================================
|
||||
|
||||
/// 몬스터 이름 번역
|
||||
String translateMonster(String englishName) =>
|
||||
isKoreanLocale ? (monsterTranslationsKo[englishName] ?? englishName) : englishName;
|
||||
/// 몬스터 이름 번역 (기본 + 고급 몬스터 포함)
|
||||
String translateMonster(String englishName) {
|
||||
if (isKoreanLocale) {
|
||||
return monsterTranslationsKo[englishName] ??
|
||||
advancedMonsterTranslationsKo[englishName] ??
|
||||
englishName;
|
||||
}
|
||||
if (isJapaneseLocale) {
|
||||
return monsterTranslationsJa[englishName] ??
|
||||
advancedMonsterTranslationsJa[englishName] ??
|
||||
englishName;
|
||||
}
|
||||
return englishName;
|
||||
}
|
||||
|
||||
/// 종족 이름 번역
|
||||
String translateRace(String englishName) =>
|
||||
isKoreanLocale ? (raceTranslationsKo[englishName] ?? englishName) : englishName;
|
||||
String translateRace(String englishName) {
|
||||
if (isKoreanLocale) return raceTranslationsKo[englishName] ?? englishName;
|
||||
if (isJapaneseLocale) return raceTranslationsJa[englishName] ?? englishName;
|
||||
return englishName;
|
||||
}
|
||||
|
||||
/// 직업 이름 번역
|
||||
String translateKlass(String englishName) =>
|
||||
isKoreanLocale ? (klassTranslationsKo[englishName] ?? englishName) : englishName;
|
||||
String translateKlass(String englishName) {
|
||||
if (isKoreanLocale) return klassTranslationsKo[englishName] ?? englishName;
|
||||
if (isJapaneseLocale) return klassTranslationsJa[englishName] ?? englishName;
|
||||
return englishName;
|
||||
}
|
||||
|
||||
/// 칭호 이름 번역
|
||||
String translateTitle(String englishName) =>
|
||||
isKoreanLocale ? (titleTranslationsKo[englishName] ?? englishName) : englishName;
|
||||
String translateTitle(String englishName) {
|
||||
if (isKoreanLocale) return titleTranslationsKo[englishName] ?? englishName;
|
||||
if (isJapaneseLocale) return titleTranslationsJa[englishName] ?? englishName;
|
||||
return englishName;
|
||||
}
|
||||
|
||||
/// 인상적인 칭호 번역 (impressiveTitles용)
|
||||
String translateImpressiveTitle(String englishName) =>
|
||||
isKoreanLocale ? (impressiveTitleTranslationsKo[englishName] ?? englishName) : englishName;
|
||||
String translateImpressiveTitle(String englishName) {
|
||||
if (isKoreanLocale) {
|
||||
return impressiveTitleTranslationsKo[englishName] ?? englishName;
|
||||
}
|
||||
if (isJapaneseLocale) {
|
||||
return impressiveTitleTranslationsJa[englishName] ?? englishName;
|
||||
}
|
||||
return englishName;
|
||||
}
|
||||
|
||||
/// 특수 아이템 이름 번역
|
||||
String translateSpecial(String englishName) =>
|
||||
isKoreanLocale ? (specialTranslationsKo[englishName] ?? englishName) : englishName;
|
||||
String translateSpecial(String englishName) {
|
||||
if (isKoreanLocale) return specialTranslationsKo[englishName] ?? englishName;
|
||||
if (isJapaneseLocale) return specialTranslationsJa[englishName] ?? englishName;
|
||||
return englishName;
|
||||
}
|
||||
|
||||
/// 아이템 속성 이름 번역
|
||||
String translateItemAttrib(String englishName) =>
|
||||
isKoreanLocale ? (itemAttribTranslationsKo[englishName] ?? englishName) : englishName;
|
||||
/// 아이템 속성 이름 번역 (기본 + 추가 속성 포함)
|
||||
String translateItemAttrib(String englishName) {
|
||||
if (isKoreanLocale) {
|
||||
return itemAttribTranslationsKo[englishName] ??
|
||||
additionalItemAttribTranslationsKo[englishName] ??
|
||||
englishName;
|
||||
}
|
||||
if (isJapaneseLocale) {
|
||||
return itemAttribTranslationsJa[englishName] ??
|
||||
additionalItemAttribTranslationsJa[englishName] ??
|
||||
englishName;
|
||||
}
|
||||
return englishName;
|
||||
}
|
||||
|
||||
/// 아이템 "~의" 접미사 번역
|
||||
String translateItemOf(String englishName) =>
|
||||
isKoreanLocale ? (itemOfsTranslationsKo[englishName] ?? englishName) : englishName;
|
||||
/// 아이템 "~의" 접미사 번역 (기본 + 추가 포함)
|
||||
String translateItemOf(String englishName) {
|
||||
if (isKoreanLocale) {
|
||||
return itemOfsTranslationsKo[englishName] ??
|
||||
additionalItemOfsTranslationsKo[englishName] ??
|
||||
englishName;
|
||||
}
|
||||
if (isJapaneseLocale) {
|
||||
return itemOfsTranslationsJa[englishName] ??
|
||||
additionalItemOfsTranslationsJa[englishName] ??
|
||||
englishName;
|
||||
}
|
||||
return englishName;
|
||||
}
|
||||
|
||||
/// 단순 아이템 번역
|
||||
String translateBoringItem(String englishName) =>
|
||||
isKoreanLocale ? (boringItemTranslationsKo[englishName] ?? englishName) : englishName;
|
||||
/// 단순 아이템 번역 (기본 + 추가 드롭 포함)
|
||||
String translateBoringItem(String englishName) {
|
||||
if (isKoreanLocale) {
|
||||
return boringItemTranslationsKo[englishName] ??
|
||||
dropItemTranslationsKo[englishName] ??
|
||||
additionalDropTranslationsKo[englishName] ??
|
||||
englishName;
|
||||
}
|
||||
if (isJapaneseLocale) {
|
||||
return boringItemTranslationsJa[englishName] ??
|
||||
dropItemTranslationsJa[englishName] ??
|
||||
additionalDropTranslationsJa[englishName] ??
|
||||
englishName;
|
||||
}
|
||||
return englishName;
|
||||
}
|
||||
|
||||
/// interestingItem 번역 (attrib + special 조합)
|
||||
/// 예: "Golden Iterator" → "황금 이터레이터"
|
||||
/// 예: "Golden Iterator" → "황금 이터레이터" / "黄金のイテレーター"
|
||||
String translateInterestingItem(String attrib, String special) {
|
||||
if (!isKoreanLocale) return '$attrib $special';
|
||||
final translatedAttrib = itemAttribTranslationsKo[attrib] ?? attrib;
|
||||
final translatedSpecial = specialTranslationsKo[special] ?? special;
|
||||
return '$translatedAttrib $translatedSpecial';
|
||||
if (isKoreanLocale) {
|
||||
final translatedAttrib = itemAttribTranslationsKo[attrib] ??
|
||||
additionalItemAttribTranslationsKo[attrib] ??
|
||||
attrib;
|
||||
final translatedSpecial = specialTranslationsKo[special] ?? special;
|
||||
return '$translatedAttrib $translatedSpecial';
|
||||
}
|
||||
if (isJapaneseLocale) {
|
||||
final translatedAttrib = itemAttribTranslationsJa[attrib] ??
|
||||
additionalItemAttribTranslationsJa[attrib] ??
|
||||
attrib;
|
||||
final translatedSpecial = specialTranslationsJa[special] ?? special;
|
||||
return '$translatedAttrib$translatedSpecial';
|
||||
}
|
||||
return '$attrib $special';
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// 스토리/시네마틱 번역 함수 (Story/Cinematic Translation Functions)
|
||||
// ============================================================================
|
||||
|
||||
/// Act 제목 번역
|
||||
String translateActTitle(String englishTitle) {
|
||||
if (isKoreanLocale) return actTitleTranslationsKo[englishTitle] ?? englishTitle;
|
||||
if (isJapaneseLocale) return actTitleTranslationsJa[englishTitle] ?? englishTitle;
|
||||
return englishTitle;
|
||||
}
|
||||
|
||||
/// Act 보스 이름 번역
|
||||
String translateActBoss(String englishBoss) {
|
||||
if (isKoreanLocale) return actBossTranslationsKo[englishBoss] ?? englishBoss;
|
||||
if (isJapaneseLocale) return actBossTranslationsJa[englishBoss] ?? englishBoss;
|
||||
return englishBoss;
|
||||
}
|
||||
|
||||
/// Act 퀘스트 번역
|
||||
String translateActQuest(String englishQuest) {
|
||||
if (isKoreanLocale) return actQuestTranslationsKo[englishQuest] ?? englishQuest;
|
||||
if (isJapaneseLocale) return actQuestTranslationsJa[englishQuest] ?? englishQuest;
|
||||
return englishQuest;
|
||||
}
|
||||
|
||||
/// 시네마틱 텍스트 번역
|
||||
String translateCinematic(String englishText) {
|
||||
if (isKoreanLocale) return cinematicTranslationsKo[englishText] ?? englishText;
|
||||
if (isJapaneseLocale) return cinematicTranslationsJa[englishText] ?? englishText;
|
||||
return englishText;
|
||||
}
|
||||
|
||||
/// 지역 이름 번역
|
||||
String translateLocation(String englishLocation) {
|
||||
if (isKoreanLocale) return locationTranslationsKo[englishLocation] ?? englishLocation;
|
||||
if (isJapaneseLocale) return locationTranslationsJa[englishLocation] ?? englishLocation;
|
||||
return englishLocation;
|
||||
}
|
||||
|
||||
/// 세력/조직 이름 번역
|
||||
String translateFaction(String englishFaction) {
|
||||
if (isKoreanLocale) return factionTranslationsKo[englishFaction] ?? englishFaction;
|
||||
if (isJapaneseLocale) return factionTranslationsJa[englishFaction] ?? englishFaction;
|
||||
return englishFaction;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user