UNPKG

i18ntk

Version:

i18n Tool Kit - Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.

1,008 lines (1,007 loc) 160 kB
{ "meta": { "version": "4.7.0", "updated": "2026-07-07", "lang": "ko" }, "common": { "welcome": "환영", "hello": "안녕하세요", "goodbye": "안녕히 가세요", "yes": "예", "no": "아니요", "save": "구하다", "cancel": "취소", "delete": "삭제", "edit": "편집하다", "loading": "로드 중...", "offlineTitle": "오프라인 상태입니다", "offlineMessage": "인터넷 연결을 확인해주세요", "tryReconnect": "다시 연결해 보세요", "logout": "로그아웃", "login": "로그인", "amount": "양", "success": "성공", "error": "오류", "warning": "경고", "info": "정보:", "debug": "디버그", "progress": "진전:", "remaining": "남은 금액:", "total": "총:", "completed": "7. 성공적으로 완료되었습니다!", "missing": "없어진", "partial": "부분", "sameAsSource": "소스와 동일:", "formatMismatch": "형식 불일치:", "typeMismatch": "유형 불일치:", "structureMismatch": "구조 불일치:", "invalidOption": "잘못된 옵션", "separator": "==================================================", "initializationFailed": "❌ 초기화 실패: {error}", "stackTrace": "스택 추적: {stack}", "pressEnterToContinue": "계속하려면 Enter를 누르세요...", "pressEnterToReturn": "Enter를 눌러 주 메뉴로 돌아가세요...", "stepCompleted": "단계 '{stepName}' 완전한.", "stepFailed": "단계 '{stepName}'실패했습니다.", "runningStep": "실행 단계: {stepName}", "command": "명령: {command}", "startingWorkflow": "워크플로 시작 중...", "workflowCompleted": "워크플로가 완료되었습니다.", "checkReports": "자세한 내용은 보고서를 확인하세요.", "errorExecutingCommand": "명령 실행 중 오류 발생: {error}", "genericError": "❌ 오류: {error}", "errors": { "errors": "오류:", "genericError": "❌ 오류: {error}", "initializationFailed": "❌ 초기화 실패: {error}", "initializationCancelled": "❌ 사용자가 초기화를 취소했습니다.", "translationKeyNotFound": "번역 키를 찾을 수 없습니다: {key}", "sourceDirectoryNotFound": "소스 디렉터리를 찾을 수 없습니다: {directory}", "configLoadingFailed": "구성 로드에 실패했습니다.", "invalidSourceDirectory": "잘못된 소스 디렉터리: {directory}", "securityViolation": "보안 위반이 감지되었습니다.", "authenticationFailed": "인증 실패", "sourceEqualsI18nWarn": "⚠️ sourceDir은 i18nDir과 같습니다({sourceDir}). 다음으로 넘어짐 {fallback} 소스 스캔을 위해." }, "errorGeneratingStatusSummary": "상태 요약을 생성하는 중에 오류가 발생했습니다. {error}", "errorRunningDebugTool": "디버그 도구 실행 중 오류 발생 '{displayName}': {error}", "errorReadingDebugLogs": "디버그 로그를 읽는 동안 오류가 발생했습니다. {error}", "errorAnalyzingLogFile": "로그 파일 분석 오류: {error}", "errorAnalyzingTranslationKeys": "번역 키 분석 오류: {error}", "errorAnalyzingTranslationCompleteness": "번역 완성도 분석 오류: {error}", "analyzingTranslationCompleteness": "모든 언어에 대한 번역 완성도 분석 중...", "i18nDirectoryNotFound": "⚠️ i18n 디렉토리를 찾을 수 없습니다: {i18nDir}", "translationCompletenessAnalysisFailed": "⚠️ 번역 완성도 분석 실패: {error}", "failedToAnalyzeLanguage": "❌ 언어 분석 실패 {language}: {error}", "errorReadingI18nDirectory": "❌ i18n 디렉터리 읽기 오류:", "languageCompletenessTitle": "📈 언어별 번역 완전성", "errorAnalyzingTranslationFormat": "번역 형식 분석 오류: {error}", "errorAnalyzingTranslationType": "번역 유형 분석 오류: {error}", "errorAnalyzingTranslationStructure": "번역 구조 분석 오류: {error}", "errorAnalyzingTranslationFormatMismatch": "번역 형식 불일치 분석 오류: {error}", "errorAnalyzingTranslationTypeMismatch": "번역 유형 불일치 분석 오류: {error}", "errorAnalyzingTranslationStructureMismatch": "번역 구조 불일치 분석 오류: {error}", "errorAnalyzingTranslationSameAsSource": "소스와 동일한 번역을 분석하는 중에 오류가 발생했습니다. {error}", "title": "상태", "nextStep1": "1. 사용량 분석 확인:", "nextStep2": "2. 번역 검증:", "nextStep3": "3. 완전성 분석:", "nextStep4": "4. 누락된 번역을 완료하세요.", "nextStep5": "5. 요약 보고서 생성:", "nextStep6": "6. 번역을 검토하고 마무리합니다.", "generating": "요약 보고서 생성 중...", "review": "번역을 검토하는 중...", "finalizing": "번역을 마무리하는 중...", "finalized": "성공적으로 마무리되었습니다!", "warnings": "경고:", "completedKeys": "완성된 키:", "missingKeys": "누락된 키:", "partialKeys": "부분 키:", "home": "집", "settings": "설정", "startingSettings": "🎛️ 설정 CLI 시작 중...", "confirm": "확인하다", "errorExiting": "종료하는 동안 오류가 발생했습니다." }, "errors": { "invalidOption": "❌ 잘못된 옵션: {option}. 다시 시도해 주세요.", "readlineClosed": "입력 스트림이 닫혔습니다. 비대화형 모드로 실행 중입니다.", "noPackageJson": "package.json을 찾을 수 없습니다. i18n 프레임워크를 자동 감지할 수 없습니다.", "noI18nDir": "프로젝트 루트에 i18n 디렉터리가 없습니다.", "noI18nConfig": "프로젝트 루트에 i18n 구성 파일이 없습니다.", "errorReadingDebugLogs": "디버그 로그를 읽는 동안 오류가 발생했습니다. {error}" }, "scanner": { "help_message": "I18n 텍스트 스캐너 사용법: node i18ntk-scanner.js [옵션] 옵션: --source-dir <dir> 스캔할 소스 디렉터리(기본값: ./src) --output <file> 스캔 결과 출력 파일(기본값: ./i18ntk-scanner-report.json) --framework <name> 대상 프레임워크(반응, vue, 각도, 바닐라) --패턴 <patterns> 사용자 정의 정규식 패턴(쉼표로 구분) --include-tests 검사에 테스트 파일 포함 --exclude-dirs <dirs> 제외할 디렉터리(쉼표로 구분) --help 이 도움말 표시 예: node i18ntk-scanner.js --source-dir=./src --framework=react node i18ntk-scanner.js --patterns 'console.log\\((.*?)\\)' --include-tests node i18ntk-scanner.js --output=./scan-results.json", "help_options": { "source_dir": "i18n 문제를 스캔할 소스 디렉터리", "output_dir": "스캔 보고서 및 결과 디렉터리", "framework": "대상 프레임워크(반응, Vue, 각도, 바닐라)", "patterns": "텍스트 감지를 위한 사용자 정의 정규식 패턴", "exclude": "검사에서 제외할 파일 패턴", "output_report": "자세한 스캔 보고서 생성", "min_length": "번역을 위해 고려해야 할 최소 텍스트 길이", "max_length": "번역을 위해 고려해야 할 최대 텍스트 길이", "include_tests": "스캔 프로세스에 테스트 파일 포함" }, "starting": "🔍 프레임워크용 텍스트 스캐너 시작: {framework}", "sourceDirectory": "📁 스캔 디렉터리: {sourceDir}", "frameworkDetected": "🎯 감지된 프레임워크: {framework}", "scanningFiles": "📊 스캔 중 {fileCount} 파일...", "foundTexts": "📝 발견됨 {textCount} 번역이 필요한 텍스트", "generatingReport": "📊 상세 보고서 생성 중...", "reportSaved": "💾 스캔 보고서 저장 위치: {reportPath}", "noTextsFound": "✅ 하드코딩된 영어 텍스트가 없습니다.", "scanComplete": "🎉 스캔이 성공적으로 완료되었습니다!", "analysisTitle": "🔍 번역 스캔 분석", "fileSummary": "📄 {file}: {count} 발견된 텍스트", "textLocation": "📍 라인 {line}: {text}", "foundText": "설립하다 {count} 잠재적인 하드코딩된 텍스트 인스턴스", "context": "📝 맥락: {context}", "severity": "⚠️ 심각도: {severity}", "recommendation": "💡 추천: {recommendation}", "welcome": { "title": "🎯 텍스트 스캐너에 오신 것을 환영합니다!", "description": "이 도구는 소스 코드에서 번역이 필요할 수 있는 하드코딩된 영어 텍스트를 검색합니다." }, "frameworkPrompt": { "title": "🎯 프레임워크 선택", "available": "사용 가능한 프레임워크: React, Vue, Angle, Vanilla", "description": "프레임워크 유형을 입력하십시오(또는 자동 감지를 위해 Enter를 누르십시오).", "input": "뼈대:" }, "directoryPrompt": { "title": "📁 소스 디렉토리 선택", "current": "현재 디렉터리: {dir}", "description": "검색할 디렉터리를 입력하세요(또는 현재 디렉터리를 보려면 Enter를 누르세요):", "input": "예배 규칙서:" }, "options": { "includeTests": "테스트 파일을 포함하시겠습니까?", "excludeDirs": "제외할 디렉터리(쉼표로 구분):", "customPatterns": "검색할 사용자 정의 패턴(정규식):" }, "reportGenerated": "생성된 스캔 보고서: {path}" }, "fixer": { "help_message": "I18n Translation Fixer 사용법: node i18ntk-fixer.js [옵션] 옵션: --source-dir <dir> 스캔할 소스 디렉터리(기본값: ./locales) --언어 <langs> 수정할 언어의 쉼표로 구분된 목록 --markers <markers> 번역되지 않은 것으로 처리할 쉼표로 구분된 마커 --no-backup 자동 백업 생성 건너뛰기 --help 이 도움말 표시 예: node i18ntk-fixer.js --언어s de,fr node i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED node i18ntk-fixer.js --no-backup", "starting": "🚀 언어 번역 수정 시작: {languages}", "sourceDirectory": "📁 소스 디렉토리: {sourceDir}", "sourceLanguage": "🔤 소스 언어: {sourceLanguage}", "markers": "🏷️ 수정할 마커: {markers}", "scanningLanguage": "📊 스캔 중 {language}...", "noLanguages": "❌ 수정을 위해 지정된 언어가 없습니다.", "allComplete": "🎉 모든 번역이 이미 완료되었습니다!", "fullReportSaved": "📊 전체 보고서 저장 위치: {reportPath}", "reviewReport": "계속하기 전에 보고서를 검토하세요.", "backupCreated": "💾 백업이 성공적으로 생성되었습니다.", "applyingFixes": "🔄 수정사항 적용 중...", "fixingComplete": "✅ 번역 수정 완료!", "operationCancelled": "❌ 사용자가 작업을 취소했습니다.", "analysisTitle": "🔍 번역 수정 분석", "analysisSeparator": "==================================================", "totalIssues": "발견된 총 문제: {totalIssues}", "missingTranslations": "누락된 번역: {missing}", "placeholderTranslations": "자리 표시자 번역: {placeholder}", "noIssues": "✅ 문제가 발견되지 않았습니다. 모든 번역이 완료되었습니다.", "detailedIssues": "📋 DETAILED ISSUES:", "detailedSeparator": "--------------------------------------------------", "filePath": "📄 {file} → {path}", "missingKey": "❌ 누락: {source} → {new}", "placeholderKey": "⚠️ 자리 표시자: \"{target}\" → \"{new}\"", "moreIssues": "... 그리고 {count} 더 많은 문제. 자세한 내용은 보고서 파일을 확인하세요.", "confirmationTitle": "🤔 이 수정 사항을 계속 진행하시겠습니까?", "confirmationOptions": "옵션:", "optionYes": "y - 예, 모든 수정 사항을 적용합니다.", "optionNo": "n - 아니요, 작업을 취소합니다.", "optionShow": "s - 자세한 문제 표시", "choicePrompt": "귀하의 선택(y/n/s):", "nonInteractiveMode": "⚡ 비대화형 모드가 감지되었습니다. 자동으로 수정사항을 적용하고 있습니다...", "reportGenerated": "📊 Fixer 보고서 생성됨: {path}", "summary": "해결사 요약:", "welcome": { "title": "🎯 번역 해결사에 오신 것을 환영합니다!", "description": "이 도구는 로케일 파일 전체에서 깨진 번역과 자리 표시자를 수정하는 데 도움이 됩니다." }, "markerPrompt": { "title": "🏷️ 자리표시자 마커 구성", "description": "번역되지 않은 텍스트를 나타내는 마커를 입력하세요(쉼표로 구분).", "currentDefaults": "기본 마커: {markers}", "input": "마커(또는 기본값을 보려면 Enter를 누르십시오):" }, "languagePrompt": { "title": "🌍 수정할 언어 선택", "available": "사용 가능한 언어: {languages}", "description": "수정할 언어를 쉼표로 구분하여 입력하거나 모두 Enter 키를 누르세요.", "input": "언어:", "noLanguages": "수정할 언어가 없습니다." }, "directoryPrompt": { "title": "📁 디렉토리 선택", "current": "현재 디렉터리: {dir}", "description": "로케일 파일이 포함된 디렉토리를 입력하십시오(또는 현재를 위해 Enter를 누르십시오):", "input": "예배 규칙서:" }, "backupLocation": "백업 위치: {dir}", "completed": "수정이 완료되었습니다.", "creatingBackup": "백업 생성 위치 {dir}...", "dryRunMode": "시험 실행 모드: {mode}", "error": "해결 프로그램 실패: {error}", "fixing": "고정 {language}...", "foundLanguages": "설립하다 {count} 언어: {languages}", "languageFixed": "{language}: 고정 {fixed} 키, 건너뛰었습니다. {skipped}.", "running": "번역 수정 프로그램 실행 중...", "totalFixed": "총 고정 금액: {count}" }, "autorun": { "stepAnalyzeTranslations": "번역 분석", "stepCompletedWithIcon": "✅ 완료됨: {stepName}", "stepValidateTranslations": "번역 검증", "stepRunning": "▶️ 단계 {stepNumber}/{totalSteps}: {stepName}", "separator": "==================================================", "stepFailed": "❌ 실패: {stepName}", "errorLabel": "오류", "autoRunScriptTitle": "🧪 자동 실행 작업 흐름", "usageTitle": "용법", "runAllSteps": "실행: node i18ntk-autorun.js", "configureSettingsFirst": "구성: i18ntk-config.json 또는 CLI 플래그", "runSpecificSteps": "단계를 표시하려면 --steps=1,3 또는 --list를 사용하세요.", "showHelp": "--자세한 내용은 도움말을 참조하세요.", "examplesTitle": "예", "configExample": "노드 i18ntk-autorun.js --ui-언어=zh", "stepsExample1": "노드 i18ntk-autorun.js --단계=분석, 검증", "stepsExample2": "노드 i18ntk-autorun.js --list", "customSettingsConfiguration": "사용자 정의 자동 실행 설정", "availableSteps": "사용 가능한 단계", "startingAutoRunWorkflow": "🚀 자동 실행 워크플로 시작 중...", "workflowIncludesSteps": "워크플로에는 다음이 포함됩니다. {count} 단계:", "missingRequiredFile": "필수 파일 누락: {file}", "workflowStopped": "오류로 인해 워크플로가 중지되었습니다.", "workflowCompleted": "🎉 워크플로가 완료되었습니다!", "successfulSteps": "성공적인 단계: {count}", "failedSteps": "실패한 단계: {count}", "stepInitializeProject": "프로젝트 초기화", "stepCheckUsage": "키 사용량 확인", "stepGenerateSummary": "요약 보고서 생성", "runInitializationFirst": "먼저 초기화를 실행해 주세요.", "initializationCheckPassed": "초기화 확인을 통과했습니다.", "runningStep": "실행 단계: {stepName}", "commandLabel": "명령: {command}", "stepCompletedWithTime": "단계 '{stepName}'에서 완료 {duration}ms.", "stepCompleted": "단계 '{stepName}' 완전한.", "stepFailedWithError": "단계 '{stepName}' 오류로 인해 실패했습니다: {error}", "requiredStepFailed": "필수 단계가 실패했습니다. 워크플로를 중지합니다.", "optionalStepFailed": "선택적 단계가 실패했습니다. 워크플로를 계속합니다.", "stepRequired": "(필수의)", "stepOptional": "(선택 과목)", "startingExecution": "실행 시작 중...", "pressEnterToContinue": "계속하려면 Enter를 누르세요...", "runningSelectedSteps": "선택한 단계를 실행 중...", "invalidStepNumber": "잘못된 단계 번호: {stepNum}", "executionReport": "실행 보고서:", "requiredFailedSteps": "필수 단계 실패: {count}", "stepDetails": "단계 세부정보:", "reportSavedTo": "보고서 저장 위치: {path}", "overallStatusSuccess": "SUCCESS", "overallStatusFailed": "FAILED", "overallStatus": "전반적인 상태: {status}", "pressEnterForDefaults": "모든 프롬프트에 기본 설정을 사용하려면 Enter 키를 누르세요.", "sourceDirPrompt": "소스 디렉터리를 입력하세요(기본값: {default}):", "sourceLangPrompt": "출발어를 입력하세요(기본값: {default}):", "targetLangsPrompt": "대상 언어를 입력하세요(쉼표로 구분, 기본값: {default}):", "translationMarkerPrompt": "번역 마커 입력(기본값: {default}):", "outputDirPrompt": "보고서의 출력 디렉터리를 입력합니다(기본값: {default}):", "settingsUpdatedSuccessfully": "설정이 성공적으로 업데이트되었습니다!", "errorConfiguringSettings": "설정 구성 오류: {error}", "configurationComplete": "구성이 완료되었습니다.", "runAutoRunCommand": "이제 자동 실행 명령을 실행할 수 있습니다.", "configurationFailed": "구성 실패: {error}", "noValidStepNumbers": "유효한 단계 번호가 제공되지 않았습니다.", "autoRunFailed": "자동 실행 실패: {error}", "stepCompleteTranslations": "완전한 번역", "stepAnalyzeSizing": "크기 분석", "stepCompletedIcon": "✅", "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] 단계 '{stepName}' 달리기...", "stepFailedIcon": "❌", "translationLoadWarning": "경고: 로드할 수 없습니다. {lang} 번역", "configReadError": "읽는 중 오류가 발생했습니다. {file}" }, "analyze": { "help_message": "I18n 번역 분석기 사용법: node i18ntk-analyze.js [옵션] 옵션: --source-dir <dir> 스캔할 소스 디렉터리(기본값: ./src) --i18n-dir <dir> I18n 디렉터리(기본값: ./src/locales) --output-report 세부 보고서 생성 --output-dir <dir> 보고서의 출력 디렉터리(기본값: ./reports) --help 이 도움말 표시 예: node i18ntk-analyze.js --output-report node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales node i18ntk-analyze.js --output-dir=./analytic --output-report", "source_directory": "📁 소스 디렉토리: {sourceDir}", "i18n_directory": "🌐 I18n 디렉토리: {i18nDir}", "loading_translation_files": "📋 번역 파일 로드 중...", "sourceDirectoryLabel": "📁 소스 디렉토리: {sourceDir}", "sourceLanguageLabel": "🌍 소스 언어: {sourceLanguage}", "strictModeLabel": "⚙️ 엄격 모드: {mode}", "found_translation_files_count": "✅ 찾음 {count} 번역 파일", "analyzing_translations": "🔍 번역 분석 중...", "analysis_completed_successfully": "🎉 분석이 성공적으로 완료되었습니다!", "analysis_results": "📊 ANALYSIS RESULTS", "language_analysis_stats": "{language}: {translatedKeys}/{totalKeys} ({percentage}% 번역됨)", "sample_missing_keys": "누락된 키 샘플:", "missing_key": "- {key}", "and_more_missing": "...그리고 {count} 더.", "sample_unused_keys": "사용되지 않은 키 샘플:", "unused_key": "- {key}", "and_more_unused": "...그리고 {count} 더.", "recommendations": "📋 추천", "add_missing_translations": "💡 누락된 번역을 추가하여 적용 범위를 개선하세요.", "remove_unused_translations": "💡 프로젝트를 깨끗하게 유지하려면 사용하지 않는 번역을 제거하세요.", "next_steps": "📋 NEXT STEPS", "review_analysis_results": "1. 콘솔 또는 생성된 보고서에서 분석 결과를 검토합니다.", "run_with_output_report": "2. 자세한 보고서를 보려면 --output-report를 사용하여 실행하세요.", "add_or_remove_translations": "3. 누락된 번역을 추가하거나 사용하지 않는 번역을 제거하세요.", "rerun_analysis": "4. 분석을 다시 실행하여 개선 사항을 확인합니다.", "analysis_summary": "📊 ANALYSIS SUMMARY", "source_files_scanned": "스캔된 소스 파일: {fileCount}", "translation_files_checked": "번역 파일 확인: {translationFileCount}", "total_keys": "총 키: {totalKeys}", "translated_keys": "번역된 키: {translatedKeys}", "missing_keys": "누락된 키: {missingKeys}", "unused_keys": "사용되지 않은 키: {unusedKeys}", "translation_coverage": "번역 범위: {coverage}%", "analysis_passed_for_language": "✅ 분석 통과 {language}", "analysis_failed_for_language": "❌ 분석 실패 {language} ({missingKeys} 없어진, {unusedKeys} 미사용)", "starting": "🔍 번역 분석을 시작합니다...", "foundLanguages": "📋 찾았습니다 {count} 분석할 언어: {languages}", "analyzing": "🔄 분석 중 {language}...", "reportTitle": "📊 번역 분석 보고서", "generated": "생성됨: {timestamp}", "status": "상태: {translated}/{total} 키({percentage}% 번역됨)", "filesAnalyzed": "분석된 파일: {analyzed}/{total}", "keysNeedingTranslation": "번역이 필요한 키: {count}", "fileBreakdown": "📋 파일 분석", "error": "오류", "completed": "✅ 다음에 대한 분석이 완료되었습니다. {language}", "progress": "📊 전반적인 진행 상황: {translated}/{total} 처리된 언어", "reportSaved": "보고서가 저장되었습니다: {reportPath}", "summary": "📊 ANALYSIS SUMMARY", "finished": "✅ 분석이 성공적으로 완료되었습니다!", "statusFileMissing": "❌ 번역 파일이 없습니다", "sourceKeys": "📊 소스 키: {count}", "translation": "📊 번역: {translated}/{total} ({percentage}%)", "structure": "🗂️ 구조: {status}", "consistent": "일관된", "inconsistent": "일관성 없는", "missingKeys": "누락된 키: {count}", "extraKeys": "추가 키: {count}", "issues": "⚠️ 발견된 문제: {count}", "issueType": { "not_translated": "번역되지 않음: {count}", "empty_value": "빈 값: {count}", "partial_translation": "부분 번역: {count}", "format_mismatch": "형식 불일치: {count}", "type_mismatch": "유형 불일치: {count}", "structure_mismatch": "구조 불일치: {count}", "same_as_source": "소스와 동일: {count}" }, "keysToTranslate": "📋 번역 키", "key": "열쇠", "english": "영어", "needsTranslation": "번역이 필요합니다", "andMoreKeys": "...그리고 {count} 더 많은 열쇠.", "noLanguages": "⚠️ 타겟 언어가 없습니다.", "languageStats": "{language}: {percentage}% 완벽한 ({translated}/{total} 열쇠)", "invalidReportFilePath": "잘못된 보고서 파일 경로", "failedToWriteReportFile": "보고서 파일을 안전하게 작성하지 못했습니다." }, "complete": { "configLoadedSuccessfully": "구성이 성공적으로 로드되었습니다.", "configLoadingFailed": "구성 로드에 실패했습니다.", "sourceLanguageNotFound": "소스 언어 디렉토리를 찾을 수 없습니다: {sourceLanguage}", "couldNotParseTarget": "대상 파일을 구문 분석할 수 없습니다. {file}", "couldNotParseSource": "소스 파일을 구문 분석할 수 없습니다. {file}", "reportGenerated": "생성된 보고서: {path}", "generateReportPrompt": "보고서를 생성하시겠습니까?", "title": "🌍 I18NTK 번역 완료", "separator": "============================================================", "sourceDir": "📁 소스 디렉토리: {sourceDir}", "sourceLanguage": "🌐 소스 언어: {sourceLanguage}", "dryRunMode": "🧪 드라이 런 모드 - 변경 사항이 없습니다.", "languages": "🌍 사용 가능한 언어: {languages}", "addingMissingKeys": "➕ 번역 파일에 누락된 키 추가 중...", "processing": "🔄 처리 {language}...", "addedKeys": "✅ 추가됨 {count} 누락된 키", "noChangesNeeded": "✅ 변경이 필요하지 않습니다 {language}", "summaryTitle": "📊 완료 요약", "totalChanges": "📝 총 변경 사항: {totalChanges}", "languagesProcessed": "🌍 처리되는 언어: {languagesProcessed}", "missingKeysAdded": "➕ 누락된 키가 추가되었습니다: {missingKeysAdded}", "nextStepsTitle": "📋 NEXT STEPS", "nextStep1": "1. 사용량 분석 실행:", "nextStep2": "노드 i18ntk-usage.js --output-report", "nextStep3": "2. 번역 검증:", "nextStep4": "노드 i18ntk-validate.js", "nextStep5": "3. 패턴 분석:", "nextStep6": "노드 i18ntk-analyze.js", "allKeysAvailable": "🎉 이제 모든 번역 키를 사용할 수 있습니다!", "runWithoutDryRun": "💡 변경 사항을 적용하려면 --dry-run 없이 실행하세요.", "deletingOldReport": "🗑️ 오래된 보고서를 삭제하는 중...", "generatingFreshAnalysis": "📊 새로운 사용량 분석 생성 중...", "couldNotGenerate": "❌ 사용량 분석을 생성할 수 없습니다.", "reportNotFound": "📋 사용 보고서를 찾을 수 없습니다. 공용 키를 사용하는 중...", "foundMissingKeys": "📋 찾았습니다 {count} 사용량 분석에서 누락된 키", "couldNotParse": "❌ 사용 보고서를 구문 분석할 수 없습니다. 공용 키를 사용하는 중...", "errorDuringCompletion": "❌ 완료 중 오류: {error}", "fatalError": "❌ 치명적인 오류: {error}", "configurationValidationFailed": "구성 유효성 검사 실패: 필수 필드가 누락되었습니다." }, "sizing": { "separator": "================================================================================", "lineSeparator": "--------------------------------------------------------------------------------", "analysisStats": "{stats}", "sourceDirectoryLabel": "📁 소스 디렉토리: {sourceDir}", "sourceLanguageLabel": "🌍 소스 언어: {sourceLanguage}", "strictModeLabel": "⚙️ 엄격 모드: {mode}", "invalidSourceDirectoryError": "잘못된 소스 디렉터리 경로: {sourceDir}", "sourceDirectoryNotFoundError": "소스 디렉터리를 찾을 수 없습니다: {sourceDir}", "invalidOutputDirectoryError": "잘못된 출력 디렉터리 경로: {outputDir}", "invalidReportFileError": "잘못된 보고서 파일 경로", "problematic_keys": "문제가 있는 키: {problematicKeys}", "problematicKeysLabel": "문제가 있는 키: {problematicKeys}", "long_translations": "긴 번역: {longTranslations}", "failedToSaveReportError": "보고서를 안전하게 저장하지 못했습니다.", "invalidCsvFileError": "잘못된 CSV 파일 경로", "failedToSaveCsvError": "CSV 보고서를 안전하게 저장하지 못했습니다.", "fatalError": "❌ 크기 분석 실패: {error}", "starting_i18n_sizing_analysis": "i18n 크기 분석을 시작하는 중...", "source_directory": "소스 디렉토리: {sourceDir}", "found_languages": "발견된 언어: {languages}", "analyzing_file_sizes": "파일 크기 분석 중...", "analyzing_translation_content": "번역 내용 분석 중...", "generating_size_comparisons": "크기 비교 생성 중...", "no_languages_found_for_comparison": "비교할 언어를 찾을 수 없습니다.", "sizing_analysis_results": "I18n 사이징 분석 결과", "file_sizes_title": "파일 크기", "file_sizes_header": "언어 크기(KB) 행 문자", "file_size_row": "{lang} {sizeKB} {lines} {characters}", "language_statistics_title": "언어통계", "language_stats_header": "언어 키 문자 평균 길이 최대 길이 비어 있음 길게", "language_stats_row": "{lang} {totalKeys} {totalCharacters} {averageKeyLength} {maxKeyLength} {emptyKeys} {longKeys}", "size_variations_title": "크기 변화", "size_variations_header": "언어 문자 차이 % 차이 문제", "size_variation_row": "{lang} {characterDifference} {percentageDifference}% {problematic}", "problematic_yes": "예", "problematic_no": "아니요", "recommendations_title": "권장사항", "recommendation_item": "{index}. {recommendation}", "problematic_key_detail": "{index}. 열쇠: '{key}' - 변형: {variations}", "generating_detailed_report": "세부 보고서 생성 중...", "keysHaveSignificantSizeVariations": "키에는 상당한 크기 변화가 있습니다", "longTranslationsDetected": "${lang} 100자를 초과하는 ${data.longKeys} 번역이 있습니다. 이를 분해하는 것이 좋습니다.", "longer": "더 길게", "shorter": "더 짧은", "review_translations": "검토를 고려해보세요 {lang} 번역 - 그렇죠 {percentageDifference}% {comparison} 기준선보다", "report_saved_to": "보고서 저장 위치: {reportPath}", "considerReviewingTranslations": "검토를 고려해보세요 ${lang} 번역 - 기준보다 ${data.percentageDifference}% 더 깁니다.", "csv_report_saved_to": "CSV 보고서 저장 위치: {csvPath}", "human_report_saved": "읽을 수 있는 보고서가 저장되었습니다: {reportPath}", "folder_summary_title": "폴더 요약", "folder_summary_table_header": "언어 크기(KB) 키 평균 길이 총 문자 수", "folder_summary_row": "{lang} {sizeKB} {totalKeys} {avgLength} {totalChars}", "language_comparison_title": "언어 비교", "language_comparison_row": "{lang}: {diff} 문자({percent}%) {status}", "summary_stats": "📊 요약: {totalLanguages} 언어, {totalKeys} 키 - 저장된 보고서 {reportPath}", "detailedKeysDescription": "콘솔에 자세한 키 수준 분석 표시", "too_many_keys_warning": "⚠️ 콘솔에 표시할 키가 너무 많습니다. 전체 분석을 보려면 자세한 보고서 파일을 확인하세요.", "no_translation_files_found": "번역 파일을 찾을 수 없습니다.", "analysis_completed": "분석 완료 {duration}ms", "analysis_failed": "분석 실패: {errorMessage}", "starting_analysis": "분석 시작 중...", "found_files": "설립하다 {count} 파일", "failed_to_parse_language_error": "파싱하지 못했습니다. {language} 번역: {errorMessage}", "recommendations": { "keys_have_significant_size_variations": "키에는 상당한 크기 변화가 있습니다", "consider_reviewing_translations": "검토를 고려해보세요 {lang} 번역 - 그렇죠 {percentageDifference}% {comparison} 기준선보다", "long_translations_detected": "{lang} 가지다 {longKeys} 다음보다 긴 번역 {threshold} 캐릭터 - 분해하는 것을 고려해보세요" }, "detailed_key_analysis_title": "상세한 주요 분석", "key_analysis_detail": "{lang}: {length} 문자({status}) - {translation}", "key_analysis_header": "열쇠: {key}", "status_empty": "비어 있는", "status_long": "긴", "status_ok": "좋아요" }, "usage": { "help_message": "I18n 사용 분석기 사용법: node i18ntk-usage.js [옵션] 옵션: --source-dir <dir> 스캔할 소스 디렉터리(기본값: ./src) --i18n-dir <dir> I18n 디렉터리(기본값: ./src/locales) --output-report 세부 보고서 생성 --output-dir <dir> 보고서의 출력 디렉터리(기본값: ./reports) --help 이 도움말 표시 예: node i18ntk-usage.js --output-report node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales node i18ntk-usage.js --output-dir=./analytic --output-report", "source_directory_thissourcedir": "📁 소스 디렉토리: {sourceDir}", "translationCompletenessTitle": "🌍 번역 완전성:", "i18n_directory_thisi18ndir": "🌐 I18n 디렉토리: {i18nDir}", "failed_to_parse_filename_error": "⚠️ 구문 분석에 실패했습니다. {fileName}: {errorMessage}", "analyzing_source_files": "🔍 소스 파일 분석 중...", "found_files_in_source": "📂 발견 {numFiles} 소스 디렉터리의 파일", "found_thisusedkeyssize_unique_": "🎯 발견됨 {usedKeysSize} 고유하게 사용된 키", "total_key_usages_totalkeysfoun": "📊 총 키 사용: {totalKeysFound}", "loading_available_translation_": "📋 사용 가능한 번역 키 로드 중...", "found_thisavailablekeyssize_av": "✅ 찾음 {availableKeysSize} 사용 가능한 키", "foundTranslationFiles": "✅ 찾음 {count} 번역 파일", "errorReadingI18nDirectory": "⚠️ i18n 디렉토리 읽기 오류: {error}", "pressEnterToReturnToMenu": "📝 Enter를 눌러 메인 메뉴로 돌아가세요...", "notTranslatedKeysTotal": "⚠️ 번역되지 않은 키: {total}", "noSourceFilesFound": "⚠️ 소스 디렉터리에 소스 파일이 없습니다.", "reviewNotTranslatedKeys": "💡 번역되지 않은 키 검토", "analysisCompletedSuccessfully": "🎉 분석이 성공적으로 완료되었습니다!", "detectedSourceDirectory": "감지된 소스 디렉터리: {sourceDir}", "detectedI18nDirectory": "i18n 디렉토리가 감지되었습니다: {i18nDir}", "fileInfo": "📄 {namespace}: {keys} 열쇠", "failedToAnalyzeUsage": "❌ 사용량 분석 실패: {error}", "failedToAnalyzeFile": "❌ 파일 분석 실패: {error}", "failedToExtractKeys": "❌ 다음에서 키를 추출하지 못했습니다. {filePath}: {error}", "analysisFailedError": "❌ 분석 실패: {error}", "analyzerInitialized": "분석기가 초기화되었습니다.", "analyzerInitFailed": "분석기 초기화 실패: {error}", "argsParsed": "구문 분석된 인수", "processedFiles": "처리됨 {processedFiles} ~의 {totalFiles} 파일.", "argsParseFailed": "인수 구문 분석에 실패했습니다. {error}", "translationDiscoveryError": "번역 검색 오류: {error}", "fileTraversalError": "파일 탐색 오류: {error}", "sourceEqualsI18nWarn": "{reason}. 사용 분석에서는 로케일 파일을 소스 코드로 검색하지 않습니다.", "i18nEqualsSourceWarn": "⚠️ I18n 디렉토리와 소스 디렉토리는 동일합니다. 이로 인해 분석에 문제가 발생할 수 있습니다.", "usageAnalysisFailed": "⚠️ 사용량 분석 실패: {error}", "translationFileParseError": "⚠️ 번역 파일 구문 분석 오류: {error}", "translationKeysLoadError": "⚠️ 번역 키 로드 오류: {error}", "languageCompletenessStats": "🌐 {language}: {translated}/{total} ({completeness}% 번역됨)", "missingKeysCount": "⚠️ 누락된 키: {count}", "analyzingTranslationCompleteness": "번역 완성도 분석 중...", "unusedKeysCount": "사용되지 않은 키: {count}", "usedKeysCount": "사용된 키: {count}", "availableKeysCount": "사용 가능한 키: {count}", "analysisResults": "분석 결과:", "i18nDirectoryNotFound": "⚠️ I18n 디렉토리를 찾을 수 없습니다. 경로를 확인해주세요.", "sourceDirectoryNotFound": "⚠️ 소스 디렉터리를 찾을 수 없습니다: {dir}", "checkUsage": { "title": "🔍 I18NTK USAGE ANALYSIS", "analyzing_source_files": "🔍 소스 파일 분석 중...", "source_directory_thissourcedir": "📁 소스 디렉토리: {sourceDir}", "i18n_directory_thisi18ndir": "📁 i18n 디렉토리: {i18nDir}", "found_files_in_source": "✅ 찾음 {numFiles} 소스 디렉터리의 파일", "no_source_files_found": "⚠️ 지정된 디렉터리에 소스 파일이 없습니다.", "processedFiles": "📊 처리됨 {processedFiles} ~의 {totalFiles} 파일", "failedToProcessFile": "❌ 처리 실패", "found_thisusedkeyssize_unique_": "🔍 발견됨 {usedKeysSize} 고유하게 사용된 키", "total_key_usages_totalkeysfoun": "📊 총 키 사용: {totalKeysFound}", "loading_available_translation_": "📂 사용 가능한 번역 키 로드 중...", "found_thisavailablekeyssize_av": "✅ 찾음 {availableKeysSize} 사용 가능한 키", "message": "프로젝트 전체에서 번역 키 사용을 분석하는 중...", "usage_analysis_results": "📊 USAGE ANALYSIS RESULTS", "source_files_scanned_thisfileu": "📁 스캔된 소스 파일: {fileUsageSize}", "available_translation_keys_thi": "✅ 사용 가능한 번역 키: {availableKeysSize}", "used_translation_keys_thisused": "🔍 사용된 번역 키: {usedKeysSize}", "dynamic_keys_detected_dynamick": "⚡ 동적 키가 감지되었습니다: {dynamicKeysLength}", "unused_keys_unusedkeyslength": "🗑️ 사용하지 않은 키: {unusedKeysLength}", "missing_keys_missingkeyslength": "❌ 누락된 키: {missingKeysLength}", "translation_completeness_title": "📈 번역 완전성", "language_completeness_stats": "{language}: {translated}/{total} 키({percentage}%)", "n_sample_unused_keys": "🗑️ 사용하지 않은 키 샘플(처음 5개):", "key": "🔑 {key}", "and_unusedkeyslength_5_more": "... 그리고 {count} 사용하지 않은 키가 더 많습니다", "n_sample_missing_keys": "❌ 누락된 키 샘플(처음 5개):", "and_missingkeyslength_5_more": "... 그리고 {count} 더 많은 누락된 키", "n_generating_detailed_report": "📊 상세 보고서 생성 중...", "report_saved_reportpath": "📄 보고서 저장됨: {reportPath}", "n_recommendations": "💡 권장사항:", "consider_removing_unused_trans": "🗑️ 번들 크기를 줄이려면 사용하지 않는 번역을 삭제하는 것이 좋습니다.", "add_missing_translation_keys_t": "➕ 일관성을 유지하기 위해 누락된 번역 키를 추가합니다.", "review_dynamic_keys_manually_t": "🔍 동적 키를 수동으로 검토합니다(유효할 수도 있음)", "all_translation_keys_are_prope": "✅ 모든 번역 키가 올바르게 사용되었습니다!", "n_next_steps": "🎯 NEXT STEPS:", "2_check_the_detailed_report_fo": "2. 특정 이슈에 대한 상세 리포트를 확인하세요", "help_message": "I18n 사용 분석기 사용법: node i18ntk-usage.js [옵션] 옵션: --source-dir <dir> 스캔할 소스 디렉터리(기본값: ./src) --i18n-dir <dir> I18n 디렉터리(기본값: ./src/locales) --output-report 세부 보고서 생성 --output-dir <dir> 보고서의 출력 디렉터리(기본값: ./reports) --help 이 도움말 표시 예: node i18ntk-usage.js --output-report node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales node i18ntk-usage.js --output-dir=./analytic --output-report", "1_review_the_analysis_results": "1. 콘솔 또는 생성된 보고서에서 분석 결과를 검토합니다.", "2_run_with_outputreport_for_de": "2. 자세한 보고서를 보려면 --output-report를 사용하여 실행하세요.", "3_remove_unused_keys_or_add_mi": "3. 사용하지 않는 키를 제거하거나 누락된 키를 소스 코드에 추가하세요.", "4_rerun_analysis_to_verify_imp": "4. 분석을 다시 실행하여 개선 사항을 확인합니다.", "noSourceFilesFound": "분석할 소스 파일이 없습니다.", "i18nDirectoryNotFound": "I18n 디렉토리를 찾을 수 없습니다: {i18nDir}", "noTranslationLanguagesFound": "번역 언어가 없습니다.", "failedToAnalyzeFile": "파일을 분석하지 못했습니다. {filePath}: {error}", "failedToAnalyzeLanguage": "언어 분석에 실패했습니다. {language}: {error}", "translationCompletenessAnalysisFailed": "번역 완성도 분석 실패: {error}", "n": "\\N" }, "complete": { "configLoadedSuccessfully": "구성이 성공적으로 로드되었습니다.", "configLoadingFailed": "구성 로드에 실패했습니다.", "title": "🌍 I18NTK 번역 완료", "separator": "============================================================", "sourceDir": "📁 소스 디렉토리: {sourceDir}", "sourceLanguage": "🌐 소스 언어: {sourceLanguage}", "dryRunMode": "🧪 드라이 런 모드 - 변경 사항이 없습니다.", "languages": "🌍 사용 가능한 언어: {languages}", "addingMissingKeys": "➕ 번역 파일에 누락된 키 추가 중...", "processing": "🔄 처리 {language}...", "addedKeys": "✅ 추가됨 {count} 누락된 키", "changeDetails": "📝 {file}: {key}", "andMore": "...그리고 {count} 더", "noChangesNeeded": "✅ 변경이 필요하지 않습니다 {language}", "summaryTitle": "📊 완료 요약", "totalChanges": "📝 총 변경 사항: {totalChanges}", "languagesProcessed": "🌍 처리되는 언어: {languagesProcessed}", "missingKeysAdded": "➕ 누락된 키가 추가되었습니다: {missingKeysAdded}", "nextStepsTitle": "📋 NEXT STEPS", "nextStep1": "1. 사용량 분석 실행:", "nextStep2": "노드 i18ntk-usage.js --output-report", "nextStep3": "2. 번역 검증:", "nextStep4": "노드 i18ntk-validate.js", "nextStep5": "3. 패턴 분석:", "nextStep6": "노드 i18ntk-analyze.js", "allKeysAvailable": "🎉 이제 모든 번역 키를 사용할 수 있습니다!", "runWithoutDryRun": "💡 변경 사항을 적용하려면 --dry-run 없이 실행하세요.", "deletingOldReport": "🗑️ 오래된 보고서를 삭제하는 중...", "generatingFreshAnalysis": "📊 새로운 사용량 분석 생성 중...", "couldNotGenerate": "❌ 사용량 분석을 생성할 수 없습니다.", "reportNotFound": "📋 사용 보고서를 찾을 수 없습니다. 공용 키를 사용하는 중...", "foundMissingKeys": "📋 찾았습니다 {count} 사용량 분석에서 누락된 키", "couldNotParse": "❌ 사용 보고서를 구문 분석할 수 없습니다. 공용 키를 사용하는 중..." }, "noTranslationLanguagesFound": "번역 언어를 찾을 수 없습니다", "failedToAnalyzeLanguage": "언어 분석에 실패했습니다.", "translationCompletenessAnalysisFailed": "번역 완성도 분석 실패", "failedToProcessFile": "파일 처리 실패:", "failedToSaveReport": "사용량 보고서를 저장하지 못했습니다. {error}", "i18nDirectoryDoesNotExist": "I18n 디렉토리가 존재하지 않습니다: {dir}", "reportSavedTo": "사용 보고서 저장 위치: {reportPath}", "sourceDirectoryDoesNotExist": "소스 디렉터리가 존재하지 않습니다: {dir}", "noSourceDirectoryConfigured": "(구성된 바 없음)" }, "validate": { "help_message": "I18n 번역 유효성 검사기 사용법: node i18ntk-validate.js [옵션] 옵션: --source-dir <dir> 스캔할 소스 디렉터리(기본값: ./src) --i18n-dir <dir> I18n 디렉터리(기본값: ./src/locales) --output-report 세부 보고서 생성 --output-dir <dir> 보고서의 출력 디렉터리(기본값: ./reports) --help 이 도움말 표시 예: node i18ntk-validate.js --output-report node i18ntk-validate.js --source-dir=./app --i18n-dir=./locales node i18ntk-validate.js --output-dir=./analytic --output-report", "title": "🔍 I18n 번역 검사기", "message": "유효성 검사 프로세스를 시작하는 중...", "sourceDirectory": "📁 소스 디렉토리: {dir}", "sourceLanguage": "🌍 소스 언어: {sourceLanguage}", "strictMode": "⚙️ 엄격 모드: {mode}", "noTargetLanguages": "구성된 대상 언어가 없습니다. 대상 확인을 건너뛰는 중입니다. \"i18ntk init --언어s=de,fr\"을 통해 언어를 추가합니다.", "validatingLanguages": "🌍 언어 확인: {langs}", "validatingLanguage": "🔍 언어 확인 중: {lang}", "filesCount": "📄 파일: {count}", "keysCount": "🔑 키: {count}", "missingFilesCount": "📁 누락된 파일: {count}", "syntaxErrorsCount": "❌ 구문 오류: {count}", "translationPercentage": "🎯 번역: {percentage}% ({translated}/{total} 열쇠)", "validationSummary": "📊 검증 요약", "validation_failed": "❌ 유효성 검사 실패: {error}", "totalErrors": "❌ 총 오류 수: {count}", "totalWarnings": "⚠️ 총 경고: {count}", "errorsSection": "❌ ERRORS", "warningsSection": "⚠️ WARNINGS", "recommendationsSection": "💡 추천", "fixErrorsFirst": "1. 먼저 모든 오류를 수정하세요.", "resolveMissingFilesAndSyntaxErrors": "1. 누락된 파일 및 구문 오류 해결", "fixStructuralInconsistencies": "2. 구조적 불일치 수정", "completeMissingTranslations": "3. 누락된 번역을 완성하세요", "rerunValidation": "4. 유효성 검사를 다시 실행하여 수정 사항을 확인합니다.", "addressWarnings": "품질 개선을 위해 경고 해결", "reviewWarnings": "경고를 검토하고 적절한 경우 수정하세요.", "considerRunningWithStrict": "2. 보다 엄격한 검증을 위해 --strict 플래그를 사용하여 실행하는 것을 고려하십시오.", "allValidationsPassed": "🎉 모든 검증이 통과되었습니다!", "considerRunningUsageAnalysis": "사용량 분석 실행을 고려하십시오: node i18ntk-usage.js", "deletedOldReport": "🗑️ 오래된 검증 보고서를 삭제했습니다.", "sourceDir": "📁 소스 디렉토리: {sourceDir}", "i18nDir": "🌐 I18n 디렉토리: {i18nDir}", "loadingTranslationFiles": "📋 번역 파일 로드 중...", "foundTranslationFilesCount": "✅ 찾음 {count} 번역 파일", "analyzingTranslations": "🔍 번역 분석 중...", "validationCompletedSuccessfully": "🎉 검증이 성공적으로 완료되었습니다!", "validationErrorsFound": "⚠️ 확인 오류가 발견되었습니다: {count}", "validationWarningsFound": "⚠️ 유효성 검사 경고가 발견되었습니다. {count}", "validationPassed": "✅ 오류 없이 유효성 검사가 통과되었습니다.", "validationFailed": "검증 실패: {error}", "startingValidationProcess": "🔍 유효성 검사 프로세스 시작 중...", "validationProcessCompletedSuccessfully": "✅ 검증 과정이 성공적으로 완료되었습니다", "stackTrace": "스택 추적: {stack}", "authenticationFailed": "❌ 인증에 실패했습니다. 접근 불가.", "fatalValidationError": "❌ 치명적인 유효성 검사 오류: {error}", "configAccess": "검증을 위해 구성에 액세스하는 중", "configValidated": "구성이 성공적으로 검증되었습니다.", "configError": "구성 오류: {error}", "validatorInit": "I18n 유효성 검사기 초기화 중", "validatorInitialized": "I18n 유효성 검사기가 성공적으로 초기화되었습니다.", "validatorInitError": "유효성 검사기 초기화 오류: {error}", "argsParsing": "명령줄 인수 구문 분석", "argsParsed": "명령줄 인수가 성공적으로 구문 분석되었습니다.", "argsParseError": "인수 구문 분석 오류: {error}", "languagesScan": "사용 가능한 언어 스캔 중", "languagesFound": "설립하다 {count} 언어", "languagesScanError": "언어 검색 오류: {error}", "filesScan": "설립하다 {count} 파일 {language}", "filesScanError": "파일 검색 오류: {error}", "jsonValidated": "JSON 구문이 검증되었습니다: {filePath}", "jsonValidationError": "JSON 유효성 검사 오류: {error}", "languageValidation": "언어 확인 중: {language}", "languageValidationError": "언어 유효성 검사 오류: {error}", "fileDeleted": "파일이 삭제되었습니다.", "runStarted": "검증 실행 시작", "runCompleted": "검증 실행이 성공적으로 완료되었습니다.", "runError": "검증 실행 실패: {error}", "scriptExecution": "스크립트 실행", "validationCompleted": "검증 완료", "validationError": "유효성 검사 오류: {error}", "separator": "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", "languageHeader": "🌐 언어: {language}", "validationResults": "📊 검증 결과", "noErrors": "✅ 오류가 발견되지 않았습니다", "noWarnings": "✅ 경고가 발견되지 않았습니다", "summaryHeader": "📋 OVERALL SUMMARY", "progressIndicator": "⏳ 처리 중...", "completedIndicator": "✅ 완료됨", "errorIndicator": "❌ 오류", "warningIndicator": "⚠️ 경고", "infoIndicator": "ℹ️ 정보", "sourceDirNotConfigured": "소스 디렉터리가 구성되지 않았습니다.", "sourceLanguageNotConfigured": "소스 언어가 구성되지 않았습니다.", "translationFunctionNotInitialized": "번역 기능이 제대로 초기화되지 않았습니다.", "sourceLanguageDirectoryNotFound": "소스 언어 디렉터리를 찾을 수 없습니다.", "specifiedLanguageNotFound": "지정한 언어를 찾을 수 없습니다", "noJsonFilesFound": "소스 디렉터리에 JSON 파일이 없습니다. {sourceDir}", "i18nDirectoryNotFound": "I18n 디렉토리를 찾을 수 없습니다: {i18nDir}", "invalidDirectoryPaths": "잘못된 디렉터리 경로가 감지되었습니다.", "invalidSampleFilePath": "잘못된 샘플 파일 경로", "failedToCreateSampleTranslationFile": "샘플 번역 파일을 생성하지 못했습니다.", "invalidFilePathDetected": "잘못된 파일 경로가 감지되었습니다.", "failedToWriteFile": "파일을 쓰지 못했습니다: {filePath}", "invalidSourceDirectory": "잘못된 소스 디렉터리: {sourceDir}", "invalidSourceLanguageDirectory": "잘못된 소스 언어 디렉터리: {sourceDir}" }, "adminCli": { "setupPinProtectionTitle": "🔐 관리자 PIN 보호 설정", "setupPinProtectionDescription": "관리 작업을 위해서는 4~6자리 PIN이 필요합니다.", "enablePinProtectionPrompt": "관리자 PIN 보호를 활성화하시겠습니까?", "setupCancelled": "관리자 PIN 보호 설정이 취소되었습니다.", "enterPinPrompt": "4~6자리 PIN을 입력하세요.", "pinFormatError": "❌ PIN은 4~6자리여야 합니다. 다시 시도해 주세요.", "confirmPinPrompt": "PIN 확인:", "pinMismatchError": "❌ PIN이 일치하지 않습니다. 다시 시도해 주세요.", "pinProtectionEnabledSuccess": "✅ 관리자 PIN 보호가 활성화되었습니다!", "pinRecoveryWarning": "⚠️ PIN을 기억하세요. 분실 시 복구할 수 없습니다.", "setupPinProtectionFailed": "❌ 관리자 PIN 보호를 설정하지 못했습니다.", "errorSettingUpPin": "❌ 관리자 PIN 설정 중 오류 발생: {message}", "authRequiredForOperation": "🔐 관리자 인증이 필요한 경우: {operation}", "invalidPinFormat": "❌ 잘못된 PIN 형식입니다. PIN은 4~6자리여야 합니다.", "authenticationSuccess": "✅ 인증 성공!", "invalidPinAttemptsRemaining": "❌ PIN이 잘못되었습니다. {remaining} 시도 횟수가 남아 있습니다.", "authenticationFailedAccessDenied": "❌ 인증에 실패했습니다. 접근 불가.", "authenticationError": "❌ 인증 오류: {message}", "pinProtectionNotEnabled": "현재 관리자 PIN 보호가 활성화되어 있지 않습니다.", "disablingPinProtectionTitle": "🔓 관리자 PIN 보호 비활성화", "confirmDisablePinProtection": "관리자 PIN 보호를 비활성화하시겠습니까?", "operationCancelled": "작업이 취소되었습니다.", "pinProtectionDisabledSuccess": "✅ 관리자 PIN 보호가 비활성화되었습니다.", "disablePinProtectionFailed": "❌ 관리자 PIN 보호를 비활성화하지 못했습니다.", "errorDisablingPinProtection": "❌ 관리자 보호를 비활성화하는 중에 오류가 발생했습니다. {message}", "adminProtectionStatusTitle": "🔐 관리자 보호 상태", "statusEnabled": "상태: ✅ 활성화됨", "protectionDetails": "보호: 관리 작업에는 4~6자리 PIN이 필요합니다.", "lockoutDetails": "잠금: 3회 시도 실패 = 15분 잠금", "statusDisabled": "상태: ❌ 비활성화됨", "noAuthRequired": "보호: 인증이 필요하지 않습니다.", "unprotectedRisk": "위험: 관리 작업이 보호되지 않습니다.", "errorCheckingAdminStatus": "❌ 관리자 상태 확인 중 오류 발생: {message}", "authRequired": "🔐 관리자 인증이 필요합니다.", "invalidPin": "❌ PIN이 잘못되었습니다.", "authSuccess": "✅ 인증 성공!", "adminPinSetupCli": "admin_pin_setup_cli", "adminAuthFailedCli": "admin_auth_failed_cli", "adminAuthDisabledCli": "admin_auth_disabled_cli", "protectedAccess": "보호된 액세스: 민감한 작업에는 관리자 인증이 필요합니다.", "enterPin": "관리자 PIN 입력:", "accessGranted": "액세스 권한이 부여되었습니다." }, "adminPin": { "setup_title": "🔐 관리자 PIN 설정", "setup_separator": "============================================================", "setup_description": "민감한 설정에 대한 관리자 액세스를 위한 4~6자리 PIN을 만듭니다.", "required_for_title": "이 PIN은 다음과 같은 경우에 필요합니다.", "required_for_1": "• 보안 설정 변경", "required_for_2": "• 고급 구성 수정", "required_for_3": "• 디버그 도구에 액세스", "required_for_4": "• 설정 재설정", "setup_note": "💡 참고: 입력할 때 별표(*)가 표시됩니다. 이는 단지 마스킹 문자일 뿐입니다.", "setup_digits_only": "숫자 0-9만 PIN 숫자로 허용됩니다.", "invalid_pin_length": "❌ PIN이 잘못되었습니다. 4~6자리 숫자여야 합니다(숫자 0~9만).", "invalid_pin_example": "예: 1234 또는 567890", "pins_do_not_match": "❌ PIN이 일치하지 않습니다.", "setup_success": "✅ 관리자 PIN이 성공적으로 설정되었습니다!", "setup_warning": "⚠️ 이 PIN을 안전하게 보관하세요. 분실시 복구가 불가능합니다.", "setup_error": "❌ PIN 설정 오류:", "session_expired": "⏰ 비활성으로 인해 관리 세션이 만료되었습니다.", "no_pin_set_setting_up": "⚠️ 관리자 PIN이 설정되지 않았습니다. PIN 설정 중...", "no_pin_configured_access_denied": "⚠️ 관리자 PIN이 구성되지 않았습니다. 접근 불가.", "use_admin_settings_to_set_pin": "💡 먼저 관리자 설정을 사용하여 PIN을 설정하세요.", "locked_out": "🔒 시도 실패 횟수가 너무 많아 관리자 액세스가 잠겼습니다.", "wait_before_retry": "5분 정도 기다린 후 다시 시도해 주세요.", "access_granted": "✅ 관리자 액세스 권한이 부여되었습니다.", "incorrect_pin": "❌ PIN이 잘못되었습니다. {attempts} 시도 횟수가 남아 있습니다.", "verify_pin_error": "❌ PIN 확인 오류:", "already_configured": "✅ 관리자 PIN이 이미 구성되어 있습니다.", "optional_setup_title": "🔐 관리자 PIN 설정(선택 사항)", "optional_setup_description": "관리자 PIN 보호는 다음과 같은 민감한 작업에 대한 보안을 추가합니다.", "setup_prompt": "관리자 PIN을 설정하시겠습니까? (예/아니요):", "skipping_setup": "⏭️ 관리자 PIN 설정을 건너뛰는 중입니다. 나중에 설정에서 설정할 수 있습니다.", "setup_prompt_error": "❌ PIN 설정 프롬프트 중 오류 발생:", "protectedAccess": "보호된 액세스: 민감한 작업에는 관리자 인증이 필요합니다.", "enterPin": "관리자 PIN 입력:", "accessGranted": "액세스 권한이 부여되었습니다.", "invalidPin": "❌ PIN이 잘못되었습니다. 다시 시도해 주세요.", "weak_pin_warning": "⚠️ 경고: 이 PIN은 취약하거나 일반적인 것으로 보입니다.", "weak_pin_suggestion": "💡 다양한 숫자로 더 강력한 PIN을 사용하는 것이 좋습니다.", "use_anyway_prompt": "계속 사용하려면 \"yes\"를 입력하고, 다른 PIN을 선택하려면 Enter를 누르세요.", "enter_new_pin": "새 관리자 PIN(4~6자리) 입력:", "confirm_pin": "관리자 PIN 확인:", "not_set": "설정되지 않음", "pin_display_mask": "####" }, "debug": { "title": "🔧 디버그 도구", "separator": "============================================================", "mainDebuggerSystemDiagnostics": "1. 시스템 진단", "_consoleTranslationsCheck": "// 2. 콘솔 번역 확인", "_exportMissingKeys": "// 3. 누락된 번역 키 내보내기", "_replaceHardcodedConsole": "// 4. 하드코딩된 콘솔 문자열 바꾸기", "_consoleKeyChecker": "// 5. 콘솔 키 검사기", "debugLogs": "2. 디버그 로그", "backToMainMenu": "0. 메인 메뉴로 돌아가기", "selectOption": "디버그 도구를 선택합니다.", "runningDebugTool": "달리기 {displayName}...", "debugToolNotFound": "❌ 디버그 도구를 찾을 수 없습니다: {toolName}", "errorRunningDebugTool": "디버그 도구 실행 중 오류 발생 '{displayName}': {error}", "recentDebugLogs": "📄 최근 디버그 로그", "noDebugLogsFound": "❌ 디버그 로그를 찾을 수 없습니다.", "debugLogsDirectoryNotFound": "❌ 디버그 로그 디렉터리를 찾을 수 없습니다.", "selectLogPrompt": "보려는 로그 파일을 선택하십시오(1-{count}):", "invalidChoiceSelectRange": "선택이 잘못되었습니다. 사용 가능한 범위에서 선택해 주세요.", "contentOf": "📄 내용 {filename}:", "pressEnterToContinue": "계속하려면 Enter를 누르세요..." }, "detect_language_mismatches": { "tool_title": "🔍 언어 불일치 감지 도구", "separator": "=====================================", "analyzing_file": "📄 분석 중 {language}.json...", "error_analyzing_file": "❌ 오류분석 {filename}: {errorMessage}", "results_title": "📊 언어 불일치 감지 결과", "results_separator": "========================================", "summary_title": "📋 SUMMARY:", "total_files_analyzed": "분석된 총 파일 수: {totalFiles}", "files_with_mismatches": "불일치가 있는 파일: {filesWithMismatches}", "total_mismatches_found": "발견된 총 불일치 수: {totalMismatches}", "no_mismatches_found": "✅ 언어 불일치가 발견되지 않았습니다! 모든 번역이 올바른 언어로 되어 있는 것 같습니다.", "detailed_results_title": "🔍 DETAILED RESULTS:", "file_mismatch_header": "📄 {filename} ({language})", "mismatches_count": "설립하다 {count} 불일치:", "mismatch_details": "{index}. 열쇠: {key}", "mismatch_value": "값: \"{value}\"", "mismatch_issue": "문제: {description}", "recommendations_title": "💡 권장사항:", "recommendation_1": "1. [TRANSLATE]로 표시된 모든 항목을 검토하고 번역합니다.", "recommendation_2": "2. 언어 접두사(예: [DE], [FR])를 적절한 번역으로 바꿉니다.", "recommendation_3": "3. 영어 텍스트를 적절한 대상 언어로 번역", "recommendation_4": "4. 사용자가 접하는 모든 텍스트에 해당하는 모국어를 사용하세요.", "recommendation_5": "5. 수정 후 이 도구를 다시 실행하여 수정 사항을 확인하세요.", "detailed_report_saved": "📄 상세 보고서 저장 위치: {reportPath}", "error_saving_report": "❌ 보고서 저장 오류: {errorMessage}", "auto_fix_mode": "🔧 자동 수정 모드 {dryRun}", "auto_fix_separator": "=====================================", "fixed_file": "✅ 수정됨 {filename}", "auto_fix_summary_title": "📊 자동 수정 요약:", "total_fixes_applied": "적용된 총 수정 사항: {count}", "preview_fixes_title": "🔍 수정사항 미리보기:", "fix_details": "{file}: {key} 오래된: \"{old}\" 새로운: \"{new}\"", "more_fixes": "... 그리고 {count} 더 많은 수정 사항", "run_with_apply_fixes": "💡 이 수정 사항을 적용하려면 --apply를 사용하여 실행하세요.", "error_general": "❌ 오류:", "mainDebuggerSystemDiagnostics": "메인 디버거/시스템 진단", "exportMissingKeys": "누락된 키 내보내기", "replaceHardcodedConsole": "하드코딩된 콘솔 교체", "consoleKeyChecker": "콘솔 키 검사기", "debugLogs": "디버그 로그", "backToMainMenu": "메인 메뉴로 돌아가기", "invalidChoiceSelectRange": "❌ 선택이 잘못되었습니다. 표시된 범위 내에서 숫자를 선택하세요.", "runningDebugTool": "디버그 도구 실행: {displayName}", "debugToolNotFound": "디버그 도구 '{toolName}' 찾을 수 없습니다.", "recentDebugLogs": "최근 디버그 로그", "noDebugLogsFound": "디버그 로그를 찾을 수 없습니다.", "logEntry": "로그 항목: {timestamp} - {message}", "debugLogsDirectoryNotFound": "디버그 로그 디렉터리를 찾을 수 없습니다." }, "help": { "title": "📊 I18NTK 관리 도움말", "usage": "사용법: node main/manage/index.js [옵션]", "interactiveMode": "💡 사용: node main/manage/index.js --command=<command> 직접 실행을 위해", "showHelp": "📖 사용: node main/manage/index.js --사용 가능한 명령에 대한 도움말", "availableCommands": "📖 사용 가능한 명령:", "initProject": "🚀 새 언어 초기화", "analyzeTranslations": "🔍 번역 분석", "validateTranslations": "✅ 번역 확인", "checkUsage": "📊 키 사용법 확인", "initCommand": "init - 새 언어 초기화", "analyzeCommand": "분석 - 번역 분석", "validateCommand": "검증 - 번역 검증", "usageCommand": "사용법 - 키 사용법 확인", "sizingCommand": "사이징 - 사이징 분석", "completeCommand": "완전한 - 완전한 번역(100% 적용)", "summaryCommand": "요약 - 프로젝트 상태 표시", "debugCommand": "디버그 - 디버그 번역 문제", "scannerCommand": "스캐너 - 키 스캔", "translateCommand": "번역 - 로케일 파일 자동 번역", "menu": { "pressEnterToContinue": "계속하려면 Enter를 누르세요...", "title": "🌐 I18NTK 관리 메뉴", "description": "국제화 관리를 위한 대화형 메뉴", "exit": "🚪 종료" }, "commands": { "init": "init - 새 언어 초기화", "analyze": "분석 - 번역 분석", "validate": "검증 - 번역 검증", "usage": "사용법 - 키 사용법 확인", "sizing": "사이징 - 사이징 분석", "complete": "완전한 - 완전한 번역(100% 적용)", "summary": "요약 - 프로젝트 상태 표시", "debug": "디버그 - 디버그 번역 문제" }, "options": { "sourceDir": "--소스-디렉터리 <dir> 분석할 소스 디렉터리", "output": "--산출 <file> 보고서의 출력 파일", "verbose": "--verbose, -v 자세한 정보 표시", "keepReports": "--keep-reports 기존 보고서 유지", "deleteReports": "--delete-reports 기존 보고서 삭제", "help": "--help, -h 이 도움말 표시" }, "examples": { "title": "예:", "example1": "노드 i18ntk-manage.js", "example2": "노드 i18ntk-manage.js --source-dir ./locales", "example3": "노드 i18ntk-manage.js --출력 요약-report.txt", "example4": "노드 i18ntk-manage.js --verbose", "example5": "node i18ntk-manage.js --source-dir ./locales --output report.json" }, "features": { "initProject": "🚀 새 언어 초기화", "analyzeTranslations": "🔍 번역 분석", "validateTranslations": "✅ 번역 확인", "checkUsage": "📊 키 사용법 확인", "completeTranslations": "🎯 완전한 번역(100% 적용)", "showSizing": "📏 사이즈 분석", "runWorkflow": "🔄 전체 워크플로 실행", "showStatus": "📋 프로젝트 상태 표시", "deleteReports": "🗑️ 모든 보고서 삭제", "changeLanguage": "🌍 UI 언어 변경", "settings": "⚙️ 설정", "showHelp": "❓ 도움말", "debugTools": "🔧 디버그 도구" }, "messages": { "selectOption": "옵션을 선택하세요:", "invalidOption": "잘못된 옵션입니다. 다시 시도해 주세요.", "operationCompleted": "✅ 작업이 성공적으로 완료되었습니다!", "pressEnter": "계속하려면 Enter를 누르세요...", "goodbye": "👋 안녕!", "unknownCommand": "알 수 없는 명령: {command}", "nonInteractive": "⚠️ 비대화형 모드가 감지되었습니다. 참고용으로만 표시된 메뉴입니다." }, "i18n_helper": { "translation_file_not_found": "번역 파일을 찾을 수 없습니다: {translationFile}", "error_loading_translations": "번역 로드 중 오류 발생: {errorMessage}", "translation_not_found": "키에 대한 번역을 찾을 수 없습니다: {key}", "translation_key_not_string": "번역 키가 문자열로 해석되지 않습니다. {key}", "error_reading_locales_directory": "로캘 디렉터리를 읽는 동안 오류가 발생했습니다. {errorMessage}" } }, "init": { "initializationTitle": "🚀 i18n 관리 툴킷 - 프로젝트 초기화", "initializationCancelled": "🚫 사용자가 초기화를 취소했습니다.", "sourceDirectoryLabel": "📁 소스 디렉토리: {dir}", "requiredTitle": "초기화 필요", "requiredBody": "이 명령을 실행하기 전에 이 프로젝트를 초기화해야 합니다.", "promptRunNow": "지금 초기화를 실행하시겠습니까? (예/아니요):", "sourceLanguageLabel": "🌍 소스 언어: {language}", "detectedI18nFrameworks": "🔍 감지된 i18n 프레임워크: {frameworks}", "pinMustBe4Digits": "🔐 PIN은 4자리여야 합니다.", "existingDirectoriesFound": "📁 기존 번역 디렉토리를 찾았습니다:", "useExistingDirectoryPrompt": "기존 디렉터리를 사용하시겠습니까? (예/아니요)", "selectDirectoryPrompt": "번호를 입력하여 디렉터리를 선택합니다(또는 '새 디렉터리 만들기' 선택).", "enterNewDirectoryName": "새 번역 디렉터리의 이름을 입력하세요.", "createdNewDirectory": "✅ 새 디렉터리 생성: {dir}", "directoryAlreadyExists": "⚠️ 디렉토리가 이미 존재합니다: {dir}",