# DS_L10N 사용 가이드 던전 스토커즈 현지화 통합 툴 ## 목차 1. [설치](#설치) 2. [설정](#설정) 3. [기본 사용법](#기본-사용법) 4. [개선된 워크플로우](#개선된-워크플로우) 5. [명령어 상세](#명령어-상세) 6. [문제 해결](#문제-해결) --- ## 설치 ### 1. 필요 라이브러리 설치 ```bash cd D:\Work\WorldStalker\DS_L10N pip install -r requirements.txt ``` 설치되는 라이브러리: - `polib`: PO 파일 안정적 처리 - `PyYAML`: 설정 파일 관리 - `pandas`: 데이터 처리 (기존 스크립트 호환) ### 2. 설정 파일 확인 `config.yaml` 파일에서 경로와 설정 확인: ```yaml paths: unreal_localization: ../WorldStalker/Content/Localization/LocalExport output_dir: ./output logs_dir: ./logs ... ``` 모든 경로는 상대 경로로 설정되어 있으며, `DS_L10N` 폴더 기준입니다. --- ## 설정 ### config.yaml 주요 설정 ```yaml # 검증 설정 validation: check_variables: true # {Value} 같은 변수 일치 확인 check_rich_text_tags: true # 태그 일치 확인 check_newlines: true # \r\n 줄바꿈 일치 확인 stop_on_validation_error: false # 검증 실패 시 중단 여부 # 자동 정리 cleanup: keep_recent_files: 5 # 최근 N개 파일만 유지 auto_archive: true # 오래된 파일 자동 보관 ``` 필요에 따라 `config.yaml`을 수정하여 사용하세요. --- ## 기본 사용법 ### 명령어 구조 ```bash python ds_l10n.py <명령어> [옵션] ``` ### 주요 명령어 | 명령어 | 설명 | 기존 스크립트 대체 | |--------|------|-------------------| | `extract` | 미번역 항목 추출 | `po_extract_untranslated.py` | | `validate` | 번역 검증 (신규) | - | | `update` | PO 파일 업데이트 | `po_update_from_tsv.py` | | `merge` | CSV 병합 | `po_merge_to_csv.py` | | `cleanup` | 파일 정리 (신규) | - | ### 도움말 보기 ```bash python ds_l10n.py --help python ds_l10n.py extract --help ``` --- ## 개선된 워크플로우 ### Before (기존 방식) 1. 언리얼 에디터: 텍스트 수집 → 익스포트 2. `po_extract_untranslated.py` 실행 → 파일 선택 (GUI) 3. 외부 번역 수행 (Google AI Studio 앱) 4. `번역업데이트.tsv`에 결과 저장 5. `po_update_from_tsv.py` 실행 → 파일/폴더 선택 (GUI) 6. 언리얼 에디터: PO 임포트 → 컴파일 7. `po_merge_to_csv.py` 실행 → 폴더 선택 (GUI) **문제점**: 매번 파일/폴더 선택, 검증 부재, 오류 발생 시 원인 파악 어려움 ### After (개선된 방식) 1. 언리얼 에디터: 텍스트 수집 → 익스포트 2. **`python ds_l10n.py extract`** - 미번역 추출 3. 외부 번역 수행 4. **`python ds_l10n.py validate`** - 번역 검증 ✨ 신규 5. **`python ds_l10n.py update`** - PO 업데이트 6. 언리얼 에디터: PO 임포트 → 컴파일 7. **`python ds_l10n.py merge`** - CSV 병합 8. **`python ds_l10n.py cleanup`** - 파일 정리 ✨ 신규 **개선점**: - ✅ 경로 자동 인식 (config.yaml) - ✅ 번역 검증 기능 추가 - ✅ 컬러 로그로 가독성 향상 - ✅ 자동 백업 생성 - ✅ 실패 원인 명확히 출력 - ✅ 오래된 파일 자동 정리 --- ## 명령어 상세 ### 1. extract - 미번역 항목 추출 ```bash # CLI 모드 (자동 경로) python ds_l10n.py extract # GUI 모드 (파일 선택) python ds_l10n.py extract --gui ``` **출력**: - `output/untranslated_YYYYMMDD_HHMMSS.tsv` - msgctxt, SourceLocation, msgid 컬럼 **사용 시기**: 언리얼에서 텍스트 익스포트 후 --- ### 2. validate - 번역 검증 ✨ 신규 ```bash # 기본 입력 파일 (번역업데이트.tsv) python ds_l10n.py validate # 특정 파일 지정 python ds_l10n.py validate output/untranslated_20251029_123456.tsv ``` **검증 항목**: - ❌ **변수 누락**: `{Value}`, `{Count}` 등이 번역문에 없음 - ❌ **태그 불일치**: `` 개수가 원문과 다름 - ⚠️ **줄바꿈 불일치**: `\r\n` 개수가 원문과 다름 - ℹ️ **길이 초과**: 번역문이 200자 초과 (설정 가능) **출력 예시**: ``` 🔍 번역 검증 결과 ================================================================================ ❌ 오류 (3건): - en: DT_Skill.Fireball.Desc 분류: 변수 누락 문제: 누락된 변수: {Damage} 원문: {Damage} 피해를 입힙니다 번역: Deals damage ⚠️ 경고 (2건): - ja: UI.Combat.AttackPower 분류: 태그 불일치 ... ================================================================================ 📊 통계: - total: 241 - errors: 3 - warnings: 2 - passed: 238 ✅ 검증 완료: 238건 통과 (경고 2건) ``` **사용 시기**: 외부 번역 완료 후, PO 업데이트 전 --- ### 3. update - PO 파일 업데이트 ```bash # 기본 입력 파일 (번역업데이트.tsv) python ds_l10n.py update # 특정 파일 지정 python ds_l10n.py update translations/my_translations.tsv # 시뮬레이션 모드 (실제 수정 안함) python ds_l10n.py update --dry-run ``` **개선 사항**: - ✅ **polib 사용**: 정규식 대신 안정적인 라이브러리 - ✅ **자동 백업**: 업데이트 전 `.backup_YYYYMMDD_HHMMSS.po` 생성 - ✅ **상세 로그**: 업데이트/스킵/실패 건수와 이유 출력 - ✅ **msgctxt 매칭**: 언리얼 해시 키로 정확히 매칭 **출력 예시**: ``` 언어 처리 중: en 백업 생성: LocalExport.backup_20251029_123456.po ✅ en: 234건 업데이트 ⏭️ en: 5건 스킵 (변경사항 없음) 언어 처리 중: ja 백업 생성: LocalExport.backup_20251029_123456.po ✅ ja: 230건 업데이트 ❌ ja: 2건 실패 - ,ABC123...: PO 파일에서 msgctxt를 찾을 수 없음 📊 전체 업데이트 결과: - 업데이트됨: 464 - 스킵됨: 5 - 실패: 2 - 처리 언어: 2 ``` **사용 시기**: 번역 검증 완료 후 --- ### 4. merge - CSV 병합 ```bash python ds_l10n.py merge ``` **출력**: - `LocalExport/merged_po_entries_YYYYMMDD_HHMMSS.csv` - 모든 언어의 번역을 하나의 CSV로 통합 **사용 시기**: PO 임포트/컴파일 후, 엑셀에서 관리할 때 --- ### 5. cleanup - 파일 정리 ✨ 신규 ```bash python ds_l10n.py cleanup ``` **정리 항목**: - 📦 오래된 CSV 파일 → `archive/YYYYMM/` 폴더로 이동 - 📦 오래된 미번역 TSV 파일 보관 - 🗑️ 7일 이상 된 백업 파일 삭제 - 🗑️ 30일 이상 된 로그 파일 삭제 **설정** (`config.yaml`): ```yaml cleanup: keep_recent_files: 5 # 최근 5개만 유지 keep_backups_days: 7 # 백업 보관 기간 delete_old_logs_days: 30 # 로그 보관 기간 ``` **사용 시기**: 파일이 너무 많이 쌓였을 때 --- ## 문제 해결 ### Q1. 명령어 실행 시 "모듈을 찾을 수 없습니다" 오류 ```bash # 필요 라이브러리 재설치 pip install -r requirements.txt ``` ### Q2. "PO 파일을 찾을 수 없습니다" 오류 `config.yaml`의 경로 설정 확인: ```yaml paths: unreal_localization: ../WorldStalker/Content/Localization/LocalExport ``` 상대 경로가 올바른지 확인하세요. ### Q3. 업데이트 후에도 언리얼에서 번역이 안 보임 1. 언리얼 에디터에서 **PO 임포트** 실행 2. **텍스트 컴파일** 실행 3. 에디터 재시작 ### Q4. 검증에서 많은 오류가 나옴 **변수 누락 오류**: - 번역문에 `{Value}` 같은 변수를 포함시키지 않음 - 원문의 변수를 그대로 번역문에 복사 **태그 불일치 오류**: - `강력한`처럼 여는 태그와 닫는 태그 개수 일치시키기 **줄바꿈 불일치 경고**: - `\r\n` 위치를 원문과 동일하게 유지 (UI 레이아웃) ### Q5. 기존 GUI 스크립트를 계속 사용하고 싶음 기존 스크립트 파일은 그대로 유지됩니다: - `po_extract_untranslated.py` - `po_update_from_tsv.py` - `po_merge_to_csv.py` 또는 `--gui` 옵션 사용: ```bash python ds_l10n.py extract --gui ``` ### Q6. 로그 파일이 너무 많이 쌓임 ```bash python ds_l10n.py cleanup ``` 또는 `config.yaml`에서 자동 삭제 기간 조정: ```yaml cleanup: delete_old_logs_days: 7 # 7일로 단축 ``` --- ## 고급 사용법 ### Dry-run 모드로 안전하게 테스트 ```bash # 실제 파일 수정 없이 시뮬레이션 python ds_l10n.py update --dry-run ``` ### 커스텀 설정 파일 사용 ```bash python ds_l10n.py --config my_config.yaml extract ``` ### 배치 스크립트로 자동화 `update_translations.bat`: ```batch @echo off cd /d D:\Work\WorldStalker\DS_L10N echo [1/4] 번역 검증 중... python ds_l10n.py validate if errorlevel 1 ( echo 검증 실패! 번역을 확인하세요. pause exit /b 1 ) echo [2/4] PO 파일 업데이트 중... python ds_l10n.py update if errorlevel 1 ( echo 업데이트 실패! pause exit /b 1 ) echo [3/4] CSV 병합 중... python ds_l10n.py merge echo [4/4] 파일 정리 중... python ds_l10n.py cleanup echo. echo ======================================== echo 모든 작업 완료! echo ======================================== pause ``` --- ## 로그 파일 모든 작업의 상세 로그는 `logs/` 폴더에 저장됩니다: - `logs/workflow_YYYYMMDD_HHMMSS.log` 문제 발생 시 로그 파일을 확인하세요. --- ## 지원 문제가 발생하면: 1. 로그 파일 확인 (`logs/` 폴더) 2. `config.yaml` 설정 확인 3. 이 가이드의 "문제 해결" 섹션 참조 --- **버전**: 2.0 **최종 수정**: 2025-01-29 **작성자**: Claude Code + DS_L10N Team