Files
DS_L10N/README.md
2025-10-30 19:42:50 +09:00

459 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DS_L10N
던전스토커즈 다국어 번역 통합 툴
---
## 📑 목차
1. [빠른 시작](#-빠른-시작)
2. [주요 기능](#-주요-기능)
3. [설치 및 설정](#-설치-및-설정)
4. [워크플로우](#-워크플로우)
5. [명령어 상세](#-명령어-상세)
6. [문제 해결](#-문제-해결)
7. [프로젝트 구조](#-프로젝트-구조)
---
## 🚀 빠른 시작
### 1. 라이브러리 설치 (최초 1회)
```bash
cd D:\Work\WorldStalker\DS_L10N
pip install -r requirements.txt
```
**설치되는 라이브러리**:
- `polib`: PO 파일 안정적 처리
- `PyYAML`: 설정 파일 관리
- `pandas`: 데이터 처리
### 2. 명령어 실행
```bash
python ds_l10n.py extract # 미번역 추출 (en만)
python ds_l10n.py extract --all-languages # 미번역 추출 (모든 언어)
python ds_l10n.py extract --include-fuzzy # fuzzy 항목 포함
python ds_l10n.py validate # 번역 검증
python ds_l10n.py update # PO 업데이트
python ds_l10n.py merge # CSV 병합
python ds_l10n.py cleanup # 파일 정리
```
### 3. 도움말
```bash
python ds_l10n.py --help
python ds_l10n.py extract --help
```
---
## ✨ 주요 기능
-**자동 경로 인식** (`config.yaml` 기반)
-**번역 검증** (변수, 태그, 줄바꿈 확인)
-**안정적 업데이트** (polib 라이브러리 사용)
-**컬러 로그** (오류 원인 명확히 표시)
-**자동 백업** (업데이트 전 자동 생성)
-**자동 파일 정리** (오래된 파일 보관)
-**원본 언어(ko) 업데이트 지원**
-**줄바꿈 이스케이프 자동 처리**
-**스마트 미번역 감지** (msgstr 빈 값, ko 원본 변경 감지)
-**fuzzy 항목 추출** (리뷰 필요한 번역 감지)
-**유연한 언어 검사** (en만 또는 전체 언어)
---
## 🔧 설치 및 설정
### config.yaml 설정
`config.yaml` 파일에서 경로와 동작 설정 (상대 경로 사용):
```yaml
paths:
unreal_localization: ../WorldStalker/Content/Localization/LocalExport
output_dir: ./output
logs_dir: ./logs
archive_dir: ./archive
languages:
source: ko # 원본 언어
targets: # 번역 대상 언어 (17개)
- en
- ja
- zh-Hans
- zh-Hant
# ... 기타 언어
extract:
check_all_languages: false # 모든 언어 검사 (기본: en만)
include_fuzzy: true # fuzzy 항목 포함 (리뷰 필요)
separate_files: true # 언어별 개별 파일 생성
validation:
check_variables: true # {Value} 변수 확인
check_rich_text_tags: true # <Red></> 태그 확인
check_newlines: true # \r\n 줄바꿈 확인
check_empty_translations: true # 빈 번역 확인
cleanup:
keep_recent_files: 5 # 최근 N개 파일만 유지
auto_archive: true # 오래된 파일 자동 보관
backup:
auto_backup_before_update: true # 업데이트 전 자동 백업
keep_backups_days: 7 # 백업 보관 기간
```
### 필요한 디렉토리 (자동 생성)
스크립트 실행 시 자동으로 생성됩니다:
- `output/` - 미번역 항목 TSV 파일
- `logs/` - 작업 로그 파일
- `archive/` - 오래된 파일 보관
---
## 📖 워크플로우
```
1⃣ 언리얼 에디터
└─ 현지화 대시보드 → 텍스트 수집 → 텍스트 익스포트
2⃣ 미번역 추출
python ds_l10n.py extract # en만 검사 (기본)
python ds_l10n.py extract --all-languages # 모든 언어 검사
└─ output/untranslated_YYYYMMDD_HHMMSS.tsv 생성
3⃣ 외부 번역 수행
└─ Google AI Studio 번역 앱 사용
└─ 번역업데이트.tsv에 결과 저장
4⃣ 번역 검증
python ds_l10n.py validate
└─ 변수, 태그, 줄바꿈 오류 확인
5⃣ PO 파일 업데이트
python ds_l10n.py update
└─ 자동 백업 + 모든 언어 PO 파일 업데이트 (ko 포함)
6⃣ 언리얼 에디터
└─ 현지화 대시보드 → PO 파일 임포트 → 텍스트 컴파일
7⃣ 사후 관리
python ds_l10n.py merge # CSV로 백업
python ds_l10n.py cleanup # 파일 정리
```
### 자동화 옵션
4~7단계 자동 실행:
```bash
python ds_l10n.py validate && python ds_l10n.py update && python ds_l10n.py merge && python ds_l10n.py cleanup
```
---
## 📝 명령어 상세
### 1. extract - 미번역 항목 추출
```bash
# 기본 사용 (en만 검사)
python ds_l10n.py extract
# 모든 언어 검사
python ds_l10n.py extract --all-languages
# fuzzy 항목 포함 (원본 변경으로 리뷰 필요한 항목)
python ds_l10n.py extract --include-fuzzy
# 옵션 조합
python ds_l10n.py extract --all-languages --include-fuzzy
# GUI 모드 (파일 선택)
python ds_l10n.py extract --gui
```
**기능**:
- **기본 동작**: en PO 파일에서 msgstr이 비어있는 항목 추출
- **--all-languages**: 모든 대상 언어(17개) 검사
- **--include-fuzzy**: fuzzy 플래그 항목도 추출 (ko 원본 변경 감지)
- msgstr이 비어있는 항목을 정확히 감지
- TSV 형식으로 저장 (msgctxt, SourceLocation, msgid)
**출력**:
- 기본: `output/untranslated_YYYYMMDD_HHMMSS.tsv`
- 전체 언어: `output/untranslated_{lang}_YYYYMMDD_HHMMSS.tsv` (언어별 17개 파일)
**사용 시나리오**:
1. **일반적인 경우**: `python ds_l10n.py extract` (en만 빠르게 검사)
2. **ko 원본이 변경된 경우**: `python ds_l10n.py extract --include-fuzzy`
3. **전체 언어 점검**: `python ds_l10n.py extract --all-languages`
---
### 2. validate - 번역 검증
```bash
python ds_l10n.py validate [TSV파일]
```
**검증 항목**:
-**오류 (ERROR)**: 변수 누락/추가, 태그 불일치
- ⚠️ **경고 (WARNING)**: 줄바꿈 불일치 (UI 레이아웃 영향)
- **정보 (INFO)**: 길이 초과
**특징**:
- ko는 원본 언어로 검증에서 자동 제외
- msgid 컬럼이 없으면 ko 컬럼을 원본으로 사용
- 오류 발견 시 상세한 원인과 위치 표시
---
### 3. update - PO 파일 업데이트
```bash
python ds_l10n.py update [TSV파일]
python ds_l10n.py update --dry-run # 시뮬레이션 모드
```
**기능**:
- TSV 파일의 번역을 모든 언어의 PO 파일에 반영
- ko(원본 언어)도 함께 업데이트
- TSV의 `\r\n` 이스케이프 시퀀스를 자동으로 PO 형식으로 변환
- 업데이트 전 자동 백업 생성
**중요**: 원본 텍스트 수정 시 TSV의 ko 컬럼에 새 원본을 입력하면 자동으로 반영됩니다.
---
### 4. merge - CSV 병합
```bash
python ds_l10n.py merge
```
**기능**:
- 모든 언어의 PO 파일을 하나의 CSV로 병합
- Excel에서 편집 가능한 형식으로 저장
**출력**: `LocalExport/merged_po_entries_YYYYMMDD_HHMMSS.csv`
**CSV 구조**:
```
msgctxt | SourceLocation | ko | en | ja | zh-Hans | ...
```
**참고**: ko(원본 언어)가 en 앞에 위치하여 원본 확인이 용이합니다.
---
### 5. cleanup - 파일 정리
```bash
python ds_l10n.py cleanup
```
**정리 항목**:
- 📦 오래된 CSV/TSV 파일 → `archive/YYYYMM/` 폴더로 이동
- 🗑️ 7일 이상 된 백업 파일 삭제
- 🗑️ 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}` 같은 변수를 번역문에 그대로 복사
**태그 불일치 오류**: 모든 `<TagName>`에 대응하는 `</>`가 있는지 확인
**줄바꿈 불일치 경고**: `\r\n` 위치를 원문과 동일하게 유지 (UI 레이아웃)
### Q5. 원본 언어(ko)를 수정하고 싶음
`번역업데이트.tsv`의 ko 컬럼에 수정된 원본을 입력하고:
```bash
python ds_l10n.py update # ko 포함 모든 언어 업데이트
```
### Q6. 코드 수정 후 반영이 안 됨
Python 캐시 문제일 수 있습니다:
```bash
# 방법 1: 캐시 삭제
find . -type d -name "__pycache__" -exec rm -rf {} +
# 방법 2: 캐시 무시 옵션
python -B ds_l10n.py merge
```
### Q7. Unicode/이모지 표시 오류
Windows 콘솔에서 이모지가 깨지는 경우:
- 로그 파일(`logs/`)에서는 정상적으로 표시됨
- Windows Terminal 사용 권장
### Q8. 미번역이 있는데 추출되지 않음
**상황**: PO 파일에 msgstr이 비어있는데 extract 명령으로 감지되지 않음
**원인**: 기본적으로 en만 검사하기 때문
**해결**:
```bash
# 모든 언어 검사
python ds_l10n.py extract --all-languages
```
### Q9. ko 원본이 변경되었는데 번역이 그대로임
**상황**: ko 원본 텍스트가 수정되었지만 번역문이 예전 원본 기준임
**원인**: fuzzy 플래그가 있는 항목은 기본 extract에서 제외됨
**해결**:
```bash
# fuzzy 항목도 추출 (리뷰 필요한 번역)
python ds_l10n.py extract --include-fuzzy
# 또는 전체 언어 + fuzzy
python ds_l10n.py extract --all-languages --include-fuzzy
```
---
## 📁 프로젝트 구조
```
DS_L10N/
├── ds_l10n.py # 메인 CLI 툴
├── config.yaml # 설정 파일
├── 번역업데이트.tsv # 번역 입력 파일
├── requirements.txt # 필요 라이브러리
├── README.md # 이 문서
├── lib/ # 라이브러리 모듈
│ ├── config_loader.py # 설정 로더
│ ├── logger.py # 컬러 로깅
│ ├── validator.py # 번역 검증
│ ├── po_handler.py # PO 파일 처리
│ └── file_manager.py # 파일 관리
├── output/ # 출력 파일 (자동 생성)
├── logs/ # 로그 파일 (자동 생성)
├── archive/ # 보관 파일 (자동 생성)
├── DS_Context.txt # 번역 문맥 가이드
├── DS_Terminology_DB.txt # 용어 데이터베이스
└── DS_Terminology_Guide.txt # 용어집 가이드
```
---
## 💡 고급 사용법
### Dry-run 모드
```bash
python ds_l10n.py update --dry-run
```
실행 결과를 미리 확인 후 실제 업데이트 진행
### 커스텀 설정 파일
```bash
python ds_l10n.py --config my_config.yaml extract
```
여러 프로젝트 관리 시 유용
### Jenkins/CI 통합
```bash
cd DS_L10N
python ds_l10n.py validate || exit 1
python ds_l10n.py update || exit 1
```
---
## 🔗 관련 문서
- **번역 문맥 가이드**: `DS_Context.txt`
- **용어 데이터베이스**: `DS_Terminology_DB.txt`
- **용어집 가이드**: `DS_Terminology_Guide.txt`
---
## 🆕 버전 히스토리
### v2.0.2 (2025-10-30)
- ✨ 미번역 추출 기능 대폭 개선
- 기본적으로 en만 검사 (빠른 실행)
- `--all-languages` 옵션으로 전체 언어 검사
- `--include-fuzzy` 옵션으로 리뷰 필요 항목 추출
- msgstr 빈 값 정확히 감지 (ko 원본 변경 케이스)
- ✨ config.yaml에 extract 설정 섹션 추가
- 📝 README에 새 기능 상세 설명 추가
- 📝 문제 해결 섹션에 Q8, Q9 추가
### v2.0.1 (2025-10-29)
- 🐛 줄바꿈 이스케이프 버그 수정 (TSV `\r\n` → PO 정확한 변환)
- 🐛 검증 로직 수정 (실제 escape sequence 검사)
- ✨ CSV 병합 시 msgid 컬럼 제거
- ✨ CSV에서 ko가 en 앞에 위치하도록 변경
- 📝 배치 파일 제거 (CLI만 사용)
- 📝 README 간소화 및 업데이트
### v2.0 (2025-01-29)
- ✨ 통합 CLI 툴 구현 (`ds_l10n.py`)
- ✨ 번역 검증 기능 추가
- ✨ 자동 파일 정리 기능
- ✨ 컬러 로깅 시스템
- ✨ ko(원본 언어) 업데이트 지원
- 🐛 polib 기반으로 안정성 향상
- 🐛 Unicode/이모지 인코딩 문제 해결
---
## 📄 라이선스
Copyright © 2025 OneUniverse. All rights reserved.
---
**버전**: 2.0.2
**최종 수정**: 2025-10-30
**작성자**: DS_L10N Team