i18ntk 2.0.4 → 2.2.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/README.md +38 -60
- package/main/i18ntk-analyze.js +49 -44
- package/main/i18ntk-complete.js +75 -74
- package/main/i18ntk-fixer.js +3 -3
- package/main/i18ntk-init.js +5 -5
- package/main/i18ntk-scanner.js +2 -2
- package/main/i18ntk-sizing.js +35 -35
- package/main/i18ntk-summary.js +4 -4
- package/main/i18ntk-ui.js +54 -8
- package/main/i18ntk-usage.js +14 -14
- package/main/i18ntk-validate.js +6 -5
- package/main/manage/commands/AnalyzeCommand.js +40 -35
- package/main/manage/commands/FixerCommand.js +2 -2
- package/main/manage/commands/ScannerCommand.js +2 -2
- package/main/manage/commands/ValidateCommand.js +9 -9
- package/main/manage/index.js +147 -75
- package/main/manage/managers/LanguageMenu.js +7 -2
- package/main/manage/services/UsageService.js +7 -7
- package/package.json +269 -290
- package/settings/settings-cli.js +3 -3
- package/ui-locales/de.json +161 -166
- package/ui-locales/en.json +13 -18
- package/ui-locales/es.json +171 -184
- package/ui-locales/fr.json +155 -161
- package/ui-locales/ja.json +192 -243
- package/ui-locales/ru.json +145 -196
- package/ui-locales/zh.json +179 -185
- package/utils/cli-helper.js +26 -98
- package/utils/extractors/regex.js +39 -12
- package/utils/i18n-helper.js +88 -40
- package/{scripts → utils}/locale-optimizer.js +61 -60
- package/utils/security-check-improved.js +16 -13
- package/utils/security.js +6 -4
- package/main/i18ntk-go.js +0 -283
- package/main/i18ntk-java.js +0 -380
- package/main/i18ntk-js.js +0 -512
- package/main/i18ntk-manage.js +0 -1694
- package/main/i18ntk-php.js +0 -462
- package/main/i18ntk-py.js +0 -379
- package/main/i18ntk-settings.js +0 -23
- package/main/manage/index-fixed.js +0 -1447
- package/main/manage/services/ConfigurationService-fixed.js +0 -449
- package/scripts/build-lite.js +0 -279
- package/scripts/deprecate-versions.js +0 -317
- package/scripts/export-translations.js +0 -84
- package/scripts/fix-all-i18n.js +0 -215
- package/scripts/fix-and-purify-i18n.js +0 -213
- package/scripts/fix-locale-control-chars.js +0 -110
- package/scripts/lint-locales.js +0 -80
- package/scripts/prepublish.js +0 -348
- package/scripts/security-check.js +0 -117
- package/scripts/sync-translations.js +0 -151
- package/scripts/sync-ui-locales.js +0 -20
- package/scripts/validate-all-translations.js +0 -139
- package/scripts/verify-deprecations.js +0 -157
- package/scripts/verify-translations.js +0 -63
- package/utils/security-fixed.js +0 -607
package/ui-locales/ru.json
CHANGED
|
@@ -54,14 +54,14 @@
|
|
|
54
54
|
"errors": "Ошибки:",
|
|
55
55
|
"genericError": "❌ Ошибка: {error}",
|
|
56
56
|
"initializationFailed": "❌ Инициализация не удалась: {error}",
|
|
57
|
+
"initializationCancelled": "❌ Инициализация отменена пользователем.",
|
|
57
58
|
"translationKeyNotFound": "❌ Ключ перевода не найден: {key}",
|
|
58
59
|
"sourceDirectoryNotFound": "❌ Исходная директория не найдена: {directory}",
|
|
59
60
|
"configLoadingFailed": "❌ Загрузка конфигурации не удалась",
|
|
60
61
|
"invalidSourceDirectory": "❌ Неверная исходная директория: {directory}",
|
|
61
62
|
"securityViolation": "⚠️ Нарушение безопасности обнаружено",
|
|
62
63
|
"authenticationFailed": "❌ Аутентификация не удалась",
|
|
63
|
-
"sourceEqualsI18nWarn": "⚠️ sourceDir
|
|
64
|
-
"initializationCancelled": "❌ Initialization cancelled by user."
|
|
64
|
+
"sourceEqualsI18nWarn": "⚠️ sourceDir равен i18nDir ({sourceDir}). Возврат к {fallback} для сканирования источника."
|
|
65
65
|
},
|
|
66
66
|
"errorGeneratingStatusSummary": "Ошибка генерации сводки статуса: {error}",
|
|
67
67
|
"errorRunningDebugTool": "Ошибка запуска инструмента отладки '{displayName}': {error}",
|
|
@@ -101,15 +101,67 @@
|
|
|
101
101
|
"settings": "Настройки",
|
|
102
102
|
"startingSettings": "🎛️ Начальные настройки CLI...",
|
|
103
103
|
"confirm": "Подтвердить",
|
|
104
|
-
"errorExiting": "
|
|
104
|
+
"errorExiting": "Ошибка при выходе."
|
|
105
105
|
},
|
|
106
106
|
"errors": {
|
|
107
|
+
"invalidOption": "❌ Неверный параметр: {option}. Пожалуйста, попробуйте еще раз.",
|
|
107
108
|
"readlineClosed": "Поток ввода закрыт; работа в неинтерактивном режиме.",
|
|
108
109
|
"noPackageJson": "Файл package.json не найден. Невозможно автоматически определить фреймворк i18n.",
|
|
109
110
|
"noI18nDir": "Директория i18n не найдена в корне проекта.",
|
|
110
111
|
"noI18nConfig": "Файл конфигурации i18n не найден в корне проекта.",
|
|
111
|
-
"errorReadingDebugLogs": "
|
|
112
|
-
|
|
112
|
+
"errorReadingDebugLogs": "Ошибка чтения журналов отладки: {error}."
|
|
113
|
+
},
|
|
114
|
+
"scanner": {
|
|
115
|
+
"help_message": "Использование сканера текста I18n: node i18ntk-scanner.js [options] Options: --source-dir <dir> Source directory to scan (default: ./src) --output <file> Output file for scan results (default: ./i18ntk-scanner-report.json) --framework <name> Framework to target (react, vue, angular, vanilla) --patterns <patterns> Custom regex patterns (comma-separated) --include-tests Include test files in scan --exclude-dirs <dirs> Directories to exclude (comma-separated) --help Show this help Examples: 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",
|
|
116
|
+
"help_options": {
|
|
117
|
+
"source_dir": "Директория для сканирования",
|
|
118
|
+
"output_dir": "Файл для вывода результатов",
|
|
119
|
+
"framework": "Целевой фреймворк (react, vue, angular, vanilla)",
|
|
120
|
+
"patterns": "Пользовательские паттерны регулярных выражений (через запятую)",
|
|
121
|
+
"exclude": "Директории для исключения (через запятую)",
|
|
122
|
+
"output_report": "Файл для вывода отчета",
|
|
123
|
+
"min_length": "Минимальная длина текста для включения",
|
|
124
|
+
"max_length": "Максимальная длина текста для включения",
|
|
125
|
+
"include_tests": "Включать тестовые файлы в сканирование"
|
|
126
|
+
},
|
|
127
|
+
"starting": "🔍 Запуск сканера текста для фреймворка: {framework}",
|
|
128
|
+
"sourceDirectory": "📁 Каталог сканирования: {sourceDir}",
|
|
129
|
+
"frameworkDetected": "🎯 Обнаруженный фреймворк: {framework}",
|
|
130
|
+
"scanningFiles": "📊 Сканирование {fileCount} файлов...",
|
|
131
|
+
"foundTexts": "📝 Найдено {textCount} текстов, требующих перевода",
|
|
132
|
+
"generatingReport": "📊 Формируем подробный отчет...",
|
|
133
|
+
"reportSaved": "💾 Отчет о сканировании сохранен в: {reportPath}.",
|
|
134
|
+
"noTextsFound": "✅ Не найдено жестко закодированных английских текстов.",
|
|
135
|
+
"scanComplete": "🎉 Сканирование успешно завершено!",
|
|
136
|
+
"analysisTitle": "🔍 СКАН-АНАЛИЗ ПЕРЕВОДА",
|
|
137
|
+
"fileSummary": "📄 {file}: найдено {count} текстов",
|
|
138
|
+
"textLocation": "📍 Строка {line}: {text}",
|
|
139
|
+
"foundText": "Обнаружено {count} потенциальных экземпляров жестко запрограммированного текста.",
|
|
140
|
+
"context": "📝 Контекст: {context}",
|
|
141
|
+
"severity": "⚠️ Серьезность: {severity}.",
|
|
142
|
+
"recommendation": "💡 Рекомендация: {recommendation}",
|
|
143
|
+
"welcome": {
|
|
144
|
+
"title": "🎯 Добро пожаловать в Сканер текста!",
|
|
145
|
+
"description": "Этот инструмент сканирует исходный код на предмет жестко закодированного текста на английском языке, который может нуждаться в переводе."
|
|
146
|
+
},
|
|
147
|
+
"frameworkPrompt": {
|
|
148
|
+
"title": "🎯 Выберите фреймворк",
|
|
149
|
+
"available": "Доступные фреймворки: React, Vue, Angular, Vanilla.",
|
|
150
|
+
"description": "Введите тип платформы (или нажмите Enter для автоматического определения):",
|
|
151
|
+
"input": "Рамки:"
|
|
152
|
+
},
|
|
153
|
+
"directoryPrompt": {
|
|
154
|
+
"title": "📁 Выберите исходный каталог",
|
|
155
|
+
"current": "Текущий каталог: {dir}",
|
|
156
|
+
"description": "Введите каталог для сканирования (или нажмите Enter для текущего):",
|
|
157
|
+
"input": "Каталог:"
|
|
158
|
+
},
|
|
159
|
+
"options": {
|
|
160
|
+
"includeTests": "Включить тестовые файлы?",
|
|
161
|
+
"excludeDirs": "Каталоги для исключения (через запятую):",
|
|
162
|
+
"customPatterns": "Пользовательские шаблоны для сканирования (регулярное выражение):"
|
|
163
|
+
},
|
|
164
|
+
"reportGenerated": "Создан отчет о сканировании: {path}"
|
|
113
165
|
},
|
|
114
166
|
"fixer": {
|
|
115
167
|
"help_message": "I18n Исправление Переводов Использование: node i18ntk-fixer.js [опции] Опции: --source-dir <dir> Исходный каталог для сканирования (по умолчанию: ./locales) --languages <langs> Список языков для исправления, разделенный запятыми --markers <markers> Список маркеров, которые считать непереведенными, разделенный запятыми --no-backup Пропустить автоматическое создание резервной копии --help Показать эту справку Примеры: node i18ntk-fixer.js --languages de,fr node i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED node i18ntk-fixer.js --no-backup",
|
|
@@ -146,7 +198,7 @@
|
|
|
146
198
|
"choicePrompt": "Ваш выбор (д/н/п):",
|
|
147
199
|
"nonInteractiveMode": "⚡ Обнаружен неинтерактивный режим - автоматическое применение исправлений...",
|
|
148
200
|
"reportGenerated": "📊 Сгенерирован отчет об исправлении: {path}",
|
|
149
|
-
"summary": "
|
|
201
|
+
"summary": "Краткое описание фиксера:",
|
|
150
202
|
"welcome": {
|
|
151
203
|
"title": "🎯 Добро пожаловать в инструмент исправления переводов!",
|
|
152
204
|
"description": "Этот инструмент поможет вам исправить сломанные переводы и маркеры в ваших языковых файлах."
|
|
@@ -170,16 +222,16 @@
|
|
|
170
222
|
"description": "Введите директорию с вашими языковыми файлами (или Enter для текущей директории):",
|
|
171
223
|
"input": "Директория:"
|
|
172
224
|
},
|
|
173
|
-
"backupLocation": "
|
|
174
|
-
"completed": "
|
|
175
|
-
"creatingBackup": "
|
|
176
|
-
"dryRunMode": "
|
|
177
|
-
"error": "
|
|
178
|
-
"fixing": "
|
|
179
|
-
"foundLanguages": "
|
|
180
|
-
"languageFixed": "{language}:
|
|
181
|
-
"running": "
|
|
182
|
-
"totalFixed": "
|
|
225
|
+
"backupLocation": "Местоположение резервной копии: {dir}",
|
|
226
|
+
"completed": "Исправление завершено.",
|
|
227
|
+
"creatingBackup": "Создание резервной копии в {dir}...",
|
|
228
|
+
"dryRunMode": "Режим пробного прогона: {mode}",
|
|
229
|
+
"error": "Исправление не удалось: {error}",
|
|
230
|
+
"fixing": "Исправление {language}...",
|
|
231
|
+
"foundLanguages": "Найдено {count} языков: {languages}",
|
|
232
|
+
"languageFixed": "{language}: исправлены клавиши {fixed}, пропущены {skipped}.",
|
|
233
|
+
"running": "Запуск средства исправления перевода...",
|
|
234
|
+
"totalFixed": "Всего исправлено: {count}"
|
|
183
235
|
},
|
|
184
236
|
"autorun": {
|
|
185
237
|
"stepAnalyzeTranslations": "Анализ переводов",
|
|
@@ -403,13 +455,13 @@
|
|
|
403
455
|
"sizing_analysis_results": "Результаты анализа размеров i18n",
|
|
404
456
|
"file_sizes_title": "Размеры файлов",
|
|
405
457
|
"file_sizes_header": "Язык Размер(КБ) Строки Символы",
|
|
406
|
-
"file_size_row": "{lang}
|
|
458
|
+
"file_size_row": "{lang} {sizeKB} {lines} {characters}",
|
|
407
459
|
"language_statistics_title": "Статистика по языкам",
|
|
408
460
|
"language_stats_header": "Язык Ключей Символов Ср. длина Макс. длина Пустые Длинные",
|
|
409
|
-
"language_stats_row": "{lang}
|
|
461
|
+
"language_stats_row": "{lang} {totalKeys} {totalCharacters} {averageKeyLength} {maxKeyLength} {emptyKeys} {longKeys}",
|
|
410
462
|
"size_variations_title": "Вариации размеров",
|
|
411
463
|
"size_variations_header": "Язык Разн. симв. % Разн. Проблемные",
|
|
412
|
-
"size_variation_row": "{lang}
|
|
464
|
+
"size_variation_row": "{lang} {characterDifference} {percentageDifference}% {problematic}",
|
|
413
465
|
"problematic_yes": "Да",
|
|
414
466
|
"problematic_no": "Нет",
|
|
415
467
|
"recommendations_title": "Рекомендации",
|
|
@@ -427,7 +479,7 @@
|
|
|
427
479
|
"human_report_saved": "Читаемый отчет сохранен: {reportPath}",
|
|
428
480
|
"folder_summary_title": "Сводка папки",
|
|
429
481
|
"folder_summary_table_header": "Язык Размер(KB) Ключи Средняя длина Всего символов",
|
|
430
|
-
"folder_summary_row": "{lang}
|
|
482
|
+
"folder_summary_row": "{lang} {sizeKB} {totalKeys} {avgLength} {totalChars}",
|
|
431
483
|
"language_comparison_title": "Сравнение языков",
|
|
432
484
|
"language_comparison_row": "{lang}: {diff} символов ({percent}%) {status}",
|
|
433
485
|
"summary_stats": "📊 Сводка: {totalLanguages} языков, {totalKeys} ключей - Отчеты сохранены в {reportPath}",
|
|
@@ -444,12 +496,12 @@
|
|
|
444
496
|
"consider_reviewing_translations": "Рассмотрите возможность пересмотра переводов {lang} — они на {percentageDifference}% {comparison} базового",
|
|
445
497
|
"long_translations_detected": "{lang} содержит {longKeys} переводов длиной более {threshold} символов — рассмотрите возможность их разбить"
|
|
446
498
|
},
|
|
447
|
-
"detailed_key_analysis_title": "
|
|
448
|
-
"key_analysis_detail": "{lang}: {length}
|
|
449
|
-
"key_analysis_header": "
|
|
450
|
-
"status_empty": "
|
|
451
|
-
"status_long": "
|
|
452
|
-
"status_ok": "
|
|
499
|
+
"detailed_key_analysis_title": "Детальный ключевой анализ",
|
|
500
|
+
"key_analysis_detail": "{lang}: {length} символов ({status}) – {translation}",
|
|
501
|
+
"key_analysis_header": "Ключ: {key}",
|
|
502
|
+
"status_empty": "пустой",
|
|
503
|
+
"status_long": "длинный",
|
|
504
|
+
"status_ok": "хорошо"
|
|
453
505
|
},
|
|
454
506
|
"usage": {
|
|
455
507
|
"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=./analysis --output-report",
|
|
@@ -484,8 +536,8 @@
|
|
|
484
536
|
"argsParseFailed": "Не удалось разобрать аргументы: {error}",
|
|
485
537
|
"translationDiscoveryError": "Ошибка обнаружения переводов: {error}",
|
|
486
538
|
"fileTraversalError": "⚠️ Ошибка обхода файлов: {error}",
|
|
487
|
-
"sourceEqualsI18nWarn": "
|
|
488
|
-
"i18nEqualsSourceWarn": "⚠️
|
|
539
|
+
"sourceEqualsI18nWarn": "⚠️Исходный каталог и каталог i18n совпадают. Это может вызвать проблемы с анализом.",
|
|
540
|
+
"i18nEqualsSourceWarn": "⚠️ Каталог I18n и исходный каталог совпадают. Это может вызвать проблемы с анализом.",
|
|
489
541
|
"usageAnalysisFailed": "⚠️ Анализ использования не удался: {error}",
|
|
490
542
|
"translationFileParseError": "⚠️ Ошибка парсинга файла перевода: {error}",
|
|
491
543
|
"translationKeysLoadError": "⚠️ Ошибка загрузки ключей перевода: {error}",
|
|
@@ -535,7 +587,7 @@
|
|
|
535
587
|
"all_translation_keys_are_prope": "✅ Все переводы ключей используются правильно!",
|
|
536
588
|
"n_next_steps": "📋 ДАЛЬНЕЙШИЕ ШАГИ",
|
|
537
589
|
"2_check_the_detailed_report_fo": "2. Проверьте подробный отчет для конкретных проблем",
|
|
538
|
-
"help_message": "
|
|
590
|
+
"help_message": "Использование анализатора использования I18n: node i18ntk-usage.js [options] Options: --source-dir <dir> Source directory to scan (default: ./src) --i18n-dir <dir> I18n directory (default: ./src/locales) --output-report Generate detailed report --output-dir <dir> Output directory for reports (default: ./reports) --help Show this help Examples: node i18ntk-usage.js --output-report node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales node i18ntk-usage.js --output-dir=./analysis --output-report",
|
|
539
591
|
"1_review_the_analysis_results": "1. Просмотрите результаты анализа в консоли или в отчёте.",
|
|
540
592
|
"2_run_with_outputreport_for_de": "2. Запустите с --output-report для подробного отчёта.",
|
|
541
593
|
"3_remove_unused_keys_or_add_mi": "3. Удалите неиспользуемые ключи или добавьте недостающие в код.",
|
|
@@ -546,7 +598,7 @@
|
|
|
546
598
|
"failedToAnalyzeFile": "Не удалось проанализировать файл {filePath}: {error}",
|
|
547
599
|
"failedToAnalyzeLanguage": "Не удалось проанализировать язык {language}: {error}",
|
|
548
600
|
"translationCompletenessAnalysisFailed": "Анализ полноты перевода не удался: {error}",
|
|
549
|
-
"n": ""
|
|
601
|
+
"n": "\\n"
|
|
550
602
|
},
|
|
551
603
|
"complete": {
|
|
552
604
|
"configLoadedSuccessfully": "⚙️ Конфигурация успешно загружена",
|
|
@@ -586,11 +638,11 @@
|
|
|
586
638
|
"noTranslationLanguagesFound": "🌍 Целевых языков не найдено",
|
|
587
639
|
"failedToAnalyzeLanguage": "❌ Не удалось проанализировать язык",
|
|
588
640
|
"translationCompletenessAnalysisFailed": "❌ Анализ полноты перевода не удался",
|
|
589
|
-
"failedToProcessFile": "
|
|
590
|
-
"failedToSaveReport": "
|
|
591
|
-
"i18nDirectoryDoesNotExist": "I18n
|
|
592
|
-
"reportSavedTo": "
|
|
593
|
-
"sourceDirectoryDoesNotExist": "
|
|
641
|
+
"failedToProcessFile": "Не удалось обработать файл:",
|
|
642
|
+
"failedToSaveReport": "Не удалось сохранить отчет об использовании: {error}.",
|
|
643
|
+
"i18nDirectoryDoesNotExist": "Каталог I18n не существует: {dir}",
|
|
644
|
+
"reportSavedTo": "Отчет об использовании сохранен в: {reportPath}.",
|
|
645
|
+
"sourceDirectoryDoesNotExist": "Исходный каталог не существует: {dir}"
|
|
594
646
|
},
|
|
595
647
|
"validate": {
|
|
596
648
|
"help_message": "I18n Валидатор переводов Использование: node i18ntk-validate.js [опции] Опции: --source-dir <dir> Директория исходников для сканирования (по умолчанию: ./locales) --i18n-dir <dir> Директория I18n (по умолчанию: ./locales) --output-report Сгенерировать подробный отчёт --output-dir <dir> Директория для отчётов (по умолчанию: ./i18ntk-reports) --help Показать справку Примеры: node i18ntk-validate.js --output-report node i18ntk-validate.js --source-dir=./app --i18n-dir=./locales node i18ntk-validate.js --output-dir=./analysis --output-report",
|
|
@@ -688,8 +740,8 @@
|
|
|
688
740
|
"failedToCreateSampleTranslationFile": "Не удалось создать примерный файл перевода",
|
|
689
741
|
"invalidFilePathDetected": "Обнаружен недопустимый путь к файлу",
|
|
690
742
|
"failedToWriteFile": "Не удалось записать файл: {filePath}",
|
|
691
|
-
"invalidSourceDirectory": "
|
|
692
|
-
"invalidSourceLanguageDirectory": "
|
|
743
|
+
"invalidSourceDirectory": "Неверный исходный каталог: {sourceDir}.",
|
|
744
|
+
"invalidSourceLanguageDirectory": "Неверный каталог исходного языка: {sourceDir}."
|
|
693
745
|
},
|
|
694
746
|
"adminCli": {
|
|
695
747
|
"setupPinProtectionTitle": "🔐 Настройка защиты админ-PIN",
|
|
@@ -938,18 +990,17 @@
|
|
|
938
990
|
"initializationTitle": "🚀 Набор инструментов i18n — Инициализация проекта",
|
|
939
991
|
"initializationCancelled": "🚫 Инициализация отменена пользователем.",
|
|
940
992
|
"sourceDirectoryLabel": "📁 Директория исходников: {dir}",
|
|
941
|
-
"createdSourceLanguageDirectory": "✅ Создано директория исходников: {dir}",
|
|
942
993
|
"requiredTitle": "Требуется инициализация",
|
|
943
994
|
"requiredBody": "Этот проект должен быть инициализирован перед запуском этой команды.",
|
|
944
995
|
"promptRunNow": "Хотите выполнить инициализацию сейчас? (y/N):",
|
|
945
996
|
"sourceLanguageLabel": "🌍 Исходный язык: {language}",
|
|
946
997
|
"detectedI18nFrameworks": "🔍 Обнаружены фреймворки i18n: {frameworks}",
|
|
998
|
+
"pinMustBe4Digits": "🔐 PIN должен содержать 4 цифры.",
|
|
947
999
|
"existingDirectoriesFound": "📁 Найдены существующие директории переводов:",
|
|
948
1000
|
"useExistingDirectoryPrompt": "Вы хотите использовать существующую директорию? (y/n)",
|
|
949
1001
|
"selectDirectoryPrompt": "Выберите директорию, введите номер (или выберите 'Создать новую директорию'):",
|
|
950
1002
|
"enterNewDirectoryName": "Введите имя новой директории:",
|
|
951
1003
|
"createdNewDirectory": "✅ Создана новая директория: {dir}",
|
|
952
|
-
"pinMustBe4Digits": "🔐 PIN должен содержать 4 цифры.",
|
|
953
1004
|
"directoryAlreadyExists": "⚠️ Директория уже существует: {dir}",
|
|
954
1005
|
"invalidDirectoryName": "❌ Неверное имя директории: {dir}",
|
|
955
1006
|
"usingExistingDirectory": "Использует существующую директорию: {dir}",
|
|
@@ -1016,11 +1067,11 @@
|
|
|
1016
1067
|
"installFramework": "Для установки фреймворка выполните: npm install <имя-пакета>"
|
|
1017
1068
|
},
|
|
1018
1069
|
"frameworks": {
|
|
1019
|
-
"react": "-
|
|
1020
|
-
"vue": "-
|
|
1070
|
+
"react": "- Реагировать i18next (реагировать-i18next)",
|
|
1071
|
+
"vue": "- Вуэ i18n (вью-i18n)",
|
|
1021
1072
|
"i18next": "- i18next (i18next)",
|
|
1022
|
-
"nuxt": "-
|
|
1023
|
-
"svelte": "-
|
|
1073
|
+
"nuxt": "- Нукст i18n (@nuxtjs/i18n)",
|
|
1074
|
+
"svelte": "- Стройный i18n (стройный-i18n)"
|
|
1024
1075
|
},
|
|
1025
1076
|
"continueWithoutI18nPrompt": "Фреймворк i18n не обнаружен. Продолжить без него? (y/N):",
|
|
1026
1077
|
"detectedI18nFramework": "Обнаружен фреймворк i18n: {frameworks}",
|
|
@@ -1035,34 +1086,36 @@
|
|
|
1035
1086
|
"noJsonFilesInSourceDirectory": "В директории исходников не найдено JSON-файлов: {dir}",
|
|
1036
1087
|
"invalidFilePathDetected": "Обнаружен недопустимый путь к файлу",
|
|
1037
1088
|
"initializationFailed": "Инициализация не удалась: {error}",
|
|
1038
|
-
"noFramework": "
|
|
1039
|
-
"packageJsonRead": "
|
|
1089
|
+
"noFramework": "Платформа i18n не обнаружена. Продолжайте использовать общий режим.",
|
|
1090
|
+
"packageJsonRead": "Ошибка чтения package.json."
|
|
1040
1091
|
},
|
|
1041
1092
|
"processingFile": "Обработка {file} для языка {language}...",
|
|
1042
1093
|
"fileAlreadyExistsMerging": "Файл {file} уже существует. Объединяются новые ключи.",
|
|
1043
1094
|
"createdNewFile": "Создан новый файл: {file}",
|
|
1044
1095
|
"updatedFile": "Обновлён файл: {file}",
|
|
1045
1096
|
"skippingExcludedFile": "Пропуск {file} для языка {language} — файл исключён.",
|
|
1046
|
-
"continuingWithoutAdminPin": "
|
|
1047
|
-
"
|
|
1048
|
-
"
|
|
1049
|
-
"
|
|
1050
|
-
"
|
|
1051
|
-
"
|
|
1052
|
-
"
|
|
1097
|
+
"continuingWithoutAdminPin": "Продолжение без настройки PIN-кода администратора.",
|
|
1098
|
+
"createdSourceLanguageDirectory": "✅ Создано директория исходников: {dir}",
|
|
1099
|
+
"errorSettingUpAdminPin": "Ошибка при настройке PIN-кода администратора: {error}.",
|
|
1100
|
+
"noTargetLanguagesSpecified": "Целевые языки не указаны.",
|
|
1101
|
+
"translationFilesCreatedWarning": "Файлы перевода были созданы с заполнителями; проверка перед использованием в производстве.",
|
|
1102
|
+
"warningCannotReadSourceDir": "Внимание: невозможно прочитать исходный каталог {dir}: {error}.",
|
|
1103
|
+
"warningInvalidLanguageCodes": "Внимание: неверные коды языков игнорируются: {languages}",
|
|
1104
|
+
"warningProceedingWithoutFramework": "Продолжаем без обнаружения платформы i18n."
|
|
1053
1105
|
},
|
|
1054
1106
|
"language": {
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1107
|
+
"title": "🌍 Сменить язык",
|
|
1108
|
+
"separator": "============================================================",
|
|
1109
|
+
"current": "Текущий язык: {language}",
|
|
1110
|
+
"available": "Доступные языки:",
|
|
1111
|
+
"languageOption": "{index}. {displayName}{current}",
|
|
1112
|
+
"backToMainMenu": "Вернуться в главное меню",
|
|
1113
|
+
"prompt": "Выберите язык (0-8):",
|
|
1114
|
+
"cancelled": "Смена языка отменена.",
|
|
1115
|
+
"invalid": "Неверный выбор. Пожалуйста, попробуйте снова.",
|
|
1116
|
+
"changed": "Язык изменён на: {language}",
|
|
1117
|
+
"changeFailed": "Не удалось сменить язык: {error}",
|
|
1118
|
+
"pressEnterToContinue": "Нажмите Enter для продолжения..."
|
|
1066
1119
|
},
|
|
1067
1120
|
"maintainLanguagePurity": {
|
|
1068
1121
|
"workflow_title": "🚀 Рабочий процесс поддержания чистоты языков",
|
|
@@ -1092,6 +1145,7 @@
|
|
|
1092
1145
|
"complete": "🎯 Завершить переводы (100% покрытия)",
|
|
1093
1146
|
"sizing": "📏 Анализ размеров",
|
|
1094
1147
|
"fix": "🛠️ Исправить переводы-заглушки",
|
|
1148
|
+
"scanner": "🔍 Сканировать проблемы i18n",
|
|
1095
1149
|
"workflow": "🔄 Запустить полный рабочий процесс",
|
|
1096
1150
|
"status": "📋 Показать статус проекта",
|
|
1097
1151
|
"delete": "🗑️ Удалить все отчёты",
|
|
@@ -1099,7 +1153,6 @@
|
|
|
1099
1153
|
"settings": "⚙️ Настройки",
|
|
1100
1154
|
"help": "❓ Справка",
|
|
1101
1155
|
"debug": "🔧 Инструменты отладки",
|
|
1102
|
-
"scanner": "🔍 Сканировать проблемы i18n",
|
|
1103
1156
|
"exit": "🚪 Выход"
|
|
1104
1157
|
},
|
|
1105
1158
|
"update": "📦 Обновить пакет",
|
|
@@ -1235,10 +1288,10 @@
|
|
|
1235
1288
|
},
|
|
1236
1289
|
"security": {
|
|
1237
1290
|
"pathValidationFailed": "path_validation_failed",
|
|
1238
|
-
"invalidInputType": "
|
|
1291
|
+
"invalidInputType": "инвалид_вход_тип",
|
|
1239
1292
|
"pathTraversalAttempt": "path_traversal_attempt",
|
|
1240
1293
|
"pathValidated": "✅ Путь успешно проверен",
|
|
1241
|
-
"pathValidationError": "
|
|
1294
|
+
"pathValidationError": "путь_проверка_ошибка",
|
|
1242
1295
|
"fileTooLarge": "🔒 Безопасность: Файл слишком большой: {filePath}",
|
|
1243
1296
|
"fileReadError": "🔒 Безопасность: Ошибка чтения файла: {errorMessage}",
|
|
1244
1297
|
"contentTooLargeForFile": "Безопасность: Содержимое слишком велико для файла: {filePath}",
|
|
@@ -1341,7 +1394,7 @@
|
|
|
1341
1394
|
"relativePathHint": "Используйте относительные пути от этой директории (например, ./src/i18n/locales)",
|
|
1342
1395
|
"currentDirectory": "Текущая директория проекта",
|
|
1343
1396
|
"startingSettings": "Начальные настройки:",
|
|
1344
|
-
"pin": "
|
|
1397
|
+
"pin": "ПРИКОЛОТЬ:",
|
|
1345
1398
|
"reportBug": {
|
|
1346
1399
|
"title": "Сообщить об ошибке",
|
|
1347
1400
|
"description": "Сообщите о любых проблемах или ошибках, которые вы обнаружили",
|
|
@@ -1402,10 +1455,10 @@
|
|
|
1402
1455
|
"failed": "Обновление не удалось.",
|
|
1403
1456
|
"prompt": "Хотите обновить пакет сейчас? (y/N):",
|
|
1404
1457
|
"promptDesc": "Это обновит пакет i18ntk до последней версии.",
|
|
1405
|
-
"confirm": "
|
|
1458
|
+
"confirm": "й",
|
|
1406
1459
|
"cancelled": "Обновление отменено.",
|
|
1407
|
-
"error": "
|
|
1408
|
-
"updating": "
|
|
1460
|
+
"error": "Не удалось обновить пакет",
|
|
1461
|
+
"updating": "Обновление пакета..."
|
|
1409
1462
|
},
|
|
1410
1463
|
"admin": {
|
|
1411
1464
|
"selectOption": "Выберите опцию:",
|
|
@@ -1462,11 +1515,11 @@
|
|
|
1462
1515
|
"importFailed": "Не удалось импортировать настройки: {error}",
|
|
1463
1516
|
"backupSuccess": "Резервная копия создана: {file}",
|
|
1464
1517
|
"backupFailed": "Не удалось создать резервную копию: {error}",
|
|
1465
|
-
"exportFilenamePrompt": "
|
|
1466
|
-
"importConfirm": "
|
|
1467
|
-
"importFilenamePrompt": "
|
|
1468
|
-
"manageBackups": "
|
|
1469
|
-
"restore": "
|
|
1518
|
+
"exportFilenamePrompt": "Введите имя файла экспорта:",
|
|
1519
|
+
"importConfirm": "Импортировать этот файл настроек? (да/нет):",
|
|
1520
|
+
"importFilenamePrompt": "Введите имя файла импорта:",
|
|
1521
|
+
"manageBackups": "Управление резервными копиями",
|
|
1522
|
+
"restore": "Восстановить настройки"
|
|
1470
1523
|
},
|
|
1471
1524
|
"selectOption": "Выберите опцию:",
|
|
1472
1525
|
"resetToDefaultsTitle": "Сброс настроек к значениям по умолчанию",
|
|
@@ -1919,9 +1972,9 @@
|
|
|
1919
1972
|
"confirmNo": "Нет"
|
|
1920
1973
|
},
|
|
1921
1974
|
"validation": {
|
|
1922
|
-
"valid": "
|
|
1923
|
-
"validatingPaths": "
|
|
1924
|
-
"validationComplete": "
|
|
1975
|
+
"valid": "Действительный",
|
|
1976
|
+
"validatingPaths": "Проверка настроенных путей...",
|
|
1977
|
+
"validationComplete": "Проверка пути завершена: {valid}/{total} действителен."
|
|
1925
1978
|
}
|
|
1926
1979
|
},
|
|
1927
1980
|
"summary": {
|
|
@@ -2057,8 +2110,8 @@
|
|
|
2057
2110
|
"sizingCommand": "Оценка команды",
|
|
2058
2111
|
"completeCommand": "Завершение команды",
|
|
2059
2112
|
"summaryCommand": "Сводка команды",
|
|
2060
|
-
"
|
|
2061
|
-
"
|
|
2113
|
+
"scannerCommand": "scanner - 🔍 Сканирование проблем i18n",
|
|
2114
|
+
"debugCommand": "Отладка команды"
|
|
2062
2115
|
},
|
|
2063
2116
|
"test_complete_system": {
|
|
2064
2117
|
"starting_test": "Начало теста",
|
|
@@ -2156,14 +2209,14 @@
|
|
|
2156
2209
|
"error_general": "Общая ошибка",
|
|
2157
2210
|
"use_help": "Используйте --help, чтобы получить справку"
|
|
2158
2211
|
},
|
|
2159
|
-
"cleaningUpReportFiles": "
|
|
2160
|
-
"couldNotDelete": "
|
|
2161
|
-
"deletedOldReportFiles": "
|
|
2162
|
-
"errorCleaningUpReports": "
|
|
2163
|
-
"noOldReportFilesToDelete": "
|
|
2164
|
-
"reportFilesPreserved": "
|
|
2165
|
-
"reportSaveFailed": "
|
|
2166
|
-
"reportSaved": "
|
|
2212
|
+
"cleaningUpReportFiles": "Очистка старых файлов отчетов...",
|
|
2213
|
+
"couldNotDelete": "Не удалось удалить {file}: {error}.",
|
|
2214
|
+
"deletedOldReportFiles": "Удалены {count} старых файлов отчета.",
|
|
2215
|
+
"errorCleaningUpReports": "Ошибка очистки отчетов: {error}.",
|
|
2216
|
+
"noOldReportFilesToDelete": "Нет старых файлов отчетов для удаления.",
|
|
2217
|
+
"reportFilesPreserved": "Файлы отчетов сохранены.",
|
|
2218
|
+
"reportSaveFailed": "Не удалось сохранить отчет в: {reportPath}.",
|
|
2219
|
+
"reportSaved": "Отчет сохранен в: {reportPath}."
|
|
2167
2220
|
},
|
|
2168
2221
|
"ui": {
|
|
2169
2222
|
"autoDetectedI18nDirectory": "Автоопределённая директория i18n: {path}",
|
|
@@ -2319,9 +2372,6 @@
|
|
|
2319
2372
|
"found_hardcoded_messages": "Найдены жестко закодированные сообщения",
|
|
2320
2373
|
"all_console_messages_use_translation": "Все сообщения консоли используют перевод"
|
|
2321
2374
|
},
|
|
2322
|
-
"\\nSelect directory to clean (0-${availableDirs": {
|
|
2323
|
-
"length + 1}): ": ""
|
|
2324
|
-
},
|
|
2325
2375
|
"exportTranslations": {
|
|
2326
2376
|
"createdDirectory": "Создана директория",
|
|
2327
2377
|
"foundFiles": "Найдены файлы",
|
|
@@ -2337,9 +2387,6 @@
|
|
|
2337
2387
|
"location": "Расположение",
|
|
2338
2388
|
"nextSteps": "Следующие шаги"
|
|
2339
2389
|
},
|
|
2340
|
-
")) {\n console": {
|
|
2341
|
-
"log(": "Лог("
|
|
2342
|
-
},
|
|
2343
2390
|
"dashboard": {
|
|
2344
2391
|
"title": "Заголовок",
|
|
2345
2392
|
"overview": "Обзор"
|
|
@@ -2352,112 +2399,14 @@
|
|
|
2352
2399
|
"forgotPassword": "Забыли пароль",
|
|
2353
2400
|
"signUp": "Зарегистрироваться"
|
|
2354
2401
|
},
|
|
2355
|
-
"scanner": {
|
|
2356
|
-
"title": "🕵️ i18n Сканнер Текста",
|
|
2357
|
-
"description": "Сканирует исходные файлы на наличие жестко закодированного английского текста",
|
|
2358
|
-
"usage": "Использование: i18ntk-scanner [опции]",
|
|
2359
|
-
"options": {
|
|
2360
|
-
"sourceDir": "Директория для сканирования",
|
|
2361
|
-
"outputDir": "Директория для отчетов",
|
|
2362
|
-
"patterns": "Пользовательские паттерны регулярных выражений",
|
|
2363
|
-
"framework": "Фреймворк (react, vue, angular, vanilla)",
|
|
2364
|
-
"extensions": "Расширения файлов для сканирования",
|
|
2365
|
-
"exclude": "Паттерны для исключения",
|
|
2366
|
-
"minLength": "Минимальная длина текста для сканирования",
|
|
2367
|
-
"maxLength": "Максимальная длина текста для сканирования",
|
|
2368
|
-
"includeTests": "Include test files?",
|
|
2369
|
-
"excludeDirs": "Directories to exclude (comma-separated):",
|
|
2370
|
-
"customPatterns": "Custom patterns to scan for (regex):"
|
|
2371
|
-
},
|
|
2372
|
-
"status": {
|
|
2373
|
-
"scanning": "🔍 Сканирование файлов...",
|
|
2374
|
-
"analyzing": "📊 Анализ найденного текста...",
|
|
2375
|
-
"generating": "📄 Генерация отчета...",
|
|
2376
|
-
"complete": "✅ Сканирование завершено",
|
|
2377
|
-
"found": "🎯 Найдено {count} элементов для перевода"
|
|
2378
|
-
},
|
|
2379
|
-
"results": {
|
|
2380
|
-
"title": "📊 Результаты Сканирования",
|
|
2381
|
-
"summary": "Сводка",
|
|
2382
|
-
"filesScanned": "Просканировано файлов",
|
|
2383
|
-
"textItemsFound": "Найдено текстовых элементов",
|
|
2384
|
-
"uniqueTexts": "Уникальные тексты",
|
|
2385
|
-
"filesWithText": "Файлы с текстом",
|
|
2386
|
-
"exportLocation": "Расположение экспорта"
|
|
2387
|
-
},
|
|
2388
|
-
"prompts": {
|
|
2389
|
-
"selectFramework": "Выберите фреймворк:",
|
|
2390
|
-
"enterSourceDir": "Введите директорию исходников",
|
|
2391
|
-
"enterOutputDir": "Введите директорию вывода",
|
|
2392
|
-
"confirmScan": "Начать сканирование?",
|
|
2393
|
-
"saveReport": "Сохранить отчет?"
|
|
2394
|
-
},
|
|
2395
|
-
"errors": {
|
|
2396
|
-
"invalidDirectory": "Неверная директория",
|
|
2397
|
-
"noFilesFound": "Файлы для сканирования не найдены",
|
|
2398
|
-
"scanFailed": "Ошибка сканирования",
|
|
2399
|
-
"exportFailed": "Ошибка экспорта отчета"
|
|
2400
|
-
},
|
|
2401
|
-
"help": {
|
|
2402
|
-
"examples": "Примеры использования:",
|
|
2403
|
-
"example1": "i18ntk-scanner --source-dir ./src --framework react",
|
|
2404
|
-
"example2": "i18ntk-scanner --patterns 'console\\.log\\s*\\([^)]*'",
|
|
2405
|
-
"example3": "i18ntk-scanner --extensions js,ts,tsx --min-length 3"
|
|
2406
|
-
},
|
|
2407
|
-
"help_options": {
|
|
2408
|
-
"source_dir": "Директория для сканирования",
|
|
2409
|
-
"output_dir": "Файл для вывода результатов",
|
|
2410
|
-
"framework": "Целевой фреймворк (react, vue, angular, vanilla)",
|
|
2411
|
-
"patterns": "Пользовательские паттерны регулярных выражений (через запятую)",
|
|
2412
|
-
"exclude": "Директории для исключения (через запятую)",
|
|
2413
|
-
"output_report": "Файл для вывода отчета",
|
|
2414
|
-
"min_length": "Минимальная длина текста для включения",
|
|
2415
|
-
"max_length": "Максимальная длина текста для включения",
|
|
2416
|
-
"include_tests": "Включать тестовые файлы в сканирование"
|
|
2417
|
-
},
|
|
2418
|
-
"reportGenerated": "Scan report generated: {path}",
|
|
2419
|
-
"help_message": "I18n Text Scanner Usage: node i18ntk-scanner.js [options] Options: --source-dir <dir> Source directory to scan (default: ./src) --output <file> Output file for scan results (default: ./i18ntk-scanner-report.json) --framework <name> Framework to target (react, vue, angular, vanilla) --patterns <patterns> Custom regex patterns (comma-separated) --include-tests Include test files in scan --exclude-dirs <dirs> Directories to exclude (comma-separated) --help Show this help Examples: 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",
|
|
2420
|
-
"starting": "🔍 Starting text scanner for framework: {framework}",
|
|
2421
|
-
"sourceDirectory": "📁 Scanning directory: {sourceDir}",
|
|
2422
|
-
"frameworkDetected": "🎯 Detected framework: {framework}",
|
|
2423
|
-
"scanningFiles": "📊 Scanning {fileCount} files...",
|
|
2424
|
-
"foundTexts": "📝 Found {textCount} texts requiring translation",
|
|
2425
|
-
"generatingReport": "📊 Generating detailed report...",
|
|
2426
|
-
"reportSaved": "💾 Scan report saved to: {reportPath}",
|
|
2427
|
-
"noTextsFound": "✅ No hardcoded English texts found",
|
|
2428
|
-
"scanComplete": "🎉 Scan completed successfully!",
|
|
2429
|
-
"analysisTitle": "🔍 TRANSLATION SCAN ANALYSIS",
|
|
2430
|
-
"fileSummary": "📄 {file}: {count} texts found",
|
|
2431
|
-
"textLocation": "📍 Line {line}: {text}",
|
|
2432
|
-
"foundText": "Found {count} potential hardcoded text instances",
|
|
2433
|
-
"context": "📝 Context: {context}",
|
|
2434
|
-
"severity": "⚠️ Severity: {severity}",
|
|
2435
|
-
"recommendation": "💡 Recommendation: {recommendation}",
|
|
2436
|
-
"welcome": {
|
|
2437
|
-
"title": "🎯 Welcome to the Text Scanner!",
|
|
2438
|
-
"description": "This tool scans your source code for hardcoded English text that may need translation."
|
|
2439
|
-
},
|
|
2440
|
-
"frameworkPrompt": {
|
|
2441
|
-
"title": "🎯 Select Framework",
|
|
2442
|
-
"available": "Available frameworks: react, vue, angular, vanilla",
|
|
2443
|
-
"description": "Enter the framework type (or press Enter for auto-detection):",
|
|
2444
|
-
"input": "Framework:"
|
|
2445
|
-
},
|
|
2446
|
-
"directoryPrompt": {
|
|
2447
|
-
"title": "📁 Select Source Directory",
|
|
2448
|
-
"current": "Current directory: {dir}",
|
|
2449
|
-
"description": "Enter the directory to scan (or press Enter for current):",
|
|
2450
|
-
"input": "Directory:"
|
|
2451
|
-
}
|
|
2452
|
-
},
|
|
2453
2402
|
"checkUsage": {
|
|
2454
|
-
"usage_analysis_failed": "
|
|
2403
|
+
"usage_analysis_failed": "Анализ использования не удался."
|
|
2455
2404
|
},
|
|
2456
2405
|
"completeTranslations": {
|
|
2457
|
-
"warning_could_not_parse_filepa": "
|
|
2406
|
+
"warning_could_not_parse_filepa": "Внимание: не удалось проанализировать путь к файлу: {filePath}."
|
|
2458
2407
|
},
|
|
2459
|
-
"pressEnterToContinue": "
|
|
2408
|
+
"pressEnterToContinue": "Нажмите Enter, чтобы продолжить...",
|
|
2460
2409
|
"status": {
|
|
2461
|
-
"exitingCompleted": "
|
|
2410
|
+
"exitingCompleted": "Рабочий процесс завершен. Выход..."
|
|
2462
2411
|
}
|
|
2463
2412
|
}
|