From 071ac5f1e3826ef27fb65b1541fffb786dc34128 Mon Sep 17 00:00:00 2001 From: JiWoong Sul Date: Thu, 11 Dec 2025 19:22:43 +0900 Subject: [PATCH] =?UTF-8?q?feat(l10n):=20=EB=88=84=EB=9D=BD=EB=90=9C=20?= =?UTF-8?q?=EB=B2=88=EC=97=AD=20=EB=B0=8F=20=EA=B8=B0=EB=B3=B8=20=EB=AC=B4?= =?UTF-8?q?=EA=B8=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 기본 무기를 'Sharp Stick'에서 'Keyboard'로 변경 (아스키나라 세계관) - 몬스터 번역 168개 추가 (보안 위협, 버그 등) - BoringItems(잡템) 번역 42개 추가 - game_data_l10n에서 boringItem 번역 적용 --- lib/data/game_translations_ko.dart | 229 ++++++++++++++++++++++++++ lib/l10n/app_localizations.dart | 12 ++ lib/l10n/app_localizations_en.dart | 6 + lib/l10n/app_localizations_ja.dart | 6 + lib/l10n/app_localizations_ko.dart | 6 + lib/l10n/app_localizations_zh.dart | 6 + lib/src/core/l10n/game_data_l10n.dart | 8 +- lib/src/core/model/game_state.dart | 2 +- lib/src/core/model/save_data.dart | 2 +- 9 files changed, 270 insertions(+), 7 deletions(-) diff --git a/lib/data/game_translations_ko.dart b/lib/data/game_translations_ko.dart index 29ce9e7..03decae 100644 --- a/lib/data/game_translations_ko.dart +++ b/lib/data/game_translations_ko.dart @@ -248,6 +248,189 @@ const Map monsterTranslationsKo = { 'Bohrbug': '보어버그', 'Mandelbug': '만델버그', 'Hindenbug': '힌덴버그', + + // 추가 버그 및 회피 기법 + 'Schroedinbug': '슈뢰딘버그', + 'Antivirus Evasion': '안티바이러스 회피', + 'Packer': '패커', + 'Crypter': '크립터', + 'Dropper': '드로퍼', + 'Loader': '로더', + 'Payload Carrier': '페이로드 운반자', + 'Persistence Mechanism': '지속성 메커니즘', + 'Privilege Escalation': '권한 상승', + 'Lateral Movement': '측면 이동', + 'Exfil Channel': '유출 채널', + 'C2 Beacon': 'C2 비콘', + 'DNS Tunnel': 'DNS 터널', + 'ICMP Shell': 'ICMP 쉘', + 'HTTP Backdoor': 'HTTP 백도어', + 'Reverse Shell': '리버스 쉘', + 'Bind Shell': '바인드 쉘', + 'Web Shell': '웹 쉘', + 'Cron Job Malware': '크론잡 악성코드', + 'Init Script Virus': '초기화 스크립트 바이러스', + + // 코드 인젝션 기법 + 'Library Injection': '라이브러리 인젝션', + 'Process Hollowing': '프로세스 할로잉', + 'Thread Injection': '스레드 인젝션', + 'APC Injection': 'APC 인젝션', + 'Atom Bombing': '아톰 봄빙', + 'Process Doppelganging': '프로세스 도플갱잉', + 'Ghostwriting': '고스트라이팅', + 'Module Stomping': '모듈 스톰핑', + 'Reflective Loading': '리플렉티브 로딩', + 'Manual Mapping': '수동 매핑', + 'Syscall Stub': '시스콜 스텁', + 'Heaven Gate': '헤븐 게이트', + + // 비동기 및 메모리 관련 + 'Callback Hell': '콜백 지옥', + 'Promise Rejection': '프로미스 거부', + 'Event Loop Block': '이벤트 루프 블록', + 'Memory Pressure': '메모리 압박', + 'Garbage Storm': '가비지 폭풍', + 'Finalizer Bug': '파이널라이저 버그', + 'Weak Reference Leak': '약한 참조 누수', + 'String Interning Bug': '문자열 인터닝 버그', + 'Classloader Leak': '클래스로더 누수', + 'Native Memory Leak': '네이티브 메모리 누수', + 'Direct Buffer Leak': '다이렉트 버퍼 누수', + 'Thread Local Leak': '스레드 로컬 누수', + 'Connection Pool Leak': '커넥션 풀 누수', + 'File Handle Leak': '파일 핸들 누수', + 'Timer Leak': '타이머 누수', + 'Listener Leak': '리스너 누수', + 'Observable Leak': '옵저버블 누수', + 'Async Leak': '비동기 누수', + 'Context Leak': '컨텍스트 누수', + 'Bitmap Leak': '비트맵 누수', + 'Cursor Leak': '커서 누수', + 'Stream Leak': '스트림 누수', + 'Transaction Leak': '트랜잭션 누수', + 'Session Leak': '세션 누수', + 'Cache Bloat': '캐시 비대화', + 'Queue Overflow': '큐 오버플로우', + 'Ring Buffer Bug': '링 버퍼 버그', + + // 동시성 및 락 관련 + 'Lock Contention': '락 경합', + 'Spin Lock Burn': '스핀 락 연소', + 'False Sharing': '거짓 공유', + 'NUMA Bug': 'NUMA 버그', + 'Affinity Bug': '어피니티 버그', + 'Context Switch Storm': '컨텍스트 스위치 폭풍', + 'TLB Shootdown': 'TLB 슛다운', + 'IPI Storm': 'IPI 폭풍', + 'Interrupt Disable Bug': '인터럽트 비활성화 버그', + 'Preemption Bug': '선점 버그', + 'RCU Bug': 'RCU 버그', + 'Seqlock Bug': '시퀀스 락 버그', + 'RWLock Bug': '읽기쓰기 락 버그', + 'Futex Bug': 'Futex 버그', + 'Spinlock Bug': '스핀락 버그', + 'Barrier Bug': '배리어 버그', + 'Condition Variable Bug': '조건 변수 버그', + 'Semaphore Leak': '세마포어 누수', + 'Message Queue Bug': '메시지 큐 버그', + 'Shared Memory Bug': '공유 메모리 버그', + 'Pipe Deadlock': '파이프 데드락', + 'Socket Leak': '소켓 누수', + 'Epoll Bug': 'Epoll 버그', + 'Kqueue Bug': 'Kqueue 버그', + 'IOCP Bug': 'IOCP 버그', + 'AIO Bug': 'AIO 버그', + 'Scatter Gather Bug': '스캐터 개더 버그', + 'Zero Copy Bug': '제로 카피 버그', + 'Splice Bug': '스플라이스 버그', + 'Vmsplice Bug': 'Vmsplice 버그', + 'Tee Bug': 'Tee 버그', + 'Fallocate Bug': 'Fallocate 버그', + 'Punch Hole Bug': '펀치 홀 버그', + 'Direct IO Bug': '다이렉트 IO 버그', + 'Sync Bug': '동기화 버그', + 'Datasync Bug': '데이터 동기화 버그', + 'Journal Bug': '저널 버그', + 'Inode Leak': 'Inode 누수', + 'Dentry Cache Bug': 'Dentry 캐시 버그', + 'Buffer Head Bug': '버퍼 헤드 버그', + 'Page Cache Bug': '페이지 캐시 버그', + 'Slab Leak': '슬랩 누수', + 'Kmalloc Bug': 'Kmalloc 버그', + 'Vmalloc Bug': 'Vmalloc 버그', + 'Highmem Bug': '상위 메모리 버그', + 'Lowmem Bug': '하위 메모리 버그', + 'OOM Killer': 'OOM 킬러', + + // 폭탄 및 DoS 관련 + 'Fork Bomb': '포크 폭탄', + 'Zip Bomb': '압축 폭탄', + 'Xml Bomb': 'XML 폭탄', + 'Regex Bomb': '정규식 폭탄', + 'Hash Collision Attack': '해시 충돌 공격', + 'Algorithmic Complexity': '알고리즘 복잡도 공격', + 'Slowloris': '슬로우로리스', + 'RUDY': 'RUDY', + 'Apache Killer': '아파치 킬러', + 'HashDoS': '해시 DoS', + 'SYN Flood Spirit': 'SYN 플러드 정령', + 'UDP Flood': 'UDP 플러드', + 'ICMP Flood': 'ICMP 플러드', + 'Smurf Attack': '스머프 공격', + 'Fraggle Attack': '프래글 공격', + 'DNS Amplification': 'DNS 증폭', + 'NTP Amplification': 'NTP 증폭', + 'SSDP Amplification': 'SSDP 증폭', + 'Memcached Amplification': 'Memcached 증폭', + 'CLDAP Amplification': 'CLDAP 증폭', + 'Reflection Attack': '반사 공격', + 'Carpet Bombing': '융단 폭격', + 'Pulse Wave': '펄스 웨이브', + 'Low and Slow': '저속 공격', + 'Application Layer': '애플리케이션 레이어 공격', + 'SSL Exhaustion': 'SSL 고갈', + 'Renegotiation Attack': '재협상 공격', + + // 유명 취약점들 + 'BEAST': 'BEAST', + 'CRIME': 'CRIME', + 'BREACH': 'BREACH', + 'POODLE': 'POODLE', + 'Heartbleed Ghost': '하트블리드 유령', + 'Shellshock': '쉘쇼크', + 'Dirty COW': '더티 카우', + 'VENOM': 'VENOM', + 'Cloudbleed': '클라우드블리드', + 'Krack Attack': 'KRACK 공격', + 'Dragonblood': '드래곤블러드', + 'Frag Attack': '프래그 공격', + 'Kr00k': 'Kr00k', + 'PMKID Attack': 'PMKID 공격', + + // 무선 네트워크 공격 + 'Evil Twin': '이블 트윈', + 'Karma Attack': '카르마 공격', + 'Deauth Attack': '인증해제 공격', + 'Beacon Flood': '비콘 플러드', + 'Bluetooth Bug': '블루투스 버그', + 'Blueborne': '블루본', + 'Sweyntooth': '스웨인투스', + 'Braktooth': '브랙투스', + 'Knob Attack': 'KNOB 공격', + 'Bias Attack': 'BIAS 공격', + + // 네트워크 장비 및 프로토콜 버그 + 'Cable Haunt': '케이블 헌트', + 'CallStranger': '콜스트레인저', + 'Ripple20': 'Ripple20', + 'Amnesia33': 'Amnesia33', + 'Number Jack': '넘버 잭', + 'NAME:WRECK': 'NAME:WRECK', + 'BadAlloc': 'BadAlloc', + 'PwnKit': 'PwnKit', + 'Sudo Bug': 'Sudo 버그', + 'Baron Samedit': '바론 사메딧', }; /// 무기 이름 한국어 번역 @@ -555,3 +738,49 @@ const Map specialTranslationsKo = { 'Prototype': '프로토타입', 'Builder': '빌더', }; + +/// 잡템(BoringItems) 한국어 번역 +/// 몬스터 처치 시 획득하는 일반 아이템들 +const Map boringItemTranslationsKo = { + 'semicolon': '세미콜론', + 'curly brace': '중괄호', + 'null pointer': '널 포인터', + 'empty string': '빈 문자열', + 'deprecated token': '사용 중단 토큰', + 'legacy code': '레거시 코드', + 'tab character': '탭 문자', + 'whitespace': '공백 문자', + 'comment block': '주석 블록', + 'todo marker': 'TODO 마커', + 'fixme note': 'FIXME 노트', + 'readme fragment': 'README 조각', + 'config shard': '설정 파편', + 'log entry': '로그 항목', + 'stack trace': '스택 트레이스', + 'core dump': '코어 덤프', + 'crash report': '충돌 보고서', + 'error message': '오류 메시지', + 'warning flag': '경고 플래그', + 'lint error': '린트 오류', + 'syntax fragment': '구문 조각', + 'broken link': '깨진 링크', + 'orphan process': '고아 프로세스', + 'zombie thread': '좀비 스레드', + 'dangling pointer': '댕글링 포인터', + 'memory leak': '메모리 누수', + 'buffer scrap': '버퍼 조각', + 'bit bucket': '비트 버킷', + 'dev null': '/dev/null', + '/dev/random': '/dev/random', + 'entropy pool': '엔트로피 풀', + 'hash collision': '해시 충돌', + 'race condition': '레이스 컨디션', + 'deadlock key': '데드락 키', + 'mutex token': '뮤텍스 토큰', + 'semaphore': '세마포어', + 'signal handler': '시그널 핸들러', + 'interrupt vector': '인터럽트 벡터', + 'return value': '반환값', + 'exit code': '종료 코드', + 'errno': 'errno', +}; diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index b2407ec..e8ca1e4 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -526,6 +526,18 @@ abstract class L10n { /// In en, this message translates to: /// **'{percent}% complete'** String percentComplete(int percent); + + /// New character screen title + /// + /// In en, this message translates to: + /// **'ASCII-Nara - New Character'** + String get newCharacterTitle; + + /// Confirm character creation button + /// + /// In en, this message translates to: + /// **'Sold!'** + String get soldButton; } class _L10nDelegate extends LocalizationsDelegate { diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index bb87081..9ad4474 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -232,4 +232,10 @@ class L10nEn extends L10n { String percentComplete(int percent) { return '$percent% complete'; } + + @override + String get newCharacterTitle => 'ASCII-Nara - New Character'; + + @override + String get soldButton => 'Sold!'; } diff --git a/lib/l10n/app_localizations_ja.dart b/lib/l10n/app_localizations_ja.dart index ca8f88c..51156c1 100644 --- a/lib/l10n/app_localizations_ja.dart +++ b/lib/l10n/app_localizations_ja.dart @@ -232,4 +232,10 @@ class L10nJa extends L10n { String percentComplete(int percent) { return '$percent% complete'; } + + @override + String get newCharacterTitle => 'ASCII-Nara - New Character'; + + @override + String get soldButton => 'Sold!'; } diff --git a/lib/l10n/app_localizations_ko.dart b/lib/l10n/app_localizations_ko.dart index a0aa11b..32620fd 100644 --- a/lib/l10n/app_localizations_ko.dart +++ b/lib/l10n/app_localizations_ko.dart @@ -232,4 +232,10 @@ class L10nKo extends L10n { String percentComplete(int percent) { return '$percent% 완료'; } + + @override + String get newCharacterTitle => '아스키나라 - 새 캐릭터'; + + @override + String get soldButton => '확인!'; } diff --git a/lib/l10n/app_localizations_zh.dart b/lib/l10n/app_localizations_zh.dart index 7b18bcb..88f1826 100644 --- a/lib/l10n/app_localizations_zh.dart +++ b/lib/l10n/app_localizations_zh.dart @@ -232,4 +232,10 @@ class L10nZh extends L10n { String percentComplete(int percent) { return '$percent% complete'; } + + @override + String get newCharacterTitle => 'ASCII-Nara - New Character'; + + @override + String get soldButton => 'Sold!'; } diff --git a/lib/src/core/l10n/game_data_l10n.dart b/lib/src/core/l10n/game_data_l10n.dart index 30ed656..76d9d28 100644 --- a/lib/src/core/l10n/game_data_l10n.dart +++ b/lib/src/core/l10n/game_data_l10n.dart @@ -244,9 +244,7 @@ class GameDataL10n { static String _renderItemResultKo(ItemResult result) { // 단순 아이템 (boringItem) if (result.boringItem != null) { - // boringItem은 별도 번역 맵이 필요할 수 있음 - // 현재는 그대로 반환 (대부분 영어 그대로 사용) - return result.boringItem!; + return boringItemTranslationsKo[result.boringItem] ?? result.boringItem!; } // 복합 아이템: attrib + special + itemOf @@ -383,7 +381,7 @@ class GameDataL10n { return '$attribKo $specialKo'; } - // 단일 단어 (boringItem 등) - return itemString; + // 단일 단어 (boringItem 등) - 잡템 번역 시도 + return boringItemTranslationsKo[itemString] ?? itemString; } } diff --git a/lib/src/core/model/game_state.dart b/lib/src/core/model/game_state.dart index d014e67..11bac29 100644 --- a/lib/src/core/model/game_state.dart +++ b/lib/src/core/model/game_state.dart @@ -302,7 +302,7 @@ class Equipment { static const slotCount = 11; factory Equipment.empty() => const Equipment( - weapon: 'Sharp Stick', + weapon: 'Keyboard', shield: '', helm: '', hauberk: '', diff --git a/lib/src/core/model/save_data.dart b/lib/src/core/model/save_data.dart index aa843f7..9983b4c 100644 --- a/lib/src/core/model/save_data.dart +++ b/lib/src/core/model/save_data.dart @@ -173,7 +173,7 @@ class GameSave { .toList(), ), equipment: Equipment( - weapon: equipmentJson['weapon'] as String? ?? 'Sharp Stick', + weapon: equipmentJson['weapon'] as String? ?? 'Keyboard', shield: equipmentJson['shield'] as String? ?? '', helm: equipmentJson['helm'] as String? ?? '', hauberk: equipmentJson['hauberk'] as String? ?? '',