feat(l10n): 누락된 번역 및 기본 무기 수정

- 기본 무기를 'Sharp Stick'에서 'Keyboard'로 변경 (아스키나라 세계관)
- 몬스터 번역 168개 추가 (보안 위협, 버그 등)
- BoringItems(잡템) 번역 42개 추가
- game_data_l10n에서 boringItem 번역 적용
This commit is contained in:
JiWoong Sul
2025-12-11 19:22:43 +09:00
parent 5a567bc3e3
commit 071ac5f1e3
9 changed files with 270 additions and 7 deletions

View File

@@ -248,6 +248,189 @@ const Map<String, String> 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<String, String> specialTranslationsKo = {
'Prototype': '프로토타입',
'Builder': '빌더',
};
/// 잡템(BoringItems) 한국어 번역
/// 몬스터 처치 시 획득하는 일반 아이템들
const Map<String, String> 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',
};

View File

@@ -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<L10n> {

View File

@@ -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!';
}

View File

@@ -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!';
}

View File

@@ -232,4 +232,10 @@ class L10nKo extends L10n {
String percentComplete(int percent) {
return '$percent% 완료';
}
@override
String get newCharacterTitle => '아스키나라 - 새 캐릭터';
@override
String get soldButton => '확인!';
}

View File

@@ -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!';
}

View File

@@ -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;
}
}

View File

@@ -302,7 +302,7 @@ class Equipment {
static const slotCount = 11;
factory Equipment.empty() => const Equipment(
weapon: 'Sharp Stick',
weapon: 'Keyboard',
shield: '',
helm: '',
hauberk: '',

View File

@@ -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? ?? '',