i18ntk 4.7.0 → 4.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -1
- package/README.md +15 -4
- package/main/i18ntk-ui.js +35 -30
- package/main/i18ntk-usage.js +2 -2
- package/main/i18ntk-validate.js +1 -1
- package/main/manage/commands/ValidateCommand.js +1 -1
- package/main/manage/index.js +52 -47
- package/main/manage/managers/LanguageMenu.js +3 -1
- package/main/manage/services/ConfigurationService.js +1 -1
- package/main/manage/services/FrameworkDetectionService.js +1 -1
- package/main/manage/services/UsageService.js +2 -2
- package/package.json +11 -7
- package/settings/settings-manager.js +19 -3
- package/ui-locales/ar.json +2636 -0
- package/ui-locales/cs.json +2636 -0
- package/ui-locales/de.json +17 -1
- package/ui-locales/el.json +2636 -0
- package/ui-locales/en.json +17 -1
- package/ui-locales/es.json +17 -1
- package/ui-locales/fr.json +17 -1
- package/ui-locales/he.json +2636 -0
- package/ui-locales/hi.json +2636 -0
- package/ui-locales/hu.json +2636 -0
- package/ui-locales/it.json +2636 -0
- package/ui-locales/ja.json +17 -1
- package/ui-locales/ko.json +2636 -0
- package/ui-locales/nl.json +2636 -0
- package/ui-locales/pl.json +2636 -0
- package/ui-locales/pt.json +2636 -0
- package/ui-locales/ru.json +17 -1
- package/ui-locales/sv.json +2636 -0
- package/ui-locales/th.json +2636 -0
- package/ui-locales/tr.json +2636 -0
- package/ui-locales/uk.json +2636 -0
- package/ui-locales/vi.json +2636 -0
- package/ui-locales/zh.json +17 -1
- package/utils/config-helper.js +2 -2
- package/utils/config-manager.js +3 -4
- package/utils/env-manager.js +1 -1
- package/utils/locale-optimizer.js +1 -1
|
@@ -0,0 +1,2636 @@
|
|
|
1
|
+
{
|
|
2
|
+
"meta": {
|
|
3
|
+
"version": "4.7.0",
|
|
4
|
+
"updated": "2026-07-07",
|
|
5
|
+
"lang": "ko"
|
|
6
|
+
},
|
|
7
|
+
"common": {
|
|
8
|
+
"welcome": "환영",
|
|
9
|
+
"hello": "안녕하세요",
|
|
10
|
+
"goodbye": "안녕히 가세요",
|
|
11
|
+
"yes": "예",
|
|
12
|
+
"no": "아니요",
|
|
13
|
+
"save": "구하다",
|
|
14
|
+
"cancel": "취소",
|
|
15
|
+
"delete": "삭제",
|
|
16
|
+
"edit": "편집하다",
|
|
17
|
+
"loading": "로드 중...",
|
|
18
|
+
"offlineTitle": "오프라인 상태입니다",
|
|
19
|
+
"offlineMessage": "인터넷 연결을 확인해주세요",
|
|
20
|
+
"tryReconnect": "다시 연결해 보세요",
|
|
21
|
+
"logout": "로그아웃",
|
|
22
|
+
"login": "로그인",
|
|
23
|
+
"amount": "양",
|
|
24
|
+
"success": "성공",
|
|
25
|
+
"error": "오류",
|
|
26
|
+
"warning": "경고",
|
|
27
|
+
"info": "정보:",
|
|
28
|
+
"debug": "디버그",
|
|
29
|
+
"progress": "진전:",
|
|
30
|
+
"remaining": "남은 금액:",
|
|
31
|
+
"total": "총:",
|
|
32
|
+
"completed": "7. 성공적으로 완료되었습니다!",
|
|
33
|
+
"missing": "없어진",
|
|
34
|
+
"partial": "부분",
|
|
35
|
+
"sameAsSource": "소스와 동일:",
|
|
36
|
+
"formatMismatch": "형식 불일치:",
|
|
37
|
+
"typeMismatch": "유형 불일치:",
|
|
38
|
+
"structureMismatch": "구조 불일치:",
|
|
39
|
+
"invalidOption": "잘못된 옵션",
|
|
40
|
+
"separator": "==================================================",
|
|
41
|
+
"initializationFailed": "❌ 초기화 실패: {error}",
|
|
42
|
+
"stackTrace": "스택 추적: {stack}",
|
|
43
|
+
"pressEnterToContinue": "계속하려면 Enter를 누르세요...",
|
|
44
|
+
"pressEnterToReturn": "Enter를 눌러 주 메뉴로 돌아가세요...",
|
|
45
|
+
"stepCompleted": "단계 '{stepName}' 완전한.",
|
|
46
|
+
"stepFailed": "단계 '{stepName}'실패했습니다.",
|
|
47
|
+
"runningStep": "실행 단계: {stepName}",
|
|
48
|
+
"command": "명령: {command}",
|
|
49
|
+
"startingWorkflow": "워크플로 시작 중...",
|
|
50
|
+
"workflowCompleted": "워크플로가 완료되었습니다.",
|
|
51
|
+
"checkReports": "자세한 내용은 보고서를 확인하세요.",
|
|
52
|
+
"errorExecutingCommand": "명령 실행 중 오류 발생: {error}",
|
|
53
|
+
"genericError": "❌ 오류: {error}",
|
|
54
|
+
"errors": {
|
|
55
|
+
"errors": "오류:",
|
|
56
|
+
"genericError": "❌ 오류: {error}",
|
|
57
|
+
"initializationFailed": "❌ 초기화 실패: {error}",
|
|
58
|
+
"initializationCancelled": "❌ 사용자가 초기화를 취소했습니다.",
|
|
59
|
+
"translationKeyNotFound": "번역 키를 찾을 수 없습니다: {key}",
|
|
60
|
+
"sourceDirectoryNotFound": "소스 디렉터리를 찾을 수 없습니다: {directory}",
|
|
61
|
+
"configLoadingFailed": "구성 로드에 실패했습니다.",
|
|
62
|
+
"invalidSourceDirectory": "잘못된 소스 디렉터리: {directory}",
|
|
63
|
+
"securityViolation": "보안 위반이 감지되었습니다.",
|
|
64
|
+
"authenticationFailed": "인증 실패",
|
|
65
|
+
"sourceEqualsI18nWarn": "⚠️ sourceDir은 i18nDir과 같습니다({sourceDir}). 다음으로 넘어짐 {fallback} 소스 스캔을 위해."
|
|
66
|
+
},
|
|
67
|
+
"errorGeneratingStatusSummary": "상태 요약을 생성하는 중에 오류가 발생했습니다. {error}",
|
|
68
|
+
"errorRunningDebugTool": "디버그 도구 실행 중 오류 발생 '{displayName}': {error}",
|
|
69
|
+
"errorReadingDebugLogs": "디버그 로그를 읽는 동안 오류가 발생했습니다. {error}",
|
|
70
|
+
"errorAnalyzingLogFile": "로그 파일 분석 오류: {error}",
|
|
71
|
+
"errorAnalyzingTranslationKeys": "번역 키 분석 오류: {error}",
|
|
72
|
+
"errorAnalyzingTranslationCompleteness": "번역 완성도 분석 오류: {error}",
|
|
73
|
+
"analyzingTranslationCompleteness": "모든 언어에 대한 번역 완성도 분석 중...",
|
|
74
|
+
"i18nDirectoryNotFound": "⚠️ i18n 디렉토리를 찾을 수 없습니다: {i18nDir}",
|
|
75
|
+
"translationCompletenessAnalysisFailed": "⚠️ 번역 완성도 분석 실패: {error}",
|
|
76
|
+
"failedToAnalyzeLanguage": "❌ 언어 분석 실패 {language}: {error}",
|
|
77
|
+
"errorReadingI18nDirectory": "❌ i18n 디렉터리 읽기 오류:",
|
|
78
|
+
"languageCompletenessTitle": "📈 언어별 번역 완전성",
|
|
79
|
+
"errorAnalyzingTranslationFormat": "번역 형식 분석 오류: {error}",
|
|
80
|
+
"errorAnalyzingTranslationType": "번역 유형 분석 오류: {error}",
|
|
81
|
+
"errorAnalyzingTranslationStructure": "번역 구조 분석 오류: {error}",
|
|
82
|
+
"errorAnalyzingTranslationFormatMismatch": "번역 형식 불일치 분석 오류: {error}",
|
|
83
|
+
"errorAnalyzingTranslationTypeMismatch": "번역 유형 불일치 분석 오류: {error}",
|
|
84
|
+
"errorAnalyzingTranslationStructureMismatch": "번역 구조 불일치 분석 오류: {error}",
|
|
85
|
+
"errorAnalyzingTranslationSameAsSource": "소스와 동일한 번역을 분석하는 중에 오류가 발생했습니다. {error}",
|
|
86
|
+
"title": "상태",
|
|
87
|
+
"nextStep1": "1. 사용량 분석 확인:",
|
|
88
|
+
"nextStep2": "2. 번역 검증:",
|
|
89
|
+
"nextStep3": "3. 완전성 분석:",
|
|
90
|
+
"nextStep4": "4. 누락된 번역을 완료하세요.",
|
|
91
|
+
"nextStep5": "5. 요약 보고서 생성:",
|
|
92
|
+
"nextStep6": "6. 번역을 검토하고 마무리합니다.",
|
|
93
|
+
"generating": "요약 보고서 생성 중...",
|
|
94
|
+
"review": "번역을 검토하는 중...",
|
|
95
|
+
"finalizing": "번역을 마무리하는 중...",
|
|
96
|
+
"finalized": "성공적으로 마무리되었습니다!",
|
|
97
|
+
"warnings": "경고:",
|
|
98
|
+
"completedKeys": "완성된 키:",
|
|
99
|
+
"missingKeys": "누락된 키:",
|
|
100
|
+
"partialKeys": "부분 키:",
|
|
101
|
+
"home": "집",
|
|
102
|
+
"settings": "설정",
|
|
103
|
+
"startingSettings": "🎛️ 설정 CLI 시작 중...",
|
|
104
|
+
"confirm": "확인하다",
|
|
105
|
+
"errorExiting": "종료하는 동안 오류가 발생했습니다."
|
|
106
|
+
},
|
|
107
|
+
"errors": {
|
|
108
|
+
"invalidOption": "❌ 잘못된 옵션: {option}. 다시 시도해 주세요.",
|
|
109
|
+
"readlineClosed": "입력 스트림이 닫혔습니다. 비대화형 모드로 실행 중입니다.",
|
|
110
|
+
"noPackageJson": "package.json을 찾을 수 없습니다. i18n 프레임워크를 자동 감지할 수 없습니다.",
|
|
111
|
+
"noI18nDir": "프로젝트 루트에 i18n 디렉터리가 없습니다.",
|
|
112
|
+
"noI18nConfig": "프로젝트 루트에 i18n 구성 파일이 없습니다.",
|
|
113
|
+
"errorReadingDebugLogs": "디버그 로그를 읽는 동안 오류가 발생했습니다. {error}"
|
|
114
|
+
},
|
|
115
|
+
"scanner": {
|
|
116
|
+
"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",
|
|
117
|
+
"help_options": {
|
|
118
|
+
"source_dir": "i18n 문제를 스캔할 소스 디렉터리",
|
|
119
|
+
"output_dir": "스캔 보고서 및 결과 디렉터리",
|
|
120
|
+
"framework": "대상 프레임워크(반응, Vue, 각도, 바닐라)",
|
|
121
|
+
"patterns": "텍스트 감지를 위한 사용자 정의 정규식 패턴",
|
|
122
|
+
"exclude": "검사에서 제외할 파일 패턴",
|
|
123
|
+
"output_report": "자세한 스캔 보고서 생성",
|
|
124
|
+
"min_length": "번역을 위해 고려해야 할 최소 텍스트 길이",
|
|
125
|
+
"max_length": "번역을 위해 고려해야 할 최대 텍스트 길이",
|
|
126
|
+
"include_tests": "스캔 프로세스에 테스트 파일 포함"
|
|
127
|
+
},
|
|
128
|
+
"starting": "🔍 프레임워크용 텍스트 스캐너 시작: {framework}",
|
|
129
|
+
"sourceDirectory": "📁 스캔 디렉터리: {sourceDir}",
|
|
130
|
+
"frameworkDetected": "🎯 감지된 프레임워크: {framework}",
|
|
131
|
+
"scanningFiles": "📊 스캔 중 {fileCount} 파일...",
|
|
132
|
+
"foundTexts": "📝 발견됨 {textCount} 번역이 필요한 텍스트",
|
|
133
|
+
"generatingReport": "📊 상세 보고서 생성 중...",
|
|
134
|
+
"reportSaved": "💾 스캔 보고서 저장 위치: {reportPath}",
|
|
135
|
+
"noTextsFound": "✅ 하드코딩된 영어 텍스트가 없습니다.",
|
|
136
|
+
"scanComplete": "🎉 스캔이 성공적으로 완료되었습니다!",
|
|
137
|
+
"analysisTitle": "🔍 번역 스캔 분석",
|
|
138
|
+
"fileSummary": "📄 {file}: {count} 발견된 텍스트",
|
|
139
|
+
"textLocation": "📍 라인 {line}: {text}",
|
|
140
|
+
"foundText": "설립하다 {count} 잠재적인 하드코딩된 텍스트 인스턴스",
|
|
141
|
+
"context": "📝 맥락: {context}",
|
|
142
|
+
"severity": "⚠️ 심각도: {severity}",
|
|
143
|
+
"recommendation": "💡 추천: {recommendation}",
|
|
144
|
+
"welcome": {
|
|
145
|
+
"title": "🎯 텍스트 스캐너에 오신 것을 환영합니다!",
|
|
146
|
+
"description": "이 도구는 소스 코드에서 번역이 필요할 수 있는 하드코딩된 영어 텍스트를 검색합니다."
|
|
147
|
+
},
|
|
148
|
+
"frameworkPrompt": {
|
|
149
|
+
"title": "🎯 프레임워크 선택",
|
|
150
|
+
"available": "사용 가능한 프레임워크: React, Vue, Angle, Vanilla",
|
|
151
|
+
"description": "프레임워크 유형을 입력하십시오(또는 자동 감지를 위해 Enter를 누르십시오).",
|
|
152
|
+
"input": "뼈대:"
|
|
153
|
+
},
|
|
154
|
+
"directoryPrompt": {
|
|
155
|
+
"title": "📁 소스 디렉토리 선택",
|
|
156
|
+
"current": "현재 디렉터리: {dir}",
|
|
157
|
+
"description": "검색할 디렉터리를 입력하세요(또는 현재 디렉터리를 보려면 Enter를 누르세요):",
|
|
158
|
+
"input": "예배 규칙서:"
|
|
159
|
+
},
|
|
160
|
+
"options": {
|
|
161
|
+
"includeTests": "테스트 파일을 포함하시겠습니까?",
|
|
162
|
+
"excludeDirs": "제외할 디렉터리(쉼표로 구분):",
|
|
163
|
+
"customPatterns": "검색할 사용자 정의 패턴(정규식):"
|
|
164
|
+
},
|
|
165
|
+
"reportGenerated": "생성된 스캔 보고서: {path}"
|
|
166
|
+
},
|
|
167
|
+
"fixer": {
|
|
168
|
+
"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",
|
|
169
|
+
"starting": "🚀 언어 번역 수정 시작: {languages}",
|
|
170
|
+
"sourceDirectory": "📁 소스 디렉토리: {sourceDir}",
|
|
171
|
+
"sourceLanguage": "🔤 소스 언어: {sourceLanguage}",
|
|
172
|
+
"markers": "🏷️ 수정할 마커: {markers}",
|
|
173
|
+
"scanningLanguage": "📊 스캔 중 {language}...",
|
|
174
|
+
"noLanguages": "❌ 수정을 위해 지정된 언어가 없습니다.",
|
|
175
|
+
"allComplete": "🎉 모든 번역이 이미 완료되었습니다!",
|
|
176
|
+
"fullReportSaved": "📊 전체 보고서 저장 위치: {reportPath}",
|
|
177
|
+
"reviewReport": "계속하기 전에 보고서를 검토하세요.",
|
|
178
|
+
"backupCreated": "💾 백업이 성공적으로 생성되었습니다.",
|
|
179
|
+
"applyingFixes": "🔄 수정사항 적용 중...",
|
|
180
|
+
"fixingComplete": "✅ 번역 수정 완료!",
|
|
181
|
+
"operationCancelled": "❌ 사용자가 작업을 취소했습니다.",
|
|
182
|
+
"analysisTitle": "🔍 번역 수정 분석",
|
|
183
|
+
"analysisSeparator": "==================================================",
|
|
184
|
+
"totalIssues": "발견된 총 문제: {totalIssues}",
|
|
185
|
+
"missingTranslations": "누락된 번역: {missing}",
|
|
186
|
+
"placeholderTranslations": "자리 표시자 번역: {placeholder}",
|
|
187
|
+
"noIssues": "✅ 문제가 발견되지 않았습니다. 모든 번역이 완료되었습니다.",
|
|
188
|
+
"detailedIssues": "📋 DETAILED ISSUES:",
|
|
189
|
+
"detailedSeparator": "--------------------------------------------------",
|
|
190
|
+
"filePath": "📄 {file} → {path}",
|
|
191
|
+
"missingKey": "❌ 누락: {source} → {new}",
|
|
192
|
+
"placeholderKey": "⚠️ 자리 표시자: \"{target}\" → \"{new}\"",
|
|
193
|
+
"moreIssues": "... 그리고 {count} 더 많은 문제. 자세한 내용은 보고서 파일을 확인하세요.",
|
|
194
|
+
"confirmationTitle": "🤔 이 수정 사항을 계속 진행하시겠습니까?",
|
|
195
|
+
"confirmationOptions": "옵션:",
|
|
196
|
+
"optionYes": "y - 예, 모든 수정 사항을 적용합니다.",
|
|
197
|
+
"optionNo": "n - 아니요, 작업을 취소합니다.",
|
|
198
|
+
"optionShow": "s - 자세한 문제 표시",
|
|
199
|
+
"choicePrompt": "귀하의 선택(y/n/s):",
|
|
200
|
+
"nonInteractiveMode": "⚡ 비대화형 모드가 감지되었습니다. 자동으로 수정사항을 적용하고 있습니다...",
|
|
201
|
+
"reportGenerated": "📊 Fixer 보고서 생성됨: {path}",
|
|
202
|
+
"summary": "해결사 요약:",
|
|
203
|
+
"welcome": {
|
|
204
|
+
"title": "🎯 번역 해결사에 오신 것을 환영합니다!",
|
|
205
|
+
"description": "이 도구는 로케일 파일 전체에서 깨진 번역과 자리 표시자를 수정하는 데 도움이 됩니다."
|
|
206
|
+
},
|
|
207
|
+
"markerPrompt": {
|
|
208
|
+
"title": "🏷️ 자리표시자 마커 구성",
|
|
209
|
+
"description": "번역되지 않은 텍스트를 나타내는 마커를 입력하세요(쉼표로 구분).",
|
|
210
|
+
"currentDefaults": "기본 마커: {markers}",
|
|
211
|
+
"input": "마커(또는 기본값을 보려면 Enter를 누르십시오):"
|
|
212
|
+
},
|
|
213
|
+
"languagePrompt": {
|
|
214
|
+
"title": "🌍 수정할 언어 선택",
|
|
215
|
+
"available": "사용 가능한 언어: {languages}",
|
|
216
|
+
"description": "수정할 언어를 쉼표로 구분하여 입력하거나 모두 Enter 키를 누르세요.",
|
|
217
|
+
"input": "언어:",
|
|
218
|
+
"noLanguages": "수정할 언어가 없습니다."
|
|
219
|
+
},
|
|
220
|
+
"directoryPrompt": {
|
|
221
|
+
"title": "📁 디렉토리 선택",
|
|
222
|
+
"current": "현재 디렉터리: {dir}",
|
|
223
|
+
"description": "로케일 파일이 포함된 디렉토리를 입력하십시오(또는 현재를 위해 Enter를 누르십시오):",
|
|
224
|
+
"input": "예배 규칙서:"
|
|
225
|
+
},
|
|
226
|
+
"backupLocation": "백업 위치: {dir}",
|
|
227
|
+
"completed": "수정이 완료되었습니다.",
|
|
228
|
+
"creatingBackup": "백업 생성 위치 {dir}...",
|
|
229
|
+
"dryRunMode": "시험 실행 모드: {mode}",
|
|
230
|
+
"error": "해결 프로그램 실패: {error}",
|
|
231
|
+
"fixing": "고정 {language}...",
|
|
232
|
+
"foundLanguages": "설립하다 {count} 언어: {languages}",
|
|
233
|
+
"languageFixed": "{language}: 고정 {fixed} 키, 건너뛰었습니다. {skipped}.",
|
|
234
|
+
"running": "번역 수정 프로그램 실행 중...",
|
|
235
|
+
"totalFixed": "총 고정 금액: {count}"
|
|
236
|
+
},
|
|
237
|
+
"autorun": {
|
|
238
|
+
"stepAnalyzeTranslations": "번역 분석",
|
|
239
|
+
"stepCompletedWithIcon": "✅ 완료됨: {stepName}",
|
|
240
|
+
"stepValidateTranslations": "번역 검증",
|
|
241
|
+
"stepRunning": "▶️ 단계 {stepNumber}/{totalSteps}: {stepName}",
|
|
242
|
+
"separator": "==================================================",
|
|
243
|
+
"stepFailed": "❌ 실패: {stepName}",
|
|
244
|
+
"errorLabel": "오류",
|
|
245
|
+
"autoRunScriptTitle": "🧪 자동 실행 작업 흐름",
|
|
246
|
+
"usageTitle": "용법",
|
|
247
|
+
"runAllSteps": "실행: node i18ntk-autorun.js",
|
|
248
|
+
"configureSettingsFirst": "구성: i18ntk-config.json 또는 CLI 플래그",
|
|
249
|
+
"runSpecificSteps": "단계를 표시하려면 --steps=1,3 또는 --list를 사용하세요.",
|
|
250
|
+
"showHelp": "--자세한 내용은 도움말을 참조하세요.",
|
|
251
|
+
"examplesTitle": "예",
|
|
252
|
+
"configExample": "노드 i18ntk-autorun.js --ui-언어=zh",
|
|
253
|
+
"stepsExample1": "노드 i18ntk-autorun.js --단계=분석, 검증",
|
|
254
|
+
"stepsExample2": "노드 i18ntk-autorun.js --list",
|
|
255
|
+
"customSettingsConfiguration": "사용자 정의 자동 실행 설정",
|
|
256
|
+
"availableSteps": "사용 가능한 단계",
|
|
257
|
+
"startingAutoRunWorkflow": "🚀 자동 실행 워크플로 시작 중...",
|
|
258
|
+
"workflowIncludesSteps": "워크플로에는 다음이 포함됩니다. {count} 단계:",
|
|
259
|
+
"missingRequiredFile": "필수 파일 누락: {file}",
|
|
260
|
+
"workflowStopped": "오류로 인해 워크플로가 중지되었습니다.",
|
|
261
|
+
"workflowCompleted": "🎉 워크플로가 완료되었습니다!",
|
|
262
|
+
"successfulSteps": "성공적인 단계: {count}",
|
|
263
|
+
"failedSteps": "실패한 단계: {count}",
|
|
264
|
+
"stepInitializeProject": "프로젝트 초기화",
|
|
265
|
+
"stepCheckUsage": "키 사용량 확인",
|
|
266
|
+
"stepGenerateSummary": "요약 보고서 생성",
|
|
267
|
+
"runInitializationFirst": "먼저 초기화를 실행해 주세요.",
|
|
268
|
+
"initializationCheckPassed": "초기화 확인을 통과했습니다.",
|
|
269
|
+
"runningStep": "실행 단계: {stepName}",
|
|
270
|
+
"commandLabel": "명령: {command}",
|
|
271
|
+
"stepCompletedWithTime": "단계 '{stepName}'에서 완료 {duration}ms.",
|
|
272
|
+
"stepCompleted": "단계 '{stepName}' 완전한.",
|
|
273
|
+
"stepFailedWithError": "단계 '{stepName}' 오류로 인해 실패했습니다: {error}",
|
|
274
|
+
"requiredStepFailed": "필수 단계가 실패했습니다. 워크플로를 중지합니다.",
|
|
275
|
+
"optionalStepFailed": "선택적 단계가 실패했습니다. 워크플로를 계속합니다.",
|
|
276
|
+
"stepRequired": "(필수의)",
|
|
277
|
+
"stepOptional": "(선택 과목)",
|
|
278
|
+
"startingExecution": "실행 시작 중...",
|
|
279
|
+
"pressEnterToContinue": "계속하려면 Enter를 누르세요...",
|
|
280
|
+
"runningSelectedSteps": "선택한 단계를 실행 중...",
|
|
281
|
+
"invalidStepNumber": "잘못된 단계 번호: {stepNum}",
|
|
282
|
+
"executionReport": "실행 보고서:",
|
|
283
|
+
"requiredFailedSteps": "필수 단계 실패: {count}",
|
|
284
|
+
"stepDetails": "단계 세부정보:",
|
|
285
|
+
"reportSavedTo": "보고서 저장 위치: {path}",
|
|
286
|
+
"overallStatusSuccess": "SUCCESS",
|
|
287
|
+
"overallStatusFailed": "FAILED",
|
|
288
|
+
"overallStatus": "전반적인 상태: {status}",
|
|
289
|
+
"pressEnterForDefaults": "모든 프롬프트에 기본 설정을 사용하려면 Enter 키를 누르세요.",
|
|
290
|
+
"sourceDirPrompt": "소스 디렉터리를 입력하세요(기본값: {default}):",
|
|
291
|
+
"sourceLangPrompt": "출발어를 입력하세요(기본값: {default}):",
|
|
292
|
+
"targetLangsPrompt": "대상 언어를 입력하세요(쉼표로 구분, 기본값: {default}):",
|
|
293
|
+
"translationMarkerPrompt": "번역 마커 입력(기본값: {default}):",
|
|
294
|
+
"outputDirPrompt": "보고서의 출력 디렉터리를 입력합니다(기본값: {default}):",
|
|
295
|
+
"settingsUpdatedSuccessfully": "설정이 성공적으로 업데이트되었습니다!",
|
|
296
|
+
"errorConfiguringSettings": "설정 구성 오류: {error}",
|
|
297
|
+
"configurationComplete": "구성이 완료되었습니다.",
|
|
298
|
+
"runAutoRunCommand": "이제 자동 실행 명령을 실행할 수 있습니다.",
|
|
299
|
+
"configurationFailed": "구성 실패: {error}",
|
|
300
|
+
"noValidStepNumbers": "유효한 단계 번호가 제공되지 않았습니다.",
|
|
301
|
+
"autoRunFailed": "자동 실행 실패: {error}",
|
|
302
|
+
"stepCompleteTranslations": "완전한 번역",
|
|
303
|
+
"stepAnalyzeSizing": "크기 분석",
|
|
304
|
+
"stepCompletedIcon": "✅",
|
|
305
|
+
"stepRunningWithNumber": "[{stepNumber}/{totalSteps}] 단계 '{stepName}' 달리기...",
|
|
306
|
+
"stepFailedIcon": "❌",
|
|
307
|
+
"translationLoadWarning": "경고: 로드할 수 없습니다. {lang} 번역",
|
|
308
|
+
"configReadError": "읽는 중 오류가 발생했습니다. {file}"
|
|
309
|
+
},
|
|
310
|
+
"analyze": {
|
|
311
|
+
"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",
|
|
312
|
+
"source_directory": "📁 소스 디렉토리: {sourceDir}",
|
|
313
|
+
"i18n_directory": "🌐 I18n 디렉토리: {i18nDir}",
|
|
314
|
+
"loading_translation_files": "📋 번역 파일 로드 중...",
|
|
315
|
+
"sourceDirectoryLabel": "📁 소스 디렉토리: {sourceDir}",
|
|
316
|
+
"sourceLanguageLabel": "🌍 소스 언어: {sourceLanguage}",
|
|
317
|
+
"strictModeLabel": "⚙️ 엄격 모드: {mode}",
|
|
318
|
+
"found_translation_files_count": "✅ 찾음 {count} 번역 파일",
|
|
319
|
+
"analyzing_translations": "🔍 번역 분석 중...",
|
|
320
|
+
"analysis_completed_successfully": "🎉 분석이 성공적으로 완료되었습니다!",
|
|
321
|
+
"analysis_results": "📊 ANALYSIS RESULTS",
|
|
322
|
+
"language_analysis_stats": "{language}: {translatedKeys}/{totalKeys} ({percentage}% 번역됨)",
|
|
323
|
+
"sample_missing_keys": "누락된 키 샘플:",
|
|
324
|
+
"missing_key": "- {key}",
|
|
325
|
+
"and_more_missing": "...그리고 {count} 더.",
|
|
326
|
+
"sample_unused_keys": "사용되지 않은 키 샘플:",
|
|
327
|
+
"unused_key": "- {key}",
|
|
328
|
+
"and_more_unused": "...그리고 {count} 더.",
|
|
329
|
+
"recommendations": "📋 추천",
|
|
330
|
+
"add_missing_translations": "💡 누락된 번역을 추가하여 적용 범위를 개선하세요.",
|
|
331
|
+
"remove_unused_translations": "💡 프로젝트를 깨끗하게 유지하려면 사용하지 않는 번역을 제거하세요.",
|
|
332
|
+
"next_steps": "📋 NEXT STEPS",
|
|
333
|
+
"review_analysis_results": "1. 콘솔 또는 생성된 보고서에서 분석 결과를 검토합니다.",
|
|
334
|
+
"run_with_output_report": "2. 자세한 보고서를 보려면 --output-report를 사용하여 실행하세요.",
|
|
335
|
+
"add_or_remove_translations": "3. 누락된 번역을 추가하거나 사용하지 않는 번역을 제거하세요.",
|
|
336
|
+
"rerun_analysis": "4. 분석을 다시 실행하여 개선 사항을 확인합니다.",
|
|
337
|
+
"analysis_summary": "📊 ANALYSIS SUMMARY",
|
|
338
|
+
"source_files_scanned": "스캔된 소스 파일: {fileCount}",
|
|
339
|
+
"translation_files_checked": "번역 파일 확인: {translationFileCount}",
|
|
340
|
+
"total_keys": "총 키: {totalKeys}",
|
|
341
|
+
"translated_keys": "번역된 키: {translatedKeys}",
|
|
342
|
+
"missing_keys": "누락된 키: {missingKeys}",
|
|
343
|
+
"unused_keys": "사용되지 않은 키: {unusedKeys}",
|
|
344
|
+
"translation_coverage": "번역 범위: {coverage}%",
|
|
345
|
+
"analysis_passed_for_language": "✅ 분석 통과 {language}",
|
|
346
|
+
"analysis_failed_for_language": "❌ 분석 실패 {language} ({missingKeys} 없어진, {unusedKeys} 미사용)",
|
|
347
|
+
"starting": "🔍 번역 분석을 시작합니다...",
|
|
348
|
+
"foundLanguages": "📋 찾았습니다 {count} 분석할 언어: {languages}",
|
|
349
|
+
"analyzing": "🔄 분석 중 {language}...",
|
|
350
|
+
"reportTitle": "📊 번역 분석 보고서",
|
|
351
|
+
"generated": "생성됨: {timestamp}",
|
|
352
|
+
"status": "상태: {translated}/{total} 키({percentage}% 번역됨)",
|
|
353
|
+
"filesAnalyzed": "분석된 파일: {analyzed}/{total}",
|
|
354
|
+
"keysNeedingTranslation": "번역이 필요한 키: {count}",
|
|
355
|
+
"fileBreakdown": "📋 파일 분석",
|
|
356
|
+
"error": "오류",
|
|
357
|
+
"completed": "✅ 다음에 대한 분석이 완료되었습니다. {language}",
|
|
358
|
+
"progress": "📊 전반적인 진행 상황: {translated}/{total} 처리된 언어",
|
|
359
|
+
"reportSaved": "보고서가 저장되었습니다: {reportPath}",
|
|
360
|
+
"summary": "📊 ANALYSIS SUMMARY",
|
|
361
|
+
"finished": "✅ 분석이 성공적으로 완료되었습니다!",
|
|
362
|
+
"statusFileMissing": "❌ 번역 파일이 없습니다",
|
|
363
|
+
"sourceKeys": "📊 소스 키: {count}",
|
|
364
|
+
"translation": "📊 번역: {translated}/{total} ({percentage}%)",
|
|
365
|
+
"structure": "🗂️ 구조: {status}",
|
|
366
|
+
"consistent": "일관된",
|
|
367
|
+
"inconsistent": "일관성 없는",
|
|
368
|
+
"missingKeys": "누락된 키: {count}",
|
|
369
|
+
"extraKeys": "추가 키: {count}",
|
|
370
|
+
"issues": "⚠️ 발견된 문제: {count}",
|
|
371
|
+
"issueType": {
|
|
372
|
+
"not_translated": "번역되지 않음: {count}",
|
|
373
|
+
"empty_value": "빈 값: {count}",
|
|
374
|
+
"partial_translation": "부분 번역: {count}",
|
|
375
|
+
"format_mismatch": "형식 불일치: {count}",
|
|
376
|
+
"type_mismatch": "유형 불일치: {count}",
|
|
377
|
+
"structure_mismatch": "구조 불일치: {count}",
|
|
378
|
+
"same_as_source": "소스와 동일: {count}"
|
|
379
|
+
},
|
|
380
|
+
"keysToTranslate": "📋 번역 키",
|
|
381
|
+
"key": "열쇠",
|
|
382
|
+
"english": "영어",
|
|
383
|
+
"needsTranslation": "번역이 필요합니다",
|
|
384
|
+
"andMoreKeys": "...그리고 {count} 더 많은 열쇠.",
|
|
385
|
+
"noLanguages": "⚠️ 타겟 언어가 없습니다.",
|
|
386
|
+
"languageStats": "{language}: {percentage}% 완벽한 ({translated}/{total} 열쇠)",
|
|
387
|
+
"invalidReportFilePath": "잘못된 보고서 파일 경로",
|
|
388
|
+
"failedToWriteReportFile": "보고서 파일을 안전하게 작성하지 못했습니다."
|
|
389
|
+
},
|
|
390
|
+
"complete": {
|
|
391
|
+
"configLoadedSuccessfully": "구성이 성공적으로 로드되었습니다.",
|
|
392
|
+
"configLoadingFailed": "구성 로드에 실패했습니다.",
|
|
393
|
+
"sourceLanguageNotFound": "소스 언어 디렉토리를 찾을 수 없습니다: {sourceLanguage}",
|
|
394
|
+
"couldNotParseTarget": "대상 파일을 구문 분석할 수 없습니다. {file}",
|
|
395
|
+
"couldNotParseSource": "소스 파일을 구문 분석할 수 없습니다. {file}",
|
|
396
|
+
"reportGenerated": "생성된 보고서: {path}",
|
|
397
|
+
"generateReportPrompt": "보고서를 생성하시겠습니까?",
|
|
398
|
+
"title": "🌍 I18NTK 번역 완료",
|
|
399
|
+
"separator": "============================================================",
|
|
400
|
+
"sourceDir": "📁 소스 디렉토리: {sourceDir}",
|
|
401
|
+
"sourceLanguage": "🌐 소스 언어: {sourceLanguage}",
|
|
402
|
+
"dryRunMode": "🧪 드라이 런 모드 - 변경 사항이 없습니다.",
|
|
403
|
+
"languages": "🌍 사용 가능한 언어: {languages}",
|
|
404
|
+
"addingMissingKeys": "➕ 번역 파일에 누락된 키 추가 중...",
|
|
405
|
+
"processing": "🔄 처리 {language}...",
|
|
406
|
+
"addedKeys": "✅ 추가됨 {count} 누락된 키",
|
|
407
|
+
"noChangesNeeded": "✅ 변경이 필요하지 않습니다 {language}",
|
|
408
|
+
"summaryTitle": "📊 완료 요약",
|
|
409
|
+
"totalChanges": "📝 총 변경 사항: {totalChanges}",
|
|
410
|
+
"languagesProcessed": "🌍 처리되는 언어: {languagesProcessed}",
|
|
411
|
+
"missingKeysAdded": "➕ 누락된 키가 추가되었습니다: {missingKeysAdded}",
|
|
412
|
+
"nextStepsTitle": "📋 NEXT STEPS",
|
|
413
|
+
"nextStep1": "1. 사용량 분석 실행:",
|
|
414
|
+
"nextStep2": "노드 i18ntk-usage.js --output-report",
|
|
415
|
+
"nextStep3": "2. 번역 검증:",
|
|
416
|
+
"nextStep4": "노드 i18ntk-validate.js",
|
|
417
|
+
"nextStep5": "3. 패턴 분석:",
|
|
418
|
+
"nextStep6": "노드 i18ntk-analyze.js",
|
|
419
|
+
"allKeysAvailable": "🎉 이제 모든 번역 키를 사용할 수 있습니다!",
|
|
420
|
+
"runWithoutDryRun": "💡 변경 사항을 적용하려면 --dry-run 없이 실행하세요.",
|
|
421
|
+
"deletingOldReport": "🗑️ 오래된 보고서를 삭제하는 중...",
|
|
422
|
+
"generatingFreshAnalysis": "📊 새로운 사용량 분석 생성 중...",
|
|
423
|
+
"couldNotGenerate": "❌ 사용량 분석을 생성할 수 없습니다.",
|
|
424
|
+
"reportNotFound": "📋 사용 보고서를 찾을 수 없습니다. 공용 키를 사용하는 중...",
|
|
425
|
+
"foundMissingKeys": "📋 찾았습니다 {count} 사용량 분석에서 누락된 키",
|
|
426
|
+
"couldNotParse": "❌ 사용 보고서를 구문 분석할 수 없습니다. 공용 키를 사용하는 중...",
|
|
427
|
+
"errorDuringCompletion": "❌ 완료 중 오류: {error}",
|
|
428
|
+
"fatalError": "❌ 치명적인 오류: {error}",
|
|
429
|
+
"configurationValidationFailed": "구성 유효성 검사 실패: 필수 필드가 누락되었습니다."
|
|
430
|
+
},
|
|
431
|
+
"sizing": {
|
|
432
|
+
"separator": "================================================================================",
|
|
433
|
+
"lineSeparator": "--------------------------------------------------------------------------------",
|
|
434
|
+
"analysisStats": "{stats}",
|
|
435
|
+
"sourceDirectoryLabel": "📁 소스 디렉토리: {sourceDir}",
|
|
436
|
+
"sourceLanguageLabel": "🌍 소스 언어: {sourceLanguage}",
|
|
437
|
+
"strictModeLabel": "⚙️ 엄격 모드: {mode}",
|
|
438
|
+
"invalidSourceDirectoryError": "잘못된 소스 디렉터리 경로: {sourceDir}",
|
|
439
|
+
"sourceDirectoryNotFoundError": "소스 디렉터리를 찾을 수 없습니다: {sourceDir}",
|
|
440
|
+
"invalidOutputDirectoryError": "잘못된 출력 디렉터리 경로: {outputDir}",
|
|
441
|
+
"invalidReportFileError": "잘못된 보고서 파일 경로",
|
|
442
|
+
"problematic_keys": "문제가 있는 키: {problematicKeys}",
|
|
443
|
+
"problematicKeysLabel": "문제가 있는 키: {problematicKeys}",
|
|
444
|
+
"long_translations": "긴 번역: {longTranslations}",
|
|
445
|
+
"failedToSaveReportError": "보고서를 안전하게 저장하지 못했습니다.",
|
|
446
|
+
"invalidCsvFileError": "잘못된 CSV 파일 경로",
|
|
447
|
+
"failedToSaveCsvError": "CSV 보고서를 안전하게 저장하지 못했습니다.",
|
|
448
|
+
"fatalError": "❌ 크기 분석 실패: {error}",
|
|
449
|
+
"starting_i18n_sizing_analysis": "i18n 크기 분석을 시작하는 중...",
|
|
450
|
+
"source_directory": "소스 디렉토리: {sourceDir}",
|
|
451
|
+
"found_languages": "발견된 언어: {languages}",
|
|
452
|
+
"analyzing_file_sizes": "파일 크기 분석 중...",
|
|
453
|
+
"analyzing_translation_content": "번역 내용 분석 중...",
|
|
454
|
+
"generating_size_comparisons": "크기 비교 생성 중...",
|
|
455
|
+
"no_languages_found_for_comparison": "비교할 언어를 찾을 수 없습니다.",
|
|
456
|
+
"sizing_analysis_results": "I18n 사이징 분석 결과",
|
|
457
|
+
"file_sizes_title": "파일 크기",
|
|
458
|
+
"file_sizes_header": "언어 크기(KB) 행 문자",
|
|
459
|
+
"file_size_row": "{lang} {sizeKB} {lines} {characters}",
|
|
460
|
+
"language_statistics_title": "언어통계",
|
|
461
|
+
"language_stats_header": "언어 키 문자 평균 길이 최대 길이 비어 있음 길게",
|
|
462
|
+
"language_stats_row": "{lang} {totalKeys} {totalCharacters} {averageKeyLength} {maxKeyLength} {emptyKeys} {longKeys}",
|
|
463
|
+
"size_variations_title": "크기 변화",
|
|
464
|
+
"size_variations_header": "언어 문자 차이 % 차이 문제",
|
|
465
|
+
"size_variation_row": "{lang} {characterDifference} {percentageDifference}% {problematic}",
|
|
466
|
+
"problematic_yes": "예",
|
|
467
|
+
"problematic_no": "아니요",
|
|
468
|
+
"recommendations_title": "권장사항",
|
|
469
|
+
"recommendation_item": "{index}. {recommendation}",
|
|
470
|
+
"problematic_key_detail": "{index}. 열쇠: '{key}' - 변형: {variations}",
|
|
471
|
+
"generating_detailed_report": "세부 보고서 생성 중...",
|
|
472
|
+
"keysHaveSignificantSizeVariations": "키에는 상당한 크기 변화가 있습니다",
|
|
473
|
+
"longTranslationsDetected": "${lang} 100자를 초과하는 ${data.longKeys} 번역이 있습니다. 이를 분해하는 것이 좋습니다.",
|
|
474
|
+
"longer": "더 길게",
|
|
475
|
+
"shorter": "더 짧은",
|
|
476
|
+
"review_translations": "검토를 고려해보세요 {lang} 번역 - 그렇죠 {percentageDifference}% {comparison} 기준선보다",
|
|
477
|
+
"report_saved_to": "보고서 저장 위치: {reportPath}",
|
|
478
|
+
"considerReviewingTranslations": "검토를 고려해보세요 ${lang} 번역 - 기준보다 ${data.percentageDifference}% 더 깁니다.",
|
|
479
|
+
"csv_report_saved_to": "CSV 보고서 저장 위치: {csvPath}",
|
|
480
|
+
"human_report_saved": "읽을 수 있는 보고서가 저장되었습니다: {reportPath}",
|
|
481
|
+
"folder_summary_title": "폴더 요약",
|
|
482
|
+
"folder_summary_table_header": "언어 크기(KB) 키 평균 길이 총 문자 수",
|
|
483
|
+
"folder_summary_row": "{lang} {sizeKB} {totalKeys} {avgLength} {totalChars}",
|
|
484
|
+
"language_comparison_title": "언어 비교",
|
|
485
|
+
"language_comparison_row": "{lang}: {diff} 문자({percent}%) {status}",
|
|
486
|
+
"summary_stats": "📊 요약: {totalLanguages} 언어, {totalKeys} 키 - 저장된 보고서 {reportPath}",
|
|
487
|
+
"detailedKeysDescription": "콘솔에 자세한 키 수준 분석 표시",
|
|
488
|
+
"too_many_keys_warning": "⚠️ 콘솔에 표시할 키가 너무 많습니다. 전체 분석을 보려면 자세한 보고서 파일을 확인하세요.",
|
|
489
|
+
"no_translation_files_found": "번역 파일을 찾을 수 없습니다.",
|
|
490
|
+
"analysis_completed": "분석 완료 {duration}ms",
|
|
491
|
+
"analysis_failed": "분석 실패: {errorMessage}",
|
|
492
|
+
"starting_analysis": "분석 시작 중...",
|
|
493
|
+
"found_files": "설립하다 {count} 파일",
|
|
494
|
+
"failed_to_parse_language_error": "파싱하지 못했습니다. {language} 번역: {errorMessage}",
|
|
495
|
+
"recommendations": {
|
|
496
|
+
"keys_have_significant_size_variations": "키에는 상당한 크기 변화가 있습니다",
|
|
497
|
+
"consider_reviewing_translations": "검토를 고려해보세요 {lang} 번역 - 그렇죠 {percentageDifference}% {comparison} 기준선보다",
|
|
498
|
+
"long_translations_detected": "{lang} 가지다 {longKeys} 다음보다 긴 번역 {threshold} 캐릭터 - 분해하는 것을 고려해보세요"
|
|
499
|
+
},
|
|
500
|
+
"detailed_key_analysis_title": "상세한 주요 분석",
|
|
501
|
+
"key_analysis_detail": "{lang}: {length} 문자({status}) - {translation}",
|
|
502
|
+
"key_analysis_header": "열쇠: {key}",
|
|
503
|
+
"status_empty": "비어 있는",
|
|
504
|
+
"status_long": "긴",
|
|
505
|
+
"status_ok": "좋아요"
|
|
506
|
+
},
|
|
507
|
+
"usage": {
|
|
508
|
+
"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",
|
|
509
|
+
"source_directory_thissourcedir": "📁 소스 디렉토리: {sourceDir}",
|
|
510
|
+
"translationCompletenessTitle": "🌍 번역 완전성:",
|
|
511
|
+
"i18n_directory_thisi18ndir": "🌐 I18n 디렉토리: {i18nDir}",
|
|
512
|
+
"failed_to_parse_filename_error": "⚠️ 구문 분석에 실패했습니다. {fileName}: {errorMessage}",
|
|
513
|
+
"analyzing_source_files": "🔍 소스 파일 분석 중...",
|
|
514
|
+
"found_files_in_source": "📂 발견 {numFiles} 소스 디렉터리의 파일",
|
|
515
|
+
"found_thisusedkeyssize_unique_": "🎯 발견됨 {usedKeysSize} 고유하게 사용된 키",
|
|
516
|
+
"total_key_usages_totalkeysfoun": "📊 총 키 사용: {totalKeysFound}",
|
|
517
|
+
"loading_available_translation_": "📋 사용 가능한 번역 키 로드 중...",
|
|
518
|
+
"found_thisavailablekeyssize_av": "✅ 찾음 {availableKeysSize} 사용 가능한 키",
|
|
519
|
+
"foundTranslationFiles": "✅ 찾음 {count} 번역 파일",
|
|
520
|
+
"errorReadingI18nDirectory": "⚠️ i18n 디렉토리 읽기 오류: {error}",
|
|
521
|
+
"pressEnterToReturnToMenu": "📝 Enter를 눌러 메인 메뉴로 돌아가세요...",
|
|
522
|
+
"notTranslatedKeysTotal": "⚠️ 번역되지 않은 키: {total}",
|
|
523
|
+
"noSourceFilesFound": "⚠️ 소스 디렉터리에 소스 파일이 없습니다.",
|
|
524
|
+
"reviewNotTranslatedKeys": "💡 번역되지 않은 키 검토",
|
|
525
|
+
"analysisCompletedSuccessfully": "🎉 분석이 성공적으로 완료되었습니다!",
|
|
526
|
+
"detectedSourceDirectory": "감지된 소스 디렉터리: {sourceDir}",
|
|
527
|
+
"detectedI18nDirectory": "i18n 디렉토리가 감지되었습니다: {i18nDir}",
|
|
528
|
+
"fileInfo": "📄 {namespace}: {keys} 열쇠",
|
|
529
|
+
"failedToAnalyzeUsage": "❌ 사용량 분석 실패: {error}",
|
|
530
|
+
"failedToAnalyzeFile": "❌ 파일 분석 실패: {error}",
|
|
531
|
+
"failedToExtractKeys": "❌ 다음에서 키를 추출하지 못했습니다. {filePath}: {error}",
|
|
532
|
+
"analysisFailedError": "❌ 분석 실패: {error}",
|
|
533
|
+
"analyzerInitialized": "분석기가 초기화되었습니다.",
|
|
534
|
+
"analyzerInitFailed": "분석기 초기화 실패: {error}",
|
|
535
|
+
"argsParsed": "구문 분석된 인수",
|
|
536
|
+
"processedFiles": "처리됨 {processedFiles} ~의 {totalFiles} 파일.",
|
|
537
|
+
"argsParseFailed": "인수 구문 분석에 실패했습니다. {error}",
|
|
538
|
+
"translationDiscoveryError": "번역 검색 오류: {error}",
|
|
539
|
+
"fileTraversalError": "파일 탐색 오류: {error}",
|
|
540
|
+
"sourceEqualsI18nWarn": "{reason}. 사용 분석에서는 로케일 파일을 소스 코드로 검색하지 않습니다.",
|
|
541
|
+
"i18nEqualsSourceWarn": "⚠️ I18n 디렉토리와 소스 디렉토리는 동일합니다. 이로 인해 분석에 문제가 발생할 수 있습니다.",
|
|
542
|
+
"usageAnalysisFailed": "⚠️ 사용량 분석 실패: {error}",
|
|
543
|
+
"translationFileParseError": "⚠️ 번역 파일 구문 분석 오류: {error}",
|
|
544
|
+
"translationKeysLoadError": "⚠️ 번역 키 로드 오류: {error}",
|
|
545
|
+
"languageCompletenessStats": "🌐 {language}: {translated}/{total} ({completeness}% 번역됨)",
|
|
546
|
+
"missingKeysCount": "⚠️ 누락된 키: {count}",
|
|
547
|
+
"analyzingTranslationCompleteness": "번역 완성도 분석 중...",
|
|
548
|
+
"unusedKeysCount": "사용되지 않은 키: {count}",
|
|
549
|
+
"usedKeysCount": "사용된 키: {count}",
|
|
550
|
+
"availableKeysCount": "사용 가능한 키: {count}",
|
|
551
|
+
"analysisResults": "분석 결과:",
|
|
552
|
+
"i18nDirectoryNotFound": "⚠️ I18n 디렉토리를 찾을 수 없습니다. 경로를 확인해주세요.",
|
|
553
|
+
"sourceDirectoryNotFound": "⚠️ 소스 디렉터리를 찾을 수 없습니다: {dir}",
|
|
554
|
+
"checkUsage": {
|
|
555
|
+
"title": "🔍 I18NTK USAGE ANALYSIS",
|
|
556
|
+
"analyzing_source_files": "🔍 소스 파일 분석 중...",
|
|
557
|
+
"source_directory_thissourcedir": "📁 소스 디렉토리: {sourceDir}",
|
|
558
|
+
"i18n_directory_thisi18ndir": "📁 i18n 디렉토리: {i18nDir}",
|
|
559
|
+
"found_files_in_source": "✅ 찾음 {numFiles} 소스 디렉터리의 파일",
|
|
560
|
+
"no_source_files_found": "⚠️ 지정된 디렉터리에 소스 파일이 없습니다.",
|
|
561
|
+
"processedFiles": "📊 처리됨 {processedFiles} ~의 {totalFiles} 파일",
|
|
562
|
+
"failedToProcessFile": "❌ 처리 실패",
|
|
563
|
+
"found_thisusedkeyssize_unique_": "🔍 발견됨 {usedKeysSize} 고유하게 사용된 키",
|
|
564
|
+
"total_key_usages_totalkeysfoun": "📊 총 키 사용: {totalKeysFound}",
|
|
565
|
+
"loading_available_translation_": "📂 사용 가능한 번역 키 로드 중...",
|
|
566
|
+
"found_thisavailablekeyssize_av": "✅ 찾음 {availableKeysSize} 사용 가능한 키",
|
|
567
|
+
"message": "프로젝트 전체에서 번역 키 사용을 분석하는 중...",
|
|
568
|
+
"usage_analysis_results": "📊 USAGE ANALYSIS RESULTS",
|
|
569
|
+
"source_files_scanned_thisfileu": "📁 스캔된 소스 파일: {fileUsageSize}",
|
|
570
|
+
"available_translation_keys_thi": "✅ 사용 가능한 번역 키: {availableKeysSize}",
|
|
571
|
+
"used_translation_keys_thisused": "🔍 사용된 번역 키: {usedKeysSize}",
|
|
572
|
+
"dynamic_keys_detected_dynamick": "⚡ 동적 키가 감지되었습니다: {dynamicKeysLength}",
|
|
573
|
+
"unused_keys_unusedkeyslength": "🗑️ 사용하지 않은 키: {unusedKeysLength}",
|
|
574
|
+
"missing_keys_missingkeyslength": "❌ 누락된 키: {missingKeysLength}",
|
|
575
|
+
"translation_completeness_title": "📈 번역 완전성",
|
|
576
|
+
"language_completeness_stats": "{language}: {translated}/{total} 키({percentage}%)",
|
|
577
|
+
"n_sample_unused_keys": "🗑️ 사용하지 않은 키 샘플(처음 5개):",
|
|
578
|
+
"key": "🔑 {key}",
|
|
579
|
+
"and_unusedkeyslength_5_more": "... 그리고 {count} 사용하지 않은 키가 더 많습니다",
|
|
580
|
+
"n_sample_missing_keys": "❌ 누락된 키 샘플(처음 5개):",
|
|
581
|
+
"and_missingkeyslength_5_more": "... 그리고 {count} 더 많은 누락된 키",
|
|
582
|
+
"n_generating_detailed_report": "📊 상세 보고서 생성 중...",
|
|
583
|
+
"report_saved_reportpath": "📄 보고서 저장됨: {reportPath}",
|
|
584
|
+
"n_recommendations": "💡 권장사항:",
|
|
585
|
+
"consider_removing_unused_trans": "🗑️ 번들 크기를 줄이려면 사용하지 않는 번역을 삭제하는 것이 좋습니다.",
|
|
586
|
+
"add_missing_translation_keys_t": "➕ 일관성을 유지하기 위해 누락된 번역 키를 추가합니다.",
|
|
587
|
+
"review_dynamic_keys_manually_t": "🔍 동적 키를 수동으로 검토합니다(유효할 수도 있음)",
|
|
588
|
+
"all_translation_keys_are_prope": "✅ 모든 번역 키가 올바르게 사용되었습니다!",
|
|
589
|
+
"n_next_steps": "🎯 NEXT STEPS:",
|
|
590
|
+
"2_check_the_detailed_report_fo": "2. 특정 이슈에 대한 상세 리포트를 확인하세요",
|
|
591
|
+
"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",
|
|
592
|
+
"1_review_the_analysis_results": "1. 콘솔 또는 생성된 보고서에서 분석 결과를 검토합니다.",
|
|
593
|
+
"2_run_with_outputreport_for_de": "2. 자세한 보고서를 보려면 --output-report를 사용하여 실행하세요.",
|
|
594
|
+
"3_remove_unused_keys_or_add_mi": "3. 사용하지 않는 키를 제거하거나 누락된 키를 소스 코드에 추가하세요.",
|
|
595
|
+
"4_rerun_analysis_to_verify_imp": "4. 분석을 다시 실행하여 개선 사항을 확인합니다.",
|
|
596
|
+
"noSourceFilesFound": "분석할 소스 파일이 없습니다.",
|
|
597
|
+
"i18nDirectoryNotFound": "I18n 디렉토리를 찾을 수 없습니다: {i18nDir}",
|
|
598
|
+
"noTranslationLanguagesFound": "번역 언어가 없습니다.",
|
|
599
|
+
"failedToAnalyzeFile": "파일을 분석하지 못했습니다. {filePath}: {error}",
|
|
600
|
+
"failedToAnalyzeLanguage": "언어 분석에 실패했습니다. {language}: {error}",
|
|
601
|
+
"translationCompletenessAnalysisFailed": "번역 완성도 분석 실패: {error}",
|
|
602
|
+
"n": "\\N"
|
|
603
|
+
},
|
|
604
|
+
"complete": {
|
|
605
|
+
"configLoadedSuccessfully": "구성이 성공적으로 로드되었습니다.",
|
|
606
|
+
"configLoadingFailed": "구성 로드에 실패했습니다.",
|
|
607
|
+
"title": "🌍 I18NTK 번역 완료",
|
|
608
|
+
"separator": "============================================================",
|
|
609
|
+
"sourceDir": "📁 소스 디렉토리: {sourceDir}",
|
|
610
|
+
"sourceLanguage": "🌐 소스 언어: {sourceLanguage}",
|
|
611
|
+
"dryRunMode": "🧪 드라이 런 모드 - 변경 사항이 없습니다.",
|
|
612
|
+
"languages": "🌍 사용 가능한 언어: {languages}",
|
|
613
|
+
"addingMissingKeys": "➕ 번역 파일에 누락된 키 추가 중...",
|
|
614
|
+
"processing": "🔄 처리 {language}...",
|
|
615
|
+
"addedKeys": "✅ 추가됨 {count} 누락된 키",
|
|
616
|
+
"changeDetails": "📝 {file}: {key}",
|
|
617
|
+
"andMore": "...그리고 {count} 더",
|
|
618
|
+
"noChangesNeeded": "✅ 변경이 필요하지 않습니다 {language}",
|
|
619
|
+
"summaryTitle": "📊 완료 요약",
|
|
620
|
+
"totalChanges": "📝 총 변경 사항: {totalChanges}",
|
|
621
|
+
"languagesProcessed": "🌍 처리되는 언어: {languagesProcessed}",
|
|
622
|
+
"missingKeysAdded": "➕ 누락된 키가 추가되었습니다: {missingKeysAdded}",
|
|
623
|
+
"nextStepsTitle": "📋 NEXT STEPS",
|
|
624
|
+
"nextStep1": "1. 사용량 분석 실행:",
|
|
625
|
+
"nextStep2": "노드 i18ntk-usage.js --output-report",
|
|
626
|
+
"nextStep3": "2. 번역 검증:",
|
|
627
|
+
"nextStep4": "노드 i18ntk-validate.js",
|
|
628
|
+
"nextStep5": "3. 패턴 분석:",
|
|
629
|
+
"nextStep6": "노드 i18ntk-analyze.js",
|
|
630
|
+
"allKeysAvailable": "🎉 이제 모든 번역 키를 사용할 수 있습니다!",
|
|
631
|
+
"runWithoutDryRun": "💡 변경 사항을 적용하려면 --dry-run 없이 실행하세요.",
|
|
632
|
+
"deletingOldReport": "🗑️ 오래된 보고서를 삭제하는 중...",
|
|
633
|
+
"generatingFreshAnalysis": "📊 새로운 사용량 분석 생성 중...",
|
|
634
|
+
"couldNotGenerate": "❌ 사용량 분석을 생성할 수 없습니다.",
|
|
635
|
+
"reportNotFound": "📋 사용 보고서를 찾을 수 없습니다. 공용 키를 사용하는 중...",
|
|
636
|
+
"foundMissingKeys": "📋 찾았습니다 {count} 사용량 분석에서 누락된 키",
|
|
637
|
+
"couldNotParse": "❌ 사용 보고서를 구문 분석할 수 없습니다. 공용 키를 사용하는 중..."
|
|
638
|
+
},
|
|
639
|
+
"noTranslationLanguagesFound": "번역 언어를 찾을 수 없습니다",
|
|
640
|
+
"failedToAnalyzeLanguage": "언어 분석에 실패했습니다.",
|
|
641
|
+
"translationCompletenessAnalysisFailed": "번역 완성도 분석 실패",
|
|
642
|
+
"failedToProcessFile": "파일 처리 실패:",
|
|
643
|
+
"failedToSaveReport": "사용량 보고서를 저장하지 못했습니다. {error}",
|
|
644
|
+
"i18nDirectoryDoesNotExist": "I18n 디렉토리가 존재하지 않습니다: {dir}",
|
|
645
|
+
"reportSavedTo": "사용 보고서 저장 위치: {reportPath}",
|
|
646
|
+
"sourceDirectoryDoesNotExist": "소스 디렉터리가 존재하지 않습니다: {dir}",
|
|
647
|
+
"noSourceDirectoryConfigured": "(구성된 바 없음)"
|
|
648
|
+
},
|
|
649
|
+
"validate": {
|
|
650
|
+
"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",
|
|
651
|
+
"title": "🔍 I18n 번역 검사기",
|
|
652
|
+
"message": "유효성 검사 프로세스를 시작하는 중...",
|
|
653
|
+
"sourceDirectory": "📁 소스 디렉토리: {dir}",
|
|
654
|
+
"sourceLanguage": "🌍 소스 언어: {sourceLanguage}",
|
|
655
|
+
"strictMode": "⚙️ 엄격 모드: {mode}",
|
|
656
|
+
"noTargetLanguages": "구성된 대상 언어가 없습니다. 대상 확인을 건너뛰는 중입니다. \"i18ntk init --언어s=de,fr\"을 통해 언어를 추가합니다.",
|
|
657
|
+
"validatingLanguages": "🌍 언어 확인: {langs}",
|
|
658
|
+
"validatingLanguage": "🔍 언어 확인 중: {lang}",
|
|
659
|
+
"filesCount": "📄 파일: {count}",
|
|
660
|
+
"keysCount": "🔑 키: {count}",
|
|
661
|
+
"missingFilesCount": "📁 누락된 파일: {count}",
|
|
662
|
+
"syntaxErrorsCount": "❌ 구문 오류: {count}",
|
|
663
|
+
"translationPercentage": "🎯 번역: {percentage}% ({translated}/{total} 열쇠)",
|
|
664
|
+
"validationSummary": "📊 검증 요약",
|
|
665
|
+
"validation_failed": "❌ 유효성 검사 실패: {error}",
|
|
666
|
+
"totalErrors": "❌ 총 오류 수: {count}",
|
|
667
|
+
"totalWarnings": "⚠️ 총 경고: {count}",
|
|
668
|
+
"errorsSection": "❌ ERRORS",
|
|
669
|
+
"warningsSection": "⚠️ WARNINGS",
|
|
670
|
+
"recommendationsSection": "💡 추천",
|
|
671
|
+
"fixErrorsFirst": "1. 먼저 모든 오류를 수정하세요.",
|
|
672
|
+
"resolveMissingFilesAndSyntaxErrors": "1. 누락된 파일 및 구문 오류 해결",
|
|
673
|
+
"fixStructuralInconsistencies": "2. 구조적 불일치 수정",
|
|
674
|
+
"completeMissingTranslations": "3. 누락된 번역을 완성하세요",
|
|
675
|
+
"rerunValidation": "4. 유효성 검사를 다시 실행하여 수정 사항을 확인합니다.",
|
|
676
|
+
"addressWarnings": "품질 개선을 위해 경고 해결",
|
|
677
|
+
"reviewWarnings": "경고를 검토하고 적절한 경우 수정하세요.",
|
|
678
|
+
"considerRunningWithStrict": "2. 보다 엄격한 검증을 위해 --strict 플래그를 사용하여 실행하는 것을 고려하십시오.",
|
|
679
|
+
"allValidationsPassed": "🎉 모든 검증이 통과되었습니다!",
|
|
680
|
+
"considerRunningUsageAnalysis": "사용량 분석 실행을 고려하십시오: node i18ntk-usage.js",
|
|
681
|
+
"deletedOldReport": "🗑️ 오래된 검증 보고서를 삭제했습니다.",
|
|
682
|
+
"sourceDir": "📁 소스 디렉토리: {sourceDir}",
|
|
683
|
+
"i18nDir": "🌐 I18n 디렉토리: {i18nDir}",
|
|
684
|
+
"loadingTranslationFiles": "📋 번역 파일 로드 중...",
|
|
685
|
+
"foundTranslationFilesCount": "✅ 찾음 {count} 번역 파일",
|
|
686
|
+
"analyzingTranslations": "🔍 번역 분석 중...",
|
|
687
|
+
"validationCompletedSuccessfully": "🎉 검증이 성공적으로 완료되었습니다!",
|
|
688
|
+
"validationErrorsFound": "⚠️ 확인 오류가 발견되었습니다: {count}",
|
|
689
|
+
"validationWarningsFound": "⚠️ 유효성 검사 경고가 발견되었습니다. {count}",
|
|
690
|
+
"validationPassed": "✅ 오류 없이 유효성 검사가 통과되었습니다.",
|
|
691
|
+
"validationFailed": "검증 실패: {error}",
|
|
692
|
+
"startingValidationProcess": "🔍 유효성 검사 프로세스 시작 중...",
|
|
693
|
+
"validationProcessCompletedSuccessfully": "✅ 검증 과정이 성공적으로 완료되었습니다",
|
|
694
|
+
"stackTrace": "스택 추적: {stack}",
|
|
695
|
+
"authenticationFailed": "❌ 인증에 실패했습니다. 접근 불가.",
|
|
696
|
+
"fatalValidationError": "❌ 치명적인 유효성 검사 오류: {error}",
|
|
697
|
+
"configAccess": "검증을 위해 구성에 액세스하는 중",
|
|
698
|
+
"configValidated": "구성이 성공적으로 검증되었습니다.",
|
|
699
|
+
"configError": "구성 오류: {error}",
|
|
700
|
+
"validatorInit": "I18n 유효성 검사기 초기화 중",
|
|
701
|
+
"validatorInitialized": "I18n 유효성 검사기가 성공적으로 초기화되었습니다.",
|
|
702
|
+
"validatorInitError": "유효성 검사기 초기화 오류: {error}",
|
|
703
|
+
"argsParsing": "명령줄 인수 구문 분석",
|
|
704
|
+
"argsParsed": "명령줄 인수가 성공적으로 구문 분석되었습니다.",
|
|
705
|
+
"argsParseError": "인수 구문 분석 오류: {error}",
|
|
706
|
+
"languagesScan": "사용 가능한 언어 스캔 중",
|
|
707
|
+
"languagesFound": "설립하다 {count} 언어",
|
|
708
|
+
"languagesScanError": "언어 검색 오류: {error}",
|
|
709
|
+
"filesScan": "설립하다 {count} 파일 {language}",
|
|
710
|
+
"filesScanError": "파일 검색 오류: {error}",
|
|
711
|
+
"jsonValidated": "JSON 구문이 검증되었습니다: {filePath}",
|
|
712
|
+
"jsonValidationError": "JSON 유효성 검사 오류: {error}",
|
|
713
|
+
"languageValidation": "언어 확인 중: {language}",
|
|
714
|
+
"languageValidationError": "언어 유효성 검사 오류: {error}",
|
|
715
|
+
"fileDeleted": "파일이 삭제되었습니다.",
|
|
716
|
+
"runStarted": "검증 실행 시작",
|
|
717
|
+
"runCompleted": "검증 실행이 성공적으로 완료되었습니다.",
|
|
718
|
+
"runError": "검증 실행 실패: {error}",
|
|
719
|
+
"scriptExecution": "스크립트 실행",
|
|
720
|
+
"validationCompleted": "검증 완료",
|
|
721
|
+
"validationError": "유효성 검사 오류: {error}",
|
|
722
|
+
"separator": "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
|
|
723
|
+
"languageHeader": "🌐 언어: {language}",
|
|
724
|
+
"validationResults": "📊 검증 결과",
|
|
725
|
+
"noErrors": "✅ 오류가 발견되지 않았습니다",
|
|
726
|
+
"noWarnings": "✅ 경고가 발견되지 않았습니다",
|
|
727
|
+
"summaryHeader": "📋 OVERALL SUMMARY",
|
|
728
|
+
"progressIndicator": "⏳ 처리 중...",
|
|
729
|
+
"completedIndicator": "✅ 완료됨",
|
|
730
|
+
"errorIndicator": "❌ 오류",
|
|
731
|
+
"warningIndicator": "⚠️ 경고",
|
|
732
|
+
"infoIndicator": "ℹ️ 정보",
|
|
733
|
+
"sourceDirNotConfigured": "소스 디렉터리가 구성되지 않았습니다.",
|
|
734
|
+
"sourceLanguageNotConfigured": "소스 언어가 구성되지 않았습니다.",
|
|
735
|
+
"translationFunctionNotInitialized": "번역 기능이 제대로 초기화되지 않았습니다.",
|
|
736
|
+
"sourceLanguageDirectoryNotFound": "소스 언어 디렉터리를 찾을 수 없습니다.",
|
|
737
|
+
"specifiedLanguageNotFound": "지정한 언어를 찾을 수 없습니다",
|
|
738
|
+
"noJsonFilesFound": "소스 디렉터리에 JSON 파일이 없습니다. {sourceDir}",
|
|
739
|
+
"i18nDirectoryNotFound": "I18n 디렉토리를 찾을 수 없습니다: {i18nDir}",
|
|
740
|
+
"invalidDirectoryPaths": "잘못된 디렉터리 경로가 감지되었습니다.",
|
|
741
|
+
"invalidSampleFilePath": "잘못된 샘플 파일 경로",
|
|
742
|
+
"failedToCreateSampleTranslationFile": "샘플 번역 파일을 생성하지 못했습니다.",
|
|
743
|
+
"invalidFilePathDetected": "잘못된 파일 경로가 감지되었습니다.",
|
|
744
|
+
"failedToWriteFile": "파일을 쓰지 못했습니다: {filePath}",
|
|
745
|
+
"invalidSourceDirectory": "잘못된 소스 디렉터리: {sourceDir}",
|
|
746
|
+
"invalidSourceLanguageDirectory": "잘못된 소스 언어 디렉터리: {sourceDir}"
|
|
747
|
+
},
|
|
748
|
+
"adminCli": {
|
|
749
|
+
"setupPinProtectionTitle": "🔐 관리자 PIN 보호 설정",
|
|
750
|
+
"setupPinProtectionDescription": "관리 작업을 위해서는 4~6자리 PIN이 필요합니다.",
|
|
751
|
+
"enablePinProtectionPrompt": "관리자 PIN 보호를 활성화하시겠습니까?",
|
|
752
|
+
"setupCancelled": "관리자 PIN 보호 설정이 취소되었습니다.",
|
|
753
|
+
"enterPinPrompt": "4~6자리 PIN을 입력하세요.",
|
|
754
|
+
"pinFormatError": "❌ PIN은 4~6자리여야 합니다. 다시 시도해 주세요.",
|
|
755
|
+
"confirmPinPrompt": "PIN 확인:",
|
|
756
|
+
"pinMismatchError": "❌ PIN이 일치하지 않습니다. 다시 시도해 주세요.",
|
|
757
|
+
"pinProtectionEnabledSuccess": "✅ 관리자 PIN 보호가 활성화되었습니다!",
|
|
758
|
+
"pinRecoveryWarning": "⚠️ PIN을 기억하세요. 분실 시 복구할 수 없습니다.",
|
|
759
|
+
"setupPinProtectionFailed": "❌ 관리자 PIN 보호를 설정하지 못했습니다.",
|
|
760
|
+
"errorSettingUpPin": "❌ 관리자 PIN 설정 중 오류 발생: {message}",
|
|
761
|
+
"authRequiredForOperation": "🔐 관리자 인증이 필요한 경우: {operation}",
|
|
762
|
+
"invalidPinFormat": "❌ 잘못된 PIN 형식입니다. PIN은 4~6자리여야 합니다.",
|
|
763
|
+
"authenticationSuccess": "✅ 인증 성공!",
|
|
764
|
+
"invalidPinAttemptsRemaining": "❌ PIN이 잘못되었습니다. {remaining} 시도 횟수가 남아 있습니다.",
|
|
765
|
+
"authenticationFailedAccessDenied": "❌ 인증에 실패했습니다. 접근 불가.",
|
|
766
|
+
"authenticationError": "❌ 인증 오류: {message}",
|
|
767
|
+
"pinProtectionNotEnabled": "현재 관리자 PIN 보호가 활성화되어 있지 않습니다.",
|
|
768
|
+
"disablingPinProtectionTitle": "🔓 관리자 PIN 보호 비활성화",
|
|
769
|
+
"confirmDisablePinProtection": "관리자 PIN 보호를 비활성화하시겠습니까?",
|
|
770
|
+
"operationCancelled": "작업이 취소되었습니다.",
|
|
771
|
+
"pinProtectionDisabledSuccess": "✅ 관리자 PIN 보호가 비활성화되었습니다.",
|
|
772
|
+
"disablePinProtectionFailed": "❌ 관리자 PIN 보호를 비활성화하지 못했습니다.",
|
|
773
|
+
"errorDisablingPinProtection": "❌ 관리자 보호를 비활성화하는 중에 오류가 발생했습니다. {message}",
|
|
774
|
+
"adminProtectionStatusTitle": "🔐 관리자 보호 상태",
|
|
775
|
+
"statusEnabled": "상태: ✅ 활성화됨",
|
|
776
|
+
"protectionDetails": "보호: 관리 작업에는 4~6자리 PIN이 필요합니다.",
|
|
777
|
+
"lockoutDetails": "잠금: 3회 시도 실패 = 15분 잠금",
|
|
778
|
+
"statusDisabled": "상태: ❌ 비활성화됨",
|
|
779
|
+
"noAuthRequired": "보호: 인증이 필요하지 않습니다.",
|
|
780
|
+
"unprotectedRisk": "위험: 관리 작업이 보호되지 않습니다.",
|
|
781
|
+
"errorCheckingAdminStatus": "❌ 관리자 상태 확인 중 오류 발생: {message}",
|
|
782
|
+
"authRequired": "🔐 관리자 인증이 필요합니다.",
|
|
783
|
+
"invalidPin": "❌ PIN이 잘못되었습니다.",
|
|
784
|
+
"authSuccess": "✅ 인증 성공!",
|
|
785
|
+
"adminPinSetupCli": "admin_pin_setup_cli",
|
|
786
|
+
"adminAuthFailedCli": "admin_auth_failed_cli",
|
|
787
|
+
"adminAuthDisabledCli": "admin_auth_disabled_cli",
|
|
788
|
+
"protectedAccess": "보호된 액세스: 민감한 작업에는 관리자 인증이 필요합니다.",
|
|
789
|
+
"enterPin": "관리자 PIN 입력:",
|
|
790
|
+
"accessGranted": "액세스 권한이 부여되었습니다."
|
|
791
|
+
},
|
|
792
|
+
"adminPin": {
|
|
793
|
+
"setup_title": "🔐 관리자 PIN 설정",
|
|
794
|
+
"setup_separator": "============================================================",
|
|
795
|
+
"setup_description": "민감한 설정에 대한 관리자 액세스를 위한 4~6자리 PIN을 만듭니다.",
|
|
796
|
+
"required_for_title": "이 PIN은 다음과 같은 경우에 필요합니다.",
|
|
797
|
+
"required_for_1": "• 보안 설정 변경",
|
|
798
|
+
"required_for_2": "• 고급 구성 수정",
|
|
799
|
+
"required_for_3": "• 디버그 도구에 액세스",
|
|
800
|
+
"required_for_4": "• 설정 재설정",
|
|
801
|
+
"setup_note": "💡 참고: 입력할 때 별표(*)가 표시됩니다. 이는 단지 마스킹 문자일 뿐입니다.",
|
|
802
|
+
"setup_digits_only": "숫자 0-9만 PIN 숫자로 허용됩니다.",
|
|
803
|
+
"invalid_pin_length": "❌ PIN이 잘못되었습니다. 4~6자리 숫자여야 합니다(숫자 0~9만).",
|
|
804
|
+
"invalid_pin_example": "예: 1234 또는 567890",
|
|
805
|
+
"pins_do_not_match": "❌ PIN이 일치하지 않습니다.",
|
|
806
|
+
"setup_success": "✅ 관리자 PIN이 성공적으로 설정되었습니다!",
|
|
807
|
+
"setup_warning": "⚠️ 이 PIN을 안전하게 보관하세요. 분실시 복구가 불가능합니다.",
|
|
808
|
+
"setup_error": "❌ PIN 설정 오류:",
|
|
809
|
+
"session_expired": "⏰ 비활성으로 인해 관리 세션이 만료되었습니다.",
|
|
810
|
+
"no_pin_set_setting_up": "⚠️ 관리자 PIN이 설정되지 않았습니다. PIN 설정 중...",
|
|
811
|
+
"no_pin_configured_access_denied": "⚠️ 관리자 PIN이 구성되지 않았습니다. 접근 불가.",
|
|
812
|
+
"use_admin_settings_to_set_pin": "💡 먼저 관리자 설정을 사용하여 PIN을 설정하세요.",
|
|
813
|
+
"locked_out": "🔒 시도 실패 횟수가 너무 많아 관리자 액세스가 잠겼습니다.",
|
|
814
|
+
"wait_before_retry": "5분 정도 기다린 후 다시 시도해 주세요.",
|
|
815
|
+
"access_granted": "✅ 관리자 액세스 권한이 부여되었습니다.",
|
|
816
|
+
"incorrect_pin": "❌ PIN이 잘못되었습니다. {attempts} 시도 횟수가 남아 있습니다.",
|
|
817
|
+
"verify_pin_error": "❌ PIN 확인 오류:",
|
|
818
|
+
"already_configured": "✅ 관리자 PIN이 이미 구성되어 있습니다.",
|
|
819
|
+
"optional_setup_title": "🔐 관리자 PIN 설정(선택 사항)",
|
|
820
|
+
"optional_setup_description": "관리자 PIN 보호는 다음과 같은 민감한 작업에 대한 보안을 추가합니다.",
|
|
821
|
+
"setup_prompt": "관리자 PIN을 설정하시겠습니까? (예/아니요):",
|
|
822
|
+
"skipping_setup": "⏭️ 관리자 PIN 설정을 건너뛰는 중입니다. 나중에 설정에서 설정할 수 있습니다.",
|
|
823
|
+
"setup_prompt_error": "❌ PIN 설정 프롬프트 중 오류 발생:",
|
|
824
|
+
"protectedAccess": "보호된 액세스: 민감한 작업에는 관리자 인증이 필요합니다.",
|
|
825
|
+
"enterPin": "관리자 PIN 입력:",
|
|
826
|
+
"accessGranted": "액세스 권한이 부여되었습니다.",
|
|
827
|
+
"invalidPin": "❌ PIN이 잘못되었습니다. 다시 시도해 주세요.",
|
|
828
|
+
"weak_pin_warning": "⚠️ 경고: 이 PIN은 취약하거나 일반적인 것으로 보입니다.",
|
|
829
|
+
"weak_pin_suggestion": "💡 다양한 숫자로 더 강력한 PIN을 사용하는 것이 좋습니다.",
|
|
830
|
+
"use_anyway_prompt": "계속 사용하려면 \"yes\"를 입력하고, 다른 PIN을 선택하려면 Enter를 누르세요.",
|
|
831
|
+
"enter_new_pin": "새 관리자 PIN(4~6자리) 입력:",
|
|
832
|
+
"confirm_pin": "관리자 PIN 확인:",
|
|
833
|
+
"not_set": "설정되지 않음",
|
|
834
|
+
"pin_display_mask": "####"
|
|
835
|
+
},
|
|
836
|
+
"debug": {
|
|
837
|
+
"title": "🔧 디버그 도구",
|
|
838
|
+
"separator": "============================================================",
|
|
839
|
+
"mainDebuggerSystemDiagnostics": "1. 시스템 진단",
|
|
840
|
+
"_consoleTranslationsCheck": "// 2. 콘솔 번역 확인",
|
|
841
|
+
"_exportMissingKeys": "// 3. 누락된 번역 키 내보내기",
|
|
842
|
+
"_replaceHardcodedConsole": "// 4. 하드코딩된 콘솔 문자열 바꾸기",
|
|
843
|
+
"_consoleKeyChecker": "// 5. 콘솔 키 검사기",
|
|
844
|
+
"debugLogs": "2. 디버그 로그",
|
|
845
|
+
"backToMainMenu": "0. 메인 메뉴로 돌아가기",
|
|
846
|
+
"selectOption": "디버그 도구를 선택합니다.",
|
|
847
|
+
"runningDebugTool": "달리기 {displayName}...",
|
|
848
|
+
"debugToolNotFound": "❌ 디버그 도구를 찾을 수 없습니다: {toolName}",
|
|
849
|
+
"errorRunningDebugTool": "디버그 도구 실행 중 오류 발생 '{displayName}': {error}",
|
|
850
|
+
"recentDebugLogs": "📄 최근 디버그 로그",
|
|
851
|
+
"noDebugLogsFound": "❌ 디버그 로그를 찾을 수 없습니다.",
|
|
852
|
+
"debugLogsDirectoryNotFound": "❌ 디버그 로그 디렉터리를 찾을 수 없습니다.",
|
|
853
|
+
"selectLogPrompt": "보려는 로그 파일을 선택하십시오(1-{count}):",
|
|
854
|
+
"invalidChoiceSelectRange": "선택이 잘못되었습니다. 사용 가능한 범위에서 선택해 주세요.",
|
|
855
|
+
"contentOf": "📄 내용 {filename}:",
|
|
856
|
+
"pressEnterToContinue": "계속하려면 Enter를 누르세요..."
|
|
857
|
+
},
|
|
858
|
+
"detect_language_mismatches": {
|
|
859
|
+
"tool_title": "🔍 언어 불일치 감지 도구",
|
|
860
|
+
"separator": "=====================================",
|
|
861
|
+
"analyzing_file": "📄 분석 중 {language}.json...",
|
|
862
|
+
"error_analyzing_file": "❌ 오류분석 {filename}: {errorMessage}",
|
|
863
|
+
"results_title": "📊 언어 불일치 감지 결과",
|
|
864
|
+
"results_separator": "========================================",
|
|
865
|
+
"summary_title": "📋 SUMMARY:",
|
|
866
|
+
"total_files_analyzed": "분석된 총 파일 수: {totalFiles}",
|
|
867
|
+
"files_with_mismatches": "불일치가 있는 파일: {filesWithMismatches}",
|
|
868
|
+
"total_mismatches_found": "발견된 총 불일치 수: {totalMismatches}",
|
|
869
|
+
"no_mismatches_found": "✅ 언어 불일치가 발견되지 않았습니다! 모든 번역이 올바른 언어로 되어 있는 것 같습니다.",
|
|
870
|
+
"detailed_results_title": "🔍 DETAILED RESULTS:",
|
|
871
|
+
"file_mismatch_header": "📄 {filename} ({language})",
|
|
872
|
+
"mismatches_count": "설립하다 {count} 불일치:",
|
|
873
|
+
"mismatch_details": "{index}. 열쇠: {key}",
|
|
874
|
+
"mismatch_value": "값: \"{value}\"",
|
|
875
|
+
"mismatch_issue": "문제: {description}",
|
|
876
|
+
"recommendations_title": "💡 권장사항:",
|
|
877
|
+
"recommendation_1": "1. [TRANSLATE]로 표시된 모든 항목을 검토하고 번역합니다.",
|
|
878
|
+
"recommendation_2": "2. 언어 접두사(예: [DE], [FR])를 적절한 번역으로 바꿉니다.",
|
|
879
|
+
"recommendation_3": "3. 영어 텍스트를 적절한 대상 언어로 번역",
|
|
880
|
+
"recommendation_4": "4. 사용자가 접하는 모든 텍스트에 해당하는 모국어를 사용하세요.",
|
|
881
|
+
"recommendation_5": "5. 수정 후 이 도구를 다시 실행하여 수정 사항을 확인하세요.",
|
|
882
|
+
"detailed_report_saved": "📄 상세 보고서 저장 위치: {reportPath}",
|
|
883
|
+
"error_saving_report": "❌ 보고서 저장 오류: {errorMessage}",
|
|
884
|
+
"auto_fix_mode": "🔧 자동 수정 모드 {dryRun}",
|
|
885
|
+
"auto_fix_separator": "=====================================",
|
|
886
|
+
"fixed_file": "✅ 수정됨 {filename}",
|
|
887
|
+
"auto_fix_summary_title": "📊 자동 수정 요약:",
|
|
888
|
+
"total_fixes_applied": "적용된 총 수정 사항: {count}",
|
|
889
|
+
"preview_fixes_title": "🔍 수정사항 미리보기:",
|
|
890
|
+
"fix_details": "{file}: {key} 오래된: \"{old}\" 새로운: \"{new}\"",
|
|
891
|
+
"more_fixes": "... 그리고 {count} 더 많은 수정 사항",
|
|
892
|
+
"run_with_apply_fixes": "💡 이 수정 사항을 적용하려면 --apply를 사용하여 실행하세요.",
|
|
893
|
+
"error_general": "❌ 오류:",
|
|
894
|
+
"mainDebuggerSystemDiagnostics": "메인 디버거/시스템 진단",
|
|
895
|
+
"exportMissingKeys": "누락된 키 내보내기",
|
|
896
|
+
"replaceHardcodedConsole": "하드코딩된 콘솔 교체",
|
|
897
|
+
"consoleKeyChecker": "콘솔 키 검사기",
|
|
898
|
+
"debugLogs": "디버그 로그",
|
|
899
|
+
"backToMainMenu": "메인 메뉴로 돌아가기",
|
|
900
|
+
"invalidChoiceSelectRange": "❌ 선택이 잘못되었습니다. 표시된 범위 내에서 숫자를 선택하세요.",
|
|
901
|
+
"runningDebugTool": "디버그 도구 실행: {displayName}",
|
|
902
|
+
"debugToolNotFound": "디버그 도구 '{toolName}' 찾을 수 없습니다.",
|
|
903
|
+
"recentDebugLogs": "최근 디버그 로그",
|
|
904
|
+
"noDebugLogsFound": "디버그 로그를 찾을 수 없습니다.",
|
|
905
|
+
"logEntry": "로그 항목: {timestamp} - {message}",
|
|
906
|
+
"debugLogsDirectoryNotFound": "디버그 로그 디렉터리를 찾을 수 없습니다."
|
|
907
|
+
},
|
|
908
|
+
"help": {
|
|
909
|
+
"title": "📊 I18NTK 관리 도움말",
|
|
910
|
+
"usage": "사용법: node main/manage/index.js [옵션]",
|
|
911
|
+
"interactiveMode": "💡 사용: node main/manage/index.js --command=<command> 직접 실행을 위해",
|
|
912
|
+
"showHelp": "📖 사용: node main/manage/index.js --사용 가능한 명령에 대한 도움말",
|
|
913
|
+
"availableCommands": "📖 사용 가능한 명령:",
|
|
914
|
+
"initProject": "🚀 새 언어 초기화",
|
|
915
|
+
"analyzeTranslations": "🔍 번역 분석",
|
|
916
|
+
"validateTranslations": "✅ 번역 확인",
|
|
917
|
+
"checkUsage": "📊 키 사용법 확인",
|
|
918
|
+
"initCommand": "init - 새 언어 초기화",
|
|
919
|
+
"analyzeCommand": "분석 - 번역 분석",
|
|
920
|
+
"validateCommand": "검증 - 번역 검증",
|
|
921
|
+
"usageCommand": "사용법 - 키 사용법 확인",
|
|
922
|
+
"sizingCommand": "사이징 - 사이징 분석",
|
|
923
|
+
"completeCommand": "완전한 - 완전한 번역(100% 적용)",
|
|
924
|
+
"summaryCommand": "요약 - 프로젝트 상태 표시",
|
|
925
|
+
"debugCommand": "디버그 - 디버그 번역 문제",
|
|
926
|
+
"scannerCommand": "스캐너 - 키 스캔",
|
|
927
|
+
"translateCommand": "번역 - 로케일 파일 자동 번역",
|
|
928
|
+
"menu": {
|
|
929
|
+
"pressEnterToContinue": "계속하려면 Enter를 누르세요...",
|
|
930
|
+
"title": "🌐 I18NTK 관리 메뉴",
|
|
931
|
+
"description": "국제화 관리를 위한 대화형 메뉴",
|
|
932
|
+
"exit": "🚪 종료"
|
|
933
|
+
},
|
|
934
|
+
"commands": {
|
|
935
|
+
"init": "init - 새 언어 초기화",
|
|
936
|
+
"analyze": "분석 - 번역 분석",
|
|
937
|
+
"validate": "검증 - 번역 검증",
|
|
938
|
+
"usage": "사용법 - 키 사용법 확인",
|
|
939
|
+
"sizing": "사이징 - 사이징 분석",
|
|
940
|
+
"complete": "완전한 - 완전한 번역(100% 적용)",
|
|
941
|
+
"summary": "요약 - 프로젝트 상태 표시",
|
|
942
|
+
"debug": "디버그 - 디버그 번역 문제"
|
|
943
|
+
},
|
|
944
|
+
"options": {
|
|
945
|
+
"sourceDir": "--소스-디렉터리 <dir> 분석할 소스 디렉터리",
|
|
946
|
+
"output": "--산출 <file> 보고서의 출력 파일",
|
|
947
|
+
"verbose": "--verbose, -v 자세한 정보 표시",
|
|
948
|
+
"keepReports": "--keep-reports 기존 보고서 유지",
|
|
949
|
+
"deleteReports": "--delete-reports 기존 보고서 삭제",
|
|
950
|
+
"help": "--help, -h 이 도움말 표시"
|
|
951
|
+
},
|
|
952
|
+
"examples": {
|
|
953
|
+
"title": "예:",
|
|
954
|
+
"example1": "노드 i18ntk-manage.js",
|
|
955
|
+
"example2": "노드 i18ntk-manage.js --source-dir ./locales",
|
|
956
|
+
"example3": "노드 i18ntk-manage.js --출력 요약-report.txt",
|
|
957
|
+
"example4": "노드 i18ntk-manage.js --verbose",
|
|
958
|
+
"example5": "node i18ntk-manage.js --source-dir ./locales --output report.json"
|
|
959
|
+
},
|
|
960
|
+
"features": {
|
|
961
|
+
"initProject": "🚀 새 언어 초기화",
|
|
962
|
+
"analyzeTranslations": "🔍 번역 분석",
|
|
963
|
+
"validateTranslations": "✅ 번역 확인",
|
|
964
|
+
"checkUsage": "📊 키 사용법 확인",
|
|
965
|
+
"completeTranslations": "🎯 완전한 번역(100% 적용)",
|
|
966
|
+
"showSizing": "📏 사이즈 분석",
|
|
967
|
+
"runWorkflow": "🔄 전체 워크플로 실행",
|
|
968
|
+
"showStatus": "📋 프로젝트 상태 표시",
|
|
969
|
+
"deleteReports": "🗑️ 모든 보고서 삭제",
|
|
970
|
+
"changeLanguage": "🌍 UI 언어 변경",
|
|
971
|
+
"settings": "⚙️ 설정",
|
|
972
|
+
"showHelp": "❓ 도움말",
|
|
973
|
+
"debugTools": "🔧 디버그 도구"
|
|
974
|
+
},
|
|
975
|
+
"messages": {
|
|
976
|
+
"selectOption": "옵션을 선택하세요:",
|
|
977
|
+
"invalidOption": "잘못된 옵션입니다. 다시 시도해 주세요.",
|
|
978
|
+
"operationCompleted": "✅ 작업이 성공적으로 완료되었습니다!",
|
|
979
|
+
"pressEnter": "계속하려면 Enter를 누르세요...",
|
|
980
|
+
"goodbye": "👋 안녕!",
|
|
981
|
+
"unknownCommand": "알 수 없는 명령: {command}",
|
|
982
|
+
"nonInteractive": "⚠️ 비대화형 모드가 감지되었습니다. 참고용으로만 표시된 메뉴입니다."
|
|
983
|
+
},
|
|
984
|
+
"i18n_helper": {
|
|
985
|
+
"translation_file_not_found": "번역 파일을 찾을 수 없습니다: {translationFile}",
|
|
986
|
+
"error_loading_translations": "번역 로드 중 오류 발생: {errorMessage}",
|
|
987
|
+
"translation_not_found": "키에 대한 번역을 찾을 수 없습니다: {key}",
|
|
988
|
+
"translation_key_not_string": "번역 키가 문자열로 해석되지 않습니다. {key}",
|
|
989
|
+
"error_reading_locales_directory": "로캘 디렉터리를 읽는 동안 오류가 발생했습니다. {errorMessage}"
|
|
990
|
+
}
|
|
991
|
+
},
|
|
992
|
+
"init": {
|
|
993
|
+
"initializationTitle": "🚀 i18n 관리 툴킷 - 프로젝트 초기화",
|
|
994
|
+
"initializationCancelled": "🚫 사용자가 초기화를 취소했습니다.",
|
|
995
|
+
"sourceDirectoryLabel": "📁 소스 디렉토리: {dir}",
|
|
996
|
+
"requiredTitle": "초기화 필요",
|
|
997
|
+
"requiredBody": "이 명령을 실행하기 전에 이 프로젝트를 초기화해야 합니다.",
|
|
998
|
+
"promptRunNow": "지금 초기화를 실행하시겠습니까? (예/아니요):",
|
|
999
|
+
"sourceLanguageLabel": "🌍 소스 언어: {language}",
|
|
1000
|
+
"detectedI18nFrameworks": "🔍 감지된 i18n 프레임워크: {frameworks}",
|
|
1001
|
+
"pinMustBe4Digits": "🔐 PIN은 4자리여야 합니다.",
|
|
1002
|
+
"existingDirectoriesFound": "📁 기존 번역 디렉토리를 찾았습니다:",
|
|
1003
|
+
"useExistingDirectoryPrompt": "기존 디렉터리를 사용하시겠습니까? (예/아니요)",
|
|
1004
|
+
"selectDirectoryPrompt": "번호를 입력하여 디렉터리를 선택합니다(또는 '새 디렉터리 만들기' 선택).",
|
|
1005
|
+
"enterNewDirectoryName": "새 번역 디렉터리의 이름을 입력하세요.",
|
|
1006
|
+
"createdNewDirectory": "✅ 새 디렉터리 생성: {dir}",
|
|
1007
|
+
"directoryAlreadyExists": "⚠️ 디렉토리가 이미 존재합니다: {dir}",
|
|
1008
|
+
"invalidDirectoryName": "❌ 잘못된 디렉터리 이름이 제공되었습니다.",
|
|
1009
|
+
"usingExistingDirectory": "기존 디렉토리 사용: {dir}",
|
|
1010
|
+
"adminPinSetupOptional": "🔐 관리자 PIN 설정은 선택사항(보안을 위해 권장)",
|
|
1011
|
+
"adminPinSeparator": "------------------------------",
|
|
1012
|
+
"adminPinDescription1": "관리자 PIN: 보안 접속을 위한 4자리 숫자",
|
|
1013
|
+
"adminPinDescription2": "PIN 설정을 건너뛰려면 비워 두세요.",
|
|
1014
|
+
"adminPinDescription3": "PIN을 설정하면 향후 모든 보안 작업에 PIN이 필요합니다.",
|
|
1015
|
+
"adminPinDescription4": "PIN을 안전하게 저장하는 데 사용되는 AES-256-GCM 암호화입니다.",
|
|
1016
|
+
"adminPinSetupPrompt": "관리자 PIN(4자리)을 입력하거나 건너뛰려면 비워 두세요.",
|
|
1017
|
+
"skippingAdminPinSetup": "관리자 PIN 설정을 건너뛰는 중...",
|
|
1018
|
+
"settingUpAdminPin": "🔐 관리자 PIN 설정 중...",
|
|
1019
|
+
"enterAdminPin": "관리자 PIN 입력:",
|
|
1020
|
+
"confirmAdminPin": "관리자 PIN 확인:",
|
|
1021
|
+
"pinMismatch": "PIN이 일치하지 않습니다. 다시 시도해 주세요.",
|
|
1022
|
+
"adminPinSetupSuccess": "🔐 관리자 PIN 설정이 완료되었습니다!",
|
|
1023
|
+
"adminPinSetupFailure": "🔐 관리자 PIN 설정에 실패했습니다. 다시 시도해 주세요.",
|
|
1024
|
+
"adminProtectionEnabled": "🔐 관리자 보호가 활성화되었습니다. 모든 작업에는 PIN 인증이 필요합니다.",
|
|
1025
|
+
"adminProtectionDisabled": "🔐 관리자 보호가 비활성화되었습니다. 이제 PIN 없이 모든 작업을 수행할 수 있습니다.",
|
|
1026
|
+
"autoDetectedI18nDirectory": "자동 감지된 i18n 디렉토리: {directory}",
|
|
1027
|
+
"initializingProject": "⚙️ 프로젝트 구성 초기화 중...",
|
|
1028
|
+
"createdSampleTranslationFile": "✅ 샘플 번역 파일 생성: {file}",
|
|
1029
|
+
"languageSelectionTitle": "🌐 언어 구성",
|
|
1030
|
+
"available": "사용 가능",
|
|
1031
|
+
"defaultLanguages": "📝 기본 언어: {languages}",
|
|
1032
|
+
"enterLanguageCodes": "🎯 대상 언어 코드를 입력하세요(쉼표로 구분, 예: de, es, fr, ru):",
|
|
1033
|
+
"targetLanguages": "🌍 대상 언어",
|
|
1034
|
+
"foundSourceFiles": "📄 발견 {count} 분석할 소스 파일",
|
|
1035
|
+
"processingLanguage": "🔄 처리 언어: {language}",
|
|
1036
|
+
"fileProcessingResult": "✅ 처리됨 {file}: {translated}/{total} 키({percentage}%)",
|
|
1037
|
+
"overallProgress": "📊 전반적인 진행 상황: {translated}/{total} 처리된 키({percentage}%)",
|
|
1038
|
+
"initializationSummaryTitle": "📋 초기화 요약",
|
|
1039
|
+
"languageSummary": "{icon} {name} ({code}): {percentage}% 완벽한",
|
|
1040
|
+
"languageFiles": "📄 파일: {count}",
|
|
1041
|
+
"languageKeys": "🔤 키: {translated}/{total}",
|
|
1042
|
+
"languageMissing": "⚠️ 누락: {count}",
|
|
1043
|
+
"initializationCompletedSuccessfully": "🎉 프로젝트 초기화가 성공적으로 완료되었습니다!",
|
|
1044
|
+
"nextStepsTitle": "🚀 다음 단계",
|
|
1045
|
+
"nextStep1": "1. locales/ 디렉터리에 생성된 번역 파일을 검토합니다.",
|
|
1046
|
+
"nextStep2": "2. 타겟 언어별 번역 추가",
|
|
1047
|
+
"nextStep3": "3. 번역을 검증하려면 'npm run i18ntk'를 다시 실행하세요.",
|
|
1048
|
+
"detectedFrameworks": "✅ 감지된 i18n 프레임워크: {frameworks}",
|
|
1049
|
+
"setup": {
|
|
1050
|
+
"title": "설정",
|
|
1051
|
+
"question": "설정 질문",
|
|
1052
|
+
"opt_single": "단일 파일",
|
|
1053
|
+
"opt_modular": "모듈식",
|
|
1054
|
+
"opt_existing": "기존의",
|
|
1055
|
+
"choice_prompt": "옵션을 선택하세요:",
|
|
1056
|
+
"opt_confirm": "확인하다",
|
|
1057
|
+
"opt_cancel": "취소",
|
|
1058
|
+
"apply_all_prompt": "이 구조를 모든 언어에 적용하시겠습니까? (예/아니요):",
|
|
1059
|
+
"per_language_intro": "언어를 개별적으로 구성하도록 선택했습니다. 사용 가능한 언어는 다음과 같습니다.",
|
|
1060
|
+
"available_languages": "사용 가능한 언어: {languages}",
|
|
1061
|
+
"include_prompt": "포함할 언어 코드를 쉼표로 구분하여 입력하세요(예: 'de,fr,es')."
|
|
1062
|
+
},
|
|
1063
|
+
"warnings": {
|
|
1064
|
+
"noPackageJson": "package.json을 찾을 수 없습니다. i18n 프레임워크를 자동 감지할 수 없습니다."
|
|
1065
|
+
},
|
|
1066
|
+
"errorsPackageJsonRead": "package.json 읽기 오류: {error}",
|
|
1067
|
+
"errorsNoFramework": "i18n 프레임워크가 감지되지 않았습니다. 하나를 설치하거나 수동으로 지정하십시오.",
|
|
1068
|
+
"suggestions": {
|
|
1069
|
+
"noFramework": "i18n 프레임워크가 감지되지 않았습니다. 다음 중 하나를 사용해 보세요.",
|
|
1070
|
+
"installFramework": "프레임워크를 설치하려면 다음을 실행하세요. npm install <package-name>"
|
|
1071
|
+
},
|
|
1072
|
+
"frameworks": {
|
|
1073
|
+
"react": "- i18next 반응(반응-i18next)",
|
|
1074
|
+
"vue": "- Vue i18n (vue-i18n)",
|
|
1075
|
+
"i18next": "- i18next (i18next)",
|
|
1076
|
+
"nuxt": "- Nuxt i18n (@nuxtjs/i18n)",
|
|
1077
|
+
"svelte": "- 스벨트 i18n (svelte-i18n)"
|
|
1078
|
+
},
|
|
1079
|
+
"continueWithoutI18nPrompt": "i18n 프레임워크가 감지되지 않았습니다. 하나도 없이 계속하시겠습니까? (예/아니요):",
|
|
1080
|
+
"detectedI18nFramework": "감지된 i18n 프레임워크: {frameworks}",
|
|
1081
|
+
"existingDirectoryItem": "{index}. {location}",
|
|
1082
|
+
"usingExistingStructure": "기존 구조 사용: {dir}",
|
|
1083
|
+
"creatingSourceDirectory": "소스 디렉터리 생성: {dir}",
|
|
1084
|
+
"creatingSourceLanguageDirectory": "소스 언어 디렉토리 생성: {dir}",
|
|
1085
|
+
"errors": {
|
|
1086
|
+
"errorExecutingCommand": "명령 실행 중 오류 발생: {error}",
|
|
1087
|
+
"sourceDirectoryNotFound": "소스 디렉터리를 찾을 수 없습니다: {dir}",
|
|
1088
|
+
"sourceLanguageDirectoryNotFound": "소스 언어 디렉토리를 찾을 수 없습니다: {dir}",
|
|
1089
|
+
"noJsonFilesInSourceDirectory": "소스 디렉터리에 JSON 파일이 없습니다. {dir}",
|
|
1090
|
+
"invalidFilePathDetected": "잘못된 파일 경로가 감지되었습니다.",
|
|
1091
|
+
"initializationFailed": "초기화 실패: {error}",
|
|
1092
|
+
"noFramework": "i18n 프레임워크가 감지되지 않았습니다. 일반 모드를 계속 진행합니다.",
|
|
1093
|
+
"packageJsonRead": "package.json을 읽는 동안 오류가 발생했습니다."
|
|
1094
|
+
},
|
|
1095
|
+
"processingFile": "처리 {file} ~을 위한 {language}...",
|
|
1096
|
+
"fileAlreadyExistsMerging": "파일 {file} 이미 존재합니다. 새 키를 병합하는 중입니다.",
|
|
1097
|
+
"createdNewFile": "새 파일이 생성되었습니다: {file}",
|
|
1098
|
+
"updatedFile": "업데이트된 파일: {file}",
|
|
1099
|
+
"skippingExcludedFile": "건너뛰는 중 {file} ~을 위한 {language} 제외되었기 때문이죠.",
|
|
1100
|
+
"continuingWithoutAdminPin": "관리자 PIN 설정 없이 계속합니다.",
|
|
1101
|
+
"createdSourceLanguageDirectory": "생성된 소스 언어 디렉토리: {dir}",
|
|
1102
|
+
"errorSettingUpAdminPin": "관리자 PIN을 설정하는 중에 오류가 발생했습니다. {error}",
|
|
1103
|
+
"noTargetLanguagesSpecified": "지정된 타겟 언어가 없습니다.",
|
|
1104
|
+
"translationFilesCreatedWarning": "번역 파일은 자리 표시자를 사용하여 생성되었습니다. 생산에 사용하기 전에 검토하십시오.",
|
|
1105
|
+
"warningCannotReadSourceDir": "경고: 소스 디렉터리를 읽을 수 없습니다. {dir}: {error}",
|
|
1106
|
+
"warningInvalidLanguageCodes": "경고: 잘못된 언어 코드가 무시되었습니다. {languages}",
|
|
1107
|
+
"warningProceedingWithoutFramework": "i18n 프레임워크가 감지되지 않고 진행됩니다.",
|
|
1108
|
+
"backup": {
|
|
1109
|
+
"title": "백업 설정",
|
|
1110
|
+
"description": "백업 재귀 및 저장소 오염을 방지하기 위해 백업은 기본적으로 비활성화되어 있습니다.",
|
|
1111
|
+
"enablePrompt": "자동 백업을 활성화하시겠습니까? (예/아니요):",
|
|
1112
|
+
"keepPrompt": "자동으로 보관해야 하는 백업 수(1~3, 기본값 1):"
|
|
1113
|
+
},
|
|
1114
|
+
"completionSummaryTitle": "완료요약",
|
|
1115
|
+
"completionSummaryBasicTitle": "완료요약(기본)",
|
|
1116
|
+
"totalChanges": "총 변경사항: {count}",
|
|
1117
|
+
"languagesProcessed": "처리되는 언어: {count}",
|
|
1118
|
+
"missingKeysAdded": "누락된 키가 추가되었습니다. {count}",
|
|
1119
|
+
"reportPrompt": "보고서를 생성하시겠습니까? (예/아니요):",
|
|
1120
|
+
"reportGenerated": "생성된 보고서: {reportPath}",
|
|
1121
|
+
"reportFailed": "보고서 생성 실패: {error}",
|
|
1122
|
+
"completionError": "완료 중 오류: {error}",
|
|
1123
|
+
"optimize": {
|
|
1124
|
+
"title": "패키지 크기 최적화",
|
|
1125
|
+
"preview": "로캘 최적화 미리보기 실행 중...",
|
|
1126
|
+
"reduceTip": "필요한 언어만 선택하여 패키지 크기를 줄일 수 있습니다.",
|
|
1127
|
+
"prompt": "지금 대화형 최적화를 실행하시겠습니까? (예/아니요):",
|
|
1128
|
+
"starting": "대화형 로케일 최적화 시작 중...",
|
|
1129
|
+
"completed": "패키지 최적화가 완료되었습니다.",
|
|
1130
|
+
"later": "나중에 다음을 사용하여 로캘 최적화를 실행할 수 있습니다.",
|
|
1131
|
+
"unavailable": "로케일 최적화를 제공할 수 없습니다: {error}"
|
|
1132
|
+
}
|
|
1133
|
+
},
|
|
1134
|
+
"language": {
|
|
1135
|
+
"title": "🌍 언어 변경",
|
|
1136
|
+
"separator": "============================================================",
|
|
1137
|
+
"current": "현재 언어: {language}",
|
|
1138
|
+
"available": "사용 가능한 언어:",
|
|
1139
|
+
"languageOption": "{index}. {displayName}{current}",
|
|
1140
|
+
"backToMainMenu": "메인 메뉴로 돌아가기",
|
|
1141
|
+
"prompt": "언어 선택(0-8):",
|
|
1142
|
+
"cancelled": "언어 변경이 취소되었습니다.",
|
|
1143
|
+
"invalid": "선택이 잘못되었습니다. 다시 시도해 주세요.",
|
|
1144
|
+
"changed": "언어가 다음으로 변경되었습니다. {language}",
|
|
1145
|
+
"changeFailed": "언어를 변경하지 못했습니다: {error}",
|
|
1146
|
+
"pressEnterToContinue": "계속하려면 Enter를 누르세요..."
|
|
1147
|
+
},
|
|
1148
|
+
"maintainLanguagePurity": {
|
|
1149
|
+
"workflow_title": "🚀 언어 순도 유지 관리 워크플로",
|
|
1150
|
+
"step1_title": "📊 1단계: 초기 언어 순도 평가",
|
|
1151
|
+
"step2_title": "🔧 2단계: 언어 불일치 감지 및 자동 수정",
|
|
1152
|
+
"step3_title": "🌐 3단계: 자동 번역 적용",
|
|
1153
|
+
"step4_title": "✅ 4단계: 최종 언어 순도 평가",
|
|
1154
|
+
"workflow_error": "❌ 작업 흐름 오류: {errorMessage}",
|
|
1155
|
+
"running_initial_validation": "초기 언어 순도 유효성 검사 실행 중...",
|
|
1156
|
+
"initial_assessment_complete": "✅ 초기 평가 완료: {count} 발견된 위반 사항",
|
|
1157
|
+
"initial_assessment_warnings": "⚠️ 경고와 함께 초기 평가가 완료되었습니다.",
|
|
1158
|
+
"detecting_fixing_mismatches": "언어 불일치 감지 및 수정...",
|
|
1159
|
+
"detection_complete_applying_fixes": "감지가 완료되었습니다. 자동 수정 적용 중...",
|
|
1160
|
+
"mismatch_fixes_complete": "✅ 언어 불일치 수정 완료: {count} 수정 사항이 적용되었습니다.",
|
|
1161
|
+
"mismatch_fixes_warnings": "⚠️ 경고와 함께 언어 불일치 수정이 완료되었습니다.",
|
|
1162
|
+
"applying_automatic_translations": "자동 번역 적용 중...",
|
|
1163
|
+
"translation_preview_complete": "번역 미리보기가 완료되었습니다. 번역을 적용하는 중..."
|
|
1164
|
+
},
|
|
1165
|
+
"menu": {
|
|
1166
|
+
"title": "🌐 I18NTK 관리 메뉴",
|
|
1167
|
+
"separator": "============================================================",
|
|
1168
|
+
"options": {
|
|
1169
|
+
"init": "🚀 새 언어 초기화",
|
|
1170
|
+
"analyze": "🔍 번역 분석",
|
|
1171
|
+
"validate": "✅ 번역 확인",
|
|
1172
|
+
"usage": "📊 키 사용법 확인",
|
|
1173
|
+
"complete": "🎯 완전한 번역(100% 적용)",
|
|
1174
|
+
"sizing": "📏 사이즈 분석",
|
|
1175
|
+
"fix": "🛠️ 자리 표시자 번역 수정",
|
|
1176
|
+
"scanner": "🔍 i18n 문제 스캔",
|
|
1177
|
+
"translate": "🌐 자동 번역",
|
|
1178
|
+
"workflow": "🔄 전체 워크플로 실행",
|
|
1179
|
+
"status": "📋 프로젝트 상태 표시",
|
|
1180
|
+
"delete": "🗑️ 모든 보고서 삭제",
|
|
1181
|
+
"language": "🌍 UI 언어 변경",
|
|
1182
|
+
"settings": "⚙️ 설정",
|
|
1183
|
+
"help": "❓ 도움말",
|
|
1184
|
+
"debug": "🔧 디버그 도구",
|
|
1185
|
+
"exit": "🚪 종료"
|
|
1186
|
+
},
|
|
1187
|
+
"update": "📦 업데이트 패키지",
|
|
1188
|
+
"goodbye": "👋 안녕!",
|
|
1189
|
+
"invalidChoice": "선택이 잘못되었습니다. 0~15를 선택하세요.",
|
|
1190
|
+
"returning": "메인 메뉴로 돌아가기...",
|
|
1191
|
+
"invalidOption": "잘못된 옵션입니다. 다시 시도해 주세요.",
|
|
1192
|
+
"nonInteractiveModeWarning": "비대화형 모드가 감지되었습니다. 참고용으로만 표시된 메뉴입니다.",
|
|
1193
|
+
"useDirectExecution": "사용: node main/manage/index.js --command=<command> 직접 실행을 위해.",
|
|
1194
|
+
"useHelpForCommands": "사용 가능한 명령은 node main/manage/index.js --help를 사용하세요.",
|
|
1195
|
+
"returnToMainMenu": "Enter를 눌러 주 메뉴로 돌아갑니다.",
|
|
1196
|
+
"pressEnterToContinue": "계속하려면 Enter를 누르세요...",
|
|
1197
|
+
"selectOptionPrompt": "옵션을 선택하세요:",
|
|
1198
|
+
"selectDebugToolPrompt": "디버그 도구를 선택합니다.",
|
|
1199
|
+
"selectLogPrompt": "로그 파일을 선택합니다(1-{count}):",
|
|
1200
|
+
"autoDetectedI18nDirectory": "자동 감지된 i18n 디렉토리: {directory}",
|
|
1201
|
+
"executingCommand": "명령 실행: {command}",
|
|
1202
|
+
"unknownCommand": "알 수 없는 명령: {command}",
|
|
1203
|
+
"languageOption": "{index}. {displayName}{current}",
|
|
1204
|
+
"debugTools": {
|
|
1205
|
+
"1": "로그 파일 분석",
|
|
1206
|
+
"2": "번역키 활용 분석",
|
|
1207
|
+
"3": "번역 완성도 분석",
|
|
1208
|
+
"4": "번역 형식 분석",
|
|
1209
|
+
"5": "번역 유형 분석",
|
|
1210
|
+
"6": "번역 구조 분석"
|
|
1211
|
+
},
|
|
1212
|
+
"native_translations": {
|
|
1213
|
+
"exact_translation_found": "✅ {keyPath}: {value}",
|
|
1214
|
+
"no_exact_translation": "⚠️ '에 대한 정확한 번역이 없습니다.{keyPath}', 유사한 키가 발견되었습니다.",
|
|
1215
|
+
"similar_key": "- {key} ({similarity}% 성냥)",
|
|
1216
|
+
"processing_language_files": "🔄 처리 {count} 언어 파일...",
|
|
1217
|
+
"file_not_found": "⚠️ 파일을 찾을 수 없습니다: {file}",
|
|
1218
|
+
"processing_translations": "🌍 처리 중 {code} 번역...",
|
|
1219
|
+
"backup_created": "📋 백업 생성됨: {filename}",
|
|
1220
|
+
"error_parsing_json": "❌ 구문 분석 중 오류가 발생했습니다. {code}.json: {errorMessage}",
|
|
1221
|
+
"existing_keys_found": "📊 {code}: 설립하다 {count} 기존 키",
|
|
1222
|
+
"error_writing_json": "❌ 작성 중 오류가 발생했습니다. {code}.json: {errorMessage}",
|
|
1223
|
+
"translations_replaced": "📊 {code}: {count} 대체된 번역",
|
|
1224
|
+
"translation_replacement_complete": "✅ 번역 교체 완료!",
|
|
1225
|
+
"total_replacements": "📊 총 교체 횟수: {count}",
|
|
1226
|
+
"dry_run_mode": "⚠️ DRY RUN 모드 - 파일이 수정되지 않았습니다.",
|
|
1227
|
+
"tool_title": "🌍 네이티브 번역 대체기 v1.9.1",
|
|
1228
|
+
"tool_separator": "======================================",
|
|
1229
|
+
"dry_run_warning": "⚠️ DRY RUN 모드에서 실행 - 파일이 수정되지 않습니다.",
|
|
1230
|
+
"error_during_replacement": "❌ 번역 교체 중 오류:"
|
|
1231
|
+
}
|
|
1232
|
+
},
|
|
1233
|
+
"config": {
|
|
1234
|
+
"dirFallbackWarning": "⚠️ 디렉토리 {dir} 찾을 수 없습니다. 사용 {fallback}.",
|
|
1235
|
+
"dirInvalidError": "❌ 잘못된 디렉터리: {dir}"
|
|
1236
|
+
},
|
|
1237
|
+
"operations": {
|
|
1238
|
+
"completed": "✅ 작업이 성공적으로 완료되었습니다!",
|
|
1239
|
+
"deleteReportsTitle": "🗑️ 보고서, 로그 및 캐시 삭제",
|
|
1240
|
+
"scanningForFiles": "🔍 삭제할 파일을 검색하는 중...",
|
|
1241
|
+
"noFilesFoundToDelete": "✅ 삭제할 파일을 찾을 수 없습니다.",
|
|
1242
|
+
"availableDirectories": "📁 사용 가능한 디렉토리:",
|
|
1243
|
+
"allDirectories": "모든 디렉토리",
|
|
1244
|
+
"andMore": "그리고 더...",
|
|
1245
|
+
"cancelOption": "취소",
|
|
1246
|
+
"cancelReportOption": "취소 / 메뉴로 돌아가기",
|
|
1247
|
+
"invalidSelection": "❌ 선택이 잘못되었습니다.",
|
|
1248
|
+
"foundFilesInSelectedDirectories": "📊 발견됨 {count} 선택한 디렉터리의 파일:",
|
|
1249
|
+
"deletionOptions": "🗑️ 삭제 옵션:",
|
|
1250
|
+
"deleteAllFiles": "모든 파일 삭제",
|
|
1251
|
+
"keepLast3Files": "최근 3개 파일 보관(날짜별)",
|
|
1252
|
+
"keepLast5Files": "최근 5개 파일 보관(날짜별)",
|
|
1253
|
+
"noFilesToDelete": "✅ 삭제할 파일이 없습니다.",
|
|
1254
|
+
"filesToDeleteCount": "📋 삭제할 파일: {count}",
|
|
1255
|
+
"filesToKeepCount": "📋 보관할 파일: {count}",
|
|
1256
|
+
"confirmDeletion": "⚠️ 이 파일을 삭제하시겠습니까? (예/아니요):",
|
|
1257
|
+
"deletedFile": "✅ 삭제됨: {filename}",
|
|
1258
|
+
"failedToDeleteFile": "❌ 삭제 실패 {filename}: {error}",
|
|
1259
|
+
"cancelled": "❌ 작업이 취소되었습니다.",
|
|
1260
|
+
"init": {
|
|
1261
|
+
"title": "🚀 새 언어 초기화"
|
|
1262
|
+
},
|
|
1263
|
+
"usage": {
|
|
1264
|
+
"title": "📊 키 사용법 확인",
|
|
1265
|
+
"noUsedKeysHint": "번역을 찾았지만 소스에 사용법이 없습니다. --source-dir 및 TranslationPatterns를 확인하세요."
|
|
1266
|
+
},
|
|
1267
|
+
"analyze": {
|
|
1268
|
+
"title": "🔍 번역 분석"
|
|
1269
|
+
},
|
|
1270
|
+
"validate": {
|
|
1271
|
+
"title": "✅ 번역 확인"
|
|
1272
|
+
},
|
|
1273
|
+
"settings": {
|
|
1274
|
+
"title": "⚙️ 설정 관리",
|
|
1275
|
+
"separator": "============================================================"
|
|
1276
|
+
},
|
|
1277
|
+
"complete": {
|
|
1278
|
+
"deletingOldReport": "🗑️ 새로운 분석을 위해 이전 사용 보고서 삭제",
|
|
1279
|
+
"generatingFreshAnalysis": "🔄 새로운 사용량 분석 생성 중...",
|
|
1280
|
+
"couldNotGenerate": "⚠️ 사용량 분석을 생성할 수 없습니다. 일반적인 누락 키 사용.",
|
|
1281
|
+
"reportNotFound": "⚠️ 사용 보고서를 찾을 수 없습니다. 새로운 분석을 생성하는 중...",
|
|
1282
|
+
"foundMissingKeys": "🔍 발견됨 {count} 사용량 분석에서 누락된 키",
|
|
1283
|
+
"couldNotParse": "⚠️ 사용 보고서를 구문 분석할 수 없습니다. 일반적인 누락 키 사용.",
|
|
1284
|
+
"title": "🎯 번역 완료 중",
|
|
1285
|
+
"separator": "============================================================",
|
|
1286
|
+
"sourceDir": "📁 소스 디렉토리: {sourceDir}",
|
|
1287
|
+
"sourceLanguage": "🔤 소스 언어: {sourceLanguage}",
|
|
1288
|
+
"dryRunMode": "🧪 DRY RUN 모드 - 파일이 수정되지 않습니다.",
|
|
1289
|
+
"languages": "🎯 대상 언어: {languages}",
|
|
1290
|
+
"addingMissingKeys": "➕ 번역 파일에 누락된 키 추가 중...",
|
|
1291
|
+
"processing": "🔄 처리 {language}...",
|
|
1292
|
+
"addedKeys": "✅ 추가됨 {count} 열쇠",
|
|
1293
|
+
"changeDetails": "📝 {file}: {key}",
|
|
1294
|
+
"noChangesNeeded": "✅ 변경이 필요하지 않습니다 {language}",
|
|
1295
|
+
"summaryTitle": "📊 완료 요약",
|
|
1296
|
+
"totalChanges": "📝 총 변경 사항: {totalChanges}",
|
|
1297
|
+
"languagesProcessed": "🌐 처리되는 언어: {languagesProcessed}",
|
|
1298
|
+
"missingKeysAdded": "➕ 누락된 키가 추가되었습니다: {missingKeysAdded}",
|
|
1299
|
+
"nextStepsTitle": "📋 NEXT STEPS",
|
|
1300
|
+
"nextStep1": "1. 사용량 분석 실행:",
|
|
1301
|
+
"nextStep2": "2. 번역 검증:",
|
|
1302
|
+
"nextStep3": "3. 완전성 분석:",
|
|
1303
|
+
"allKeysAvailable": "🎉 이제 모든 번역 키를 사용할 수 있습니다!",
|
|
1304
|
+
"runWithoutDryRun": "💡 변경 사항을 적용하려면 --dry-run 없이 실행하세요.",
|
|
1305
|
+
"pressEnterToContinue": "계속하려면 Enter를 누르세요..."
|
|
1306
|
+
},
|
|
1307
|
+
"updatePackage": {
|
|
1308
|
+
"title": "📦 i18n-toolkit 패키지 업데이트",
|
|
1309
|
+
"description": "그러면 i18n-toolkit 패키지가 npm에서 사용 가능한 최신 버전으로 업데이트됩니다.",
|
|
1310
|
+
"command": "실행 명령",
|
|
1311
|
+
"confirm": "업데이트를 계속하시겠습니까? (예/아니요):",
|
|
1312
|
+
"updating": "패키지 업데이트 중... 잠시 시간이 걸릴 수 있습니다.",
|
|
1313
|
+
"success": "✅ i18n-toolkit이 성공적으로 업데이트되었습니다!",
|
|
1314
|
+
"error": "❌ i18n-toolkit 업데이트 실패",
|
|
1315
|
+
"cancelled": "❌ 업데이트가 취소되었습니다."
|
|
1316
|
+
}
|
|
1317
|
+
},
|
|
1318
|
+
"security": {
|
|
1319
|
+
"pathValidationFailed": "경로_검증_실패",
|
|
1320
|
+
"invalidInputType": "잘못된 입력_유형",
|
|
1321
|
+
"pathTraversalAttempt": "path_traversal_attempt",
|
|
1322
|
+
"pathValidated": "✅ 경로가 성공적으로 확인되었습니다",
|
|
1323
|
+
"pathValidationError": "경로_검증_오류",
|
|
1324
|
+
"fileTooLarge": "보안: 파일이 너무 큼: {filePath}",
|
|
1325
|
+
"fileReadError": "보안: 파일 읽기 오류: {errorMessage}",
|
|
1326
|
+
"contentTooLargeForFile": "보안: 콘텐츠가 파일에 비해 너무 큽니다. {filePath}",
|
|
1327
|
+
"fileWriteError": "보안: 파일 쓰기 오류: {errorMessage}",
|
|
1328
|
+
"jsonStringTooLarge": "보안: JSON 문자열이 너무 큼",
|
|
1329
|
+
"jsonParseError": "보안: JSON 구문 분석 오류: {errorMessage}",
|
|
1330
|
+
"inputContainsDisallowedCharacters": "보안: 입력에 허용되지 않는 문자가 포함되어 있습니다.",
|
|
1331
|
+
"unknownCommandArgument": "보안: 알 수 없는 명령 인수: {key}",
|
|
1332
|
+
"unknown_command_argument": "보안: 알 수 없는 명령 인수: {key}",
|
|
1333
|
+
"unknownConfigKey": "보안: 알 수 없는 구성 키: {key}",
|
|
1334
|
+
"unknown_config_key": "보안: 알 수 없는 구성 키: {key}",
|
|
1335
|
+
"securityAlert": "[보안 경고] {timestamp}: {event}",
|
|
1336
|
+
"contentTooLarge": "보안: 콘텐츠가 파일에 비해 너무 큽니다. {validatedPath}",
|
|
1337
|
+
"inputDisallowedCharacters": "보안: 입력에 허용되지 않는 문자가 포함되어 있습니다.",
|
|
1338
|
+
"unknownCommandArg": "알 수 없는 명령 인수",
|
|
1339
|
+
"logMessage": "[보안 {level}] {timestamp}: {event}",
|
|
1340
|
+
"alertMessage": "[보안 경고] {timestamp}: {event}",
|
|
1341
|
+
"securityWarning": "[보안 경고] {timestamp}: {event}",
|
|
1342
|
+
"json_parse_error": "보안: JSON 구문 분석 오류: {errorMessage}",
|
|
1343
|
+
"file_too_large": "파일이 너무 큼",
|
|
1344
|
+
"file_read_error": "파일 읽기 오류",
|
|
1345
|
+
"content_too_large_for_file": "파일에 비해 콘텐츠가 너무 큼",
|
|
1346
|
+
"file_write_error": "파일 쓰기 오류",
|
|
1347
|
+
"json_string_too_large": "JSON 문자열이 너무 큼",
|
|
1348
|
+
"recursion_detected": "재귀가 감지되었습니다. {operation}",
|
|
1349
|
+
"operation_timeout": "작업 시간 초과: {operation}",
|
|
1350
|
+
"operation_error": "작업 오류 {operation}: {error}",
|
|
1351
|
+
"directory_read_error": "디렉터리 읽기 오류: {errorMessage}",
|
|
1352
|
+
"security_alert": "보안 경고"
|
|
1353
|
+
},
|
|
1354
|
+
"settings-cli": {
|
|
1355
|
+
"settings": {
|
|
1356
|
+
"mainMenu": {
|
|
1357
|
+
"title": "메인 메뉴:",
|
|
1358
|
+
"uiSettings": "UI 설정",
|
|
1359
|
+
"uiSettingsDesc": "언어, 테마, 인터페이스 옵션",
|
|
1360
|
+
"directorySettings": "디렉토리 설정",
|
|
1361
|
+
"directorySettingsDesc": "소스 및 출력 디렉터리 경로",
|
|
1362
|
+
"scriptDirectorySettings": "스크립트 디렉토리 설정",
|
|
1363
|
+
"scriptDirectorySettingsDesc": "개별 스크립트 작업을 위한 디렉터리 경로",
|
|
1364
|
+
"processingSettings": "처리 설정",
|
|
1365
|
+
"processingSettingsDesc": "배치 크기, 동시성 및 성능",
|
|
1366
|
+
"advancedSettings": "고급 설정",
|
|
1367
|
+
"advancedSettingsDesc": "검증, 로깅 및 전문가 옵션",
|
|
1368
|
+
"viewAllSettings": "모든 설정 보기",
|
|
1369
|
+
"viewAllSettingsDesc": "현재 구성 표시",
|
|
1370
|
+
"importExport": "가져오기/내보내기",
|
|
1371
|
+
"importExportDesc": "백업 및 복원 설정",
|
|
1372
|
+
"resetToDefaults": "기본값으로 재설정",
|
|
1373
|
+
"resetToDefaultsDesc": "공장 설정 복원",
|
|
1374
|
+
"reportBug": "버그 신고",
|
|
1375
|
+
"reportBugDesc": "GitHub에 문제 보고서 제출",
|
|
1376
|
+
"saveChanges": "변경 사항 저장",
|
|
1377
|
+
"saveChangesDesc": "현재 설정을 파일에 저장",
|
|
1378
|
+
"updatePackage": "업데이트 패키지",
|
|
1379
|
+
"updatePackageDesc": "npm을 통해 i18n-toolkit 패키지 업데이트",
|
|
1380
|
+
"help": "돕다",
|
|
1381
|
+
"helpDesc": "자세한 도움말 정보 표시",
|
|
1382
|
+
"quit": "그만두다",
|
|
1383
|
+
"quitDesc": "설정 종료(필요한 경우 저장 프롬프트 포함)",
|
|
1384
|
+
"unsavedChangesWarning": "⚠️ 저장되지 않은 변경사항이 있습니다.",
|
|
1385
|
+
"saveChangesBeforeQuit": "종료하기 전에 변경사항을 저장하시겠습니까? (예/아니요):",
|
|
1386
|
+
"selectOption": "옵션을 선택하세요:",
|
|
1387
|
+
"goodbyeMessage": "i18n 설정 관리자를 이용해 주셔서 감사합니다!"
|
|
1388
|
+
},
|
|
1389
|
+
"goodbyeMessage": "i18n 설정 관리자를 이용해 주셔서 감사합니다!",
|
|
1390
|
+
"relativePathHint": "이 디렉터리의 상대 경로를 사용하세요(예: ./src/i18n/locales).",
|
|
1391
|
+
"currentDirectory": "현재 프로젝트 디렉토리"
|
|
1392
|
+
},
|
|
1393
|
+
"settings_manager": {
|
|
1394
|
+
"error_loading_settings": "❌ 설정 로드 오류:",
|
|
1395
|
+
"error_saving_settings": "❌ 설정 저장 오류:",
|
|
1396
|
+
"error_setting_value": "❌ 오류 설정 값:",
|
|
1397
|
+
"missing_required_setting": "❌ 필수 설정 누락: {prop}",
|
|
1398
|
+
"invalid_language": "❌ 잘못된 언어: {language}",
|
|
1399
|
+
"invalid_source_language": "❌ 잘못된 출발 언어: {sourceLanguage}",
|
|
1400
|
+
"default_languages_must_be_array": "❌ defaultLanguages는 배열이어야 합니다.",
|
|
1401
|
+
"invalid_date_format": "❌ 잘못된 날짜 형식: {dateFormat}. 유효한 형식: {validFormats}",
|
|
1402
|
+
"invalid_time_format": "❌ 잘못된 시간 형식: {timeFormat}. 유효한 형식: {validFormats}",
|
|
1403
|
+
"notifications_types_must_be_object": "❌ 알림.유형은 객체여야 합니다.",
|
|
1404
|
+
"exclude_files_must_be_array": "❌ 제외파일은 배열이어야 합니다.",
|
|
1405
|
+
"exclude_dirs_must_be_array": "❌ 제외Dirs는 배열이어야 합니다.",
|
|
1406
|
+
"include_extensions_must_be_array": "❌ includeExtensions는 배열이어야 합니다.",
|
|
1407
|
+
"invalid_batch_size": "❌ 배치 크기가 잘못되었습니다. 양수여야 합니다.",
|
|
1408
|
+
"invalid_max_concurrent_files": "❌ 최대 동시 파일 수가 잘못되었습니다. 양수여야 합니다.",
|
|
1409
|
+
"invalid_sizing_threshold": "❌ 크기 조정 임계값이 잘못되었습니다. 양수여야 합니다.",
|
|
1410
|
+
"invalid_timeout": "❌ 시간 초과가 잘못되었습니다. 1000ms 이상이어야 합니다.",
|
|
1411
|
+
"invalid_sizing_format": "❌ 잘못된 크기 형식: {sizingFormat}. 유효한 형식: {validFormats}",
|
|
1412
|
+
"error_validating_settings": "❌ 설정 확인 오류:",
|
|
1413
|
+
"backup_created": "📋 백업 생성됨: {backupPath}",
|
|
1414
|
+
"error_creating_backup": "❌ 백업 생성 오류:",
|
|
1415
|
+
"language_not_supported": "언어 '{language}'는 지원되지 않습니다. 사용 가능: {availableLanguages}",
|
|
1416
|
+
"ui_language_set": "🌍 UI 언어 설정: {language}"
|
|
1417
|
+
}
|
|
1418
|
+
},
|
|
1419
|
+
"settings": {
|
|
1420
|
+
"title": "⚙️ 설정 관리",
|
|
1421
|
+
"separator": "============================================================",
|
|
1422
|
+
"goodbyeMessage": "i18ntk 설정 관리자를 이용해 주셔서 감사합니다!",
|
|
1423
|
+
"relativePathHint": "이 디렉터리의 상대 경로를 사용하세요(예: ./src/i18n/locales).",
|
|
1424
|
+
"currentDirectory": "현재 프로젝트 디렉토리",
|
|
1425
|
+
"startingSettings": "시작 설정:",
|
|
1426
|
+
"pin": "PIN:",
|
|
1427
|
+
"reportBug": {
|
|
1428
|
+
"title": "버그 신고",
|
|
1429
|
+
"description": "발생한 문제나 버그를 보고하세요.",
|
|
1430
|
+
"guidance": "문제를 효과적으로 보고하려면:",
|
|
1431
|
+
"checkLogs": "1. 프로젝트 디렉터리에서 디버그 로그를 확인하세요.",
|
|
1432
|
+
"documentIssue": "2. 재현 단계와 함께 문제를 문서화합니다.",
|
|
1433
|
+
"contactSupport": "3. 시스템 관리자나 지원팀에 문의하세요.",
|
|
1434
|
+
"completed": "버그 보고 지침이 표시됨",
|
|
1435
|
+
"instructions": "버그를 신고하려면 위의 지침을 따르세요."
|
|
1436
|
+
},
|
|
1437
|
+
"mainMenu": {
|
|
1438
|
+
"title": "메인 메뉴:",
|
|
1439
|
+
"uiSettings": "UI 설정",
|
|
1440
|
+
"uiSettingsDesc": "언어, 테마, 인터페이스 옵션",
|
|
1441
|
+
"directorySettings": "디렉토리 설정",
|
|
1442
|
+
"directorySettingsDesc": "소스 및 출력 디렉터리 경로",
|
|
1443
|
+
"processingSettings": "처리 설정",
|
|
1444
|
+
"processingSettingsDesc": "배치 크기, 동시성 및 성능",
|
|
1445
|
+
"advancedSettings": "고급 설정",
|
|
1446
|
+
"advancedSettingsDesc": "검증, 로깅 및 전문가 옵션",
|
|
1447
|
+
"viewAllSettings": "모든 설정 보기",
|
|
1448
|
+
"viewAllSettingsDesc": "현재 구성 표시",
|
|
1449
|
+
"importExport": "가져오기/내보내기",
|
|
1450
|
+
"updatePackage": "업데이트 패키지",
|
|
1451
|
+
"updatePackageDesc": "npm을 통해 i18n-toolkit 패키지 업데이트",
|
|
1452
|
+
"importExportDesc": "백업 및 복원 설정",
|
|
1453
|
+
"resetToDefaults": "기본값으로 재설정",
|
|
1454
|
+
"resetToDefaultsDesc": "공장 설정 복원",
|
|
1455
|
+
"reportBug": "버그 신고",
|
|
1456
|
+
"reportBugDesc": "GitHub에 문제 보고서 제출",
|
|
1457
|
+
"saveChanges": "변경 사항 저장",
|
|
1458
|
+
"saveChangesDesc": "현재 설정을 파일에 저장",
|
|
1459
|
+
"help": "돕다",
|
|
1460
|
+
"helpDesc": "자세한 도움말 정보 표시",
|
|
1461
|
+
"quit": "그만두다",
|
|
1462
|
+
"quitDesc": "설정 종료(필요한 경우 저장 프롬프트 포함)",
|
|
1463
|
+
"unsavedChangesWarning": "⚠️ 저장되지 않은 변경사항이 있습니다.",
|
|
1464
|
+
"saveChangesBeforeQuit": "종료하기 전에 변경사항을 저장하시겠습니까? (예/아니요):",
|
|
1465
|
+
"selectOption": "옵션을 선택하세요:",
|
|
1466
|
+
"goodbyeMessage": "i18n 설정 관리자를 이용해 주셔서 감사합니다!",
|
|
1467
|
+
"selectSettingPrompt": "편집할 설정을 선택하세요(또는 돌아가려면 'b').",
|
|
1468
|
+
"enterNewValue": "새 값 입력:",
|
|
1469
|
+
"updatedSuccessfully": "{setting} 성공적으로 업데이트되었습니다!",
|
|
1470
|
+
"scriptDirectorySettings": "스크립트 디렉토리 설정",
|
|
1471
|
+
"scriptDirectoryDesc": "각 스크립트에 대한 사용자 정의 디렉터리 지정",
|
|
1472
|
+
"scriptDirectorySettingsDesc": "각 스크립트에 대해 사용자 정의 디렉터리를 설정할 수 있습니다. 설정하지 않으면 전역 설정이 사용됩니다.",
|
|
1473
|
+
"currentDirectory": "현재 프로젝트 디렉토리",
|
|
1474
|
+
"securitySettings": "보안 설정",
|
|
1475
|
+
"securitySettingsDesc": "관리자 PIN 및 기타 보안 옵션",
|
|
1476
|
+
"backupSettings": "백업 설정",
|
|
1477
|
+
"backupSettingsDesc": "구성 설정 백업 및 복원",
|
|
1478
|
+
"autoTranslate": "자동 번역",
|
|
1479
|
+
"autoTranslateDesc": "자리 표시자 처리, 동시성, 일괄 처리 및 보고서 조정"
|
|
1480
|
+
},
|
|
1481
|
+
"updatePackage": {
|
|
1482
|
+
"title": "업데이트 패키지",
|
|
1483
|
+
"description": "npm을 통해 i18n-toolkit 패키지 업데이트",
|
|
1484
|
+
"command": "npm 업데이트 i18ntk -g",
|
|
1485
|
+
"success": "업데이트가 성공적으로 완료되었습니다.",
|
|
1486
|
+
"failed": "업데이트에 실패했습니다.",
|
|
1487
|
+
"prompt": "지금 패키지를 업데이트하시겠습니까? (예/아니요):",
|
|
1488
|
+
"promptDesc": "참고: 이렇게 하면 i18ntk 패키지가 최신 버전으로 업데이트됩니다.",
|
|
1489
|
+
"confirm": "와이",
|
|
1490
|
+
"cancelled": "업데이트가 취소되었습니다.",
|
|
1491
|
+
"error": "패키지를 업데이트하지 못했습니다.",
|
|
1492
|
+
"updating": "패키지 업데이트 중..."
|
|
1493
|
+
},
|
|
1494
|
+
"admin": {
|
|
1495
|
+
"selectOption": "옵션 선택:",
|
|
1496
|
+
"updateSuccess": "관리자 PIN이 업데이트되었습니다!",
|
|
1497
|
+
"updateFailed": "관리자 PIN을 업데이트하지 못했습니다.",
|
|
1498
|
+
"protectionRemoved": "관리자 PIN 보호가 제거되었습니다.",
|
|
1499
|
+
"configSuccess": "관리자 PIN이 성공적으로 구성되었습니다!",
|
|
1500
|
+
"configFailed": "관리자 PIN을 구성하지 못했습니다.",
|
|
1501
|
+
"setupPinPrompt": "관리자 PIN을 설정하시겠습니까? (예/아니요):",
|
|
1502
|
+
"pinUpdatedSuccess": "관리자 PIN이 업데이트되었습니다!",
|
|
1503
|
+
"pinUpdatedFailed": "관리자 PIN을 업데이트하지 못했습니다.",
|
|
1504
|
+
"pinRemoved": "관리자 PIN 보호가 제거되었습니다.",
|
|
1505
|
+
"pinConfiguredSuccess": "관리자 PIN이 성공적으로 구성되었습니다!",
|
|
1506
|
+
"pinConfiguredFailed": "관리자 PIN을 구성하지 못했습니다.",
|
|
1507
|
+
"accessDenied": "❌ 접근이 거부되었습니다. 메뉴로 돌아갑니다.",
|
|
1508
|
+
"setupPin": "🔐 관리자 PIN 설정 중...",
|
|
1509
|
+
"setupFailed": "❌ 관리자 PIN 설정에 실패했습니다. 설정이 변경되지 않았습니다.",
|
|
1510
|
+
"pinConfigured": "😀 현재 관리자 PIN이 구성되어 있습니다.",
|
|
1511
|
+
"options": "옵션:",
|
|
1512
|
+
"changePin": "1) 기존 PIN 변경",
|
|
1513
|
+
"removePin": "2) PIN 보호 제거",
|
|
1514
|
+
"cancel": "3) 취소",
|
|
1515
|
+
"verifyCurrentPin": "🔐 먼저 현재 PIN을 확인하세요.",
|
|
1516
|
+
"settingNewPin": "🔄 새 PIN을 설정하는 중...",
|
|
1517
|
+
"verifyToRemove": "🔐 현재 PIN을 확인하여 보호 기능을 제거하세요.",
|
|
1518
|
+
"noPinConfigured": "🔓 현재 관리자 PIN이 구성되어 있지 않습니다.",
|
|
1519
|
+
"pinBenefits": "관리자 PIN을 설정하면 다음에 대한 보안이 추가됩니다.",
|
|
1520
|
+
"benefitSecurity": "• 보안 설정 변경",
|
|
1521
|
+
"benefitAdvanced": "• 고급 구성 수정",
|
|
1522
|
+
"benefitDebug": "• 디버그 도구에 액세스",
|
|
1523
|
+
"benefitReset": "• 설정 재설정",
|
|
1524
|
+
"setupCancelled": "⏭️ 관리자 PIN 설정이 취소되었습니다.",
|
|
1525
|
+
"operationCancelled": "❌ 작업이 취소되었습니다.",
|
|
1526
|
+
"startingSettings": "🎛️ 설정 CLI 시작 중...",
|
|
1527
|
+
"authRequired": "🔒 관리자 인증이 필요한 경우: {label}",
|
|
1528
|
+
"pinSetupTitle": "관리자 PIN 설정",
|
|
1529
|
+
"browserOpenFailed": "브라우저를 자동으로 열 수 없습니다.",
|
|
1530
|
+
"manualVisit": "직접 방문하십시오: {url}",
|
|
1531
|
+
"browserOpened": "✅ 브라우저가 성공적으로 열렸습니다!"
|
|
1532
|
+
},
|
|
1533
|
+
"importExport": {
|
|
1534
|
+
"title": "가져오기/내보내기 설정",
|
|
1535
|
+
"export": "내보내기 설정",
|
|
1536
|
+
"import": "가져오기 설정",
|
|
1537
|
+
"backup": "백업 생성",
|
|
1538
|
+
"enterFilename": "파일 이름을 입력하세요(또는 기본값으로 Enter를 누르세요):",
|
|
1539
|
+
"exportSuccess": "다음으로 내보낸 설정 {file}",
|
|
1540
|
+
"exportFailed": "설정을 내보내지 못했습니다. {error}",
|
|
1541
|
+
"importFilename": "가져올 파일 이름 입력:",
|
|
1542
|
+
"fileNotFound": "파일을 찾을 수 없습니다.",
|
|
1543
|
+
"invalidFormat": "잘못된 설정 파일 형식입니다.",
|
|
1544
|
+
"confirmImport": "현재 설정이 모두 대체됩니다. 계속하다? (예/아니요):",
|
|
1545
|
+
"importSuccess": "설정을 성공적으로 가져왔습니다.",
|
|
1546
|
+
"importFailed": "설정을 가져오지 못했습니다: {error}",
|
|
1547
|
+
"backupSuccess": "백업 생성됨: {file}",
|
|
1548
|
+
"backupFailed": "백업을 생성하지 못했습니다: {error}",
|
|
1549
|
+
"exportFilenamePrompt": "내보내기 파일 이름 입력:",
|
|
1550
|
+
"importConfirm": "이 설정 파일을 가져오시겠습니까? (예/아니요):",
|
|
1551
|
+
"importFilenamePrompt": "가져오기 파일 이름 입력:",
|
|
1552
|
+
"manageBackups": "백업 관리",
|
|
1553
|
+
"restore": "설정 복원"
|
|
1554
|
+
},
|
|
1555
|
+
"selectOption": "옵션을 선택하세요:",
|
|
1556
|
+
"resetToDefaultsTitle": "설정을 기본값으로 재설정",
|
|
1557
|
+
"resetWarning1": "⚠️ 이렇게 하면 모든 설정이 기본값으로 재설정됩니다.",
|
|
1558
|
+
"resetWarning2": "이 작업은 취소할 수 없습니다.",
|
|
1559
|
+
"resetConfirm": "계속하시겠습니까? (예/아니요):",
|
|
1560
|
+
"resetSuccess": "설정이 기본값으로 재설정되었습니다.",
|
|
1561
|
+
"resetFailed": "설정을 재설정하지 못했습니다: {error}",
|
|
1562
|
+
"resetDone": "설정이 기본값으로 재설정되었습니다.",
|
|
1563
|
+
"resetScriptDirsDone": "스크립트 디렉터리가 시스템 기본값으로 재설정되었습니다.",
|
|
1564
|
+
"saveSuccess": "설정이 성공적으로 저장되었습니다.",
|
|
1565
|
+
"saveFailed": "설정을 저장하지 못했습니다.",
|
|
1566
|
+
"saveError": "잘못된 설정이 제공되었습니다.",
|
|
1567
|
+
"pressEnter": "계속하려면 Enter를 누르세요...",
|
|
1568
|
+
"initFailed": "설정을 초기화하지 못했습니다: {error}",
|
|
1569
|
+
"invalidValueFormat": "값 형식이 잘못되었습니다.",
|
|
1570
|
+
"help": {
|
|
1571
|
+
"title": "설정 도움말",
|
|
1572
|
+
"navigationTitle": "항해",
|
|
1573
|
+
"navigation1": "1. 일반 설정 - UI 언어, 테마, 기본 환경 설정 구성",
|
|
1574
|
+
"navigation2": "2. 디렉터리 설정 - 번역 파일의 소스 및 출력 디렉터리 설정",
|
|
1575
|
+
"navigation3": "3. 처리 설정 - 배치 크기, 동시성 및 성능 옵션 구성",
|
|
1576
|
+
"navigation4": "4. 고급 설정 - 액세스 확인, 로깅 및 전문가 구성 옵션",
|
|
1577
|
+
"categoriesTitle": "설정 카테고리",
|
|
1578
|
+
"categoryUI": "• UI 설정: 인터페이스 언어, 색상 테마, 디스플레이 기본 설정",
|
|
1579
|
+
"categoryDirectory": "• 디렉터리 설정: 소스 파일 위치 및 출력 보고서 디렉터리",
|
|
1580
|
+
"categoryProcessing": "• 처리 설정: 일괄 처리, 파일 제한, 성능 튜닝",
|
|
1581
|
+
"categoryAdvanced": "• 고급 설정: 디버그 모드, 감사 로깅 및 보안 옵션",
|
|
1582
|
+
"envVarsTitle": "환경 변수",
|
|
1583
|
+
"envVar1": "• I18N_SOURCE_DIR: 기본 소스 디렉터리 경로 재정의",
|
|
1584
|
+
"envVar2": "• I18N_OUTPUT_DIR: 기본 출력 디렉터리 경로 재정의",
|
|
1585
|
+
"envVar3": "• I18N_DEBUG: 디버그 모드 활성화(true/false)",
|
|
1586
|
+
"cliUsageTitle": "CLI 사용 예",
|
|
1587
|
+
"cliUsage1": "• npx i18ntk --settings: 대화형 설정 메뉴 열기",
|
|
1588
|
+
"cliUsage2": "• npx i18ntk --settings --lang de: 독일어로 설정 열기",
|
|
1589
|
+
"cliUsage3": "• npx i18ntk --reset-settings: 모든 설정을 기본값으로 재설정합니다.",
|
|
1590
|
+
"navigation": "옵션을 선택하려면 숫자 키를 사용하고, 뒤로 돌아가려면 'b'를 사용하세요.",
|
|
1591
|
+
"editing": "메시지가 나타나면 새 값을 입력하거나 Enter를 눌러 현재 값을 유지하세요.",
|
|
1592
|
+
"saving": "종료하기 전에 's'를 사용하여 변경 사항을 저장하세요.",
|
|
1593
|
+
"reset": "옵션 7을 사용하여 모든 설정을 기본값으로 재설정"
|
|
1594
|
+
},
|
|
1595
|
+
"categories": {
|
|
1596
|
+
"uiSettings": "UI 설정",
|
|
1597
|
+
"directorySettings": "디렉토리 설정",
|
|
1598
|
+
"processingSettings": "처리 설정",
|
|
1599
|
+
"advancedSettings": "고급 설정",
|
|
1600
|
+
"scriptDirectorySettings": "스크립트 디렉토리 설정",
|
|
1601
|
+
"securitySettings": "보안 설정",
|
|
1602
|
+
"autoTranslate": "자동 번역 설정"
|
|
1603
|
+
},
|
|
1604
|
+
"security": {
|
|
1605
|
+
"title": "🔐 보안 설정",
|
|
1606
|
+
"description": "관리자 PIN 보호 및 보안 옵션 구성",
|
|
1607
|
+
"currentPin": "현재 PIN:",
|
|
1608
|
+
"pinConfigured": "✅ 구성됨",
|
|
1609
|
+
"pinNotConfigured": "❌ 구성되지 않음",
|
|
1610
|
+
"pinDisplay": "핀 디스플레이:",
|
|
1611
|
+
"menu": {
|
|
1612
|
+
"enableDisable": "1) 관리자 PIN 활성화/비활성화",
|
|
1613
|
+
"setupChange": "2) 관리자 PIN 설정/변경",
|
|
1614
|
+
"sessionTimeout": "3) 세션 시간 초과",
|
|
1615
|
+
"maxAttempts": "4) 최대 시도 실패 횟수",
|
|
1616
|
+
"lockoutDuration": "5) 잠금 기간",
|
|
1617
|
+
"back": "b) 메인 메뉴로 돌아가기"
|
|
1618
|
+
},
|
|
1619
|
+
"prompts": {
|
|
1620
|
+
"enablePin": "관리자 PIN 보호를 활성화하시겠습니까? (예/아니요):",
|
|
1621
|
+
"disablePin": "관리자 PIN 보호를 비활성화하시겠습니까? (예/아니요):",
|
|
1622
|
+
"enterTimeout": "세션 시간 초과(분)를 입력하세요.",
|
|
1623
|
+
"enterMaxAttempts": "최대 실패 횟수를 입력하세요:",
|
|
1624
|
+
"enterLockoutDuration": "잠금 기간(분)을 입력하세요."
|
|
1625
|
+
},
|
|
1626
|
+
"messages": {
|
|
1627
|
+
"pinEnabled": "관리자 PIN 보호가 활성화되었습니다.",
|
|
1628
|
+
"pinDisabled": "관리자 PIN 보호가 비활성화되었습니다.",
|
|
1629
|
+
"timeoutUpdated": "세션 시간 초과가 다음으로 업데이트되었습니다. {minutes} 분",
|
|
1630
|
+
"maxAttemptsUpdated": "최대 실패 시도 횟수가 다음으로 업데이트되었습니다. {attempts}",
|
|
1631
|
+
"lockoutDurationUpdated": "잠금 기간이 다음으로 업데이트되었습니다. {minutes} 분"
|
|
1632
|
+
}
|
|
1633
|
+
},
|
|
1634
|
+
"fields": {
|
|
1635
|
+
"backup.enabled": {
|
|
1636
|
+
"label": "Enable Backup",
|
|
1637
|
+
"description": "Enable automatic backup of settings",
|
|
1638
|
+
"help": "Enable/disable backup feature"
|
|
1639
|
+
},
|
|
1640
|
+
"backup.singleFileMode": {
|
|
1641
|
+
"label": "Single File Mode",
|
|
1642
|
+
"description": "Use single file for backups",
|
|
1643
|
+
"help": "Backup settings in a single file"
|
|
1644
|
+
},
|
|
1645
|
+
"backup.singleBackupFile": {
|
|
1646
|
+
"label": "Backup File Path",
|
|
1647
|
+
"description": "Path to the backup file",
|
|
1648
|
+
"help": "Path to the single backup file"
|
|
1649
|
+
},
|
|
1650
|
+
"backup.retentionDays": {
|
|
1651
|
+
"label": "Retention Period",
|
|
1652
|
+
"description": "Days to keep backup files",
|
|
1653
|
+
"help": "Number of days to retain old backup files"
|
|
1654
|
+
},
|
|
1655
|
+
"backup.maxBackups": {
|
|
1656
|
+
"label": "Maximum Backups",
|
|
1657
|
+
"description": "Maximum backup files to keep",
|
|
1658
|
+
"help": "Maximum number of backup files to keep"
|
|
1659
|
+
},
|
|
1660
|
+
"backup.confirm": {
|
|
1661
|
+
"label": "Confirm Backup",
|
|
1662
|
+
"description": "Require confirmation for backup operations",
|
|
1663
|
+
"help": "Confirm backup operation"
|
|
1664
|
+
},
|
|
1665
|
+
"i18nDir": {
|
|
1666
|
+
"label": "I18n 디렉토리",
|
|
1667
|
+
"description": "번역 파일이 포함된 디렉터리",
|
|
1668
|
+
"current": "현재의: {value}",
|
|
1669
|
+
"help": "번역 파일이 있는 디렉터리 경로"
|
|
1670
|
+
},
|
|
1671
|
+
"projectRoot": {
|
|
1672
|
+
"label": "프로젝트 루트",
|
|
1673
|
+
"description": "프로젝트의 루트 디렉터리",
|
|
1674
|
+
"current": "현재의: {value}",
|
|
1675
|
+
"help": "프로젝트 루트 디렉터리 경로"
|
|
1676
|
+
},
|
|
1677
|
+
"checkUsage": {
|
|
1678
|
+
"usage_analysis_failed": "사용량 분석 실패",
|
|
1679
|
+
"usage_analysis_success": "사용량 분석 성공",
|
|
1680
|
+
"usage_analysis_complete": "사용량 분석 완료",
|
|
1681
|
+
"usage_analysis_in_progress": "사용량 분석 진행 중",
|
|
1682
|
+
"usage_analysis_started": "사용량 분석 시작됨",
|
|
1683
|
+
"usage_analysis_skipped": "사용량 분석을 건너뛰었습니다."
|
|
1684
|
+
},
|
|
1685
|
+
"language": {
|
|
1686
|
+
"label": "인터페이스 언어",
|
|
1687
|
+
"description": "사용자 인터페이스 언어",
|
|
1688
|
+
"current": "현재의: {value}",
|
|
1689
|
+
"help": "선호하는 인터페이스 언어를 선택하세요"
|
|
1690
|
+
},
|
|
1691
|
+
"scriptDirectories": {
|
|
1692
|
+
"analyzeLabel": "스크립트 디렉터리 분석",
|
|
1693
|
+
"analyzeHelp": "문제에 대한 스크립트 디렉터리 분석",
|
|
1694
|
+
"completeLabel": "완전한 설치 디렉토리",
|
|
1695
|
+
"initLabel": "스크립트 디렉터리 초기화",
|
|
1696
|
+
"manageLabel": "스크립트 디렉터리 관리",
|
|
1697
|
+
"sizingLabel": "크기 조정 스크립트 디렉터리",
|
|
1698
|
+
"summaryLabel": "요약 보고서 디렉터리",
|
|
1699
|
+
"usageLabel": "사용 보고서 디렉토리",
|
|
1700
|
+
"validateLabel": "스크립트 디렉터리 유효성 검사"
|
|
1701
|
+
},
|
|
1702
|
+
"theme": {
|
|
1703
|
+
"label": "색상 테마",
|
|
1704
|
+
"description": "UI 테마 환경설정",
|
|
1705
|
+
"current": "현재의: {value}",
|
|
1706
|
+
"help": "밝은 테마와 어두운 테마 중에서 선택하세요"
|
|
1707
|
+
},
|
|
1708
|
+
"dateFormat": {
|
|
1709
|
+
"label": "날짜 형식",
|
|
1710
|
+
"description": "날짜 표시 형식",
|
|
1711
|
+
"current": "현재의: {value}",
|
|
1712
|
+
"help": "보고서에 날짜가 표시되는 방법 선택"
|
|
1713
|
+
},
|
|
1714
|
+
"notifications": {
|
|
1715
|
+
"enabled": {
|
|
1716
|
+
"label": "알림 활성화",
|
|
1717
|
+
"description": "데스크톱 알림 표시",
|
|
1718
|
+
"current": "현재의: {value}",
|
|
1719
|
+
"help": "완료된 작업에 대한 데스크톱 알림 활성화"
|
|
1720
|
+
}
|
|
1721
|
+
},
|
|
1722
|
+
"sourceDir": {
|
|
1723
|
+
"label": "소스 디렉토리",
|
|
1724
|
+
"description": "번역 파일이 포함된 디렉터리",
|
|
1725
|
+
"current": "현재의: {value}",
|
|
1726
|
+
"help": "소스 번역 파일이 있는 디렉터리 경로"
|
|
1727
|
+
},
|
|
1728
|
+
"sourceLanguage": {
|
|
1729
|
+
"label": "소스 언어",
|
|
1730
|
+
"description": "번역용 기본 언어",
|
|
1731
|
+
"current": "현재의: {value}",
|
|
1732
|
+
"help": "번역 소스로 사용되는 기본 언어"
|
|
1733
|
+
},
|
|
1734
|
+
"outputDir": {
|
|
1735
|
+
"label": "출력 디렉터리",
|
|
1736
|
+
"description": "생성된 보고서의 디렉터리",
|
|
1737
|
+
"current": "현재의: {value}",
|
|
1738
|
+
"help": "보고서 및 처리된 파일이 저장되는 위치"
|
|
1739
|
+
},
|
|
1740
|
+
"batchSize": {
|
|
1741
|
+
"label": "배치 크기",
|
|
1742
|
+
"description": "배치당 처리된 항목 수",
|
|
1743
|
+
"current": "현재의: {value}",
|
|
1744
|
+
"help": "각 배치에서 처리할 파일 수"
|
|
1745
|
+
},
|
|
1746
|
+
"maxConcurrentFiles": {
|
|
1747
|
+
"label": "최대 동시 파일 수",
|
|
1748
|
+
"description": "동시에 처리되는 최대 파일 수",
|
|
1749
|
+
"current": "현재의: {value}",
|
|
1750
|
+
"help": "동시에 처리할 수 있는 최대 파일 수"
|
|
1751
|
+
},
|
|
1752
|
+
"sizingThreshold": {
|
|
1753
|
+
"label": "크기 조정 임계값(%)",
|
|
1754
|
+
"description": "크기 변화 경고에 대한 임계값",
|
|
1755
|
+
"current": "현재의: {value}%",
|
|
1756
|
+
"help": "크기 불일치 감지를 위한 백분율 임계값"
|
|
1757
|
+
},
|
|
1758
|
+
"strictMode": {
|
|
1759
|
+
"label": "엄격한 검증 모드",
|
|
1760
|
+
"description": "엄격한 검증 모드 활성화",
|
|
1761
|
+
"current": "현재의: {value}",
|
|
1762
|
+
"help": "번역 파일에 대한 엄격한 검증 활성화"
|
|
1763
|
+
},
|
|
1764
|
+
"enableAuditLog": {
|
|
1765
|
+
"label": "감사 로그 활성화",
|
|
1766
|
+
"description": "모든 번역 변경 사항 추적",
|
|
1767
|
+
"current": "현재의: {value}",
|
|
1768
|
+
"help": "번역 파일에 대한 모든 변경 사항을 기록합니다."
|
|
1769
|
+
},
|
|
1770
|
+
"backupBeforeChanges": {
|
|
1771
|
+
"label": "자동 백업",
|
|
1772
|
+
"description": "수정 전 백업 생성",
|
|
1773
|
+
"current": "현재의: {value}",
|
|
1774
|
+
"help": "변경하기 전에 자동으로 백업 생성"
|
|
1775
|
+
},
|
|
1776
|
+
"advanced_maxConcurrentFiles": {
|
|
1777
|
+
"label": "최대 동시 파일 수",
|
|
1778
|
+
"description": "동시에 처리되는 최대 파일 수",
|
|
1779
|
+
"current": "현재의: {value}",
|
|
1780
|
+
"help": "동시에 처리할 수 있는 최대 파일 수"
|
|
1781
|
+
},
|
|
1782
|
+
"advanced_strictMode": {
|
|
1783
|
+
"label": "엄격한 검증 모드",
|
|
1784
|
+
"description": "엄격한 검증 모드 활성화",
|
|
1785
|
+
"current": "현재의: {value}",
|
|
1786
|
+
"help": "번역 파일에 대한 엄격한 검증 활성화"
|
|
1787
|
+
},
|
|
1788
|
+
"adminPinEnabled": {
|
|
1789
|
+
"label": "관리자 PIN 보호",
|
|
1790
|
+
"description": "민감한 설정에 대해 관리자 PIN 인증 활성화",
|
|
1791
|
+
"current": "현재의: {value}",
|
|
1792
|
+
"help": "보안 및 고급 설정을 변경하려면 관리자 PIN이 필요합니다."
|
|
1793
|
+
},
|
|
1794
|
+
"sessionTimeout": {
|
|
1795
|
+
"label": "세션 시간 초과",
|
|
1796
|
+
"description": "관리 세션 시간 초과(분)",
|
|
1797
|
+
"current": "현재의: {value} 분",
|
|
1798
|
+
"help": "재인증을 요구하기 전에 관리 세션이 활성 상태로 유지되는 기간"
|
|
1799
|
+
},
|
|
1800
|
+
"maxFailedAttempts": {
|
|
1801
|
+
"label": "최대 시도 실패 횟수",
|
|
1802
|
+
"description": "잠금 전 최대 PIN 실패 시도 횟수",
|
|
1803
|
+
"current": "현재의: {value} 시도",
|
|
1804
|
+
"help": "임시 잠금 전까지 허용되는 PIN 시도 실패 횟수"
|
|
1805
|
+
},
|
|
1806
|
+
"lockoutDuration": {
|
|
1807
|
+
"label": "잠금 기간",
|
|
1808
|
+
"description": "시도 실패 후 잠금 기간",
|
|
1809
|
+
"current": "현재의: {value} 분",
|
|
1810
|
+
"help": "최대 시도 실패 후 시스템이 잠긴 상태로 유지되는 기간"
|
|
1811
|
+
},
|
|
1812
|
+
"scriptDirectories_analyze": {
|
|
1813
|
+
"label": "스크립트 디렉터리 분석",
|
|
1814
|
+
"description": "분석 스크립트를 위한 사용자 정의 디렉터리",
|
|
1815
|
+
"current": "현재의: {value}",
|
|
1816
|
+
"help": "분석 스크립트에 대한 사용자 정의 소스 디렉터리를 지정합니다. 전역 설정을 사용하려면 비워 두세요."
|
|
1817
|
+
},
|
|
1818
|
+
"scriptDirectories_complete": {
|
|
1819
|
+
"label": "완전한 설치 디렉토리",
|
|
1820
|
+
"description": "전체 설정 스크립트를 위한 사용자 정의 디렉터리",
|
|
1821
|
+
"current": "현재의: {value}",
|
|
1822
|
+
"help": "전체 설정 스크립트에 대한 사용자 정의 소스 디렉터리를 지정합니다. 전역 설정을 사용하려면 비워 두세요."
|
|
1823
|
+
},
|
|
1824
|
+
"scriptDirectories_init": {
|
|
1825
|
+
"label": "스크립트 디렉터리 초기화",
|
|
1826
|
+
"description": "초기화 스크립트를 위한 사용자 정의 디렉터리",
|
|
1827
|
+
"current": "현재의: {value}",
|
|
1828
|
+
"help": "초기화 스크립트에 대한 사용자 정의 소스 디렉터리를 지정합니다. 전역 설정을 사용하려면 비워 두세요."
|
|
1829
|
+
},
|
|
1830
|
+
"scriptDirectories_manage": {
|
|
1831
|
+
"label": "스크립트 디렉터리 관리",
|
|
1832
|
+
"description": "스크립트 관리를 위한 사용자 정의 디렉토리",
|
|
1833
|
+
"current": "현재의: {value}",
|
|
1834
|
+
"help": "관리 스크립트에 대한 사용자 정의 소스 디렉터리를 지정합니다. 전역 설정을 사용하려면 비워 두세요."
|
|
1835
|
+
},
|
|
1836
|
+
"scriptDirectories_sizing": {
|
|
1837
|
+
"label": "크기 조정 스크립트 디렉터리",
|
|
1838
|
+
"description": "크기 조정 스크립트를 위한 사용자 정의 디렉터리",
|
|
1839
|
+
"current": "현재의: {value}",
|
|
1840
|
+
"help": "크기 조정 스크립트에 대한 사용자 정의 소스 디렉터리를 지정합니다. 전역 설정을 사용하려면 비워 두세요."
|
|
1841
|
+
},
|
|
1842
|
+
"scriptDirectories_summary": {
|
|
1843
|
+
"label": "요약 보고서 디렉터리",
|
|
1844
|
+
"description": "요약 보고서 스크립트용 사용자 정의 디렉토리",
|
|
1845
|
+
"current": "현재의: {value}",
|
|
1846
|
+
"help": "요약 보고서 스크립트에 대한 사용자 정의 소스 디렉터리를 지정합니다. 전역 설정을 사용하려면 비워 두세요."
|
|
1847
|
+
},
|
|
1848
|
+
"scriptDirectories_usage": {
|
|
1849
|
+
"label": "사용 보고서 디렉토리",
|
|
1850
|
+
"description": "사용 보고서 스크립트를 위한 사용자 정의 디렉터리",
|
|
1851
|
+
"current": "현재의: {value}",
|
|
1852
|
+
"help": "사용 보고서 스크립트에 대한 사용자 정의 소스 디렉터리를 지정합니다. 전역 설정을 사용하려면 비워 두세요."
|
|
1853
|
+
},
|
|
1854
|
+
"scriptDirectories_validate": {
|
|
1855
|
+
"label": "스크립트 디렉터리 유효성 검사",
|
|
1856
|
+
"description": "유효성 검사 스크립트를 위한 사용자 정의 디렉터리",
|
|
1857
|
+
"current": "현재의: {value}",
|
|
1858
|
+
"help": "유효성 검사 스크립트에 대한 사용자 정의 소스 디렉터리를 지정합니다. 전역 설정을 사용하려면 비워 두세요."
|
|
1859
|
+
},
|
|
1860
|
+
"security_adminPinEnabled": {
|
|
1861
|
+
"label": "관리자 PIN 보호",
|
|
1862
|
+
"description": "민감한 설정에 대해 관리자 PIN 인증 활성화",
|
|
1863
|
+
"current": "현재의: {value}",
|
|
1864
|
+
"help": "보안 및 고급 설정을 변경하려면 관리자 PIN이 필요합니다."
|
|
1865
|
+
},
|
|
1866
|
+
"fields": {
|
|
1867
|
+
"adminPinEnabled": {
|
|
1868
|
+
"label": "관리자 PIN 보호",
|
|
1869
|
+
"description": "민감한 설정에 대해 관리자 PIN 인증 활성화",
|
|
1870
|
+
"help": "보안 및 고급 설정을 변경하려면 관리자 PIN이 필요합니다."
|
|
1871
|
+
}
|
|
1872
|
+
},
|
|
1873
|
+
"security_pinProtection_enabled": {
|
|
1874
|
+
"label": "PIN 보호",
|
|
1875
|
+
"description": "민감한 설정에 대해 PIN 보호 활성화",
|
|
1876
|
+
"current": "현재의: {value}",
|
|
1877
|
+
"help": "보안 및 고급 설정을 변경하려면 PIN이 필요합니다."
|
|
1878
|
+
},
|
|
1879
|
+
"pinProtection_configure": {
|
|
1880
|
+
"label": "PIN 보호 스크립트 구성",
|
|
1881
|
+
"description": "PIN 보호가 필요한 스크립트 구성",
|
|
1882
|
+
"help": "PIN 인증이 필요한 개별 스크립트를 선택하세요."
|
|
1883
|
+
},
|
|
1884
|
+
"pinProtection_debugMenu": {
|
|
1885
|
+
"label": "디버그 도구 메뉴",
|
|
1886
|
+
"description": "디버그 도구 메뉴에 PIN 필요",
|
|
1887
|
+
"current": "현재의: {value}",
|
|
1888
|
+
"help": "디버그 도구에 액세스하기 위해 PIN 보호 활성화"
|
|
1889
|
+
},
|
|
1890
|
+
"pinProtection_deleteReports": {
|
|
1891
|
+
"label": "보고서 삭제",
|
|
1892
|
+
"description": "보고서 삭제 시 PIN 필요",
|
|
1893
|
+
"current": "현재의: {value}",
|
|
1894
|
+
"help": "보고서 삭제를 위해 PIN 보호 활성화"
|
|
1895
|
+
},
|
|
1896
|
+
"pinProtection_summaryReports": {
|
|
1897
|
+
"label": "요약 보고서",
|
|
1898
|
+
"description": "요약 보고서에 PIN 필요",
|
|
1899
|
+
"current": "현재의: {value}",
|
|
1900
|
+
"help": "요약 보고서 생성을 위해 PIN 보호 활성화"
|
|
1901
|
+
},
|
|
1902
|
+
"pinProtection_settingsMenu": {
|
|
1903
|
+
"label": "설정 메뉴",
|
|
1904
|
+
"description": "설정 메뉴에 PIN 필요",
|
|
1905
|
+
"current": "현재의: {value}",
|
|
1906
|
+
"help": "설정에 액세스하려면 PIN 보호를 활성화하세요."
|
|
1907
|
+
},
|
|
1908
|
+
"pinProtection_initScript": {
|
|
1909
|
+
"label": "스크립트 초기화",
|
|
1910
|
+
"description": "스크립트 초기화에 PIN 필요",
|
|
1911
|
+
"current": "현재의: {value}",
|
|
1912
|
+
"help": "초기화 스크립트 실행을 위해 PIN 보호 활성화"
|
|
1913
|
+
},
|
|
1914
|
+
"pinProtection_resetDefaults": {
|
|
1915
|
+
"label": "PIN 보호 재설정",
|
|
1916
|
+
"description": "모든 PIN 보호 설정을 기본값으로 재설정",
|
|
1917
|
+
"help": "모든 개별 스크립트 PIN 보호를 기본값으로 재설정"
|
|
1918
|
+
},
|
|
1919
|
+
"removeUiLanguages": {
|
|
1920
|
+
"label": "UI 언어 제거",
|
|
1921
|
+
"description": "설치되지 않은 UI 언어 제거",
|
|
1922
|
+
"help": "시스템에 설치되지 않은 UI 언어 제거"
|
|
1923
|
+
},
|
|
1924
|
+
"${helperKey}": {
|
|
1925
|
+
"help": "돕다"
|
|
1926
|
+
},
|
|
1927
|
+
"reports_format": {
|
|
1928
|
+
"label": "보고서 형식",
|
|
1929
|
+
"help": "읽을 수 있는 보고서에는 마크다운을 선택하고, 자동화에는 json을, 일반 로그에는 텍스트를 선택하세요."
|
|
1930
|
+
},
|
|
1931
|
+
"autoTranslate_placeholderMode": {
|
|
1932
|
+
"label": "자리 표시자 처리 모드",
|
|
1933
|
+
"help": "자동 번역 중에 자리 표시자가 포함된 문자열을 처리하는 방법입니다."
|
|
1934
|
+
},
|
|
1935
|
+
"autoTranslate_concurrency": {
|
|
1936
|
+
"label": "동시 번역 요청",
|
|
1937
|
+
"help": "최대 동시 공급자 요청. Google은 i18ntk에서 최대 100개를 지원합니다. DeepL과 LibreTranslate는 더 낮게 제한됩니다."
|
|
1938
|
+
},
|
|
1939
|
+
"autoTranslate_batchSize": {
|
|
1940
|
+
"label": "배치당 텍스트 세그먼트",
|
|
1941
|
+
"help": "배치당 예약된 텍스트 세그먼트 수입니다."
|
|
1942
|
+
},
|
|
1943
|
+
"autoTranslate_progressInterval": {
|
|
1944
|
+
"label": "진행 업데이트 간격",
|
|
1945
|
+
"help": "진행 상황 업데이트 사이에 텍스트 세그먼트가 완성되었습니다."
|
|
1946
|
+
},
|
|
1947
|
+
"autoTranslate_retryCount": {
|
|
1948
|
+
"label": "재시도 횟수",
|
|
1949
|
+
"help": "실패한 요청당 최대 재시도 횟수입니다."
|
|
1950
|
+
},
|
|
1951
|
+
"autoTranslate_retryDelay": {
|
|
1952
|
+
"label": "재시도 지연(ms)",
|
|
1953
|
+
"help": "기본 재시도 지연 시간(밀리초)입니다."
|
|
1954
|
+
},
|
|
1955
|
+
"autoTranslate_timeout": {
|
|
1956
|
+
"label": "요청 시간 초과(ms)",
|
|
1957
|
+
"help": "번역 제공업체 요청 시간이 초과되었습니다."
|
|
1958
|
+
},
|
|
1959
|
+
"autoTranslate_dryRunFirst": {
|
|
1960
|
+
"label": "먼저 테스트 실행 미리보기",
|
|
1961
|
+
"help": "파일을 작성하기 전에 번역될 내용을 미리 보세요."
|
|
1962
|
+
},
|
|
1963
|
+
"autoTranslate_onlyMissingOrEnglish": {
|
|
1964
|
+
"label": "누락된 키 또는 영어 키만",
|
|
1965
|
+
"help": "기존에 번역된 대상 값을 유지하고 누락된 값, 마커, 원본 복사본 또는 가능한 영어 값만 번역합니다."
|
|
1966
|
+
},
|
|
1967
|
+
"autoTranslate_reportStdout": {
|
|
1968
|
+
"label": "보고서를 터미널로 인쇄",
|
|
1969
|
+
"help": "번역 후 보고서를 stdout으로 인쇄합니다."
|
|
1970
|
+
},
|
|
1971
|
+
"autoTranslate_bom": {
|
|
1972
|
+
"label": "UTF-8 BOM 작성",
|
|
1973
|
+
"help": "UTF-8 BOM을 사용하여 번역된 JSON 파일을 작성합니다."
|
|
1974
|
+
},
|
|
1975
|
+
"autoTranslate_protectionEnabled": {
|
|
1976
|
+
"label": "브랜드 용어, 키, 값 보호",
|
|
1977
|
+
"help": "사용자가 편집할 수 있는 보호 용어, 키, 값 및 패턴을 활성화합니다."
|
|
1978
|
+
},
|
|
1979
|
+
"autoTranslate_protectionFile": {
|
|
1980
|
+
"label": "보호 JSON 파일",
|
|
1981
|
+
"help": "자동 번역 보호 규칙이 포함된 프로젝트 JSON 파일입니다."
|
|
1982
|
+
},
|
|
1983
|
+
"autoTranslate_promptProtectionSetup": {
|
|
1984
|
+
"label": "보호파일 생성 요청",
|
|
1985
|
+
"help": "자동 번역이 처음 실행될 때 보호 파일 생성을 요청합니다."
|
|
1986
|
+
},
|
|
1987
|
+
"autoTranslate_promptProtectionUpdate": {
|
|
1988
|
+
"label": "보호 규칙 업데이트 요청",
|
|
1989
|
+
"help": "관리자 번역 전에 보호 규칙을 업데이트할지 여부를 묻습니다."
|
|
1990
|
+
},
|
|
1991
|
+
"backup": {
|
|
1992
|
+
"enabled": {
|
|
1993
|
+
"label": "백업 활성화",
|
|
1994
|
+
"description": "설정 자동 백업 활성화",
|
|
1995
|
+
"help": "백업 기능 활성화/비활성화"
|
|
1996
|
+
},
|
|
1997
|
+
"singleFileMode": {
|
|
1998
|
+
"label": "단일 파일 모드",
|
|
1999
|
+
"description": "백업에 단일 파일 사용",
|
|
2000
|
+
"help": "단일 파일의 백업 설정"
|
|
2001
|
+
},
|
|
2002
|
+
"singleBackupFile": {
|
|
2003
|
+
"label": "백업 파일 경로",
|
|
2004
|
+
"description": "백업 파일 경로",
|
|
2005
|
+
"help": "단일 백업 파일의 경로"
|
|
2006
|
+
},
|
|
2007
|
+
"retentionDays": {
|
|
2008
|
+
"label": "보유기간",
|
|
2009
|
+
"description": "백업 파일 보관 일수",
|
|
2010
|
+
"help": "오래된 백업 파일을 보관하는 일수"
|
|
2011
|
+
},
|
|
2012
|
+
"maxBackups": {
|
|
2013
|
+
"label": "최대 백업",
|
|
2014
|
+
"description": "보관할 최대 백업 파일",
|
|
2015
|
+
"help": "보관할 최대 백업 파일 수"
|
|
2016
|
+
},
|
|
2017
|
+
"confirm": {
|
|
2018
|
+
"label": "백업 확인",
|
|
2019
|
+
"description": "백업 작업에 대한 확인 필요",
|
|
2020
|
+
"help": "백업 작업 확인"
|
|
2021
|
+
}
|
|
2022
|
+
}
|
|
2023
|
+
},
|
|
2024
|
+
"actions": {
|
|
2025
|
+
"editSetting": "편집하다 {setting}:",
|
|
2026
|
+
"settingUpdated": "✅ {setting} 성공적으로 업데이트되었습니다!",
|
|
2027
|
+
"invalidValue": "❌ 값이 잘못되었습니다. 다시 시도해 주세요.",
|
|
2028
|
+
"pressEnter": "계속하려면 Enter를 누르세요...",
|
|
2029
|
+
"backToMenu": "메인 메뉴로 돌아가기",
|
|
2030
|
+
"saveSuccess": "✅ 설정이 성공적으로 저장되었습니다!",
|
|
2031
|
+
"saveFailed": "❌ 설정 저장 실패: {error}",
|
|
2032
|
+
"resetConfirm": "모든 설정을 기본값으로 재설정하시겠습니까? (예/아니요):",
|
|
2033
|
+
"resetSuccess": "✅ 설정이 기본값으로 재설정되었습니다!",
|
|
2034
|
+
"importSuccess": "✅ 설정을 성공적으로 가져왔습니다!",
|
|
2035
|
+
"exportSuccess": "✅ 설정을 성공적으로 내보냈습니다!",
|
|
2036
|
+
"fileNotFound": "❌ 파일을 찾을 수 없습니다: {path}",
|
|
2037
|
+
"invalidFormat": "❌ 잘못된 설정 파일 형식",
|
|
2038
|
+
"pinProtectionUpdated": "✅ PIN 보호 {script} 성공적으로 업데이트되었습니다!",
|
|
2039
|
+
"pinProtectionReset": "✅ 모든 PIN 보호 설정이 기본값으로 재설정됩니다!",
|
|
2040
|
+
"pinProtectionConfigure": "개별 스크립트에 대한 PIN 보호 구성",
|
|
2041
|
+
"pinProtectionSelectScript": "PIN 보호를 전환하려면 스크립트를 선택하세요.",
|
|
2042
|
+
"pinProtectionCurrentStatus": "현재 상태: {status}",
|
|
2043
|
+
"pinProtectionEnabled": "활성화됨",
|
|
2044
|
+
"pinProtectionDisabled": "장애가 있는",
|
|
2045
|
+
"pinProtectionToggle": "PIN 보호 전환",
|
|
2046
|
+
"pinProtectionResetAll": "모두 기본값으로 재설정",
|
|
2047
|
+
"pinProtectionBack": "보안 설정으로 돌아가기"
|
|
2048
|
+
},
|
|
2049
|
+
"themes": {
|
|
2050
|
+
"light": "빛",
|
|
2051
|
+
"dark": "어두운",
|
|
2052
|
+
"system": "체계"
|
|
2053
|
+
},
|
|
2054
|
+
"languages": {
|
|
2055
|
+
"en": "영어",
|
|
2056
|
+
"de": "독일 사람",
|
|
2057
|
+
"es": "스페인 사람",
|
|
2058
|
+
"fr": "프랑스 국민",
|
|
2059
|
+
"ru": "러시아인",
|
|
2060
|
+
"ja": "일본어",
|
|
2061
|
+
"zh": "중국인",
|
|
2062
|
+
"it": "이탈리아어",
|
|
2063
|
+
"pt": "포르투갈어",
|
|
2064
|
+
"nl": "네덜란드어",
|
|
2065
|
+
"pl": "폴란드어",
|
|
2066
|
+
"sv": "스웨덴어",
|
|
2067
|
+
"uk": "우크라이나어",
|
|
2068
|
+
"cs": "체코어",
|
|
2069
|
+
"tr": "터키어",
|
|
2070
|
+
"ko": "한국어",
|
|
2071
|
+
"ar": "아랍어",
|
|
2072
|
+
"hi": "힌디어",
|
|
2073
|
+
"th": "태국어",
|
|
2074
|
+
"vi": "베트남어",
|
|
2075
|
+
"he": "히브리어",
|
|
2076
|
+
"el": "그리스어",
|
|
2077
|
+
"hu": "헝가리어"
|
|
2078
|
+
},
|
|
2079
|
+
"viewAll": {
|
|
2080
|
+
"title": "모든 설정 보기"
|
|
2081
|
+
},
|
|
2082
|
+
"current": "현재의",
|
|
2083
|
+
"back": "메인 메뉴로 돌아가기",
|
|
2084
|
+
"selectSettingPrompt": "편집할 설정을 선택합니다(또는 뒤로가려면 b, 재설정하려면 r).",
|
|
2085
|
+
"invalidOption": "잘못된 옵션입니다.",
|
|
2086
|
+
"editing": "편집",
|
|
2087
|
+
"enterNewValue": "새 값을 입력하세요(또는 현재 값을 유지하려면 Enter를 누르고, 시스템 기본값을 사용하려면 'default'를 입력하세요).",
|
|
2088
|
+
"validOptions": "유효한 옵션",
|
|
2089
|
+
"updatedSuccessfully": "성공적으로 업데이트되었습니다!",
|
|
2090
|
+
"noHelp": "이 설정에 대한 도움말이 없습니다.",
|
|
2091
|
+
"resetScriptDirectories": "기본값으로 재설정",
|
|
2092
|
+
"resetScriptDirectoriesTitle": "스크립트 디렉터리를 기본값으로 재설정",
|
|
2093
|
+
"resetScriptDirectoriesWarning1": "그러면 모든 스크립트 디렉터리 구성이 시스템 기본값으로 재설정됩니다.",
|
|
2094
|
+
"resetScriptDirectoriesWarning2": "모든 사용자 정의 디렉터리 경로가 지워집니다. 이 작업은 취소할 수 없습니다.",
|
|
2095
|
+
"resetScriptDirectoriesConfirm": "모든 스크립트 디렉터리를 기본값으로 재설정하시겠습니까? (예/아니요):",
|
|
2096
|
+
"backup": {
|
|
2097
|
+
"title": "백업 설정",
|
|
2098
|
+
"description": "현재 설정을 파일로 백업",
|
|
2099
|
+
"confirm": "현재 설정을 백업하시겠습니까? (예/아니요):",
|
|
2100
|
+
"success": "✅ 설정이 성공적으로 백업되었습니다. {backupFile}",
|
|
2101
|
+
"failed": "❌ 설정 백업 실패: {error}",
|
|
2102
|
+
"enabled": "백업 활성화",
|
|
2103
|
+
"enabledHelp": "백업 기능 활성화/비활성화",
|
|
2104
|
+
"singleFileMode": "단일 파일 모드",
|
|
2105
|
+
"singleFileModeHelp": "단일 파일의 백업 설정",
|
|
2106
|
+
"singleBackupFile": "단일 백업 파일",
|
|
2107
|
+
"singleBackupFileHelp": "단일 백업 파일의 경로",
|
|
2108
|
+
"retentionDays": "보존 일수",
|
|
2109
|
+
"retentionDaysHelp": "오래된 백업 파일을 보관하는 일수",
|
|
2110
|
+
"maxBackups": "최대 백업",
|
|
2111
|
+
"maxBackupsHelp": "보관할 최대 백업 파일 수",
|
|
2112
|
+
"confirmHelp": "백업 작업 확인",
|
|
2113
|
+
"confirmYes": "예",
|
|
2114
|
+
"confirmNo": "아니요"
|
|
2115
|
+
},
|
|
2116
|
+
"validation": {
|
|
2117
|
+
"valid": "유효한",
|
|
2118
|
+
"validatingPaths": "구성된 경로를 검증하는 중...",
|
|
2119
|
+
"validationComplete": "경로 유효성 검사 완료: {valid}/{total} 유효한."
|
|
2120
|
+
}
|
|
2121
|
+
},
|
|
2122
|
+
"summary": {
|
|
2123
|
+
"separator": "============================================================",
|
|
2124
|
+
"configurationTitle": "🔧 구성:",
|
|
2125
|
+
"sourceLanguage": "소스 언어: {sourceLanguage}",
|
|
2126
|
+
"supportedExtensions": "지원되는 확장: {extensions}",
|
|
2127
|
+
"excludedFiles": "제외된 파일: {files}",
|
|
2128
|
+
"reportContent": "{report}",
|
|
2129
|
+
"fatalError": "❌ 치명적인 오류: {error}",
|
|
2130
|
+
"helpTitle": "📊 I18NTK 요약 보고서 생성기",
|
|
2131
|
+
"helpDescription": "i18n 폴더 구조를 분석하고 주요 통계, 파일 구조 분석 및 유효성 검사를 포함하는 포괄적인 요약 보고서를 생성합니다.",
|
|
2132
|
+
"helpUsage": "사용법: node i18ntk-summary.js [옵션]",
|
|
2133
|
+
"helpOptions": "--소스-디렉터리 <dir> 분석할 소스 디렉터리",
|
|
2134
|
+
"helpSourceDir": "--소스-디렉터리 <dir> 분석할 소스 디렉터리",
|
|
2135
|
+
"helpOutput": "--산출 <file> 보고서의 출력 파일",
|
|
2136
|
+
"helpVerbose": "--verbose, -v 자세한 정보 표시",
|
|
2137
|
+
"helpKeepReports": "--keep-reports 기존 보고서 유지",
|
|
2138
|
+
"helpDeleteReports": "--delete-reports 기존 보고서 삭제",
|
|
2139
|
+
"helpHelp": "--help, -h 이 도움말 표시",
|
|
2140
|
+
"helpExamples": "예:",
|
|
2141
|
+
"helpExample1": "노드 i18ntk-summary.js",
|
|
2142
|
+
"helpExample2": "노드 i18ntk-summary.js --source-dir ./locales",
|
|
2143
|
+
"helpExample3": "노드 i18ntk-summary.js --출력 요약-report.txt",
|
|
2144
|
+
"helpExample4": "노드 i18ntk-summary.js --verbose",
|
|
2145
|
+
"helpExample5": "노드 i18ntk-summary.js --source-dir ./locales --output report.json",
|
|
2146
|
+
"couldNotReadFile": "⚠️ 파일을 읽을 수 없습니다: {filePath}",
|
|
2147
|
+
"couldNotParseJSFile": "⚠️ JS/TS 파일을 구문 분석할 수 없습니다: {filePath}",
|
|
2148
|
+
"errorReadingFile": "⚠️ 파일 읽기 오류 {filePath}: {error}",
|
|
2149
|
+
"analyzingFolder": "🔍 폴더 구조 분석 중...",
|
|
2150
|
+
"noLanguageDirectoriesFound": "❌ 지정된 소스 디렉터리에서 언어 디렉터리를 찾을 수 없습니다.",
|
|
2151
|
+
"foundLanguages": "✅ 찾음 {count} 언어: {languages}",
|
|
2152
|
+
"referenceLanguageFiles": "📁 참고 언어 '{language}' 가지다 {count} 파일",
|
|
2153
|
+
"analyzingLanguage": "🌍 언어 분석: {language}",
|
|
2154
|
+
"keysInFiles": "📊 발견됨 {keys} 키 건너편 {files} 파일",
|
|
2155
|
+
"checkingInconsistentKeys": "🔍 언어별로 일치하지 않는 키를 확인하는 중...",
|
|
2156
|
+
"generatingSummaryReport": "📝 요약 보고서 생성 중...",
|
|
2157
|
+
"reportTitle": "📊 I18NTK SUMMARY REPORT",
|
|
2158
|
+
"generated": "생성됨: {timestamp}",
|
|
2159
|
+
"sourceDirectory": "소스 디렉토리: {dir}",
|
|
2160
|
+
"overview": "📈 OVERVIEW",
|
|
2161
|
+
"languagesCount": "언어: {count}",
|
|
2162
|
+
"totalFiles": "총 파일 수: {count}",
|
|
2163
|
+
"totalKeys": "총 키: {count}",
|
|
2164
|
+
"avgKeysPerLanguage": "언어당 평균 키: {count}",
|
|
2165
|
+
"languagesBreakdown": "🌍 언어 분석",
|
|
2166
|
+
"languageBreakdown": "{language}: {files} 파일, {keys} 열쇠",
|
|
2167
|
+
"fileStructure": "📁 파일 구조",
|
|
2168
|
+
"fileKeys": "{file}: {keys} 열쇠",
|
|
2169
|
+
"missingInLanguages": "⚠️ 누락된 항목: {languages}",
|
|
2170
|
+
"issuesFound": "❌ ISSUES FOUND",
|
|
2171
|
+
"missingFiles": "📁 누락된 파일:",
|
|
2172
|
+
"emptyFiles": "📄 빈 파일:",
|
|
2173
|
+
"malformedFiles": "⚠️ 잘못된 파일:",
|
|
2174
|
+
"duplicateKeys": "🔑 중복 키:",
|
|
2175
|
+
"inconsistentKeys": "🔍 일관되지 않은 키:",
|
|
2176
|
+
"missingKeys": "없어진: {keys}{more}",
|
|
2177
|
+
"extraKeys": "추가의: {keys}{more}",
|
|
2178
|
+
"noIssuesFound": "✅ NO ISSUES FOUND",
|
|
2179
|
+
"allFilesConsistent": "모든 번역 파일은 언어 전반에 걸쳐 일관됩니다.",
|
|
2180
|
+
"recommendations": "💡 추천",
|
|
2181
|
+
"createMissingFiles": "• 누락된 번역 파일 생성",
|
|
2182
|
+
"addContentToEmptyFiles": "• 빈 번역 파일에 콘텐츠 추가",
|
|
2183
|
+
"fixMalformedFiles": "• 잘못된 JSON/JS 파일 수정",
|
|
2184
|
+
"removeDuplicateKeys": "• 파일에서 중복 키 제거",
|
|
2185
|
+
"synchronizeKeys": "• 모든 언어에서 키 동기화",
|
|
2186
|
+
"splitLargeFiles": "• 대용량 파일을 더 작은 네임스페이스로 분할하는 것을 고려하세요.",
|
|
2187
|
+
"addMoreLanguages": "• 더 많은 언어를 추가해 보세요.",
|
|
2188
|
+
"nextSteps": "🎯 NEXT STEPS",
|
|
2189
|
+
"nextStep1": "1. 위에서 확인된 문제를 해결하세요.",
|
|
2190
|
+
"nextStep2": "2. 일관성을 보장하기 위해 유효성 검사를 실행합니다.",
|
|
2191
|
+
"nextStep3": "3. 자세한 검증을 위해 i18ntk-validate 사용을 고려하십시오.",
|
|
2192
|
+
"nextStep4": "4. 정기적인 모니터링 권장",
|
|
2193
|
+
"couldNotFindI18nDirectory": "❌ i18n 디렉터리를 찾을 수 없습니다. --source-dir을 지정하십시오.",
|
|
2194
|
+
"sourceDirectoryDoesNotExist": "❌ 소스 디렉터리가 존재하지 않습니다: {dir}",
|
|
2195
|
+
"i18nSummaryReportGenerator": "📊 I18N 요약 보고서 생성기",
|
|
2196
|
+
"analysisComplete": "✅ 분석 완료",
|
|
2197
|
+
"analyzedLanguages": "📊 분석된 언어: {count}",
|
|
2198
|
+
"processedFiles": "📁 처리된 파일: {count}",
|
|
2199
|
+
"foundTranslationKeys": "🔑 발견된 번역 키: {count}",
|
|
2200
|
+
"foundIssues": "❌ 발견됨 {count} 문제",
|
|
2201
|
+
"noIssuesConsole": "✅ 문제가 발견되지 않았습니다. 모든 파일이 일관됩니다!",
|
|
2202
|
+
"errorDuringAnalysis": "❌ 분석 중 오류: {error}",
|
|
2203
|
+
"usageReportTitle": "📊 I18NTK USAGE REPORT",
|
|
2204
|
+
"usageReportGenerated": "생성됨: {timestamp}",
|
|
2205
|
+
"usageReportSourceDir": "소스 디렉토리: {sourceDir}",
|
|
2206
|
+
"usageReportI18nDir": "I18n 디렉토리: {i18nDir}",
|
|
2207
|
+
"usageReportSummary": "📈 SUMMARY",
|
|
2208
|
+
"usageReportSourceFilesScanned": "스캔된 소스 파일: {count}",
|
|
2209
|
+
"usageReportTranslationFilesFound": "발견된 번역 파일: {count}",
|
|
2210
|
+
"usageReportAvailableKeys": "사용 가능한 번역 키: {count}",
|
|
2211
|
+
"usageReportUsedKeys": "사용된 번역 키: {count}",
|
|
2212
|
+
"usageReportDynamicKeys": "동적 번역 키: {count}",
|
|
2213
|
+
"usageReportUnusedKeys": "사용되지 않은 번역 키: {count}",
|
|
2214
|
+
"usageReportMissingKeys": "누락된 번역 키: {count}",
|
|
2215
|
+
"usageReportNotTranslatedKeys": "번역되지 않은 키: {count}",
|
|
2216
|
+
"usageReportTranslationCompleteness": "🌍 번역 완전성",
|
|
2217
|
+
"usageReportLanguageCompleteness": "{language}: {completeness}% ({translated}/{total})",
|
|
2218
|
+
"usageReportNotTranslatedInLanguage": "번역되지 않음: {count} 열쇠",
|
|
2219
|
+
"usageReportTranslationFilesDiscovered": "📁 번역 파일",
|
|
2220
|
+
"usageReportFileInfo": "{relativePath} (네임스페이스: {namespace}, 유형: {type})",
|
|
2221
|
+
"usageReportUnusedTranslationKeys": "🗑️ 사용되지 않은 번역 키",
|
|
2222
|
+
"usageReportUnusedKeysDescription": "다음 키는 번역 파일에 존재하지만 소스 코드에서는 사용되지 않습니다.",
|
|
2223
|
+
"usageReportUnusedKey": "• {key}",
|
|
2224
|
+
"usageReportMoreUnusedKeys": "... 그리고 {count} 사용하지 않은 키가 더 많습니다",
|
|
2225
|
+
"usageReportMissingTranslationKeys": "❌ 번역 키 누락",
|
|
2226
|
+
"usageReportMissingKeysDescription": "다음 키는 소스 코드에서 사용되지만 번역 파일에서는 누락되었습니다.",
|
|
2227
|
+
"usageReportMissingKey": "• {key}",
|
|
2228
|
+
"usageReportUsedIn": "사용 대상: {filePath}",
|
|
2229
|
+
"usageReportMoreFiles": "... 그리고 {count} 더 많은 파일",
|
|
2230
|
+
"usageReportDynamicTranslationKeys": "⚡ 동적 번역 키",
|
|
2231
|
+
"usageReportDynamicKeysDescription": "이러한 키는 동적으로 사용됩니다(런타임에 생성됨).",
|
|
2232
|
+
"usageReportDynamicKey": "• {key}",
|
|
2233
|
+
"usageReportFileUsageBreakdown": "📊 파일 사용 내역",
|
|
2234
|
+
"usageReportFileUsage": "{filePath}: {count} 열쇠",
|
|
2235
|
+
"status": {
|
|
2236
|
+
"generating": "⏳ 생성 중...",
|
|
2237
|
+
"completed": "✅ 완료됨"
|
|
2238
|
+
},
|
|
2239
|
+
"help": {
|
|
2240
|
+
"usage": "사용법: node main/manage/index.js [옵션]",
|
|
2241
|
+
"interactiveMode": "💡 사용: node main/manage/index.js --command=<command> 직접 실행을 위해",
|
|
2242
|
+
"initProject": "🚀 새 언어 초기화",
|
|
2243
|
+
"analyzeTranslations": "🔍 번역 분석",
|
|
2244
|
+
"validateTranslations": "✅ 번역 확인",
|
|
2245
|
+
"checkUsage": "📊 키 사용법 확인",
|
|
2246
|
+
"showHelp": "📖 사용: node main/manage/index.js --사용 가능한 명령에 대한 도움말",
|
|
2247
|
+
"availableCommands": "📖 사용 가능한 명령:",
|
|
2248
|
+
"initCommand": "init - 새 언어 초기화",
|
|
2249
|
+
"analyzeCommand": "분석 - 번역 분석",
|
|
2250
|
+
"validateCommand": "검증 - 번역 검증",
|
|
2251
|
+
"usageCommand": "사용법 - 키 사용법 확인",
|
|
2252
|
+
"sizingCommand": "사이징 - 사이징 분석",
|
|
2253
|
+
"completeCommand": "완전한 - 완전한 번역(100% 적용)",
|
|
2254
|
+
"summaryCommand": "요약 - 프로젝트 상태 표시",
|
|
2255
|
+
"scannerCommand": "스캐너 - i18n 문제 스캔",
|
|
2256
|
+
"translateCommand": "번역 - 로케일 파일 자동 번역",
|
|
2257
|
+
"debugCommand": "디버그 - 디버그 번역 문제"
|
|
2258
|
+
},
|
|
2259
|
+
"test_complete_system": {
|
|
2260
|
+
"starting_test": "🧪 전체 시스템 테스트 시작",
|
|
2261
|
+
"separator": "=",
|
|
2262
|
+
"testing_ui_translations": "📝 UI 번역 테스트 중...",
|
|
2263
|
+
"testing_settings_manager": "⚙️ 테스트 설정 관리자...",
|
|
2264
|
+
"testing_main_scripts": "🔧 메인 스크립트 테스트...",
|
|
2265
|
+
"checking_translation_consistency": "🌐 번역 일관성 확인 중...",
|
|
2266
|
+
"non_critical_missing_keys": "ℹ️ {file}: {count} 중요하지 않은 누락된 키",
|
|
2267
|
+
"extra_keys": "ℹ️ {file}: {count} 추가 키",
|
|
2268
|
+
"generating_report": "📊 보고서 생성 중...",
|
|
2269
|
+
"final_test_report_title": "📋 FINAL TEST REPORT",
|
|
2270
|
+
"passed": "✅ 합격: {passed}",
|
|
2271
|
+
"failed": "❌ 실패: {failed}",
|
|
2272
|
+
"warnings": "⚠️ 경고: {warnings}",
|
|
2273
|
+
"missing_translations_title": "🔍 누락된 번역({count}):",
|
|
2274
|
+
"missing_translation_key": "- {key}",
|
|
2275
|
+
"missing_translations_more": "... 그리고 {count} 더",
|
|
2276
|
+
"errors_title": "❌ 오류:",
|
|
2277
|
+
"error_message": "- {error}",
|
|
2278
|
+
"overall_status": "📊 전체 상태: {status}",
|
|
2279
|
+
"success_message": "✅ {message}",
|
|
2280
|
+
"failure_message": "❌ {message}",
|
|
2281
|
+
"failure_error_message": "{errorMessage}",
|
|
2282
|
+
"warning_message": "⚠️ {message}",
|
|
2283
|
+
"test_runner_failed": "❌ 테스트 실행기 실패:",
|
|
2284
|
+
"recommendations": {
|
|
2285
|
+
"add_missing_translation_keys": "일관성을 유지하기 위해 누락된 번역 키를 추가하세요.",
|
|
2286
|
+
"fix_failing_scripts": "배포 전에 실패한 스크립트 수정",
|
|
2287
|
+
"review_warning_messages": "경고 메시지 검토 및 해결",
|
|
2288
|
+
"system_ready_for_deployment": "시스템 배포 준비가 완료되었습니다."
|
|
2289
|
+
},
|
|
2290
|
+
"hardcodedTexts": {
|
|
2291
|
+
"addMissingTranslationKeys": "일관성을 유지하기 위해 누락된 번역 키를 추가하세요.",
|
|
2292
|
+
"fixFailingScripts": "배포 전에 실패한 스크립트 수정",
|
|
2293
|
+
"reviewWarningMessages": "경고 메시지 검토 및 해결",
|
|
2294
|
+
"systemReadyForDeployment": "시스템 배포 준비가 완료되었습니다."
|
|
2295
|
+
}
|
|
2296
|
+
},
|
|
2297
|
+
"testConsoleI18n": {
|
|
2298
|
+
"found_target_file": "발견된 대상 파일: {fileName}",
|
|
2299
|
+
"scanning_files_for_console_statements": "파일에서 콘솔 명령문을 검색하는 중...",
|
|
2300
|
+
"found_javascript_files": "설립하다 {count} 자바스크립트 파일.",
|
|
2301
|
+
"console_i18n_analysis_results": "콘솔 I18n 분석 결과",
|
|
2302
|
+
"total_console_statements": "총 콘솔 명령문: {count}",
|
|
2303
|
+
"translated_statements": "번역된 진술: {count}",
|
|
2304
|
+
"hardcoded_statements": "하드코딩된 명령문: {count}",
|
|
2305
|
+
"translation_coverage": "번역 범위: {percentage}%",
|
|
2306
|
+
"coverage_by_file": "파일별 적용 범위:",
|
|
2307
|
+
"file_coverage_stats": "{emoji} {fileName}: {coverage}% ({translated}/{total})",
|
|
2308
|
+
"hardcoded_console_statements": "하드코딩된 콘솔 명령문:",
|
|
2309
|
+
"file_header": "파일: {file}",
|
|
2310
|
+
"line_statement": "선 {line}: {statement}",
|
|
2311
|
+
"suggested_key": "제안된 키: {key}",
|
|
2312
|
+
"suggested_replacement": "권장 교체: {replacement}",
|
|
2313
|
+
"recommendations": "권장사항:",
|
|
2314
|
+
"recommendation_1": "1. 하드코딩된 문자열을 i18n.t() 호출로 대체합니다.",
|
|
2315
|
+
"recommendation_2": "2. 관련 번역 JSON 파일에 새 키를 추가합니다.",
|
|
2316
|
+
"recommendation_3": "3. 모든 콘솔 메시지가 사용자에게 표시되고 번역이 필요한지 확인합니다.",
|
|
2317
|
+
"recommendation_4": "4. 동적 메시지에 대해 템플릿 리터럴이나 문자열 연결을 사용하여 변수를 i18n.t()에 전달합니다.",
|
|
2318
|
+
"translation_keys_to_add": "추가할 제안된 번역 키:",
|
|
2319
|
+
"add_keys_instruction": "다음 JSON 구조를 번역 파일에 복사합니다.",
|
|
2320
|
+
"perfect_translation_coverage": "완벽한 번역 커버리지!",
|
|
2321
|
+
"all_statements_using_translation": "모든 콘솔 문은 변환 시스템을 사용하고 있습니다.",
|
|
2322
|
+
"i18n_console_translation_checker": "I18n 콘솔 번역 검사기",
|
|
2323
|
+
"script_description_line1": "이 스크립트는 모든 JavaScript 파일에서 콘솔 명령문을 검색합니다.",
|
|
2324
|
+
"script_description_line2": "번역 시스템을 사용하고 있는지 확인합니다.",
|
|
2325
|
+
"analysis_completed_in_duration": "분석 완료 {duration} 초.",
|
|
2326
|
+
"report_saved_to_path": "보고서 저장 위치: {path}",
|
|
2327
|
+
"found_hardcoded_messages": "설립하다 {count} 하드코딩된 메시지. 오류 코드 1로 종료됩니다.",
|
|
2328
|
+
"all_console_messages_use_translation": "모든 콘솔 메시지는 번역을 사용합니다. 코드 0으로 종료됩니다.",
|
|
2329
|
+
"consoleTranslationsCheck": "콘솔 번역 확인"
|
|
2330
|
+
},
|
|
2331
|
+
"translate_mismatches": {
|
|
2332
|
+
"title": "🌐 번역 도우미 {dryRun}",
|
|
2333
|
+
"separator": "=====================================",
|
|
2334
|
+
"processing_file": "📄 처리 {language}.json...",
|
|
2335
|
+
"translation_summary_title": "📊 번역 요약:",
|
|
2336
|
+
"total_translations_applied": "적용된 총 번역 수: {totalTranslations}",
|
|
2337
|
+
"run_with_apply_instruction": "💡 이 번역을 적용하려면 --apply를 사용하여 실행하세요.",
|
|
2338
|
+
"no_translation_mappings": "⚠️ 번역 매핑을 사용할 수 없습니다. {language}",
|
|
2339
|
+
"translation_applied": "✅ {key}: \"{oldValue}\" → \"{newValue}\"",
|
|
2340
|
+
"saved_translations": "💾 저장됨 {count} 번역 {filename}",
|
|
2341
|
+
"found_translatable_items": "🔍 발견됨 {count} 번역 가능한 항목",
|
|
2342
|
+
"no_automatic_translations": "✨ 자동 번역을 사용할 수 없습니다",
|
|
2343
|
+
"error_processing_file": "❌ 오류 처리 중 {filename}: {errorMessage}",
|
|
2344
|
+
"coverage_report_title": "📊 번역 범위 보고서",
|
|
2345
|
+
"coverage_report_separator": "===============================",
|
|
2346
|
+
"file_header": "📄 {filename}:",
|
|
2347
|
+
"total_keys": "총 키: {total}",
|
|
2348
|
+
"translated_keys": "번역됨: {translated}",
|
|
2349
|
+
"untranslated_markers": "번역되지 않은 마커: {untranslated}",
|
|
2350
|
+
"contains_english": "영어 포함: {hasEnglish}",
|
|
2351
|
+
"coverage_percentage": "적용 범위: {coverage}%",
|
|
2352
|
+
"error_general": "❌ 오류:",
|
|
2353
|
+
"use_help": "사용법 정보를 보려면 --help를 사용하세요."
|
|
2354
|
+
},
|
|
2355
|
+
"cleaningUpReportFiles": "이전 보고서 파일을 정리하는 중...",
|
|
2356
|
+
"couldNotDelete": "삭제할 수 없습니다. {file}: {error}",
|
|
2357
|
+
"deletedOldReportFiles": "삭제됨 {count} 이전 보고서 파일.",
|
|
2358
|
+
"errorCleaningUpReports": "보고서 정리 오류: {error}",
|
|
2359
|
+
"noOldReportFilesToDelete": "삭제할 이전 보고서 파일이 없습니다.",
|
|
2360
|
+
"reportFilesPreserved": "보고서 파일이 보존됩니다.",
|
|
2361
|
+
"reportSaveFailed": "보고서를 다음 위치에 저장하지 못했습니다. {reportPath}",
|
|
2362
|
+
"reportSaved": "보고서 저장 위치: {reportPath}"
|
|
2363
|
+
},
|
|
2364
|
+
"ui": {
|
|
2365
|
+
"autoDetectedI18nDirectory": "자동 감지된 i18n 디렉토리: {path}",
|
|
2366
|
+
"executingCommand": "명령 실행: {command}",
|
|
2367
|
+
"unknownCommand": "알 수 없는 명령: {command}",
|
|
2368
|
+
"errorExecutingCommand": "명령 실행 중 오류 발생: {error}",
|
|
2369
|
+
"errorLoadingTranslationFile": "'에 대한 번역 파일을 로드하는 중 오류가 발생했습니다.{language}': {error}",
|
|
2370
|
+
"errorSavingLanguagePreference": "언어 환경설정을 저장하는 중에 오류가 발생했습니다. {error}",
|
|
2371
|
+
"noActiveReadlineInterface": "사용 가능한 활성 readline 인터페이스가 없습니다.",
|
|
2372
|
+
"uiLanguageUpdated": "UI 언어가 다음으로 업데이트되었습니다. {language}",
|
|
2373
|
+
"selectOptionPrompt": "옵션을 선택하세요:",
|
|
2374
|
+
"pressEnterToReturn": "Enter를 눌러 주 메뉴로 돌아가세요...",
|
|
2375
|
+
"detectedSourceDirectory": "감지된 소스 디렉터리: {sourceDir}",
|
|
2376
|
+
"detectedI18nDirectory": "i18n 디렉토리가 감지되었습니다: {directory}",
|
|
2377
|
+
"toolkitTitle": "i18ntk - 엔터프라이즈 i18n 관리 툴킷",
|
|
2378
|
+
"versionInfo": "버전: {version}",
|
|
2379
|
+
"releaseDate": "출시일: {date}",
|
|
2380
|
+
"maintainer": "유지관리자: {maintainer}",
|
|
2381
|
+
"nodeVersion": "Node.js: {version}",
|
|
2382
|
+
"license": "특허: {license}",
|
|
2383
|
+
"whatsNew": "✨ v의 새로운 기능{version}:",
|
|
2384
|
+
"changeItem": "{change}",
|
|
2385
|
+
"documentation": "📚 문서: {url}",
|
|
2386
|
+
"issues": "🐛 문제: {url}",
|
|
2387
|
+
"versionInfoUnavailable": "i18ntk 버전 정보를 알 수 없음",
|
|
2388
|
+
"versionInfoError": "오류: {error}"
|
|
2389
|
+
},
|
|
2390
|
+
"validateLanguagePurity": {
|
|
2391
|
+
"phrase_debug_tools": "디버그 도구",
|
|
2392
|
+
"phrase_settings": "설정",
|
|
2393
|
+
"phrase_configuration": "구성",
|
|
2394
|
+
"phrase_invalid_choice": "잘못된 선택",
|
|
2395
|
+
"phrase_please_select": "선택해주세요",
|
|
2396
|
+
"phrase_back_to_main_menu": "메인 메뉴로 돌아가기",
|
|
2397
|
+
"phrase_error": "오류",
|
|
2398
|
+
"phrase_warning": "경고",
|
|
2399
|
+
"phrase_success": "성공",
|
|
2400
|
+
"phrase_failed": "실패한",
|
|
2401
|
+
"phrase_loading": "로드 중",
|
|
2402
|
+
"phrase_saving": "절약",
|
|
2403
|
+
"phrase_full_system_debug": "전체 시스템 디버그",
|
|
2404
|
+
"phrase_configuration_debug": "구성 디버그",
|
|
2405
|
+
"phrase_translation_debug": "번역 디버그",
|
|
2406
|
+
"phrase_performance_debug": "성능 디버그",
|
|
2407
|
+
"phrase_admin_pin_setup": "관리자 핀 설정",
|
|
2408
|
+
"phrase_enter_admin_pin": "관리자 핀 입력",
|
|
2409
|
+
"phrase_confirm_admin_pin": "관리자 핀 확인",
|
|
2410
|
+
"phrase_authentication_failed": "인증 실패",
|
|
2411
|
+
"phrase_access_denied": "접근 불가",
|
|
2412
|
+
"phrase_security_log": "보안 로그",
|
|
2413
|
+
"language_german": "독일 사람",
|
|
2414
|
+
"language_french": "프랑스 국민",
|
|
2415
|
+
"language_spanish": "스페인 사람",
|
|
2416
|
+
"language_russian": "러시아인",
|
|
2417
|
+
"language_japanese": "일본어",
|
|
2418
|
+
"language_chinese": "중국인",
|
|
2419
|
+
"validator_title": "🔍 언어 순도 검사기",
|
|
2420
|
+
"validating_file": "📄 유효성 검사 중 {language}.json ({name})...",
|
|
2421
|
+
"valid_file_message": "✅ 유효함 - 언어 순도 위반 없음",
|
|
2422
|
+
"invalid_file_message": "❌ 유효하지 않음 - {count} 위반 사항이 발견되었습니다.",
|
|
2423
|
+
"no_validation_rules": "언어에 대해 정의된 유효성 검사 규칙이 없습니다. {language}",
|
|
2424
|
+
"error_reading_file": "파일 읽기 오류: {errorMessage}",
|
|
2425
|
+
"issue_forbidden_marker": "금지된 마커가 포함되어 있습니다: {marker}",
|
|
2426
|
+
"issue_english_phrase": "영어 문구 포함: \"{phrase}\"",
|
|
2427
|
+
"issue_english_words": "영어 단어가 포함되어 있습니다: {words}",
|
|
2428
|
+
"issue_missing_cyrillic": "긴 텍스트에는 러시아어의 키릴 문자가 포함되어야 합니다.",
|
|
2429
|
+
"issue_missing_japanese": "긴 텍스트에는 일본어 문자가 포함되어야 합니다.",
|
|
2430
|
+
"issue_missing_chinese": "긴 텍스트에는 한자가 포함되어야 합니다.",
|
|
2431
|
+
"summary_title": "📊 검증 요약",
|
|
2432
|
+
"overall_results_header": "📋 전체 결과:",
|
|
2433
|
+
"total_files_validated": "검증된 총 파일 수: {count}",
|
|
2434
|
+
"valid_files": "유효한 파일: {count}",
|
|
2435
|
+
"invalid_files": "잘못된 파일: {count}",
|
|
2436
|
+
"total_violations": "총 위반 수: {count}",
|
|
2437
|
+
"violations_by_file_header": "❌ 파일별 위반:"
|
|
2438
|
+
},
|
|
2439
|
+
"workflow": {
|
|
2440
|
+
"title": "워크플로우 관리",
|
|
2441
|
+
"description": "i18n 워크플로를 관리합니다.",
|
|
2442
|
+
"select_workflow_file": "실행할 워크플로 파일을 선택하세요.",
|
|
2443
|
+
"no_workflow_files": "워크플로 디렉터리에 워크플로 파일이 없습니다.",
|
|
2444
|
+
"invalid_selection": "선택이 잘못되었습니다. 워크플로 파일에 해당하는 번호를 입력하세요.",
|
|
2445
|
+
"workflow_execution_started": "워크플로 시작: {workflowName}",
|
|
2446
|
+
"workflow_execution_completed": "워크플로 완료됨: {workflowName}",
|
|
2447
|
+
"workflow_execution_failed": "워크플로 실패: {workflowName} - {error}",
|
|
2448
|
+
"workflow_cancelled": "워크플로 실행이 취소되었습니다.",
|
|
2449
|
+
"press_enter_to_continue": "계속하려면 Enter를 누르세요!",
|
|
2450
|
+
"starting": "🚀 워크플로 시작 중...",
|
|
2451
|
+
"completed": "✅ 워크플로가 성공적으로 완료되었습니다!",
|
|
2452
|
+
"checkReports": "📄 자세한 내용은 보고서를 확인하세요.",
|
|
2453
|
+
"exitingCompleted": "📝 워크플로가 완료되었습니다. 종료 중...",
|
|
2454
|
+
"summary": {
|
|
2455
|
+
"title": "📋 WORKFLOW SUMMARY",
|
|
2456
|
+
"separator": "===================",
|
|
2457
|
+
"completedAt": "🕐 워크플로 완료 시간: {timestamp}",
|
|
2458
|
+
"initialViolations": "📊 초기 위반: {count}",
|
|
2459
|
+
"finalViolations": "📉 최종 위반: {count}",
|
|
2460
|
+
"totalFixes": "🔧 적용된 총 수정 사항: {count}",
|
|
2461
|
+
"improvement": "📈 개선: {percentage}%",
|
|
2462
|
+
"stepResults": "📝 STEP RESULTS:",
|
|
2463
|
+
"stepDetail": "{number}. {status} {stepName}",
|
|
2464
|
+
"violations": "위반: {count}",
|
|
2465
|
+
"fixesApplied": "적용된 수정사항: {count}",
|
|
2466
|
+
"nextSteps": "💡 NEXT STEPS:",
|
|
2467
|
+
"congratulations": "🎉 축하합니다! 이제 모든 로케일 파일이 완벽한 언어 순도를 갖습니다!",
|
|
2468
|
+
"cicdIntegration": "✅ CI/CD 파이프라인에 유효성 검사기를 통합하는 것을 고려해보세요",
|
|
2469
|
+
"automatedChecks": "✅ 새로운 번역에 대한 자동 검사 설정",
|
|
2470
|
+
"greatProgress": "🎯 큰 발전! 대부분의 문제가 해결되었습니다.",
|
|
2471
|
+
"manualReview": "🔍 나머지 위반 사항을 수동으로 검토",
|
|
2472
|
+
"addMappings": "🌐 극단적인 경우에 대한 번역 매핑을 더 추가하는 것을 고려해보세요.",
|
|
2473
|
+
"goodProgress": "📈 좋은 진전이 있었지만 더 많은 작업이 필요했습니다.",
|
|
2474
|
+
"expandMappings": "🔧 자동 번역 매핑 확장",
|
|
2475
|
+
"professionalReview": "👥 복잡한 번역의 수동 검토를 고려하세요",
|
|
2476
|
+
"runAgain": "🔄 더 많은 매핑을 추가한 후 워크플로를 다시 실행하세요.",
|
|
2477
|
+
"limitedProgress": "⚠️ 진행이 제한됩니다. 수동 개입이 필요할 수 있습니다.",
|
|
2478
|
+
"reviewMappings": "🔍 번역 매핑을 검토하고 누락된 매핑을 추가하세요.",
|
|
2479
|
+
"professionalServices": "👥 전문 번역 서비스를 고려해보세요",
|
|
2480
|
+
"checkIssues": "🔧 로케일 파일의 시스템적인 문제를 확인하세요",
|
|
2481
|
+
"success": "✅",
|
|
2482
|
+
"warning": "⚠️"
|
|
2483
|
+
}
|
|
2484
|
+
},
|
|
2485
|
+
"consoleI18nTester": {
|
|
2486
|
+
"found_target_file": "대상 파일을 찾았습니다.",
|
|
2487
|
+
"scanning_files_for_console_statements": "콘솔 명령문을 위한 파일 스캔",
|
|
2488
|
+
"found_javascript_files": "자바스크립트 파일을 찾았습니다.",
|
|
2489
|
+
"console_i18n_analysis_results": "콘솔 i18n 분석 결과",
|
|
2490
|
+
"total_console_statements": "총 콘솔 문",
|
|
2491
|
+
"translated_statements": "번역된 명세서",
|
|
2492
|
+
"hardcoded_statements": "하드코딩된 문",
|
|
2493
|
+
"translation_coverage": "번역 범위",
|
|
2494
|
+
"coverage_by_file": "파일별 적용",
|
|
2495
|
+
"file_coverage_stats": "파일 범위 통계",
|
|
2496
|
+
"hardcoded_console_statements": "하드코딩된 콘솔 문",
|
|
2497
|
+
"file_header": "파일 헤더",
|
|
2498
|
+
"line_statement": "라인 문",
|
|
2499
|
+
"suggested_key": "추천 키",
|
|
2500
|
+
"suggested_replacement": "교체 제안",
|
|
2501
|
+
"recommendations": "권장사항",
|
|
2502
|
+
"recommendation_1": "권고사항 1",
|
|
2503
|
+
"recommendation_2": "권고사항 2",
|
|
2504
|
+
"recommendation_3": "권고사항 3",
|
|
2505
|
+
"recommendation_4": "권고사항 4",
|
|
2506
|
+
"translation_keys_to_add": "추가할 번역 키",
|
|
2507
|
+
"add_keys_instruction": "키 추가 지침",
|
|
2508
|
+
"perfect_translation_coverage": "완벽한 번역 범위",
|
|
2509
|
+
"all_statements_using_translation": "번역을 사용하는 모든 진술",
|
|
2510
|
+
"i18n_console_translation_checker": "I18n 콘솔 번역 검사기",
|
|
2511
|
+
"script_description_line1": "스크립트 설명 줄1",
|
|
2512
|
+
"script_description_line2": "스크립트 설명 줄2",
|
|
2513
|
+
"analysis_completed_in_duration": "기간 내에 분석 완료",
|
|
2514
|
+
"report_saved_to_path": "보고서가 경로에 저장됨",
|
|
2515
|
+
"found_hardcoded_messages": "하드코딩된 메시지를 찾았습니다.",
|
|
2516
|
+
"all_console_messages_use_translation": "모든 콘솔 메시지는 번역을 사용합니다."
|
|
2517
|
+
},
|
|
2518
|
+
"exportTranslations": {
|
|
2519
|
+
"createdDirectory": "생성된 디렉토리",
|
|
2520
|
+
"foundFiles": "발견된 파일",
|
|
2521
|
+
"createdTemplate": "템플릿이 생성되었습니다.",
|
|
2522
|
+
"skippedExisting": "기존 항목을 건너뛰었습니다.",
|
|
2523
|
+
"title": "제목",
|
|
2524
|
+
"creatingTemplates": "템플릿 만들기",
|
|
2525
|
+
"summary": "요약",
|
|
2526
|
+
"summaryLanguages": "요약 언어",
|
|
2527
|
+
"summaryFilesPerLanguage": "언어별 요약 파일",
|
|
2528
|
+
"summaryTotalFiles": "요약 총 파일 수",
|
|
2529
|
+
"success": "성공",
|
|
2530
|
+
"location": "위치",
|
|
2531
|
+
"nextSteps": "다음 단계"
|
|
2532
|
+
},
|
|
2533
|
+
"dashboard": {
|
|
2534
|
+
"title": "제목",
|
|
2535
|
+
"overview": "개요"
|
|
2536
|
+
},
|
|
2537
|
+
"auth": {
|
|
2538
|
+
"title": "제목",
|
|
2539
|
+
"email": "이메일",
|
|
2540
|
+
"password": "비밀번호",
|
|
2541
|
+
"signIn": "로그인",
|
|
2542
|
+
"forgotPassword": "비밀번호를 잊으셨나요?",
|
|
2543
|
+
"signUp": "가입"
|
|
2544
|
+
},
|
|
2545
|
+
"checkUsage": {
|
|
2546
|
+
"usage_analysis_failed": "사용량 분석에 실패했습니다."
|
|
2547
|
+
},
|
|
2548
|
+
"completeTranslations": {
|
|
2549
|
+
"warning_could_not_parse_filepa": "경고: 파일 경로를 구문 분석할 수 없습니다. {filePath}"
|
|
2550
|
+
},
|
|
2551
|
+
"pressEnterToContinue": "계속하려면 Enter를 누르세요...",
|
|
2552
|
+
"status": {
|
|
2553
|
+
"exitingCompleted": "워크플로가 완료되었습니다. 종료 중..."
|
|
2554
|
+
},
|
|
2555
|
+
"prompt": {
|
|
2556
|
+
"yesTokens": [
|
|
2557
|
+
"와이",
|
|
2558
|
+
"예"
|
|
2559
|
+
],
|
|
2560
|
+
"noTokens": [
|
|
2561
|
+
"N",
|
|
2562
|
+
"아니요"
|
|
2563
|
+
]
|
|
2564
|
+
},
|
|
2565
|
+
"translate": {
|
|
2566
|
+
"title": "자동 번역",
|
|
2567
|
+
"sourceDirectory": {
|
|
2568
|
+
"title": "소스 로케일 디렉토리",
|
|
2569
|
+
"currentProject": "현재 프로젝트: {dir}",
|
|
2570
|
+
"accepted": "허용됨: 절대 경로 또는 현재 프로젝트에 대한 상대 경로입니다.",
|
|
2571
|
+
"localeRootExample": "./locales (그런 다음 소스 언어 선택: en)",
|
|
2572
|
+
"folderHint": "폴더에는 JSON 파일이 직접 포함될 수도 있고 ./locales/en과 같은 언어 폴더가 포함될 수도 있습니다.",
|
|
2573
|
+
"defaultNotFound": "기본 디렉터리를 찾을 수 없습니다: {dir}",
|
|
2574
|
+
"enterExisting": "JSON 로케일 파일이 있는 기존 디렉터리를 입력하세요.",
|
|
2575
|
+
"directoryNotFound": "디렉토리를 찾을 수 없습니다: {dir}",
|
|
2576
|
+
"enterFolderExample": "기존 폴더(예: ./locales/en)를 입력합니다.",
|
|
2577
|
+
"notDirectory": "디렉토리가 아님: {dir}",
|
|
2578
|
+
"using": "소스 디렉터리 사용: {dir}"
|
|
2579
|
+
},
|
|
2580
|
+
"targetLanguages": {
|
|
2581
|
+
"title": "대상 언어",
|
|
2582
|
+
"allConfigured": "a) 구성된 모든 대상 언어: {languages}",
|
|
2583
|
+
"noneConfigured": "a) 구성된 모든 대상 언어: 구성된 언어 없음",
|
|
2584
|
+
"enterCodes": "또는 하나 이상의 쉼표/공백으로 구분된 언어 코드를 입력하세요.",
|
|
2585
|
+
"sourceExcluded": "소스 언어 \"{lang}\"는 자동으로 제외됩니다.",
|
|
2586
|
+
"noneSelected": "유효한 도착어를 선택하지 않았습니다. 중단하는 중입니다.",
|
|
2587
|
+
"configureHint": ".i18ntk-config에서 defaultLanguages를 구성하거나 대상 코드를 수동으로 입력하세요.",
|
|
2588
|
+
"selected": "대상 언어: {languages}"
|
|
2589
|
+
},
|
|
2590
|
+
"protection": {
|
|
2591
|
+
"title": "보호된 용어 및 키"
|
|
2592
|
+
},
|
|
2593
|
+
"common": {
|
|
2594
|
+
"default": "기본: {value}",
|
|
2595
|
+
"examples": "예:",
|
|
2596
|
+
"exampleValue": "예: {value}",
|
|
2597
|
+
"examplesInline": "예: {examples}",
|
|
2598
|
+
"pressEnterDefault": "기본값을 사용하려면 Enter를 누르세요.",
|
|
2599
|
+
"usingDefault": "기본값 사용: {value}"
|
|
2600
|
+
},
|
|
2601
|
+
"sourceLanguage": {
|
|
2602
|
+
"title": "소스 언어 코드",
|
|
2603
|
+
"hint": "이는 소스 JSON 값의 언어와 일치해야 합니다.",
|
|
2604
|
+
"using": "소스 언어 사용: {lang}",
|
|
2605
|
+
"invalid": "언어 코드가 잘못되었습니다. 2개 이상의 문자를 사용하세요(예: en, de, fr)."
|
|
2606
|
+
},
|
|
2607
|
+
"files": {
|
|
2608
|
+
"title": "어떤 파일을 번역해야 합니까?",
|
|
2609
|
+
"all": "a) 모든 JSON 파일({count}: {files})",
|
|
2610
|
+
"choicePrompt": "선택 [a/전체 또는 파일 번호]:",
|
|
2611
|
+
"invalidChoice": "선택이 잘못되었습니다. 중단하는 중입니다."
|
|
2612
|
+
},
|
|
2613
|
+
"dryRun": {
|
|
2614
|
+
"previewFor": "'에 대한 테스트 실행 미리보기{lang}\"..."
|
|
2615
|
+
},
|
|
2616
|
+
"confirm": {
|
|
2617
|
+
"proceed": "실제 번역을 진행하시겠습니까?",
|
|
2618
|
+
"yesNoPrompt": "[예]예 / [아니요]아니요:",
|
|
2619
|
+
"cancelled": "번역이 취소되었습니다."
|
|
2620
|
+
},
|
|
2621
|
+
"run": {
|
|
2622
|
+
"translatingTo": "\"로 번역{lang}\"...",
|
|
2623
|
+
"failedFor": "'에 실패했습니다.{lang}\": {error}"
|
|
2624
|
+
},
|
|
2625
|
+
"summary": {
|
|
2626
|
+
"title": "요약:",
|
|
2627
|
+
"complete": "번역 완료!"
|
|
2628
|
+
},
|
|
2629
|
+
"nonInteractive": {
|
|
2630
|
+
"useDirect": "비대화형 모드. 대신 직접 CLI를 사용하세요."
|
|
2631
|
+
},
|
|
2632
|
+
"errors": {
|
|
2633
|
+
"sourceDirectoryNotFound": "소스 로케일 디렉토리를 찾을 수 없습니다: {dir}"
|
|
2634
|
+
}
|
|
2635
|
+
}
|
|
2636
|
+
}
|