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": "🌐 МЕНЮ УПРАВЛЕНИЯ I18N",
|
|
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": "[RU] 📁 Creating source directory: {{dir}}",
|
|
58
|
+
"creatingSourceLanguageDirectory": "[RU] 📁 Creating source language directory: {{dir}}",
|
|
59
|
+
"createdSampleTranslationFile": "[RU] 📄 Created sample translation file: {{file}}",
|
|
60
|
+
"adminPinSeparator": "[RU] ==================================================",
|
|
61
|
+
"adminPinDescription1": "[RU] Admin PIN protection adds security for sensitive operations like:",
|
|
62
|
+
"adminPinDescription2": "[RU] • Deleting translation files",
|
|
63
|
+
"adminPinDescription3": "[RU] • Modifying project configuration",
|
|
64
|
+
"adminPinDescription4": "[RU] • Running administrative commands",
|
|
65
|
+
"settingUpAdminPin": "[RU] 📝 Setting up admin PIN...",
|
|
66
|
+
"pinMustBe4To8Digits": "[RU] ❌ PIN must be 4-8 digits only. Please try again.",
|
|
67
|
+
"pinsDoNotMatch": "[RU] ❌ PINs do not match. Please try again.",
|
|
68
|
+
"adminPinSetupSuccess": "[RU] ✅ Admin PIN has been set up successfully!",
|
|
69
|
+
"adminProtectionEnabled": "[RU] 🔒 Admin protection is now enabled for sensitive operations.",
|
|
70
|
+
"errorSettingUpAdminPin": "[RU] ❌ Error setting up admin PIN: {error}",
|
|
71
|
+
"continuingWithoutAdminPin": "[RU] ⚠️ Continuing without admin PIN protection.",
|
|
72
|
+
"skippingAdminPinSetup": "[RU] ⏭️ Skipping admin PIN setup. You can set it up later using the settings.",
|
|
73
|
+
"adminPinSetupOptional": "[RU] 🔐 ADMIN PIN SETUP (OPTIONAL)",
|
|
74
|
+
"adminPinSetupPrompt": "[RU] Would you like to set up an admin PIN? (y/N): ",
|
|
75
|
+
"enterAdminPin": "[RU] Enter admin PIN (4-8 digits): ",
|
|
76
|
+
"confirmAdminPin": "[RU] Confirm admin PIN: ",
|
|
77
|
+
"languageSelectionTitle": "[RU] 🌍 I18N LANGUAGE SELECTION",
|
|
78
|
+
"defaultLanguages": "[RU] 📋 Default languages: {languages}",
|
|
79
|
+
"enterLanguageCodes": "[RU] Enter language codes (comma-separated) or press Enter for defaults: ",
|
|
80
|
+
"warningInvalidLanguageCodes": "[RU] ⚠️ Warning: Invalid language codes ignored: {languages}",
|
|
81
|
+
"initializationTitle": "[RU] 🚀 I18N INITIALIZATION",
|
|
82
|
+
"sourceDirectoryLabel": "[RU] 📁 Source directory: {dir}",
|
|
83
|
+
"sourceLanguageLabel": "[RU] 🔤 Source language: {language}",
|
|
84
|
+
"initializingProject": "[RU] 🚀 Initializing i18n project...",
|
|
85
|
+
"warningProceedingWithoutFramework": "[RU] ⚠️ Warning: Proceeding without proper i18n framework.",
|
|
86
|
+
"translationFilesCreatedWarning": "[RU] 🔧 Translation files will be created but may not work without proper i18n setup.",
|
|
87
|
+
"noTargetLanguagesSpecified": "[RU] ❌ No target languages specified. Exiting.",
|
|
88
|
+
"targetLanguages": "[RU] 🎯 Target languages: {languages}",
|
|
89
|
+
"foundSourceFiles": "[RU] 📄 Found {count} source files: {files}",
|
|
90
|
+
"processingLanguage": "[RU] 🔄 Processing {language} ({name})...",
|
|
91
|
+
"fileProcessingResult": "[RU] ✅ {file}: {translated}/{total} ({percentage}%)",
|
|
92
|
+
"overallProgress": "[RU] 📊 Overall: {translated}/{total} ({percentage}%)",
|
|
93
|
+
"initializationSummaryTitle": "[RU] 📊 INITIALIZATION SUMMARY",
|
|
94
|
+
"languageSummary": "[RU] {icon} {name} ({code}): {percentage}% complete",
|
|
95
|
+
"languageFiles": "[RU] 📄 Files: {count}",
|
|
96
|
+
"languageKeys": "[RU] 🔤 Keys: {translated}/{total}",
|
|
97
|
+
"languageMissing": "[RU] ⚠️ Missing: {count}",
|
|
98
|
+
"initializationCompletedSuccessfully": "[RU] 🎉 Initialization completed successfully!",
|
|
99
|
+
"nextStepsTitle": "[RU] 📋 Next steps:",
|
|
100
|
+
"nextStep1": "[RU] 1. Run: npm run i18n:analyze",
|
|
101
|
+
"nextStep2": "[RU] 2. Translate missing values in language files",
|
|
102
|
+
"nextStep3": "[RU] 3. Run: npm run i18n:validate",
|
|
103
|
+
"detectedI18nFrameworks": "[RU] ✅ Detected i18n framework(s): {{frameworks}}",
|
|
104
|
+
"continueWithoutI18nPrompt": "[RU] 🤔 Continue without i18n framework? (y/N): ",
|
|
105
|
+
"initializationFailed": "[RU] ❌ Initialization failed: {{error}}"
|
|
106
|
+
},
|
|
107
|
+
"workflow": {
|
|
108
|
+
"starting": "🚀 Запуск рабочего процесса...",
|
|
109
|
+
"completed": "✅ Рабочий процесс успешно завершён!",
|
|
110
|
+
"checkReports": "📋 Проверьте отчёты для получения подробностей",
|
|
111
|
+
"exitingCompleted": "📝 Рабочий процесс завершён. Выход..."
|
|
112
|
+
},
|
|
113
|
+
"operations": {
|
|
114
|
+
"completed": "✅ Операция успешно завершена!",
|
|
115
|
+
"cancelled": "❌ Операция отменена.",
|
|
116
|
+
"init": {
|
|
117
|
+
"title": "🚀 Инициализировать переводы"
|
|
118
|
+
},
|
|
119
|
+
"analyze": {
|
|
120
|
+
"title": "📊 Анализировать переводы"
|
|
121
|
+
},
|
|
122
|
+
"validate": {
|
|
123
|
+
"title": "✅ Проверить переводы"
|
|
124
|
+
},
|
|
125
|
+
"settings": {
|
|
126
|
+
"title": "⚙️ УПРАВЛЕНИЕ НАСТРОЙКАМИ I18N",
|
|
127
|
+
"separator": "============================================================"
|
|
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": "🚀 Настройка i18n"
|
|
169
|
+
},
|
|
170
|
+
"common": {
|
|
171
|
+
"errorExiting": "\n📝 Произошла ошибка. Выход...",
|
|
172
|
+
"welcome": "👋 Добро пожаловать в Инструментарий управления I18n!",
|
|
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Анализатор использования I18n\n\nИспользование: node i18ntk-usage.js [опции]\n\nОпции:\n --source-dir <dir> Исходная директория для сканирования (по умолчанию: ./src)\n --i18n-dir <dir> Директория I18n (по умолчанию: ./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": "🌐 Директория I18n: {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": "🔍 АНАЛИЗ ИСПОЛЬБОВАНИЯ I18N",
|
|
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": "🔄 Генерация подробного отчёта...",
|
|
214
|
+
"report_saved_reportpath": "💾 Отчёт сохранён по пути: {reportPath}",
|
|
215
|
+
"n_recommendations": "📌 РЕКОМЕНДАЦИИ",
|
|
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": "📋 СЛЕДУЮЩИЕ ШАГИ",
|
|
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
|
+
"help_message": "\nПроверка переводов\n\nИспользование: node i18ntk-validate.js [опции]\n\nОпции:\n --source-dir <dir> Исходная директория для проверки (по умолчанию: ./src)\n --i18n-dir <dir> Директория I18n (по умолчанию: ./src/locales)\n --strict Включить строгий режим проверки\n --help Показать эту справку\n\nПримеры:\n node i18ntk-validate.js --strict\n node i18ntk-validate.js --source-dir=./app --i18n-dir=./locales\n",
|
|
230
|
+
"invalidEmailFormat": "❌ Неверный формат email: {email}",
|
|
231
|
+
"title": "🔍 ПРОВЕРКА ПЕРЕВОДОВ",
|
|
232
|
+
"message": "Запуск проверки переводов...",
|
|
233
|
+
"deletedOldReport": "🗑️ Удаление старого отчёта проверки",
|
|
234
|
+
"sourceDirectory": "📁 Исходная директория: {sourceDir}",
|
|
235
|
+
"source_language_thisconfigsour": "🔤 Исходный язык: {sourceLanguage}",
|
|
236
|
+
"strictMode": "⚠️ Строгий режим: {strictMode}",
|
|
237
|
+
"noTargetLanguages": "❌ Целевые языки не найдены",
|
|
238
|
+
"validatingLanguages": "🔄 Проверка языков: {languages}",
|
|
239
|
+
"validatingLanguage": "🔍 Проверка языка: {language}",
|
|
240
|
+
"filesCount": "📄 Количество файлов: {filesCount}",
|
|
241
|
+
"keysCount": "🔑 Количество ключей: {keysCount}",
|
|
242
|
+
"missingFilesCount": "❗ Отсутствующие файлы: {missingFilesCount}",
|
|
243
|
+
"syntaxErrorsCount": "⚠️ Ошибки синтаксиса: {syntaxErrorsCount}",
|
|
244
|
+
"translationPercentage": "📊 Процент перевода: {translationPercentage}%",
|
|
245
|
+
"n_validation_summary": "📋 СВОДКА ПРОВЕРКИ",
|
|
246
|
+
"total_errors": "❌ Всего ошибок: {totalErrors}",
|
|
247
|
+
"total_warnings": "⚠️ Всего предупреждений: {totalWarnings}",
|
|
248
|
+
"n_errors": "❌ Ошибки",
|
|
249
|
+
"n_warnings": "⚠️ Предупреждения",
|
|
250
|
+
"n_recommendations": "📌 РЕКОМЕНДАЦИИ",
|
|
251
|
+
"fix_errors_first": "1. Исправьте ошибки сначала",
|
|
252
|
+
"1_resolve_missing_files_and_sy": "2. Решите проблемы с отсутствующими файлами и синтаксисом",
|
|
253
|
+
"2_fix_structural_inconsistenci": "3. Исправьте структурные несоответствия",
|
|
254
|
+
"3_complete_missing_translation": "4. Завершите отсутствующие переводы",
|
|
255
|
+
"4_rerun_validation": "5. Повторно запустите проверку",
|
|
256
|
+
"address_warnings": "Обработайте предупреждения",
|
|
257
|
+
"review_warnings": "Проверьте предупреждения",
|
|
258
|
+
"2_consider_running_with_strict": "Рассмотрите возможность запуска в строгом режиме",
|
|
259
|
+
"all_validations_passed": "✅ Все проверки пройдены",
|
|
260
|
+
"consider_running_usage_analysi": "💡 Рассмотрите возможность запуска анализа использования",
|
|
261
|
+
"validation_failed": "❌ Проверка не удалась"
|
|
262
|
+
},
|
|
263
|
+
"analyzeTranslations": {
|
|
264
|
+
"help_message": "\nАнализ переводов\n\nИспользование: node i18ntk-analyze.js [опции]\n\nОпции:\n --source-dir <dir> Исходная директория для анализа (по умолчанию: ./src)\n --i18n-dir <dir> Директория I18n (по умолчанию: ./src/locales)\n --help Показать эту справку\n\nПримеры:\n node i18ntk-analyze.js --output-report\n node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales\n",
|
|
265
|
+
"starting": "🚀 Запуск анализа переводов...",
|
|
266
|
+
"noLanguages": "❌ Языки не найдены",
|
|
267
|
+
"foundLanguages": "🌐 Найденные языки: {languages}",
|
|
268
|
+
"analyzing": "🔍 Анализ...",
|
|
269
|
+
"referenceLanguageFiles": "📁 Файлы эталонного языка: {files}",
|
|
270
|
+
"analyzingLanguage": "🔍 Анализ языка: {language}",
|
|
271
|
+
"reportTitle": "📊 Отчёт анализа переводов для {language}",
|
|
272
|
+
"generated": "📅 Создано: {timestamp}",
|
|
273
|
+
"status": "Статус: {translated}/{total} переведено ({percentage}%)",
|
|
274
|
+
"filesAnalyzed": "Проанализировано файлов: {analyzed}/{total}",
|
|
275
|
+
"keysToTranslate": "🔑 Ключи для перевода",
|
|
276
|
+
"keysNeedingTranslation": "Ключи, требующие перевода: {count}",
|
|
277
|
+
"fileBreakdown": "РАЗБИВКА ПО ФАЙЛАМ:",
|
|
278
|
+
"statusFileMissing": "Статус: Файл отсутствует",
|
|
279
|
+
"sourceKeys": "Исходные ключи: {count}",
|
|
280
|
+
"translation": "Перевод: {translated}/{total} ({percentage}%)",
|
|
281
|
+
"structure": "Структура: {status}",
|
|
282
|
+
"consistent": "Согласованный",
|
|
283
|
+
"inconsistent": "Несогласованный",
|
|
284
|
+
"missingKeys": "Отсутствующие ключи: {count}",
|
|
285
|
+
"extraKeys": "Дополнительные ключи: {count}",
|
|
286
|
+
"issues": "Проблемы: {count}",
|
|
287
|
+
"issueType": {
|
|
288
|
+
"not_translated": "Не переведено: {count}",
|
|
289
|
+
"empty_value": "Пустое значение: {count}",
|
|
290
|
+
"partial_translation": "Частичный перевод: {count}",
|
|
291
|
+
"same_as_source": "Как в источнике: {count}"
|
|
292
|
+
},
|
|
293
|
+
"key": "Ключ",
|
|
294
|
+
"english": "Английский",
|
|
295
|
+
"needsTranslation": "ТРЕБУЕТ ПЕРЕВОДА",
|
|
296
|
+
"andMoreKeys": "... и еще {count} ключей",
|
|
297
|
+
"problematic_no": "Проблемы с размером не обнаружены",
|
|
298
|
+
"problematic_yes": "Обнаружены потенциальные проблемы с размером",
|
|
299
|
+
"completed": "✅ Анализ завершён",
|
|
300
|
+
"progress": "Прогресс: {progress}%",
|
|
301
|
+
"reportSaved": "💾 Отчёт сохранён: {reportPath}",
|
|
302
|
+
"finished": "🎉 Анализ завершён",
|
|
303
|
+
"error": "❌ Ошибка анализа: {errorMessage}",
|
|
304
|
+
"summary": "\n📊 СВОДКА АНАЛИЗА"
|
|
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": "Найдены файлы переводов",
|
|
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}мс",
|
|
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
|
+
"summary": {
|
|
399
|
+
"i18nSummaryReportGenerator": "🔧 ГЕНЕРАТОР СВОДНОГО ОТЧЁТА I18N",
|
|
400
|
+
"keysInFiles": " 📝 {keys} ключей в {files} файлах",
|
|
401
|
+
"checkingInconsistentKeys": "🔍 Проверка несогласованных ключей между языками...",
|
|
402
|
+
"reportTitle": "ОТЧЁТ ПО I18N",
|
|
403
|
+
"generated": "Создан: {timestamp}",
|
|
404
|
+
"sourceDirectory": "Исходная директория: {dir}",
|
|
405
|
+
"analyzingFolder": "Анализ папки: {folder}",
|
|
406
|
+
"foundLanguages": "📋 Найденные языки: {languages}",
|
|
407
|
+
"referenceLanguageFiles": "Файлы эталонного языка: {files}",
|
|
408
|
+
"analyzingLanguage": "Анализ языка: {language}",
|
|
409
|
+
"overview": "ОБЗОР",
|
|
410
|
+
"languagesCount": "🌍 Языки: {count}",
|
|
411
|
+
"totalFiles": "📁 Всего файлов: {count}",
|
|
412
|
+
"totalKeys": "🔤 Всего ключей: {count}",
|
|
413
|
+
"avgKeysPerLanguage": "📊 Среднее количество ключей на язык: {count}",
|
|
414
|
+
"languagesBreakdown": "РАЗБИВКА ПО ЯЗЫКАМ",
|
|
415
|
+
"languageBreakdown": "📍 {language}: {files} файлов, {keys} ключей",
|
|
416
|
+
"fileStructure": "СТРУКТУРА ФАЙЛОВ",
|
|
417
|
+
"fileKeys": "📄 {file}: {keys} ключей",
|
|
418
|
+
"missingInLanguages": " ⚠️ Отсутствует в: {languages}",
|
|
419
|
+
"noIssuesFound": "Проблем не обнаружено — ваша i18n-конфигурация отличная!",
|
|
420
|
+
"noIssuesConsole": "✅ Проблем не обнаружено — ваша i18n-конфигурация отличная! (консоль)",
|
|
421
|
+
"allFilesConsistent": "Все файлы согласованы и полные.",
|
|
422
|
+
"recommendations": "Рекомендации",
|
|
423
|
+
"nextSteps": "Следующие шаги",
|
|
424
|
+
"createMissingFiles": "Создать отсутствующие файлы для всех языков.",
|
|
425
|
+
"addContentToEmptyFiles": "Добавить содержимое в пустые файлы переводов.",
|
|
426
|
+
"fixMalformedFiles": "Исправить поврежденные файлы переводов.",
|
|
427
|
+
"removeDuplicateKeys": "Удалить дублирующиеся ключи из файлов переводов.",
|
|
428
|
+
"synchronizeKeys": "Синхронизировать ключи во всех языках.",
|
|
429
|
+
"splitLargeFiles": "Разделить большие файлы переводов для лучшей поддерживаемости.",
|
|
430
|
+
"addMoreLanguages": "Добавить больше языков в ваш проект.",
|
|
431
|
+
"reportSaved": "📄 Сводный отчет сохранен: {reportPath}",
|
|
432
|
+
"reportSaveFailed": "❌ Не удалось сохранить сводный отчет: {reportPath}",
|
|
433
|
+
"nextStep1": "1. Проверьте результаты выше на наличие несоответствий или отсутствующих ключей.",
|
|
434
|
+
"nextStep2": "2. Добавьте или исправьте файлы переводов при необходимости.",
|
|
435
|
+
"nextStep3": "3. Повторно выполните анализ для проверки исправлений.",
|
|
436
|
+
"nextStep4": "4. Сохраните этот отчёт для дальнейшего использования.",
|
|
437
|
+
"inconsistentKeys": "Обнаружены несогласованные ключи в некоторых файлах.",
|
|
438
|
+
"missingKeys": "В некоторых файлах отсутствуют ключи.",
|
|
439
|
+
"extraKeys": "В некоторых файлах найдены лишние ключи.",
|
|
440
|
+
"couldNotReadFile": "⚠️ Не удалось прочитать файл: {filePath}",
|
|
441
|
+
"couldNotParseJSFile": "⚠️ Не удалось разобрать JS/TS файл: {filePath}",
|
|
442
|
+
"errorReadingFile": "⚠️ Ошибка чтения файла {filePath}: {error}",
|
|
443
|
+
"noLanguageDirectoriesFound": "❌ Директории языков не найдены!",
|
|
444
|
+
"issuesFound": "🚨 ОБНАРУЖЕНЫ ПРОБЛЕМЫ",
|
|
445
|
+
"missingFiles": "❌ Отсутствующие файлы:",
|
|
446
|
+
"emptyFiles": "📭 Пустые файлы:",
|
|
447
|
+
"malformedFiles": "💥 Повреждённые файлы:",
|
|
448
|
+
"duplicateKeys": "🔄 Дублирующиеся ключи:",
|
|
449
|
+
"couldNotFindI18nDirectory": "❌ Не удалось найти директорию i18n. Укажите с помощью --source-dir",
|
|
450
|
+
"sourceDirectoryDoesNotExist": "❌ Исходная директория не существует: {sourceDir}",
|
|
451
|
+
"generatingSummaryReport": "📄 Генерация сводного отчёта...",
|
|
452
|
+
"cleaningUpReportFiles": "🗑️ Очистка файлов отчётов...",
|
|
453
|
+
"couldNotDelete": "⚠️ Не удалось удалить {file}: {error}",
|
|
454
|
+
"noOldReportFilesToDelete": "📄 Нет старых файлов отчётов для удаления.",
|
|
455
|
+
"errorCleaningUpReports": "⚠️ Ошибка очистки отчётов: {error}",
|
|
456
|
+
"reportFilesPreserved": "📁 Файлы отчётов сохранены по запросу.",
|
|
457
|
+
"analysisComplete": "📊 АНАЛИЗ ЗАВЕРШЁН",
|
|
458
|
+
"analyzedLanguages": "✅ Проанализировано {count} языков",
|
|
459
|
+
"processedFiles": "✅ Обработано {count} файлов",
|
|
460
|
+
"foundTranslationKeys": "✅ Найдено {count} ключей перевода",
|
|
461
|
+
"errorDuringAnalysis": "❌ Ошибка во время анализа: {error}",
|
|
462
|
+
"deletedOldReportFiles": "✅ Удалено {count} старых файлов отчётов.",
|
|
463
|
+
"helpTitle": "🔧 ГЕНЕРАТОР СВОДНОГО ОТЧЁТА I18N",
|
|
464
|
+
"helpDescription": "Анализирует структуру папки i18n и генерирует подробные отчёты",
|
|
465
|
+
"helpUsage": "Использование: i18ntk summary [опции]",
|
|
466
|
+
"helpOptions": "Опции:",
|
|
467
|
+
"helpSourceDir": " -s, --source-dir <путь> Путь к директории локалей i18n",
|
|
468
|
+
"helpOutput": " -o, --output <файл> Выходной файл для отчёта",
|
|
469
|
+
"helpVerbose": " -v, --verbose Показать подробный вывод",
|
|
470
|
+
"helpKeepReports": " --keep-reports Сохранить все существующие файлы отчётов",
|
|
471
|
+
"helpDeleteReports": " --delete-reports Удалить старые файлы отчётов после генерации",
|
|
472
|
+
"helpHelp": " -h, --help Показать это сообщение справки",
|
|
473
|
+
"helpExamples": "Примеры:",
|
|
474
|
+
"helpExample1": " i18ntk summary",
|
|
475
|
+
"helpExample2": " i18ntk summary --source-dir ./src/i18n/locales",
|
|
476
|
+
"helpExample3": " i18ntk summary --output summary.txt --verbose",
|
|
477
|
+
"helpExample4": " i18ntk summary --output summary.txt --delete-reports",
|
|
478
|
+
"helpExample5": " i18ntk summary --keep-reports",
|
|
479
|
+
"usageReportTitle": "ОТЧЁТ АНАЛИЗА ИСПОЛЬЗОВАНИЯ I18N - Версия 1.4.3",
|
|
480
|
+
"usageReportGenerated": "Создано: {timestamp}",
|
|
481
|
+
"usageReportSourceDir": "Исходная директория: {sourceDir}",
|
|
482
|
+
"usageReportI18nDir": "Директория I18n: {i18nDir}",
|
|
483
|
+
"usageReportSummary": "СВОДКА",
|
|
484
|
+
"usageReportSourceFilesScanned": "📄 Просканировано исходных файлов: {count}",
|
|
485
|
+
"usageReportTranslationFilesFound": "📄 Найдено файлов переводов: {count}",
|
|
486
|
+
"usageReportAvailableKeys": "🔤 Доступные ключи перевода: {count}",
|
|
487
|
+
"usageReportUsedKeys": "🎯 Используемые ключи перевода: {count}",
|
|
488
|
+
"usageReportDynamicKeys": "🔄 Обнаружено динамических ключей: {count}",
|
|
489
|
+
"usageReportUnusedKeys": "❌ Неиспользуемые ключи: {count}",
|
|
490
|
+
"usageReportMissingKeys": "⚠️ Отсутствующие ключи: {count}",
|
|
491
|
+
"usageReportNotTranslatedKeys": "🔄 Ключи НЕ_ПЕРЕВЕДЕНО: {count}",
|
|
492
|
+
"usageReportTranslationCompleteness": "ПОЛНОТА ПЕРЕВОДОВ",
|
|
493
|
+
"usageReportLanguageCompleteness": "🌍 {language}: {completeness}% завершено ({translated}/{total})",
|
|
494
|
+
"usageReportNotTranslatedInLanguage": " 🔄 НЕ_ПЕРЕВЕДЕНО: {count} ключей",
|
|
495
|
+
"usageReportTranslationFilesDiscovered": "ОБНАРУЖЕННЫЕ ФАЙЛЫ ПЕРЕВОДОВ",
|
|
496
|
+
"usageReportFileInfo": "📄 {relativePath} ({namespace}, {type})",
|
|
497
|
+
"usageReportUnusedKeysSection": "НЕИСПОЛЬЗУЕМЫЕ КЛЮЧИ ПЕРЕВОДА",
|
|
498
|
+
"usageReportUnusedKeysDescription": "Эти ключи существуют в файлах переводов, но не используются в исходном коде:",
|
|
499
|
+
"usageReportMoreUnusedKeys": "... и ещё {count} неиспользуемых ключей",
|
|
500
|
+
"usageReportMissingKeysSection": "ОТСУТСТВУЮЩИЕ КЛЮЧИ ПЕРЕВОДА",
|
|
501
|
+
"usageReportMissingKeysDescription": "Эти ключи используются в исходном коде, но отсутствуют в файлах переводов:",
|
|
502
|
+
"usageReportUsedIn": "📄 Используется в: {filePath}",
|
|
503
|
+
"usageReportMoreFiles": "... и ещё {count} файлов",
|
|
504
|
+
"usageReportDynamicKeysSection": "ДИНАМИЧЕСКИЕ КЛЮЧИ ПЕРЕВОДА",
|
|
505
|
+
"usageReportDynamicKeysDescription": "Эти ключи используют динамические шаблоны и требуют ручной проверки:",
|
|
506
|
+
"usageReportFileUsageBreakdown": "РАЗБИВКА ИСПОЛЬЗОВАНИЯ ФАЙЛОВ",
|
|
507
|
+
"usageReportFileUsage": "📄 {filePath} ({count} ключей)",
|
|
508
|
+
"usageReportMoreFileUsage": "... и ещё {count} файлов",
|
|
509
|
+
"usageReportSaved": "📄 Отчёт сохранён в: {filepath}",
|
|
510
|
+
"usageReportSaveFailed": "❌ Не удалось сохранить отчёт: {error}",
|
|
511
|
+
"analysisCompletedSuccessfully": "✅ Анализ успешно завершён",
|
|
512
|
+
"analysisFailed": "❌ Анализ не удался: {error}",
|
|
513
|
+
"analysisFailedError": "❌ Анализ не удался",
|
|
514
|
+
"usageReportUnusedTranslationKeys": "НЕИСПОЛЬЗУЕМЫЕ КЛЮЧИ ПЕРЕВОДА",
|
|
515
|
+
"usageReportUnusedKey": "❌ {key}",
|
|
516
|
+
"usageReportMissingTranslationKeys": "ОТСУТСТВУЮЩИЕ КЛЮЧИ ПЕРЕВОДА",
|
|
517
|
+
"usageReportMissingKey": "⚠️ {key}",
|
|
518
|
+
"usageReportDynamicTranslationKeys": "ДИНАМИЧЕСКИЕ КЛЮЧИ ПЕРЕВОДА",
|
|
519
|
+
"usageReportDynamicKey": "🔄 {key}",
|
|
520
|
+
"unusedKeysCount": " ❌ Неиспользуемые ключи: {count}",
|
|
521
|
+
"missingKeysCount": " ⚠️ Отсутствующие ключи: {count}",
|
|
522
|
+
"translationCompletenessTitle": "\n🌍 Полнота переводов:",
|
|
523
|
+
"languageCompletenessStats": " {language}: {completeness}% завершено ({translated}/{total})",
|
|
524
|
+
"configuration": "🔧 Конфигурация:",
|
|
525
|
+
"sourceLanguage": " Исходный язык: {sourceLanguage}",
|
|
526
|
+
"supportedExtensions": " Поддерживаемые расширения: {extensions}",
|
|
527
|
+
"excludedFiles": " Исключённые файлы: {files}",
|
|
528
|
+
"foundIssues": "⚠️ Найдено {count} проблем, требующих внимания",
|
|
529
|
+
"fatalError": "❌ Критическая ошибка: {error}",
|
|
530
|
+
"issuesFoundTitle": "ОБНАРУЖЕНЫ ПРОБЛЕМЫ",
|
|
531
|
+
"missingFilesTitle": "❌ Отсутствующие файлы:",
|
|
532
|
+
"emptyFilesTitle": "📭 Пустые файлы:",
|
|
533
|
+
"malformedFilesTitle": "💥 Повреждённые файлы:",
|
|
534
|
+
"duplicateKeysTitle": "🔄 Дублирующиеся ключи:"
|
|
535
|
+
},
|
|
536
|
+
"sizing": {
|
|
537
|
+
"analyzing_file_sizes": "Анализ размеров файлов...",
|
|
538
|
+
"analyzing_translation_content": "Анализ содержимого переводов...",
|
|
539
|
+
"failed_to_parse_language_error": "Не удалось разобрать {{language}}: {{errorMessage}}",
|
|
540
|
+
"generating_size_comparisons": "📊 Генерация сравнений размеров...",
|
|
541
|
+
"no_languages_found_for_comparison": "❌ Языки для сравнения не найдены",
|
|
542
|
+
"sizing_analysis_results": "📊 РЕЗУЛЬТАТЫ АНАЛИЗА РАЗМЕРОВ",
|
|
543
|
+
"file_sizes_title": "Размеры файлов",
|
|
544
|
+
"file_sizes_header": "Файл | Размер (байт)",
|
|
545
|
+
"file_size_row": "{fileName} | {fileSize}",
|
|
546
|
+
"language_statistics_title": "Статистика по языкам",
|
|
547
|
+
"language_stats_header": "Язык | Количество файлов | Общий размер (байт)",
|
|
548
|
+
"language_stats_row": "{language} | {fileCount} | {totalSize}",
|
|
549
|
+
"size_variations_title": "Вариации размеров",
|
|
550
|
+
"size_variations_header": "Язык | Минимум | Максимум | Среднее",
|
|
551
|
+
"size_variation_row": "{language} | {minSize} | {maxSize} | {avgSize}",
|
|
552
|
+
"recommendations_title": "Рекомендации",
|
|
553
|
+
"recommendation_item": "- {recommendation}",
|
|
554
|
+
"generating_detailed_report": "🔄 Генерация подробного отчёта...",
|
|
555
|
+
"report_saved_to": "💾 Отчёт сохранён в: {reportPath}",
|
|
556
|
+
"csv_report_saved_to": "💾 CSV отчёт сохранён в: {csvPath}",
|
|
557
|
+
"starting_i18n_sizing_analysis": "🚀 Запуск анализа размеров i18n...",
|
|
558
|
+
"source_directory": "📁 Исходная директория: {sourceDir}",
|
|
559
|
+
"no_translation_files_found": "❌ Файлы переводов не найдены",
|
|
560
|
+
"found_languages": "🌐 Найденные языки: {languages}",
|
|
561
|
+
"analysis_completed": "✅ Анализ завершён",
|
|
562
|
+
"analysis_failed": "❌ Анализ не удался",
|
|
563
|
+
"problematic_no": "Проблемы с размером не обнаружены",
|
|
564
|
+
"problematic_yes": "Обнаружены потенциальные проблемы с размером"
|
|
565
|
+
},
|
|
566
|
+
"help": {
|
|
567
|
+
"usage": "Использование:",
|
|
568
|
+
"interactiveMode": " node i18ntk-manage.js # Интерактивный режим",
|
|
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": "\nДоступные команды:",
|
|
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": "ОТЧЁТ АНАЛИЗА ИСПОЛЬЗОВАНИЯ I18N",
|
|
608
|
+
"generatedAt": "Создано: {timestamp}",
|
|
609
|
+
"sourceDirectory": "Исходная директория: {sourceDir}",
|
|
610
|
+
"i18nDirectory": "Директория I18n: {i18nDir}",
|
|
611
|
+
"sourceFilesScanned": "Просканировано исходных файлов: {count}",
|
|
612
|
+
"translationFilesFound": "Найдено файлов переводов: {count}",
|
|
613
|
+
"availableKeys": "Доступные ключи перевода: {count}",
|
|
614
|
+
"usedKeys": "Используемые ключи перевода: {count}",
|
|
615
|
+
"dynamicKeys": "Обнаружено динамических ключей: {count}",
|
|
616
|
+
"unusedKeys": "Неиспользуемые ключи перевода: {count}",
|
|
617
|
+
"missingKeys": "Отсутствующие ключи перевода: {count}",
|
|
618
|
+
"notTranslatedKeys": "Ключи НЕ_ПЕРЕВЕДЕНО: {count}",
|
|
619
|
+
"translationCompleteness": "ПОЛНОТА ПЕРЕВОДОВ",
|
|
620
|
+
"translationFilesDiscovered": "ОБНАРУЖЕННЫЕ ФАЙЛЫ ПЕРЕВОДОВ",
|
|
621
|
+
"unusedKeysSection": "НЕИСПОЛЬЗУЕМЫЕ КЛЮЧИ ПЕРЕВОДА",
|
|
622
|
+
"unusedKeysDescription": "Эти ключи существуют в файлах переводов, но не используются в исходном коде:",
|
|
623
|
+
"missingKeysSection": "ОТСУТСТВУЮЩИЕ КЛЮЧИ ПЕРЕВОДА",
|
|
624
|
+
"missingKeysDescription": "Эти ключи используются в исходном коде, но отсутствуют в файлах переводов:",
|
|
625
|
+
"dynamicKeysSection": "ДИНАМИЧЕСКИЕ КЛЮЧИ ПЕРЕВОДА",
|
|
626
|
+
"dynamicKeysDescription": "Эти ключи генерируются динамически и могут потребовать ручной проверки:",
|
|
627
|
+
"fileUsageBreakdown": "РАЗБИВКА ИСПОЛЬЗОВАНИЯ ФАЙЛОВ",
|
|
628
|
+
"fileUsageDescription": "Использование ключей перевода по исходным файлам:",
|
|
629
|
+
"reportSavedTo": "📄 Отчёт сохранён в: {reportPath}",
|
|
630
|
+
"failedToSaveReport": "❌ Не удалось сохранить отчёт: {error}",
|
|
631
|
+
"analysisFailed": "❌ Анализ использования не удался",
|
|
632
|
+
"unusedKeysCount": "❌ Неиспользуемые ключи: {count}",
|
|
633
|
+
"missingKeysCount": "⚠️ Отсутствующие ключи: {count}",
|
|
634
|
+
"translationCompletenessTitle": "🌍 Полнота переводов:",
|
|
635
|
+
"languageCompletenessStats": " {language}: {completeness}% завершено ({translated}/{total})"
|
|
636
|
+
}
|
|
637
|
+
}
|