i18ntk 4.1.0 → 4.2.1

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.
Files changed (49) hide show
  1. package/CHANGELOG.md +64 -5
  2. package/README.md +73 -17
  3. package/SECURITY.md +10 -4
  4. package/main/i18ntk-analyze.js +10 -20
  5. package/main/i18ntk-backup.js +106 -44
  6. package/main/i18ntk-init.js +153 -157
  7. package/main/i18ntk-setup.js +36 -13
  8. package/main/i18ntk-sizing.js +44 -27
  9. package/main/i18ntk-translate.js +311 -41
  10. package/main/i18ntk-usage.js +272 -103
  11. package/main/i18ntk-validate.js +38 -31
  12. package/main/manage/commands/AnalyzeCommand.js +7 -17
  13. package/main/manage/commands/CommandRouter.js +6 -6
  14. package/main/manage/commands/SizingCommand.js +5 -2
  15. package/main/manage/commands/TranslateCommand.js +73 -56
  16. package/main/manage/commands/ValidateCommand.js +58 -26
  17. package/main/manage/index.js +11 -42
  18. package/main/manage/managers/InteractiveMenu.js +11 -40
  19. package/main/manage/services/InitService.js +114 -118
  20. package/main/manage/services/UsageService.js +247 -96
  21. package/package.json +19 -14
  22. package/runtime/enhanced.d.ts +5 -5
  23. package/runtime/enhanced.js +49 -25
  24. package/runtime/i18ntk.d.ts +30 -7
  25. package/runtime/index.d.ts +48 -19
  26. package/runtime/index.js +175 -90
  27. package/settings/settings-cli.js +115 -38
  28. package/settings/settings-manager.js +24 -6
  29. package/ui-locales/de.json +192 -11
  30. package/ui-locales/en.json +182 -8
  31. package/ui-locales/es.json +193 -12
  32. package/ui-locales/fr.json +189 -8
  33. package/ui-locales/ja.json +190 -8
  34. package/ui-locales/ru.json +191 -9
  35. package/ui-locales/zh.json +194 -9
  36. package/utils/cli-helper.js +8 -12
  37. package/utils/config-helper.js +1 -1
  38. package/utils/config-manager.js +8 -6
  39. package/utils/localized-confirm.js +55 -0
  40. package/utils/menu-layout.js +41 -0
  41. package/utils/report-writer.js +110 -0
  42. package/utils/security.js +15 -22
  43. package/utils/translate/api.js +31 -3
  44. package/utils/translate/placeholder.js +42 -1
  45. package/utils/translate/report.js +32 -4
  46. package/utils/translate/safe-network.js +24 -4
  47. package/utils/usage-insights.js +435 -0
  48. package/utils/usage-source.js +50 -0
  49. package/utils/watch-locales.js +1 -8
@@ -34,12 +34,75 @@ const colors = {
34
34
  bgYellow: '\x1b[43m'
35
35
  };
36
36
 
37
- function isAdminPinEnabled() {
38
- const cfg = configManager.getConfig();
39
- return cfg.security?.adminPinEnabled || false;
40
- }
41
-
42
- class SettingsCLI {
37
+ function isAdminPinEnabled() {
38
+ const cfg = configManager.getConfig();
39
+ return cfg.security?.adminPinEnabled || false;
40
+ }
41
+
42
+ function printHelp() {
43
+ console.log([
44
+ '',
45
+ 'i18n Toolkit Settings CLI',
46
+ '',
47
+ 'Usage: node settings/settings-cli.js [options]',
48
+ '',
49
+ 'Options:',
50
+ ' --help, -h Show this help message',
51
+ ' --list-languages Print supported UI/source language codes',
52
+ ' --language-status Print current language settings',
53
+ '',
54
+ 'Interactive Commands:',
55
+ ' 1) UI Settings - Configure language, theme, and UI preferences',
56
+ ' 2) Directory Settings - Set source and output directories',
57
+ ' 3) Script Directories - Configure script-specific paths',
58
+ ' 4) Processing Settings - Batch size, concurrency, thresholds',
59
+ ' 5) Security Settings - Admin PIN, session management',
60
+ ' 6) Advanced Settings - Strict mode, audit logging, backups',
61
+ ' 7) View All Settings - Display current configuration',
62
+ ' 8) Import/Export - Backup and restore settings',
63
+ ' 9) Reset to Defaults - Restore factory settings',
64
+ ' 0) Report Bug - Generate bug report',
65
+ ' u) Update Package - Update i18n toolkit',
66
+ ' s) Save Changes - Save current configuration',
67
+ ' h) Help - Show available commands',
68
+ ' q) Quit - Exit settings CLI',
69
+ '',
70
+ 'Examples:',
71
+ ' node settings/settings-cli.js',
72
+ ' npm run languages:list',
73
+ ' npm run languages:status',
74
+ '',
75
+ 'Note: Run without options to open the interactive menu.',
76
+ ].join('\n'));
77
+ }
78
+
79
+ function printAvailableLanguages() {
80
+ console.log('Available languages:');
81
+ for (const language of settingsManager.getAvailableLanguages()) {
82
+ console.log(` ${language.code} - ${language.name}`);
83
+ }
84
+ }
85
+
86
+ function printLanguageStatus() {
87
+ const settings = configManager.getConfig();
88
+ const availableLanguages = settingsManager.getAvailableLanguages().map(language => language.code);
89
+ const available = new Set(availableLanguages);
90
+ const uiLanguage = settings.uiLanguage || settings.language || 'en';
91
+ const sourceLanguage = settings.sourceLanguage || settings.language || 'en';
92
+ const targetLanguages = Array.isArray(settings.targetLanguages)
93
+ ? settings.targetLanguages
94
+ : Array.isArray(settings.defaultLanguages)
95
+ ? settings.defaultLanguages
96
+ : [];
97
+
98
+ console.log('Language status:');
99
+ console.log(` UI language: ${uiLanguage}${available.has(uiLanguage) ? '' : ' (not in supported list)'}`);
100
+ console.log(` Source language: ${sourceLanguage}${available.has(sourceLanguage) ? '' : ' (not in supported list)'}`);
101
+ console.log(` Target languages: ${targetLanguages.length ? targetLanguages.join(', ') : '(none configured)'}`);
102
+ console.log(` Supported languages: ${availableLanguages.join(', ')}`);
103
+ }
104
+
105
+ class SettingsCLI {
43
106
  constructor() {
44
107
  this.rl = null; // Use cliHelper instead
45
108
  this.settings = null;
@@ -137,7 +200,7 @@ class SettingsCLI {
137
200
  { key: '7', label: t('settings.mainMenu.advancedSettings'), description: t('settings.mainMenu.advancedSettingsDesc') },
138
201
  { key: '8', label: t('settings.mainMenu.viewAllSettings'), description: t('settings.mainMenu.viewAllSettingsDesc') },
139
202
  { key: '9', label: t('settings.mainMenu.importExport'), description: t('settings.mainMenu.importExportDesc') },
140
- { key: 'a', label: 'Auto Translate Beta', description: 'Tune placeholder handling, concurrency, batching, and reports' },
203
+ { key: 'a', label: t('settings.mainMenu.autoTranslate'), description: t('settings.mainMenu.autoTranslateDesc') },
141
204
  { key: '0', label: t('settings.mainMenu.reportBug'), description: t('settings.mainMenu.reportBugDesc') },
142
205
  { key: 'x', label: 'Reset Script Directory Overrides', description: 'Clear script directory overrides and use defaults' },
143
206
  { key: 'r', label: t('settings.mainMenu.resetToDefaults'), description: t('settings.mainMenu.resetToDefaultsDesc') },
@@ -332,23 +395,24 @@ class SettingsCLI {
332
395
 
333
396
  this.clearScreen();
334
397
  this.showHeader();
335
- console.log(`${colors.bright}Auto Translate Beta Settings${colors.reset}\n`);
398
+ console.log(`${colors.bright}${t('settings.categories.autoTranslate')}${colors.reset}\n`);
336
399
 
337
400
  const autoTranslateSettings = {
338
- 'autoTranslate.placeholderMode': 'Placeholder handling mode',
339
- 'autoTranslate.concurrency': 'Concurrent translation requests',
340
- 'autoTranslate.batchSize': 'Text segments per batch',
341
- 'autoTranslate.progressInterval': 'Progress update interval',
342
- 'autoTranslate.retryCount': 'Retry count',
343
- 'autoTranslate.retryDelay': 'Retry delay (ms)',
344
- 'autoTranslate.timeout': 'Request timeout (ms)',
345
- 'autoTranslate.dryRunFirst': 'Dry-run preview first',
346
- 'autoTranslate.reportStdout': 'Print report to terminal',
347
- 'autoTranslate.bom': 'Write UTF-8 BOM',
348
- 'autoTranslate.protectionEnabled': 'Protect brand terms, keys, values',
349
- 'autoTranslate.protectionFile': 'Protection JSON file',
350
- 'autoTranslate.promptProtectionSetup': 'Ask to create protection file',
351
- 'autoTranslate.promptProtectionUpdate': 'Ask to update protection rules'
401
+ 'autoTranslate.placeholderMode': t('settings.fields.autoTranslate_placeholderMode.label'),
402
+ 'autoTranslate.concurrency': t('settings.fields.autoTranslate_concurrency.label'),
403
+ 'autoTranslate.batchSize': t('settings.fields.autoTranslate_batchSize.label'),
404
+ 'autoTranslate.progressInterval': t('settings.fields.autoTranslate_progressInterval.label'),
405
+ 'autoTranslate.retryCount': t('settings.fields.autoTranslate_retryCount.label'),
406
+ 'autoTranslate.retryDelay': t('settings.fields.autoTranslate_retryDelay.label'),
407
+ 'autoTranslate.timeout': t('settings.fields.autoTranslate_timeout.label'),
408
+ 'autoTranslate.dryRunFirst': t('settings.fields.autoTranslate_dryRunFirst.label'),
409
+ 'autoTranslate.onlyMissingOrEnglish': t('settings.fields.autoTranslate_onlyMissingOrEnglish.label'),
410
+ 'autoTranslate.reportStdout': t('settings.fields.autoTranslate_reportStdout.label'),
411
+ 'autoTranslate.bom': t('settings.fields.autoTranslate_bom.label'),
412
+ 'autoTranslate.protectionEnabled': t('settings.fields.autoTranslate_protectionEnabled.label'),
413
+ 'autoTranslate.protectionFile': t('settings.fields.autoTranslate_protectionFile.label'),
414
+ 'autoTranslate.promptProtectionSetup': t('settings.fields.autoTranslate_promptProtectionSetup.label'),
415
+ 'autoTranslate.promptProtectionUpdate': t('settings.fields.autoTranslate_promptProtectionUpdate.label')
352
416
  };
353
417
 
354
418
  await this.showSettingsCategory(autoTranslateSettings);
@@ -400,11 +464,12 @@ class SettingsCLI {
400
464
  this.showHeader();
401
465
  console.log(`${colors.bright}${t('settings.categories.advancedSettings')}${colors.reset}\n`);
402
466
 
403
- const advancedSettings = {
404
- 'advanced.strictMode': t('settings.fields.strictMode.label'),
405
- 'advanced.enableAuditLog': t('settings.fields.enableAuditLog.label'),
406
- 'advanced.backupBeforeChanges': t('settings.fields.backupBeforeChanges.label')
407
- };
467
+ const advancedSettings = {
468
+ 'advanced.strictMode': t('settings.fields.strictMode.label'),
469
+ 'advanced.enableAuditLog': t('settings.fields.enableAuditLog.label'),
470
+ 'advanced.backupBeforeChanges': t('settings.fields.backupBeforeChanges.label'),
471
+ 'reports.format': t('settings.fields.reports_format.label')
472
+ };
408
473
 
409
474
  await this.showSettingsCategory(advancedSettings);
410
475
  }
@@ -522,11 +587,11 @@ class SettingsCLI {
522
587
  'security.maxFailedAttempts',
523
588
  'security.lockoutDuration',
524
589
  'security.pinProtection.enabled',
525
- 'advanced.strictMode',
526
- 'debug.enabled',
527
- 'debug.verboseLogging',
528
- 'advanced.backupBeforeChanges'
529
- ];
590
+ 'advanced.strictMode',
591
+ 'debug.enabled',
592
+ 'debug.verboseLogging',
593
+ 'advanced.backupBeforeChanges'
594
+ ];
530
595
  return adminProtectedSettings.includes(key);
531
596
  }
532
597
 
@@ -563,11 +628,13 @@ class SettingsCLI {
563
628
  'debug.verboseLogging': ['true', 'false'],
564
629
  'security.adminPinEnabled': ['true', 'false'],
565
630
  'security.pinProtection.enabled': ['true', 'false'],
566
- 'advanced.backupBeforeChanges': ['true', 'false'],
631
+ 'advanced.backupBeforeChanges': ['true', 'false'],
632
+ 'reports.format': ['markdown', 'json', 'text'],
567
633
  'backup.enabled': ['true', 'false'],
568
634
  'backup.singleFileMode': ['true', 'false'],
569
635
  'autoTranslate.placeholderMode': ['preserve', 'skip', 'send'],
570
636
  'autoTranslate.dryRunFirst': ['true', 'false'],
637
+ 'autoTranslate.onlyMissingOrEnglish': ['true', 'false'],
571
638
  'autoTranslate.reportStdout': ['true', 'false'],
572
639
  'autoTranslate.bom': ['true', 'false'],
573
640
  'autoTranslate.protectionEnabled': ['true', 'false'],
@@ -608,7 +675,7 @@ class SettingsCLI {
608
675
  'logRetention': { min: 1, max: 90, type: 'int', unit: 'days' },
609
676
  'retentionDays': { min: 1, max: 365, type: 'int', unit: 'days' },
610
677
  'maxBackups': { min: 1, max: 3, type: 'int' },
611
- 'autoTranslate.concurrency': { min: 1, max: 25, type: 'int' },
678
+ 'autoTranslate.concurrency': { min: 1, max: 100, type: 'int' },
612
679
  'autoTranslate.batchSize': { min: 1, max: 10000, type: 'int' },
613
680
  'autoTranslate.progressInterval': { min: 1, max: 10000, type: 'int' },
614
681
  'autoTranslate.retryCount': { min: 0, max: 10, type: 'int' },
@@ -2137,10 +2204,20 @@ ${colors.dim}${t('settings.updatePackage.command')}: npm update i18ntk -g${color
2137
2204
  module.exports = SettingsCLI;
2138
2205
 
2139
2206
  // If run directly, start the CLI
2140
- if (require.main === module) {
2141
- const args = process.argv.slice(2);
2142
-
2143
- // Handle --help flag
2207
+ if (require.main === module) {
2208
+ const args = process.argv.slice(2);
2209
+
2210
+ if (args.includes('--list-languages')) {
2211
+ printAvailableLanguages();
2212
+ process.exit(0);
2213
+ }
2214
+
2215
+ if (args.includes('--language-status')) {
2216
+ printLanguageStatus();
2217
+ process.exit(0);
2218
+ }
2219
+
2220
+ // Handle --help flag
2144
2221
  if (args.includes('--help') || args.includes('-h')) {
2145
2222
  console.log(`
2146
2223
  🌍 i18n Toolkit Settings CLI
@@ -54,13 +54,14 @@ class SettingsManager {
54
54
  },
55
55
  "autoTranslate": {
56
56
  "placeholderMode": "preserve",
57
- "concurrency": 6,
57
+ "concurrency": 12,
58
58
  "batchSize": 100,
59
59
  "progressInterval": 25,
60
60
  "retryCount": 3,
61
61
  "retryDelay": 1000,
62
62
  "timeout": 15000,
63
63
  "dryRunFirst": true,
64
+ "onlyMissingOrEnglish": true,
64
65
  "reportStdout": true,
65
66
  "bom": false,
66
67
  "protectionEnabled": true,
@@ -69,7 +70,7 @@ class SettingsManager {
69
70
  "promptProtectionUpdate": true
70
71
  },
71
72
  "reports": {
72
- "format": "json",
73
+ "format": "markdown",
73
74
  "includeSource": false,
74
75
  "includeStats": true,
75
76
  "includeRecommendations": true,
@@ -807,6 +808,18 @@ class SettingsManager {
807
808
  description: 'Directory for generated reports',
808
809
  default: './i18ntk-reports'
809
810
  },
811
+ reports: {
812
+ type: 'object',
813
+ description: 'Generated report output settings',
814
+ properties: {
815
+ format: {
816
+ type: 'string',
817
+ description: 'Report file format',
818
+ enum: ['markdown', 'json', 'text'],
819
+ default: 'markdown'
820
+ }
821
+ }
822
+ },
810
823
  framework: {
811
824
  type: 'object',
812
825
  description: 'Framework preference and detection settings',
@@ -897,7 +910,7 @@ class SettingsManager {
897
910
  },
898
911
  autoTranslate: {
899
912
  type: 'object',
900
- description: 'Auto Translate beta defaults',
913
+ description: 'Auto Translate defaults',
901
914
  properties: {
902
915
  placeholderMode: {
903
916
  type: 'string',
@@ -907,10 +920,10 @@ class SettingsManager {
907
920
  },
908
921
  concurrency: {
909
922
  type: 'number',
910
- description: 'Maximum concurrent translation requests',
923
+ description: 'Maximum concurrent translation requests (Google supports up to 100 in i18ntk; other providers are capped lower)',
911
924
  minimum: 1,
912
- maximum: 25,
913
- default: 6
925
+ maximum: 100,
926
+ default: 12
914
927
  },
915
928
  batchSize: {
916
929
  type: 'number',
@@ -952,6 +965,11 @@ class SettingsManager {
952
965
  description: 'Run a dry-run preview before interactive manager translation',
953
966
  default: true
954
967
  },
968
+ onlyMissingOrEnglish: {
969
+ type: 'boolean',
970
+ description: 'Only translate keys missing from the target, untranslated markers, source-language copies, or likely English target text',
971
+ default: true
972
+ },
955
973
  reportStdout: {
956
974
  type: 'boolean',
957
975
  description: 'Print the post-translation report to stdout',
@@ -536,7 +536,7 @@
536
536
  "argsParseFailed": "Das Parsen des Arguments ist fehlgeschlagen: {error}",
537
537
  "translationDiscoveryError": "Fehler bei der Übersetzungserkennung: {error}",
538
538
  "fileTraversalError": "Dateidurchlauffehler: {error}",
539
- "sourceEqualsI18nWarn": "⚠️ Quellverzeichnis und i18n-Verzeichnis sind identisch. Dies kann zu Problemen bei der Analyse führen.",
539
+ "sourceEqualsI18nWarn": "{reason}. Die Nutzungsanalyse scannt keine Locale-Dateien als Quellcode.",
540
540
  "i18nEqualsSourceWarn": "⚠️ I18n-Verzeichnis und Quellverzeichnis sind identisch. Dies kann zu Problemen bei der Analyse führen.",
541
541
  "usageAnalysisFailed": "⚠️ Nutzungsanalyse fehlgeschlagen: {error}",
542
542
  "translationFileParseError": "⚠️ Fehler beim Parsen der Übersetzungsdatei: {error}",
@@ -621,11 +621,11 @@
621
621
  "missingKeysAdded": "➕ Fehlende Schlüssel hinzugefügt: {missingKeysAdded}",
622
622
  "nextStepsTitle": "📋 NÄCHSTE SCHRITTE",
623
623
  "nextStep1": "1. Nutzungsanalyse ausführen:",
624
- "nextStep2": "node i18ntk-usage.js --output-report",
624
+ "nextStep2": "Knoten i18ntk-usage.js --output-report",
625
625
  "nextStep3": "2. Übersetzungen validieren:",
626
- "nextStep4": "node i18ntk-validate.js",
626
+ "nextStep4": "Knoten i18ntk-validate.js",
627
627
  "nextStep5": "3. Muster analysieren:",
628
- "nextStep6": "node i18ntk-analyze.js",
628
+ "nextStep6": "Knoten i18ntk-analyze.js",
629
629
  "allKeysAvailable": "🎉 Alle Übersetzungsschlüssel sind jetzt verfügbar!",
630
630
  "runWithoutDryRun": "💡 Ohne --dry-run ausführen, um Änderungen zu übernehmen",
631
631
  "deletingOldReport": "🗑️Alten Bericht löschen...",
@@ -642,7 +642,8 @@
642
642
  "failedToSaveReport": "Nutzungsbericht konnte nicht gespeichert werden: {error}",
643
643
  "i18nDirectoryDoesNotExist": "I18n-Verzeichnis existiert nicht: {dir}",
644
644
  "reportSavedTo": "Nutzungsbericht gespeichert unter: {reportPath}",
645
- "sourceDirectoryDoesNotExist": "Quellverzeichnis existiert nicht: {dir}"
645
+ "sourceDirectoryDoesNotExist": "Quellverzeichnis existiert nicht: {dir}",
646
+ "noSourceDirectoryConfigured": "(nicht konfiguriert)"
646
647
  },
647
648
  "validate": {
648
649
  "help_message": "Verwendung des I18n-Übersetzungsvalidators: Knoten i18ntk-validate.js [Optionen] Optionen: --source-dir <dir> Zu scannendes Quellverzeichnis (Standard: ./src) --i18n-dir <dir> I18n-Verzeichnis (Standard: ./src/locales) --output-report Detaillierten Bericht erstellen --output-dir <dir> Ausgabeverzeichnis für Berichte (Standard: ./reports) --help Diese Hilfe anzeigen Beispiele: 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",
@@ -922,7 +923,7 @@
922
923
  "summaryCommand": "Zusammenfassung – Projektstatus anzeigen",
923
924
  "debugCommand": "debug – Übersetzungsprobleme debuggen",
924
925
  "scannerCommand": "Scanner – Nach Schlüsseln suchen",
925
- "translateCommand": "Translate – Gebietsschemadateien automatisch übersetzen (Beta)",
926
+ "translateCommand": "Translate – Gebietsschemadateien automatisch übersetzen",
926
927
  "menu": {
927
928
  "pressEnterToContinue": "Drücken Sie die Eingabetaste, um fortzufahren...",
928
929
  "title": "🌐 I18NTK-VERWALTUNGSMENÜ",
@@ -1102,7 +1103,32 @@
1102
1103
  "translationFilesCreatedWarning": "Übersetzungsdateien wurden mit Platzhaltern erstellt; Überprüfung vor dem Produktionseinsatz.",
1103
1104
  "warningCannotReadSourceDir": "Warnung: Quellverzeichnis kann nicht gelesen werden {dir}: {error}",
1104
1105
  "warningInvalidLanguageCodes": "Warnung: Ungültige Sprachcodes werden ignoriert: {languages}",
1105
- "warningProceedingWithoutFramework": "Fortfahren ohne erkanntes i18n-Framework."
1106
+ "warningProceedingWithoutFramework": "Fortfahren ohne erkanntes i18n-Framework.",
1107
+ "backup": {
1108
+ "title": "Backup-Einstellungen",
1109
+ "description": "Backups sind standardm??ig deaktiviert, um Backup-Rekursion und Repository-Verschmutzung zu vermeiden.",
1110
+ "enablePrompt": "Automatische Backups aktivieren? (j/N): ",
1111
+ "keepPrompt": "Wie viele Backups automatisch aufbewahren (1-3, Standard 1): "
1112
+ },
1113
+ "completionSummaryTitle": "Abschluss?bersicht",
1114
+ "completionSummaryBasicTitle": "Abschluss?bersicht (Basis)",
1115
+ "totalChanges": "?nderungen gesamt: {count}",
1116
+ "languagesProcessed": "Verarbeitete Sprachen: {count}",
1117
+ "missingKeysAdded": "Fehlende Schl?ssel hinzugef?gt: {count}",
1118
+ "reportPrompt": "Soll ein Bericht erstellt werden? (J/n): ",
1119
+ "reportGenerated": "Bericht erstellt: {reportPath}",
1120
+ "reportFailed": "Bericht konnte nicht erstellt werden: {error}",
1121
+ "completionError": "Fehler beim Abschluss: {error}",
1122
+ "optimize": {
1123
+ "title": "Paketgroesse optimieren",
1124
+ "preview": "Vorschau der Locale-Optimierung wird ausgefuehrt...",
1125
+ "reduceTip": "Sie koennen die Paketgroesse reduzieren, indem Sie nur benoetigte Sprachen auswaehlen.",
1126
+ "prompt": "Interaktive Optimierung jetzt starten? (j/N): ",
1127
+ "starting": "Interaktive Locale-Optimierung wird gestartet...",
1128
+ "completed": "Paketoptimierung abgeschlossen.",
1129
+ "later": "Sie koennen die Locale-Optimierung spaeter ausfuehren mit:",
1130
+ "unavailable": "Locale-Optimierung konnte nicht angeboten werden: {error}"
1131
+ }
1106
1132
  },
1107
1133
  "language": {
1108
1134
  "title": "🌍 Sprache ändern",
@@ -1147,7 +1173,7 @@
1147
1173
  "sizing": "📏 Analysieren Sie die Größe",
1148
1174
  "fix": "🛠️ Platzhalterübersetzungen korrigieren",
1149
1175
  "scanner": "🔍 Nach i18n-Problemen suchen",
1150
- "translate": "🌐 Automatische Übersetzung (Beta)",
1176
+ "translate": "🌐 Automatische Übersetzung",
1151
1177
  "workflow": "🔄 Führen Sie den vollständigen Workflow aus",
1152
1178
  "status": "📋 Projektstatus anzeigen",
1153
1179
  "delete": "🗑️ Alle Berichte löschen",
@@ -1447,7 +1473,9 @@
1447
1473
  "securitySettings": "Sicherheitseinstellungen",
1448
1474
  "securitySettingsDesc": "Admin-PIN und andere Sicherheitsoptionen",
1449
1475
  "backupSettings": "Sicherungseinstellungen",
1450
- "backupSettingsDesc": "Konfigurationseinstellungen sichern und wiederherstellen"
1476
+ "backupSettingsDesc": "Konfigurationseinstellungen sichern und wiederherstellen",
1477
+ "autoTranslate": "Automatische Uebersetzung",
1478
+ "autoTranslateDesc": "Platzhalter, Parallelitaet, Batches und Berichte anpassen"
1451
1479
  },
1452
1480
  "updatePackage": {
1453
1481
  "title": "Paket aktualisieren",
@@ -1569,7 +1597,8 @@
1569
1597
  "processingSettings": "Verarbeitungseinstellungen",
1570
1598
  "advancedSettings": "Erweiterte Einstellungen",
1571
1599
  "scriptDirectorySettings": "Skriptverzeichniseinstellungen",
1572
- "securitySettings": "Sicherheitseinstellungen"
1600
+ "securitySettings": "Sicherheitseinstellungen",
1601
+ "autoTranslate": "Einstellungen fuer automatische Uebersetzung"
1573
1602
  },
1574
1603
  "security": {
1575
1604
  "title": "🔐 Sicherheitseinstellungen",
@@ -1925,6 +1954,70 @@
1925
1954
  "description": "Für Sicherungsvorgänge ist eine Bestätigung erforderlich",
1926
1955
  "help": "Bestätigen Sie den Sicherungsvorgang"
1927
1956
  }
1957
+ },
1958
+ "reports_format": {
1959
+ "label": "Berichtsformat",
1960
+ "help": "Wahlen Sie markdown fur lesbare Berichte, json fur Automatisierung oder text fur einfache Protokolle."
1961
+ },
1962
+ "autoTranslate_placeholderMode": {
1963
+ "label": "Platzhalter-Behandlungsmodus",
1964
+ "help": "Wie Zeichenfolgen mit Platzhaltern bei der automatischen Uebersetzung behandelt werden."
1965
+ },
1966
+ "autoTranslate_concurrency": {
1967
+ "label": "Gleichzeitige Uebersetzungsanfragen",
1968
+ "help": "Maximale Anzahl gleichzeitiger Provider-Anfragen. Google unterstuetzt in i18ntk bis zu 100; DeepL und LibreTranslate sind niedriger begrenzt."
1969
+ },
1970
+ "autoTranslate_batchSize": {
1971
+ "label": "Textsegmente pro Batch",
1972
+ "help": "Anzahl der Textsegmente, die pro Batch geplant werden."
1973
+ },
1974
+ "autoTranslate_progressInterval": {
1975
+ "label": "Fortschrittsintervall",
1976
+ "help": "Abgeschlossene Textsegmente zwischen Fortschrittsmeldungen."
1977
+ },
1978
+ "autoTranslate_retryCount": {
1979
+ "label": "Wiederholungen",
1980
+ "help": "Maximale Wiederholungen pro fehlgeschlagener Anfrage."
1981
+ },
1982
+ "autoTranslate_retryDelay": {
1983
+ "label": "Wiederholungsverzoegerung (ms)",
1984
+ "help": "Basis-Verzoegerung fuer Wiederholungen in Millisekunden."
1985
+ },
1986
+ "autoTranslate_timeout": {
1987
+ "label": "Anfrage-Timeout (ms)",
1988
+ "help": "Timeout fuer Anfragen an den Uebersetzungsanbieter."
1989
+ },
1990
+ "autoTranslate_dryRunFirst": {
1991
+ "label": "Zuerst Vorschau ausfuehren",
1992
+ "help": "Vor dem Schreiben der Dateien anzeigen, was uebersetzt wird."
1993
+ },
1994
+ "autoTranslate_onlyMissingOrEnglish": {
1995
+ "label": "Nur fehlende oder englische Schluessel",
1996
+ "help": "Bestehende Zieluebersetzungen behalten und nur fehlende, Marker-, Quellkopie- oder wahrscheinlich englische Werte uebersetzen."
1997
+ },
1998
+ "autoTranslate_reportStdout": {
1999
+ "label": "Bericht im Terminal ausgeben",
2000
+ "help": "Den Bericht nach der Uebersetzung in stdout ausgeben."
2001
+ },
2002
+ "autoTranslate_bom": {
2003
+ "label": "UTF-8-BOM schreiben",
2004
+ "help": "Uebersetzte JSON-Dateien mit UTF-8-BOM schreiben."
2005
+ },
2006
+ "autoTranslate_protectionEnabled": {
2007
+ "label": "Markenbegriffe, Schluessel und Werte schuetzen",
2008
+ "help": "Benutzerdefinierte geschuetzte Begriffe, Schluessel, Werte und Muster aktivieren."
2009
+ },
2010
+ "autoTranslate_protectionFile": {
2011
+ "label": "Schutz-JSON-Datei",
2012
+ "help": "Projekt-JSON-Datei mit Schutzregeln fuer automatische Uebersetzung."
2013
+ },
2014
+ "autoTranslate_promptProtectionSetup": {
2015
+ "label": "Nach Erstellung der Schutzdatei fragen",
2016
+ "help": "Beim ersten Start der automatischen Uebersetzung nach Erstellung der Schutzdatei fragen."
2017
+ },
2018
+ "autoTranslate_promptProtectionUpdate": {
2019
+ "label": "Nach Aktualisierung der Schutzregeln fragen",
2020
+ "help": "Vor Manager-Uebersetzungen fragen, ob Schutzregeln aktualisiert werden sollen."
1928
2021
  }
1929
2022
  },
1930
2023
  "actions": {
@@ -2143,7 +2236,7 @@
2143
2236
  "completeCommand": "vollständig – Vollständige Übersetzungen (100 % Abdeckung)",
2144
2237
  "summaryCommand": "Zusammenfassung – Projektstatus anzeigen",
2145
2238
  "scannerCommand": "Scanner – Nach i18n-Problemen suchen",
2146
- "translateCommand": "Translate – Gebietsschemadateien automatisch übersetzen (Beta)",
2239
+ "translateCommand": "Translate – Gebietsschemadateien automatisch übersetzen",
2147
2240
  "debugCommand": "debug – Übersetzungsprobleme debuggen"
2148
2241
  },
2149
2242
  "test_complete_system": {
@@ -2441,5 +2534,93 @@
2441
2534
  "pressEnterToContinue": "Drücken Sie die Eingabetaste, um fortzufahren...",
2442
2535
  "status": {
2443
2536
  "exitingCompleted": "Workflow abgeschlossen. Verlassen..."
2537
+ },
2538
+ "prompt": {
2539
+ "yesTokens": [
2540
+ "j",
2541
+ "ja",
2542
+ "y",
2543
+ "yes"
2544
+ ],
2545
+ "noTokens": [
2546
+ "N",
2547
+ "nein",
2548
+ "no"
2549
+ ]
2550
+ },
2551
+ "translate": {
2552
+ "title": "Automatische Uebersetzung",
2553
+ "sourceDirectory": {
2554
+ "title": "Quell-Locale-Verzeichnis",
2555
+ "currentProject": "Aktuelles Projekt: {dir}",
2556
+ "accepted": "Akzeptiert: ein absoluter Pfad oder ein Pfad relativ zum aktuellen Projekt.",
2557
+ "localeRootExample": "./locales (danach Quellsprache waehlen: en)",
2558
+ "folderHint": "Der Ordner kann JSON-Dateien direkt enthalten oder Sprachordner wie ./locales/en.",
2559
+ "defaultNotFound": "Standardverzeichnis nicht gefunden: {dir}",
2560
+ "enterExisting": "Bitte ein vorhandenes Verzeichnis mit JSON-Locale-Dateien eingeben.",
2561
+ "directoryNotFound": "Verzeichnis nicht gefunden: {dir}",
2562
+ "enterFolderExample": "Vorhandenen Ordner eingeben, zum Beispiel ./locales/en.",
2563
+ "notDirectory": "Kein Verzeichnis: {dir}",
2564
+ "using": "Quellverzeichnis wird verwendet: {dir}",
2565
+ "noJsonDirect": "Keine JSON-Dateien direkt gefunden in: {dir}",
2566
+ "usingLanguageFolder": "Quellsprachordner wird verwendet: {dir}",
2567
+ "noJsonWithLanguageFolder": "Keine JSON-Dateien gefunden in: {dir}\nQuellsprachordner ebenfalls geprueft: {languageDir}",
2568
+ "noJson": "Keine JSON-Dateien gefunden in: {dir}"
2569
+ },
2570
+ "targetLanguages": {
2571
+ "title": "Zielsprache(n)",
2572
+ "allConfigured": "a) Alle konfigurierten Zielsprachen: {languages}",
2573
+ "noneConfigured": "a) Alle konfigurierten Zielsprachen: keine konfiguriert",
2574
+ "enterCodes": "Oder einen oder mehrere Sprachcodes durch Komma/Leerzeichen getrennt eingeben.",
2575
+ "sourceExcluded": "Quellsprache \"{lang}\" wird automatisch ausgeschlossen.",
2576
+ "noneSelected": "Keine gueltigen Zielsprachen ausgewaehlt. Abbruch.",
2577
+ "configureHint": "defaultLanguages in .i18ntk-config konfigurieren oder Zielcodes manuell eingeben.",
2578
+ "selected": "Zielsprachen: {languages}"
2579
+ },
2580
+ "protection": {
2581
+ "title": "Geschuetzte Begriffe und Schluessel"
2582
+ },
2583
+ "common": {
2584
+ "default": "Standard: {value}",
2585
+ "examples": "Beispiele:",
2586
+ "exampleValue": "Beispiel: {value}",
2587
+ "examplesInline": "Beispiele: {examples}",
2588
+ "pressEnterDefault": "Enter druecken, um den Standard zu verwenden.",
2589
+ "usingDefault": "Standard wird verwendet: {value}"
2590
+ },
2591
+ "sourceLanguage": {
2592
+ "title": "Quellsprachcode",
2593
+ "hint": "Dies sollte zur Sprache der Werte in den Quell-JSON-Dateien passen.",
2594
+ "using": "Quellsprache wird verwendet: {lang}",
2595
+ "invalid": "Ungueltiger Sprachcode. Mindestens 2 Zeichen verwenden (z. B. en, de, fr)."
2596
+ },
2597
+ "files": {
2598
+ "title": "Welche Datei(en) uebersetzen?",
2599
+ "all": "a) Alle JSON-Dateien ({count}: {files})",
2600
+ "choicePrompt": "Auswahl [a/all oder Dateinummer]: ",
2601
+ "invalidChoice": "Ungueltige Auswahl. Abbruch."
2602
+ },
2603
+ "dryRun": {
2604
+ "previewFor": "Vorschau fuer \"{lang}\"..."
2605
+ },
2606
+ "confirm": {
2607
+ "proceed": "Mit der eigentlichen Uebersetzung fortfahren?",
2608
+ "yesNoPrompt": "[j]a / [n]ein: ",
2609
+ "cancelled": "Uebersetzung abgebrochen."
2610
+ },
2611
+ "run": {
2612
+ "translatingTo": "Uebersetze nach \"{lang}\"...",
2613
+ "failedFor": "Fehlgeschlagen fuer \"{lang}\": {error}"
2614
+ },
2615
+ "summary": {
2616
+ "title": "Zusammenfassung:",
2617
+ "complete": "Uebersetzung abgeschlossen!"
2618
+ },
2619
+ "nonInteractive": {
2620
+ "useDirect": "Nicht-interaktiver Modus. Direkte CLI verwenden:"
2621
+ },
2622
+ "errors": {
2623
+ "sourceDirectoryNotFound": "Quell-Locale-Verzeichnis nicht gefunden: {dir}"
2624
+ }
2444
2625
  }
2445
2626
  }