i18ntk 2.0.3 → 2.1.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 +36 -32
- package/main/i18ntk-analyze.js +59 -54
- package/main/i18ntk-ui.js +96 -49
- package/main/manage/commands/AnalyzeCommand.js +59 -54
- package/main/manage/index.js +140 -71
- package/package.json +290 -290
- package/scripts/fix-all-i18n.js +41 -20
- package/scripts/fix-and-purify-i18n.js +43 -23
- package/scripts/prepublish-dev.js +221 -0
- package/scripts/prepublish.js +155 -141
- package/scripts/validate-all-translations.js +190 -134
- package/ui-locales/de.json +149 -155
- package/ui-locales/en.json +1 -7
- package/ui-locales/es.json +159 -173
- package/ui-locales/fr.json +143 -150
- package/ui-locales/ja.json +181 -233
- package/ui-locales/ru.json +133 -185
- package/ui-locales/zh.json +168 -175
- package/utils/cli-helper.js +26 -98
- package/utils/extractors/regex.js +39 -12
- package/utils/i18n-helper.js +181 -128
- package/utils/security-check-improved.js +16 -13
- package/utils/security-fixed.js +6 -4
- package/utils/security.js +6 -4
- package/main/manage/services/ConfigurationService-fixed.js +0 -449
package/ui-locales/fr.json
CHANGED
|
@@ -48,20 +48,20 @@
|
|
|
48
48
|
"startingWorkflow": "Démarrage du flux de travail...",
|
|
49
49
|
"workflowCompleted": "Flux de travail terminé.",
|
|
50
50
|
"checkReports": "Vérifiez les rapports pour plus de détails.",
|
|
51
|
-
"errorExecutingCommand": "
|
|
52
|
-
"genericError": "❌
|
|
51
|
+
"errorExecutingCommand": "Erreur lors de l'exécution de la commande : {error}",
|
|
52
|
+
"genericError": "❌ Erreur : {error}",
|
|
53
53
|
"errors": {
|
|
54
54
|
"errors": "Erreurs :",
|
|
55
55
|
"genericError": "❌ Erreur : {error}",
|
|
56
56
|
"initializationFailed": "❌ Initialisation échouée : {error}",
|
|
57
|
+
"initializationCancelled": "❌ Initialisation annulée par l'utilisateur.",
|
|
57
58
|
"translationKeyNotFound": "Clé de traduction non trouvée : {key}",
|
|
58
59
|
"sourceDirectoryNotFound": "Répertoire source non trouvé : {directory}",
|
|
59
60
|
"configLoadingFailed": "Chargement de la configuration échoué",
|
|
60
61
|
"invalidSourceDirectory": "Répertoire source invalide : {directory}",
|
|
61
62
|
"securityViolation": "Violation de sécurité détectée",
|
|
62
63
|
"authenticationFailed": "Authentification échouée",
|
|
63
|
-
"sourceEqualsI18nWarn": "⚠️ sourceDir
|
|
64
|
-
"initializationCancelled": "❌ Initialization cancelled by user."
|
|
64
|
+
"sourceEqualsI18nWarn": "⚠️ sourceDir est égal à i18nDir ({sourceDir}). Revenir à {fallback} pour l'analyse des sources."
|
|
65
65
|
},
|
|
66
66
|
"errorGeneratingStatusSummary": "Erreur lors de la génération du résumé d'état : {error}",
|
|
67
67
|
"errorRunningDebugTool": "Erreur lors de l'exécution de l'outil de débogage '{displayName}' : {error}",
|
|
@@ -101,15 +101,67 @@
|
|
|
101
101
|
"settings": "Paramètres",
|
|
102
102
|
"startingSettings": "🎛️ Démarrage de la CLI des Paramètres...",
|
|
103
103
|
"confirm": "Confirmer",
|
|
104
|
-
"errorExiting": "
|
|
104
|
+
"errorExiting": "Erreur lors de la sortie."
|
|
105
105
|
},
|
|
106
106
|
"errors": {
|
|
107
|
+
"invalidOption": "❌ Option invalide : {option}. Veuillez réessayer.",
|
|
107
108
|
"readlineClosed": "Flux d'entrée fermé; exécution en mode non interactif.",
|
|
108
109
|
"noPackageJson": "Aucun fichier package.json trouvé. Impossible de détecter automatiquement le framework i18n.",
|
|
109
110
|
"noI18nDir": "Aucun répertoire i18n trouvé dans la racine du projet.",
|
|
110
111
|
"noI18nConfig": "Aucun fichier de configuration i18n trouvé dans la racine du projet.",
|
|
111
|
-
"errorReadingDebugLogs": "
|
|
112
|
-
|
|
112
|
+
"errorReadingDebugLogs": "Erreur lors de la lecture des journaux de débogage : {error}"
|
|
113
|
+
},
|
|
114
|
+
"scanner": {
|
|
115
|
+
"help_message": "Scanneur de Texte i18n Usage: node i18ntk-scanner.js [options] Options: --source-dir <dir> Répertoire source à scanner (par défaut: ./src) --output <file> Fichier de sortie pour les résultats (par défaut: ./i18ntk-scanner-report.json) --framework <nom> Framework cible (react, vue, angular, vanilla) --patterns <patterns> Motifs regex personnalisés (séparés par des virgules) --include-tests Inclure les fichiers de test dans le scan --exclude-dirs <dirs> Répertoires à exclure (séparés par des virgules) --help Afficher cette aide Exemples: node i18ntk-scanner.js --source-dir=./src --framework=react node i18ntk-scanner.js --patterns 'console\\.log\\((.*?)\\)' --include-tests node i18ntk-scanner.js --output=./resultats-scan.json",
|
|
116
|
+
"help_options": {
|
|
117
|
+
"source_dir": "Répertoire source à scanner",
|
|
118
|
+
"output_dir": "Fichier de sortie pour les résultats",
|
|
119
|
+
"framework": "Framework cible (react, vue, angular, vanilla)",
|
|
120
|
+
"patterns": "Motifs regex personnalisés (séparés par des virgules)",
|
|
121
|
+
"exclude": "Répertoires à exclure (séparés par des virgules)",
|
|
122
|
+
"output_report": "Fichier de sortie pour le rapport",
|
|
123
|
+
"min_length": "Longueur minimale du texte à inclure",
|
|
124
|
+
"max_length": "Longueur maximale du texte à inclure",
|
|
125
|
+
"include_tests": "Inclure les fichiers de test dans le scan"
|
|
126
|
+
},
|
|
127
|
+
"starting": "🔍 Démarrage du scanneur de texte pour le framework: {framework}",
|
|
128
|
+
"sourceDirectory": "📁 Scan du répertoire: {sourceDir}",
|
|
129
|
+
"frameworkDetected": "🎯 Framework détecté: {framework}",
|
|
130
|
+
"scanningFiles": "📊 Scan de {fileCount} fichiers...",
|
|
131
|
+
"foundTexts": "📝 {textCount} textes nécessitant une traduction trouvés",
|
|
132
|
+
"generatingReport": "📊 Génération du rapport détaillé...",
|
|
133
|
+
"reportSaved": "💾 Rapport de scan sauvegardé dans: {reportPath}",
|
|
134
|
+
"noTextsFound": "✅ Aucun texte anglais hardcodé trouvé",
|
|
135
|
+
"scanComplete": "🎉 Scan terminé avec succès!",
|
|
136
|
+
"analysisTitle": "🔍 ANALYSE DU SCANNEUR DE TRADUCTION",
|
|
137
|
+
"fileSummary": "📄 {file}: {count} textes trouvés",
|
|
138
|
+
"textLocation": "📍 Ligne {line}: {text}",
|
|
139
|
+
"foundText": "Trouvé {count} instances potentielles de texte codé en dur",
|
|
140
|
+
"context": "📝 Contexte: {context}",
|
|
141
|
+
"severity": "⚠️ Sévérité: {severity}",
|
|
142
|
+
"recommendation": "💡 Recommandation: {recommendation}",
|
|
143
|
+
"welcome": {
|
|
144
|
+
"title": "🎯 Bienvenue dans le Scanneur de Texte!",
|
|
145
|
+
"description": "Cet outil scanne votre code source à la recherche de textes anglais hardcodés qui peuvent nécessiter une traduction."
|
|
146
|
+
},
|
|
147
|
+
"frameworkPrompt": {
|
|
148
|
+
"title": "🎯 Sélectionner le Framework",
|
|
149
|
+
"available": "Frameworks disponibles: react, vue, angular, vanilla",
|
|
150
|
+
"description": "Entrez le type de framework (ou appuyez sur Entrée pour la détection automatique):",
|
|
151
|
+
"input": "Cadre:"
|
|
152
|
+
},
|
|
153
|
+
"directoryPrompt": {
|
|
154
|
+
"title": "📁 Sélectionner le Répertoire Source",
|
|
155
|
+
"current": "Répertoire actuel: {dir}",
|
|
156
|
+
"description": "Entrez le répertoire à scanner (ou appuyez sur Entrée pour le répertoire actuel):",
|
|
157
|
+
"input": "Répertoire:"
|
|
158
|
+
},
|
|
159
|
+
"options": {
|
|
160
|
+
"includeTests": "Inclure les fichiers de test?",
|
|
161
|
+
"excludeDirs": "Répertoires à exclure (séparés par des virgules):",
|
|
162
|
+
"customPatterns": "Motifs personnalisés à scanner (regex):"
|
|
163
|
+
},
|
|
164
|
+
"reportGenerated": "Rapport d'analyse généré : {path}"
|
|
113
165
|
},
|
|
114
166
|
"fixer": {
|
|
115
167
|
"help_message": "Correcteur de Traduction I18n Utilisation: node i18ntk-fixer.js [options] Options: --source-dir <dir> Répertoire source à analyser (par défaut: ./locales) --languages <langs> Liste séparée par virgules des langues à corriger --markers <markers> Liste séparée par virgules des marqueurs à traiter comme non traduits --no-backup Sauter la création de sauvegarde automatique --help Afficher cette aide Exemples: node i18ntk-fixer.js --languages de,fr node i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED node i18ntk-fixer.js --no-backup",
|
|
@@ -139,14 +191,14 @@
|
|
|
139
191
|
"placeholderKey": "⚠️ MARQUEUR: \"{target}\" → \"{new}\"",
|
|
140
192
|
"moreIssues": "... et {count} problèmes supplémentaires. Consultez le fichier de rapport pour les détails complets.",
|
|
141
193
|
"confirmationTitle": "🤔 Voulez-vous procéder avec ces corrections?",
|
|
142
|
-
"confirmationOptions": "
|
|
194
|
+
"confirmationOptions": "Possibilités :",
|
|
143
195
|
"optionYes": "o - Oui, appliquer toutes les corrections",
|
|
144
196
|
"optionNo": "n - Non, annuler l'opération",
|
|
145
197
|
"optionShow": "d - Afficher les problèmes détaillés",
|
|
146
198
|
"choicePrompt": "Votre choix (o/n/d):",
|
|
147
199
|
"nonInteractiveMode": "⚡ Mode non interactif détecté - application automatique des corrections...",
|
|
148
200
|
"reportGenerated": "📊 Rapport de correction généré: {path}",
|
|
149
|
-
"summary": "
|
|
201
|
+
"summary": "Résumé du correcteur :",
|
|
150
202
|
"welcome": {
|
|
151
203
|
"title": "🎯 Bienvenue dans l'Outil de Réparation des Traductions !",
|
|
152
204
|
"description": "Cet outil vous aidera à corriger les traductions brisées et les marqueurs dans vos fichiers de langue."
|
|
@@ -170,16 +222,16 @@
|
|
|
170
222
|
"description": "Entrez le répertoire contenant vos fichiers de langue (ou appuyez sur Entrée pour le répertoire actuel, 0 pour annuler) :",
|
|
171
223
|
"input": "Répertoire :"
|
|
172
224
|
},
|
|
173
|
-
"backupLocation": "
|
|
174
|
-
"completed": "
|
|
175
|
-
"creatingBackup": "
|
|
176
|
-
"dryRunMode": "
|
|
177
|
-
"error": "
|
|
178
|
-
"fixing": "
|
|
179
|
-
"foundLanguages": "
|
|
180
|
-
"languageFixed": "{language}:
|
|
181
|
-
"running": "
|
|
182
|
-
"totalFixed": "Total
|
|
225
|
+
"backupLocation": "Emplacement de sauvegarde : {dir}",
|
|
226
|
+
"completed": "Réparation terminée.",
|
|
227
|
+
"creatingBackup": "Création d'une sauvegarde dans {dir}...",
|
|
228
|
+
"dryRunMode": "Mode fonctionnement à sec : {mode}",
|
|
229
|
+
"error": "Échec du correcteur : {error}",
|
|
230
|
+
"fixing": "Correction de {language}...",
|
|
231
|
+
"foundLanguages": "{count} langues trouvées : {languages}",
|
|
232
|
+
"languageFixed": "{language} : correction(s) de la ou des touches {fixed}, {skipped} ignoré.",
|
|
233
|
+
"running": "Exécution du correcteur de traduction...",
|
|
234
|
+
"totalFixed": "Total fixe : {count}"
|
|
183
235
|
},
|
|
184
236
|
"autorun": {
|
|
185
237
|
"stepAnalyzeTranslations": "Analyser les traductions",
|
|
@@ -309,7 +361,7 @@
|
|
|
309
361
|
"statusFileMissing": "❌ Fichier de traduction manquant",
|
|
310
362
|
"sourceKeys": "📊 Clés source: {count}",
|
|
311
363
|
"translation": "📊 Traduction: {translated}/{total} ({percentage}%)",
|
|
312
|
-
"structure": "🗂️
|
|
364
|
+
"structure": "🗂️Structure : {status}",
|
|
313
365
|
"consistent": "Consistente",
|
|
314
366
|
"inconsistent": "Inconsistante",
|
|
315
367
|
"missingKeys": "Clés manquantes: {count}",
|
|
@@ -403,13 +455,13 @@
|
|
|
403
455
|
"sizing_analysis_results": "Résultats de l'analyse du dimensionnement I18n",
|
|
404
456
|
"file_sizes_title": "Tailles des fichiers",
|
|
405
457
|
"file_sizes_header": "Langue Taille(Ko) Lignes Caractères",
|
|
406
|
-
"file_size_row": "{lang}
|
|
458
|
+
"file_size_row": "{lang} {sizeKB} {lines} {characters}",
|
|
407
459
|
"language_statistics_title": "Statistiques des langues",
|
|
408
460
|
"language_stats_header": "Langue Clés Caractères Long. moy. Long. max Vides Longs",
|
|
409
|
-
"language_stats_row": "{lang}
|
|
461
|
+
"language_stats_row": "{lang} {totalKeys} {totalCharacters} {averageKeyLength} {maxKeyLength} {emptyKeys} {longKeys}",
|
|
410
462
|
"size_variations_title": "Variations de taille",
|
|
411
463
|
"size_variations_header": "Langue Diff. car. % Diff Problématique",
|
|
412
|
-
"size_variation_row": "{lang}
|
|
464
|
+
"size_variation_row": "{lang} {characterDifference} {percentageDifference}% {problematic}",
|
|
413
465
|
"problematic_yes": "Oui",
|
|
414
466
|
"problematic_no": "Non",
|
|
415
467
|
"recommendations_title": "Recommandations",
|
|
@@ -427,7 +479,7 @@
|
|
|
427
479
|
"human_report_saved": "Rapport lisible enregistré: {reportPath}",
|
|
428
480
|
"folder_summary_title": "Résumé du dossier",
|
|
429
481
|
"folder_summary_table_header": "Langue Taille(KB) Clés Longueur Moyenne Caractères Totaux",
|
|
430
|
-
"folder_summary_row": "{lang}
|
|
482
|
+
"folder_summary_row": "{lang} {sizeKB} {totalKeys} {avgLength} {totalChars}",
|
|
431
483
|
"language_comparison_title": "Comparaison des langues",
|
|
432
484
|
"language_comparison_row": "{lang}: {diff} caractères ({percent}%) {status}",
|
|
433
485
|
"summary_stats": "📊 Résumé: {totalLanguages} langues, {totalKeys} clés - Rapports enregistrés dans {reportPath}",
|
|
@@ -444,12 +496,12 @@
|
|
|
444
496
|
"consider_reviewing_translations": "Envisagez de revoir les traductions {lang} - elles sont {percentageDifference}% {comparison} que la référence",
|
|
445
497
|
"long_translations_detected": "{lang} a {longKeys} traductions de plus de {threshold} caractères - envisagez de les décomposer"
|
|
446
498
|
},
|
|
447
|
-
"detailed_key_analysis_title": "
|
|
448
|
-
"key_analysis_detail": "{lang}: {length}
|
|
449
|
-
"key_analysis_header": "
|
|
450
|
-
"status_empty": "
|
|
499
|
+
"detailed_key_analysis_title": "Analyse clé détaillée",
|
|
500
|
+
"key_analysis_detail": "{lang} : {length} caractères ({status}) - {translation}",
|
|
501
|
+
"key_analysis_header": "Clé : {key}",
|
|
502
|
+
"status_empty": "vide",
|
|
451
503
|
"status_long": "long",
|
|
452
|
-
"status_ok": "
|
|
504
|
+
"status_ok": "d'accord"
|
|
453
505
|
},
|
|
454
506
|
"usage": {
|
|
455
507
|
"help_message": "Analyseur d'utilisation I18n Utilisation: node i18ntk-usage.js [options] Options: --source-dir <dir> Répertoire source à analyser (par défaut: ./src) --i18n-dir <dir> Répertoire i18n (par défaut: ./src/locales) --output-report Générer un rapport détaillé --output-dir <dir> Répertoire de sortie pour les rapports (par défaut: ./reports) --help Afficher cette aide Exemples: 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",
|
|
@@ -546,7 +598,7 @@
|
|
|
546
598
|
"failedToAnalyzeFile": "Échec de l'analyse du fichier {filePath} : {error}",
|
|
547
599
|
"failedToAnalyzeLanguage": "Échec de l'analyse de la langue {language} : {error}",
|
|
548
600
|
"translationCompletenessAnalysisFailed": "L'analyse de l'exhaustivité des traductions a échoué : {error}",
|
|
549
|
-
"n": ""
|
|
601
|
+
"n": "\\n"
|
|
550
602
|
},
|
|
551
603
|
"complete": {
|
|
552
604
|
"configLoadedSuccessfully": "Configuration chargée avec succès",
|
|
@@ -586,11 +638,11 @@
|
|
|
586
638
|
"noTranslationLanguagesFound": "Aucune langue de traduction trouvée",
|
|
587
639
|
"failedToAnalyzeLanguage": "Échec de l'analyse de la langue",
|
|
588
640
|
"translationCompletenessAnalysisFailed": "L'analyse de l'exhaustivité des traductions a échoué",
|
|
589
|
-
"failedToProcessFile": "
|
|
590
|
-
"failedToSaveReport": "
|
|
591
|
-
"i18nDirectoryDoesNotExist": "
|
|
592
|
-
"reportSavedTo": "
|
|
593
|
-
"sourceDirectoryDoesNotExist": "
|
|
641
|
+
"failedToProcessFile": "Échec du traitement du fichier :",
|
|
642
|
+
"failedToSaveReport": "Échec de l'enregistrement du rapport d'utilisation : {error}",
|
|
643
|
+
"i18nDirectoryDoesNotExist": "Le répertoire I18n n'existe pas : {dir}",
|
|
644
|
+
"reportSavedTo": "Rapport d'utilisation enregistré dans : {reportPath}",
|
|
645
|
+
"sourceDirectoryDoesNotExist": "Le répertoire source n'existe pas : {dir}"
|
|
594
646
|
},
|
|
595
647
|
"validate": {
|
|
596
648
|
"help_message": "Validateur de traductions I18n Utilisation : node i18ntk-validate.js [options] Options : --source-dir <dir> Répertoire source à analyser (par défaut : ./locales) --i18n-dir <dir> Répertoire I18n (par défaut : ./locales) --output-report Générer un rapport détaillé --output-dir <dir> Répertoire de sortie pour les rapports (par défaut : ./i18ntk-reports) --help Afficher cette aide Exemples : 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",
|
|
@@ -675,7 +727,7 @@
|
|
|
675
727
|
"completedIndicator": "✅ Terminé",
|
|
676
728
|
"errorIndicator": "❌ Erreur",
|
|
677
729
|
"warningIndicator": "⚠️ Avertissement",
|
|
678
|
-
"infoIndicator": "ℹ️
|
|
730
|
+
"infoIndicator": "ℹ️Infos",
|
|
679
731
|
"sourceDirNotConfigured": "Répertoire source non configuré",
|
|
680
732
|
"sourceLanguageNotConfigured": "Langue source non configurée",
|
|
681
733
|
"translationFunctionNotInitialized": "Fonction de traduction non initialisée correctement",
|
|
@@ -688,8 +740,8 @@
|
|
|
688
740
|
"failedToCreateSampleTranslationFile": "Échec de la création du fichier de traduction d'exemple",
|
|
689
741
|
"invalidFilePathDetected": "Chemin de fichier invalide détecté",
|
|
690
742
|
"failedToWriteFile": "Échec de l'écriture du fichier : {filePath}",
|
|
691
|
-
"invalidSourceDirectory": "
|
|
692
|
-
"invalidSourceLanguageDirectory": "
|
|
743
|
+
"invalidSourceDirectory": "Répertoire source non valide : {sourceDir}",
|
|
744
|
+
"invalidSourceLanguageDirectory": "Répertoire de langue source non valide : {sourceDir}"
|
|
693
745
|
},
|
|
694
746
|
"adminCli": {
|
|
695
747
|
"setupPinProtectionTitle": "🔐 Configuration de la protection PIN Admin",
|
|
@@ -869,6 +921,7 @@
|
|
|
869
921
|
"completeCommand": "complete - Compléter les traductions (100 % de couverture)",
|
|
870
922
|
"summaryCommand": "summary - Afficher le statut du projet",
|
|
871
923
|
"debugCommand": "debug - Déboguer les problèmes de traduction",
|
|
924
|
+
"scannerCommand": "scanner - Rechercher des clés",
|
|
872
925
|
"menu": {
|
|
873
926
|
"pressEnterToContinue": "Appuyez sur Entrée pour continuer...",
|
|
874
927
|
"title": "🌐 MENU DE GESTION I18NTK",
|
|
@@ -883,8 +936,7 @@
|
|
|
883
936
|
"sizing": "sizing - Analyser le dimensionnement",
|
|
884
937
|
"complete": "complete - Compléter les traductions (100 % de couverture)",
|
|
885
938
|
"summary": "summary - Afficher le statut du projet",
|
|
886
|
-
"debug": "debug - Déboguer les problèmes de traduction"
|
|
887
|
-
"scanner": "scanner - Scanner le projet pour les clés i18n"
|
|
939
|
+
"debug": "debug - Déboguer les problèmes de traduction"
|
|
888
940
|
},
|
|
889
941
|
"options": {
|
|
890
942
|
"sourceDir": "--source-dir <dir> Répertoire source à analyser",
|
|
@@ -932,24 +984,23 @@
|
|
|
932
984
|
"translation_not_found": "Traduction introuvable pour la clé : {key}",
|
|
933
985
|
"translation_key_not_string": "La clé de traduction ne renvoie pas une chaîne : {key}",
|
|
934
986
|
"error_reading_locales_directory": "Erreur de lecture du répertoire locales : {errorMessage}"
|
|
935
|
-
}
|
|
936
|
-
"scannerCommand": "scanner - Scan for keys"
|
|
987
|
+
}
|
|
937
988
|
},
|
|
938
989
|
"init": {
|
|
939
990
|
"initializationTitle": "🚀 Boîte à outils de gestion i18n – Initialisation du projet",
|
|
991
|
+
"initializationCancelled": "🚫 Initialisation annulée par l'utilisateur.",
|
|
940
992
|
"sourceDirectoryLabel": "📁 Répertoire source : {dir}",
|
|
941
|
-
"createdSourceLanguageDirectory": "✅ Créé le répertoire de langue source: {dir}",
|
|
942
993
|
"requiredTitle": "Initialisation requise",
|
|
943
994
|
"requiredBody": "Ce projet doit être initialisé avant d'exécuter cette commande.",
|
|
944
995
|
"promptRunNow": "Voulez-vous exécuter l'initialisation maintenant ? (o/N):",
|
|
945
996
|
"sourceLanguageLabel": "🌍 Langue source : {language}",
|
|
946
997
|
"detectedI18nFrameworks": "🔍 Framework(s) i18n détecté(s) : {frameworks}",
|
|
998
|
+
"pinMustBe4Digits": "🔐 Le PIN doit contenir 4 chiffres.",
|
|
947
999
|
"existingDirectoriesFound": "📁 Répertoires de traduction existants trouvés :",
|
|
948
1000
|
"useExistingDirectoryPrompt": "Voulez-vous utiliser le répertoire existant ? (y/n)",
|
|
949
1001
|
"selectDirectoryPrompt": "Sélectionnez un répertoire en entrant le numéro (ou choisissez 'Créer un nouveau répertoire'):",
|
|
950
1002
|
"enterNewDirectoryName": "📝 Entrez le nom du nouveau répertoire :",
|
|
951
1003
|
"createdNewDirectory": "✅ Créé nouveau répertoire : {dir}",
|
|
952
|
-
"pinMustBe4Digits": "🔐 Le PIN doit contenir 4 chiffres.",
|
|
953
1004
|
"directoryAlreadyExists": "⚠️ Répertoire existe déjà : {dir}",
|
|
954
1005
|
"invalidDirectoryName": "❌ Nom de répertoire invalide fourni.",
|
|
955
1006
|
"usingExistingDirectory": "Utilisation du répertoire existant : {dir}",
|
|
@@ -1016,10 +1067,10 @@
|
|
|
1016
1067
|
"installFramework": "Pour installer un framework, exécutez : npm install <nom-du-paquet>"
|
|
1017
1068
|
},
|
|
1018
1069
|
"frameworks": {
|
|
1019
|
-
"react": "-
|
|
1020
|
-
"vue": "-
|
|
1021
|
-
"i18next": "-
|
|
1022
|
-
"nuxt": "- Nuxt
|
|
1070
|
+
"react": "- Réagir i18next (react-i18next)",
|
|
1071
|
+
"vue": "-Vue i18n (vue-i18n)",
|
|
1072
|
+
"i18next": "- i18suivant (i18suivant)",
|
|
1073
|
+
"nuxt": "- Internationalisation Nuxt (@nuxtjs/i18n)",
|
|
1023
1074
|
"svelte": "- Svelte i18n (svelte-i18n)"
|
|
1024
1075
|
},
|
|
1025
1076
|
"continueWithoutI18nPrompt": "Aucun framework i18n détecté. Voulez-vous continuer sans ? (o/N) :",
|
|
@@ -1035,22 +1086,22 @@
|
|
|
1035
1086
|
"noJsonFilesInSourceDirectory": "Aucun fichier JSON trouvé dans le répertoire source : {dir}",
|
|
1036
1087
|
"invalidFilePathDetected": "Chemin de fichier invalide détecté",
|
|
1037
1088
|
"initializationFailed": "Échec de l'initialisation : {error}",
|
|
1038
|
-
"noFramework": "
|
|
1039
|
-
"packageJsonRead": "
|
|
1089
|
+
"noFramework": "Aucun framework i18n détecté. Continuez avec le mode générique.",
|
|
1090
|
+
"packageJsonRead": "Erreur de lecture de package.json."
|
|
1040
1091
|
},
|
|
1041
1092
|
"processingFile": "Traitement de {file} pour {language}...",
|
|
1042
1093
|
"fileAlreadyExistsMerging": "Le fichier {file} existe déjà. Fusion des nouvelles clés.",
|
|
1043
1094
|
"createdNewFile": "Nouveau fichier créé : {file}",
|
|
1044
1095
|
"updatedFile": "Fichier mis à jour : {file}",
|
|
1045
1096
|
"skippingExcludedFile": "Ignorer {file} pour {language} car il est exclu.",
|
|
1046
|
-
"continuingWithoutAdminPin": "
|
|
1047
|
-
"
|
|
1048
|
-
"
|
|
1049
|
-
"
|
|
1050
|
-
"
|
|
1051
|
-
"
|
|
1052
|
-
"
|
|
1053
|
-
"
|
|
1097
|
+
"continuingWithoutAdminPin": "Continuer sans configurer le code PIN administrateur.",
|
|
1098
|
+
"createdSourceLanguageDirectory": "✅ Créé le répertoire de langue source: {dir}",
|
|
1099
|
+
"errorSettingUpAdminPin": "Erreur lors de la configuration du code PIN administrateur : {error}",
|
|
1100
|
+
"noTargetLanguagesSpecified": "Aucune langue cible spécifiée.",
|
|
1101
|
+
"translationFilesCreatedWarning": "Les fichiers de traduction ont été créés avec des espaces réservés ; examen avant utilisation en production.",
|
|
1102
|
+
"warningCannotReadSourceDir": "Attention : impossible de lire le répertoire source {dir} : {error}",
|
|
1103
|
+
"warningInvalidLanguageCodes": "Attention : codes de langue non valides ignorés : {languages}",
|
|
1104
|
+
"warningProceedingWithoutFramework": "Poursuite sans framework i18n détecté."
|
|
1054
1105
|
},
|
|
1055
1106
|
"language": {
|
|
1056
1107
|
"title": "🌍 Changer la langue",
|
|
@@ -1403,10 +1454,10 @@
|
|
|
1403
1454
|
"failed": "Échec de la mise à jour.",
|
|
1404
1455
|
"prompt": "Voulez-vous mettre à jour le paquet maintenant ? (y/N) :",
|
|
1405
1456
|
"promptDesc": "Remarque : cela mettra à jour le paquet i18ntk vers la dernière version.",
|
|
1406
|
-
"confirm": "
|
|
1457
|
+
"confirm": "oui",
|
|
1407
1458
|
"cancelled": "Mise à jour annulée.",
|
|
1408
|
-
"error": "
|
|
1409
|
-
"updating": "
|
|
1459
|
+
"error": "Échec de la mise à jour du package",
|
|
1460
|
+
"updating": "Mise à jour du package..."
|
|
1410
1461
|
},
|
|
1411
1462
|
"admin": {
|
|
1412
1463
|
"selectOption": "Sélectionnez une option :",
|
|
@@ -1463,11 +1514,11 @@
|
|
|
1463
1514
|
"importFailed": "Échec de l’import des paramètres : {error}",
|
|
1464
1515
|
"backupSuccess": "Sauvegarde créée : {file}",
|
|
1465
1516
|
"backupFailed": "Échec de la création de la sauvegarde : {error}",
|
|
1466
|
-
"exportFilenamePrompt": "
|
|
1467
|
-
"importConfirm": "
|
|
1468
|
-
"importFilenamePrompt": "
|
|
1469
|
-
"manageBackups": "
|
|
1470
|
-
"restore": "
|
|
1517
|
+
"exportFilenamePrompt": "Entrez le nom du fichier d'exportation :",
|
|
1518
|
+
"importConfirm": "Importer ce fichier de paramètres ? (o/N) :",
|
|
1519
|
+
"importFilenamePrompt": "Entrez le nom du fichier d'importation :",
|
|
1520
|
+
"manageBackups": "Gérer les sauvegardes",
|
|
1521
|
+
"restore": "Restaurer les paramètres"
|
|
1471
1522
|
},
|
|
1472
1523
|
"selectOption": "Sélectionnez une option :",
|
|
1473
1524
|
"resetToDefaultsTitle": "Réinitialiser les paramètres à leurs valeurs par défaut",
|
|
@@ -1835,9 +1886,9 @@
|
|
|
1835
1886
|
"help": "Réinitialise toutes les protections de script aux valeurs d'usine"
|
|
1836
1887
|
},
|
|
1837
1888
|
"removeUiLanguages": {
|
|
1838
|
-
"label": "
|
|
1839
|
-
"description": "
|
|
1840
|
-
"help": "
|
|
1889
|
+
"label": "Supprimer les langues de l'interface utilisateur",
|
|
1890
|
+
"description": "Supprimer les langues de l'interface utilisateur qui ne sont pas installées",
|
|
1891
|
+
"help": "Supprimez les langues de l'interface utilisateur qui ne sont pas installées sur le système"
|
|
1841
1892
|
},
|
|
1842
1893
|
"${helperKey}": {
|
|
1843
1894
|
"help": "Aide pour {helperKey}"
|
|
@@ -1913,16 +1964,16 @@
|
|
|
1913
1964
|
"singleBackupFileHelp": "Chemin vers le fichier de sauvegarde unique",
|
|
1914
1965
|
"retentionDays": "Jours de conservation",
|
|
1915
1966
|
"retentionDaysHelp": "Nombre de jours à conserver les fichiers de sauvegarde anciens",
|
|
1916
|
-
"maxBackups": "
|
|
1967
|
+
"maxBackups": "Sauvegardes maximales",
|
|
1917
1968
|
"maxBackupsHelp": "Nombre maximum de fichiers de sauvegarde à conserver",
|
|
1918
1969
|
"confirmHelp": "Confirmer l'opération de sauvegarde",
|
|
1919
1970
|
"confirmYes": "Oui",
|
|
1920
1971
|
"confirmNo": "Non"
|
|
1921
1972
|
},
|
|
1922
1973
|
"validation": {
|
|
1923
|
-
"valid": "
|
|
1924
|
-
"validatingPaths": "
|
|
1925
|
-
"validationComplete": "
|
|
1974
|
+
"valid": "Valide",
|
|
1975
|
+
"validatingPaths": "Validation des chemins configurés...",
|
|
1976
|
+
"validationComplete": "Validation du chemin terminée : {valid}/{total} valide."
|
|
1926
1977
|
}
|
|
1927
1978
|
},
|
|
1928
1979
|
"summary": {
|
|
@@ -2058,8 +2109,8 @@
|
|
|
2058
2109
|
"sizingCommand": "sizing - Analyser la taille",
|
|
2059
2110
|
"completeCommand": "complete - Compléter les traductions (couverture 100%)",
|
|
2060
2111
|
"summaryCommand": "summary - Afficher l'état du projet",
|
|
2061
|
-
"
|
|
2062
|
-
"
|
|
2112
|
+
"scannerCommand": "scanner - Scanner le projet pour les clés i18n",
|
|
2113
|
+
"debugCommand": "debug - Déboguer les problèmes de traduction"
|
|
2063
2114
|
},
|
|
2064
2115
|
"test_complete_system": {
|
|
2065
2116
|
"starting_test": "🧪 Démarrage du test complet du système",
|
|
@@ -2084,7 +2135,7 @@
|
|
|
2084
2135
|
"success_message": "✅ {message}",
|
|
2085
2136
|
"failure_message": "❌ {message}",
|
|
2086
2137
|
"failure_error_message": "{errorMessage}",
|
|
2087
|
-
"warning_message": "⚠️
|
|
2138
|
+
"warning_message": "⚠️ {message}",
|
|
2088
2139
|
"test_runner_failed": "❌ L'exécuteur de test a échoué :",
|
|
2089
2140
|
"recommendations": {
|
|
2090
2141
|
"add_missing_translation_keys": "Ajouter les clés de traduction manquantes pour maintenir la cohérence",
|
|
@@ -2109,13 +2160,13 @@
|
|
|
2109
2160
|
"hardcoded_statements": "Instructions console non traduites : {count}",
|
|
2110
2161
|
"translation_coverage": "Couverture de traduction : {percentage}%",
|
|
2111
2162
|
"coverage_by_file": "Couverture par fichier :",
|
|
2112
|
-
"file_coverage_stats": "{emoji} {fileName}: {coverage}% ({translated}/{total})",
|
|
2163
|
+
"file_coverage_stats": "{emoji} {fileName} : {coverage} % ({translated}/{total})",
|
|
2113
2164
|
"hardcoded_console_statements": "Instructions console non traduites :",
|
|
2114
2165
|
"file_header": "Fichier : {file}",
|
|
2115
2166
|
"line_statement": "Ligne {line}: {statement}",
|
|
2116
2167
|
"suggested_key": "Clé suggérée : {key}",
|
|
2117
2168
|
"suggested_replacement": "Remplacement suggéré : {replacement}",
|
|
2118
|
-
"recommendations": "
|
|
2169
|
+
"recommendations": "Recommandations :",
|
|
2119
2170
|
"recommendation_1": "1. Remplacer les chaînes en dur par des appels i18n.t().",
|
|
2120
2171
|
"recommendation_2": "2. Ajouter de nouvelles clés aux fichiers de traduction pertinents.",
|
|
2121
2172
|
"recommendation_3": "3. Tous les messages de console doivent être visibles à l'utilisateur et nécessitent une traduction.",
|
|
@@ -2157,66 +2208,14 @@
|
|
|
2157
2208
|
"error_general": "❌ Erreur :",
|
|
2158
2209
|
"use_help": "Utilisez --help pour voir les instructions d'utilisation"
|
|
2159
2210
|
},
|
|
2160
|
-
"cleaningUpReportFiles": "
|
|
2161
|
-
"couldNotDelete": "
|
|
2162
|
-
"deletedOldReportFiles": "
|
|
2163
|
-
"errorCleaningUpReports": "
|
|
2164
|
-
"noOldReportFilesToDelete": "
|
|
2165
|
-
"reportFilesPreserved": "
|
|
2166
|
-
"reportSaveFailed": "
|
|
2167
|
-
"reportSaved": "
|
|
2168
|
-
},
|
|
2169
|
-
"scanner": {
|
|
2170
|
-
"help_message": "Scanneur de Texte i18n Usage: node i18ntk-scanner.js [options] Options: --source-dir <dir> Répertoire source à scanner (par défaut: ./src) --output <file> Fichier de sortie pour les résultats (par défaut: ./i18ntk-scanner-report.json) --framework <nom> Framework cible (react, vue, angular, vanilla) --patterns <patterns> Motifs regex personnalisés (séparés par des virgules) --include-tests Inclure les fichiers de test dans le scan --exclude-dirs <dirs> Répertoires à exclure (séparés par des virgules) --help Afficher cette aide Exemples: node i18ntk-scanner.js --source-dir=./src --framework=react node i18ntk-scanner.js --patterns 'console\\.log\\((.*?)\\)' --include-tests node i18ntk-scanner.js --output=./resultats-scan.json",
|
|
2171
|
-
"help_options": {
|
|
2172
|
-
"source_dir": "Répertoire source à scanner",
|
|
2173
|
-
"output_dir": "Fichier de sortie pour les résultats",
|
|
2174
|
-
"framework": "Framework cible (react, vue, angular, vanilla)",
|
|
2175
|
-
"patterns": "Motifs regex personnalisés (séparés par des virgules)",
|
|
2176
|
-
"exclude": "Répertoires à exclure (séparés par des virgules)",
|
|
2177
|
-
"output_report": "Fichier de sortie pour le rapport",
|
|
2178
|
-
"min_length": "Longueur minimale du texte à inclure",
|
|
2179
|
-
"max_length": "Longueur maximale du texte à inclure",
|
|
2180
|
-
"include_tests": "Inclure les fichiers de test dans le scan"
|
|
2181
|
-
},
|
|
2182
|
-
"starting": "🔍 Démarrage du scanneur de texte pour le framework: {framework}",
|
|
2183
|
-
"sourceDirectory": "📁 Scan du répertoire: {sourceDir}",
|
|
2184
|
-
"frameworkDetected": "🎯 Framework détecté: {framework}",
|
|
2185
|
-
"scanningFiles": "📊 Scan de {fileCount} fichiers...",
|
|
2186
|
-
"foundTexts": "📝 {textCount} textes nécessitant une traduction trouvés",
|
|
2187
|
-
"generatingReport": "📊 Génération du rapport détaillé...",
|
|
2188
|
-
"foundText": "Trouvé {count} instances potentielles de texte codé en dur",
|
|
2189
|
-
"reportSaved": "💾 Rapport de scan sauvegardé dans: {reportPath}",
|
|
2190
|
-
"noTextsFound": "✅ Aucun texte anglais hardcodé trouvé",
|
|
2191
|
-
"scanComplete": "🎉 Scan terminé avec succès!",
|
|
2192
|
-
"analysisTitle": "🔍 ANALYSE DU SCANNEUR DE TRADUCTION",
|
|
2193
|
-
"fileSummary": "📄 {file}: {count} textes trouvés",
|
|
2194
|
-
"textLocation": "📍 Ligne {line}: {text}",
|
|
2195
|
-
"context": "📝 Contexte: {context}",
|
|
2196
|
-
"severity": "⚠️ Sévérité: {severity}",
|
|
2197
|
-
"recommendation": "💡 Recommandation: {recommendation}",
|
|
2198
|
-
"welcome": {
|
|
2199
|
-
"title": "🎯 Bienvenue dans le Scanneur de Texte!",
|
|
2200
|
-
"description": "Cet outil scanne votre code source à la recherche de textes anglais hardcodés qui peuvent nécessiter une traduction."
|
|
2201
|
-
},
|
|
2202
|
-
"frameworkPrompt": {
|
|
2203
|
-
"title": "🎯 Sélectionner le Framework",
|
|
2204
|
-
"available": "Frameworks disponibles: react, vue, angular, vanilla",
|
|
2205
|
-
"description": "Entrez le type de framework (ou appuyez sur Entrée pour la détection automatique):",
|
|
2206
|
-
"input": "Framework:"
|
|
2207
|
-
},
|
|
2208
|
-
"directoryPrompt": {
|
|
2209
|
-
"title": "📁 Sélectionner le Répertoire Source",
|
|
2210
|
-
"current": "Répertoire actuel: {dir}",
|
|
2211
|
-
"description": "Entrez le répertoire à scanner (ou appuyez sur Entrée pour le répertoire actuel):",
|
|
2212
|
-
"input": "Répertoire:"
|
|
2213
|
-
},
|
|
2214
|
-
"options": {
|
|
2215
|
-
"includeTests": "Inclure les fichiers de test?",
|
|
2216
|
-
"excludeDirs": "Répertoires à exclure (séparés par des virgules):",
|
|
2217
|
-
"customPatterns": "Motifs personnalisés à scanner (regex):"
|
|
2218
|
-
},
|
|
2219
|
-
"reportGenerated": "Scan report generated: {path}"
|
|
2211
|
+
"cleaningUpReportFiles": "Nettoyage des anciens fichiers de rapport...",
|
|
2212
|
+
"couldNotDelete": "Impossible de supprimer {file} : {error}",
|
|
2213
|
+
"deletedOldReportFiles": "{count} anciens fichiers de rapport supprimés.",
|
|
2214
|
+
"errorCleaningUpReports": "Erreur lors du nettoyage des rapports : {error}",
|
|
2215
|
+
"noOldReportFilesToDelete": "Aucun ancien fichier de rapport à supprimer.",
|
|
2216
|
+
"reportFilesPreserved": "Fichiers de rapport préservés.",
|
|
2217
|
+
"reportSaveFailed": "Échec de l'enregistrement du rapport dans : {reportPath}",
|
|
2218
|
+
"reportSaved": "Rapport enregistré dans : {reportPath}"
|
|
2220
2219
|
},
|
|
2221
2220
|
"ui": {
|
|
2222
2221
|
"autoDetectedI18nDirectory": "Répertoire i18n détecté automatiquement : {path}",
|
|
@@ -2247,7 +2246,7 @@
|
|
|
2247
2246
|
"validateLanguagePurity": {
|
|
2248
2247
|
"phrase_debug_tools": "outils de débogage",
|
|
2249
2248
|
"phrase_settings": "paramètres",
|
|
2250
|
-
"phrase_configuration": "
|
|
2249
|
+
"phrase_configuration": "parametrage",
|
|
2251
2250
|
"phrase_invalid_choice": "choix invalide",
|
|
2252
2251
|
"phrase_please_select": "veuillez sélectionner",
|
|
2253
2252
|
"phrase_back_to_main_menu": "retour au menu principal",
|
|
@@ -2372,9 +2371,6 @@
|
|
|
2372
2371
|
"found_hardcoded_messages": "Messages codés en dur trouvés",
|
|
2373
2372
|
"all_console_messages_use_translation": "Tous les messages console utilisent la traduction"
|
|
2374
2373
|
},
|
|
2375
|
-
"\\nSelect directory to clean (0-${availableDirs": {
|
|
2376
|
-
"length + 1}): ": "Sélectionnez le répertoire à nettoyer (0-${availableDirs.length + 1}) :"
|
|
2377
|
-
},
|
|
2378
2374
|
"exportTranslations": {
|
|
2379
2375
|
"createdDirectory": "Répertoire créé",
|
|
2380
2376
|
"foundFiles": "Fichiers trouvés",
|
|
@@ -2390,29 +2386,26 @@
|
|
|
2390
2386
|
"location": "Emplacement",
|
|
2391
2387
|
"nextSteps": "Prochaines étapes"
|
|
2392
2388
|
},
|
|
2393
|
-
")) {\n console": {
|
|
2394
|
-
"log(": "log("
|
|
2395
|
-
},
|
|
2396
2389
|
"dashboard": {
|
|
2397
2390
|
"title": "Tableau de bord",
|
|
2398
2391
|
"overview": "Vue d'ensemble"
|
|
2399
2392
|
},
|
|
2400
2393
|
"auth": {
|
|
2401
2394
|
"title": "Authentification",
|
|
2402
|
-
"email": "
|
|
2395
|
+
"email": "E-mail",
|
|
2403
2396
|
"password": "Mot de passe",
|
|
2404
2397
|
"signIn": "Se connecter",
|
|
2405
2398
|
"forgotPassword": "Mot de passe oublié",
|
|
2406
2399
|
"signUp": "S'inscrire"
|
|
2407
2400
|
},
|
|
2408
2401
|
"checkUsage": {
|
|
2409
|
-
"usage_analysis_failed": "
|
|
2402
|
+
"usage_analysis_failed": "L'analyse de l'utilisation a échoué."
|
|
2410
2403
|
},
|
|
2411
2404
|
"completeTranslations": {
|
|
2412
|
-
"warning_could_not_parse_filepa": "
|
|
2405
|
+
"warning_could_not_parse_filepa": "Avertissement : impossible d'analyser le chemin du fichier : {filePath}"
|
|
2413
2406
|
},
|
|
2414
|
-
"pressEnterToContinue": "
|
|
2407
|
+
"pressEnterToContinue": "Appuyez sur Entrée pour continuer...",
|
|
2415
2408
|
"status": {
|
|
2416
|
-
"exitingCompleted": "
|
|
2409
|
+
"exitingCompleted": "Flux de travail terminé. Sortir..."
|
|
2417
2410
|
}
|
|
2418
2411
|
}
|