i18ntk 1.0.0
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 +401 -0
- package/LICENSE +21 -0
- package/README.md +507 -0
- package/dev/README.md +37 -0
- package/dev/debug/README.md +30 -0
- package/dev/debug/complete-console-translations.js +295 -0
- package/dev/debug/console-key-checker.js +408 -0
- package/dev/debug/console-translations.js +335 -0
- package/dev/debug/debugger.js +408 -0
- package/dev/debug/export-missing-keys.js +432 -0
- package/dev/debug/final-normalize.js +236 -0
- package/dev/debug/find-extra-keys.js +68 -0
- package/dev/debug/normalize-locales.js +153 -0
- package/dev/debug/refactor-locales.js +240 -0
- package/dev/debug/reorder-locales.js +85 -0
- package/dev/debug/replace-hardcoded-console.js +378 -0
- package/docs/INSTALLATION.md +449 -0
- package/docs/README.md +222 -0
- package/docs/TODO_ROADMAP.md +279 -0
- package/docs/api/API_REFERENCE.md +377 -0
- package/docs/api/COMPONENTS.md +492 -0
- package/docs/api/CONFIGURATION.md +651 -0
- package/docs/api/NPM_PUBLISHING_GUIDE.md +434 -0
- package/docs/debug/DEBUG_README.md +30 -0
- package/docs/debug/DEBUG_TOOLS.md +494 -0
- package/docs/development/AGENTS.md +351 -0
- package/docs/development/DEVELOPMENT_RULES.md +165 -0
- package/docs/development/DEV_README.md +37 -0
- package/docs/release-notes/RELEASE_NOTES_v1.0.0.md +173 -0
- package/docs/release-notes/RELEASE_NOTES_v1.6.0.md +141 -0
- package/docs/release-notes/RELEASE_NOTES_v1.6.1.md +185 -0
- package/docs/release-notes/RELEASE_NOTES_v1.6.3.md +199 -0
- package/docs/reports/ANALYSIS_README.md +17 -0
- package/docs/reports/CONSOLE_MISMATCH_BUG_REPORT_v1.5.0.md +181 -0
- package/docs/reports/SIZING_README.md +18 -0
- package/docs/reports/SUMMARY_README.md +18 -0
- package/docs/reports/TRANSLATION_BUG_REPORT_v1.5.0.md +129 -0
- package/docs/reports/USAGE_README.md +18 -0
- package/docs/reports/VALIDATION_README.md +18 -0
- package/locales/de/auth.json +3 -0
- package/locales/de/common.json +16 -0
- package/locales/de/pagination.json +6 -0
- package/locales/en/auth.json +3 -0
- package/locales/en/common.json +16 -0
- package/locales/en/pagination.json +6 -0
- package/locales/es/auth.json +3 -0
- package/locales/es/common.json +16 -0
- package/locales/es/pagination.json +6 -0
- package/locales/fr/auth.json +3 -0
- package/locales/fr/common.json +16 -0
- package/locales/fr/pagination.json +6 -0
- package/locales/ru/auth.json +3 -0
- package/locales/ru/common.json +16 -0
- package/locales/ru/pagination.json +6 -0
- package/main/i18ntk-analyze.js +625 -0
- package/main/i18ntk-autorun.js +461 -0
- package/main/i18ntk-complete.js +494 -0
- package/main/i18ntk-init.js +686 -0
- package/main/i18ntk-manage.js +848 -0
- package/main/i18ntk-sizing.js +557 -0
- package/main/i18ntk-summary.js +671 -0
- package/main/i18ntk-usage.js +1282 -0
- package/main/i18ntk-validate.js +762 -0
- package/main/ui-i18n.js +332 -0
- package/package.json +152 -0
- package/scripts/fix-missing-translation-keys.js +214 -0
- package/scripts/verify-package.js +168 -0
- package/ui-locales/de.json +637 -0
- package/ui-locales/en.json +688 -0
- package/ui-locales/es.json +637 -0
- package/ui-locales/fr.json +637 -0
- package/ui-locales/ja.json +637 -0
- package/ui-locales/ru.json +637 -0
- package/ui-locales/zh.json +637 -0
- package/utils/admin-auth.js +317 -0
- package/utils/admin-cli.js +353 -0
- package/utils/admin-pin.js +409 -0
- package/utils/detect-language-mismatches.js +454 -0
- package/utils/i18n-helper.js +128 -0
- package/utils/maintain-language-purity.js +433 -0
- package/utils/native-translations.js +478 -0
- package/utils/security.js +384 -0
- package/utils/test-complete-system.js +356 -0
- package/utils/test-console-i18n.js +402 -0
- package/utils/translate-mismatches.js +571 -0
- package/utils/validate-language-purity.js +531 -0
|
@@ -0,0 +1,637 @@
|
|
|
1
|
+
{
|
|
2
|
+
"language": {
|
|
3
|
+
"title": "🌍 语言选择",
|
|
4
|
+
"separator": "============================================================",
|
|
5
|
+
"current": "当前语言: {language}",
|
|
6
|
+
"available": "可用语言:",
|
|
7
|
+
"prompt": "请选择语言 (输入0取消): ",
|
|
8
|
+
"cancelled": "语言选择已取消。",
|
|
9
|
+
"changed": "语言已更改为: {language}",
|
|
10
|
+
"invalid": "选择无效。请重试。",
|
|
11
|
+
"changeTitle": "🌍 更改界面语言",
|
|
12
|
+
"invalidSelection": "❌ 选择无效。请重试。"
|
|
13
|
+
},
|
|
14
|
+
"menu": {
|
|
15
|
+
"title": "🌐 国际化管理菜单",
|
|
16
|
+
"separator": "============================================================",
|
|
17
|
+
"options": {
|
|
18
|
+
"init": "🚀 初始化新语言",
|
|
19
|
+
"analyze": "🔍 分析翻译",
|
|
20
|
+
"validate": "✅ 验证翻译",
|
|
21
|
+
"usage": "📊 检查键使用情况",
|
|
22
|
+
"complete": "🎯 完成翻译(100% 覆盖)",
|
|
23
|
+
"sizing": "📏 分析大小",
|
|
24
|
+
"workflow": "🔄 运行完整流程",
|
|
25
|
+
"status": "📋 显示项目状态",
|
|
26
|
+
"delete": "🗑️ 删除所有报告",
|
|
27
|
+
"language": "🌍 更改界面语言",
|
|
28
|
+
"settings": "⚙️ 配置",
|
|
29
|
+
"help": "❓ 帮助",
|
|
30
|
+
"debug": "🔧 调试工具",
|
|
31
|
+
"exit": "🚪 退出"
|
|
32
|
+
},
|
|
33
|
+
"goodbye": "👋 再见!",
|
|
34
|
+
"invalidChoice": "❌ 选择无效。请选择0-13之间的数字。",
|
|
35
|
+
"returning": "🔄 返回主菜单...",
|
|
36
|
+
"invalidOption": "❌ 选项无效。请重试。"
|
|
37
|
+
},
|
|
38
|
+
"init": {
|
|
39
|
+
"warnings": {
|
|
40
|
+
"noPackageJson": "⚠️ 当前目录未找到package.json"
|
|
41
|
+
},
|
|
42
|
+
"suggestions": {
|
|
43
|
+
"noFramework": "💡 未检测到i18n框架。考虑安装:",
|
|
44
|
+
"installFramework": "💡 安装框架: npm install react-i18next"
|
|
45
|
+
},
|
|
46
|
+
"frameworks": {
|
|
47
|
+
"react": " - React: react-i18next",
|
|
48
|
+
"vue": " - Vue: vue-i18n",
|
|
49
|
+
"i18next": " - i18next: i18next",
|
|
50
|
+
"nuxt": " - Nuxt: @nuxtjs/i18n",
|
|
51
|
+
"svelte": " - Svelte: svelte-i18n"
|
|
52
|
+
},
|
|
53
|
+
"errors": {
|
|
54
|
+
"packageJsonRead": "❌ 读取package.json时出错",
|
|
55
|
+
"noFramework": "❌ 未找到支持的i18n框架"
|
|
56
|
+
},
|
|
57
|
+
"creatingSourceDirectory": "[ZH] 📁 Creating source directory: {{dir}}",
|
|
58
|
+
"creatingSourceLanguageDirectory": "[ZH] 📁 Creating source language directory: {{dir}}",
|
|
59
|
+
"createdSampleTranslationFile": "[ZH] 📄 Created sample translation file: {{file}}",
|
|
60
|
+
"adminPinSeparator": "[ZH] ==================================================",
|
|
61
|
+
"adminPinDescription1": "[ZH] Admin PIN protection adds security for sensitive operations like:",
|
|
62
|
+
"adminPinDescription2": "[ZH] • Deleting translation files",
|
|
63
|
+
"adminPinDescription3": "[ZH] • Modifying project configuration",
|
|
64
|
+
"adminPinDescription4": "[ZH] • Running administrative commands",
|
|
65
|
+
"settingUpAdminPin": "[ZH] 📝 Setting up admin PIN...",
|
|
66
|
+
"pinMustBe4To8Digits": "[ZH] ❌ PIN must be 4-8 digits only. Please try again.",
|
|
67
|
+
"pinsDoNotMatch": "[ZH] ❌ PINs do not match. Please try again.",
|
|
68
|
+
"adminPinSetupSuccess": "[ZH] ✅ Admin PIN has been set up successfully!",
|
|
69
|
+
"adminProtectionEnabled": "[ZH] 🔒 Admin protection is now enabled for sensitive operations.",
|
|
70
|
+
"errorSettingUpAdminPin": "[ZH] ❌ Error setting up admin PIN: {error}",
|
|
71
|
+
"continuingWithoutAdminPin": "[ZH] ⚠️ Continuing without admin PIN protection.",
|
|
72
|
+
"skippingAdminPinSetup": "[ZH] ⏭️ Skipping admin PIN setup. You can set it up later using the settings.",
|
|
73
|
+
"adminPinSetupOptional": "[ZH] 🔐 ADMIN PIN SETUP (OPTIONAL)",
|
|
74
|
+
"adminPinSetupPrompt": "[ZH] Would you like to set up an admin PIN? (y/N): ",
|
|
75
|
+
"enterAdminPin": "[ZH] Enter admin PIN (4-8 digits): ",
|
|
76
|
+
"confirmAdminPin": "[ZH] Confirm admin PIN: ",
|
|
77
|
+
"languageSelectionTitle": "[ZH] 🌍 I18N LANGUAGE SELECTION",
|
|
78
|
+
"defaultLanguages": "[ZH] 📋 Default languages: {languages}",
|
|
79
|
+
"enterLanguageCodes": "[ZH] Enter language codes (comma-separated) or press Enter for defaults: ",
|
|
80
|
+
"warningInvalidLanguageCodes": "[ZH] ⚠️ Warning: Invalid language codes ignored: {languages}",
|
|
81
|
+
"initializationTitle": "[ZH] 🚀 I18N INITIALIZATION",
|
|
82
|
+
"sourceDirectoryLabel": "[ZH] 📁 Source directory: {dir}",
|
|
83
|
+
"sourceLanguageLabel": "[ZH] 🔤 Source language: {language}",
|
|
84
|
+
"initializingProject": "[ZH] 🚀 Initializing i18n project...",
|
|
85
|
+
"warningProceedingWithoutFramework": "[ZH] ⚠️ Warning: Proceeding without proper i18n framework.",
|
|
86
|
+
"translationFilesCreatedWarning": "[ZH] 🔧 Translation files will be created but may not work without proper i18n setup.",
|
|
87
|
+
"noTargetLanguagesSpecified": "[ZH] ❌ No target languages specified. Exiting.",
|
|
88
|
+
"targetLanguages": "[ZH] 🎯 Target languages: {languages}",
|
|
89
|
+
"foundSourceFiles": "[ZH] 📄 Found {count} source files: {files}",
|
|
90
|
+
"processingLanguage": "[ZH] 🔄 Processing {language} ({name})...",
|
|
91
|
+
"fileProcessingResult": "[ZH] ✅ {file}: {translated}/{total} ({percentage}%)",
|
|
92
|
+
"overallProgress": "[ZH] 📊 Overall: {translated}/{total} ({percentage}%)",
|
|
93
|
+
"initializationSummaryTitle": "[ZH] 📊 INITIALIZATION SUMMARY",
|
|
94
|
+
"languageSummary": "[ZH] {icon} {name} ({code}): {percentage}% complete",
|
|
95
|
+
"languageFiles": "[ZH] 📄 Files: {count}",
|
|
96
|
+
"languageKeys": "[ZH] 🔤 Keys: {translated}/{total}",
|
|
97
|
+
"languageMissing": "[ZH] ⚠️ Missing: {count}",
|
|
98
|
+
"initializationCompletedSuccessfully": "[ZH] 🎉 Initialization completed successfully!",
|
|
99
|
+
"nextStepsTitle": "[ZH] 📋 Next steps:",
|
|
100
|
+
"nextStep1": "[ZH] 1. Run: npm run i18n:analyze",
|
|
101
|
+
"nextStep2": "[ZH] 2. Translate missing values in language files",
|
|
102
|
+
"nextStep3": "[ZH] 3. Run: npm run i18n:validate",
|
|
103
|
+
"detectedI18nFrameworks": "[ZH] ✅ Detected i18n framework(s): {{frameworks}}",
|
|
104
|
+
"continueWithoutI18nPrompt": "[ZH] 🤔 Continue without i18n framework? (y/N): ",
|
|
105
|
+
"initializationFailed": "[ZH] ❌ Initialization failed: {{error}}"
|
|
106
|
+
},
|
|
107
|
+
"workflow": {
|
|
108
|
+
"starting": "🚀 开始执行流程...",
|
|
109
|
+
"completed": "✅ 流程执行成功完成!",
|
|
110
|
+
"checkReports": "📋 查看报告详情",
|
|
111
|
+
"exitingCompleted": "📝 流程完成,正在退出..."
|
|
112
|
+
},
|
|
113
|
+
"operations": {
|
|
114
|
+
"completed": "✅ 操作成功完成!",
|
|
115
|
+
"cancelled": "❌ 操作已取消。",
|
|
116
|
+
"settings": {
|
|
117
|
+
"title": "⚙️ 设置管理",
|
|
118
|
+
"separator": "============================================================"
|
|
119
|
+
},
|
|
120
|
+
"init": {
|
|
121
|
+
"title": "🚀 初始化翻译"
|
|
122
|
+
},
|
|
123
|
+
"analyze": {
|
|
124
|
+
"title": "📊 分析翻译"
|
|
125
|
+
},
|
|
126
|
+
"validate": {
|
|
127
|
+
"title": "✅ 验证翻译"
|
|
128
|
+
},
|
|
129
|
+
"complete": {
|
|
130
|
+
"deletingOldReport": "🗑️ 删除旧的使用报告以进行新分析",
|
|
131
|
+
"generatingFreshAnalysis": "🔄 生成新的使用分析...",
|
|
132
|
+
"couldNotGenerate": "⚠️ 无法生成使用分析。使用常见缺失键。",
|
|
133
|
+
"reportNotFound": "⚠️ 未找到使用报告。正在生成新的分析...",
|
|
134
|
+
"foundMissingKeys": "🔍 使用分析中发现缺失键 {count} 个",
|
|
135
|
+
"couldNotParse": "⚠️ 无法解析使用报告。使用常见缺失键。",
|
|
136
|
+
"title": "🎯 完成翻译",
|
|
137
|
+
"separator": "============================================================",
|
|
138
|
+
"sourceDir": "📁 源目录: {sourceDir}",
|
|
139
|
+
"sourceLanguage": "🔤 源语言: {sourceLanguage}",
|
|
140
|
+
"dryRunMode": "🧪 试运行模式 - 不会修改任何文件",
|
|
141
|
+
"languages": "🎯 目标语言: {languages}",
|
|
142
|
+
"addingMissingKeys": "➕ 正在添加缺失的翻译键到文件...",
|
|
143
|
+
"processing": "🔄 正在处理 {language}...",
|
|
144
|
+
"addedKeys": "✅ 添加了 {count} 个键",
|
|
145
|
+
"changeDetails": "📝 {file}: {key}",
|
|
146
|
+
"noChangesNeeded": "✅ {language} 无需更改",
|
|
147
|
+
"summaryTitle": "📊 完成摘要",
|
|
148
|
+
"totalChanges": "📝 总更改数: {totalChanges}",
|
|
149
|
+
"languagesProcessed": "🌐 已处理语言数: {languagesProcessed}",
|
|
150
|
+
"missingKeysAdded": "➕ 新增缺失键: {missingKeysAdded}",
|
|
151
|
+
"nextStepsTitle": "📋 后续步骤",
|
|
152
|
+
"nextStep1": "1. 运行使用分析:",
|
|
153
|
+
"nextStep2": "2. 验证翻译:",
|
|
154
|
+
"nextStep3": "3. 分析完整性:",
|
|
155
|
+
"allKeysAvailable": "🎉 所有翻译键均已可用!",
|
|
156
|
+
"runWithoutDryRun": "💡 运行时去掉 --dry-run 以应用更改"
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"admin": {
|
|
160
|
+
"authRequired": "🔐 需要管理员身份验证",
|
|
161
|
+
"invalidPin": "❌ PIN码无效。访问被拒绝。",
|
|
162
|
+
"authSuccess": "✅ 身份验证成功"
|
|
163
|
+
},
|
|
164
|
+
"status": {
|
|
165
|
+
"generating": "\n📊 正在生成状态摘要...",
|
|
166
|
+
"completed": "✅ 状态摘要生成成功!",
|
|
167
|
+
"exitingCompleted": "\n📝 状态摘要完成,正在退出...",
|
|
168
|
+
"i18nSetup": "🌐 国际化设置"
|
|
169
|
+
},
|
|
170
|
+
"common": {
|
|
171
|
+
"errorExiting": "\n📝 出错,正在退出...",
|
|
172
|
+
"welcome": "👋 欢迎使用国际化管理工具包!",
|
|
173
|
+
"success": "✅ 操作成功完成!",
|
|
174
|
+
"error": "❌ 发生错误!"
|
|
175
|
+
},
|
|
176
|
+
"delete": {
|
|
177
|
+
"options": {
|
|
178
|
+
"title": "🗑️ 删除选项",
|
|
179
|
+
"all": "1. 删除所有报告",
|
|
180
|
+
"keepLast3": "2. 保留最近3份报告",
|
|
181
|
+
"cancel": "0. 取消"
|
|
182
|
+
},
|
|
183
|
+
"noFiles": "📂 无可删除文件。"
|
|
184
|
+
},
|
|
185
|
+
"checkUsage": {
|
|
186
|
+
"help_message": "\n国际化使用分析器\n\n用法: node i18ntk-usage.js [选项]\n\n选项:\n --source-dir <dir> 扫描源目录 (默认: ./src)\n --i18n-dir <dir> 国际化目录 (默认: ./src/locales)\n --output-report 生成详细报告\n --output-dir <dir> 报告输出目录 (默认: ./reports)\n --help 显示帮助\n\n示例:\n node i18ntk-usage.js --output-report\n node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-usage.js --output-dir=./analysis --output-report\n",
|
|
187
|
+
"source_directory_thissourcedir": "📁 源目录: {sourceDir}",
|
|
188
|
+
"i18n_directory_thisi18ndir": "🌐 国际化目录: {i18nDir}",
|
|
189
|
+
"failed_to_parse_filename_error": "⚠️ 无法解析 {fileName}: {errorMessage}",
|
|
190
|
+
"analyzing_source_files": "🔍 正在分析源文件...",
|
|
191
|
+
"found_files_in_source": "📂 源目录中找到 {numFiles} 个文件",
|
|
192
|
+
"found_thisusedkeyssize_unique_": "🎯 找到 {usedKeysSize} 个唯一使用键",
|
|
193
|
+
"total_key_usages_totalkeysfoun": "📊 键总使用次数: {totalKeysFound}",
|
|
194
|
+
"loading_available_translation_": "📋 正在加载可用翻译键...",
|
|
195
|
+
"found_thisavailablekeyssize_av": "✅ 找到 {availableKeysSize} 个可用键",
|
|
196
|
+
"title": "🔍 国际化使用分析",
|
|
197
|
+
"message": "开始使用分析...",
|
|
198
|
+
"n": "\n",
|
|
199
|
+
"usage_analysis_results": "📊 使用分析结果",
|
|
200
|
+
"source_files_scanned_thisfileu": "📄 源文件扫描数量: {fileUsageSize}",
|
|
201
|
+
"available_translation_keys_thi": "🔤 可用翻译键数量: {availableKeysSize}",
|
|
202
|
+
"used_translation_keys_thisused": "🎯 使用的翻译键数量: {usedKeysSize}",
|
|
203
|
+
"dynamic_keys_detected_dynamick": "🔄 检测到动态键数量: {dynamicKeysLength}",
|
|
204
|
+
"unused_keys_unusedkeyslength": "❌ 未使用的键数量: {unusedKeysLength}",
|
|
205
|
+
"missing_keys_missingkeyslength": "⚠️ 缺失键数量: {missingKeysLength}",
|
|
206
|
+
"translation_completeness_title": "🌍 翻译完整性:",
|
|
207
|
+
"language_completeness_stats": " {language}: 完整度 {completeness}% ({translated}/{total})",
|
|
208
|
+
"n_sample_unused_keys": "\n📋 未使用键示例:",
|
|
209
|
+
"key": "❌ {key}",
|
|
210
|
+
"and_unusedkeyslength_5_more": "... 以及更多 {count} 个",
|
|
211
|
+
"n_sample_missing_keys": "\n📋 缺失键示例:",
|
|
212
|
+
"and_missingkeyslength_5_more": "... 以及更多 {count} 个缺失键",
|
|
213
|
+
"n_generating_detailed_report": "\n📄 正在生成详细报告...",
|
|
214
|
+
"report_saved_reportpath": "📄 报告已保存: {reportPath}",
|
|
215
|
+
"n_recommendations": "\n💡 建议:",
|
|
216
|
+
"consider_removing_unused_trans": "🗑️ 考虑删除未使用的翻译键",
|
|
217
|
+
"add_missing_translation_keys_t": "⚠️ 添加缺失的翻译键以避免运行时错误",
|
|
218
|
+
"review_dynamic_keys_manually_t": "🔄 手动检查动态键以确保所有变体存在",
|
|
219
|
+
"all_translation_keys_are_prope": "🎉 所有翻译键均已正确使用!",
|
|
220
|
+
"n_next_steps": "\n📋 后续步骤:",
|
|
221
|
+
"1_review_the_analysis_results": "1. 查看以上分析结果",
|
|
222
|
+
"2_check_the_detailed_report_fo": "2. 检查详细报告中的具体文件和键",
|
|
223
|
+
"2_run_with_outputreport_for_de": "2. 使用 --output-report 运行以获取详细报告",
|
|
224
|
+
"3_remove_unused_keys_or_add_mi": "3. 删除未使用键或添加缺失键",
|
|
225
|
+
"4_rerun_analysis_to_verify_imp": "4. 重新运行分析以验证改进",
|
|
226
|
+
"usage_analysis_failed": "❌ 使用分析失败:"
|
|
227
|
+
},
|
|
228
|
+
"validateTranslations": {
|
|
229
|
+
"invalidEmailFormat": "❌ 邮箱格式无效",
|
|
230
|
+
"help_message": "\n国际化翻译验证器\n\n用法: node i18ntk-validate.js [选项]\n\n选项:\n --language <lang> 验证指定语言 (默认: 全部)\n --source-dir <dir> 源目录 (默认: ./src/locales)\n --strict 启用严格模式(警告视为错误)\n --help 显示此帮助\n\n管理员命令:\n --setup-admin 设置管理员PIN保护\n --disable-admin 禁用管理员PIN保护\n --admin-status 显示管理员保护状态\n\n示例:\n node i18ntk-validate.js\n node i18ntk-validate.js --language=de\n node i18ntk-validate.js --source-dir=./locales --strict\n node i18ntk-validate.js --setup-admin\n",
|
|
231
|
+
"title": "🔍 国际化翻译验证",
|
|
232
|
+
"message": "=",
|
|
233
|
+
"deletedOldReport": "🗑️ 删除旧的验证报告",
|
|
234
|
+
"sourceDirectory": "📁 源目录: {{dir}}",
|
|
235
|
+
"source_language_thisconfigsour": "🔤 源语言: {{sourceLanguage}}",
|
|
236
|
+
"strictMode": "⚙️ 严格模式: {{mode}}",
|
|
237
|
+
"noTargetLanguages": "❌ 未找到目标语言。",
|
|
238
|
+
"validatingLanguages": "🎯 正在验证语言: {{langs}}",
|
|
239
|
+
"validatingLanguage": "\n🔄 正在验证 {{lang}}...",
|
|
240
|
+
"filesCount": " 📄 文件数: {count}",
|
|
241
|
+
"keysCount": " 🔤 键数: {count}",
|
|
242
|
+
"missingFilesCount": " ❌ 缺失文件数: {count}",
|
|
243
|
+
"syntaxErrorsCount": " 🐛 语法错误数: {count}",
|
|
244
|
+
"translationPercentage": " 📊 翻译完成度: {{percentage}}% ({{translated}}/{{total}})",
|
|
245
|
+
"n_validation_summary": "\n📊 验证摘要",
|
|
246
|
+
"total_errors": "❌ 错误总数: {count}",
|
|
247
|
+
"total_warnings": "⚠️ 警告总数: {count}",
|
|
248
|
+
"n_errors": "\n❌ 错误:",
|
|
249
|
+
"n_warnings": "\n⚠️ 警告:",
|
|
250
|
+
"n_recommendations": "\n📋 建议",
|
|
251
|
+
"fix_errors_first": "🔧 先修复错误:",
|
|
252
|
+
"1_resolve_missing_files_and_sy": "1. 解决缺失文件和语法错误",
|
|
253
|
+
"2_fix_structural_inconsistenci": "2. 修复结构不一致",
|
|
254
|
+
"3_complete_missing_translation": "3. 补全缺失翻译",
|
|
255
|
+
"4_rerun_validation": "4. 重新运行验证",
|
|
256
|
+
"address_warnings": "⚠️ 处理警告:",
|
|
257
|
+
"review_warnings": "1. 查看上述警告",
|
|
258
|
+
"2_consider_running_with_strict": "2. 考虑使用 --strict 进行更严格验证",
|
|
259
|
+
"all_validations_passed": "🎉 所有验证通过!",
|
|
260
|
+
"consider_running_usage_analysi": "💡 考虑运行使用分析以查找未使用的键",
|
|
261
|
+
"validation_failed": "❌ 验证失败:"
|
|
262
|
+
},
|
|
263
|
+
"analyzeTranslations": {
|
|
264
|
+
"referenceLanguageFiles": "📋 参考语言文件",
|
|
265
|
+
"analyzingLanguage": "🔄 正在分析语言: {language}",
|
|
266
|
+
"reportTitle": "📊 翻译分析报告",
|
|
267
|
+
"generated": "📅 生成时间",
|
|
268
|
+
"status": "状态: {translated}/{total} 已翻译 ({percentage}%)",
|
|
269
|
+
"filesAnalyzed": "已分析文件: {analyzed}/{total}",
|
|
270
|
+
"keysNeedingTranslation": "需要翻译的键: {count}",
|
|
271
|
+
"fileBreakdown": "文件详细信息:",
|
|
272
|
+
"statusFileMissing": "状态: 文件缺失",
|
|
273
|
+
"sourceKeys": "源键:{count}",
|
|
274
|
+
"translation": "翻译:{translated}/{total} ({percentage}%)",
|
|
275
|
+
"structure": "结构:{status}",
|
|
276
|
+
"consistent": "一致",
|
|
277
|
+
"inconsistent": "不一致",
|
|
278
|
+
"missingKeys": "缺失键: {count}",
|
|
279
|
+
"extraKeys": "额外键: {count}",
|
|
280
|
+
"issues": "问题: {count}",
|
|
281
|
+
"issueType": {
|
|
282
|
+
"not_translated": "未翻译: {count}",
|
|
283
|
+
"empty_value": "空值: {count}",
|
|
284
|
+
"partial_translation": "部分翻译: {count}",
|
|
285
|
+
"same_as_source": "与源相同: {count}"
|
|
286
|
+
},
|
|
287
|
+
"key": "键",
|
|
288
|
+
"english": "英语",
|
|
289
|
+
"needsTranslation": "需要翻译",
|
|
290
|
+
"andMoreKeys": "... 以及其他 {count} 个键",
|
|
291
|
+
"problematic_no": "未检测到大小问题",
|
|
292
|
+
"problematic_yes": "检测到潜在大小问题",
|
|
293
|
+
"summary": "\n📊 分析摘要",
|
|
294
|
+
"keysToTranslate": "需要翻译的键",
|
|
295
|
+
"help_message": "\n国际化翻译分析器\n\n用法: node i18ntk-analyze.js [选项]\n\n选项:\n --language <lang> 分析指定语言 (默认: 全部)\n --source-dir <dir> 源目录 (默认: ./src/locales)\n --output-reports 生成详细报告\n --output-dir <dir> 报告输出目录 (默认: ./reports)\n --help 显示此帮助\n\n示例:\n node i18ntk-analyze.js --output-reports\n node i18ntk-analyze.js --language=de --output-reports\n node i18ntk-analyze.js --source-dir=./locales --output-dir=./analysis\n",
|
|
296
|
+
"starting": "🔍 开始翻译分析...",
|
|
297
|
+
"noLanguages": "⚠️ 未找到目标语言。",
|
|
298
|
+
"foundLanguages": "📋 发现 {count} 种语言待分析: {{languages}}",
|
|
299
|
+
"analyzing": "\n🔄 正在分析 {{language}}...",
|
|
300
|
+
"completed": "✅ {{language}} 分析完成",
|
|
301
|
+
"progress": " 进度: {{percentage}}% ({{translatedKeys}}/{{totalKeys}} 键)",
|
|
302
|
+
"reportSaved": " 报告已保存: {{reportPath}}",
|
|
303
|
+
"finished": "\n✅ 分析成功完成!",
|
|
304
|
+
"error": "❌ 分析失败"
|
|
305
|
+
},
|
|
306
|
+
"completeTranslations": {
|
|
307
|
+
"warning_could_not_parse_filepa": "⚠️ 无法解析文件: {filePath}"
|
|
308
|
+
},
|
|
309
|
+
"hardcodedTexts": {
|
|
310
|
+
"securityUnknownCommandArg": "安全:未知命令参数",
|
|
311
|
+
"securityUnknownConfigKey": "安全:未知配置键",
|
|
312
|
+
"translationNotFound": "未找到键的翻译",
|
|
313
|
+
"noSourceFilesFound": "未找到要分析的源文件。",
|
|
314
|
+
"usageAnalysisCompleted": "✅ 使用分析成功完成",
|
|
315
|
+
"analyzingTranslationCompleteness": "🔍 分析翻译完整性...",
|
|
316
|
+
"analysisCompletedSuccessfully": "分析成功完成",
|
|
317
|
+
"foundTranslationFiles": "🔍 找到 {count} 个翻译文件",
|
|
318
|
+
"processedFiles": "📊 已处理 {processedFiles}/{totalFiles} 个文件...",
|
|
319
|
+
"i18nDirectoryNotFound": "未找到 i18n 目录:{i18nDir}",
|
|
320
|
+
"noTranslationLanguagesFound": "未找到翻译语言。",
|
|
321
|
+
"failedToAnalyzeFile": "分析 {filePath} 失败:{error}",
|
|
322
|
+
"failedToAnalyzeLanguage": "分析语言 {language} 失败:{error}",
|
|
323
|
+
"translationCompletenessAnalysisFailed": "翻译完整性分析失败:{error}",
|
|
324
|
+
"invalidChoiceSelectRange": "无效选择。请选择 1 到 {max} 之间的数字。",
|
|
325
|
+
"errorGeneratingStatusSummary": "生成状态摘要时出错:{error}",
|
|
326
|
+
"debugToolNotFound": "未找到调试工具:{tool}",
|
|
327
|
+
"errorRunningDebugTool": "运行调试工具时出错:{error}",
|
|
328
|
+
"autoDetectedI18nDirectory": "自动检测到 i18n 目录:{directory}",
|
|
329
|
+
"stepRunning": "🔄 正在运行步骤: {stepName}",
|
|
330
|
+
"executingCommand": "执行命令:{command}",
|
|
331
|
+
"unknownCommand": "未知命令:{command}",
|
|
332
|
+
"errorExecutingCommand": "执行命令时出错:{error}",
|
|
333
|
+
"mainDebuggerSystemDiagnostics": "主调试器 - 系统诊断",
|
|
334
|
+
"consoleTranslationsCheck": "控制台翻译检查",
|
|
335
|
+
"exportMissingKeys": "🔑 导出缺失键 - 导出缺失的翻译键",
|
|
336
|
+
"replaceHardcodedConsole": "🔄 替换硬编码控制台 - 转换硬编码消息",
|
|
337
|
+
"consoleKeyChecker": "✅ 控制台键检查器 - 验证控制台翻译键",
|
|
338
|
+
"debugLogs": "📝 调试日志 - 查看最近的调试日志",
|
|
339
|
+
"backToMainMenu": "← 返回主菜单",
|
|
340
|
+
"runningDebugTool": "🔧 正在运行 {displayName}...",
|
|
341
|
+
"recentDebugLogs": "📝 最近的调试日志",
|
|
342
|
+
"noDebugLogsFound": "📭 未找到调试日志。",
|
|
343
|
+
"debugLogsDirectoryNotFound": "📭 未找到调试日志目录。",
|
|
344
|
+
"errorReadingDebugLogs": "❌ 读取调试日志时出错: {error}",
|
|
345
|
+
"debugLogSelectPrompt": "选择要查看的日志 (1-{count}) 或0返回: ",
|
|
346
|
+
"debugLogError": "读取调试日志时出错:",
|
|
347
|
+
"missingRequiredFile": "❌ 缺少必需的文件/目录: {file}",
|
|
348
|
+
"runInitializationFirst": "🔧 请先运行初始化: node i18ntk-init.js",
|
|
349
|
+
"initializationCheckPassed": "✅ 初始化检查通过",
|
|
350
|
+
"runningStep": "🔄 正在运行: {stepName}",
|
|
351
|
+
"commandStep": " 命令: {command}",
|
|
352
|
+
"stepCompleted": "✅ {stepName} 已完成",
|
|
353
|
+
"stepCompletedWithDuration": "✅ {stepName} 在 {duration}ms 内完成",
|
|
354
|
+
"stepFailed": "❌ {stepName} 失败: {error}",
|
|
355
|
+
"stepFailedWithDetails": "❌ {stepName} 失败:\n 错误: {error}",
|
|
356
|
+
"requiredStepFailed": "🛑 必需步骤失败。停止执行。",
|
|
357
|
+
"optionalStepFailed": "⚠️ 可选步骤失败。继续执行...",
|
|
358
|
+
"startingAutoRunWorkflow": "🚀 启动自动运行工作流",
|
|
359
|
+
"workflowIncludes": "📋 工作流包含 {stepCount} 个步骤:",
|
|
360
|
+
"stepListItem": " {index}. {stepName} {required}",
|
|
361
|
+
"startingExecution": "⏱️ 开始执行...",
|
|
362
|
+
"workflowStopped": "🛑 由于必需步骤失败,工作流已停止。",
|
|
363
|
+
"workflowCompleted": "🎉 工作流已完成!",
|
|
364
|
+
"runningSelectedSteps": "🎯 运行选定的步骤",
|
|
365
|
+
"invalidStepNumber": "❌ 无效的步骤编号: {stepNum}",
|
|
366
|
+
"executionReport": "📊 执行报告",
|
|
367
|
+
"successfulSteps": "✅ 成功: {successful}",
|
|
368
|
+
"failedSteps": "❌ 失败: {failed}",
|
|
369
|
+
"requiredFailedSteps": "🔴 必需失败: {requiredFailed}",
|
|
370
|
+
"stepDetails": "📋 步骤详情:",
|
|
371
|
+
"stepResult": " {status} {required} {step}{duration}",
|
|
372
|
+
"stepError": " 错误: {error}",
|
|
373
|
+
"reportSaved": "💾 报告已保存至: {reportPath}",
|
|
374
|
+
"overallStatus": "📊 总体状态: {status}",
|
|
375
|
+
"customSettingsConfiguration": "🔧 自定义设置配置",
|
|
376
|
+
"pressEnterForDefaults": "按Enter使用默认值或输入新值:",
|
|
377
|
+
"settingsUpdatedSuccessfully": "✅ 设置更新成功!",
|
|
378
|
+
"errorConfiguringSettings": "❌ 配置设置时出错: {error}",
|
|
379
|
+
"autoRunScriptTitle": "🤖 I18N 自动运行脚本",
|
|
380
|
+
"usageInstructions": "使用方法:",
|
|
381
|
+
"runAllSteps": " node auto-run.js # 运行所有步骤",
|
|
382
|
+
"configureFirst": " node auto-run.js --config # 首先配置设置",
|
|
383
|
+
"runSpecificSteps": " node auto-run.js --steps 1,2,3 # 运行特定步骤",
|
|
384
|
+
"showHelp": " node auto-run.js --help # 显示此帮助",
|
|
385
|
+
"availableSteps": "可用步骤:",
|
|
386
|
+
"stepListHelp": " {index}. {stepName} {required}",
|
|
387
|
+
"examplesTitle": "示例:",
|
|
388
|
+
"configurationComplete": "🚀 配置完成!现在可以使用以下命令运行自动运行器:",
|
|
389
|
+
"runAutoRunner": " node auto-run.js",
|
|
390
|
+
"configurationFailed": "❌ 配置失败: {error}",
|
|
391
|
+
"noValidStepNumbers": "❌ 未提供有效的步骤编号",
|
|
392
|
+
"autoRunFailed": "❌ 自动运行失败: {error}",
|
|
393
|
+
"selectOptionPrompt": "选择选项 (0-13): ",
|
|
394
|
+
"selectDebugToolPrompt": "选择调试工具 (0-6): ",
|
|
395
|
+
"pressEnterToContinue": "📝 按Enter继续...",
|
|
396
|
+
"selectLogPrompt": "选择要查看的日志 (1-{count}) 或0返回: "
|
|
397
|
+
},
|
|
398
|
+
"sizing": {
|
|
399
|
+
"analyzing_file_sizes": "正在分析文件大小...",
|
|
400
|
+
"analyzing_translation_content": "正在分析翻译内容...",
|
|
401
|
+
"failed_to_parse_language_error": "无法解析 {{language}}: {{errorMessage}}",
|
|
402
|
+
"generating_size_comparisons": "正在生成大小比较...",
|
|
403
|
+
"no_languages_found_for_comparison": "未找到用于比较的语言",
|
|
404
|
+
"sizing_analysis_results": "\n📊 大小分析结果",
|
|
405
|
+
"file_sizes_title": "📁 文件大小",
|
|
406
|
+
"file_sizes_header": "语言\t\t大小 (KB)\t\t行数\t\t字符数",
|
|
407
|
+
"file_size_row": "{{lang}}\t\t{{sizeKB}} KB\t\t{{lines}} 行\t\t{{characters}} 字符",
|
|
408
|
+
"language_statistics_title": "📈 语言统计",
|
|
409
|
+
"language_stats_header": "语言\t\t键数\t\t总字符数\t\t平均长度\t\t最大长度\t\t空键",
|
|
410
|
+
"language_stats_row": "{{lang}}\t\t{{totalKeys}} 键\t\t{{totalCharacters}} 字符\t\t{{averageKeyLength}} 平均\t\t{{maxKeyLength}} 最大\t\t{{emptyKeys}} 空",
|
|
411
|
+
"size_variations_title": "⚖️ 大小变化",
|
|
412
|
+
"size_variations_header": "语言\t\t字符差异\t\t百分比\t\t有问题",
|
|
413
|
+
"size_variation_row": "{{lang}}\t\t{{characterDifference}}\t\t{{percentageDifference}}%\t\t{{problematic}}",
|
|
414
|
+
"recommendations_title": "💡 建议",
|
|
415
|
+
"recommendation_item": "{{index}}. {{recommendation}}",
|
|
416
|
+
"generating_detailed_report": "\n📄 正在生成详细大小报告...",
|
|
417
|
+
"report_saved_to": "报告已保存至: {{reportPath}}",
|
|
418
|
+
"csv_report_saved_to": "CSV报告已保存至: {{csvPath}}",
|
|
419
|
+
"starting_i18n_sizing_analysis": "🔍 开始国际化大小分析...",
|
|
420
|
+
"source_directory": "源目录: {{sourceDir}}",
|
|
421
|
+
"no_translation_files_found": "❌ 未找到翻译文件",
|
|
422
|
+
"found_languages": "找到的语言: {{languages}}",
|
|
423
|
+
"analysis_completed": "✅ 分析在 {{duration}} 毫秒内完成",
|
|
424
|
+
"analysis_failed": "❌ 大小分析失败: {{errorMessage}}",
|
|
425
|
+
"problematic_no": "未检测到大小问题",
|
|
426
|
+
"problematic_yes": "检测到潜在的大小问题"
|
|
427
|
+
},
|
|
428
|
+
"summary": {
|
|
429
|
+
"i18nSummaryReportGenerator": "🔧 I18N 摘要报告生成器",
|
|
430
|
+
"keysInFiles": " 📝 {files} 个文件中有 {keys} 个键",
|
|
431
|
+
"checkingInconsistentKeys": "🔍 检查各语言间不一致的键...",
|
|
432
|
+
"analyzingFolder": "🔍 正在分析文件夹: {folder}",
|
|
433
|
+
"foundLanguages": "📋 发现 {count} 种语言: {languages}",
|
|
434
|
+
"referenceLanguageFiles": "📁 参考语言文件: {files}",
|
|
435
|
+
"analyzingLanguage": "🔄 正在分析语言: {language}",
|
|
436
|
+
"overview": "📊 概览",
|
|
437
|
+
"noIssuesFound": "未发现问题 - 您的i18n配置看起来很棒!",
|
|
438
|
+
"allFilesConsistent": "所有翻译文件在所有语言中都是一致的。",
|
|
439
|
+
"recommendations": "建议",
|
|
440
|
+
"nextSteps": "下一步",
|
|
441
|
+
"nextStep1": "查看摘要报告以了解不一致或缺失的键。",
|
|
442
|
+
"nextStep2": "修复报告中突出显示的任何问题。",
|
|
443
|
+
"nextStep3": "验证翻译的语言纯度和完整性。",
|
|
444
|
+
"nextStep4": "进行更改后重新运行摘要报告。",
|
|
445
|
+
"inconsistentKeys": "发现不一致的键:",
|
|
446
|
+
"missingKeys": " 缺失键: {keys}{more}",
|
|
447
|
+
"extraKeys": " 额外键: {keys}{more}",
|
|
448
|
+
"createMissingFiles": "为所有语言创建缺失文件。",
|
|
449
|
+
"addContentToEmptyFiles": "向空翻译文件添加内容。",
|
|
450
|
+
"fixMalformedFiles": "修复格式错误的翻译文件。",
|
|
451
|
+
"removeDuplicateKeys": "从翻译文件中删除重复键。",
|
|
452
|
+
"synchronizeKeys": "在所有语言中同步键。",
|
|
453
|
+
"splitLargeFiles": "拆分大型翻译文件以便更好地维护。",
|
|
454
|
+
"addMoreLanguages": "向您的项目添加更多语言。",
|
|
455
|
+
"languagesCount": "🌍 语言数量:{count}",
|
|
456
|
+
"totalFiles": "📁 总文件数:{count}",
|
|
457
|
+
"totalKeys": "🔤 总键数:{count}",
|
|
458
|
+
"avgKeysPerLanguage": "📊 每种语言平均键数:{count}",
|
|
459
|
+
"languagesBreakdown": "语言细分",
|
|
460
|
+
"languageBreakdown": "📍 {language}: {files} 个文件,{keys} 个键",
|
|
461
|
+
"fileStructure": "文件结构",
|
|
462
|
+
"fileKeys": "📄 {file}: {keys} 个键",
|
|
463
|
+
"missingInLanguages": " ⚠️ 缺失于: {languages}",
|
|
464
|
+
"noIssuesConsole": "✅ 未发现问题 - 您的i18n配置看起来很棒!(控制台)",
|
|
465
|
+
"reportSaved": "📄 摘要报告已保存: {reportPath}",
|
|
466
|
+
"reportSaveFailed": "❌ 无法保存摘要报告: {reportPath}",
|
|
467
|
+
"sourceDirectory": "源目录:{dir}",
|
|
468
|
+
"reportTitle": "I18N 摘要报告",
|
|
469
|
+
"generated": "生成时间:{timestamp}",
|
|
470
|
+
"couldNotReadFile": "[ZH] ⚠️ Could not read file: {filePath}",
|
|
471
|
+
"couldNotParseJSFile": "[ZH] ⚠️ Could not parse JS/TS file: {filePath}",
|
|
472
|
+
"errorReadingFile": "[ZH] ⚠️ Error reading file {filePath}: {error}",
|
|
473
|
+
"noLanguageDirectoriesFound": "[ZH] ❌ No language directories found!",
|
|
474
|
+
"issuesFound": "[ZH] 🚨 ISSUES FOUND",
|
|
475
|
+
"missingFiles": "[ZH] ❌ Missing Files:",
|
|
476
|
+
"emptyFiles": "[ZH] 📭 Empty Files:",
|
|
477
|
+
"malformedFiles": "[ZH] 💥 Malformed Files:",
|
|
478
|
+
"duplicateKeys": "[ZH] 🔄 Duplicate Keys:",
|
|
479
|
+
"couldNotFindI18nDirectory": "[ZH] ❌ Could not find i18n directory. Please specify with --source-dir",
|
|
480
|
+
"sourceDirectoryDoesNotExist": "[ZH] ❌ Source directory does not exist: {sourceDir}",
|
|
481
|
+
"generatingSummaryReport": "[ZH] 📄 Generating summary report...",
|
|
482
|
+
"cleaningUpReportFiles": "[ZH] 🗑️ Cleaning up report files...",
|
|
483
|
+
"couldNotDelete": "[ZH] ⚠️ Could not delete {file}: {error}",
|
|
484
|
+
"noOldReportFilesToDelete": "[ZH] 📄 No old report files to delete.",
|
|
485
|
+
"errorCleaningUpReports": "[ZH] ⚠️ Error cleaning up reports: {error}",
|
|
486
|
+
"reportFilesPreserved": "[ZH] 📁 Report files preserved as requested.",
|
|
487
|
+
"analysisComplete": "[ZH] 📊 ANALYSIS COMPLETE",
|
|
488
|
+
"analyzedLanguages": "[ZH] ✅ Analyzed {count} languages",
|
|
489
|
+
"processedFiles": "[ZH] ✅ Processed {count} files",
|
|
490
|
+
"foundTranslationKeys": "[ZH] ✅ Found {count} translation keys",
|
|
491
|
+
"errorDuringAnalysis": "[ZH] ❌ Error during analysis: {error}",
|
|
492
|
+
"deletedOldReportFiles": "[ZH] ✅ Deleted {count} old report files.",
|
|
493
|
+
"helpTitle": "[ZH] 🔧 I18N SUMMARY REPORT GENERATOR",
|
|
494
|
+
"helpDescription": "[ZH] Analyzes i18n folder structure and generates comprehensive reports",
|
|
495
|
+
"helpUsage": "[ZH] Usage: i18ntk summary [options]",
|
|
496
|
+
"helpOptions": "[ZH] Options:",
|
|
497
|
+
"helpSourceDir": "[ZH] -s, --source-dir <path> Path to i18n locales directory",
|
|
498
|
+
"helpOutput": "[ZH] -o, --output <file> Output file for the report",
|
|
499
|
+
"helpVerbose": "[ZH] -v, --verbose Show detailed output",
|
|
500
|
+
"helpKeepReports": "[ZH] --keep-reports Keep all existing report files",
|
|
501
|
+
"helpDeleteReports": "[ZH] --delete-reports Delete old report files after generation",
|
|
502
|
+
"helpHelp": "[ZH] -h, --help Show this help message",
|
|
503
|
+
"helpExamples": "[ZH] Examples:",
|
|
504
|
+
"helpExample1": "[ZH] i18ntk summary",
|
|
505
|
+
"helpExample2": "[ZH] i18ntk summary --source-dir ./src/i18n/locales",
|
|
506
|
+
"helpExample3": "[ZH] i18ntk summary --output summary.txt --verbose",
|
|
507
|
+
"helpExample4": "[ZH] i18ntk summary --output summary.txt --delete-reports",
|
|
508
|
+
"helpExample5": "[ZH] i18ntk summary --keep-reports",
|
|
509
|
+
"usageReportTitle": "[ZH] I18N USAGE ANALYSIS REPORT - Version 1.4.3",
|
|
510
|
+
"usageReportGenerated": "[ZH] Generated: {timestamp}",
|
|
511
|
+
"usageReportSourceDir": "[ZH] Source directory: {sourceDir}",
|
|
512
|
+
"usageReportI18nDir": "[ZH] I18n directory: {i18nDir}",
|
|
513
|
+
"usageReportSummary": "[ZH] SUMMARY",
|
|
514
|
+
"usageReportSourceFilesScanned": "[ZH] 📄 Source files scanned: {count}",
|
|
515
|
+
"usageReportTranslationFilesFound": "[ZH] 📄 Translation files found: {count}",
|
|
516
|
+
"usageReportAvailableKeys": "[ZH] 🔤 Available translation keys: {count}",
|
|
517
|
+
"usageReportUsedKeys": "[ZH] 🎯 Used translation keys: {count}",
|
|
518
|
+
"usageReportDynamicKeys": "[ZH] 🔄 Dynamic keys detected: {count}",
|
|
519
|
+
"usageReportUnusedKeys": "[ZH] ❌ Unused keys: {count}",
|
|
520
|
+
"usageReportMissingKeys": "[ZH] ⚠️ Missing keys: {count}",
|
|
521
|
+
"usageReportNotTranslatedKeys": "[ZH] 🔄 NOT_TRANSLATED keys: {count}",
|
|
522
|
+
"usageReportTranslationCompleteness": "[ZH] TRANSLATION COMPLETENESS",
|
|
523
|
+
"usageReportLanguageCompleteness": "[ZH] 🌍 {language}: {completeness}% complete ({translated}/{total})",
|
|
524
|
+
"usageReportNotTranslatedInLanguage": "[ZH] 🔄 NOT_TRANSLATED: {count} keys",
|
|
525
|
+
"usageReportTranslationFilesDiscovered": "[ZH] TRANSLATION FILES DISCOVERED",
|
|
526
|
+
"usageReportFileInfo": "[ZH] 📄 {relativePath} ({namespace}, {type})",
|
|
527
|
+
"usageReportUnusedKeysSection": "[ZH] UNUSED TRANSLATION KEYS",
|
|
528
|
+
"usageReportUnusedKeysDescription": "[ZH] These keys exist in translation files but are not used in source code:",
|
|
529
|
+
"usageReportMoreUnusedKeys": "[ZH] ... and {count} more unused keys",
|
|
530
|
+
"usageReportMissingKeysSection": "[ZH] MISSING TRANSLATION KEYS",
|
|
531
|
+
"usageReportMissingKeysDescription": "[ZH] These keys are used in source code but missing from translation files:",
|
|
532
|
+
"usageReportUsedIn": "[ZH] 📄 Used in: {filePath}",
|
|
533
|
+
"usageReportMoreFiles": "[ZH] ... and {count} more files",
|
|
534
|
+
"usageReportDynamicKeysSection": "[ZH] DYNAMIC TRANSLATION KEYS",
|
|
535
|
+
"usageReportDynamicKeysDescription": "[ZH] These keys use dynamic patterns and need manual verification:",
|
|
536
|
+
"usageReportFileUsageBreakdown": "[ZH] FILE USAGE BREAKDOWN",
|
|
537
|
+
"usageReportFileUsage": "[ZH] 📄 {filePath} ({count} keys)",
|
|
538
|
+
"usageReportMoreFileUsage": "[ZH] ... and {count} more files",
|
|
539
|
+
"usageReportSaved": "[ZH] 📄 Report saved to: {filepath}",
|
|
540
|
+
"usageReportSaveFailed": "[ZH] ❌ Failed to save report: {error}",
|
|
541
|
+
"analysisCompletedSuccessfully": "[ZH] ✅ Analysis completed successfully",
|
|
542
|
+
"analysisFailed": "[ZH] ❌ Analysis failed: {error}",
|
|
543
|
+
"analysisFailedError": "[ZH] ❌ Analysis failed",
|
|
544
|
+
"usageReportUnusedTranslationKeys": "[ZH] UNUSED TRANSLATION KEYS",
|
|
545
|
+
"usageReportUnusedKey": "[ZH] ❌ {key}",
|
|
546
|
+
"usageReportMissingTranslationKeys": "[ZH] MISSING TRANSLATION KEYS",
|
|
547
|
+
"usageReportMissingKey": "[ZH] ⚠️ {key}",
|
|
548
|
+
"usageReportDynamicTranslationKeys": "[ZH] DYNAMIC TRANSLATION KEYS",
|
|
549
|
+
"usageReportDynamicKey": "[ZH] 🔄 {key}",
|
|
550
|
+
"unusedKeysCount": "[ZH] ❌ Unused keys: {count}",
|
|
551
|
+
"missingKeysCount": "[ZH] ⚠️ Missing keys: {count}",
|
|
552
|
+
"translationCompletenessTitle": "[ZH] \n🌍 Translation Completeness:",
|
|
553
|
+
"languageCompletenessStats": "[ZH] {language}: {completeness}% complete ({translated}/{total})",
|
|
554
|
+
"configuration": "[ZH] 🔧 Configuration:",
|
|
555
|
+
"sourceLanguage": "[ZH] Source language: {sourceLanguage}",
|
|
556
|
+
"supportedExtensions": "[ZH] Supported extensions: {extensions}",
|
|
557
|
+
"excludedFiles": "[ZH] Excluded files: {files}",
|
|
558
|
+
"foundIssues": "[ZH] ⚠️ Found {count} issues that need attention",
|
|
559
|
+
"fatalError": "[ZH] ❌ Fatal error: {error}",
|
|
560
|
+
"issuesFoundTitle": "[ZH] ISSUES FOUND",
|
|
561
|
+
"missingFilesTitle": "[ZH] ❌ Missing Files:",
|
|
562
|
+
"emptyFilesTitle": "[ZH] 📭 Empty Files:",
|
|
563
|
+
"malformedFilesTitle": "[ZH] 💥 Malformed Files:",
|
|
564
|
+
"duplicateKeysTitle": "[ZH] 🔄 Duplicate Keys:"
|
|
565
|
+
},
|
|
566
|
+
"help": {
|
|
567
|
+
"usage": "用法:node i18ntk-manage.js [选项]",
|
|
568
|
+
"interactiveMode": "交互模式:运行不带参数以启动交互式菜单",
|
|
569
|
+
"initProject": "初始化项目:node i18ntk-manage.js init",
|
|
570
|
+
"analyzeTranslations": "分析翻译:node i18ntk-manage.js analyze",
|
|
571
|
+
"validateTranslations": "验证翻译:node i18ntk-manage.js validate",
|
|
572
|
+
"checkUsage": "检查使用情况:node i18ntk-manage.js usage",
|
|
573
|
+
"showHelp": "显示帮助:node i18ntk-manage.js help",
|
|
574
|
+
"availableCommands": "可用命令:",
|
|
575
|
+
"initCommand": "init - 初始化 i18n 结构",
|
|
576
|
+
"analyzeCommand": "analyze - 分析翻译完整性",
|
|
577
|
+
"validateCommand": "validate - 验证翻译文件",
|
|
578
|
+
"usageCommand": "usage - 检查翻译键使用情况",
|
|
579
|
+
"sizingCommand": "sizing - 分析翻译大小",
|
|
580
|
+
"completeCommand": "complete - 完成缺失的翻译",
|
|
581
|
+
"summaryCommand": "summary - 生成摘要报告",
|
|
582
|
+
"debugCommand": "debug - 运行调试分析"
|
|
583
|
+
},
|
|
584
|
+
"complete": {
|
|
585
|
+
"nextStep1": "1. 检查使用分析:",
|
|
586
|
+
"nextStep2": "2. 验证翻译:",
|
|
587
|
+
"nextStep3": "3. 分析完整性:",
|
|
588
|
+
"andMore": "... 还有{count}个"
|
|
589
|
+
},
|
|
590
|
+
"usage": {
|
|
591
|
+
"analysisCompletedSuccessfully": "✅ 使用情况分析成功完成",
|
|
592
|
+
"analysisFailedError": "❌ 使用情况分析失败:",
|
|
593
|
+
"detectedSourceDirectory": "🔍 检测到源目录:",
|
|
594
|
+
"detectedI18nDirectory": "🔍 检测到i18n目录:",
|
|
595
|
+
"foundTranslationFiles": "🔍 找到{count}个翻译文件",
|
|
596
|
+
"invalidPattern": "无效模式:",
|
|
597
|
+
"patternMatchLimitReached": "文件模式匹配限制已达到:",
|
|
598
|
+
"patternExecutionFailed": "模式执行失败",
|
|
599
|
+
"failedToExtractKeys": "从以下位置提取键失败",
|
|
600
|
+
"failedToProcessFile": "处理文件失败",
|
|
601
|
+
"errorReadingI18nDirectory": "读取i18n目录错误:",
|
|
602
|
+
"notTranslatedKeysTotal": "🔄 未翻译键:{total}",
|
|
603
|
+
"reviewNotTranslatedKeys": "🔄 请检查所有语言中的{total}个未翻译键",
|
|
604
|
+
"analysisCompletedSuccessfullySimple": "\n✅ 分析成功完成",
|
|
605
|
+
"analysisFailedResult": "\n❌ 分析失败:",
|
|
606
|
+
"analysisFailedGeneral": "\n❌ 分析失败:",
|
|
607
|
+
"title": "[ZH] I18N USAGE ANALYSIS REPORT",
|
|
608
|
+
"generatedAt": "[ZH] Generated at: {timestamp}",
|
|
609
|
+
"sourceDirectory": "[ZH] Source Directory: {sourceDir}",
|
|
610
|
+
"i18nDirectory": "[ZH] I18n Directory: {i18nDir}",
|
|
611
|
+
"sourceFilesScanned": "[ZH] Source files scanned: {count}",
|
|
612
|
+
"translationFilesFound": "[ZH] Translation files found: {count}",
|
|
613
|
+
"availableKeys": "[ZH] Available translation keys: {count}",
|
|
614
|
+
"usedKeys": "[ZH] Used translation keys: {count}",
|
|
615
|
+
"dynamicKeys": "[ZH] Dynamic keys detected: {count}",
|
|
616
|
+
"unusedKeys": "[ZH] Unused translation keys: {count}",
|
|
617
|
+
"missingKeys": "[ZH] Missing translation keys: {count}",
|
|
618
|
+
"notTranslatedKeys": "[ZH] NOT_TRANSLATED keys: {count}",
|
|
619
|
+
"translationCompleteness": "[ZH] TRANSLATION COMPLETENESS",
|
|
620
|
+
"translationFilesDiscovered": "[ZH] TRANSLATION FILES DISCOVERED",
|
|
621
|
+
"unusedKeysSection": "[ZH] UNUSED TRANSLATION KEYS",
|
|
622
|
+
"unusedKeysDescription": "[ZH] These keys exist in translation files but are not used in the source code:",
|
|
623
|
+
"missingKeysSection": "[ZH] MISSING TRANSLATION KEYS",
|
|
624
|
+
"missingKeysDescription": "[ZH] These keys are used in source code but missing from translation files:",
|
|
625
|
+
"dynamicKeysSection": "[ZH] DYNAMIC TRANSLATION KEYS",
|
|
626
|
+
"dynamicKeysDescription": "[ZH] These keys are generated dynamically and may need manual verification:",
|
|
627
|
+
"fileUsageBreakdown": "[ZH] FILE USAGE BREAKDOWN",
|
|
628
|
+
"fileUsageDescription": "[ZH] Translation key usage by source file:",
|
|
629
|
+
"reportSavedTo": "[ZH] 📄 Report saved to: {reportPath}",
|
|
630
|
+
"failedToSaveReport": "[ZH] ❌ Failed to save report: {error}",
|
|
631
|
+
"analysisFailed": "[ZH] ❌ Usage analysis failed",
|
|
632
|
+
"unusedKeysCount": "[ZH] ❌ Unused keys: {count}",
|
|
633
|
+
"missingKeysCount": "[ZH] ⚠️ Missing keys: {count}",
|
|
634
|
+
"translationCompletenessTitle": "[ZH] 🌍 Translation Completeness:",
|
|
635
|
+
"languageCompletenessStats": "[ZH] {language}: {completeness}% complete ({translated}/{total})"
|
|
636
|
+
}
|
|
637
|
+
}
|