i18ntk 3.2.0 → 3.3.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.
@@ -12,632 +12,632 @@
12
12
  "save": "Sauvegarder",
13
13
  "cancel": "Annuler",
14
14
  "delete": "Supprimer",
15
- "edit": "Éditer",
15
+ "edit": "Modifier",
16
16
  "loading": "Chargement...",
17
17
  "offlineTitle": "Vous êtes hors ligne",
18
- "offlineMessage": "Vous êtes hors ligne",
19
- "tryReconnect": "Essayer de se reconnecter",
18
+ "offlineMessage": "Veuillez vérifier votre connexion Internet",
19
+ "tryReconnect": "Essayez de vous reconnecter",
20
20
  "logout": "Déconnexion",
21
- "login": "Connexion",
21
+ "login": "Se connecter",
22
22
  "amount": "Montant",
23
23
  "success": "Succès",
24
24
  "error": "Erreur",
25
25
  "warning": "Avertissement",
26
- "info": "Info :",
27
- "debug": "Débogage",
28
- "progress": "Progression :",
29
- "remaining": "Restant :",
30
- "total": "Total :",
31
- "completed": "7. Terminé avec succès !",
26
+ "info": "Infos :",
27
+ "debug": "Déboguer",
28
+ "progress": "Progrès:",
29
+ "remaining": "Restant:",
30
+ "total": "Total:",
31
+ "completed": "7. Terminé avec succès !",
32
32
  "missing": "Manquant",
33
33
  "partial": "Partiel",
34
- "sameAsSource": "Identique à la source :",
35
- "formatMismatch": "Format non correspondant :",
36
- "typeMismatch": "Type non correspondant :",
37
- "structureMismatch": "Structure non correspondante :",
34
+ "sameAsSource": "Identique à la source :",
35
+ "formatMismatch": "Incompatibilité de format :",
36
+ "typeMismatch": "Incompatibilité de type :",
37
+ "structureMismatch": "Inadéquation des structures :",
38
38
  "invalidOption": "Option invalide",
39
- "separator": "==================================================",
40
- "initializationFailed": "❌ Échec de l'initialisation : {error}",
41
- "stackTrace": "Trace de pile : {stack}",
39
+ "separator": "===================================================",
40
+ "initializationFailed": "❌ L'initialisation a échoué : {error}",
41
+ "stackTrace": "Trace de pile : {stack}",
42
42
  "pressEnterToContinue": "Appuyez sur Entrée pour continuer...",
43
43
  "pressEnterToReturn": "Appuyez sur Entrée pour revenir au menu principal...",
44
- "stepCompleted": "Étape '{stepName}' terminée.",
45
- "stepFailed": "Étape '{stepName}' échouée.",
46
- "runningStep": "Exécution de l'étape : {stepName}",
47
- "command": "Commande : {command}",
44
+ "stepCompleted": "Étape '{stepName}' complété.",
45
+ "stepFailed": "Étape '{stepName}' échoué.",
46
+ "runningStep": "Étape d'exécution : {stepName}",
47
+ "command": "Commande: {command}",
48
48
  "startingWorkflow": "Démarrage du flux de travail...",
49
49
  "workflowCompleted": "Flux de travail terminé.",
50
- "checkReports": "Vérifiez les rapports pour plus de détails.",
50
+ "checkReports": "Consultez les rapports pour plus de détails.",
51
51
  "errorExecutingCommand": "Erreur lors de l'exécution de la commande : {error}",
52
52
  "genericError": "❌ Erreur : {error}",
53
53
  "errors": {
54
- "errors": "Erreurs :",
55
- "genericError": "❌ Erreur : {error}",
56
- "initializationFailed": "❌ Initialisation échouée : {error}",
54
+ "errors": "Erreurs :",
55
+ "genericError": "❌ Erreur : {error}",
56
+ "initializationFailed": "❌ L'initialisation a échoué : {error}",
57
57
  "initializationCancelled": "❌ Initialisation annulée par l'utilisateur.",
58
- "translationKeyNotFound": "Clé de traduction non trouvée : {key}",
59
- "sourceDirectoryNotFound": "Répertoire source non trouvé : {directory}",
60
- "configLoadingFailed": "Chargement de la configuration échoué",
61
- "invalidSourceDirectory": "Répertoire source invalide : {directory}",
58
+ "translationKeyNotFound": "Clé de traduction introuvable : {key}",
59
+ "sourceDirectoryNotFound": "Répertoire source introuvable : {directory}",
60
+ "configLoadingFailed": "Échec du chargement de la configuration",
61
+ "invalidSourceDirectory": "Répertoire source invalide : {directory}",
62
62
  "securityViolation": "Violation de sécurité détectée",
63
- "authenticationFailed": "Authentification échouée",
63
+ "authenticationFailed": "L'authentification a échoué",
64
64
  "sourceEqualsI18nWarn": "⚠️ sourceDir est égal à i18nDir ({sourceDir}). Revenir à {fallback} pour l'analyse des sources."
65
65
  },
66
- "errorGeneratingStatusSummary": "Erreur lors de la génération du résumé d'état : {error}",
67
- "errorRunningDebugTool": "Erreur lors de l'exécution de l'outil de débogage '{displayName}' : {error}",
68
- "errorReadingDebugLogs": "Erreur lors de la lecture des journaux de débogage : {error}",
69
- "errorAnalyzingLogFile": "Erreur lors de l'analyse du fichier journal : {error}",
70
- "errorAnalyzingTranslationKeys": "Erreur lors de l'analyse des clés de traduction : {error}",
71
- "errorAnalyzingTranslationCompleteness": "Erreur lors de l'analyse de l'exhaustivité des traductions : {error}",
72
- "analyzingTranslationCompleteness": "Analyse de l'exhaustivité des traductions pour toutes les langues...",
73
- "i18nDirectoryNotFound": "⚠️ Répertoire i18n introuvable : {i18nDir}",
74
- "translationCompletenessAnalysisFailed": "⚠️ L'analyse de l'exhaustivité des traductions a échoué : {error}",
75
- "failedToAnalyzeLanguage": "❌ Échec de l'analyse de la langue {language} : {error}",
76
- "errorReadingI18nDirectory": "❌ Erreur lors de la lecture du répertoire i18n :",
77
- "languageCompletenessTitle": "📈 EXHAUSTIVITÉ DES TRADUCTIONS PAR LANGUE",
78
- "errorAnalyzingTranslationFormat": "Erreur lors de l'analyse du format de traduction : {error}",
79
- "errorAnalyzingTranslationType": "Erreur lors de l'analyse du type de traduction : {error}",
80
- "errorAnalyzingTranslationStructure": "Erreur lors de l'analyse de la structure de traduction : {error}",
81
- "errorAnalyzingTranslationFormatMismatch": "Erreur lors de l'analyse des incohérences de format de traduction : {error}",
82
- "errorAnalyzingTranslationTypeMismatch": "Erreur lors de l'analyse des incohérences de type de traduction : {error}",
83
- "errorAnalyzingTranslationStructureMismatch": "Erreur lors de l'analyse des incohérences de structure de traduction : {error}",
84
- "errorAnalyzingTranslationSameAsSource": "Erreur lors de l'analyse des traductions identiques à la source : {error}",
66
+ "errorGeneratingStatusSummary": "Erreur lors de la génération du résumé de l'état : {error}",
67
+ "errorRunningDebugTool": "Erreur lors de l'exécution de l'outil de débogage '{displayName}': {error}",
68
+ "errorReadingDebugLogs": "Erreur lors de la lecture des journaux de débogage : {error}",
69
+ "errorAnalyzingLogFile": "Erreur lors de l'analyse du fichier journal : {error}",
70
+ "errorAnalyzingTranslationKeys": "Erreur lors de l'analyse des clés de traduction : {error}",
71
+ "errorAnalyzingTranslationCompleteness": "Erreur lors de l'analyse de l'intégralité de la traduction : {error}",
72
+ "analyzingTranslationCompleteness": "Analyser l'exhaustivité de la traduction dans toutes les langues...",
73
+ "i18nDirectoryNotFound": "⚠️ Répertoire i18n introuvable : {i18nDir}",
74
+ "translationCompletenessAnalysisFailed": "⚠️ L'analyse de l'exhaustivité de la traduction a échoué : {error}",
75
+ "failedToAnalyzeLanguage": "❌ Échec de l'analyse de la langue {language}: {error}",
76
+ "errorReadingI18nDirectory": "❌ Erreur de lecture du répertoire i18n :",
77
+ "languageCompletenessTitle": "📈 EXHAUSTIVITÉ DE LA TRADUCTION PAR LANGUE",
78
+ "errorAnalyzingTranslationFormat": "Erreur lors de l'analyse du format de traduction : {error}",
79
+ "errorAnalyzingTranslationType": "Erreur lors de l'analyse du type de traduction : {error}",
80
+ "errorAnalyzingTranslationStructure": "Erreur lors de l'analyse de la structure de traduction : {error}",
81
+ "errorAnalyzingTranslationFormatMismatch": "Erreur lors de l'analyse de la non-concordance du format de traduction : {error}",
82
+ "errorAnalyzingTranslationTypeMismatch": "Erreur lors de l'analyse de l'incompatibilité des types de traduction : {error}",
83
+ "errorAnalyzingTranslationStructureMismatch": "Erreur lors de l'analyse de l'inadéquation de la structure de traduction : {error}",
84
+ "errorAnalyzingTranslationSameAsSource": "Erreur lors de l'analyse de la traduction identique à la source : {error}",
85
85
  "title": "Statut",
86
- "nextStep1": "1. Vérifier l'analyse d'utilisation :",
87
- "nextStep2": "2. Valider les traductions :",
88
- "nextStep3": "3. Analyser l'exhaustivité :",
89
- "nextStep4": "4. Compléter les traductions manquantes :",
90
- "nextStep5": "5. Générer le rapport de synthèse :",
91
- "nextStep6": "6. Réviser et finaliser les traductions :",
92
- "generating": "Génération du rapport de synthèse...",
86
+ "nextStep1": "1. Vérifiez l'analyse de l'utilisation :",
87
+ "nextStep2": "2. Validez les traductions :",
88
+ "nextStep3": "3. Analyser l'exhaustivité :",
89
+ "nextStep4": "4. Compléter les traductions manquantes :",
90
+ "nextStep5": "5. Générer un rapport récapitulatif :",
91
+ "nextStep6": "6. Réviser et finaliser les traductions :",
92
+ "generating": "Génération d'un rapport récapitulatif...",
93
93
  "review": "Révision des traductions...",
94
94
  "finalizing": "Finalisation des traductions...",
95
- "finalized": "Finalisé avec succès !",
96
- "warnings": "Avertissements :",
97
- "completedKeys": "Clés complétées :",
98
- "missingKeys": "Clés manquantes :",
99
- "partialKeys": "Clés partielles :",
100
- "home": "Accueil",
95
+ "finalized": "Finalisé avec succès !",
96
+ "warnings": "Avertissements :",
97
+ "completedKeys": "Clés terminées :",
98
+ "missingKeys": "Clés manquantes :",
99
+ "partialKeys": "Clés partielles :",
100
+ "home": "Maison",
101
101
  "settings": "Paramètres",
102
- "startingSettings": "🎛️ Démarrage de la CLI des Paramètres...",
102
+ "startingSettings": "🎛️ Démarrage de la CLI des paramètres...",
103
103
  "confirm": "Confirmer",
104
104
  "errorExiting": "Erreur lors de la sortie."
105
105
  },
106
106
  "errors": {
107
107
  "invalidOption": "❌ Option invalide : {option}. Veuillez réessayer.",
108
- "readlineClosed": "Flux d'entrée fermé; exécution en mode non interactif.",
109
- "noPackageJson": "Aucun fichier package.json trouvé. Impossible de détecter automatiquement le framework i18n.",
110
- "noI18nDir": "Aucun répertoire i18n trouvé dans la racine du projet.",
111
- "noI18nConfig": "Aucun fichier de configuration i18n trouvé dans la racine du projet.",
108
+ "readlineClosed": "Le flux dentrée est fermé ; fonctionnant en mode non interactif.",
109
+ "noPackageJson": "Aucun package.json trouvé. Impossible de détecter automatiquement le framework i18n.",
110
+ "noI18nDir": "Aucun répertoire i18n trouvé à la racine du projet.",
111
+ "noI18nConfig": "Aucun fichier de configuration i18n trouvé à la racine du projet.",
112
112
  "errorReadingDebugLogs": "Erreur lors de la lecture des journaux de débogage : {error}"
113
113
  },
114
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",
115
+ "help_message": "Utilisation du scanner de texte I18n : nœud i18ntk-scanner.js [options] Options : --source-dir <dir> Répertoire source à analyser (par défaut : ./src) --output <file> Fichier de sortie pour les résultats de l'analyse (par défaut : ./i18ntk-scanner-report.json) --framework <name> Framework à cibler (react, vue, angulaire, vanilla) --patterns <patterns> Modèles d'expression régulière personnalisés (séparés par des virgules) --include-tests Inclure les fichiers de test dans l'analyse --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=./scan-results.json",
116
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"
117
+ "source_dir": "Répertoire source pour rechercher les problèmes i18n",
118
+ "output_dir": "Répertoire des rapports et des résultats d'analyse",
119
+ "framework": "Framework cible (react, vue, angulaire, vanilla)",
120
+ "patterns": "Modèles d'expression régulière personnalisés pour la détection de texte",
121
+ "exclude": "Modèles de fichiers à exclure de l'analyse",
122
+ "output_report": "Générer un rapport d'analyse détaillé",
123
+ "min_length": "Longueur minimale du texte à prendre en compte pour la traduction",
124
+ "max_length": "Longueur maximale du texte à prendre en compte pour la traduction",
125
+ "include_tests": "Inclure les fichiers de test dans le processus d'analyse"
126
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",
127
+ "starting": "🔍 Démarrage du scanner de texte pour framework : {framework}",
128
+ "sourceDirectory": "📁 Répertoire de numérisation : {sourceDir}",
129
+ "frameworkDetected": "🎯 Cadre détecté : {framework}",
130
+ "scanningFiles": "📊 Numérisation {fileCount} fichiers...",
131
+ "foundTexts": "📝 Trouvé {textCount} textes à traduire",
132
+ "generatingReport": "📊 Génération d'un rapport détaillé...",
133
+ "reportSaved": "💾 Rapport d'analyse enregistré dans : {reportPath}",
134
+ "noTextsFound": "✅ Aucun texte anglais codé en dur trouvé",
135
+ "scanComplete": "🎉 Scan terminé avec succès !",
136
+ "analysisTitle": "🔍 ANALYSE DE SCAN DE TRADUCTION",
137
137
  "fileSummary": "📄 {file}: {count} textes trouvés",
138
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}",
139
+ "foundText": "Trouvé {count} instances de texte potentielles codées en dur",
140
+ "context": "📝Contexte : {context}",
141
+ "severity": "⚠️ Gravité : {severity}",
142
+ "recommendation": "💡 Recommandation : {recommendation}",
143
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."
144
+ "title": "🎯 Bienvenue dans le scanner de texte !",
145
+ "description": "Cet outil analyse votre code source à la recherche de texte anglais codé en dur pouvant nécessiter une traduction."
146
146
  },
147
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):",
148
+ "title": "🎯 Sélectionnez le cadre",
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
151
  "input": "Cadre:"
152
152
  },
153
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:"
154
+ "title": "📁 Sélectionnez le répertoire source",
155
+ "current": "Répertoire actuel : {dir}",
156
+ "description": "Entrez le répertoire à analyser (ou appuyez sur Entrée pour le courant) :",
157
+ "input": "Annuaire:"
158
158
  },
159
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):"
160
+ "includeTests": "Inclure les fichiers de test ?",
161
+ "excludeDirs": "Répertoires à exclure (séparés par des virgules) :",
162
+ "customPatterns": "Modèles personnalisés à rechercher (regex) :"
163
163
  },
164
164
  "reportGenerated": "Rapport d'analyse généré : {path}"
165
165
  },
166
166
  "fixer": {
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",
168
- "starting": "🚀 Démarrage de la correction de traduction pour les langues: {languages}",
169
- "sourceDirectory": "📁 Répertoire source: {sourceDir}",
170
- "sourceLanguage": "🔤 Langue source: {sourceLanguage}",
171
- "markers": "🏷️ Marqueurs à corriger: {markers}",
172
- "scanningLanguage": "📊 Analyse de {language}...",
167
+ "help_message": "Utilisation du fixateur de traduction I18n : nœud i18ntk-fixer.js [options] Options : --source-dir <dir> Répertoire source à analyser (par défaut : ./locales) --langues <langs> Liste des langues séparées par des virgules à corriger --markers <markers> Marqueurs séparés par des virgules à traiter comme non traduits --no-backup Ignorer la création de sauvegarde automatique --help Afficher cette aide Exemples : node i18ntk-fixer.js --langues de,fr node i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED node i18ntk-fixer.js --no-backup",
168
+ "starting": "🚀 Démarrage de la correction de la traduction pour les langues : {languages}",
169
+ "sourceDirectory": "📁 Répertoire source : {sourceDir}",
170
+ "sourceLanguage": "🔤 Langue source : {sourceLanguage}",
171
+ "markers": "🏷️ Balises à fixer : {markers}",
172
+ "scanningLanguage": "📊 Numérisation {language}...",
173
173
  "noLanguages": "❌ Aucune langue spécifiée pour la correction.",
174
- "allComplete": "🎉 Toutes les traductions sont déjà complètes!",
175
- "fullReportSaved": "📊 Rapport complet sauvegardé dans: {reportPath}",
176
- "reviewReport": "Veuillez examiner le rapport avant de continuer.",
174
+ "allComplete": "🎉 Toutes les traductions sont déjà terminées !",
175
+ "fullReportSaved": "📊 Rapport complet enregistré dans : {reportPath}",
176
+ "reviewReport": "Veuillez consulter le rapport avant de continuer.",
177
177
  "backupCreated": "💾 Sauvegarde créée avec succès.",
178
- "applyingFixes": "🔄 Application des corrections...",
179
- "fixingComplete": "✅ Correction de traduction terminée!",
178
+ "applyingFixes": "🔄 Application des correctifs...",
179
+ "fixingComplete": "✅ Correction de la traduction terminée !",
180
180
  "operationCancelled": "❌ Opération annulée par l'utilisateur.",
181
- "analysisTitle": "🔍 ANALYSE DE CORRECTION DE TRADUCTION",
182
- "analysisSeparator": "==================================================",
183
- "totalIssues": "Total de problèmes trouvés: {totalIssues}",
184
- "missingTranslations": "Traductions manquantes: {missing}",
185
- "placeholderTranslations": "Traductions avec marqueurs: {placeholder}",
181
+ "analysisTitle": "🔍 ANALYSE DE FIXATION DE TRADUCTION",
182
+ "analysisSeparator": "===================================================",
183
+ "totalIssues": "Nombre total de problèmes trouvés : {totalIssues}",
184
+ "missingTranslations": "Traductions manquantes : {missing}",
185
+ "placeholderTranslations": "Traductions d'espace réservé : {placeholder}",
186
186
  "noIssues": "✅ Aucun problème trouvé. Toutes les traductions sont complètes.",
187
- "detailedIssues": "📋 PROBLÈMES DÉTAILLÉS:",
187
+ "detailedIssues": "📋 QUESTIONS DÉTAILLÉES :",
188
188
  "detailedSeparator": "--------------------------------------------------",
189
189
  "filePath": "📄 {file} → {path}",
190
- "missingKey": "❌ MANQUANT: {source} → {new}",
191
- "placeholderKey": "⚠️ MARQUEUR: \"{target}\" → \"{new}\"",
192
- "moreIssues": "... et {count} problèmes supplémentaires. Consultez le fichier de rapport pour les détails complets.",
193
- "confirmationTitle": "🤔 Voulez-vous procéder avec ces corrections?",
190
+ "missingKey": "❌MANQUANT : {source} → {new}",
191
+ "placeholderKey": "⚠️PLACEHOLDER : \"{target}\" → \"{new}\"",
192
+ "moreIssues": "... et {count} plus de problèmes. Vérifiez le fichier de rapport pour plus de détails.",
193
+ "confirmationTitle": "🤔 Souhaitez-vous procéder à ces correctifs ?",
194
194
  "confirmationOptions": "Possibilités :",
195
- "optionYes": "o - Oui, appliquer toutes les corrections",
195
+ "optionYes": "y - Oui, appliquer tous les correctifs",
196
196
  "optionNo": "n - Non, annuler l'opération",
197
- "optionShow": "d - Afficher les problèmes détaillés",
198
- "choicePrompt": "Votre choix (o/n/d):",
199
- "nonInteractiveMode": "⚡ Mode non interactif détecté - application automatique des corrections...",
200
- "reportGenerated": "📊 Rapport de correction généré: {path}",
197
+ "optionShow": "s - Afficher les problèmes détaillés",
198
+ "choicePrompt": "Votre choix (o/n/s) :",
199
+ "nonInteractiveMode": "⚡ Mode non interactif détecté - application automatique des correctifs...",
200
+ "reportGenerated": "📊 Rapport de fixateur généré : {path}",
201
201
  "summary": "Résumé du correcteur :",
202
202
  "welcome": {
203
- "title": "🎯 Bienvenue dans l'Outil de Réparation des Traductions !",
204
- "description": "Cet outil vous aidera à corriger les traductions brisées et les marqueurs dans vos fichiers de langue."
203
+ "title": "🎯 Bienvenue dans le fixateur de traduction !",
204
+ "description": "Cet outil vous aidera à corriger les traductions brisées et les espaces réservés dans vos fichiers de paramètres régionaux."
205
205
  },
206
206
  "markerPrompt": {
207
- "title": "🏷️ Configurer les Marqueurs de Placeholder",
208
- "description": "Entrez les marqueurs qui indiquent le texte non traduit (séparés par des virgules) :",
209
- "currentDefaults": "Marqueurs par défaut : {markers}",
210
- "input": "Marqueurs (ou appuyez sur Entrée pour utiliser les défauts) :"
207
+ "title": "🏷️ Configurer les marqueurs d'espace réservé",
208
+ "description": "Saisissez les marqueurs qui indiquent le texte non traduit (séparés par des virgules) :",
209
+ "currentDefaults": "Marqueurs par défaut : {markers}",
210
+ "input": "Marqueurs (ou appuyez sur Entrée pour les valeurs par défaut) :"
211
211
  },
212
212
  "languagePrompt": {
213
- "title": "🌍 Sélectionner les Langues à Réparer",
214
- "available": "Langues disponibles : {languages}",
215
- "description": "Entrez les langues à réparer (séparées par des virgules) ou appuyez sur Entrée pour toutes :",
216
- "input": "Langues :",
217
- "noLanguages": "Aucune langue trouvée à réparer."
213
+ "title": "🌍 Sélectionnez les langues à corriger",
214
+ "available": "Langues disponibles : {languages}",
215
+ "description": "Saisissez les langues à corriger (séparées par des virgules) ou appuyez sur Entrée pour toutes :",
216
+ "input": "Langues :",
217
+ "noLanguages": "Aucune langue à corriger trouvée."
218
218
  },
219
219
  "directoryPrompt": {
220
- "title": "📁 Sélectionner le Répertoire",
221
- "current": "Répertoire actuel : {dir}",
222
- "description": "Entrez le répertoire contenant vos fichiers de langue (ou appuyez sur Entrée pour le répertoire actuel, 0 pour annuler) :",
223
- "input": "Répertoire :"
220
+ "title": "📁 Sélectionnez l'annuaire",
221
+ "current": "Répertoire actuel : {dir}",
222
+ "description": "Entrez le répertoire contenant vos fichiers de paramètres régionaux (ou appuyez sur Entrée pour le courant) :",
223
+ "input": "Annuaire:"
224
224
  },
225
225
  "backupLocation": "Emplacement de sauvegarde : {dir}",
226
226
  "completed": "Réparation terminée.",
227
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é.",
228
+ "dryRunMode": "Mode marche à sec : {mode}",
229
+ "error": "Le correcteur a échoué : {error}",
230
+ "fixing": "Fixation {language}...",
231
+ "foundLanguages": "Trouvé {count} langues : {languages}",
232
+ "languageFixed": "{language}: fixé {fixed} clé(s), ignorée(s) {skipped}.",
233
233
  "running": "Exécution du correcteur de traduction...",
234
234
  "totalFixed": "Total fixe : {count}"
235
235
  },
236
236
  "autorun": {
237
237
  "stepAnalyzeTranslations": "Analyser les traductions",
238
- "stepCompletedWithIcon": "✅ Étape '{stepName}' terminée.",
238
+ "stepCompletedWithIcon": "✅ Terminé : {stepName}",
239
239
  "stepValidateTranslations": "Valider les traductions",
240
- "stepRunning": "L'étape '{stepName}' est en cours…",
241
- "separator": "==================================================",
242
- "stepFailed": "L'étape '{stepName}' a échoué.",
243
- "errorLabel": "Erreur : {error}",
244
- "autoRunScriptTitle": "Script Auto-Run",
245
- "usageTitle": "Utilisation :",
246
- "runAllSteps": "node i18ntk-autorun.js --all - Exécuter toutes les étapes définies dans i18ntk-config.json",
247
- "configureSettingsFirst": "node i18ntk-autorun.js --config - Configurer les paramètres du workflow",
248
- "runSpecificSteps": "node i18ntk-autorun.js --steps <numéro_étapes> - Exécuter des étapes spécifiques (ex. --steps 1,3,5)",
249
- "showHelp": "node i18ntk-autorun.js --help - Afficher cette aide",
250
- "examplesTitle": "Exemples :",
251
- "configExample": "node i18ntk-autorun.js --config",
252
- "stepsExample1": "node i18ntk-autorun.js --steps 1,2,3",
253
- "stepsExample2": "node i18ntk-autorun.js --all",
254
- "customSettingsConfiguration": "Configuration des paramètres personnalisés",
255
- "availableSteps": "Étapes disponibles :",
256
- "startingAutoRunWorkflow": "Démarrage du workflow Auto-Run…",
257
- "workflowIncludesSteps": "Le workflow comprend {count} étapes :",
258
- "missingRequiredFile": "Fichier requis manquant : {file}",
259
- "workflowStopped": "Workflow arrêté.",
260
- "workflowCompleted": "Workflow terminé.",
261
- "successfulSteps": "Étapes réussies : {count}",
262
- "failedSteps": "Étapes échouées : {count}",
240
+ "stepRunning": "▶️ Étape {stepNumber}/{totalSteps}: {stepName}",
241
+ "separator": "===================================================",
242
+ "stepFailed": " Échec : {stepName}",
243
+ "errorLabel": "Erreur",
244
+ "autoRunScriptTitle": "🧪 Flux de travail à exécution automatique",
245
+ "usageTitle": "Usage",
246
+ "runAllSteps": "Exécuter : nœud i18ntk-autorun.js",
247
+ "configureSettingsFirst": "Configuration : i18ntk-config.json ou indicateurs CLI",
248
+ "runSpecificSteps": "Utilisez --steps=1,3 ou --list pour afficher les étapes",
249
+ "showHelp": "--aide pour plus d'informations",
250
+ "examplesTitle": "Exemples",
251
+ "configExample": "nœud i18ntk-autorun.js --ui-langage=zh",
252
+ "stepsExample1": "nœud i18ntk-autorun.js --steps=analyser, valider",
253
+ "stepsExample2": "nœud i18ntk-autorun.js --list",
254
+ "customSettingsConfiguration": "Paramètres d'exécution automatique personnalisés",
255
+ "availableSteps": "Étapes disponibles",
256
+ "startingAutoRunWorkflow": "🚀 Démarrage du workflow d'exécution automatique...",
257
+ "workflowIncludesSteps": "Le flux de travail comprend {count} mesures:",
258
+ "missingRequiredFile": "Fichier requis manquant : {file}",
259
+ "workflowStopped": "Le flux de travail s'est arrêté en raison d'un échec.",
260
+ "workflowCompleted": "🎉 Workflow terminé !",
261
+ "successfulSteps": "Étapes réussies : {count}",
262
+ "failedSteps": "Étapes ayant échoué : {count}",
263
263
  "stepInitializeProject": "Initialiser le projet",
264
- "stepCheckUsage": "Vérifier l'utilisation",
265
- "stepGenerateSummary": "Génération du rapport résumé…",
264
+ "stepCheckUsage": "Vérifier l'utilisation de la clé",
265
+ "stepGenerateSummary": "Générer un rapport récapitulatif",
266
266
  "runInitializationFirst": "Veuillez d'abord exécuter l'initialisation.",
267
- "initializationCheckPassed": "Contrôle d'initialisation réussi.",
268
- "runningStep": "Exécution de l'étape : {stepName}",
269
- "commandLabel": "Commande : {command}",
270
- "stepCompletedWithTime": "L'étape '{stepName}' terminée en {duration} ms.",
271
- "stepCompleted": "L'étape '{stepName}' terminée.",
272
- "stepFailedWithError": "L'étape '{stepName}' a échoué avec l'erreur : {error}",
273
- "requiredStepFailed": "Étape requise échouée. Arrêt du workflow.",
274
- "optionalStepFailed": "Étape facultative échouée. Poursuite du workflow.",
275
- "stepRequired": "(Requise)",
276
- "stepOptional": "(Facultative)",
277
- "startingExecution": "Démarrage de l'exécution",
278
- "pressEnterToContinue": "Appuyez sur Entrée pour continuer",
279
- "runningSelectedSteps": "Exécution des étapes sélectionnées",
280
- "invalidStepNumber": "Numéro d'étape invalide : {stepNum}",
281
- "executionReport": "Rapport d'exécution :",
282
- "requiredFailedSteps": "Étapes requises échouées : {count}",
283
- "stepDetails": "Détails de l'étape :",
284
- "reportSavedTo": "Rapport enregistré dans : {path}",
267
+ "initializationCheckPassed": "Vérification d'initialisation réussie.",
268
+ "runningStep": "Étape d'exécution : {stepName}",
269
+ "commandLabel": "Commande: {command}",
270
+ "stepCompletedWithTime": "Étape '{stepName}' terminé en {duration}MS.",
271
+ "stepCompleted": "Étape '{stepName}' complété.",
272
+ "stepFailedWithError": "Étape '{stepName}' a échoué avec l'erreur : {error}",
273
+ "requiredStepFailed": "L'étape requise a échoué. Arrêt du flux de travail.",
274
+ "optionalStepFailed": "L’étape facultative a échoué. Flux de travail continu.",
275
+ "stepRequired": "(Requis)",
276
+ "stepOptional": "(Facultatif)",
277
+ "startingExecution": "Début de l'exécution...",
278
+ "pressEnterToContinue": "Appuyez sur Entrée pour continuer...",
279
+ "runningSelectedSteps": "Exécution des étapes sélectionnées...",
280
+ "invalidStepNumber": "Numéro d'étape invalide : {stepNum}",
281
+ "executionReport": "Rapport d'exécution :",
282
+ "requiredFailedSteps": "Les étapes requises ont échoué : {count}",
283
+ "stepDetails": "Détails de l'étape :",
284
+ "reportSavedTo": "Rapport enregistré dans : {path}",
285
285
  "overallStatusSuccess": "SUCCÈS",
286
- "overallStatusFailed": "ÉCHEC",
287
- "overallStatus": "Statut global : {status}",
288
- "pressEnterForDefaults": "Appuyez sur Entrée pour utiliser les paramètres par défaut pour toute invite.",
289
- "sourceDirPrompt": "Entrez le répertoire source (par défaut : {default}) :",
290
- "sourceLangPrompt": "Entrez la langue source (par défaut : {default}) :",
291
- "targetLangsPrompt": "Entrez les langues cibles (séparées par des virgules, par défaut : {default}) :",
292
- "translationMarkerPrompt": "Entrez le marqueur de traduction (par défaut : {default}) :",
293
- "outputDirPrompt": "Entrez le répertoire de sortie pour les rapports (par défaut : {default}) :",
294
- "settingsUpdatedSuccessfully": "Paramètres mis à jour avec succès !",
295
- "errorConfiguringSettings": "Erreur lors de la configuration des paramètres : {error}",
286
+ "overallStatusFailed": "ÉCHOUÉ",
287
+ "overallStatus": "Statut général : {status}",
288
+ "pressEnterForDefaults": "Appuyez sur Entrée pour utiliser les paramètres par défaut pour n'importe quelle invite.",
289
+ "sourceDirPrompt": "Entrez le répertoire source (par défaut : {default}):",
290
+ "sourceLangPrompt": "Saisissez la langue source (par défaut : {default}):",
291
+ "targetLangsPrompt": "Saisissez les langues cibles (séparées par des virgules, par défaut : {default}):",
292
+ "translationMarkerPrompt": "Saisissez le marqueur de traduction (par défaut : {default}):",
293
+ "outputDirPrompt": "Entrez le répertoire de sortie des rapports (par défaut : {default}):",
294
+ "settingsUpdatedSuccessfully": "Paramètres mis à jour avec succès !",
295
+ "errorConfiguringSettings": "Erreur lors de la configuration des paramètres : {error}",
296
296
  "configurationComplete": "Configuration terminée.",
297
- "runAutoRunCommand": "Vous pouvez maintenant exécuter la commande auto-run.",
298
- "configurationFailed": "Configuration échouée : {error}",
297
+ "runAutoRunCommand": "Vous pouvez maintenant exécuter la commande d'exécution automatique.",
298
+ "configurationFailed": "Échec de la configuration : {error}",
299
299
  "noValidStepNumbers": "Aucun numéro d'étape valide fourni.",
300
- "autoRunFailed": "Exécution auto-run échouée : {error}",
301
- "stepCompleteTranslations": "Compléter les traductions",
300
+ "autoRunFailed": "Échec de l'exécution automatique : {error}",
301
+ "stepCompleteTranslations": "Traductions complètes",
302
302
  "stepAnalyzeSizing": "Analyser le dimensionnement",
303
303
  "stepCompletedIcon": "✅",
304
- "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Exécution de l'étape '{stepName}'",
304
+ "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Étape '{stepName}' en cours d'exécution...",
305
305
  "stepFailedIcon": "❌",
306
- "translationLoadWarning": "Avertissement : impossible de charger les traductions {lang}",
307
- "configReadError": "Erreur de lecture de {file}"
306
+ "translationLoadWarning": "Attention : Impossible de charger {lang} traductions",
307
+ "configReadError": "Erreur de lecture {file}"
308
308
  },
309
309
  "analyze": {
310
- "help_message": "Analyseur de Traduction I18n Utilisation: node i18ntk-analyze.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-analyze.js --output-report node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales node i18ntk-analyze.js --output-dir=./analysis --output-report",
311
- "source_directory": "📁 Répertoire source: {sourceDir}",
312
- "i18n_directory": "🌐 Répertoire i18n: {i18nDir}",
310
+ "help_message": "Utilisation de l'analyseur de traduction I18n : nœud i18ntk-analyze.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 des rapports (par défaut : ./reports) --help Afficher cette aide Exemples : node i18ntk-analyze.js --output-report node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales node i18ntk-analyze.js --output-dir=./analysis --output-report",
311
+ "source_directory": "📁 Répertoire source : {sourceDir}",
312
+ "i18n_directory": "🌐Annuaire I18n : {i18nDir}",
313
313
  "loading_translation_files": "📋 Chargement des fichiers de traduction...",
314
- "sourceDirectoryLabel": "📁 Répertoire Source: {sourceDir}",
315
- "sourceLanguageLabel": "🌍 Langue Source: {sourceLanguage}",
316
- "strictModeLabel": "⚙️ Mode Strict: {mode}",
317
- "found_translation_files_count": "✅ Trouvés {count} fichiers de traduction",
318
- "analyzing_translations": "🔍 Analyse des traductions...",
314
+ "sourceDirectoryLabel": "📁 Répertoire des sources : {sourceDir}",
315
+ "sourceLanguageLabel": "🌍 Langue source : {sourceLanguage}",
316
+ "strictModeLabel": "⚙️ Mode strict : {mode}",
317
+ "found_translation_files_count": "✅ Trouvé {count} fichiers de traduction",
318
+ "analyzing_translations": "🔍 Analyser les traductions...",
319
319
  "analysis_completed_successfully": "🎉 Analyse terminée avec succès !",
320
320
  "analysis_results": "📊 RÉSULTATS DE L'ANALYSE",
321
321
  "language_analysis_stats": "{language}: {translatedKeys}/{totalKeys} ({percentage}% traduit)",
322
- "sample_missing_keys": "Exemple de clés manquantes:",
322
+ "sample_missing_keys": "Exemples de clés manquantes :",
323
323
  "missing_key": "- {key}",
324
- "and_more_missing": "...et {count} de plus.",
325
- "sample_unused_keys": "Exemple de clés inutilisées:",
324
+ "and_more_missing": "...et {count} plus.",
325
+ "sample_unused_keys": "Exemples de clés inutilisées :",
326
326
  "unused_key": "- {key}",
327
- "and_more_unused": "...et {count} de plus.",
327
+ "and_more_unused": "...et {count} plus.",
328
328
  "recommendations": "📋 RECOMMANDATIONS",
329
- "add_missing_translations": "💡 Ajouter les traductions manquantes pour améliorer la couverture.",
330
- "remove_unused_translations": "💡 Supprimer les traductions inutilisées pour garder votre projet propre.",
329
+ "add_missing_translations": "💡 Ajoutez les traductions manquantes pour améliorer la couverture.",
330
+ "remove_unused_translations": "💡 Supprimez les traductions inutilisées pour garder votre projet propre.",
331
331
  "next_steps": "📋 PROCHAINES ÉTAPES",
332
- "review_analysis_results": "1. Examiner les résultats de l'analyse dans la console ou le rapport généré.",
333
- "run_with_output_report": "2. Exécuter avec --output-report pour un rapport détaillé.",
334
- "add_or_remove_translations": "3. Ajouter les traductions manquantes ou supprimer les inutilisées.",
335
- "rerun_analysis": "4. Relancer l'analyse pour vérifier les améliorations.",
332
+ "review_analysis_results": "1. Examinez les résultats de l'analyse dans la console ou dans le rapport généré.",
333
+ "run_with_output_report": "2. Exécutez avec --output-report pour un rapport détaillé.",
334
+ "add_or_remove_translations": "3. Ajoutez les traductions manquantes ou supprimez celles inutilisées.",
335
+ "rerun_analysis": "4. Réexécutez l'analyse pour vérifier les améliorations.",
336
336
  "analysis_summary": "📊 RÉSUMÉ DE L'ANALYSE",
337
- "source_files_scanned": "Fichiers source analysés: {fileCount}",
338
- "translation_files_checked": "Fichiers de traduction vérifiés: {translationFileCount}",
339
- "total_keys": "Clés totales: {totalKeys}",
340
- "translated_keys": "Clés traduites: {translatedKeys}",
341
- "missing_keys": "Clés manquantes: {missingKeys}",
342
- "unused_keys": "Clés inutilisées: {unusedKeys}",
343
- "translation_coverage": "Couverture de traduction: {coverage}%",
337
+ "source_files_scanned": "Fichiers sources analysés : {fileCount}",
338
+ "translation_files_checked": "Fichiers de traduction vérifiés : {translationFileCount}",
339
+ "total_keys": "Clés totales : {totalKeys}",
340
+ "translated_keys": "Clés traduites : {translatedKeys}",
341
+ "missing_keys": "Clés manquantes : {missingKeys}",
342
+ "unused_keys": "Clés inutilisées : {unusedKeys}",
343
+ "translation_coverage": "Couverture de traduction : {coverage}%",
344
344
  "analysis_passed_for_language": "✅ Analyse réussie pour {language}",
345
- "analysis_failed_for_language": "❌ Analyse échouée pour {language} ({missingKeys} manquantes, {unusedKeys} inutilisées)",
345
+ "analysis_failed_for_language": "❌ L'analyse a échoué pour {language} ({missingKeys} manquant, {unusedKeys} inutilisé)",
346
346
  "starting": "🔍 Démarrage de l'analyse de traduction...",
347
- "foundLanguages": "📋 Trouvées {count} langues à analyser: {languages}",
348
- "analyzing": "🔄 Analyse de {language}...",
347
+ "foundLanguages": "📋 Trouvé {count} langages à analyser : {languages}",
348
+ "analyzing": "🔄 Analyse {language}...",
349
349
  "reportTitle": "📊 RAPPORT D'ANALYSE DE TRADUCTION",
350
- "generated": "Généré: {timestamp}",
350
+ "generated": "Généré : {timestamp}",
351
351
  "status": "Statut: {translated}/{total} clés ({percentage}% traduit)",
352
- "filesAnalyzed": "Fichiers analysés: {analyzed}/{total}",
353
- "keysNeedingTranslation": "Clés nécessitant une traduction: {count}",
354
- "fileBreakdown": "📋 DÉCOMPOSITION DES FICHIERS",
352
+ "filesAnalyzed": "Dossiers analysés : {analyzed}/{total}",
353
+ "keysNeedingTranslation": "Clés à traduire : {count}",
354
+ "fileBreakdown": "📋 RÉPARTITION DES DOSSIERS",
355
355
  "error": "Erreur",
356
356
  "completed": "✅ Analyse terminée pour {language}",
357
- "progress": "📊 Progression Globale: {translated}/{total} langues traitées",
358
- "reportSaved": "Rapport sauvegardé: {reportPath}",
357
+ "progress": "📊 Progrès global : {translated}/{total} langues traitées",
358
+ "reportSaved": "Rapport enregistré : {reportPath}",
359
359
  "summary": "📊 RÉSUMÉ DE L'ANALYSE",
360
360
  "finished": "✅ Analyse terminée avec succès !",
361
361
  "statusFileMissing": "❌ Fichier de traduction manquant",
362
- "sourceKeys": "📊 Clés source: {count}",
363
- "translation": "📊 Traduction: {translated}/{total} ({percentage}%)",
364
- "structure": "🗂️Structure : {status}",
365
- "consistent": "Consistente",
366
- "inconsistent": "Inconsistante",
367
- "missingKeys": "Clés manquantes: {count}",
368
- "extraKeys": "Clés supplémentaires: {count}",
369
- "issues": "⚠️ Problèmes trouvés: {count}",
362
+ "sourceKeys": "📊 Clés sources : {count}",
363
+ "translation": "📊 Traduction : {translated}/{total} ({percentage}%)",
364
+ "structure": "🗂️ Structure : {status}",
365
+ "consistent": "Cohérent",
366
+ "inconsistent": "Incompatible",
367
+ "missingKeys": "Clés manquantes : {count}",
368
+ "extraKeys": "Clés supplémentaires : {count}",
369
+ "issues": "⚠️ Problèmes trouvés : {count}",
370
370
  "issueType": {
371
- "not_translated": "Non traduit: {count}",
372
- "empty_value": "Valeurs vides: {count}",
373
- "partial_translation": "Traductions partielles: {count}",
374
- "format_mismatch": "Discordances de format: {count}",
375
- "type_mismatch": "Discordances de type: {count}",
376
- "structure_mismatch": "Discordances de structure: {count}",
377
- "same_as_source": "Identique à la source: {count}"
371
+ "not_translated": "Non traduit : {count}",
372
+ "empty_value": "Valeurs vides : {count}",
373
+ "partial_translation": "Traductions partielles : {count}",
374
+ "format_mismatch": "Incohérences de format : {count}",
375
+ "type_mismatch": "Incohérences de type : {count}",
376
+ "structure_mismatch": "Inadéquations de structure : {count}",
377
+ "same_as_source": "Identique à la source : {count}"
378
378
  },
379
379
  "keysToTranslate": "📋 CLÉS À TRADUIRE",
380
380
  "key": "Clé",
381
381
  "english": "Anglais",
382
382
  "needsTranslation": "BESOIN DE TRADUCTION",
383
- "andMoreKeys": "...et {count} clés supplémentaires.",
384
- "noLanguages": "⚠️ Aucune langue cible trouvée.",
383
+ "andMoreKeys": "...et {count} plus de clés.",
384
+ "noLanguages": "⚠️ Aucune langue cible trouvée.",
385
385
  "languageStats": "{language}: {percentage}% complet ({translated}/{total} clés)",
386
- "invalidReportFilePath": "Chemin de fichier de rapport invalide",
386
+ "invalidReportFilePath": "Chemin d'accès au fichier de rapport non valide",
387
387
  "failedToWriteReportFile": "Échec de l'écriture sécurisée du fichier de rapport"
388
388
  },
389
389
  "complete": {
390
390
  "configLoadedSuccessfully": "Configuration chargée avec succès",
391
391
  "configLoadingFailed": "Échec du chargement de la configuration",
392
- "sourceLanguageNotFound": "Langue source non trouvée",
393
- "couldNotParseTarget": "Impossible de parser la cible",
394
- "couldNotParseSource": "Impossible de parser la source",
395
- "reportGenerated": "Rapport généré",
396
- "generateReportPrompt": "Générer un rapport détaillé ? (y/N):",
397
- "title": "🌍 COMPLÉTION DE TRADUCTION I18NTK",
398
- "separator": "============================================================",
399
- "sourceDir": "📁 Répertoire source : {sourceDir}",
400
- "sourceLanguage": "🌐 Langue source : {sourceLanguage}",
401
- "dryRunMode": "🧪 Mode test - aucune modification ne sera appliquée",
402
- "languages": "🌍 Langues disponibles : {languages}",
392
+ "sourceLanguageNotFound": "Répertoire de langue source introuvable : {sourceLanguage}",
393
+ "couldNotParseTarget": "Impossible d'analyser le fichier cible : {file}",
394
+ "couldNotParseSource": "Impossible d'analyser le fichier source : {file}",
395
+ "reportGenerated": "Rapport généré : {path}",
396
+ "generateReportPrompt": "Souhaitez-vous qu'un rapport soit généré ?",
397
+ "title": "🌍 ACHÈVEMENT DE LA TRADUCTION I18NTK",
398
+ "separator": "=============================================================",
399
+ "sourceDir": "📁 Répertoire source : {sourceDir}",
400
+ "sourceLanguage": "🌐 Langue source : {sourceLanguage}",
401
+ "dryRunMode": "🧪 Mode fonctionnement à sec - aucune modification ne sera apportée",
402
+ "languages": "🌍 Langues disponibles : {languages}",
403
403
  "addingMissingKeys": "➕ Ajout des clés manquantes aux fichiers de traduction...",
404
- "processing": "🔄 Traitement de {language}...",
405
- "addedKeys": "✅ {count} clés manquantes ajoutées",
406
- "noChangesNeeded": "✅ Aucune modification nécessaire pour {language}",
407
- "summaryTitle": "📊 RÉSUMÉ DE COMPLÉTION",
408
- "totalChanges": "📝 Modifications totales : {totalChanges}",
404
+ "processing": "🔄 Traitement {language}...",
405
+ "addedKeys": "✅ Ajouté {count} clés manquantes",
406
+ "noChangesNeeded": "✅ Aucun changement nécessaire pour {language}",
407
+ "summaryTitle": "📊 RÉSUMÉ D'ACHÈVEMENT",
408
+ "totalChanges": "📝 Modifications totales : {totalChanges}",
409
409
  "languagesProcessed": "🌍 Langues traitées : {languagesProcessed}",
410
- "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
411
- "nextStepsTitle": "📋 ÉTAPES SUIVANTES",
412
- "nextStep1": "1. Exécuter l'analyse d'utilisation :",
413
- "nextStep2": "node i18ntk-usage.js --output-report",
414
- "nextStep3": "2. Valider les traductions :",
415
- "nextStep4": "node i18ntk-validate.js",
416
- "nextStep5": "3. Analyser les motifs :",
417
- "nextStep6": "node i18ntk-analyze.js",
418
- "allKeysAvailable": "🎉 Toutes les clés de traduction sont maintenant disponibles !",
419
- "runWithoutDryRun": "💡 Exécuter sans --dry-run pour appliquer les modifications",
420
- "deletingOldReport": "🗑️ Suppression de l'ancien rapport...",
410
+ "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
411
+ "nextStepsTitle": "📋 PROCHAINES ÉTAPES",
412
+ "nextStep1": "1. Exécutez une analyse d'utilisation :",
413
+ "nextStep2": "nœud i18ntk-usage.js --output-report",
414
+ "nextStep3": "2. Validez les traductions :",
415
+ "nextStep4": "nœud i18ntk-validate.js",
416
+ "nextStep5": "3. Analysez les modèles :",
417
+ "nextStep6": "nœud i18ntk-analyze.js",
418
+ "allKeysAvailable": "🎉 Toutes les clés de traduction sont désormais disponibles !",
419
+ "runWithoutDryRun": "💡 Exécutez sans --dry-run pour appliquer les modifications",
420
+ "deletingOldReport": "🗑️ Suppression de l'ancien rapport...",
421
421
  "generatingFreshAnalysis": "📊 Génération d'une nouvelle analyse d'utilisation...",
422
- "couldNotGenerate": "❌ Impossible de générer l'analyse d'utilisation",
423
- "reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation des clés communes...",
424
- "foundMissingKeys": "📋 Trouvé {count} clés manquantes depuis l'analyse d'utilisation",
425
- "couldNotParse": "❌ Impossible d'analyser le rapport d'utilisation. Utilisation des clés communes...",
426
- "errorDuringCompletion": "❌ Erreur lors de la finalisation : {error}",
422
+ "couldNotGenerate": "❌ Impossible de générer une analyse d'utilisation",
423
+ "reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation de clés communes...",
424
+ "foundMissingKeys": "📋 Trouvé {count} clés manquantes dans l'analyse d'utilisation",
425
+ "couldNotParse": "❌ Impossible d'analyser le rapport d'utilisation. Utilisation de clés communes...",
426
+ "errorDuringCompletion": "❌ Erreur lors de la réalisation : {error}",
427
427
  "fatalError": "❌ Erreur fatale : {error}",
428
- "configurationValidationFailed": "Échec de la validation de configuration : champs requis manquants"
428
+ "configurationValidationFailed": "Échec de la validation de la configuration : champs obligatoires manquants"
429
429
  },
430
430
  "sizing": {
431
- "separator": "================================================================================",
431
+ "separator": "===============================================================================",
432
432
  "lineSeparator": "--------------------------------------------------------------------------------",
433
433
  "analysisStats": "{stats}",
434
- "sourceDirectoryLabel": "📁 Répertoire source : {sourceDir}",
435
- "sourceLanguageLabel": "🌍 Langue source : {sourceLanguage}",
436
- "strictModeLabel": "⚙️ Mode strict : {mode}",
437
- "invalidSourceDirectoryError": "Chemin du répertoire source invalide : {sourceDir}",
438
- "sourceDirectoryNotFoundError": "Répertoire source introuvable : {sourceDir}",
439
- "invalidOutputDirectoryError": "Chemin du répertoire de sortie invalide : {outputDir}",
440
- "invalidReportFileError": "Chemin du fichier de rapport invalide",
441
- "problematic_keys": "Clés problématiques : {problematicKeys}",
442
- "problematicKeysLabel": "Clés problématiques : {problematicKeys}",
443
- "long_translations": "Traductions longues : {longTranslations}",
434
+ "sourceDirectoryLabel": "📁 Répertoire source : {sourceDir}",
435
+ "sourceLanguageLabel": "🌍 Langue source : {sourceLanguage}",
436
+ "strictModeLabel": "⚙️ Mode strict : {mode}",
437
+ "invalidSourceDirectoryError": "Chemin du répertoire source non valide : {sourceDir}",
438
+ "sourceDirectoryNotFoundError": "Répertoire source introuvable : {sourceDir}",
439
+ "invalidOutputDirectoryError": "Chemin du répertoire de sortie non valide : {outputDir}",
440
+ "invalidReportFileError": "Chemin d'accès au fichier de rapport non valide",
441
+ "problematic_keys": "Clés problématiques : {problematicKeys}",
442
+ "problematicKeysLabel": "Clés problématiques : {problematicKeys}",
443
+ "long_translations": "Traductions longues : {longTranslations}",
444
444
  "failedToSaveReportError": "Échec de l'enregistrement sécurisé du rapport",
445
- "invalidCsvFileError": "Chemin du fichier CSV invalide",
445
+ "invalidCsvFileError": "Chemin de fichier CSV invalide",
446
446
  "failedToSaveCsvError": "Échec de l'enregistrement sécurisé du rapport CSV",
447
- "fatalError": "❌ L'analyse du dimensionnement a échoué : {error}",
447
+ "fatalError": "❌ L'analyse du dimensionnement a échoué : {error}",
448
448
  "starting_i18n_sizing_analysis": "Démarrage de l'analyse du dimensionnement i18n...",
449
- "source_directory": "Répertoire source : {sourceDir}",
450
- "found_languages": "Langues trouvées : {languages}",
451
- "analyzing_file_sizes": "Analyse des tailles de fichiers...",
452
- "analyzing_translation_content": "Analyse du contenu des traductions...",
453
- "generating_size_comparisons": "Génération des comparaisons de taille...",
449
+ "source_directory": "Répertoire source : {sourceDir}",
450
+ "found_languages": "Langues trouvées : {languages}",
451
+ "analyzing_file_sizes": "Analyse de la taille des fichiers...",
452
+ "analyzing_translation_content": "Analyser le contenu de la traduction...",
453
+ "generating_size_comparisons": "Génération de comparaisons de tailles...",
454
454
  "no_languages_found_for_comparison": "Aucune langue trouvée pour la comparaison",
455
455
  "sizing_analysis_results": "Résultats de l'analyse du dimensionnement I18n",
456
456
  "file_sizes_title": "Tailles des fichiers",
457
- "file_sizes_header": "Langue Taille(Ko) Lignes Caractères",
458
- "file_size_row": "{lang} {sizeKB} {lines} {characters}",
459
- "language_statistics_title": "Statistiques des langues",
460
- "language_stats_header": "Langue Clés Caractères Long. moy. Long. max Vides Longs",
461
- "language_stats_row": "{lang} {totalKeys} {totalCharacters} {averageKeyLength} {maxKeyLength} {emptyKeys} {longKeys}",
457
+ "file_sizes_header": "Langue Taille (Ko) Lignes Caractères",
458
+ "file_size_row": "{lang} {sizeKB} {lines} {characters}",
459
+ "language_statistics_title": "Statistiques linguistiques",
460
+ "language_stats_header": "Langue Touches Caractères Longueur moyenne Longueur maximale Vide Long",
461
+ "language_stats_row": "{lang} {totalKeys} {totalCharacters} {averageKeyLength} {maxKeyLength} {emptyKeys} {longKeys}",
462
462
  "size_variations_title": "Variations de taille",
463
- "size_variations_header": "Langue Diff. car. % Diff Problématique",
464
- "size_variation_row": "{lang} {characterDifference} {percentageDifference}% {problematic}",
463
+ "size_variations_header": "Langue Char Diff % Diff Problématique",
464
+ "size_variation_row": "{lang} {characterDifference} {percentageDifference}% {problematic}",
465
465
  "problematic_yes": "Oui",
466
466
  "problematic_no": "Non",
467
467
  "recommendations_title": "Recommandations",
468
468
  "recommendation_item": "{index}. {recommendation}",
469
- "problematic_key_detail": "{index}. Clé: '{key}' - Variations: {variations}",
470
- "generating_detailed_report": "Génération du rapport détaillé...",
469
+ "problematic_key_detail": "{index}. Clé: '{key}' - Variantes : {variations}",
470
+ "generating_detailed_report": "Génération d'un rapport détaillé...",
471
471
  "keysHaveSignificantSizeVariations": "les clés présentent des variations de taille significatives",
472
- "longTranslationsDetected": "{lang} a {data.longKeys} traductions de plus de 100 caractères - envisagez de les décomposer",
472
+ "longTranslationsDetected": "${lang} a des traductions ${data.longKeys} de plus de 100 caractères : pensez à les décomposer",
473
473
  "longer": "plus long",
474
474
  "shorter": "plus court",
475
- "review_translations": "Considérez la revue des traductions {lang} - elles sont {data.percentageDifference}% {data.comparison} que la référence",
476
- "report_saved_to": "Rapport enregistré dans : {reportPath}",
477
- "considerReviewingTranslations": "Envisagez de revoir les traductions {lang} - elles sont {data.percentageDifference}% plus longues que la référence",
478
- "csv_report_saved_to": "Rapport CSV enregistré dans: {csvPath}",
479
- "human_report_saved": "Rapport lisible enregistré: {reportPath}",
475
+ "review_translations": "Pensez à revoir {lang} traductions - ils sont {percentageDifference}% {comparison} que la ligne de base",
476
+ "report_saved_to": "Rapport enregistré dans : {reportPath}",
477
+ "considerReviewingTranslations": "Pensez à revoir ${lang} traductions - elles sont ${data.percentageDifference} % plus longues que la ligne de base",
478
+ "csv_report_saved_to": "Rapport CSV enregistré dans : {csvPath}",
479
+ "human_report_saved": "Rapport lisible enregistré : {reportPath}",
480
480
  "folder_summary_title": "Résumé du dossier",
481
- "folder_summary_table_header": "Langue Taille(KB) Clés Longueur Moyenne Caractères Totaux",
482
- "folder_summary_row": "{lang} {sizeKB} {totalKeys} {avgLength} {totalChars}",
481
+ "folder_summary_table_header": "Langue Taille (Ko) Clés Longueur moyenne Nombre total de caractères",
482
+ "folder_summary_row": "{lang} {sizeKB} {totalKeys} {avgLength} {totalChars}",
483
483
  "language_comparison_title": "Comparaison des langues",
484
484
  "language_comparison_row": "{lang}: {diff} caractères ({percent}%) {status}",
485
- "summary_stats": "📊 Résumé: {totalLanguages} langues, {totalKeys} clés - Rapports enregistrés dans {reportPath}",
486
- "detailedKeysDescription": "Afficher l'analyse détaillée des clés dans la console",
487
- "too_many_keys_warning": "⚠️ Trop de clés pour l'affichage console - voir le rapport détaillé pour l'analyse complète",
485
+ "summary_stats": "📊Résumé : {totalLanguages} les langues, {totalKeys} touches - Rapports enregistrés dans {reportPath}",
486
+ "detailedKeysDescription": "Afficher une analyse détaillée au niveau clé dans la console",
487
+ "too_many_keys_warning": "⚠️ Trop de clés à afficher dans la console - consultez le fichier de rapport détaillé pour une analyse complète",
488
488
  "no_translation_files_found": "Aucun fichier de traduction trouvé",
489
- "analysis_completed": "Analyse terminée en {duration}ms",
490
- "analysis_failed": "L'analyse a échoué : {errorMessage}",
491
- "starting_analysis": "Démarrage de l'analyse...",
489
+ "analysis_completed": "Analyse réalisée en {duration}MS",
490
+ "analysis_failed": "L'analyse a échoué : {errorMessage}",
491
+ "starting_analysis": "Début de l'analyse...",
492
492
  "found_files": "Trouvé {count} fichiers",
493
- "failed_to_parse_language_error": "Échec de l'analyse des traductions {language} : {errorMessage}",
493
+ "failed_to_parse_language_error": "Échec de l'analyse {language} traductions: {errorMessage}",
494
494
  "recommendations": {
495
495
  "keys_have_significant_size_variations": "les clés présentent des variations de taille significatives",
496
- "consider_reviewing_translations": "Envisagez de revoir les traductions {lang} - elles sont {percentageDifference}% {comparison} que la référence",
497
- "long_translations_detected": "{lang} a {longKeys} traductions de plus de {threshold} caractères - envisagez de les décomposer"
496
+ "consider_reviewing_translations": "Pensez à revoir {lang} traductions - ils sont {percentageDifference}% {comparison} que la ligne de base",
497
+ "long_translations_detected": "{lang} a {longKeys} traductions plus longue que {threshold} personnages - pensez à les décomposer"
498
498
  },
499
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}",
500
+ "key_analysis_detail": "{lang}: {length} caractères ({status}) - {translation}",
501
+ "key_analysis_header": "Clé: {key}",
502
502
  "status_empty": "vide",
503
503
  "status_long": "long",
504
504
  "status_ok": "d'accord"
505
505
  },
506
506
  "usage": {
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",
508
- "source_directory_thissourcedir": "📁 Répertoire source: {sourceDir}",
509
- "translationCompletenessTitle": "🌍 Exhaustivité des traductions:",
510
- "i18n_directory_thisi18ndir": "🌐 Répertoire i18n: {i18nDir}",
511
- "failed_to_parse_filename_error": "⚠️ Échec de l'analyse de {fileName}: {errorMessage}",
507
+ "help_message": "Utilisation de l'analyseur d'utilisation I18n : nœud 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 des 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",
508
+ "source_directory_thissourcedir": "📁 Répertoire source : {sourceDir}",
509
+ "translationCompletenessTitle": "🌍 Intégralité de la traduction :",
510
+ "i18n_directory_thisi18ndir": "🌐Annuaire I18n : {i18nDir}",
511
+ "failed_to_parse_filename_error": "⚠️ Échec de l'analyse {fileName}: {errorMessage}",
512
512
  "analyzing_source_files": "🔍 Analyse des fichiers sources...",
513
513
  "found_files_in_source": "📂 Trouvé {numFiles} fichiers dans le répertoire source",
514
- "found_thisusedkeyssize_unique_": "🎯 Trouvé {usedKeysSize} clés uniques utilisées",
515
- "total_key_usages_totalkeysfoun": "📊 Total des utilisations de clés: {totalKeysFound}",
514
+ "found_thisusedkeyssize_unique_": "🎯 Trouvé {usedKeysSize} clés utilisées uniques",
515
+ "total_key_usages_totalkeysfoun": "📊 Utilisations totales des clés : {totalKeysFound}",
516
516
  "loading_available_translation_": "📋 Chargement des clés de traduction disponibles...",
517
517
  "found_thisavailablekeyssize_av": "✅ Trouvé {availableKeysSize} clés disponibles",
518
518
  "foundTranslationFiles": "✅ Trouvé {count} fichiers de traduction",
519
- "errorReadingI18nDirectory": "⚠️ Erreur de lecture du répertoire i18n: {error}",
519
+ "errorReadingI18nDirectory": "⚠️ Erreur de lecture du répertoire i18n : {error}",
520
520
  "pressEnterToReturnToMenu": "📝 Appuyez sur Entrée pour revenir au menu principal...",
521
- "notTranslatedKeysTotal": "⚠️ Clés non traduites: {total}",
522
- "noSourceFilesFound": "⚠️ Aucun fichier source trouvé dans le répertoire source.",
523
- "reviewNotTranslatedKeys": "💡 Examiner les clés non traduites",
521
+ "notTranslatedKeysTotal": "⚠️ Clés non traduites : {total}",
522
+ "noSourceFilesFound": "⚠️ Aucun fichier source trouvé dans le répertoire source.",
523
+ "reviewNotTranslatedKeys": "💡 Revue des clés non traduites",
524
524
  "analysisCompletedSuccessfully": "🎉 Analyse terminée avec succès !",
525
- "detectedSourceDirectory": "Répertoire source détecté: {sourceDir}",
526
- "detectedI18nDirectory": "Répertoire i18n détecté: {i18nDir}",
525
+ "detectedSourceDirectory": "Répertoire source détecté : {sourceDir}",
526
+ "detectedI18nDirectory": "Répertoire i18n détecté : {i18nDir}",
527
527
  "fileInfo": "📄 {namespace}: {keys} clés",
528
- "failedToAnalyzeUsage": "❌ Échec de l'analyse d'utilisation: {error}",
529
- "failedToAnalyzeFile": "❌ Échec de l'analyse du fichier: {error}",
528
+ "failedToAnalyzeUsage": "❌ Échec de l'analyse de l'utilisation : {error}",
529
+ "failedToAnalyzeFile": "❌ Échec de l'analyse du fichier : {error}",
530
530
  "failedToExtractKeys": "❌ Échec de l'extraction des clés de {filePath}: {error}",
531
- "analysisFailedError": "Erreur: Impossible de terminer l'analyse - {error}",
531
+ "analysisFailedError": " L'analyse a échoué : {error}",
532
532
  "analyzerInitialized": "Analyseur initialisé",
533
- "analyzerInitFailed": "Échec de l'initialisation de l'analyseur: {error}",
533
+ "analyzerInitFailed": "L'initialisation de l'analyseur a échoué : {error}",
534
534
  "argsParsed": "Arguments analysés",
535
- "processedFiles": "Traité {processedFiles} sur {totalFiles} fichiers.",
536
- "argsParseFailed": "Échec de l'analyse des arguments: {error}",
537
- "translationDiscoveryError": "Erreur de découverte de traduction: {error}",
538
- "fileTraversalError": "Erreur de parcours des fichiers: {error}",
539
- "sourceEqualsI18nWarn": "⚠️ Le répertoire source et le répertoire i18n sont identiques. Cela peut causer des problèmes avec l'analyse.",
540
- "i18nEqualsSourceWarn": "⚠️ Le répertoire i18n et le répertoire source sont identiques. Cela peut causer des problèmes avec l'analyse.",
541
- "usageAnalysisFailed": "⚠️ Échec de l'analyse d'utilisation: {error}",
542
- "translationFileParseError": "⚠️ Erreur d'analyse du fichier de traduction: {error}",
543
- "translationKeysLoadError": "⚠️ Erreur de chargement des clés de traduction: {error}",
535
+ "processedFiles": "Traité {processedFiles} de {totalFiles} fichiers.",
536
+ "argsParseFailed": "L'analyse des arguments a échoué : {error}",
537
+ "translationDiscoveryError": "Erreur de découverte de traduction : {error}",
538
+ "fileTraversalError": "Erreur de parcours de fichier : {error}",
539
+ "sourceEqualsI18nWarn": "⚠️ Le répertoire source et le répertoire i18n sont identiques. Cela peut entraîner des problèmes avec l'analyse.",
540
+ "i18nEqualsSourceWarn": "⚠️ Le répertoire I18n et le répertoire source sont identiques. Cela peut entraîner des problèmes avec l'analyse.",
541
+ "usageAnalysisFailed": "⚠️ L'analyse de l'utilisation a échoué : {error}",
542
+ "translationFileParseError": "⚠️ Erreur d'analyse du fichier de traduction : {error}",
543
+ "translationKeysLoadError": "⚠️ Erreur de chargement des clés de traduction : {error}",
544
544
  "languageCompletenessStats": "🌐 {language}: {translated}/{total} ({completeness}% traduit)",
545
- "missingKeysCount": " Clés manquantes: {count}",
546
- "analyzingTranslationCompleteness": "Analyse de l'exhaustivité des traductions...",
547
- "unusedKeysCount": "⚠️ Clés non utilisées: {count}",
548
- "usedKeysCount": "Clés utilisées: {count}",
549
- "availableKeysCount": "Clés disponibles: {count}",
550
- "analysisResults": "Résultats de l'analyse:",
551
- "i18nDirectoryNotFound": "⚠️ Répertoire i18n introuvable. Veuillez vérifier le chemin.",
552
- "sourceDirectoryNotFound": "⚠️ Répertoire source introuvable: {dir}",
545
+ "missingKeysCount": "⚠️ Clés manquantes : {count}",
546
+ "analyzingTranslationCompleteness": "Analyser l'exhaustivité de la traduction...",
547
+ "unusedKeysCount": "Clés inutilisées : {count}",
548
+ "usedKeysCount": "Clés utilisées : {count}",
549
+ "availableKeysCount": "Clés disponibles : {count}",
550
+ "analysisResults": "Résultats d'analyse :",
551
+ "i18nDirectoryNotFound": "⚠️ Répertoire I18n introuvable. Veuillez vérifier le chemin.",
552
+ "sourceDirectoryNotFound": "⚠️ Répertoire source introuvable : {dir}",
553
553
  "checkUsage": {
554
- "title": "🔍 ANALYSE D'UTILISATION I18NTK",
554
+ "title": "🔍 ANALYSE D'UTILISATION DU I18NTK",
555
555
  "analyzing_source_files": "🔍 Analyse des fichiers sources...",
556
- "source_directory_thissourcedir": "📁 Répertoire source : {sourceDir}",
557
- "i18n_directory_thisi18ndir": "📁 Répertoire i18n : {i18nDir}",
556
+ "source_directory_thissourcedir": "📁 Répertoire source : {sourceDir}",
557
+ "i18n_directory_thisi18ndir": "📁 Annuaire i18n : {i18nDir}",
558
558
  "found_files_in_source": "✅ Trouvé {numFiles} fichiers dans le répertoire source",
559
- "no_source_files_found": "⚠️ Aucun fichier source trouvé dans le répertoire source.",
560
- "processedFiles": "📊 Traité {processedFiles} sur {totalFiles} fichiers",
561
- "failedToProcessFile": "❌ Échec du traitement de {filePath} : {error}",
562
- "found_thisusedkeyssize_unique_": "🔍 Trouvé {usedKeysSize} clés uniques utilisées",
563
- "total_key_usages_totalkeysfoun": "📊 Total des utilisations de clés : {totalKeysFound}",
559
+ "no_source_files_found": "⚠️ Aucun fichier source trouvé dans le répertoire spécifié",
560
+ "processedFiles": "📊 Traité {processedFiles} de {totalFiles} fichiers",
561
+ "failedToProcessFile": "❌ Échec du traitement",
562
+ "found_thisusedkeyssize_unique_": "🔍 Trouvé {usedKeysSize} clés utilisées uniques",
563
+ "total_key_usages_totalkeysfoun": "📊 Utilisations totales des clés : {totalKeysFound}",
564
564
  "loading_available_translation_": "📂 Chargement des clés de traduction disponibles...",
565
565
  "found_thisavailablekeyssize_av": "✅ Trouvé {availableKeysSize} clés disponibles",
566
566
  "message": "Analyse de l'utilisation des clés de traduction dans votre projet...",
567
- "usage_analysis_results": "📊 RÉSULTATS D'ANALYSE D'UTILISATION",
568
- "source_files_scanned_thisfileu": "📁 Fichiers sources analysés : {fileUsageSize}",
567
+ "usage_analysis_results": "📊 RÉSULTATS DE L'ANALYSE D'UTILISATION",
568
+ "source_files_scanned_thisfileu": "📁 Fichiers sources analysés : {fileUsageSize}",
569
569
  "available_translation_keys_thi": "✅ Clés de traduction disponibles : {availableKeysSize}",
570
- "used_translation_keys_thisused": "🔍 Clés de traduction utilisées : {usedKeysSize}",
571
- "dynamic_keys_detected_dynamick": "⚡ Clés dynamiques détectées : {dynamicKeysLength}",
572
- "unused_keys_unusedkeyslength": "🗑️ Clés inutilisées : {unusedKeysLength}",
570
+ "used_translation_keys_thisused": "🔍 Clés de traduction utilisées : {usedKeysSize}",
571
+ "dynamic_keys_detected_dynamick": "⚡ Clés dynamiques détectées : {dynamicKeysLength}",
572
+ "unused_keys_unusedkeyslength": "🗑️ Clés inutilisées : {unusedKeysLength}",
573
573
  "missing_keys_missingkeyslength": "❌ Clés manquantes : {missingKeysLength}",
574
- "translation_completeness_title": "📈 EXHAUSTIVITÉ DES TRADUCTIONS",
575
- "language_completeness_stats": "{language} : {translated}/{total} clés ({percentage}%)",
576
- "n_sample_unused_keys": "🗑️ EXEMPLE DE CLÉS INUTILISÉES (5 premières) :",
574
+ "translation_completeness_title": "📈 EXHAUSTIVITÉ DE LA TRADUCTION",
575
+ "language_completeness_stats": "{language}: {translated}/{total} clés ({percentage}%)",
576
+ "n_sample_unused_keys": "🗑️ EXEMPLES DE CLÉS INUTILISÉES (5 premières) :",
577
577
  "key": "🔑 {key}",
578
- "and_unusedkeyslength_5_more": "... et {count} autres clés inutilisées",
579
- "n_sample_missing_keys": "❌ EXEMPLE DE CLÉS MANQUANTES (5 premières) :",
580
- "and_missingkeyslength_5_more": "... et {count} autres clés manquantes",
581
- "n_generating_detailed_report": "📊 Génération du rapport détaillé...",
582
- "report_saved_reportpath": "📄 Rapport sauvegardé : {reportPath}",
583
- "n_recommendations": "💡 RECOMMANDATIONS :",
584
- "consider_removing_unused_trans": "🗑️ Envisagez de supprimer les traductions inutilisées pour réduire la taille du bundle",
585
- "add_missing_translation_keys_t": "➕ Ajoutez les clés de traduction manquantes pour maintenir la cohérence",
578
+ "and_unusedkeyslength_5_more": "... et {count} plus de clés inutilisées",
579
+ "n_sample_missing_keys": "❌ EXEMPLES DE CLÉS MANQUANTES (5 premières) :",
580
+ "and_missingkeyslength_5_more": "... et {count} plus de clés manquantes",
581
+ "n_generating_detailed_report": "📊 Génération d'un rapport détaillé...",
582
+ "report_saved_reportpath": "📄 Rapport enregistré : {reportPath}",
583
+ "n_recommendations": "💡 RECOMMANDATIONS :",
584
+ "consider_removing_unused_trans": "🗑️ Pensez à supprimer les traductions inutilisées pour réduire la taille du bundle",
585
+ "add_missing_translation_keys_t": "➕ Ajouter les clés de traduction manquantes pour maintenir la cohérence",
586
586
  "review_dynamic_keys_manually_t": "🔍 Vérifiez manuellement les clés dynamiques (elles peuvent être valides)",
587
587
  "all_translation_keys_are_prope": "✅ Toutes les clés de traduction sont correctement utilisées !",
588
- "n_next_steps": "🎯 PROCHAINES ÉTAPES :",
589
- "2_check_the_detailed_report_fo": "2. Vérifiez le rapport détaillé pour les problèmes spécifiques",
590
- "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",
591
- "1_review_the_analysis_results": "1. Examinez les résultats d'analyse dans la console ou le rapport généré.",
588
+ "n_next_steps": "🎯 PROCHAINES ÉTAPES :",
589
+ "2_check_the_detailed_report_fo": "2. Consultez le rapport détaillé pour des problèmes spécifiques",
590
+ "help_message": "Utilisation de l'analyseur d'utilisation I18n : nœud 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 des 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",
591
+ "1_review_the_analysis_results": "1. Examinez les résultats de l'analyse dans la console ou dans le rapport généré.",
592
592
  "2_run_with_outputreport_for_de": "2. Exécutez avec --output-report pour un rapport détaillé.",
593
593
  "3_remove_unused_keys_or_add_mi": "3. Supprimez les clés inutilisées ou ajoutez les clés manquantes à votre code source.",
594
- "4_rerun_analysis_to_verify_imp": "4. Relancez l'analyse pour vérifier les améliorations.",
595
- "noSourceFilesFound": "Aucun fichier source trouvé à analyser.",
596
- "i18nDirectoryNotFound": "Répertoire i18n introuvable : {i18nDir}",
594
+ "4_rerun_analysis_to_verify_imp": "4. Réexécutez l'analyse pour vérifier les améliorations.",
595
+ "noSourceFilesFound": "Aucun fichier source à analyser trouvé.",
596
+ "i18nDirectoryNotFound": "Répertoire I18n introuvable : {i18nDir}",
597
597
  "noTranslationLanguagesFound": "Aucune langue de traduction trouvée.",
598
- "failedToAnalyzeFile": "Échec de l'analyse du fichier {filePath} : {error}",
599
- "failedToAnalyzeLanguage": "Échec de l'analyse de la langue {language} : {error}",
600
- "translationCompletenessAnalysisFailed": "L'analyse de l'exhaustivité des traductions a échoué : {error}",
598
+ "failedToAnalyzeFile": "Échec de l'analyse du fichier {filePath}: {error}",
599
+ "failedToAnalyzeLanguage": "Échec de l'analyse de la langue {language}: {error}",
600
+ "translationCompletenessAnalysisFailed": "L'analyse de l'intégralité de la traduction a échoué : {error}",
601
601
  "n": "\\n"
602
602
  },
603
603
  "complete": {
604
604
  "configLoadedSuccessfully": "Configuration chargée avec succès",
605
605
  "configLoadingFailed": "Échec du chargement de la configuration",
606
- "title": "🌍 COMPLÉTION DES TRADUCTIONS I18NTK",
607
- "separator": "============================================================",
608
- "sourceDir": "📁 Répertoire source : {sourceDir}",
609
- "sourceLanguage": "🌐 Langue source : {sourceLanguage}",
610
- "dryRunMode": "🧪 Mode simulation - aucune modification ne sera effectuée",
611
- "languages": "🌍 Langues disponibles : {languages}",
606
+ "title": "🌍 ACHÈVEMENT DE LA TRADUCTION I18NTK",
607
+ "separator": "=============================================================",
608
+ "sourceDir": "📁 Répertoire source : {sourceDir}",
609
+ "sourceLanguage": "🌐 Langue source : {sourceLanguage}",
610
+ "dryRunMode": "🧪 Mode fonctionnement à sec - aucune modification ne sera apportée",
611
+ "languages": "🌍 Langues disponibles : {languages}",
612
612
  "addingMissingKeys": "➕ Ajout des clés manquantes aux fichiers de traduction...",
613
- "processing": "🔄 Traitement de {language}...",
613
+ "processing": "🔄 Traitement {language}...",
614
614
  "addedKeys": "✅ Ajouté {count} clés manquantes",
615
- "changeDetails": "📝 {file} : {key}",
616
- "andMore": "...et {count} autres",
617
- "noChangesNeeded": "✅ Aucune modification nécessaire pour {language}",
618
- "summaryTitle": "📊 RÉSUMÉ DE LA COMPLÉTION",
619
- "totalChanges": "📝 Total des modifications : {totalChanges}",
615
+ "changeDetails": "📝 {file}: {key}",
616
+ "andMore": "...et {count} plus",
617
+ "noChangesNeeded": "✅ Aucun changement nécessaire pour {language}",
618
+ "summaryTitle": "📊 RÉSUMÉ D'ACHÈVEMENT",
619
+ "totalChanges": "📝 Modifications totales : {totalChanges}",
620
620
  "languagesProcessed": "🌍 Langues traitées : {languagesProcessed}",
621
- "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
621
+ "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
622
622
  "nextStepsTitle": "📋 PROCHAINES ÉTAPES",
623
- "nextStep1": "1. Lancer l'analyse d'utilisation :",
624
- "nextStep2": "node i18ntk-usage.js --output-report",
625
- "nextStep3": "2. Valider les traductions :",
626
- "nextStep4": "node i18ntk-validate.js",
627
- "nextStep5": "3. Analyser les motifs :",
628
- "nextStep6": "node i18ntk-analyze.js",
629
- "allKeysAvailable": "🎉 Toutes les clés de traduction sont maintenant disponibles !",
623
+ "nextStep1": "1. Exécutez une analyse d'utilisation :",
624
+ "nextStep2": "nœud i18ntk-usage.js --output-report",
625
+ "nextStep3": "2. Validez les traductions :",
626
+ "nextStep4": "nœud i18ntk-validate.js",
627
+ "nextStep5": "3. Analysez les modèles :",
628
+ "nextStep6": "nœud i18ntk-analyze.js",
629
+ "allKeysAvailable": "🎉 Toutes les clés de traduction sont désormais disponibles !",
630
630
  "runWithoutDryRun": "💡 Exécutez sans --dry-run pour appliquer les modifications",
631
- "deletingOldReport": "🗑️ Suppression de l'ancien rapport...",
631
+ "deletingOldReport": "🗑️ Suppression de l'ancien rapport...",
632
632
  "generatingFreshAnalysis": "📊 Génération d'une nouvelle analyse d'utilisation...",
633
- "couldNotGenerate": "❌ Impossible de générer l'analyse d'utilisation",
634
- "reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation des clés communes...",
633
+ "couldNotGenerate": "❌ Impossible de générer une analyse d'utilisation",
634
+ "reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation de clés communes...",
635
635
  "foundMissingKeys": "📋 Trouvé {count} clés manquantes dans l'analyse d'utilisation",
636
- "couldNotParse": "❌ Impossible d'analyser le rapport d'utilisation. Utilisation des clés communes..."
636
+ "couldNotParse": "❌ Impossible d'analyser le rapport d'utilisation. Utilisation de clés communes..."
637
637
  },
638
638
  "noTranslationLanguagesFound": "Aucune langue de traduction trouvée",
639
639
  "failedToAnalyzeLanguage": "Échec de l'analyse de la langue",
640
- "translationCompletenessAnalysisFailed": "L'analyse de l'exhaustivité des traductions a échoué",
640
+ "translationCompletenessAnalysisFailed": "Échec de l'analyse de l'intégralité de la traduction",
641
641
  "failedToProcessFile": "Échec du traitement du fichier :",
642
642
  "failedToSaveReport": "Échec de l'enregistrement du rapport d'utilisation : {error}",
643
643
  "i18nDirectoryDoesNotExist": "Le répertoire I18n n'existe pas : {dir}",
@@ -645,597 +645,597 @@
645
645
  "sourceDirectoryDoesNotExist": "Le répertoire source n'existe pas : {dir}"
646
646
  },
647
647
  "validate": {
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",
649
- "title": "🔍 Validateur de traductions I18n",
650
- "message": "Lancement du processus de validation...",
651
- "sourceDirectory": "📁 Répertoire source : {dir}",
652
- "sourceLanguage": "🌍 Langue source : {sourceLanguage}",
653
- "strictMode": "⚙️ Mode strict : {mode}",
654
- "noTargetLanguages": "Aucune langue cible configurée ; validation des cibles ignorée. Ajoutez des langues via \"i18ntk init --languages=de,fr\".",
655
- "validatingLanguages": "🌍 Validation des langues : {langs}",
656
- "validatingLanguage": "🔍 Validation de la langue : {lang}",
657
- "filesCount": "📄 Fichiers : {count}",
658
- "keysCount": "🔑 Clés : {count}",
659
- "missingFilesCount": "📁 Fichiers manquants : {count}",
660
- "syntaxErrorsCount": "❌ Erreurs de syntaxe : {count}",
648
+ "help_message": "Utilisation du validateur de traduction I18n : nœud i18ntk-validate.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 des rapports (par défaut : ./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",
649
+ "title": "🔍 Validateur de traduction I18n",
650
+ "message": "Démarrage du processus de validation...",
651
+ "sourceDirectory": "📁 Répertoire source : {dir}",
652
+ "sourceLanguage": "🌍 Langue source : {sourceLanguage}",
653
+ "strictMode": "⚙️ Mode strict : {mode}",
654
+ "noTargetLanguages": "Aucune langue cible configurée ; ignorer la validation de la cible. Ajoutez des langues via \"i18ntk init --linguals=de,fr\".",
655
+ "validatingLanguages": "🌍 Validation des langues : {langs}",
656
+ "validatingLanguage": "🔍 Langue de validation : {lang}",
657
+ "filesCount": "📄 Fichiers : {count}",
658
+ "keysCount": "🔑 Clés : {count}",
659
+ "missingFilesCount": "📁 Fichiers manquants : {count}",
660
+ "syntaxErrorsCount": "❌ Erreurs de syntaxe : {count}",
661
661
  "translationPercentage": "🎯 Traduction : {percentage}% ({translated}/{total} clés)",
662
- "validationSummary": "📊 RÉCAPITULATIF DE LA VALIDATION",
663
- "validation_failed": "❌ Validation échouée : {error}",
664
- "totalErrors": "❌ Erreurs totales : {count}",
665
- "totalWarnings": "⚠️ Avertissements totaux : {count}",
662
+ "validationSummary": "📊 RÉSUMÉ DE VALIDATION",
663
+ "validation_failed": "❌ La validation a échoué : {error}",
664
+ "totalErrors": "❌ Erreurs totales : {count}",
665
+ "totalWarnings": "⚠️ Total des avertissements : {count}",
666
666
  "errorsSection": "❌ ERREURS",
667
- "warningsSection": "⚠️ AVERTISSEMENTS",
667
+ "warningsSection": "⚠️ AVERTISSEMENTS",
668
668
  "recommendationsSection": "💡 RECOMMANDATIONS",
669
- "fixErrorsFirst": "1. Corrigez d'abord toutes les erreurs",
669
+ "fixErrorsFirst": "1. Corrigez dabord toutes les erreurs",
670
670
  "resolveMissingFilesAndSyntaxErrors": "1. Résolvez les fichiers manquants et les erreurs de syntaxe",
671
- "fixStructuralInconsistencies": "2. Corrigez les incohérences structurelles",
672
- "completeMissingTranslations": "3. Complétez les traductions manquantes",
673
- "rerunValidation": "4. Relancez la validation pour vérifier les corrections",
674
- "addressWarnings": "Traitez les avertissements pour améliorer la qualité",
675
- "reviewWarnings": "Vérifiez les avertissements et corrigez-les si nécessaire",
676
- "considerRunningWithStrict": "2. Envisagez d'exécuter avec l'option --strict pour une validation plus stricte",
677
- "allValidationsPassed": "🎉 Toutes les validations sont réussies !",
678
- "considerRunningUsageAnalysis": "Envisagez d'exécuter l'analyse d'utilisation : node i18ntk-usage.js",
679
- "deletedOldReport": "🗑️ Ancien rapport de validation supprimé",
680
- "sourceDir": "📁 Répertoire source : {sourceDir}",
681
- "i18nDir": "🌐 Répertoire i18n : {i18nDir}",
671
+ "fixStructuralInconsistencies": "2. Corriger les incohérences structurelles",
672
+ "completeMissingTranslations": "3. Compléter les traductions manquantes",
673
+ "rerunValidation": "4. Réexécutez la validation pour vérifier les correctifs",
674
+ "addressWarnings": "Traiter les avertissements pour améliorer la qualité",
675
+ "reviewWarnings": "Examinez les avertissements et corrigez-les le cas échéant",
676
+ "considerRunningWithStrict": "2. Pensez à exécuter avec l'indicateur --strict pour une validation plus stricte",
677
+ "allValidationsPassed": "🎉 Toutes les validations passées !",
678
+ "considerRunningUsageAnalysis": "Envisagez d'exécuter une analyse d'utilisation : nœud i18ntk-usage.js",
679
+ "deletedOldReport": "🗑️ Ancien rapport de validation supprimé",
680
+ "sourceDir": "📁 Répertoire source : {sourceDir}",
681
+ "i18nDir": "🌐Annuaire I18n : {i18nDir}",
682
682
  "loadingTranslationFiles": "📋 Chargement des fichiers de traduction...",
683
- "foundTranslationFilesCount": "✅ {count} fichiers de traduction trouvés",
684
- "analyzingTranslations": "🔍 Analyse des traductions...",
683
+ "foundTranslationFilesCount": "✅ Trouvé {count} fichiers de traduction",
684
+ "analyzingTranslations": "🔍 Analyser les traductions...",
685
685
  "validationCompletedSuccessfully": "🎉 Validation terminée avec succès !",
686
- "validationErrorsFound": "⚠️ Erreurs de validation trouvées : {count}",
687
- "validationWarningsFound": "⚠️ Avertissements de validation trouvés : {count}",
688
- "validationPassed": "✅ Validation réussie sans erreurs",
689
- "validationFailed": "Validation échouée : {error}",
686
+ "validationErrorsFound": "⚠️ Erreurs de validation trouvées : {count}",
687
+ "validationWarningsFound": "⚠️ Avertissements de validation trouvés : {count}",
688
+ "validationPassed": "✅ Validation réussie sans erreur",
689
+ "validationFailed": "Échec de la validation : {error}",
690
690
  "startingValidationProcess": "🔍 Démarrage du processus de validation...",
691
691
  "validationProcessCompletedSuccessfully": "✅ Processus de validation terminé avec succès",
692
- "stackTrace": "Trace de la pile : {stack}",
693
- "authenticationFailed": "❌ Authentification échouée. Accès refusé.",
694
- "fatalValidationError": "❌ Erreur fatale de validation : {error}",
695
- "configAccess": "Accès à la configuration pour la validation",
692
+ "stackTrace": "Trace de pile : {stack}",
693
+ "authenticationFailed": "❌ L'authentification a échoué. Accès refusé.",
694
+ "fatalValidationError": "❌ Erreur de validation fatale : {error}",
695
+ "configAccess": "Accéder à la configuration pour validation",
696
696
  "configValidated": "Configuration validée avec succès",
697
- "configError": "Erreur de configuration : {error}",
697
+ "configError": "Erreur de configuration : {error}",
698
698
  "validatorInit": "Initialisation du validateur I18n",
699
- "validatorInitialized": "Validateur I18n initialisé avec succès",
700
- "validatorInitError": "Erreur d'initialisation du validateur : {error}",
701
- "argsParsing": "Analyse des arguments de la ligne de commande",
702
- "argsParsed": "Arguments de la ligne de commande analysés avec succès",
703
- "argsParseError": "Erreur d'analyse des arguments : {error}",
704
- "languagesScan": "Analyse des langues disponibles",
705
- "languagesFound": "{count} langues trouvées",
706
- "languagesScanError": "Erreur lors de l'analyse des langues : {error}",
707
- "filesScan": "{count} fichiers trouvés en {language}",
708
- "filesScanError": "Erreur lors de l'analyse des fichiers : {error}",
709
- "jsonValidated": "Syntaxe JSON validée : {filePath}",
710
- "jsonValidationError": "Erreur de validation JSON : {error}",
711
- "languageValidation": "Validation de la langue : {language}",
712
- "languageValidationError": "Erreur de validation de la langue : {error}",
699
+ "validatorInitialized": "Le validateur I18n a été initialisé avec succès",
700
+ "validatorInitError": "Erreur d'initialisation du validateur : {error}",
701
+ "argsParsing": "Analyser les arguments de la ligne de commande",
702
+ "argsParsed": "Arguments de ligne de commande analysés avec succès",
703
+ "argsParseError": "Erreur d'analyse des arguments : {error}",
704
+ "languagesScan": "Scanner les langues disponibles",
705
+ "languagesFound": "Trouvé {count} langues",
706
+ "languagesScanError": "Erreur d'analyse de la langue : {error}",
707
+ "filesScan": "Trouvé {count} fichiers dans {language}",
708
+ "filesScanError": "Erreur d'analyse de fichier : {error}",
709
+ "jsonValidated": "Syntaxe JSON validée : {filePath}",
710
+ "jsonValidationError": "Erreur de validation JSON : {error}",
711
+ "languageValidation": "Langue de validation : {language}",
712
+ "languageValidationError": "Erreur de validation de langue : {error}",
713
713
  "fileDeleted": "Fichier supprimé",
714
- "runStarted": "Démarrage de la validation",
715
- "runCompleted": "Validation terminée avec succès",
716
- "runError": "Exécution de la validation échouée : {error}",
714
+ "runStarted": "Démarrage de l'exécution de validation",
715
+ "runCompleted": "L'exécution de la validation s'est terminée avec succès",
716
+ "runError": "Échec de l'exécution de validation : {error}",
717
717
  "scriptExecution": "Exécution du script",
718
718
  "validationCompleted": "Validation terminée",
719
- "validationError": "Erreur de validation : {error}",
720
- "separator": "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
721
- "languageHeader": "🌐 Langue : {language}",
722
- "validationResults": "📊 Résultats de la validation",
719
+ "validationError": "Erreur de validation : {error}",
720
+ "separator": "━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━",
721
+ "languageHeader": "🌐 Langue : {language}",
722
+ "validationResults": "📊 Résultats de validation",
723
723
  "noErrors": "✅ Aucune erreur trouvée",
724
724
  "noWarnings": "✅ Aucun avertissement trouvé",
725
- "summaryHeader": "📋 RÉCAPITULATIF GÉNÉRAL",
726
- "progressIndicator": "⏳ Traitement en cours...",
725
+ "summaryHeader": "📋 RÉSUMÉ GLOBAL",
726
+ "progressIndicator": "⏳Traitement...",
727
727
  "completedIndicator": "✅ Terminé",
728
728
  "errorIndicator": "❌ Erreur",
729
- "warningIndicator": "⚠️ Avertissement",
729
+ "warningIndicator": "⚠️ Attention",
730
730
  "infoIndicator": "ℹ️Infos",
731
731
  "sourceDirNotConfigured": "Répertoire source non configuré",
732
732
  "sourceLanguageNotConfigured": "Langue source non configurée",
733
- "translationFunctionNotInitialized": "Fonction de traduction non initialisée correctement",
734
- "sourceLanguageDirectoryNotFound": "Répertoire de la langue source introuvable",
733
+ "translationFunctionNotInitialized": "La fonction de traduction n'est pas correctement initialisée",
734
+ "sourceLanguageDirectoryNotFound": "Répertoire de langue source introuvable",
735
735
  "specifiedLanguageNotFound": "Langue spécifiée introuvable",
736
- "noJsonFilesFound": "Aucun fichier JSON trouvé dans le répertoire source : {sourceDir}",
737
- "i18nDirectoryNotFound": "Répertoire i18n introuvable : {i18nDir}",
738
- "invalidDirectoryPaths": "Chemins de répertoires invalides détectés",
739
- "invalidSampleFilePath": "Chemin de fichier d'exemple invalide",
740
- "failedToCreateSampleTranslationFile": "Échec de la création du fichier de traduction d'exemple",
741
- "invalidFilePathDetected": "Chemin de fichier invalide détecté",
742
- "failedToWriteFile": "Échec de l'écriture du fichier : {filePath}",
743
- "invalidSourceDirectory": "Répertoire source non valide : {sourceDir}",
736
+ "noJsonFilesFound": "Aucun fichier JSON trouvé dans le répertoire source : {sourceDir}",
737
+ "i18nDirectoryNotFound": "Répertoire I18n introuvable : {i18nDir}",
738
+ "invalidDirectoryPaths": "Chemins de répertoire non valides détectés",
739
+ "invalidSampleFilePath": "Chemin d'accès au fichier d'exemple non valide",
740
+ "failedToCreateSampleTranslationFile": "Échec de la création d'un exemple de fichier de traduction",
741
+ "invalidFilePathDetected": "Chemin de fichier non valide détecté",
742
+ "failedToWriteFile": "Échec de l'écriture du fichier : {filePath}",
743
+ "invalidSourceDirectory": "Répertoire source invalide : {sourceDir}",
744
744
  "invalidSourceLanguageDirectory": "Répertoire de langue source non valide : {sourceDir}"
745
745
  },
746
746
  "adminCli": {
747
- "setupPinProtectionTitle": "🔐 Configuration de la protection PIN Admin",
748
- "setupPinProtectionDescription": "Cela exigera un PIN de 4 à 6 chiffres pour les opérations administratives.",
749
- "enablePinProtectionPrompt": "Voulez-vous activer la protection PIN admin ?",
750
- "setupCancelled": "Configuration de la protection PIN admin annulée.",
751
- "enterPinPrompt": "Entrez un PIN de 4 à 6 chiffres :",
752
- "pinFormatError": "❌ Le PIN doit comporter 4 à 6 chiffres. Veuillez réessayer.",
753
- "confirmPinPrompt": "Confirmez le PIN :",
754
- "pinMismatchError": "❌ Les PIN ne correspondent pas. Veuillez réessayer.",
755
- "pinProtectionEnabledSuccess": "✅ Protection PIN admin activée avec succès !",
756
- "pinRecoveryWarning": "⚠️ Retenez votre PIN - il ne peut pas être récupéré en cas de perte.",
757
- "setupPinProtectionFailed": "❌ Échec de la configuration de la protection PIN admin.",
758
- "errorSettingUpPin": "❌ Erreur lors de la configuration du PIN admin : {message}",
759
- "authRequiredForOperation": "🔐 Authentification admin requise pour : {operation}",
760
- "invalidPinFormat": "❌ Format de PIN invalide. Le PIN doit comporter 4 à 6 chiffres.",
747
+ "setupPinProtectionTitle": "🔐 Configuration de la protection du code PIN administrateur",
748
+ "setupPinProtectionDescription": "Cela nécessitera un code PIN de 4 à 6 chiffres pour les opérations administratives.",
749
+ "enablePinProtectionPrompt": "Voulez-vous activer la protection par code PIN administrateur ?",
750
+ "setupCancelled": "Configuration de la protection par code PIN administrateur annulée.",
751
+ "enterPinPrompt": "Saisissez un code PIN de 4 à 6 chiffres :",
752
+ "pinFormatError": "❌ Le code PIN doit comporter de 4 à 6 chiffres. Veuillez réessayer.",
753
+ "confirmPinPrompt": "Confirmer le code PIN :",
754
+ "pinMismatchError": "❌ Les codes PIN ne correspondent pas. Veuillez réessayer.",
755
+ "pinProtectionEnabledSuccess": "✅ La protection par code PIN administrateur a été activée avec succès !",
756
+ "pinRecoveryWarning": "⚠️ N'oubliez pas votre code PIN : il ne peut pas être récupéré en cas de perte.",
757
+ "setupPinProtectionFailed": "❌ Échec de la configuration de la protection par code PIN administrateur.",
758
+ "errorSettingUpPin": "❌ Erreur lors de la configuration du code PIN administrateur : {message}",
759
+ "authRequiredForOperation": "🔐 Authentification administrateur requise pour : {operation}",
760
+ "invalidPinFormat": "❌ Format de code PIN invalide. Le code PIN doit comporter de 4 à 6 chiffres.",
761
761
  "authenticationSuccess": "✅ Authentification réussie !",
762
- "invalidPinAttemptsRemaining": "❌ PIN invalide. {remaining} tentatives restantes.",
763
- "authenticationFailedAccessDenied": "❌ Authentification échouée. Accès refusé.",
762
+ "invalidPinAttemptsRemaining": "❌ Code PIN invalide. {remaining} tentatives restantes.",
763
+ "authenticationFailedAccessDenied": "❌ L'authentification a échoué. Accès refusé.",
764
764
  "authenticationError": "❌ Erreur d'authentification : {message}",
765
- "pinProtectionNotEnabled": "La protection PIN admin n'est pas activée actuellement.",
766
- "disablingPinProtectionTitle": "🔓 Désactivation de la protection PIN Admin",
767
- "confirmDisablePinProtection": "Êtes-vous sûr de vouloir désactiver la protection PIN admin ?",
765
+ "pinProtectionNotEnabled": "La protection par code PIN administrateur nest actuellement pas activée.",
766
+ "disablingPinProtectionTitle": "🔓 Désactivation de la protection du code PIN administrateur",
767
+ "confirmDisablePinProtection": "Êtes-vous sûr de vouloir désactiver la protection du code PIN administrateur ?",
768
768
  "operationCancelled": "Opération annulée.",
769
- "pinProtectionDisabledSuccess": "✅ Protection PIN admin désactivée.",
770
- "disablePinProtectionFailed": "❌ Échec de la désactivation de la protection PIN admin.",
771
- "errorDisablingPinProtection": "❌ Erreur lors de la désactivation de la protection admin : {message}",
772
- "adminProtectionStatusTitle": "🔐 État de la protection admin",
773
- "statusEnabled": "Statut : ✅ ACTIVÉ",
774
- "protectionDetails": "Protection : PIN de 4 à 6 chiffres requis pour les opérations admin",
775
- "lockoutDetails": "Verrouillage : 3 échecs = verrouillage de 15 minutes",
776
- "statusDisabled": "Statut : ❌ DÉSACTIVÉ",
777
- "noAuthRequired": "Protection : Aucune authentification requise",
778
- "unprotectedRisk": "Risque : les opérations admin ne sont pas protégées",
779
- "errorCheckingAdminStatus": "❌ Erreur lors de la vérification du statut admin : {message}",
780
- "authRequired": "🔐 Authentification admin requise.",
781
- "invalidPin": "❌ PIN invalide.",
769
+ "pinProtectionDisabledSuccess": "✅ Protection par code PIN administrateur désactivée.",
770
+ "disablePinProtectionFailed": "❌ Échec de la désactivation de la protection du code PIN administrateur.",
771
+ "errorDisablingPinProtection": "❌ Erreur lors de la désactivation de la protection de l'administrateur : {message}",
772
+ "adminProtectionStatusTitle": "🔐 Statut de protection de l'administrateur",
773
+ "statusEnabled": "Statut : ✅ ACTIVÉ",
774
+ "protectionDetails": "Protection : code PIN de 4 à 6 chiffres requis pour les opérations d'administration",
775
+ "lockoutDetails": "Verrouillage : 3 tentatives infructueuses = verrouillage de 15 minutes",
776
+ "statusDisabled": "Statut : ❌ DÉSACTIVÉ",
777
+ "noAuthRequired": "Protection : Aucune authentification requise",
778
+ "unprotectedRisk": "Risque : les opérations administratives ne sont pas protégées",
779
+ "errorCheckingAdminStatus": "❌ Erreur lors de la vérification du statut d'administrateur : {message}",
780
+ "authRequired": "🔐 Authentification administrateur requise.",
781
+ "invalidPin": "❌ Code PIN invalide.",
782
782
  "authSuccess": "✅ Authentification réussie !",
783
783
  "adminPinSetupCli": "admin_pin_setup_cli",
784
784
  "adminAuthFailedCli": "admin_auth_failed_cli",
785
785
  "adminAuthDisabledCli": "admin_auth_disabled_cli",
786
- "protectedAccess": "Accès protégé : authentification admin requise pour les opérations sensibles.",
787
- "enterPin": "Entrez le PIN admin :",
786
+ "protectedAccess": "Accès protégé : authentification administrateur requise pour les opérations sensibles.",
787
+ "enterPin": "Saisissez le code PIN administrateur :",
788
788
  "accessGranted": "Accès accordé."
789
789
  },
790
790
  "adminPin": {
791
- "setup_title": "🔐 Configuration du PIN admin",
792
- "setup_separator": "============================================================",
793
- "setup_description": "Créez un PIN de 4 à 6 chiffres pour l'accès admin aux paramètres sensibles.",
794
- "required_for_title": "Ce PIN sera requis pour :",
795
- "required_for_1": "• Modifier les paramètres de sécurité",
796
- "required_for_2": "• Modifier des configurations avancées",
791
+ "setup_title": "🔐 Configuration du code PIN administrateur",
792
+ "setup_separator": "=============================================================",
793
+ "setup_description": "Créez un code PIN de 4 à 6 chiffres pour l'accès administrateur aux paramètres sensibles.",
794
+ "required_for_title": "Ce code PIN sera requis pour :",
795
+ "required_for_1": "• Modification des paramètres de sécurité",
796
+ "required_for_2": "• Modification des configurations avancées",
797
797
  "required_for_3": "• Accéder aux outils de débogage",
798
- "required_for_4": "• Réinitialiser les paramètres",
799
- "setup_note": "💡 Remarque : vous verrez des astérisques (*) pendant la saisie : ils masquent simplement les caractères.",
800
- "setup_digits_only": "Seuls les chiffres de 0 à 9 sont acceptés pour le PIN.",
801
- "invalid_pin_length": "❌ PIN invalide. Doit comporter 4 à 6 chiffres (0-9 uniquement).",
798
+ "required_for_4": "• Réinitialisation des paramètres",
799
+ "setup_note": "💡 Remarque : vous verrez des astérisques (*) au fur et à mesure que vous tapez - ce ne sont que des caractères de masquage.",
800
+ "setup_digits_only": "Seuls les chiffres 0 à 9 sont acceptés comme chiffres du code PIN.",
801
+ "invalid_pin_length": "❌ Code PIN invalide. Doit contenir de 4 à 6 chiffres (chiffres de 0 à 9 uniquement).",
802
802
  "invalid_pin_example": "Exemple : 1234 ou 567890",
803
- "pins_do_not_match": "❌ Les PIN ne correspondent pas.",
804
- "setup_success": "✅ Le PIN admin a été configuré avec succès !",
805
- "setup_warning": "⚠️ Conservez ce PIN en lieu sûr. Il ne peut pas être récupéré en cas de perte.",
806
- "setup_error": "❌ Erreur lors de la configuration du PIN :",
807
- "session_expired": "⏰ Session admin expirée en raison de l'inactivité.",
808
- "no_pin_set_setting_up": "⚠️ Aucun PIN admin défini. Configuration du PIN en cours…",
809
- "no_pin_configured_access_denied": "⚠️ Aucun PIN admin configuré. Accès refusé.",
810
- "use_admin_settings_to_set_pin": "💡 Utilisez les paramètres admin pour configurer un PIN d'abord.",
811
- "locked_out": "🔒 Accès admin verrouillé en raison de trop nombreuses tentatives infructueuses.",
803
+ "pins_do_not_match": "❌ Les codes PIN ne correspondent pas.",
804
+ "setup_success": "✅ Le code PIN administrateur a été défini avec succès !",
805
+ "setup_warning": "⚠️ Conservez ce code PIN en sécurité. Il ne peut pas être récupéré en cas de perte.",
806
+ "setup_error": "❌ Erreur lors de la configuration du code PIN :",
807
+ "session_expired": "⏰ La session d'administration a expiré pour cause d'inactivité.",
808
+ "no_pin_set_setting_up": "⚠️ Aucun code PIN administrateur défini. Configuration du code PIN...",
809
+ "no_pin_configured_access_denied": "⚠️ Aucun code PIN administrateur configuré. Accès refusé.",
810
+ "use_admin_settings_to_set_pin": "💡 Utilisez d'abord les paramètres d'administration pour configurer un code PIN.",
811
+ "locked_out": "🔒 L'accès administrateur est verrouillé en raison d'un trop grand nombre de tentatives infructueuses.",
812
812
  "wait_before_retry": "Veuillez attendre 5 minutes avant de réessayer.",
813
- "access_granted": "✅ Accès accordé.",
814
- "incorrect_pin": "❌ PIN incorrect. {attempts} tentatives restantes.",
815
- "verify_pin_error": "❌ Erreur lors de la vérification du PIN :",
816
- "already_configured": "✅ Le PIN admin est déjà configuré.",
817
- "optional_setup_title": "🔐 Configuration facultative du PIN admin",
818
- "optional_setup_description": "La protection PIN admin ajoute de la sécurité pour des opérations sensibles telles que :",
819
- "setup_prompt": "Souhaitez-vous configurer un PIN admin ? (y/N) :",
820
- "skipping_setup": "⏭️ Configuration du PIN facultative. Vous pouvez le configurer plus tard dans les paramètres.",
821
- "setup_prompt_error": "❌ Erreur lors de l'invite de configuration du PIN :",
822
- "protectedAccess": "Accès protégé : authentification admin requise pour les opérations sensibles.",
823
- "enterPin": "Entrez le PIN admin :",
813
+ "access_granted": "✅ Accès administrateur accordé.",
814
+ "incorrect_pin": "❌ Code PIN incorrect. {attempts} tentatives restantes.",
815
+ "verify_pin_error": "❌ Erreur lors de la vérification du code PIN :",
816
+ "already_configured": "✅ Le code PIN administrateur est déjà configuré.",
817
+ "optional_setup_title": "🔐 Configuration du code PIN administrateur (facultatif)",
818
+ "optional_setup_description": "La protection par code PIN administrateur ajoute de la sécurité pour les opérations sensibles telles que :",
819
+ "setup_prompt": "Souhaitez-vous configurer un code PIN administrateur ? (o/N) :",
820
+ "skipping_setup": "⏭️ Ignorer la configuration du code PIN administrateur. Vous pourrez le configurer plus tard dans les paramètres.",
821
+ "setup_prompt_error": "❌ Erreur lors de l'invite de configuration du code PIN :",
822
+ "protectedAccess": "Accès protégé : authentification administrateur requise pour les opérations sensibles.",
823
+ "enterPin": "Saisissez le code PIN administrateur :",
824
824
  "accessGranted": "Accès accordé.",
825
- "invalidPin": "❌ PIN invalide. Veuillez réessayer.",
826
- "weak_pin_warning": "⚠️ AVERTISSEMENT : Ce PIN semble être faible ou courant.",
827
- "weak_pin_suggestion": "💡 Envisagez d'utiliser un PIN plus robuste avec des chiffres variés.",
828
- "use_anyway_prompt": "Tapez \"yes\" pour l'utiliser quand même, ou appuyez sur Entrée pour choisir un autre PIN :",
829
- "enter_new_pin": "Entrez un nouveau PIN admin (4-6 chiffres) :",
830
- "confirm_pin": "Confirmez le PIN admin :",
825
+ "invalidPin": "❌ Code PIN invalide. Veuillez réessayer.",
826
+ "weak_pin_warning": "⚠️ AVERTISSEMENT : ce code PIN semble faible ou courant.",
827
+ "weak_pin_suggestion": "💡 Pensez à utiliser un code PIN plus fort avec des chiffres variés.",
828
+ "use_anyway_prompt": "Tapez « oui » pour l'utiliser quand même, ou appuyez sur Entrée pour choisir un autre code PIN :",
829
+ "enter_new_pin": "Entrez le nouveau code PIN administrateur (4 à 6 chiffres) :",
830
+ "confirm_pin": "Confirmer le code PIN d'administrateur :",
831
831
  "not_set": "Non défini",
832
832
  "pin_display_mask": "####"
833
833
  },
834
834
  "debug": {
835
835
  "title": "🔧 Outils de débogage",
836
- "separator": "============================================================",
837
- "mainDebuggerSystemDiagnostics": "1. Diagnostics système",
838
- "_consoleTranslationsCheck": "// 2. Vérification des traductions console",
836
+ "separator": "=============================================================",
837
+ "mainDebuggerSystemDiagnostics": "1. Diagnostic du système",
838
+ "_consoleTranslationsCheck": "// 2. Vérification des traductions de la console",
839
839
  "_exportMissingKeys": "// 3. Exporter les clés de traduction manquantes",
840
- "_replaceHardcodedConsole": "// 4. Remplacer les chaînes console en dur",
841
- "_consoleKeyChecker": "// 5. Vérificateur de clés console",
840
+ "_replaceHardcodedConsole": "// 4. Remplacer les chaînes de console codées en dur",
841
+ "_consoleKeyChecker": "// 5. Vérificateur de clé de console",
842
842
  "debugLogs": "2. Journaux de débogage",
843
843
  "backToMainMenu": "0. Retour au menu principal",
844
- "selectOption": "Sélectionnez un outil de débogage :",
845
- "runningDebugTool": "Exécution de {displayName}",
846
- "debugToolNotFound": "❌ Outil de débogage introuvable : {toolName}",
847
- "errorRunningDebugTool": "Erreur lors de lexécution de {displayName} : {errorMessage}",
844
+ "selectOption": "Sélectionnez un outil de débogage :",
845
+ "runningDebugTool": "En cours d'exécution {displayName}...",
846
+ "debugToolNotFound": "❌ Outil de débogage introuvable : {toolName}",
847
+ "errorRunningDebugTool": "Erreur lors de l'exécution de l'outil de débogage '{displayName}': {error}",
848
848
  "recentDebugLogs": "📄 Journaux de débogage récents",
849
849
  "noDebugLogsFound": "❌ Aucun journal de débogage trouvé.",
850
850
  "debugLogsDirectoryNotFound": "❌ Répertoire des journaux de débogage introuvable.",
851
- "selectLogPrompt": "Sélectionnez le fichier journal à afficher (1-{count}) :",
852
- "invalidChoiceSelectRange": "Choix invalide. Veuillez sélectionner dans la plage disponible.",
853
- "contentOf": "📄 Contenu de {filename} :",
854
- "pressEnterToContinue": "Appuyez sur Entrée pour continuer"
851
+ "selectLogPrompt": "Sélectionnez le fichier journal à afficher (1-{count}):",
852
+ "invalidChoiceSelectRange": "Choix invalide. Veuillez sélectionner parmi la gamme disponible.",
853
+ "contentOf": "📄 Contenu de {filename}:",
854
+ "pressEnterToContinue": "Appuyez sur Entrée pour continuer..."
855
855
  },
856
856
  "detect_language_mismatches": {
857
- "tool_title": "🔍 Outil de détection des incohérences linguistiques",
857
+ "tool_title": "🔍 Outil de détection des incompatibilités linguistiques",
858
858
  "separator": "=====================================",
859
- "analyzing_file": "📄 Analyse de {language}.json",
860
- "error_analyzing_file": "❌ Erreur lors de l’analyse de {filename} : {errorMessage}",
861
- "results_title": "📊 RÉSULTATS DE DÉTECTION DES INCOHÉRENCES",
859
+ "analyzing_file": "📄 Analyse {language}.json...",
860
+ "error_analyzing_file": "❌ Analyse des erreurs {filename}: {errorMessage}",
861
+ "results_title": "📊 RÉSULTATS DE DÉTECTION DES INADAPTATIONS DE LANGUE",
862
862
  "results_separator": "========================================",
863
- "summary_title": "📋 RÉCAPITULATIF :",
864
- "total_files_analyzed": "Fichiers analysés au total : {totalFiles}",
865
- "files_with_mismatches": "Fichiers avec incohérences : {filesWithMismatches}",
866
- "total_mismatches_found": "Incohérences totales trouvées : {totalMismatches}",
867
- "no_mismatches_found": "✅ Aucune incohérence linguistique trouvée ! Toutes les traductions semblent correctes.",
868
- "detailed_results_title": "🔍 RÉSULTATS DÉTAILLÉS :",
863
+ "summary_title": "📋 RÉSUMÉ :",
864
+ "total_files_analyzed": "Total des dossiers analysés : {totalFiles}",
865
+ "files_with_mismatches": "Fichiers avec des discordances : {filesWithMismatches}",
866
+ "total_mismatches_found": "Total des incohérences trouvées : {totalMismatches}",
867
+ "no_mismatches_found": "✅ Aucune incompatibilité de langue trouvée ! Toutes les traductions semblent être dans leurs langues correctes.",
868
+ "detailed_results_title": "🔍 RÉSULTATS DÉTAILLÉS :",
869
869
  "file_mismatch_header": "📄 {filename} ({language})",
870
- "mismatches_count": "Incohérences trouvées : {count}",
871
- "mismatch_details": "{index}. Clé : {key}",
872
- "mismatch_value": "Valeur : « {value} »",
873
- "mismatch_issue": "Problème : {description}",
874
- "recommendations_title": "💡 RECOMMANDATIONS :",
875
- "recommendation_1": "1. Vérifiez et traduisez toutes les entrées marquées [TRANSLATE]",
876
- "recommendation_2": "2. Remplacez les préfixes de langue (ex. [DE], [FR]) par de vraies traductions",
877
- "recommendation_3": "3. Traduisez le texte en anglais vers la langue cible appropriée",
878
- "recommendation_4": "4. Utilisez des équivalents natifs pour tout texte destiné à l’utilisateur",
879
- "recommendation_5": "5. Relancez cet outil après corrections pour vérifier les fixes",
880
- "detailed_report_saved": "📄 Rapport détaillé enregistré : {reportPath}",
881
- "error_saving_report": "❌ Erreur lors de la sauvegarde du rapport : {errorMessage}",
882
- "auto_fix_mode": "🔧 Mode correction automatique {dryRun}",
870
+ "mismatches_count": "Trouvé {count} inadéquation(s):",
871
+ "mismatch_details": "{index}. Clé: {key}",
872
+ "mismatch_value": "Valeur: \"{value}\"",
873
+ "mismatch_issue": "Problème: {description}",
874
+ "recommendations_title": "💡 RECOMMANDATIONS :",
875
+ "recommendation_1": "1. Vérifiez et traduisez toutes les entrées marquées de [TRANSLATE]",
876
+ "recommendation_2": "2. Remplacez les préfixes de langue (par exemple, [DE], [FR]) par des traductions appropriées",
877
+ "recommendation_3": "3. Traduire le texte anglais dans la langue cible appropriée",
878
+ "recommendation_4": "4. Utilisez des équivalents en langue maternelle pour tous les textes destinés aux utilisateurs",
879
+ "recommendation_5": "5. Exécutez à nouveau cet outil après avoir apporté des corrections pour vérifier les correctifs",
880
+ "detailed_report_saved": "📄 Rapport détaillé enregistré dans : {reportPath}",
881
+ "error_saving_report": "❌ Rapport d'erreur lors de l'enregistrement : {errorMessage}",
882
+ "auto_fix_mode": "🔧 Mode de réparation automatique {dryRun}",
883
883
  "auto_fix_separator": "=====================================",
884
- "fixed_file": "✅ Fichier corrigé : {filename}",
885
- "auto_fix_summary_title": "📊 Récapitulatif des corrections :",
886
- "total_fixes_applied": "Nombre total de corrections appliquées : {count}",
887
- "preview_fixes_title": "🔍 Aperçu des corrections :",
888
- "fix_details": "{file} : {key} Ancien : « {old} » Nouveau : « {new} »",
889
- "more_fixes": " et {count} corrections supplémentaires",
890
- "run_with_apply_fixes": "💡 Exécutez avec --apply pour appliquer ces corrections",
891
- "error_general": "❌ Erreur :",
892
- "mainDebuggerSystemDiagnostics": "Diagnostics système principal",
884
+ "fixed_file": "✅ Corrigé {filename}",
885
+ "auto_fix_summary_title": "📊 Résumé de la correction automatique :",
886
+ "total_fixes_applied": "Nombre total de correctifs appliqués : {count}",
887
+ "preview_fixes_title": "🔍 Aperçu des correctifs :",
888
+ "fix_details": "{file}: {key} Vieux: \"{old}\" Nouveau: \"{new}\"",
889
+ "more_fixes": "... et {count} plus de correctifs",
890
+ "run_with_apply_fixes": "💡 Exécutez avec --apply pour appliquer ces correctifs",
891
+ "error_general": "❌ Erreur :",
892
+ "mainDebuggerSystemDiagnostics": "Débogueur principal/Diagnostics système",
893
893
  "exportMissingKeys": "Exporter les clés manquantes",
894
- "replaceHardcodedConsole": "Remplacer console en dur",
895
- "consoleKeyChecker": "Vérificateur de clés console",
894
+ "replaceHardcodedConsole": "Remplacer la console codée en dur",
895
+ "consoleKeyChecker": "Vérificateur de clé de console",
896
896
  "debugLogs": "Journaux de débogage",
897
897
  "backToMainMenu": "Retour au menu principal",
898
- "invalidChoiceSelectRange": "❌ Choix invalide. Sélectionnez un nombre du menu affiché.",
899
- "runningDebugTool": "Exécution de loutil de débogage : {displayName}",
900
- "debugToolNotFound": "Outil de débogage « {toolName} » introuvable.",
898
+ "invalidChoiceSelectRange": "❌ Choix invalide. Veuillez sélectionner un numéro dans la plage affichée.",
899
+ "runningDebugTool": "Exécution de l'outil de débogage : {displayName}",
900
+ "debugToolNotFound": "Outil de débogage '{toolName}' introuvable.",
901
901
  "recentDebugLogs": "Journaux de débogage récents",
902
902
  "noDebugLogsFound": "Aucun journal de débogage trouvé.",
903
- "logEntry": "Entrée journal : {timestamp} {message}",
903
+ "logEntry": "Entrée de journal : {timestamp} - {message}",
904
904
  "debugLogsDirectoryNotFound": "Répertoire des journaux de débogage introuvable."
905
905
  },
906
906
  "help": {
907
907
  "title": "📊 AIDE À LA GESTION I18NTK",
908
- "usage": "Utilisation : node i18ntk-manage.js [options]",
909
- "interactiveMode": "💡 Utilisez : node i18ntk-manage.js --command=<commande> pour exécuter directement",
910
- "showHelp": "📖 Utilisez : node i18ntk-manage.js --help pour les commandes disponibles",
911
- "availableCommands": "📖 Commandes disponibles :",
908
+ "usage": "Utilisation : nœud main/manage/index.js [options]",
909
+ "interactiveMode": "💡 Utilisation : node main/manage/index.js --command=<command> pour exécution directe",
910
+ "showHelp": "📖 Utiliser : node main/manage/index.js --help pour les commandes disponibles",
911
+ "availableCommands": "📖 Commandes disponibles :",
912
912
  "initProject": "🚀 Initialiser de nouvelles langues",
913
913
  "analyzeTranslations": "🔍 Analyser les traductions",
914
914
  "validateTranslations": "✅ Valider les traductions",
915
- "checkUsage": "📊 Vérifier lutilisation des clés",
916
- "initCommand": "init - Initialiser de nouvelles langues",
917
- "analyzeCommand": "analyze - Analyser les traductions",
918
- "validateCommand": "validate - Valider les traductions",
919
- "usageCommand": "usage - Vérifier lutilisation des clés",
920
- "sizingCommand": "sizing - Analyser le dimensionnement",
921
- "completeCommand": "complete - Compléter les traductions (100 % de couverture)",
922
- "summaryCommand": "summary - Afficher le statut du projet",
923
- "debugCommand": "debug - Déboguer les problèmes de traduction",
915
+ "checkUsage": "📊 Vérifiez l'utilisation de la clé",
916
+ "initCommand": "init - Initialiser de nouvelles langues",
917
+ "analyzeCommand": "analyser - Analyser les traductions",
918
+ "validateCommand": "validate - Valider les traductions",
919
+ "usageCommand": "utilisation - Vérifier l'utilisation des clés",
920
+ "sizingCommand": "dimensionnement - Analyser le dimensionnement",
921
+ "completeCommand": "complet - Traductions complètes (couverture à 100 %)",
922
+ "summaryCommand": "résumé - Afficher l'état du projet",
923
+ "debugCommand": "debug - Problèmes de traduction de débogage",
924
924
  "scannerCommand": "scanner - Rechercher des clés",
925
- "translateCommand": "translate - Traduction automatique (Bêta)",
925
+ "translateCommand": "traduire - Traduire automatiquement les fichiers de paramètres régionaux (bêta)",
926
926
  "menu": {
927
927
  "pressEnterToContinue": "Appuyez sur Entrée pour continuer...",
928
- "title": "🌐 MENU DE GESTION I18NTK",
929
- "description": "Menu interactif pour la gestion de linternationalisation",
928
+ "title": "🌐MENU DE GESTION I18NTK",
929
+ "description": "Menu interactif pour gérer l'internationalisation",
930
930
  "exit": "🚪 Quitter"
931
931
  },
932
932
  "commands": {
933
- "init": "init - Initialiser de nouvelles langues",
934
- "analyze": "analyze - Analyser les traductions",
935
- "validate": "validate - Valider les traductions",
936
- "usage": "usage - Vérifier lutilisation des clés",
937
- "sizing": "sizing - Analyser le dimensionnement",
938
- "complete": "complete - Compléter les traductions (100 % de couverture)",
939
- "summary": "summary - Afficher le statut du projet",
940
- "debug": "debug - Déboguer les problèmes de traduction"
933
+ "init": "init - Initialiser de nouvelles langues",
934
+ "analyze": "analyser - Analyser les traductions",
935
+ "validate": "validate - Valider les traductions",
936
+ "usage": "utilisation - Vérifier l'utilisation des clés",
937
+ "sizing": "dimensionnement - Analyser le dimensionnement",
938
+ "complete": "complet - Traductions complètes (couverture à 100 %)",
939
+ "summary": "résumé - Afficher l'état du projet",
940
+ "debug": "debug - Problèmes de traduction de débogage"
941
941
  },
942
942
  "options": {
943
- "sourceDir": "--source-dir <dir> Répertoire source à analyser",
944
- "output": "--output <file> Fichier de sortie pour le rapport",
945
- "verbose": "--verbose, -v Afficher les détails",
946
- "keepReports": "--keep-reports Conserver les rapports existants",
947
- "deleteReports": "--delete-reports Supprimer les rapports existants",
948
- "help": "--help, -h Afficher cette aide"
943
+ "sourceDir": "--rép-source <dir> Répertoire source à analyser",
944
+ "output": "--sortir <file> Fichier de sortie pour le rapport",
945
+ "verbose": "--verbose, -v Afficher des informations détaillées",
946
+ "keepReports": "--keep-reports Conserver les rapports existants",
947
+ "deleteReports": "--delete-reports Supprimer les rapports existants",
948
+ "help": "--help, -h Afficher cette aide"
949
949
  },
950
950
  "examples": {
951
- "title": "Exemples :",
952
- "example1": "node i18ntk-manage.js",
953
- "example2": "node i18ntk-manage.js --source-dir ./locales",
954
- "example3": "node i18ntk-manage.js --output summary-report.txt",
955
- "example4": "node i18ntk-manage.js --verbose",
956
- "example5": "node i18ntk-manage.js --source-dir ./locales --output report.json"
951
+ "title": "Exemples :",
952
+ "example1": "nœud i18ntk-manage.js",
953
+ "example2": "nœud i18ntk-manage.js --source-dir ./locales",
954
+ "example3": "nœud i18ntk-manage.js --output summary-report.txt",
955
+ "example4": "nœud i18ntk-manage.js --verbose",
956
+ "example5": "nœud i18ntk-manage.js --source-dir ./locales --output report.json"
957
957
  },
958
958
  "features": {
959
959
  "initProject": "🚀 Initialiser de nouvelles langues",
960
960
  "analyzeTranslations": "🔍 Analyser les traductions",
961
961
  "validateTranslations": "✅ Valider les traductions",
962
- "checkUsage": "📊 Vérifier lutilisation des clés",
963
- "completeTranslations": "🎯 Compléter les traductions (100 % de couverture)",
962
+ "checkUsage": "📊 Vérifiez l'utilisation de la clé",
963
+ "completeTranslations": "🎯 Traductions complètes (couverture à 100%)",
964
964
  "showSizing": "📏 Analyser le dimensionnement",
965
- "runWorkflow": "🔄 Exécuter le workflow complet",
966
- "showStatus": "📋 Afficher le statut du projet",
967
- "deleteReports": "🗑️ Supprimer tous les rapports",
968
- "changeLanguage": "🌍 Changer la langue de linterface",
969
- "settings": "⚙️ Paramètres",
965
+ "runWorkflow": "🔄 Exécuter un flux de travail complet",
966
+ "showStatus": "📋 Afficher l'état du projet",
967
+ "deleteReports": "🗑️ Supprimer tous les rapports",
968
+ "changeLanguage": "🌍 Changer la langue de l'interface utilisateur",
969
+ "settings": "⚙️ Paramètres",
970
970
  "showHelp": "❓ Aide",
971
971
  "debugTools": "🔧 Outils de débogage"
972
972
  },
973
973
  "messages": {
974
- "selectOption": "Sélectionnez une option :",
975
- "invalidOption": "Option invalide. Veuillez réessayer.",
976
- "operationCompleted": "✅ Opération terminée avec succès !",
977
- "pressEnter": "Appuyez sur Entrée pour continuer",
974
+ "selectOption": "Sélectionnez une option :",
975
+ "invalidOption": "Option invalide. Veuillez réessayer.",
976
+ "operationCompleted": "✅Opération terminée avec succès !",
977
+ "pressEnter": "Appuyez sur Entrée pour continuer...",
978
978
  "goodbye": "👋 Au revoir !",
979
- "unknownCommand": "Commande inconnue : {command}",
980
- "nonInteractive": "⚠️ Mode non interactif détecté. Menu affiché à titre indicatif."
979
+ "unknownCommand": "Commande inconnue : {command}",
980
+ "nonInteractive": "⚠️ Mode non interactif détecté. Menu affiché à titre de référence uniquement."
981
981
  },
982
982
  "i18n_helper": {
983
- "translation_file_not_found": "Fichier de traduction introuvable : {translationFile}",
984
- "error_loading_translations": "Erreur de chargement des traductions : {errorMessage}",
985
- "translation_not_found": "Traduction introuvable pour la clé : {key}",
986
- "translation_key_not_string": "La clé de traduction ne renvoie pas une chaîne : {key}",
987
- "error_reading_locales_directory": "Erreur de lecture du répertoire locales : {errorMessage}"
983
+ "translation_file_not_found": "Fichier de traduction introuvable : {translationFile}",
984
+ "error_loading_translations": "Erreur lors du chargement des traductions : {errorMessage}",
985
+ "translation_not_found": "Traduction non trouvée pour clé : {key}",
986
+ "translation_key_not_string": "La clé de traduction ne se résout pas en chaîne : {key}",
987
+ "error_reading_locales_directory": "Erreur de lecture du répertoire locales : {errorMessage}"
988
988
  }
989
989
  },
990
990
  "init": {
991
- "initializationTitle": "🚀 Boîte à outils de gestion i18n Initialisation du projet",
991
+ "initializationTitle": "🚀 Boîte à outils de gestion i18n - Initialisation du projet",
992
992
  "initializationCancelled": "🚫 Initialisation annulée par l'utilisateur.",
993
- "sourceDirectoryLabel": "📁 Répertoire source : {dir}",
993
+ "sourceDirectoryLabel": "📁 Répertoire des sources : {dir}",
994
994
  "requiredTitle": "Initialisation requise",
995
995
  "requiredBody": "Ce projet doit être initialisé avant d'exécuter cette commande.",
996
- "promptRunNow": "Voulez-vous exécuter l'initialisation maintenant ? (o/N):",
997
- "sourceLanguageLabel": "🌍 Langue source : {language}",
998
- "detectedI18nFrameworks": "🔍 Framework(s) i18n détecté(s) : {frameworks}",
999
- "pinMustBe4Digits": "🔐 Le PIN doit contenir 4 chiffres.",
1000
- "existingDirectoriesFound": "📁 Répertoires de traduction existants trouvés :",
1001
- "useExistingDirectoryPrompt": "Voulez-vous utiliser le répertoire existant ? (y/n)",
1002
- "selectDirectoryPrompt": "Sélectionnez un répertoire en entrant le numéro (ou choisissez 'Créer un nouveau répertoire'):",
1003
- "enterNewDirectoryName": "📝 Entrez le nom du nouveau répertoire :",
1004
- "createdNewDirectory": "✅ Créé nouveau répertoire : {dir}",
1005
- "directoryAlreadyExists": "⚠️ Répertoire existe déjà : {dir}",
1006
- "invalidDirectoryName": "❌ Nom de répertoire invalide fourni.",
1007
- "usingExistingDirectory": "Utilisation du répertoire existant : {dir}",
1008
- "adminPinSetupOptional": "🔐 Configuration du code PIN administrateur optionnelle (recommandée pour la sécurité)",
1009
- "adminPinSeparator": "------------------------------",
1010
- "adminPinDescription1": "Code PIN administrateur : nombre à 4 chiffres pour un accès sécurisé",
996
+ "promptRunNow": "Souhaitez-vous lancer l'initialisation maintenant ? (o/N) :",
997
+ "sourceLanguageLabel": "🌍 Langue source : {language}",
998
+ "detectedI18nFrameworks": "🔍 Framework(s) i18n détecté(s) : {frameworks}",
999
+ "pinMustBe4Digits": "🔐 Le code PIN doit être composé de 4 chiffres.",
1000
+ "existingDirectoriesFound": "📁 Répertoires de traduction existants trouvés :",
1001
+ "useExistingDirectoryPrompt": "Voulez-vous utiliser le répertoire existant ? (o/n)",
1002
+ "selectDirectoryPrompt": "Sélectionnez un répertoire en saisissant le numéro (ou choisissez 'Créer un nouveau répertoire')",
1003
+ "enterNewDirectoryName": "Entrez le nom de votre nouveau répertoire de traduction",
1004
+ "createdNewDirectory": "✅ Création d'un nouveau répertoire : {dir}",
1005
+ "directoryAlreadyExists": "⚠️ L'annuaire existe déjà : {dir}",
1006
+ "invalidDirectoryName": "❌ Nom de répertoire fourni non valide.",
1007
+ "usingExistingDirectory": "Utilisation du répertoire existant : {dir}",
1008
+ "adminPinSetupOptional": "🔐 Configuration du code PIN administrateur en option (recommandé pour la sécurité)",
1009
+ "adminPinSeparator": "-------------------------------",
1010
+ "adminPinDescription1": "PIN administrateur : numéro à 4 chiffres pour un accès sécurisé",
1011
1011
  "adminPinDescription2": "Laissez vide pour ignorer la configuration du code PIN",
1012
- "adminPinDescription3": "Si vous définissez un code PIN, il sera requis pour toutes les actions sécurisées futures.",
1013
- "adminPinDescription4": "Chiffrement AES-256-GCM utilisé pour le stockage sécurisé du code PIN.",
1014
- "adminPinSetupPrompt": "Entrez le code PIN administrateur (4 chiffres) ou laissez vide pour ignorer :",
1015
- "skippingAdminPinSetup": "🔐 Configuration du code PIN administrateur ignorée...",
1012
+ "adminPinDescription3": "Si vous définissez un code PIN, il sera requis pour toutes les futures actions sécurisées.",
1013
+ "adminPinDescription4": "Cryptage AES-256-GCM utilisé pour le stockage sécurisé du code PIN.",
1014
+ "adminPinSetupPrompt": "Saisissez le code PIN administrateur (4 chiffres) ou laissez ce champ vide pour ignorer :",
1015
+ "skippingAdminPinSetup": "Ignorer la configuration du code PIN administrateur...",
1016
1016
  "settingUpAdminPin": "🔐 Configuration du code PIN administrateur...",
1017
- "enterAdminPin": "Entrez le code PIN administrateur :",
1018
- "confirmAdminPin": "Confirmez le code PIN administrateur :",
1017
+ "enterAdminPin": "Entrez le code PIN administrateur :",
1018
+ "confirmAdminPin": "Confirmer le code PIN administrateur :",
1019
1019
  "pinMismatch": "Les codes PIN ne correspondent pas. Veuillez réessayer.",
1020
- "adminPinSetupSuccess": "🔐 Configuration du code PIN administrateur réussie !",
1021
- "adminPinSetupFailure": "🔐 Échec de la configuration du code PIN administrateur. Veuillez réessayer.",
1022
- "adminProtectionEnabled": "🔐 Protection administrateur activée. Toutes les actions requièrent une authentification avec PIN.",
1023
- "adminProtectionDisabled": "🔐 Protection administrateur désactivée. Toutes les actions sont maintenant disponibles sans PIN.",
1024
- "autoDetectedI18nDirectory": "📂 Répertoire i18n auto-détecté : {directory}",
1025
- "initializingProject": "⚙️ Initialisation de la configuration du projet",
1026
- "createdSampleTranslationFile": "✅ Fichier de traduction d’exemple créé : {file}",
1027
- "languageSelectionTitle": "🌐 Configuration des langues",
1020
+ "adminPinSetupSuccess": "🔐 Configuration du code PIN administrateur réussie !",
1021
+ "adminPinSetupFailure": "🔐 La configuration du code PIN administrateur a échoué. Veuillez réessayer.",
1022
+ "adminProtectionEnabled": "🔐 Protection de l'administrateur activée. Toutes les actions nécessitent une authentification par code PIN.",
1023
+ "adminProtectionDisabled": "🔐 Protection de l'administrateur désactivée. Toutes les actions sont désormais disponibles sans code PIN.",
1024
+ "autoDetectedI18nDirectory": "Répertoire i18n détecté automatiquement : {directory}",
1025
+ "initializingProject": "⚙️ Initialisation de la configuration du projet...",
1026
+ "createdSampleTranslationFile": "✅ Exemple de fichier de traduction créé : {file}",
1027
+ "languageSelectionTitle": "🌐 Configuration de la langue",
1028
1028
  "available": "Disponible",
1029
- "defaultLanguages": "📝 Langues par défaut : {languages}",
1030
- "enterLanguageCodes": "🎯 Saisissez les codes des langues cibles (séparés par des virgules, ex. de, es, fr, ru) :",
1029
+ "defaultLanguages": "📝 Langues par défaut : {languages}",
1030
+ "enterLanguageCodes": "🎯 Saisissez les codes de la langue cible (séparés par des virgules, par exemple de, es, fr, ru) :",
1031
1031
  "targetLanguages": "🌍 Langues cibles",
1032
- "foundSourceFiles": "📄 {count} fichiers source trouvés pour analyse",
1033
- "processingLanguage": "🔄 Traitement de la langue : {language}",
1034
- "fileProcessingResult": "✅ {file} traité : {translated}/{total} clés ({percentage} %)",
1035
- "overallProgress": "📊 Progression globale : {translated}/{total} clés traitées ({percentage} %)",
1036
- "initializationSummaryTitle": "📋 Récapitulatif de linitialisation",
1037
- "languageSummary": "{icon} {name} ({code}) : {percentage} % complété",
1038
- "languageFiles": "📄 Fichiers : {count}",
1039
- "languageKeys": "🔤 Clés : {translated}/{total}",
1040
- "languageMissing": "⚠️ Manquantes : {count}",
1041
- "initializationCompletedSuccessfully": "🎉 Initialisation du projet terminée avec succès !",
1042
- "nextStepsTitle": "🚀 Étapes suivantes",
1032
+ "foundSourceFiles": "📄 Trouvé {count} fichiers sources à analyser",
1033
+ "processingLanguage": "🔄 Langage de traitement : {language}",
1034
+ "fileProcessingResult": "✅ Traité {file}: {translated}/{total} clés ({percentage}%)",
1035
+ "overallProgress": "📊 Progrès global : {translated}/{total} clés traitées ({percentage}%)",
1036
+ "initializationSummaryTitle": "📋 Résumé de l'initialisation",
1037
+ "languageSummary": "{icon} {name} ({code}): {percentage}% complet",
1038
+ "languageFiles": "📄 Fichiers : {count}",
1039
+ "languageKeys": "🔤 Clés : {translated}/{total}",
1040
+ "languageMissing": "⚠️ Manquant : {count}",
1041
+ "initializationCompletedSuccessfully": "🎉 Initialisation du projet terminée avec succès !",
1042
+ "nextStepsTitle": "🚀 Prochaines étapes",
1043
1043
  "nextStep1": "1. Vérifiez les fichiers de traduction générés dans votre répertoire locales/",
1044
- "nextStep2": "2. Ajoutez les traductions pour chaque langue cible",
1045
- "nextStep3": "3. Exécutez à nouveau « npm run i18ntk » pour valider les traductions",
1046
- "detectedFrameworks": "Frameworks i18n détectés : {frameworks}",
1044
+ "nextStep2": "2. Ajoutez des traductions pour chaque langue cible",
1045
+ "nextStep3": "3. Exécutez à nouveau 'npm run i18ntk' pour valider les traductions",
1046
+ "detectedFrameworks": " Framework(s) i18n détecté(s) : {frameworks}",
1047
1047
  "setup": {
1048
- "title": "Configuration",
1048
+ "title": "Installation",
1049
1049
  "question": "Question de configuration",
1050
1050
  "opt_single": "Fichier unique",
1051
1051
  "opt_modular": "Modulaire",
1052
1052
  "opt_existing": "Existant",
1053
- "choice_prompt": "Choisissez une option :",
1053
+ "choice_prompt": "Choisissez une option :",
1054
1054
  "opt_confirm": "Confirmer",
1055
1055
  "opt_cancel": "Annuler",
1056
- "apply_all_prompt": "Appliquer cette structure à toutes les langues ? (o/N) :",
1057
- "per_language_intro": "Vous avez choisi de configurer les langues individuellement. Voici les langues disponibles :",
1058
- "available_languages": "Langues disponibles : {languages}",
1059
- "include_prompt": "Entrez les codes de langue séparés par des virgules (par exemple 'de,fr,es') :"
1056
+ "apply_all_prompt": "Appliquer cette structure à toutes les langues ? (o/N) :",
1057
+ "per_language_intro": "Vous avez choisi de configurer les langues individuellement. Voici les langues disponibles :",
1058
+ "available_languages": "Langues disponibles : {languages}",
1059
+ "include_prompt": "Saisissez les codes de langue à inclure, séparés par des virgules (par exemple, « de,fr,es ») :"
1060
1060
  },
1061
1061
  "warnings": {
1062
- "noPackageJson": "Aucun package.json trouvé. Impossible de détecter le framework i18n."
1062
+ "noPackageJson": "Aucun package.json trouvé. Impossible de détecter automatiquement le framework i18n."
1063
1063
  },
1064
- "errorsPackageJsonRead": "Erreur de lecture de package.json : {errorMessage}",
1065
- "errorsNoFramework": "Aucun framework i18n détecté. Veuillez en installer un ou en spécifier un manuellement.",
1064
+ "errorsPackageJsonRead": "Erreur de lecture de package.json : {error}",
1065
+ "errorsNoFramework": "Aucun framework i18n détecté. Veuillez en installer un ou le spécifier manuellement.",
1066
1066
  "suggestions": {
1067
- "noFramework": "Aucun framework i18n détecté. Envisagez d'utiliser l'un des suivants :",
1068
- "installFramework": "Pour installer un framework, exécutez : npm install <nom-du-paquet>"
1067
+ "noFramework": "Aucun framework i18n détecté. Pensez à utiliser l'un des éléments suivants :",
1068
+ "installFramework": "Pour installer un framework, exécutez : npm install <package-name>"
1069
1069
  },
1070
1070
  "frameworks": {
1071
1071
  "react": "- Réagir i18next (react-i18next)",
1072
1072
  "vue": "-Vue i18n (vue-i18n)",
1073
1073
  "i18next": "- i18suivant (i18suivant)",
1074
- "nuxt": "- Internationalisation Nuxt (@nuxtjs/i18n)",
1074
+ "nuxt": "-Nuxt i18n (@nuxtjs/i18n)",
1075
1075
  "svelte": "- Svelte i18n (svelte-i18n)"
1076
1076
  },
1077
- "continueWithoutI18nPrompt": "Aucun framework i18n détecté. Voulez-vous continuer sans ? (o/N) :",
1078
- "detectedI18nFramework": "Framework i18n détecté : {frameworks}",
1077
+ "continueWithoutI18nPrompt": "Aucun framework i18n détecté. Voulez-vous continuer sans? (o/N) :",
1078
+ "detectedI18nFramework": "Framework i18n détecté : {frameworks}",
1079
1079
  "existingDirectoryItem": "{index}. {location}",
1080
- "usingExistingStructure": "Utilisation de la structure existante : {dir}",
1081
- "creatingSourceDirectory": "Création du répertoire source : {dir}",
1082
- "creatingSourceLanguageDirectory": "Création du répertoire de langue source : {dir}",
1080
+ "usingExistingStructure": "Utilisation de la structure existante : {dir}",
1081
+ "creatingSourceDirectory": "Création du répertoire source : {dir}",
1082
+ "creatingSourceLanguageDirectory": "Création du répertoire de langue source : {dir}",
1083
1083
  "errors": {
1084
- "errorExecutingCommand": "Erreur lors de l'exécution de la commande : {error}",
1085
- "sourceDirectoryNotFound": "Répertoire source introuvable : {dir}",
1086
- "sourceLanguageDirectoryNotFound": "Répertoire de langue source introuvable : {dir}",
1087
- "noJsonFilesInSourceDirectory": "Aucun fichier JSON trouvé dans le répertoire source : {dir}",
1088
- "invalidFilePathDetected": "Chemin de fichier invalide détecté",
1089
- "initializationFailed": "Échec de l'initialisation : {error}",
1084
+ "errorExecutingCommand": "Erreur lors de l'exécution de la commande : {error}",
1085
+ "sourceDirectoryNotFound": "Répertoire source introuvable : {dir}",
1086
+ "sourceLanguageDirectoryNotFound": "Répertoire de langue source introuvable : {dir}",
1087
+ "noJsonFilesInSourceDirectory": "Aucun fichier JSON trouvé dans le répertoire source : {dir}",
1088
+ "invalidFilePathDetected": "Chemin de fichier non valide détecté",
1089
+ "initializationFailed": "L'initialisation a échoué : {error}",
1090
1090
  "noFramework": "Aucun framework i18n détecté. Continuez avec le mode générique.",
1091
1091
  "packageJsonRead": "Erreur de lecture de package.json."
1092
1092
  },
1093
- "processingFile": "Traitement de {file} pour {language}...",
1094
- "fileAlreadyExistsMerging": "Le fichier {file} existe déjà. Fusion des nouvelles clés.",
1095
- "createdNewFile": "Nouveau fichier créé : {file}",
1096
- "updatedFile": "Fichier mis à jour : {file}",
1097
- "skippingExcludedFile": "Ignorer {file} pour {language} car il est exclu.",
1093
+ "processingFile": "Traitement {file} pour {language}...",
1094
+ "fileAlreadyExistsMerging": "Déposer {file} existe déjà. Fusion de nouvelles clés.",
1095
+ "createdNewFile": "Nouveau fichier créé : {file}",
1096
+ "updatedFile": "Fichier mis à jour : {file}",
1097
+ "skippingExcludedFile": "Saut {file} pour {language} car il est exclu.",
1098
1098
  "continuingWithoutAdminPin": "Continuer sans configurer le code PIN administrateur.",
1099
- "createdSourceLanguageDirectory": " Créé le répertoire de langue source: {dir}",
1099
+ "createdSourceLanguageDirectory": "Répertoire de langue source créé : {dir}",
1100
1100
  "errorSettingUpAdminPin": "Erreur lors de la configuration du code PIN administrateur : {error}",
1101
1101
  "noTargetLanguagesSpecified": "Aucune langue cible spécifiée.",
1102
1102
  "translationFilesCreatedWarning": "Les fichiers de traduction ont été créés avec des espaces réservés ; examen avant utilisation en production.",
1103
- "warningCannotReadSourceDir": "Attention : impossible de lire le répertoire source {dir} : {error}",
1104
- "warningInvalidLanguageCodes": "Attention : codes de langue non valides ignorés : {languages}",
1103
+ "warningCannotReadSourceDir": "Attention : impossible de lire le répertoire source {dir}: {error}",
1104
+ "warningInvalidLanguageCodes": "Attention : codes de langue invalides ignorés : {languages}",
1105
1105
  "warningProceedingWithoutFramework": "Poursuite sans framework i18n détecté."
1106
1106
  },
1107
1107
  "language": {
1108
- "title": "🌍 Changer la langue",
1109
- "separator": "============================================================",
1110
- "current": "Langue actuelle : {language}",
1111
- "available": "Langues disponibles :",
1108
+ "title": "🌍 Changer de langue",
1109
+ "separator": "=============================================================",
1110
+ "current": "Langue actuelle : {language}",
1111
+ "available": "Langues disponibles :",
1112
1112
  "languageOption": "{index}. {displayName}{current}",
1113
1113
  "backToMainMenu": "Retour au menu principal",
1114
- "prompt": "Sélectionnez une langue (0-8) :",
1114
+ "prompt": "Sélectionnez une langue (0-8) :",
1115
1115
  "cancelled": "Changement de langue annulé.",
1116
1116
  "invalid": "Choix invalide. Veuillez réessayer.",
1117
- "changed": "Langue changée en : {language}",
1118
- "changeFailed": "Échec du changement de langue : {error}",
1119
- "pressEnterToContinue": "Appuyez sur Entrée pour continuer"
1117
+ "changed": "La langue a été modifiée comme suit : {language}",
1118
+ "changeFailed": "Échec du changement de langue : {error}",
1119
+ "pressEnterToContinue": "Appuyez sur Entrée pour continuer..."
1120
1120
  },
1121
1121
  "maintainLanguagePurity": {
1122
- "workflow_title": "🚀 Flux de maintenance de la pureté linguistique",
1123
- "step1_title": "📊 ÉTAPE 1 : Évaluation initiale de la pureté linguistique",
1124
- "step2_title": "🔧 ÉTAPE 2 : Détection et correction automatique des incohérences",
1125
- "step3_title": "🌐 ÉTAPE 3 : Application des traductions automatiques",
1126
- "step4_title": "✅ ÉTAPE 4 : Évaluation finale de la pureté linguistique",
1127
- "workflow_error": "❌ Erreur du flux : {errorMessage}",
1128
- "running_initial_validation": "Exécution de la validation initiale de la pureté linguistique…",
1129
- "initial_assessment_complete": "✅ Évaluation initiale terminée : {count} violation(s) trouvée(s)",
1130
- "initial_assessment_warnings": "⚠️ Évaluation initiale terminée avec des avertissements",
1131
- "detecting_fixing_mismatches": "Détection et correction des incohérences…",
1132
- "detection_complete_applying_fixes": "Détection terminée. Application des corrections automatiques",
1133
- "mismatch_fixes_complete": "✅ Corrections terminées : {count} correction(s) appliquée(s)",
1134
- "mismatch_fixes_warnings": "⚠️ Corrections terminées avec des avertissements",
1135
- "applying_automatic_translations": "Application des traductions automatiques",
1136
- "translation_preview_complete": "Aperçu des traductions terminé. Application en cours…"
1122
+ "workflow_title": "🚀 Flux de travail de maintenance de la pureté de la langue",
1123
+ "step1_title": "📊 ÉTAPE 1 : Évaluation initiale de la pureté de la langue",
1124
+ "step2_title": "🔧 ÉTAPE 2 : Détecter et corriger automatiquement les incompatibilités de langue",
1125
+ "step3_title": "🌐 ÉTAPE 3 : Appliquer les traductions automatiques",
1126
+ "step4_title": "✅ ÉTAPE 4 : Évaluation finale de la pureté de la langue",
1127
+ "workflow_error": "❌ Erreur de flux de travail : {errorMessage}",
1128
+ "running_initial_validation": "Exécution de la validation initiale de la pureté du langage...",
1129
+ "initial_assessment_complete": "✅ Bilan initial terminé : {count} violations constatées",
1130
+ "initial_assessment_warnings": "⚠️ Premier bilan complété par des avertissements",
1131
+ "detecting_fixing_mismatches": "Détecter et corriger les inadéquations linguistiques...",
1132
+ "detection_complete_applying_fixes": "Détection terminée. Application des correctifs automatiques...",
1133
+ "mismatch_fixes_complete": "✅ Corrections de non-concordance linguistique terminées : {count} correctifs appliqués",
1134
+ "mismatch_fixes_warnings": "⚠️ Corrections de non-concordance de langue complétées par des avertissements",
1135
+ "applying_automatic_translations": "Appliquer des traductions automatiques...",
1136
+ "translation_preview_complete": "Aperçu de la traduction terminé. Appliquer des traductions..."
1137
1137
  },
1138
1138
  "menu": {
1139
- "title": "🌐 MENU DE GESTION I18NTK",
1140
- "separator": "============================================================",
1139
+ "title": "🌐MENU DE GESTION I18NTK",
1140
+ "separator": "=============================================================",
1141
1141
  "options": {
1142
1142
  "init": "🚀 Initialiser de nouvelles langues",
1143
1143
  "analyze": "🔍 Analyser les traductions",
1144
1144
  "validate": "✅ Valider les traductions",
1145
- "usage": "📊 Vérifier lutilisation des clés",
1146
- "complete": "🎯 Compléter les traductions (100 % de couverture)",
1145
+ "usage": "📊 Vérifiez l'utilisation de la clé",
1146
+ "complete": "🎯 Traductions complètes (couverture à 100%)",
1147
1147
  "sizing": "📏 Analyser le dimensionnement",
1148
- "fix": "🛠️ Corriger les traductions de remplacement",
1149
- "scanner": "🔍 Analyser les problèmes i18n",
1150
- "translate": "🌐 Traduction Automatique (Bêta)",
1151
- "workflow": "🔄 Exécuter le flux complet",
1152
- "status": "📋 Afficher le statut du projet",
1148
+ "fix": "🛠️ Correction des traductions d'espaces réservés",
1149
+ "scanner": "🔍 Rechercher les problèmes i18n",
1150
+ "translate": "🌐 Traduction automatique (bêta)",
1151
+ "workflow": "🔄 Exécuter un flux de travail complet",
1152
+ "status": "📋 Afficher l'état du projet",
1153
1153
  "delete": "🗑️ Supprimer tous les rapports",
1154
- "language": "🌍 Changer la langue de linterface",
1154
+ "language": "🌍 Changer la langue de l'interface utilisateur",
1155
1155
  "settings": "⚙️ Paramètres",
1156
1156
  "help": "❓ Aide",
1157
1157
  "debug": "🔧 Outils de débogage",
1158
1158
  "exit": "🚪 Quitter"
1159
1159
  },
1160
- "update": "📦 Mettre à jour le paquet",
1160
+ "update": "📦 Forfait de mise à jour",
1161
1161
  "goodbye": "👋 Au revoir !",
1162
- "invalidChoice": "Choix invalide. Veuillez sélectionner 0-15.",
1163
- "returning": "🔄 Retour au menu principal",
1164
- "invalidOption": "Option invalide. Veuillez réessayer.",
1165
- "nonInteractiveModeWarning": "⚠️ Mode non interactif détecté. Menu affiché à titre indicatif.",
1166
- "useDirectExecution": "💡 Utilisez : node main/i18ntk-manage.js --command=<commande> pour exécuter directement.",
1167
- "useHelpForCommands": "📖 Utilisez : node main/i18ntk-manage.js --help pour les commandes disponibles.",
1162
+ "invalidChoice": "Choix invalide. Veuillez sélectionner 0-15.",
1163
+ "returning": "Retour au menu principal...",
1164
+ "invalidOption": "Option invalide. Veuillez réessayer.",
1165
+ "nonInteractiveModeWarning": "Mode non interactif détecté. Menu affiché à titre de référence uniquement.",
1166
+ "useDirectExecution": "Utiliser : node main/manage/index.js --command=<command> pour une exécution directe.",
1167
+ "useHelpForCommands": "Utilisez : node main/manage/index.js --help pour les commandes disponibles.",
1168
1168
  "returnToMainMenu": "Appuyez sur Entrée pour revenir au menu principal.",
1169
- "pressEnterToContinue": "Appuyez sur Entrée pour continuer",
1170
- "selectOptionPrompt": "Sélectionnez une option :",
1171
- "selectDebugToolPrompt": "Sélectionnez un outil de débogage :",
1172
- "selectLogPrompt": "Sélectionnez un fichier journal (1-{count}) :",
1173
- "autoDetectedI18nDirectory": "📂 Répertoire i18n auto-détecté : {directory}",
1174
- "executingCommand": "Exécution de la commande : {command}",
1175
- "unknownCommand": "Commande inconnue : {command}",
1176
- "languageOption": "Langue {index}. {displayName}{current}",
1169
+ "pressEnterToContinue": "Appuyez sur Entrée pour continuer...",
1170
+ "selectOptionPrompt": "Sélectionnez une option :",
1171
+ "selectDebugToolPrompt": "Sélectionnez un outil de débogage :",
1172
+ "selectLogPrompt": "Sélectionnez un fichier journal (1-{count}):",
1173
+ "autoDetectedI18nDirectory": "Répertoire i18n détecté automatiquement : {directory}",
1174
+ "executingCommand": "Exécution de la commande : {command}",
1175
+ "unknownCommand": "Commande inconnue : {command}",
1176
+ "languageOption": "{index}. {displayName}{current}",
1177
1177
  "debugTools": {
1178
- "1": "Analyse des fichiers journaux",
1179
- "2": "Analyse de lutilisation des clés de traduction",
1180
- "3": "Analyse de la complétude des traductions",
1181
- "4": "Analyse du format des traductions",
1178
+ "1": "Analyse du fichier journal",
1179
+ "2": "Analyse de l'utilisation des clés de traduction",
1180
+ "3": "Analyse de l'exhaustivité de la traduction",
1181
+ "4": "Analyse du format de traduction",
1182
1182
  "5": "Analyse du type de traduction",
1183
- "6": "Analyse de la structure des traductions"
1183
+ "6": "Analyse de la structure de la traduction"
1184
1184
  },
1185
1185
  "native_translations": {
1186
- "exact_translation_found": "✅ {keyPath} : {value}",
1187
- "no_exact_translation": "⚠️ Pas de traduction exacte pour '{keyPath}', clés similaires trouvées :",
1188
- "similar_key": "- {key} ({similarity}% de correspondance)",
1189
- "processing_language_files": "🔄 Traitement de {count} fichiers de langue",
1190
- "file_not_found": "⚠️ Fichier introuvable : {file}",
1191
- "processing_translations": "🌍 Traitement des traductions {code}",
1192
- "backup_created": "📋 Sauvegarde créée : {filename}",
1193
- "error_parsing_json": "❌ Erreur danalyse de {code}.json : {errorMessage}",
1194
- "existing_keys_found": "📊 {code} : {count} clés existantes trouvées",
1195
- "error_writing_json": "❌ Erreur d’écriture de {code}.json : {errorMessage}",
1196
- "translations_replaced": "📊 {code} : {count} traductions remplacées",
1197
- "translation_replacement_complete": "✅ Remplacement des traductions terminé !",
1198
- "total_replacements": "📊 Remplacements totaux : {count}",
1199
- "dry_run_mode": "⚠️ MODE DRY RUN Aucun fichier na été modifié",
1200
- "tool_title": "🌍 Remplaceur de traductions natives v1.10.1",
1186
+ "exact_translation_found": "✅ {keyPath}: {value}",
1187
+ "no_exact_translation": "⚠️ Pas de traduction exacte pour '{keyPath}', clés similaires trouvées :",
1188
+ "similar_key": "- {key} ({similarity}% correspondre)",
1189
+ "processing_language_files": "🔄 Traitement {count} fichiers de langue...",
1190
+ "file_not_found": "⚠️ Fichier introuvable : {file}",
1191
+ "processing_translations": "🌍 Traitement {code} traductions...",
1192
+ "backup_created": "📋 Sauvegarde créée : {filename}",
1193
+ "error_parsing_json": "❌ Erreur d'analyse {code}.json : {errorMessage}",
1194
+ "existing_keys_found": "📊 {code}: Trouvé {count} clés existantes",
1195
+ "error_writing_json": "❌ Erreur d'écriture {code}.json : {errorMessage}",
1196
+ "translations_replaced": "📊 {code}: {count} traductions remplacé",
1197
+ "translation_replacement_complete": "✅ Remplacement de la traduction terminé !",
1198
+ "total_replacements": "📊 Remplacements totaux : {count}",
1199
+ "dry_run_mode": "⚠️ MODE DRY RUN - Aucun fichier n'a été modifié",
1200
+ "tool_title": "🌍 Remplacement de traduction native v1.9.1",
1201
1201
  "tool_separator": "======================================",
1202
- "dry_run_warning": "⚠️ Exécution en mode DRY RUN aucun fichier ne sera modifié",
1203
- "error_during_replacement": "❌ Erreur lors du remplacement des traductions :"
1202
+ "dry_run_warning": "⚠️ Fonctionnement en mode DRY RUN - aucun fichier ne sera modifié",
1203
+ "error_during_replacement": "❌ Erreur lors du remplacement de la traduction :"
1204
1204
  }
1205
1205
  },
1206
1206
  "config": {
1207
- "dirFallbackWarning": "⚠️ Répertoire {dir} introuvable. Utilisation de {fallback}.",
1207
+ "dirFallbackWarning": "⚠️ Annuaire {dir} pas trouvé. En utilisant {fallback}.",
1208
1208
  "dirInvalidError": "❌ Répertoire invalide : {dir}"
1209
1209
  },
1210
1210
  "operations": {
1211
- "completed": "✅ Opération terminée avec succès !",
1212
- "deleteReportsTitle": "🗑️ Supprimer rapports et journaux",
1213
- "scanningForFiles": "🔍 Recherche des fichiers à supprimer",
1214
- "noFilesFoundToDelete": "✅ Aucun fichier à supprimer.",
1211
+ "completed": "✅Opération terminée avec succès !",
1212
+ "deleteReportsTitle": "🗑️ Supprimer les rapports et les journaux",
1213
+ "scanningForFiles": "🔍 Recherche de fichiers à supprimer...",
1214
+ "noFilesFoundToDelete": "✅ Aucun fichier trouvé à supprimer.",
1215
1215
  "availableDirectories": "📁 Répertoires disponibles :",
1216
1216
  "allDirectories": "Tous les répertoires",
1217
- "andMore": "et {count} autre(s)",
1217
+ "andMore": "et plus encore...",
1218
1218
  "cancelOption": "Annuler",
1219
- "cancelReportOption": "Annuler / Retour au menu",
1219
+ "cancelReportOption": "Annuler / Revenir au menu",
1220
1220
  "invalidSelection": "❌ Sélection invalide.",
1221
- "foundFilesInSelectedDirectories": "📊 {count} fichier(s) trouvé(s) dans les répertoires sélectionnés :",
1222
- "deletionOptions": "🗑️ Options de suppression :",
1221
+ "foundFilesInSelectedDirectories": "📊 Trouvé {count} fichiers dans les répertoires sélectionnés :",
1222
+ "deletionOptions": "🗑️ Options de suppression :",
1223
1223
  "deleteAllFiles": "Supprimer tous les fichiers",
1224
1224
  "keepLast3Files": "Conserver les 3 derniers fichiers (par date)",
1225
1225
  "keepLast5Files": "Conserver les 5 derniers fichiers (par date)",
1226
1226
  "noFilesToDelete": "✅ Aucun fichier à supprimer.",
1227
- "filesToDeleteCount": "📋 Fichiers à supprimer : {count}",
1227
+ "filesToDeleteCount": "📋 Fichiers à supprimer : {count}",
1228
1228
  "filesToKeepCount": "📋 Fichiers à conserver : {count}",
1229
- "confirmDeletion": "⚠️ Êtes-vous sûr de vouloir supprimer ces fichiers ? (y/N) :",
1230
- "deletedFile": "✅ Supprimé : {filename}",
1231
- "failedToDeleteFile": "❌ Échec de la suppression de {filename} : {error}",
1232
- "cancelled": "❌ Opération annulée.",
1229
+ "confirmDeletion": "⚠️ Etes-vous sûr de vouloir supprimer ces fichiers ? (o/N) :",
1230
+ "deletedFile": "✅ Supprimé : {filename}",
1231
+ "failedToDeleteFile": "❌ Échec de la suppression {filename}: {error}",
1232
+ "cancelled": "❌Opération annulée.",
1233
1233
  "init": {
1234
- "title": "🚀 Initialiser de nouvelles langues"
1234
+ "title": "🚀 Initialiser une nouvelle langue"
1235
1235
  },
1236
1236
  "usage": {
1237
- "title": "📊 Vérifier lutilisation des clés",
1238
- "noUsedKeysHint": "Trouvé des traductions mais aucune utilisation dans la source. Vérifiez --source-dir et translationPatterns."
1237
+ "title": "📊 Vérifier l'utilisation des clés",
1238
+ "noUsedKeysHint": "Traductions trouvées mais aucune utilisation dans la source. Vérifiez --source-dir et translationPatterns."
1239
1239
  },
1240
1240
  "analyze": {
1241
1241
  "title": "🔍 Analyser les traductions"
@@ -1244,96 +1244,96 @@
1244
1244
  "title": "✅ Valider les traductions"
1245
1245
  },
1246
1246
  "settings": {
1247
- "title": "⚙️ Gestion des paramètres",
1248
- "separator": "============================================================"
1247
+ "title": "⚙️ Gestion des paramètres",
1248
+ "separator": "============================================================="
1249
1249
  },
1250
1250
  "complete": {
1251
- "deletingOldReport": "🗑️ Suppression de lancien rapport dutilisation pour une nouvelle analyse",
1252
- "generatingFreshAnalysis": "🔄 Génération dune nouvelle analyse dutilisation",
1253
- "couldNotGenerate": "⚠️ Impossible de générer l’analyse dutilisation. Utilisation des clés manquantes courantes.",
1254
- "reportNotFound": "⚠️ Rapport dutilisation introuvable. Génération d’une nouvelle analyse",
1255
- "foundMissingKeys": "🔍 {count} clé(s) manquante(s) trouvée(s) lors de lanalyse dutilisation",
1256
- "couldNotParse": "⚠️ Impossible danalyser le rapport dutilisation. Utilisation des clés manquantes courantes.",
1257
- "title": "🎯 COMPLÉTION DES TRADUCTIONS",
1258
- "separator": "============================================================",
1259
- "sourceDir": "📁 Répertoire source : {sourceDir}",
1260
- "sourceLanguage": "🔤 Langue source : {sourceLanguage}",
1261
- "dryRunMode": "🧪 MODE DRY RUN Aucun fichier ne sera modifié",
1251
+ "deletingOldReport": "🗑️ Suppression de l'ancien rapport d'utilisation pour une nouvelle analyse",
1252
+ "generatingFreshAnalysis": "🔄 Génération d'une nouvelle analyse d'utilisation...",
1253
+ "couldNotGenerate": "⚠️ Impossible de générer une analyse d'utilisation. Utilisation des clés manquantes courantes.",
1254
+ "reportNotFound": "⚠️ Rapport d'utilisation introuvable. Générer une nouvelle analyse...",
1255
+ "foundMissingKeys": "🔍 Trouvé {count} clés manquantes dans l'analyse d'utilisation",
1256
+ "couldNotParse": "⚠️ Impossible d'analyser le rapport d'utilisation. Utilisation des clés manquantes courantes.",
1257
+ "title": "🎯 COMPLÉTER LES TRADUCTIONS",
1258
+ "separator": "=============================================================",
1259
+ "sourceDir": "📁 Répertoire source : {sourceDir}",
1260
+ "sourceLanguage": "🔤 Langue source : {sourceLanguage}",
1261
+ "dryRunMode": "🧪 MODE DRY RUN - Aucun fichier ne sera modifié",
1262
1262
  "languages": "🎯 Langues cibles : {languages}",
1263
- "addingMissingKeys": "➕ Ajout des clés manquantes aux fichiers de traduction",
1264
- "processing": "🔄 Traitement de {language}",
1265
- "addedKeys": "✅ {count} clé(s) ajoutée(s)",
1266
- "changeDetails": "📝 {file} : {key}",
1263
+ "addingMissingKeys": "➕ Ajout des clés manquantes aux fichiers de traduction...",
1264
+ "processing": "🔄 Traitement {language}...",
1265
+ "addedKeys": "✅ Ajouté {count} clés",
1266
+ "changeDetails": "📝 {file}: {key}",
1267
1267
  "noChangesNeeded": "✅ Aucun changement nécessaire pour {language}",
1268
- "summaryTitle": "📊 RÉCAPITULATIF DE LA COMPLÉTION",
1269
- "totalChanges": "📝 Modifications totales : {totalChanges}",
1270
- "languagesProcessed": "🌐 Langues traitées : {languagesProcessed}",
1271
- "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
1272
- "nextStepsTitle": "📋 ÉTAPES SUIVANTES",
1273
- "nextStep1": "1. Exécutez l’analyse dutilisation :",
1274
- "nextStep2": "2. Validez les traductions :",
1275
- "nextStep3": "3. Analysez la complétude :",
1268
+ "summaryTitle": "📊 RÉSUMÉ D'ACHÈVEMENT",
1269
+ "totalChanges": "📝 Modifications totales : {totalChanges}",
1270
+ "languagesProcessed": "🌐 Langues traitées : {languagesProcessed}",
1271
+ "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
1272
+ "nextStepsTitle": "📋 PROCHAINES ÉTAPES",
1273
+ "nextStep1": "1. Exécutez une analyse d'utilisation :",
1274
+ "nextStep2": "2. Validez les traductions :",
1275
+ "nextStep3": "3. Analyser l'exhaustivité :",
1276
1276
  "allKeysAvailable": "🎉 Toutes les clés de traduction sont désormais disponibles !",
1277
1277
  "runWithoutDryRun": "💡 Exécutez sans --dry-run pour appliquer les modifications",
1278
- "pressEnterToContinue": "Appuyez sur Entrée pour continuer"
1278
+ "pressEnterToContinue": "Appuyez sur Entrée pour continuer..."
1279
1279
  },
1280
1280
  "updatePackage": {
1281
- "title": "📦 Mettre à jour le paquet i18n-toolkit",
1282
- "description": "Cela mettra à jour le paquet i18n-toolkit vers la dernière version disponible sur npm.",
1281
+ "title": "📦 Mettre à jour le package i18n-toolkit",
1282
+ "description": "Cela mettra à jour le package i18n-toolkit vers la dernière version disponible sur npm.",
1283
1283
  "command": "Commande à exécuter",
1284
- "confirm": "Êtes-vous sûr de vouloir procéder à la mise à jour ? (y/N) :",
1285
- "updating": "Mise à jour du paquet… Cela peut prendre un moment.",
1286
- "success": "✅ i18n-toolkit mis à jour avec succès !",
1284
+ "confirm": "Êtes-vous sûr de vouloir procéder à la mise à jour ? (o/N) :",
1285
+ "updating": "Mise à jour du package... Cela peut prendre un moment.",
1286
+ "success": "✅ i18n-toolkit mis à jour avec succès !",
1287
1287
  "error": "❌ Échec de la mise à jour de i18n-toolkit",
1288
1288
  "cancelled": "❌ Mise à jour annulée."
1289
1289
  }
1290
1290
  },
1291
1291
  "security": {
1292
- "pathValidationFailed": "échec_validation_chemin",
1293
- "invalidInputType": "type_entrée_invalide",
1294
- "pathTraversalAttempt": "tentative_traversée_chemin",
1295
- "pathValidated": "✅ Chemin validé avec succès",
1296
- "pathValidationError": "erreur_validation_chemin",
1297
- "fileTooLarge": "Sécurité : Fichier trop volumineux : {filePath}",
1298
- "fileReadError": "Sécurité : Erreur de lecture du fichier : {errorMessage}",
1299
- "contentTooLargeForFile": "Sécurité : Contenu trop volumineux pour le fichier : {filePath}",
1300
- "fileWriteError": "Sécurité : Erreur d’écriture du fichier : {errorMessage}",
1301
- "jsonStringTooLarge": "Sécurité : Chaîne JSON trop volumineuse",
1302
- "jsonParseError": "Sécurité : Erreur danalyse JSON : {errorMessage}",
1303
- "inputContainsDisallowedCharacters": "Sécurité : Entrée contient des caractères interdits",
1304
- "unknownCommandArgument": "Sécurité : Argument de commande inconnu : {key}",
1305
- "unknown_command_argument": "Sécurité : Argument de commande inconnu : {key}",
1306
- "unknownConfigKey": "Sécurité : Clé de configuration inconnue : {key}",
1307
- "unknown_config_key": "Sécurité : Clé de configuration inconnue : {key}",
1308
- "securityAlert": "[ALERTE SÉCURITÉ] {timestamp} : {event}",
1309
- "contentTooLarge": "Sécurité : Contenu trop volumineux pour le fichier : {validatedPath}",
1310
- "inputDisallowedCharacters": "Sécurité : Entrée contient des caractères interdits",
1292
+ "pathValidationFailed": "chemin_validation_failed",
1293
+ "invalidInputType": "invalid_input_type",
1294
+ "pathTraversalAttempt": "path_traversal_attempt",
1295
+ "pathValidated": "✅ Parcours validé avec succès",
1296
+ "pathValidationError": "chemin_validation_erreur",
1297
+ "fileTooLarge": "Sécurité : Fichier trop volumineux : {filePath}",
1298
+ "fileReadError": "Sécurité : Erreur de lecture du fichier : {errorMessage}",
1299
+ "contentTooLargeForFile": "Sécurité : Contenu trop volumineux pour le fichier : {filePath}",
1300
+ "fileWriteError": "Sécurité : Erreur d'écriture du fichier : {errorMessage}",
1301
+ "jsonStringTooLarge": "Sécurité : chaîne JSON trop grande",
1302
+ "jsonParseError": "Sécurité : erreur d'analyse JSON : {errorMessage}",
1303
+ "inputContainsDisallowedCharacters": "Sécurité : l'entrée contient des caractères non autorisés",
1304
+ "unknownCommandArgument": "Sécurité : Argument de commande inconnu : {key}",
1305
+ "unknown_command_argument": "Sécurité : Argument de commande inconnu : {key}",
1306
+ "unknownConfigKey": "Sécurité : Clé de configuration inconnue : {key}",
1307
+ "unknown_config_key": "Sécurité : Clé de configuration inconnue : {key}",
1308
+ "securityAlert": "[ALERTE DE SÉCURITÉ] {timestamp}: {event}",
1309
+ "contentTooLarge": "Sécurité : Contenu trop volumineux pour le fichier : {validatedPath}",
1310
+ "inputDisallowedCharacters": "Sécurité : l'entrée contient des caractères non autorisés",
1311
1311
  "unknownCommandArg": "Argument de commande inconnu",
1312
- "logMessage": "[SÉCURITÉ {level}] {timestamp} : {event}",
1313
- "alertMessage": "[ALERTE SÉCURITÉ] {timestamp} : {event}",
1314
- "securityWarning": "[AVERTISSEMENT SÉCURITÉ] {timestamp} : {event}",
1315
- "json_parse_error": "Sécurité : Erreur danalyse JSON : {errorMessage}",
1316
- "file_too_large": "Sécurité : Fichier trop volumineux : {filePath}",
1317
- "file_read_error": "Sécurité : Erreur de lecture du fichier : {errorMessage}",
1318
- "content_too_large_for_file": "Sécurité : Contenu trop volumineux pour le fichier : {filePath}",
1319
- "file_write_error": "Sécurité : Erreur d’écriture du fichier : {errorMessage}",
1320
- "json_string_too_large": "Sécurité : Chaîne JSON trop volumineuse",
1321
- "recursion_detected": "Sécurité : Récursion détectée dans {operation}",
1322
- "operation_timeout": "Sécurité : Délai dépassé pour lopération : {operation}",
1323
- "operation_error": "Sécurité : Erreur lors de l’opération {operation} : {error}",
1324
- "directory_read_error": "Sécurité : Erreur de lecture du répertoire : {errorMessage}",
1325
- "security_alert": "Sécurité : Alerte"
1312
+ "logMessage": "[SÉCURITÉ {level}] {timestamp}: {event}",
1313
+ "alertMessage": "[ALERTE DE SÉCURITÉ] {timestamp}: {event}",
1314
+ "securityWarning": "[AVERTISSEMENT DE SÉCURITÉ] {timestamp}: {event}",
1315
+ "json_parse_error": "Sécurité : erreur d'analyse JSON : {errorMessage}",
1316
+ "file_too_large": "Fichier trop volumineux",
1317
+ "file_read_error": "Erreur de lecture du fichier",
1318
+ "content_too_large_for_file": "Contenu trop volumineux pour le fichier",
1319
+ "file_write_error": "Erreur d'écriture de fichier",
1320
+ "json_string_too_large": "Chaîne Json trop grande",
1321
+ "recursion_detected": "Récursion détectée dans {operation}",
1322
+ "operation_timeout": "Délai d'expiration de l'opération : {operation}",
1323
+ "operation_error": "Erreur de fonctionnement dans {operation}: {error}",
1324
+ "directory_read_error": "Erreur de lecture du répertoire : {errorMessage}",
1325
+ "security_alert": "Alerte de sécurité"
1326
1326
  },
1327
1327
  "settings-cli": {
1328
1328
  "settings": {
1329
1329
  "mainMenu": {
1330
- "title": "Menu principal :",
1331
- "uiSettings": "Paramètres UI",
1332
- "uiSettingsDesc": "Langue, thème et options dinterface",
1333
- "directorySettings": "Paramètres de répertoires",
1330
+ "title": "Menu principal :",
1331
+ "uiSettings": "Paramètres de l'interface utilisateur",
1332
+ "uiSettingsDesc": "Options de langue, de thème et d'interface",
1333
+ "directorySettings": "Paramètres du répertoire",
1334
1334
  "directorySettingsDesc": "Chemins des répertoires source et de sortie",
1335
- "scriptDirectorySettings": "Paramètres du répertoire des scripts",
1336
- "scriptDirectorySettingsDesc": "Chemins des répertoires pour chaque opération de script",
1335
+ "scriptDirectorySettings": "Paramètres du répertoire de scripts",
1336
+ "scriptDirectorySettingsDesc": "Chemins de répertoire pour les opérations de script individuelles",
1337
1337
  "processingSettings": "Paramètres de traitement",
1338
1338
  "processingSettingsDesc": "Taille des lots, concurrence et performances",
1339
1339
  "advancedSettings": "Paramètres avancés",
@@ -1341,552 +1341,550 @@
1341
1341
  "viewAllSettings": "Afficher tous les paramètres",
1342
1342
  "viewAllSettingsDesc": "Afficher la configuration actuelle",
1343
1343
  "importExport": "Importer/Exporter",
1344
- "importExportDesc": "Sauvegarder et restaurer les paramètres",
1345
- "resetToDefaults": "Réinitialiser par défaut",
1346
- "resetToDefaultsDesc": "Restaurer les paramètres dusine",
1344
+ "importExportDesc": "Paramètres de sauvegarde et de restauration",
1345
+ "resetToDefaults": "Réinitialiser aux valeurs par défaut",
1346
+ "resetToDefaultsDesc": "Restaurer les paramètres d'usine",
1347
1347
  "reportBug": "Signaler un bug",
1348
1348
  "reportBugDesc": "Soumettre un rapport de problème sur GitHub",
1349
1349
  "saveChanges": "Enregistrer les modifications",
1350
- "saveChangesDesc": "Enregistrer la configuration actuelle dans un fichier",
1351
- "updatePackage": "Mettre à jour le paquet",
1352
- "updatePackageDesc": "Mettre à jour le paquet i18n-toolkit via npm",
1350
+ "saveChangesDesc": "Enregistrer les paramètres actuels dans un fichier",
1351
+ "updatePackage": "Package de mise à jour",
1352
+ "updatePackageDesc": "Mettez à jour le package i18n-toolkit via npm",
1353
1353
  "help": "Aide",
1354
- "helpDesc": "Afficher des informations détaillées daide",
1354
+ "helpDesc": "Afficher des informations d'aide détaillées",
1355
1355
  "quit": "Quitter",
1356
- "quitDesc": "Quitter les paramètres (avec invite d’enregistrement si nécessaire)",
1357
- "unsavedChangesWarning": "⚠️ Vous avez des modifications non enregistrées",
1358
- "saveChangesBeforeQuit": "Voulez-vous enregistrer les modifications avant de quitter ? (y/N) :",
1359
- "selectOption": "Sélectionnez une option :",
1360
- "goodbyeMessage": "Merci d’avoir utilisé le gestionnaire de paramètres i18n !"
1356
+ "quitDesc": "Quitter les paramètres (avec invite de sauvegarde si nécessaire)",
1357
+ "unsavedChangesWarning": "⚠️ Vous avez des modifications non enregistrées",
1358
+ "saveChangesBeforeQuit": "Voulez-vous enregistrer les modifications avant de quitter ? (o/N) :",
1359
+ "selectOption": "Sélectionnez une option :",
1360
+ "goodbyeMessage": "Merci d'utiliser le gestionnaire de paramètres i18n !"
1361
1361
  },
1362
- "goodbyeMessage": "Merci d’avoir utilisé le gestionnaire de paramètres i18n !",
1363
- "relativePathHint": "Utilisez des chemins relatifs depuis ce répertoire (ex. : ./src/i18n/locales)",
1364
- "currentDirectory": "Répertoire de projet actuel"
1362
+ "goodbyeMessage": "Merci d'utiliser le gestionnaire de paramètres i18n !",
1363
+ "relativePathHint": "Utilisez les chemins relatifs de ce répertoire (par exemple, ./src/i18n/locales)",
1364
+ "currentDirectory": "Répertoire du projet actuel"
1365
1365
  },
1366
1366
  "settings_manager": {
1367
- "error_loading_settings": "❌ Erreur lors du chargement des paramètres :",
1368
- "error_saving_settings": "❌ Erreur lors de lenregistrement des paramètres :",
1369
- "error_setting_value": "❌ Erreur lors de la définition de la valeur :",
1370
- "missing_required_setting": "❌ Paramètre requis manquant : {prop}",
1371
- "invalid_language": "❌ Langue invalide : {language}",
1372
- "invalid_source_language": "❌ Langue source invalide : {sourceLanguage}",
1373
- "default_languages_must_be_array": "❌ defaultLanguages doit être un tableau",
1374
- "invalid_date_format": "❌ Format de date invalide : {dateFormat}. Formats valides : {validFormats}",
1375
- "invalid_time_format": "❌ Format dheure invalide : {timeFormat}. Formats valides : {validFormats}",
1376
- "notifications_types_must_be_object": "❌ notifications.types doit être un objet",
1377
- "exclude_files_must_be_array": "❌ excludeFiles doit être un tableau",
1378
- "exclude_dirs_must_be_array": "❌ excludeDirs doit être un tableau",
1367
+ "error_loading_settings": "❌ Erreur de chargement des paramètres :",
1368
+ "error_saving_settings": "❌ Erreur lors de l'enregistrement des paramètres :",
1369
+ "error_setting_value": "❌ Valeur de réglage d'erreur :",
1370
+ "missing_required_setting": "❌ Paramètre obligatoire manquant : {prop}",
1371
+ "invalid_language": "❌ Langue invalide : {language}",
1372
+ "invalid_source_language": "❌ Langue source invalide : {sourceLanguage}",
1373
+ "default_languages_must_be_array": "❌ defaultLanguages ​​doit être un tableau",
1374
+ "invalid_date_format": "❌ Format de date invalide : {dateFormat}. Formats valides : {validFormats}",
1375
+ "invalid_time_format": "❌ Format d'heure invalide : {timeFormat}. Formats valides : {validFormats}",
1376
+ "notifications_types_must_be_object": "❌ notifications.types doivent être un objet",
1377
+ "exclude_files_must_be_array": "❌excludeFiles doit être un tableau",
1378
+ "exclude_dirs_must_be_array": "❌ ExclureDirs doit être un tableau",
1379
1379
  "include_extensions_must_be_array": "❌ includeExtensions doit être un tableau",
1380
1380
  "invalid_batch_size": "❌ Taille de lot invalide. Doit être un nombre positif",
1381
- "invalid_max_concurrent_files": "❌ Nombre max de fichiers concurrents invalide. Doit être un nombre positif",
1381
+ "invalid_max_concurrent_files": "❌ Nombre maximal de fichiers simultanés non valide. Doit être un nombre positif",
1382
1382
  "invalid_sizing_threshold": "❌ Seuil de dimensionnement invalide. Doit être un nombre positif",
1383
- "invalid_timeout": "❌ Délai d’attente invalide. Doit être au moins 1000 ms",
1384
- "invalid_sizing_format": "❌ Format de dimensionnement invalide : {sizingFormat}. Formats valides : {validFormats}",
1385
- "error_validating_settings": "❌ Erreur de validation des paramètres :",
1386
- "backup_created": "📋 Sauvegarde créée : {backupPath}",
1387
- "error_creating_backup": "❌ Erreur lors de la création de la sauvegarde :",
1388
- "language_not_supported": "Langue '{language}' non prise en charge. Disponibles : {availableLanguages}",
1389
- "ui_language_set": "🌍 Langue de linterface définie sur : {language}"
1383
+ "invalid_timeout": "❌ Délai d'expiration invalide. Doit être d'au moins 1 000 ms",
1384
+ "invalid_sizing_format": "❌ Format de dimensionnement invalide : {sizingFormat}. Formats valides : {validFormats}",
1385
+ "error_validating_settings": "❌ Erreur lors de la validation des paramètres :",
1386
+ "backup_created": "📋 Sauvegarde créée : {backupPath}",
1387
+ "error_creating_backup": "❌ Erreur lors de la création de la sauvegarde :",
1388
+ "language_not_supported": "Langue '{language}' n'est pas pris en charge. Disponible: {availableLanguages}",
1389
+ "ui_language_set": "🌍 Langue de l'interface utilisateur définie sur : {language}"
1390
1390
  }
1391
1391
  },
1392
1392
  "settings": {
1393
1393
  "title": "⚙️ Gestion des paramètres",
1394
- "separator": "============================================================",
1395
- "goodbyeMessage": "Merci d’avoir utilisé le gestionnaire de paramètres i18ntk !",
1396
- "relativePathHint": "Utilisez des chemins relatifs depuis ce répertoire (ex. : ./src/i18n/locales)",
1397
- "currentDirectory": "Répertoire de projet actuel",
1398
- "startingSettings": "🔧 Démarrage des paramètres :",
1399
- "pin": "PIN :",
1394
+ "separator": "=============================================================",
1395
+ "goodbyeMessage": "Merci d'utiliser le gestionnaire de paramètres i18ntk !",
1396
+ "relativePathHint": "Utilisez les chemins relatifs de ce répertoire (par exemple, ./src/i18n/locales)",
1397
+ "currentDirectory": "Répertoire du projet actuel",
1398
+ "startingSettings": "Paramètres de démarrage :",
1399
+ "pin": "ÉPINGLE:",
1400
1400
  "reportBug": {
1401
1401
  "title": "Signaler un bug",
1402
- "description": "Signaler tout problème ou bogue rencontré",
1403
- "guidance": "Pour signaler un bogue, veuillez suivre ces étapes :",
1404
- "checkLogs": "1. Vérifiez les journaux de débogage récents pour les erreurs",
1405
- "documentIssue": "2. Documentez le problème avec des étapes de reproduction",
1406
- "contactSupport": "3. Contactez le support ou utilisez le canal de rapport approprié",
1407
- "completed": " Processus de rapport de bogue terminé",
1408
- "instructions": "Suivez les instructions ci-dessus pour signaler le bogue."
1402
+ "description": "Signalez tout problème ou bug que vous rencontrez",
1403
+ "guidance": "Pour signaler les problèmes efficacement :",
1404
+ "checkLogs": "1. Vérifiez les journaux de débogage dans le répertoire de votre projet",
1405
+ "documentIssue": "2. Documentez le problème avec les étapes à reproduire",
1406
+ "contactSupport": "3. Contactez votre administrateur système ou votre équipe d'assistance",
1407
+ "completed": "Affichage des instructions de signalement de bogues",
1408
+ "instructions": "Suivez les instructions ci-dessus pour signaler le bug."
1409
1409
  },
1410
1410
  "mainMenu": {
1411
- "title": "Menu principal :",
1412
- "uiSettings": "Paramètres UI",
1413
- "uiSettingsDesc": "Langue, thème et options dinterface",
1414
- "directorySettings": "Paramètres des répertoires",
1411
+ "title": "Menu principal :",
1412
+ "uiSettings": "Paramètres de l'interface utilisateur",
1413
+ "uiSettingsDesc": "Options de langue, de thème et d'interface",
1414
+ "directorySettings": "Paramètres du répertoire",
1415
1415
  "directorySettingsDesc": "Chemins des répertoires source et de sortie",
1416
1416
  "processingSettings": "Paramètres de traitement",
1417
- "processingSettingsDesc": "Taille des lots, concurrence et performances",
1417
+ "processingSettingsDesc": "Taille du lot, simultanéité et performances",
1418
1418
  "advancedSettings": "Paramètres avancés",
1419
- "advancedSettingsDesc": "Validation, journalisation et options expertes",
1419
+ "advancedSettingsDesc": "Options de validation, de journalisation et d'experts",
1420
1420
  "viewAllSettings": "Afficher tous les paramètres",
1421
1421
  "viewAllSettingsDesc": "Afficher la configuration actuelle",
1422
1422
  "importExport": "Importer/Exporter",
1423
- "updatePackage": "Mettre à jour le paquet",
1424
- "updatePackageDesc": "Mettre à jour le paquet i18n-toolkit via npm",
1425
- "importExportDesc": "Sauvegarder et restaurer les paramètres",
1423
+ "updatePackage": "Package de mise à jour",
1424
+ "updatePackageDesc": "Mettez à jour le package i18n-toolkit via npm",
1425
+ "importExportDesc": "Paramètres de sauvegarde et de restauration",
1426
1426
  "resetToDefaults": "Réinitialiser aux valeurs par défaut",
1427
- "resetToDefaultsDesc": "Restaurer les paramètres dusine",
1427
+ "resetToDefaultsDesc": "Restaurer les paramètres d'usine",
1428
1428
  "reportBug": "Signaler un bug",
1429
- "reportBugDesc": "Signaler tout problème ou bogue rencontré",
1429
+ "reportBugDesc": "Soumettre un rapport de problème sur GitHub",
1430
1430
  "saveChanges": "Enregistrer les modifications",
1431
- "saveChangesDesc": "Enregistrer la configuration actuelle dans un fichier",
1431
+ "saveChangesDesc": "Enregistrer les paramètres actuels dans un fichier",
1432
1432
  "help": "Aide",
1433
- "helpDesc": "Afficher des informations daide détaillées",
1433
+ "helpDesc": "Afficher des informations d'aide détaillées",
1434
1434
  "quit": "Quitter",
1435
- "quitDesc": "Quitter les paramètres (avec invite d’enregistrement si nécessaire)",
1436
- "unsavedChangesWarning": "⚠️ Vous avez des modifications non enregistrées",
1437
- "saveChangesBeforeQuit": "Voulez-vous enregistrer les modifications avant de quitter ? (y/N) :",
1438
- "selectOption": "Sélectionnez une option :",
1439
- "goodbyeMessage": "Merci d’avoir utilisé le gestionnaire de paramètres i18n !",
1440
- "selectSettingPrompt": "Sélectionnez un paramètre à modifier (ou 'b' pour revenir) :",
1441
- "enterNewValue": "Entrez la nouvelle valeur :",
1442
- "updatedSuccessfully": "{setting} mis à jour avec succès !",
1443
- "scriptDirectorySettings": "Paramètres des répertoires de scripts",
1435
+ "quitDesc": "Quitter les paramètres (avec invite de sauvegarde si nécessaire)",
1436
+ "unsavedChangesWarning": "⚠️ Vous avez des modifications non enregistrées",
1437
+ "saveChangesBeforeQuit": "Voulez-vous enregistrer les modifications avant de quitter ? (o/N) :",
1438
+ "selectOption": "Sélectionnez une option :",
1439
+ "goodbyeMessage": "Merci d'utiliser le gestionnaire de paramètres i18n !",
1440
+ "selectSettingPrompt": "Sélectionnez un paramètre à modifier (ou « b » pour revenir en arrière) :",
1441
+ "enterNewValue": "Entrez une nouvelle valeur :",
1442
+ "updatedSuccessfully": "{setting} mis à jour avec succès !",
1443
+ "scriptDirectorySettings": "Paramètres du répertoire de scripts",
1444
1444
  "scriptDirectoryDesc": "Spécifiez des répertoires personnalisés pour chaque script",
1445
- "scriptDirectorySettingsDesc": "Vous pouvez définir des répertoires personnalisés pour chaque script. Si non défini, les paramètres globaux seront utilisés.",
1446
- "currentDirectory": "Répertoire de projet actuel",
1447
- "securitySettings": "Paramètres de Sécurité",
1448
- "securitySettingsDesc": "Paramètres de sécurité, y compris la protection PIN",
1445
+ "scriptDirectorySettingsDesc": "Vous pouvez définir des répertoires personnalisés pour chaque script. S’ils ne sont pas définis, les paramètres globaux seront utilisés.",
1446
+ "currentDirectory": "Répertoire du projet actuel",
1447
+ "securitySettings": "Paramètres de sécurité",
1448
+ "securitySettingsDesc": "Code PIN administrateur et autres options de sécurité",
1449
1449
  "backupSettings": "Paramètres de sauvegarde",
1450
- "backupSettingsDesc": "Configurer les paramètres de sauvegarde automatique pour vos fichiers de traduction"
1450
+ "backupSettingsDesc": "Sauvegarder et restaurer les paramètres de configuration"
1451
1451
  },
1452
1452
  "updatePackage": {
1453
- "title": "Mettre à jour le paquet",
1454
- "description": "Mettre à jour le paquet i18n-toolkit via npm",
1455
- "command": "npm update i18ntk -g",
1453
+ "title": "Package de mise à jour",
1454
+ "description": "Mettez à jour le package i18n-toolkit via npm",
1455
+ "command": "npm mise à jour i18ntk -g",
1456
1456
  "success": "Mise à jour terminée avec succès.",
1457
- "failed": "Échec de la mise à jour.",
1458
- "prompt": "Voulez-vous mettre à jour le paquet maintenant ? (y/N) :",
1459
- "promptDesc": "Remarque : cela mettra à jour le paquet i18ntk vers la dernière version.",
1457
+ "failed": "La mise à jour a échoué.",
1458
+ "prompt": "Voulez-vous mettre à jour le package maintenant ? (o/N) :",
1459
+ "promptDesc": "Remarque : Cela mettra à jour le package i18ntk vers la dernière version.",
1460
1460
  "confirm": "oui",
1461
1461
  "cancelled": "Mise à jour annulée.",
1462
1462
  "error": "Échec de la mise à jour du package",
1463
1463
  "updating": "Mise à jour du package..."
1464
1464
  },
1465
1465
  "admin": {
1466
- "selectOption": "Sélectionnez une option :",
1467
- "updateSuccess": "PIN admin mis à jour avec succès !",
1468
- "updateFailed": "Échec de la mise à jour du PIN admin.",
1469
- "protectionRemoved": "Protection PIN admin supprimée.",
1470
- "configSuccess": "PIN admin configuré avec succès !",
1471
- "configFailed": "Échec de la configuration du PIN admin.",
1472
- "setupPinPrompt": "Voulez-vous configurer un PIN admin ? (y/N) :",
1473
- "pinUpdatedSuccess": "PIN admin mis à jour avec succès !",
1474
- "pinUpdatedFailed": "Échec de la mise à jour du PIN admin.",
1475
- "pinRemoved": "Protection PIN admin supprimée.",
1476
- "pinConfiguredSuccess": "PIN admin configuré avec succès !",
1477
- "pinConfiguredFailed": "Échec de la configuration du PIN admin.",
1466
+ "selectOption": "Sélectionnez l'option :",
1467
+ "updateSuccess": "Code PIN administrateur mis à jour avec succès !",
1468
+ "updateFailed": "Échec de la mise à jour du code PIN administrateur.",
1469
+ "protectionRemoved": "Protection par code PIN administrateur supprimée.",
1470
+ "configSuccess": "PIN administrateur configuré avec succès !",
1471
+ "configFailed": "Échec de la configuration du code PIN administrateur.",
1472
+ "setupPinPrompt": "Souhaitez-vous configurer un code PIN administrateur ? (o/N) :",
1473
+ "pinUpdatedSuccess": "Code PIN administrateur mis à jour avec succès !",
1474
+ "pinUpdatedFailed": "Échec de la mise à jour du code PIN administrateur.",
1475
+ "pinRemoved": "Protection par code PIN administrateur supprimée.",
1476
+ "pinConfiguredSuccess": "PIN administrateur configuré avec succès !",
1477
+ "pinConfiguredFailed": "Échec de la configuration du code PIN administrateur.",
1478
1478
  "accessDenied": "❌ Accès refusé. Retour au menu.",
1479
- "setupPin": "🔐 Configuration du PIN admin…",
1480
- "setupFailed": "❌ Échec de la configuration du PIN admin. Paramètre non modifié.",
1481
- "pinConfigured": "📌 PIN admin actuellement configuré.",
1482
- "options": "Options :",
1483
- "changePin": "1) Modifier le PIN existant",
1484
- "removePin": "2) Supprimer la protection PIN",
1479
+ "setupPin": "🔐 Configuration du code PIN administrateur...",
1480
+ "setupFailed": "❌ Échec de la configuration du code PIN administrateur. Paramètre non modifié.",
1481
+ "pinConfigured": "📌 Le code PIN administrateur est actuellement configuré.",
1482
+ "options": "Possibilités :",
1483
+ "changePin": "1) Modifier le code PIN existant",
1484
+ "removePin": "2) Supprimer la protection par code PIN",
1485
1485
  "cancel": "3) Annuler",
1486
- "verifyCurrentPin": "🔐 Vérifiez dabord le PIN actuel :",
1487
- "settingNewPin": "🔄 Configuration du nouveau PIN",
1488
- "verifyToRemove": "🔐 Vérifiez le PIN actuel pour supprimer la protection :",
1489
- "noPinConfigured": "🔓 Aucun PIN admin configuré.",
1490
- "pinBenefits": "La configuration d’un PIN admin ajoutera de la sécurité pour :",
1486
+ "verifyCurrentPin": "🔐 Vérifiez d'abord le code PIN actuel :",
1487
+ "settingNewPin": "🔄 Configuration d'un nouveau code PIN...",
1488
+ "verifyToRemove": "🔐 Vérifiez le code PIN actuel pour supprimer la protection :",
1489
+ "noPinConfigured": "🔓 Aucun code PIN administrateur n'est actuellement configuré.",
1490
+ "pinBenefits": "La configuration du code PIN administrateur ajoutera de la sécurité pour :",
1491
1491
  "benefitSecurity": "• Modification des paramètres de sécurité",
1492
1492
  "benefitAdvanced": "• Modification des configurations avancées",
1493
- "benefitDebug": "• Accès aux outils de débogage",
1493
+ "benefitDebug": "• Accéder aux outils de débogage",
1494
1494
  "benefitReset": "• Réinitialisation des paramètres",
1495
- "setupCancelled": "⏭️ Configuration du PIN admin annulée.",
1496
- "operationCancelled": "❌ Opération annulée.",
1497
- "startingSettings": "🎛️ Démarrage du CLI des paramètres",
1498
- "authRequired": "🔒 Authentification admin requise pour : {label}",
1499
- "pinSetupTitle": "Configuration du PIN admin",
1500
- "browserOpenFailed": "Impossible douvrir automatiquement le navigateur.",
1501
- "manualVisit": "Veuillez visiter manuellement : {url}",
1502
- "browserOpened": "✅ Navigateur ouvert avec succès !"
1495
+ "setupCancelled": "⏭️ Configuration du code PIN administrateur annulée.",
1496
+ "operationCancelled": "❌Opération annulée.",
1497
+ "startingSettings": "🎛️ Démarrage de la CLI des paramètres...",
1498
+ "authRequired": "🔒 Authentification administrateur requise pour : {label}",
1499
+ "pinSetupTitle": "Configuration du code PIN administrateur",
1500
+ "browserOpenFailed": "Impossible d'ouvrir automatiquement le navigateur.",
1501
+ "manualVisit": "Veuillez visiter manuellement : {url}",
1502
+ "browserOpened": "✅ Navigateur ouvert avec succès !"
1503
1503
  },
1504
1504
  "importExport": {
1505
- "title": "Importation et exportation",
1506
- "export": "Exportation",
1507
- "import": "Importation",
1508
- "backup": "Sauvegarde",
1509
- "enterFilename": "Entrez le nom de fichier (ou appuyez sur Entrée pour défaut) :",
1505
+ "title": "Paramètres d'importation/exportation",
1506
+ "export": "Paramètres d'exportation",
1507
+ "import": "Paramètres d'importation",
1508
+ "backup": "Créer une sauvegarde",
1509
+ "enterFilename": "Entrez le nom du fichier (ou appuyez sur Entrée par défaut) :",
1510
1510
  "exportSuccess": "Paramètres exportés vers {file}",
1511
- "exportFailed": "Échec de l’export des paramètres : {error}",
1512
- "importFilename": "Entrez le nom du fichier à importer :",
1511
+ "exportFailed": "Échec de l'exportation des paramètres : {error}",
1512
+ "importFilename": "Entrez le nom du fichier à importer :",
1513
1513
  "fileNotFound": "Fichier introuvable.",
1514
- "invalidFormat": "Format de fichier de paramètres invalide.",
1515
- "confirmImport": "Ceci remplacera tous les paramètres actuels. Continuer ? (y/N) :",
1514
+ "invalidFormat": "Format de fichier de paramètres non valide.",
1515
+ "confirmImport": "Cela remplacera tous les paramètres actuels. Continuer? (o/N) :",
1516
1516
  "importSuccess": "Paramètres importés avec succès.",
1517
- "importFailed": "Échec de l’import des paramètres : {error}",
1518
- "backupSuccess": "Sauvegarde créée : {file}",
1519
- "backupFailed": "Échec de la création de la sauvegarde : {error}",
1517
+ "importFailed": "Échec de l'importation des paramètres : {error}",
1518
+ "backupSuccess": "Sauvegarde créée : {file}",
1519
+ "backupFailed": "Échec de la création de la sauvegarde : {error}",
1520
1520
  "exportFilenamePrompt": "Entrez le nom du fichier d'exportation :",
1521
1521
  "importConfirm": "Importer ce fichier de paramètres ? (o/N) :",
1522
1522
  "importFilenamePrompt": "Entrez le nom du fichier d'importation :",
1523
1523
  "manageBackups": "Gérer les sauvegardes",
1524
1524
  "restore": "Restaurer les paramètres"
1525
1525
  },
1526
- "selectOption": "Sélectionnez une option :",
1527
- "resetToDefaultsTitle": "Réinitialiser les paramètres à leurs valeurs par défaut",
1528
- "resetWarning1": "⚠️ Attention : Cette action réinitialisera tous les paramètres à leurs valeurs par défaut. Êtes-vous sûr de vouloir continuer ?",
1529
- "resetWarning2": "⚠️ Attention : Cette action réinitialisera tous les paramètres à leurs valeurs par défaut. Êtes-vous sûr de vouloir continuer ?",
1530
- "resetConfirm": "Confirmez-vous la réinitialisation des paramètres ? (y/N) :",
1531
- "resetSuccess": "Paramètres réinitialisés aux valeurs par défaut avec succès.",
1532
- "resetFailed": "Échec de la réinitialisation des paramètres : {error}",
1533
- "resetDone": "Paramètres réinitialisés aux valeurs par défaut avec succès.",
1534
- "resetScriptDirsDone": "Répertoires de scripts réinitialisés aux valeurs par défaut du système avec succès.",
1526
+ "selectOption": "Sélectionnez une option :",
1527
+ "resetToDefaultsTitle": "Réinitialiser les paramètres aux valeurs par défaut",
1528
+ "resetWarning1": "⚠️ Cela réinitialisera TOUS les paramètres à leurs valeurs par défaut.",
1529
+ "resetWarning2": "Cette action ne peut pas être annulée.",
1530
+ "resetConfirm": "Êtes-vous sûr de vouloir continuer ? (o/N) :",
1531
+ "resetSuccess": "Les paramètres ont été réinitialisés avec succès aux valeurs par défaut.",
1532
+ "resetFailed": "Échec de la réinitialisation des paramètres : {error}",
1533
+ "resetDone": "Les paramètres ont été réinitialisés avec succès aux valeurs par défaut.",
1534
+ "resetScriptDirsDone": "Les répertoires de scripts ont été réinitialisés avec succès aux valeurs par défaut du système.",
1535
1535
  "saveSuccess": "Paramètres enregistrés avec succès.",
1536
- "saveFailed": "Échec de lenregistrement des paramètres.",
1537
- "saveError": "Erreur lors de l’enregistrement des paramètres : {error}",
1538
- "pressEnter": "Appuyez sur Entrée pour continuer",
1539
- "initFailed": "Échec de linitialisation des paramètres : {error}",
1536
+ "saveFailed": "Échec de l'enregistrement des paramètres.",
1537
+ "saveError": "Paramètres fournis non valides",
1538
+ "pressEnter": "Appuyez sur Entrée pour continuer...",
1539
+ "initFailed": "Échec de l'initialisation des paramètres : {error}",
1540
1540
  "invalidValueFormat": "Format de valeur invalide.",
1541
1541
  "help": {
1542
1542
  "title": "Aide sur les paramètres",
1543
1543
  "navigationTitle": "Navigation",
1544
- "navigation1": "1. Paramètres généraux Configurer la langue UI, le thème et les préférences de base",
1545
- "navigation2": "2. Paramètres des répertoires Définir les répertoires source et de sortie pour les fichiers de traduction",
1546
- "navigation3": "3. Paramètres de traitement Configurer la taille des lots, la concurrence et les options de performance",
1547
- "navigation4": "4. Paramètres avancés Accéder à la validation, la journalisation et la configuration experte",
1544
+ "navigation1": "1. Paramètres généraux - Configurer la langue, le thème et les préférences de base de l'interface utilisateur",
1545
+ "navigation2": "2. Paramètres du répertoire - Définir les répertoires source et de sortie pour les fichiers de traduction",
1546
+ "navigation3": "3. Paramètres de traitement - Configurer les options de taille de lot, de concurrence et de performances",
1547
+ "navigation4": "4. Paramètres avancés - Accédez aux options de validation, de journalisation et de configuration experte",
1548
1548
  "categoriesTitle": "Catégories de paramètres",
1549
- "categoryUI": "• Paramètres UI : Langue de linterface, thème couleur et préférences daffichage",
1550
- "categoryDirectory": "• Paramètres des répertoires : Emplacement des fichiers source et répertoires de rapports",
1551
- "categoryProcessing": "• Paramètres de traitement : Traitement par lots, limites de fichiers et réglage des performances",
1552
- "categoryAdvanced": "• Paramètres avancés : Mode débogage, journal daudit et options de sécurité",
1553
- "envVarsTitle": "Variables denvironnement",
1554
- "envVar1": "• I18N_SOURCE_DIR : Remplace le répertoire source par défaut",
1555
- "envVar2": "• I18N_OUTPUT_DIR : Remplace le répertoire de sortie par défaut",
1556
- "envVar3": "• I18N_DEBUG : Active le mode débogage (true/false)",
1557
- "cliUsageTitle": "Exemples dutilisation CLI",
1558
- "cliUsage1": "• npx i18ntk --settings : Ouvre le menu interactif des paramètres",
1559
- "cliUsage2": "• npx i18ntk --settings --lang de : Ouvre les paramètres en allemand",
1560
- "cliUsage3": "• npx i18ntk --reset-settings : Réinitialise tous les paramètres aux valeurs par défaut",
1561
- "navigation": "Utilisez les touches numériques pour sélectionner, 'b' pour revenir",
1562
- "editing": "Entrez de nouvelles valeurs ou appuyez sur Entrée pour conserver",
1563
- "saving": "Utilisez 's' pour enregistrer avant de quitter",
1564
- "reset": "Utilisez loption 7 pour réinitialiser tous les paramètres"
1549
+ "categoryUI": "• Paramètres de l'interface utilisateur : langue de l'interface, thème de couleur et préférences d'affichage.",
1550
+ "categoryDirectory": "• Paramètres du répertoire : emplacement des fichiers source et répertoires du rapport de sortie",
1551
+ "categoryProcessing": "• Paramètres de traitement : traitement par lots, limites de fichiers et réglage des performances",
1552
+ "categoryAdvanced": "• Paramètres avancés : mode débogage, journalisation d'audit et options de sécurité",
1553
+ "envVarsTitle": "Variables d'environnement",
1554
+ "envVar1": "• I18N_SOURCE_DIR : remplace le chemin du répertoire source par défaut.",
1555
+ "envVar2": "• I18N_OUTPUT_DIR : remplace le chemin du répertoire de sortie par défaut.",
1556
+ "envVar3": "• I18N_DEBUG : activer le mode débogage (vrai/faux)",
1557
+ "cliUsageTitle": "Exemples d'utilisation de la CLI",
1558
+ "cliUsage1": "• npx i18ntk --settings : ouvrir le menu des paramètres interactifs",
1559
+ "cliUsage2": "• npx i18ntk --settings --lang de : ouvrir les paramètres en allemand",
1560
+ "cliUsage3": "• npx i18ntk --reset-settings : réinitialiser tous les paramètres par défaut",
1561
+ "navigation": "Utilisez les touches numériques pour sélectionner les options, « b » pour revenir en arrière",
1562
+ "editing": "Entrez de nouvelles valeurs lorsque vous y êtes invité ou appuyez sur Entrée pour conserver les valeurs actuelles.",
1563
+ "saving": "Utilisez « s » pour enregistrer les modifications avant de quitter",
1564
+ "reset": "Utilisez l'option 7 pour réinitialiser tous les paramètres aux valeurs par défaut"
1565
1565
  },
1566
1566
  "categories": {
1567
- "uiSettings": "Paramètres UI",
1568
- "directorySettings": "Paramètres des répertoires",
1567
+ "uiSettings": "Paramètres de l'interface utilisateur",
1568
+ "directorySettings": "Paramètres du répertoire",
1569
1569
  "processingSettings": "Paramètres de traitement",
1570
1570
  "advancedSettings": "Paramètres avancés",
1571
- "scriptDirectorySettings": "Paramètres des répertoires de scripts",
1571
+ "scriptDirectorySettings": "Paramètres du répertoire de scripts",
1572
1572
  "securitySettings": "Paramètres de sécurité"
1573
1573
  },
1574
1574
  "security": {
1575
1575
  "title": "🔐 Paramètres de sécurité",
1576
- "description": "Configurer la protection PIN admin et les options de sécurité",
1577
- "currentPin": "PIN actuel :",
1576
+ "description": "Configurer les options de protection et de sécurité du code PIN administrateur",
1577
+ "currentPin": "Code PIN actuel :",
1578
1578
  "pinConfigured": "✅ Configuré",
1579
1579
  "pinNotConfigured": "❌ Non configuré",
1580
- "pinDisplay": "Affichage du PIN :",
1580
+ "pinDisplay": "Affichage du code PIN :",
1581
1581
  "menu": {
1582
- "enableDisable": "1) Activer/Désactiver le PIN admin",
1583
- "setupChange": "2) Configurer/Modifier le PIN admin",
1584
- "sessionTimeout": "3) Délai d’expiration de session",
1585
- "maxAttempts": "4) Tentatives max échouées",
1586
- "lockoutDuration": "5) Durée de verrouillage",
1582
+ "enableDisable": "1) Activer/Désactiver le code PIN administrateur",
1583
+ "setupChange": "2) Configurer/Modifier le code PIN administrateur",
1584
+ "sessionTimeout": "3) Expiration de la session",
1585
+ "maxAttempts": "4) Nombre maximal de tentatives infructueuses",
1586
+ "lockoutDuration": "5) Durée du verrouillage",
1587
1587
  "back": "b) Retour au menu principal"
1588
1588
  },
1589
1589
  "prompts": {
1590
- "enablePin": "Activer la protection PIN admin ? (y/N) :",
1591
- "disablePin": "Désactiver la protection PIN admin ? (y/N) :",
1592
- "enterTimeout": "Entrez le délai dexpiration de session (minutes) :",
1593
- "enterMaxAttempts": "Entrez le nombre max de tentatives échouées :",
1594
- "enterLockoutDuration": "Entrez la durée de verrouillage (minutes) :"
1590
+ "enablePin": "Activer la protection par code PIN administrateur ? (o/N) :",
1591
+ "disablePin": "Désactiver la protection du code PIN administrateur ? (o/N) :",
1592
+ "enterTimeout": "Entrez le délai d'expiration de la session (minutes) :",
1593
+ "enterMaxAttempts": "Saisissez le nombre maximal de tentatives infructueuses :",
1594
+ "enterLockoutDuration": "Entrez la durée du verrouillage (minutes) :"
1595
1595
  },
1596
1596
  "messages": {
1597
- "pinEnabled": "Protection PIN admin activée",
1598
- "pinDisabled": "Protection PIN admin désactivée",
1599
- "timeoutUpdated": "Délai dexpiration mis à jour à {minutes} minutes",
1600
- "maxAttemptsUpdated": "Tentatives max échouées mis à jour à {attempts}",
1601
- "lockoutDurationUpdated": "Durée de verrouillage mise à jour à {minutes} minutes"
1597
+ "pinEnabled": "Protection par code PIN administrateur activée",
1598
+ "pinDisabled": "Protection par code PIN administrateur désactivée",
1599
+ "timeoutUpdated": "Délai d'expiration de la session mis à jour à {minutes} minutes",
1600
+ "maxAttemptsUpdated": "Nombre maximal de tentatives infructueuses mis à jour : {attempts}",
1601
+ "lockoutDurationUpdated": "Durée du verrouillage mise à jour à {minutes} minutes"
1602
1602
  }
1603
1603
  },
1604
1604
  "fields": {
1605
- "backup": {
1606
- "enabled": {
1607
- "label": "Activer la sauvegarde",
1608
- "description": "Activer la sauvegarde automatique des paramètres",
1609
- "help": "Activer/désactiver la fonction de sauvegarde"
1610
- },
1611
- "singleFileMode": {
1612
- "label": "Mode fichier unique",
1613
- "description": "Utiliser un seul fichier pour les sauvegardes",
1614
- "help": "Sauvegarder les paramètres dans un seul fichier"
1615
- },
1616
- "singleBackupFile": {
1617
- "label": "Chemin de sauvegarde",
1618
- "description": "Chemin vers le fichier de sauvegarde",
1619
- "help": "Chemin vers le fichier de sauvegarde unique"
1620
- },
1621
- "retentionDays": {
1622
- "label": "Période de conservation",
1623
- "description": "Jours à conserver les fichiers de sauvegarde",
1624
- "help": "Nombre de jours à conserver les fichiers de sauvegarde"
1625
- },
1626
- "maxBackups": {
1627
- "label": "Nombre maximum de sauvegardes",
1628
- "description": "Nombre maximum de fichiers de sauvegarde à conserver",
1629
- "help": "Nombre maximum de fichiers de sauvegarde à conserver"
1630
- },
1631
- "confirm": {
1632
- "label": "Confirmer la sauvegarde",
1633
- "description": "Requiert une confirmation pour les opérations de sauvegarde",
1634
- "help": "Confirmer l'opération de sauvegarde"
1635
- }
1605
+ "backup.enabled": {
1606
+ "label": "Enable Backup",
1607
+ "description": "Enable automatic backup of settings",
1608
+ "help": "Enable/disable backup feature"
1609
+ },
1610
+ "backup.singleFileMode": {
1611
+ "label": "Single File Mode",
1612
+ "description": "Use single file for backups",
1613
+ "help": "Backup settings in a single file"
1614
+ },
1615
+ "backup.singleBackupFile": {
1616
+ "label": "Backup File Path",
1617
+ "description": "Path to the backup file",
1618
+ "help": "Path to the single backup file"
1619
+ },
1620
+ "backup.retentionDays": {
1621
+ "label": "Retention Period",
1622
+ "description": "Days to keep backup files",
1623
+ "help": "Number of days to retain old backup files"
1624
+ },
1625
+ "backup.maxBackups": {
1626
+ "label": "Maximum Backups",
1627
+ "description": "Maximum backup files to keep",
1628
+ "help": "Maximum number of backup files to keep"
1629
+ },
1630
+ "backup.confirm": {
1631
+ "label": "Confirm Backup",
1632
+ "description": "Require confirmation for backup operations",
1633
+ "help": "Confirm backup operation"
1636
1634
  },
1637
1635
  "i18nDir": {
1638
- "label": "Répertoire I18n",
1636
+ "label": "Annuaire I18n",
1639
1637
  "description": "Répertoire contenant les fichiers de traduction",
1640
- "current": "Actuel : {value}",
1641
- "help": "Chemin vers le répertoire des fichiers de traduction"
1638
+ "current": "Actuel: {value}",
1639
+ "help": "Chemin d'accès au répertoire contenant les fichiers de traduction"
1642
1640
  },
1643
1641
  "projectRoot": {
1644
1642
  "label": "Racine du projet",
1645
1643
  "description": "Répertoire racine du projet",
1646
- "current": "Actuel : {value}",
1647
- "help": "Chemin vers le répertoire racine du projet"
1644
+ "current": "Actuel: {value}",
1645
+ "help": "Chemin d'accès au répertoire racine du projet"
1648
1646
  },
1649
1647
  "checkUsage": {
1650
- "usage_analysis_failed": "L'analyse d'utilisation a échoué",
1651
- "usage_analysis_success": "L'analyse d'utilisation a réussi",
1652
- "usage_analysis_complete": "L'analyse d'utilisation est terminée",
1653
- "usage_analysis_in_progress": "L'analyse d'utilisation est en cours",
1654
- "usage_analysis_started": "L'analyse d'utilisation a démarré",
1655
- "usage_analysis_skipped": "L'analyse d'utilisation a été ignorée"
1648
+ "usage_analysis_failed": "L'analyse de l'utilisation a échoué",
1649
+ "usage_analysis_success": "Analyse d'utilisation réussie",
1650
+ "usage_analysis_complete": "Analyse d'utilisation terminée",
1651
+ "usage_analysis_in_progress": "Analyse d'utilisation en cours",
1652
+ "usage_analysis_started": "L'analyse de l'utilisation a commencé",
1653
+ "usage_analysis_skipped": "Analyse d'utilisation ignorée"
1656
1654
  },
1657
1655
  "language": {
1658
- "label": "Langue de linterface",
1659
- "description": "Langue de linterface utilisateur",
1660
- "current": "Actuelle : {value}",
1661
- "help": "Sélectionnez votre langue dinterface préférée"
1656
+ "label": "Langue de l'interface",
1657
+ "description": "Langue de l'interface utilisateur",
1658
+ "current": "Actuel: {value}",
1659
+ "help": "Sélectionnez votre langue d'interface préférée"
1662
1660
  },
1663
1661
  "scriptDirectories": {
1664
- "analyzeLabel": "Répertoires du script d’analyse",
1665
- "analyzeHelp": "Analyse des répertoires de scripts pour détection de problèmes",
1666
- "completeLabel": "Répertoires du script de complétion",
1667
- "initLabel": "Répertoires du script d’initialisation",
1668
- "manageLabel": "Répertoires du script de gestion",
1669
- "sizingLabel": "Répertoires du script de dimensionnement",
1670
- "summaryLabel": "Répertoires du script de rapport résumé",
1671
- "usageLabel": "Répertoires du script de rapport dutilisation",
1672
- "validateLabel": "Répertoires du script de validation"
1662
+ "analyzeLabel": "Analyser les répertoires de scripts",
1663
+ "analyzeHelp": "Analyser les répertoires de scripts pour détecter les problèmes",
1664
+ "completeLabel": "Répertoires d'installation complets",
1665
+ "initLabel": "Initialiser les répertoires de scripts",
1666
+ "manageLabel": "Gérer les répertoires de scripts",
1667
+ "sizingLabel": "Dimensionnement des répertoires de scripts",
1668
+ "summaryLabel": "Répertoires des rapports récapitulatifs",
1669
+ "usageLabel": "Répertoires des rapports d'utilisation",
1670
+ "validateLabel": "Valider les répertoires de scripts"
1673
1671
  },
1674
1672
  "theme": {
1675
1673
  "label": "Thème de couleur",
1676
- "description": "Préférence de thème UI",
1677
- "current": "Actuel : {value}",
1678
- "help": "Choisissez entre clair et sombre"
1674
+ "description": "Préférence du thème de l'interface utilisateur",
1675
+ "current": "Actuel: {value}",
1676
+ "help": "Choisissez entre des thèmes clairs et sombres"
1679
1677
  },
1680
1678
  "dateFormat": {
1681
- "label": "Format de date",
1682
- "description": "Format daffichage des dates",
1683
- "current": "Actuel : {value}",
1684
- "help": "Choisissez le format des dates dans les rapports"
1679
+ "label": "Format des dates",
1680
+ "description": "Format d'affichage des dates",
1681
+ "current": "Actuel: {value}",
1682
+ "help": "Choisir la manière dont les dates sont affichées dans les rapports"
1685
1683
  },
1686
1684
  "notifications": {
1687
1685
  "enabled": {
1688
1686
  "label": "Activer les notifications",
1689
- "description": "Afficher des notifications de bureau",
1690
- "current": "Actuel : {value}",
1691
- "help": "Activer les notifications à la fin des opérations"
1687
+ "description": "Afficher les notifications sur le bureau",
1688
+ "current": "Actuel: {value}",
1689
+ "help": "Activer les notifications sur le bureau pour les opérations terminées"
1692
1690
  }
1693
1691
  },
1694
1692
  "sourceDir": {
1695
1693
  "label": "Répertoire source",
1696
1694
  "description": "Répertoire contenant les fichiers de traduction",
1697
- "current": "Actuel : {value}",
1698
- "help": "Chemin vers le répertoire des fichiers de traduction source"
1695
+ "current": "Actuel: {value}",
1696
+ "help": "Chemin d'accès au répertoire contenant les fichiers de traduction sources"
1699
1697
  },
1700
1698
  "sourceLanguage": {
1701
1699
  "label": "Langue source",
1702
1700
  "description": "Langue principale pour les traductions",
1703
- "current": "Actuelle : {value}",
1704
- "help": "Langue utilisée comme source pour les traductions"
1701
+ "current": "Actuel: {value}",
1702
+ "help": "La langue principale utilisée comme source pour les traductions"
1705
1703
  },
1706
1704
  "outputDir": {
1707
1705
  "label": "Répertoire de sortie",
1708
- "description": "Répertoire pour les rapports générés",
1709
- "current": "Actuel : {value}",
1710
- "help": "Où seront enregistrés les rapports et fichiers traités"
1706
+ "description": "Répertoire des rapports générés",
1707
+ "current": "Actuel: {value}",
1708
+ "help": "Où les rapports et les fichiers traités seront enregistrés"
1711
1709
  },
1712
1710
  "batchSize": {
1713
1711
  "label": "Taille du lot",
1714
- "description": "Nombre d’éléments traités par lot",
1715
- "current": "Actuel : {value}",
1716
- "help": "Nombre de fichiers traités par lot"
1712
+ "description": "Nombre d'articles traités par lot",
1713
+ "current": "Actuel: {value}",
1714
+ "help": "Combien de fichiers traiter dans chaque lot"
1717
1715
  },
1718
1716
  "maxConcurrentFiles": {
1719
- "label": "Fichiers max concurrents",
1720
- "description": "Nombre max de fichiers traités simultanément",
1721
- "current": "Actuel : {value}",
1722
- "help": "Nombre max de fichiers à traiter en même temps"
1717
+ "label": "Nombre maximum de fichiers simultanés",
1718
+ "description": "Nombre maximum de fichiers traités simultanément",
1719
+ "current": "Actuel: {value}",
1720
+ "help": "Nombre maximum de fichiers à traiter en même temps"
1723
1721
  },
1724
1722
  "sizingThreshold": {
1725
1723
  "label": "Seuil de dimensionnement (%)",
1726
- "description": "Seuil d’avertissement pour variation de taille",
1727
- "current": "Actuel : {value}%",
1728
- "help": "Pourcentage pour détecter les incohérences de taille"
1724
+ "description": "Seuil pour les avertissements de variation de taille",
1725
+ "current": "Actuel: {value}%",
1726
+ "help": "Seuil de pourcentage pour détecter les inadéquations de taille"
1729
1727
  },
1730
1728
  "strictMode": {
1731
1729
  "label": "Mode de validation strict",
1732
- "description": "Activer le mode de validation strict",
1733
- "current": "Actuel : {value}",
1734
- "help": "Activer la validation stricte des fichiers de traduction"
1730
+ "description": "Activer le mode de validation stricte",
1731
+ "current": "Actuel: {value}",
1732
+ "help": "Activer une validation stricte pour les fichiers de traduction"
1735
1733
  },
1736
1734
  "enableAuditLog": {
1737
- "label": "Activer le journal daudit",
1738
- "description": "Suivre toutes les modifications de traduction",
1739
- "current": "Actuel : {value}",
1740
- "help": "Journaliser tous les changements apportés aux fichiers de traduction"
1735
+ "label": "Activer le journal d'audit",
1736
+ "description": "Suivez toutes les modifications de traduction",
1737
+ "current": "Actuel: {value}",
1738
+ "help": "Enregistrez toutes les modifications apportées aux fichiers de traduction"
1741
1739
  },
1742
1740
  "backupBeforeChanges": {
1743
1741
  "label": "Sauvegarde automatique",
1744
- "description": "Créer des sauvegardes avant modifications",
1745
- "current": "Actuel : {value}",
1746
- "help": "Créer automatiquement des sauvegardes avant chaque modification"
1742
+ "description": "Créer des sauvegardes avant les modifications",
1743
+ "current": "Actuel: {value}",
1744
+ "help": "Créez automatiquement des sauvegardes avant d'apporter des modifications"
1747
1745
  },
1748
1746
  "advanced_maxConcurrentFiles": {
1749
- "label": "Fichiers max concurrents",
1750
- "description": "Nombre max de fichiers traités simultanément",
1751
- "current": "Actuel : {value}",
1752
- "help": "Nombre max de fichiers à traiter en même temps"
1747
+ "label": "Nombre maximum de fichiers simultanés",
1748
+ "description": "Nombre maximum de fichiers traités simultanément",
1749
+ "current": "Actuel: {value}",
1750
+ "help": "Nombre maximum de fichiers à traiter en même temps"
1753
1751
  },
1754
1752
  "advanced_strictMode": {
1755
1753
  "label": "Mode de validation strict",
1756
- "description": "Activer le mode de validation strict",
1757
- "current": "Actuel : {value}",
1758
- "help": "Activer la validation stricte des fichiers de traduction"
1754
+ "description": "Activer le mode de validation stricte",
1755
+ "current": "Actuel: {value}",
1756
+ "help": "Activer une validation stricte pour les fichiers de traduction"
1759
1757
  },
1760
1758
  "adminPinEnabled": {
1761
- "label": "Protection PIN administrateur",
1762
- "description": "Activer l'authentification PIN administrateur pour les paramètres sensibles",
1763
- "current": "Actuel : {value}",
1764
- "help": "Exiger un PIN administrateur pour modifier les paramètres de sécurité et avancés"
1759
+ "label": "Protection du code PIN d'administrateur",
1760
+ "description": "Activer l'authentification par code PIN administrateur pour les paramètres sensibles",
1761
+ "current": "Actuel: {value}",
1762
+ "help": "Exiger un code PIN administrateur pour modifier les paramètres de sécurité et avancés"
1765
1763
  },
1766
1764
  "sessionTimeout": {
1767
- "label": "Délai d’expiration de session",
1768
- "description": "Délai dexpiration de la session admin en minutes",
1769
- "current": "Actuel : {value} minutes",
1770
- "help": "Durée de validité d’une session admin avant ré-authentification"
1765
+ "label": "Expiration de la session",
1766
+ "description": "Délai d'expiration de la session d'administration en minutes",
1767
+ "current": "Actuel: {value} minutes",
1768
+ "help": "Combien de temps les sessions d'administrateur restent actives avant de nécessiter une réauthentification"
1771
1769
  },
1772
1770
  "maxFailedAttempts": {
1773
- "label": "Tentatives max échouées",
1774
- "description": "Nombre max de tentatives PIN échouées avant verrouillage",
1775
- "current": "Actuel : {value}",
1776
- "help": "Nombre de tentatives échouées autorisées avant verrouillage temporaire"
1771
+ "label": "Nombre maximum de tentatives infructueuses",
1772
+ "description": "Nombre maximal de tentatives de code PIN ayant échoué avant le verrouillage",
1773
+ "current": "Actuel: {value} tentatives",
1774
+ "help": "Nombre de tentatives de code PIN échouées autorisées avant le verrouillage temporaire"
1777
1775
  },
1778
1776
  "lockoutDuration": {
1779
- "label": "Durée de verrouillage",
1780
- "description": "Durée du verrouillage après tentatives échouées",
1781
- "current": "Actuel : {value} minutes",
1782
- "help": "Durée de verrouillage après dépassement du nombre max de tentatives"
1777
+ "label": "Durée du verrouillage",
1778
+ "description": "Durée du verrouillage après des tentatives infructueuses",
1779
+ "current": "Actuel: {value} minutes",
1780
+ "help": "Combien de temps le système reste verrouillé après un maximum de tentatives infructueuses"
1783
1781
  },
1784
1782
  "scriptDirectories_analyze": {
1785
- "label": "Répertoires du script d’analyse",
1786
- "description": "Répertoires personnalisés pour le script danalyse",
1787
- "current": "Actuel : {value}",
1788
- "help": "Spécifiez le répertoire source pour le script danalyse. Laisser vide pour le paramètre global."
1783
+ "label": "Analyser les répertoires de scripts",
1784
+ "description": "Répertoires personnalisés pour le script d'analyse",
1785
+ "current": "Actuel: {value}",
1786
+ "help": "Spécifiez le répertoire source personnalisé pour le script d'analyse. Laissez vide pour utiliser le paramètre global."
1789
1787
  },
1790
1788
  "scriptDirectories_complete": {
1791
- "label": "Répertoires du script de complétion",
1792
- "description": "Répertoires personnalisés pour le script de complétion",
1793
- "current": "Actuel : {value}",
1794
- "help": "Spécifiez le répertoire source pour le script de complétion. Laisser vide pour le paramètre global."
1789
+ "label": "Répertoires d'installation complets",
1790
+ "description": "Répertoires personnalisés pour le script d'installation complet",
1791
+ "current": "Actuel: {value}",
1792
+ "help": "Spécifiez le répertoire source personnalisé pour le script d'installation complet. Laissez vide pour utiliser le paramètre global."
1795
1793
  },
1796
1794
  "scriptDirectories_init": {
1797
- "label": "Répertoires du script d’initialisation",
1798
- "description": "Répertoires personnalisés pour le script dinitialisation",
1799
- "current": "Actuel : {value}",
1800
- "help": "Spécifiez le répertoire source pour le script dinitialisation. Laisser vide pour le paramètre global."
1795
+ "label": "Initialiser les répertoires de scripts",
1796
+ "description": "Répertoires personnalisés pour le script d'initialisation",
1797
+ "current": "Actuel: {value}",
1798
+ "help": "Spécifiez le répertoire source personnalisé pour le script d'initialisation. Laissez vide pour utiliser le paramètre global."
1801
1799
  },
1802
1800
  "scriptDirectories_manage": {
1803
- "label": "Répertoires du script de gestion",
1801
+ "label": "Gérer les répertoires de scripts",
1804
1802
  "description": "Répertoires personnalisés pour le script de gestion",
1805
- "current": "Actuel : {value}",
1806
- "help": "Spécifiez le répertoire source pour le script de gestion. Laisser vide pour le paramètre global."
1803
+ "current": "Actuel: {value}",
1804
+ "help": "Spécifiez le répertoire source personnalisé pour le script de gestion. Laissez vide pour utiliser le paramètre global."
1807
1805
  },
1808
1806
  "scriptDirectories_sizing": {
1809
- "label": "Répertoires du script de dimensionnement",
1807
+ "label": "Dimensionnement des répertoires de scripts",
1810
1808
  "description": "Répertoires personnalisés pour le script de dimensionnement",
1811
- "current": "Actuel : {value}",
1812
- "help": "Spécifiez le répertoire source pour le script de dimensionnement. Laisser vide pour le paramètre global."
1809
+ "current": "Actuel: {value}",
1810
+ "help": "Spécifiez le répertoire source personnalisé pour le script de dimensionnement. Laissez vide pour utiliser le paramètre global."
1813
1811
  },
1814
1812
  "scriptDirectories_summary": {
1815
- "label": "Répertoires du rapport résumé",
1816
- "description": "Répertoires personnalisés pour le rapport résumé",
1817
- "current": "Actuel : {value}",
1818
- "help": "Spécifiez le répertoire source pour le rapport résumé. Laisser vide pour le paramètre global."
1813
+ "label": "Répertoires des rapports récapitulatifs",
1814
+ "description": "Répertoires personnalisés pour le script de rapport récapitulatif",
1815
+ "current": "Actuel: {value}",
1816
+ "help": "Spécifiez le répertoire source personnalisé pour le script du rapport récapitulatif. Laissez vide pour utiliser le paramètre global."
1819
1817
  },
1820
1818
  "scriptDirectories_usage": {
1821
- "label": "Répertoires du rapport dutilisation",
1822
- "description": "Répertoires personnalisés pour le rapport dutilisation",
1823
- "current": "Actuel : {value}",
1824
- "help": "Spécifiez le répertoire source pour le rapport dutilisation. Laisser vide pour le paramètre global."
1819
+ "label": "Répertoires des rapports d'utilisation",
1820
+ "description": "Répertoires personnalisés pour le script de rapport d'utilisation",
1821
+ "current": "Actuel: {value}",
1822
+ "help": "Spécifiez le répertoire source personnalisé pour le script de rapport d'utilisation. Laissez vide pour utiliser le paramètre global."
1825
1823
  },
1826
1824
  "scriptDirectories_validate": {
1827
- "label": "Répertoires du script de validation",
1828
- "description": "Répertoires personnalisés pour le script de validation",
1829
- "current": "Actuel : {value}",
1830
- "help": "Spécifiez le répertoire source pour le script de validation. Laisser vide pour le paramètre global."
1825
+ "label": "Valider les répertoires de scripts",
1826
+ "description": "Répertoires personnalisés pour valider le script",
1827
+ "current": "Actuel: {value}",
1828
+ "help": "Spécifiez le répertoire source personnalisé pour le script de validation. Laissez vide pour utiliser le paramètre global."
1831
1829
  },
1832
1830
  "security_adminPinEnabled": {
1833
- "label": "Protection PIN admin",
1834
- "description": "Activer lauthentification PIN admin pour les paramètres sensibles",
1835
- "current": "Actuel : {value}",
1836
- "help": "Exiger un PIN admin pour modifier les paramètres de sécurité et avancés"
1831
+ "label": "Protection du code PIN d'administrateur",
1832
+ "description": "Activer l'authentification par code PIN administrateur pour les paramètres sensibles",
1833
+ "current": "Actuel: {value}",
1834
+ "help": "Exiger un code PIN administrateur pour modifier les paramètres de sécurité et avancés"
1837
1835
  },
1838
1836
  "fields": {
1839
1837
  "adminPinEnabled": {
1840
- "label": "Protection PIN admin",
1841
- "description": "Activer lauthentification PIN admin pour les paramètres sensibles",
1842
- "help": "Exiger un PIN admin pour modifier les paramètres de sécurité et avancés"
1838
+ "label": "Protection du code PIN d'administrateur",
1839
+ "description": "Activer l'authentification par code PIN administrateur pour les paramètres sensibles",
1840
+ "help": "Exiger un code PIN administrateur pour modifier les paramètres de sécurité et avancés"
1843
1841
  }
1844
1842
  },
1845
1843
  "security_pinProtection_enabled": {
1846
- "label": "Protection PIN des scripts",
1847
- "description": "Activer l'authentification PIN pour l'exécution des scripts",
1848
- "current": "Actuel : {value}",
1849
- "help": "Exiger un PIN pour l'exécution des scripts"
1844
+ "label": "Protection par code PIN",
1845
+ "description": "Activer la protection par code PIN pour les paramètres sensibles",
1846
+ "current": "Actuel: {value}",
1847
+ "help": "Exiger un code PIN pour modifier les paramètres de sécurité et avancés"
1850
1848
  },
1851
1849
  "pinProtection_configure": {
1852
- "label": "Configurer la protection PIN des scripts",
1853
- "description": "Sélectionnez les scripts nécessitant une protection PIN",
1854
- "help": "Choisissez les scripts qui nécessitent une authentification PIN"
1850
+ "label": "Configurer les scripts protégés par code PIN",
1851
+ "description": "Configurer les scripts nécessitant une protection par code PIN",
1852
+ "help": "Sélectionnez des scripts individuels qui nécessitent une authentification par code PIN"
1855
1853
  },
1856
1854
  "pinProtection_debugMenu": {
1857
- "label": "Menu des outils de débogage",
1858
- "description": "Exiger un PIN pour le menu de débogage",
1859
- "current": "Actuel : {value}",
1860
- "help": "Activer la protection PIN pour l’accès aux outils de débogage"
1855
+ "label": "Menu Outils de débogage",
1856
+ "description": "Exiger un code PIN pour le menu Outils de débogage",
1857
+ "current": "Actuel: {value}",
1858
+ "help": "Activer la protection par code PIN pour accéder aux outils de débogage"
1861
1859
  },
1862
1860
  "pinProtection_deleteReports": {
1863
- "label": "Suppression des rapports",
1864
- "description": "Exiger un PIN pour la suppression des rapports",
1865
- "current": "Actuel : {value}",
1866
- "help": "Activer la protection PIN pour la suppression des rapports"
1861
+ "label": "Supprimer des rapports",
1862
+ "description": "Exiger un code PIN pour supprimer des rapports",
1863
+ "current": "Actuel: {value}",
1864
+ "help": "Activer la protection par code PIN pour supprimer des rapports"
1867
1865
  },
1868
1866
  "pinProtection_summaryReports": {
1869
- "label": "Rapports résumés",
1870
- "description": "Exiger un PIN pour les rapports résumés",
1871
- "current": "Actuel : {value}",
1872
- "help": "Activer la protection PIN pour la génération des rapports résumés"
1867
+ "label": "Rapports récapitulatifs",
1868
+ "description": "Exiger un code PIN pour les rapports récapitulatifs",
1869
+ "current": "Actuel: {value}",
1870
+ "help": "Activer la protection par code PIN pour générer des rapports récapitulatifs"
1873
1871
  },
1874
1872
  "pinProtection_settingsMenu": {
1875
- "label": "Menu des paramètres",
1876
- "description": "Exiger un PIN pour le menu des paramètres",
1877
- "current": "Actuel : {value}",
1878
- "help": "Activer la protection PIN pour l’accès aux paramètres"
1873
+ "label": "Menu Paramètres",
1874
+ "description": "Exiger un code PIN pour le menu Paramètres",
1875
+ "current": "Actuel: {value}",
1876
+ "help": "Activer la protection par code PIN pour accéder aux paramètres"
1879
1877
  },
1880
1878
  "pinProtection_initScript": {
1881
- "label": "Script d’initialisation",
1882
- "description": "Exiger un PIN pour le script d’initialisation",
1883
- "current": "Actuel : {value}",
1884
- "help": "Activer la protection PIN pour l’exécution du script dinitialisation"
1879
+ "label": "Initialiser le script",
1880
+ "description": "Exiger un code PIN pour initialiser le script",
1881
+ "current": "Actuel: {value}",
1882
+ "help": "Activer la protection par code PIN pour exécuter le script d'initialisation"
1885
1883
  },
1886
1884
  "pinProtection_resetDefaults": {
1887
- "label": "Réinitialiser la protection par PIN",
1888
- "description": "Réinitialiser tous les paramètres de protection PIN aux valeurs par défaut",
1889
- "help": "Réinitialise toutes les protections de script aux valeurs d'usine"
1885
+ "label": "Réinitialiser la protection du code PIN",
1886
+ "description": "Réinitialiser tous les paramètres de protection par code PIN aux valeurs par défaut",
1887
+ "help": "Réinitialiser toutes les protections PIN de script individuelles aux valeurs par défaut"
1890
1888
  },
1891
1889
  "removeUiLanguages": {
1892
1890
  "label": "Supprimer les langues de l'interface utilisateur",
@@ -1894,36 +1892,68 @@
1894
1892
  "help": "Supprimez les langues de l'interface utilisateur qui ne sont pas installées sur le système"
1895
1893
  },
1896
1894
  "${helperKey}": {
1897
- "help": "Aide pour {helperKey}"
1895
+ "help": "Aide"
1896
+ },
1897
+ "backup": {
1898
+ "enabled": {
1899
+ "label": "Activer la sauvegarde",
1900
+ "description": "Activer la sauvegarde automatique des paramètres",
1901
+ "help": "Activer/désactiver la fonction de sauvegarde"
1902
+ },
1903
+ "singleFileMode": {
1904
+ "label": "Mode fichier unique",
1905
+ "description": "Utiliser un seul fichier pour les sauvegardes",
1906
+ "help": "Paramètres de sauvegarde dans un seul fichier"
1907
+ },
1908
+ "singleBackupFile": {
1909
+ "label": "Chemin du fichier de sauvegarde",
1910
+ "description": "Chemin d'accès au fichier de sauvegarde",
1911
+ "help": "Chemin d'accès au fichier de sauvegarde unique"
1912
+ },
1913
+ "retentionDays": {
1914
+ "label": "Période de conservation",
1915
+ "description": "Jours pour conserver les fichiers de sauvegarde",
1916
+ "help": "Nombre de jours pour conserver les anciens fichiers de sauvegarde"
1917
+ },
1918
+ "maxBackups": {
1919
+ "label": "Sauvegardes maximales",
1920
+ "description": "Fichiers de sauvegarde maximum à conserver",
1921
+ "help": "Nombre maximum de fichiers de sauvegarde à conserver"
1922
+ },
1923
+ "confirm": {
1924
+ "label": "Confirmer la sauvegarde",
1925
+ "description": "Exiger une confirmation pour les opérations de sauvegarde",
1926
+ "help": "Confirmer l'opération de sauvegarde"
1927
+ }
1898
1928
  }
1899
1929
  },
1900
1930
  "actions": {
1901
1931
  "editSetting": "Modifier {setting}:",
1902
- "settingUpdated": "✅ {setting} mis à jour avec succès!",
1932
+ "settingUpdated": "✅ {setting} mis à jour avec succès !",
1903
1933
  "invalidValue": "❌ Valeur invalide. Veuillez réessayer.",
1904
1934
  "pressEnter": "Appuyez sur Entrée pour continuer...",
1905
1935
  "backToMenu": "Retour au menu principal",
1906
- "saveSuccess": "✅ Paramètres enregistrés avec succès!",
1907
- "saveFailed": "❌ Échec de l'enregistrement des paramètres: {error}",
1908
- "resetConfirm": "Êtes-vous sûr de vouloir réinitialiser tous les paramètres à leurs valeurs par défaut ? (Oui/Non) :",
1909
- "resetSuccess": "✅ Paramètres réinitialisés avec succès!",
1910
- "importSuccess": "✅ Paramètres importés avec succès!",
1911
- "exportSuccess": "✅ Paramètres exportés avec succès!",
1912
- "fileNotFound": "❌ Fichier non trouvé: {path}",
1936
+ "saveSuccess": "✅ Paramètres enregistrés avec succès !",
1937
+ "saveFailed": "❌ Échec de l'enregistrement des paramètres : {error}",
1938
+ "resetConfirm": "Êtes-vous sûr de vouloir réinitialiser tous les paramètres par défaut ? (o/N) :",
1939
+ "resetSuccess": "✅ Paramètres réinitialisés aux valeurs par défaut avec succès !",
1940
+ "importSuccess": "✅ Paramètres importés avec succès !",
1941
+ "exportSuccess": "✅ Paramètres exportés avec succès !",
1942
+ "fileNotFound": "❌ Fichier introuvable : {path}",
1913
1943
  "invalidFormat": "❌ Format de fichier de paramètres invalide",
1914
- "pinProtectionUpdated": "✅ Protection PIN pour {script} mise à jour avec succès!",
1915
- "pinProtectionReset": "✅ Toutes les paramètres de protection PIN réinitialisés à leurs valeurs par défaut!",
1916
- "pinProtectionConfigure": "Configure la protection PIN pour les scripts individuels",
1917
- "pinProtectionSelectScript": "Sélectionnez un script pour activer la protection PIN :",
1918
- "pinProtectionCurrentStatus": "Statut actuel : {status}",
1944
+ "pinProtectionUpdated": "✅ Protection par code PIN pour {script} mis à jour avec succès !",
1945
+ "pinProtectionReset": "✅ Tous les paramètres de protection par code PIN sont réinitialisés aux valeurs par défaut !",
1946
+ "pinProtectionConfigure": "Configurer la protection par code PIN pour des scripts individuels",
1947
+ "pinProtectionSelectScript": "Sélectionnez un script pour activer la protection par code PIN :",
1948
+ "pinProtectionCurrentStatus": "Statut actuel : {status}",
1919
1949
  "pinProtectionEnabled": "Activé",
1920
1950
  "pinProtectionDisabled": "Désactivé",
1921
- "pinProtectionToggle": "Basculer la protection PIN",
1922
- "pinProtectionResetAll": "Réinitialiser toutes les protections à leurs valeurs par défaut",
1951
+ "pinProtectionToggle": "Activer/désactiver la protection par code PIN",
1952
+ "pinProtectionResetAll": "Réinitialiser tout aux valeurs par défaut",
1923
1953
  "pinProtectionBack": "Retour aux paramètres de sécurité"
1924
1954
  },
1925
1955
  "themes": {
1926
- "light": "Clair",
1956
+ "light": "Lumière",
1927
1957
  "dark": "Sombre",
1928
1958
  "system": "Système"
1929
1959
  },
@@ -1932,8 +1962,8 @@
1932
1962
  "de": "Allemand",
1933
1963
  "es": "Espagnol",
1934
1964
  "fr": "Français",
1935
- "ru": "Russe",
1936
- "ja": "Japonais",
1965
+ "ru": "russe",
1966
+ "ja": "japonais",
1937
1967
  "zh": "Chinois"
1938
1968
  },
1939
1969
  "viewAll": {
@@ -1941,32 +1971,32 @@
1941
1971
  },
1942
1972
  "current": "Actuel",
1943
1973
  "back": "Retour au menu principal",
1944
- "selectSettingPrompt": "Sélectionnez le paramètre à modifier (ou b pour revenir, r pour réinitialiser) :",
1974
+ "selectSettingPrompt": "Sélectionnez le paramètre à modifier (ou b pour revenir en arrière, r pour réinitialiser) :",
1945
1975
  "invalidOption": "Option invalide.",
1946
- "editing": "Modification de",
1947
- "enterNewValue": "Entrez la nouvelle valeur (ou appuyez sur Entrée pour conserver la valeur actuelle, tapez 'default' pour utiliser la valeur par défaut du système) :",
1976
+ "editing": "Édition",
1977
+ "enterNewValue": "Entrez une nouvelle valeur (ou appuyez sur Entrée pour conserver la valeur actuelle, tapez « par défaut » pour utiliser la valeur par défaut du système) :",
1948
1978
  "validOptions": "Options valides",
1949
- "updatedSuccessfully": "Mis à jour avec succès!",
1950
- "noHelp": "Aide non disponible pour ce paramètre",
1951
- "resetScriptDirectories": "Réinitialiser à la valeur par défaut",
1952
- "resetScriptDirectoriesTitle": "Réinitialiser les dossiers de script à leurs valeurs par défaut",
1953
- "resetScriptDirectoriesWarning1": "Cela réinitialisera toutes les configurations de dossiers de script à leurs valeurs par défaut du système.",
1954
- "resetScriptDirectoriesWarning2": "Tous les chemins de dossiers personnalisés seront effacés. Cette action ne peut pas être annulée.",
1955
- "resetScriptDirectoriesConfirm": "Êtes-vous sûr de vouloir réinitialiser tous les dossiers de script à leurs valeurs par défaut ? (Oui/Non) :",
1979
+ "updatedSuccessfully": "mis à jour avec succès !",
1980
+ "noHelp": "Aucune aide disponible pour ce paramètre",
1981
+ "resetScriptDirectories": "Réinitialiser aux valeurs par défaut",
1982
+ "resetScriptDirectoriesTitle": "Réinitialiser les répertoires de scripts aux valeurs par défaut",
1983
+ "resetScriptDirectoriesWarning1": "Cela réinitialisera toutes les configurations du répertoire de script à leurs valeurs par défaut du système.",
1984
+ "resetScriptDirectoriesWarning2": "Tous les chemins de répertoire personnalisés seront effacés. Cette action ne peut pas être annulée.",
1985
+ "resetScriptDirectoriesConfirm": "Êtes-vous sûr de vouloir réinitialiser tous les répertoires de scripts aux valeurs par défaut ? (o/N) :",
1956
1986
  "backup": {
1957
- "title": "Sauvegarde des paramètres",
1987
+ "title": "Paramètres de sauvegarde",
1958
1988
  "description": "Sauvegarder les paramètres actuels dans un fichier",
1959
- "confirm": "Êtes-vous sûr de vouloir sauvegarder les paramètres actuels ? (Oui/Non) :",
1960
- "success": "✅ Paramètres sauvegardés avec succès dans {backupFile}",
1961
- "failed": "❌ Échec de la sauvegarde des paramètres : {error}",
1989
+ "confirm": "Êtes-vous sûr de vouloir sauvegarder les paramètres actuels ? (o/N) :",
1990
+ "success": "✅ Paramètres sauvegardés avec succès sur {backupFile}",
1991
+ "failed": "❌ Échec de la sauvegarde des paramètres : {error}",
1962
1992
  "enabled": "Activer la sauvegarde",
1963
1993
  "enabledHelp": "Activer/désactiver la fonction de sauvegarde",
1964
- "singleFileMode": "Mode unique de fichier",
1965
- "singleFileModeHelp": "Sauvegarder les paramètres dans un seul fichier",
1994
+ "singleFileMode": "Mode fichier unique",
1995
+ "singleFileModeHelp": "Paramètres de sauvegarde dans un seul fichier",
1966
1996
  "singleBackupFile": "Fichier de sauvegarde unique",
1967
- "singleBackupFileHelp": "Chemin vers le fichier de sauvegarde unique",
1997
+ "singleBackupFileHelp": "Chemin d'accès au fichier de sauvegarde unique",
1968
1998
  "retentionDays": "Jours de conservation",
1969
- "retentionDaysHelp": "Nombre de jours à conserver les fichiers de sauvegarde anciens",
1999
+ "retentionDaysHelp": "Nombre de jours pour conserver les anciens fichiers de sauvegarde",
1970
2000
  "maxBackups": "Sauvegardes maximales",
1971
2001
  "maxBackupsHelp": "Nombre maximum de fichiers de sauvegarde à conserver",
1972
2002
  "confirmHelp": "Confirmer l'opération de sauvegarde",
@@ -1980,167 +2010,167 @@
1980
2010
  }
1981
2011
  },
1982
2012
  "summary": {
1983
- "separator": "============================================================",
1984
- "configurationTitle": "🔧 Configuration :",
1985
- "sourceLanguage": "Langue source : {sourceLanguage}",
1986
- "supportedExtensions": "Extensions prises en charge : {extensions}",
1987
- "excludedFiles": "Fichiers exclus : {files}",
2013
+ "separator": "=============================================================",
2014
+ "configurationTitle": "🔧Configuration :",
2015
+ "sourceLanguage": "Langue source : {sourceLanguage}",
2016
+ "supportedExtensions": "Extensions prises en charge : {extensions}",
2017
+ "excludedFiles": "Fichiers exclus : {files}",
1988
2018
  "reportContent": "{report}",
1989
2019
  "fatalError": "❌ Erreur fatale : {error}",
1990
- "helpTitle": "📊 GÉNÉRATEUR DE RAPPORT DE SYNTHÈSE I18NTK",
1991
- "helpDescription": "Analyse la structure du dossier i18n et génère un rapport de synthèse complet incluant les statistiques clés, l'analyse de la structure des fichiers et les vérifications de validation.",
1992
- "helpUsage": "Utilisation : node i18ntk-summary.js [options]",
1993
- "helpOptions": "--source-dir <dir> Répertoire source à analyser",
1994
- "helpSourceDir": "--source-dir <dir> Répertoire source à analyser",
1995
- "helpOutput": "--output <file> Fichier de sortie pour le rapport",
1996
- "helpVerbose": "--verbose, -v Afficher les informations détaillées",
1997
- "helpKeepReports": "--keep-reports Conserver les rapports existants",
1998
- "helpDeleteReports": "--delete-reports Supprimer les rapports existants",
1999
- "helpHelp": "--help, -h Afficher cette aide",
2000
- "helpExamples": "Exemples :",
2001
- "helpExample1": "node i18ntk-summary.js",
2002
- "helpExample2": "node i18ntk-summary.js --source-dir ./locales",
2003
- "helpExample3": "node i18ntk-summary.js --output summary-report.txt",
2004
- "helpExample4": "node i18ntk-summary.js --verbose",
2005
- "helpExample5": "node i18ntk-summary.js --source-dir ./locales --output report.json",
2006
- "couldNotReadFile": "⚠️ Impossible de lire le fichier : {filePath}",
2007
- "couldNotParseJSFile": "⚠️ Impossible d'analyser le fichier JS/TS : {filePath}",
2008
- "errorReadingFile": "⚠️ Erreur lors de la lecture du fichier {filePath} : {error}",
2009
- "analyzingFolder": "🔍 Analyse de la structure du dossier...",
2010
- "noLanguageDirectoriesFound": "❌ Aucun répertoire de langue trouvé dans le répertoire source spécifié.",
2011
- "foundLanguages": "✅ Trouvé {count} langues : {languages}",
2012
- "referenceLanguageFiles": "📁 La langue de référence '{language}' a {count} fichiers",
2013
- "analyzingLanguage": "🌍 Analyse de la langue : {language}",
2014
- "keysInFiles": "📊 Trouvé {keys} clés dans {files} fichiers",
2015
- "checkingInconsistentKeys": "🔍 Vérification des clés incohérentes entre les langues...",
2016
- "generatingSummaryReport": "📝 Génération du rapport de synthèse...",
2017
- "reportTitle": "📊 RAPPORT DE SYNTHÈSE I18NTK",
2018
- "generated": "Généré le : {timestamp}",
2019
- "sourceDirectory": "Répertoire source : {dir}",
2020
+ "helpTitle": "📊 GÉNÉRATEUR DE RAPPORT DE RÉSUMÉ I18NTK",
2021
+ "helpDescription": "Analyse la structure des dossiers i18n et génère un rapport de synthèse complet comprenant des statistiques clés, une analyse de la structure des fichiers et des contrôles de validation.",
2022
+ "helpUsage": "Utilisation : nœud i18ntk-summary.js [options]",
2023
+ "helpOptions": "--rép-source <dir> Répertoire source à analyser",
2024
+ "helpSourceDir": "--rép-source <dir> Répertoire source à analyser",
2025
+ "helpOutput": "--sortir <file> Fichier de sortie pour le rapport",
2026
+ "helpVerbose": "--verbose, -v Afficher des informations détaillées",
2027
+ "helpKeepReports": "--keep-reports Conserver les rapports existants",
2028
+ "helpDeleteReports": "--delete-reports Supprimer les rapports existants",
2029
+ "helpHelp": "--help, -h Afficher cette aide",
2030
+ "helpExamples": "Exemples :",
2031
+ "helpExample1": "nœud i18ntk-summary.js",
2032
+ "helpExample2": "nœud i18ntk-summary.js --source-dir ./locales",
2033
+ "helpExample3": "nœud i18ntk-summary.js --output summary-report.txt",
2034
+ "helpExample4": "nœud i18ntk-summary.js --verbose",
2035
+ "helpExample5": "nœud i18ntk-summary.js --source-dir ./locales --output report.json",
2036
+ "couldNotReadFile": "⚠️ Impossible de lire le fichier : {filePath}",
2037
+ "couldNotParseJSFile": "⚠️ Impossible d'analyser le fichier JS/TS : {filePath}",
2038
+ "errorReadingFile": "⚠️ Erreur de lecture du fichier {filePath}: {error}",
2039
+ "analyzingFolder": "🔍 Analyse de la structure des dossiers...",
2040
+ "noLanguageDirectoriesFound": "❌ Aucun répertoire de langues trouvé dans le répertoire source spécifié.",
2041
+ "foundLanguages": "✅ Trouvé {count} langues : {languages}",
2042
+ "referenceLanguageFiles": "📁Langage de référence'{language}' a {count} fichiers",
2043
+ "analyzingLanguage": "🌍 Analyser le langage : {language}",
2044
+ "keysInFiles": "📊 Trouvé {keys} touches à travers {files} fichiers",
2045
+ "checkingInconsistentKeys": "🔍 Vérification des clés incohérentes dans toutes les langues...",
2046
+ "generatingSummaryReport": "📝 Génération d'un rapport récapitulatif...",
2047
+ "reportTitle": "📊 RAPPORT SOMMAIRE I18NTK",
2048
+ "generated": "Généré : {timestamp}",
2049
+ "sourceDirectory": "Répertoire source : {dir}",
2020
2050
  "overview": "📈 APERÇU",
2021
- "languagesCount": "Langues : {count}",
2022
- "totalFiles": "Fichiers totaux : {count}",
2023
- "totalKeys": "Clés totales : {count}",
2024
- "avgKeysPerLanguage": "Moyenne des clés par langue : {count}",
2051
+ "languagesCount": "Langues : {count}",
2052
+ "totalFiles": "Total des fichiers : {count}",
2053
+ "totalKeys": "Clés totales : {count}",
2054
+ "avgKeysPerLanguage": "Clés moyennes par langue : {count}",
2025
2055
  "languagesBreakdown": "🌍 RÉPARTITION DES LANGUES",
2026
- "languageBreakdown": "{language} : {files} fichiers, {keys} clés",
2027
- "fileStructure": "📁 STRUCTURE DES FICHIERS",
2028
- "fileKeys": "{file} : {keys} clés",
2029
- "missingInLanguages": "⚠️ Manquant dans : {languages}",
2056
+ "languageBreakdown": "{language}: {files} des fichiers, {keys} clés",
2057
+ "fileStructure": "📁STRUCTURE DES FICHIERS",
2058
+ "fileKeys": "{file}: {keys} clés",
2059
+ "missingInLanguages": "⚠️ Manquant dans : {languages}",
2030
2060
  "issuesFound": "❌ PROBLÈMES TROUVÉS",
2031
- "missingFiles": "📁 Fichiers manquants :",
2032
- "emptyFiles": "📄 Fichiers vides :",
2033
- "malformedFiles": "⚠️ Fichiers mal formés :",
2034
- "duplicateKeys": "🔑 Clés en double :",
2035
- "inconsistentKeys": "🔍 Clés incohérentes :",
2036
- "missingKeys": "Manquant : {keys}{more}",
2037
- "extraKeys": "Supplémentaire : {keys}{more}",
2061
+ "missingFiles": "📁 Fichiers manquants :",
2062
+ "emptyFiles": "📄 Fichiers vides :",
2063
+ "malformedFiles": "⚠️ Fichiers mal formés :",
2064
+ "duplicateKeys": "🔑 Clés en double :",
2065
+ "inconsistentKeys": "🔍 Clés incohérentes :",
2066
+ "missingKeys": "Manquant: {keys}{more}",
2067
+ "extraKeys": "Supplémentaire: {keys}{more}",
2038
2068
  "noIssuesFound": "✅ AUCUN PROBLÈME TROUVÉ",
2039
- "allFilesConsistent": "Tous les fichiers de traduction sont cohérents entre les langues.",
2069
+ "allFilesConsistent": "Tous les fichiers de traduction sont cohérents dans toutes les langues.",
2040
2070
  "recommendations": "💡 RECOMMANDATIONS",
2041
- "createMissingFiles": "• Créer les fichiers de traduction manquants",
2042
- "addContentToEmptyFiles": "• Ajouter du contenu aux fichiers vides",
2043
- "fixMalformedFiles": "• Corriger les fichiers JSON/JS mal formés",
2071
+ "createMissingFiles": "• Créer des fichiers de traduction manquants",
2072
+ "addContentToEmptyFiles": "• Ajouter du contenu à des fichiers de traduction vides",
2073
+ "fixMalformedFiles": "• Correction des fichiers JSON/JS mal formés",
2044
2074
  "removeDuplicateKeys": "• Supprimer les clés en double des fichiers",
2045
- "synchronizeKeys": "• Synchroniser les clés entre toutes les langues",
2046
- "splitLargeFiles": "• Envisager de diviser les gros fichiers en espaces de noms plus petits",
2047
- "addMoreLanguages": "• Envisager d'ajouter plus de langues",
2075
+ "synchronizeKeys": "• Synchronisez les clés dans toutes les langues",
2076
+ "splitLargeFiles": "• Envisagez de diviser les fichiers volumineux en espaces de noms plus petits.",
2077
+ "addMoreLanguages": "• Envisagez d'ajouter d'autres langues.",
2048
2078
  "nextSteps": "🎯 PROCHAINES ÉTAPES",
2049
- "nextStep1": "1. Corriger les problèmes identifiés ci-dessus",
2050
- "nextStep2": "2. Exécuter la validation pour assurer la cohérence",
2051
- "nextStep3": "3. Envisager d'utiliser i18ntk-validate pour une validation détaillée",
2079
+ "nextStep1": "1. Résolvez tous les problèmes identifiés ci-dessus",
2080
+ "nextStep2": "2. Exécutez la validation pour garantir la cohérence",
2081
+ "nextStep3": "3. Pensez à utiliser i18ntk-validate pour une validation détaillée",
2052
2082
  "nextStep4": "4. Surveillance régulière recommandée",
2053
2083
  "couldNotFindI18nDirectory": "❌ Impossible de trouver le répertoire i18n. Veuillez spécifier --source-dir.",
2054
- "sourceDirectoryDoesNotExist": "❌ Le répertoire source n'existe pas : {dir}",
2055
- "i18nSummaryReportGenerator": "📊 Générateur de Rapport de Synthèse I18N",
2084
+ "sourceDirectoryDoesNotExist": "❌ Le répertoire source n'existe pas : {dir}",
2085
+ "i18nSummaryReportGenerator": "📊 Générateur de rapport de synthèse I18N",
2056
2086
  "analysisComplete": "✅ Analyse terminée",
2057
- "analyzedLanguages": "📊 Langues analysées : {count}",
2087
+ "analyzedLanguages": "📊 Langues analysées : {count}",
2058
2088
  "processedFiles": "📁 Fichiers traités : {count}",
2059
- "foundTranslationKeys": "🔑 Clés de traduction trouvées : {count}",
2089
+ "foundTranslationKeys": "🔑 Clés de traduction trouvées : {count}",
2060
2090
  "foundIssues": "❌ Trouvé {count} problèmes",
2061
- "noIssuesConsole": "✅ Aucun problème trouvé - tous les fichiers sont cohérents !",
2062
- "errorDuringAnalysis": "❌ Erreur pendant l'analyse : {error}",
2063
- "usageReportTitle": "📊 RAPPORT D'UTILISATION I18NTK",
2064
- "usageReportGenerated": "Généré le : {timestamp}",
2065
- "usageReportSourceDir": "Répertoire source : {sourceDir}",
2066
- "usageReportI18nDir": "Répertoire i18n : {i18nDir}",
2091
+ "noIssuesConsole": "✅ Aucun problème trouvé - tous les fichiers sont cohérents !",
2092
+ "errorDuringAnalysis": "❌ Erreur lors de l'analyse : {error}",
2093
+ "usageReportTitle": "📊 RAPPORT D'UTILISATION DU I18NTK",
2094
+ "usageReportGenerated": "Généré : {timestamp}",
2095
+ "usageReportSourceDir": "Répertoire source : {sourceDir}",
2096
+ "usageReportI18nDir": "Répertoire I18n : {i18nDir}",
2067
2097
  "usageReportSummary": "📈 RÉSUMÉ",
2068
- "usageReportSourceFilesScanned": "Fichiers source analysés : {count}",
2069
- "usageReportTranslationFilesFound": "Fichiers de traduction trouvés : {count}",
2070
- "usageReportAvailableKeys": "Clés de traduction disponibles : {count}",
2071
- "usageReportUsedKeys": "Clés de traduction utilisées : {count}",
2072
- "usageReportDynamicKeys": "Clés de traduction dynamiques : {count}",
2073
- "usageReportUnusedKeys": "Clés de traduction inutilisées : {count}",
2074
- "usageReportMissingKeys": "Clés de traduction manquantes : {count}",
2075
- "usageReportNotTranslatedKeys": "Clés non traduites : {count}",
2076
- "usageReportTranslationCompleteness": "🌍 EXHAUSTIVITÉ DES TRADUCTIONS",
2077
- "usageReportLanguageCompleteness": "{language} : {completeness}% ({translated}/{total})",
2098
+ "usageReportSourceFilesScanned": "Fichiers sources analysés : {count}",
2099
+ "usageReportTranslationFilesFound": "Fichiers de traduction trouvés : {count}",
2100
+ "usageReportAvailableKeys": "Clés de traduction disponibles : {count}",
2101
+ "usageReportUsedKeys": "Clés de traduction utilisées : {count}",
2102
+ "usageReportDynamicKeys": "Clés de traduction dynamiques : {count}",
2103
+ "usageReportUnusedKeys": "Clés de traduction inutilisées : {count}",
2104
+ "usageReportMissingKeys": "Clés de traduction manquantes : {count}",
2105
+ "usageReportNotTranslatedKeys": "Clés non traduites : {count}",
2106
+ "usageReportTranslationCompleteness": "🌍 EXHAUSTIVITÉ DE LA TRADUCTION",
2107
+ "usageReportLanguageCompleteness": "{language}: {completeness}% ({translated}/{total})",
2078
2108
  "usageReportNotTranslatedInLanguage": "Non traduit : {count} clés",
2079
2109
  "usageReportTranslationFilesDiscovered": "📁 FICHIERS DE TRADUCTION",
2080
- "usageReportFileInfo": "{relativePath} (espace de noms : {namespace}, type : {type})",
2110
+ "usageReportFileInfo": "{relativePath} (espace de noms : {namespace}, taper: {type})",
2081
2111
  "usageReportUnusedTranslationKeys": "🗑️ CLÉS DE TRADUCTION INUTILISÉES",
2082
- "usageReportUnusedKeysDescription": "Ces clés existent dans les fichiers de traduction mais ne sont pas utilisées dans le code source :",
2112
+ "usageReportUnusedKeysDescription": "Ces clés existent dans les fichiers de traduction mais ne sont pas utilisées dans le code source :",
2083
2113
  "usageReportUnusedKey": "• {key}",
2084
- "usageReportMoreUnusedKeys": "... et {count} clés inutilisées supplémentaires",
2114
+ "usageReportMoreUnusedKeys": "... et {count} plus de clés inutilisées",
2085
2115
  "usageReportMissingTranslationKeys": "❌ CLÉS DE TRADUCTION MANQUANTES",
2086
- "usageReportMissingKeysDescription": "Ces clés sont utilisées dans le code source mais manquent dans les fichiers de traduction :",
2116
+ "usageReportMissingKeysDescription": "Ces clés sont utilisées dans le code source mais absentes des fichiers de traduction :",
2087
2117
  "usageReportMissingKey": "• {key}",
2088
- "usageReportUsedIn": "Utilisé dans : {filePath}",
2089
- "usageReportMoreFiles": "... et {count} fichiers supplémentaires",
2090
- "usageReportDynamicTranslationKeys": "⚡ CLÉS DE TRADUCTION DYNAMIQUES",
2091
- "usageReportDynamicKeysDescription": "Ces clés sont utilisées dynamiquement (construites à l'exécution) :",
2118
+ "usageReportUsedIn": "Utilisé dans : {filePath}",
2119
+ "usageReportMoreFiles": "... et {count} plus de fichiers",
2120
+ "usageReportDynamicTranslationKeys": "⚡ TOUCHES DE TRADUCTION DYNAMIQUES",
2121
+ "usageReportDynamicKeysDescription": "Ces clés sont utilisées dynamiquement (construites au moment de l'exécution) :",
2092
2122
  "usageReportDynamicKey": "• {key}",
2093
2123
  "usageReportFileUsageBreakdown": "📊 RÉPARTITION DE L'UTILISATION DES FICHIERS",
2094
- "usageReportFileUsage": "{filePath} : {count} clés",
2124
+ "usageReportFileUsage": "{filePath}: {count} clés",
2095
2125
  "status": {
2096
- "generating": "⏳ Génération en cours...",
2126
+ "generating": "⏳ Génération...",
2097
2127
  "completed": "✅ Terminé"
2098
2128
  },
2099
2129
  "help": {
2100
- "usage": "Usage: node i18ntk-manage.js [options]",
2101
- "interactiveMode": "💡 Utilisez : node i18ntk-manage.js --command=<command> pour exécution directe",
2130
+ "usage": "Utilisation : nœud main/manage/index.js [options]",
2131
+ "interactiveMode": "💡 Utilisation : node main/manage/index.js --command=<command> pour exécution directe",
2102
2132
  "initProject": "🚀 Initialiser de nouvelles langues",
2103
2133
  "analyzeTranslations": "🔍 Analyser les traductions",
2104
2134
  "validateTranslations": "✅ Valider les traductions",
2105
- "checkUsage": "📊 Vérifier l'utilisation des clés",
2106
- "showHelp": "📖 Utilisez : node i18ntk-manage.js --help pour afficher les commandes disponibles",
2107
- "availableCommands": "📖 Commandes disponibles :",
2108
- "initCommand": "init - Initialiser de nouvelles langues",
2109
- "analyzeCommand": "analyze - Analyser les traductions",
2110
- "validateCommand": "validate - Valider les traductions",
2111
- "usageCommand": "usage - Vérifier l'utilisation des clés",
2112
- "sizingCommand": "sizing - Analyser la taille",
2113
- "completeCommand": "complete - Compléter les traductions (couverture 100%)",
2114
- "summaryCommand": "summary - Afficher l'état du projet",
2115
- "scannerCommand": "scanner - Scanner le projet pour les clés i18n",
2116
- "translateCommand": "translate - Traduction automatique (Bêta)",
2117
- "debugCommand": "debug - Déboguer les problèmes de traduction"
2135
+ "checkUsage": "📊 Vérifiez l'utilisation de la clé",
2136
+ "showHelp": "📖 Utiliser : node main/manage/index.js --help pour les commandes disponibles",
2137
+ "availableCommands": "📖 Commandes disponibles :",
2138
+ "initCommand": "init - Initialiser de nouvelles langues",
2139
+ "analyzeCommand": "analyser - Analyser les traductions",
2140
+ "validateCommand": "validate - Valider les traductions",
2141
+ "usageCommand": "utilisation - Vérifier l'utilisation des clés",
2142
+ "sizingCommand": "dimensionnement - Analyser le dimensionnement",
2143
+ "completeCommand": "complet - Traductions complètes (couverture à 100 %)",
2144
+ "summaryCommand": "résumé - Afficher l'état du projet",
2145
+ "scannerCommand": "scanner - Rechercher les problèmes i18n",
2146
+ "translateCommand": "traduire - Traduire automatiquement les fichiers de paramètres régionaux (bêta)",
2147
+ "debugCommand": "debug - Problèmes de traduction de débogage"
2118
2148
  },
2119
2149
  "test_complete_system": {
2120
- "starting_test": "🧪 Démarrage du test complet du système",
2150
+ "starting_test": "🧪 Démarrage du test système complet",
2121
2151
  "separator": "=",
2122
2152
  "testing_ui_translations": "📝 Test des traductions de l'interface utilisateur...",
2123
- "testing_settings_manager": "⚙️ Test du gestionnaire de paramètres...",
2153
+ "testing_settings_manager": "⚙️ Test du gestionnaire de paramètres...",
2124
2154
  "testing_main_scripts": "🔧 Test des scripts principaux...",
2125
- "checking_translation_consistency": "🌐 Vérification de la cohérence des traductions...",
2126
- "non_critical_missing_keys": "ℹ️ {file}: {count} clés non critiques manquantes",
2155
+ "checking_translation_consistency": "🌐 Vérification de la cohérence de la traduction...",
2156
+ "non_critical_missing_keys": "ℹ️ {file}: {count} clés manquantes non critiques",
2127
2157
  "extra_keys": "ℹ️ {file}: {count} clés supplémentaires",
2128
2158
  "generating_report": "📊 Génération du rapport...",
2129
2159
  "final_test_report_title": "📋 RAPPORT DE TEST FINAL",
2130
2160
  "passed": "✅ Réussi : {passed}",
2131
- "failed": "❌ Échoué : {failed}",
2132
- "warnings": "⚠️ Avertissements : {warnings}",
2133
- "missing_translations_title": "🔍 Traductions manquantes ({count}) :",
2161
+ "failed": "❌ Échec : {failed}",
2162
+ "warnings": "⚠️ Avertissements : {warnings}",
2163
+ "missing_translations_title": "🔍 Traductions manquantes ({count}):",
2134
2164
  "missing_translation_key": "- {key}",
2135
- "missing_translations_more": "... et {count} de plus",
2136
- "errors_title": "❌ Erreurs :",
2165
+ "missing_translations_more": "... et {count} plus",
2166
+ "errors_title": "❌ Erreurs :",
2137
2167
  "error_message": "- {error}",
2138
- "overall_status": "📊 État général : {status}",
2168
+ "overall_status": "📊 Statut général : {status}",
2139
2169
  "success_message": "✅ {message}",
2140
2170
  "failure_message": "❌ {message}",
2141
2171
  "failure_error_message": "{errorMessage}",
2142
- "warning_message": "⚠️ {message}",
2143
- "test_runner_failed": "❌ L'exécuteur de test a échoué :",
2172
+ "warning_message": "⚠️ {message}",
2173
+ "test_runner_failed": "❌ L'exécuteur de test a échoué :",
2144
2174
  "recommendations": {
2145
2175
  "add_missing_translation_keys": "Ajouter les clés de traduction manquantes pour maintenir la cohérence",
2146
2176
  "fix_failing_scripts": "Corriger les scripts défaillants avant le déploiement",
@@ -2155,66 +2185,66 @@
2155
2185
  }
2156
2186
  },
2157
2187
  "testConsoleI18n": {
2158
- "found_target_file": "Cible trouvée : {fileName}",
2159
- "scanning_files_for_console_statements": "Scan des fichiers en cours...",
2160
- "found_javascript_files": "Trouvé {count} fichiers JavaScript.",
2161
- "console_i18n_analysis_results": "Résultats d'analyse de l'interface utilisateur",
2162
- "total_console_statements": "Total des instructions console : {count}",
2163
- "translated_statements": "Instructions console traduites : {count}",
2164
- "hardcoded_statements": "Instructions console non traduites : {count}",
2165
- "translation_coverage": "Couverture de traduction : {percentage}%",
2166
- "coverage_by_file": "Couverture par fichier :",
2167
- "file_coverage_stats": "{emoji} {fileName} : {coverage} % ({translated}/{total})",
2168
- "hardcoded_console_statements": "Instructions console non traduites :",
2169
- "file_header": "Fichier : {file}",
2170
- "line_statement": "Ligne {line}: {statement}",
2171
- "suggested_key": "Clé suggérée : {key}",
2172
- "suggested_replacement": "Remplacement suggéré : {replacement}",
2188
+ "found_target_file": "Fichier cible trouvé : {fileName}",
2189
+ "scanning_files_for_console_statements": "Analyse des fichiers pour les instructions de la console...",
2190
+ "found_javascript_files": "Trouvé {count} Fichiers JavaScript.",
2191
+ "console_i18n_analysis_results": "Résultats de l'analyse de la console I18n",
2192
+ "total_console_statements": "Total des instructions de la console : {count}",
2193
+ "translated_statements": "Déclarations traduites : {count}",
2194
+ "hardcoded_statements": "Déclarations codées en dur : {count}",
2195
+ "translation_coverage": "Couverture de traduction : {percentage}%",
2196
+ "coverage_by_file": "Couverture par dossier :",
2197
+ "file_coverage_stats": "{emoji} {fileName}: {coverage}% ({translated}/{total})",
2198
+ "hardcoded_console_statements": "Déclarations de console codées en dur :",
2199
+ "file_header": "Déposer: {file}",
2200
+ "line_statement": "Doubler {line}: {statement}",
2201
+ "suggested_key": "Clé suggérée : {key}",
2202
+ "suggested_replacement": "Remplacement suggéré : {replacement}",
2173
2203
  "recommendations": "Recommandations :",
2174
- "recommendation_1": "1. Remplacer les chaînes en dur par des appels i18n.t().",
2175
- "recommendation_2": "2. Ajouter de nouvelles clés aux fichiers de traduction pertinents.",
2176
- "recommendation_3": "3. Tous les messages de console doivent être visibles à l'utilisateur et nécessitent une traduction.",
2177
- "recommendation_4": "4. Utiliser les littéraux de modèle ou la concaténation de chaînes pour les messages dynamiques, en passant des variables à i18n.t().",
2178
- "translation_keys_to_add": "Clés de traduction suggérées à ajouter :",
2179
- "add_keys_instruction": "Copiez la structure JSON suivante dans vos fichiers de traduction :",
2180
- "perfect_translation_coverage": "Couverture de traduction parfaite !",
2181
- "all_statements_using_translation": "Toutes les instructions console utilisent le système de traduction.",
2182
- "i18n_console_translation_checker": "Vérificateur de traduction de console i18n",
2183
- "script_description_line1": "Ce script analyse tous les fichiers JavaScript pour les instructions console",
2184
- "script_description_line2": "et vérifie si elles utilisent le système de traduction.",
2185
- "analysis_completed_in_duration": "Analyse terminée en {duration} secondes.",
2186
- "report_saved_to_path": "Rapport enregistré à : {path}",
2187
- "found_hardcoded_messages": "Trouvé {count} messages en dur. Sortie avec code d'erreur 1.",
2188
- "all_console_messages_use_translation": "Toutes les instructions console utilisent la traduction. Sortie avec code 0.",
2189
- "consoleTranslationsCheck": "Vérification de la traduction de console"
2204
+ "recommendation_1": "1. Remplacez les chaînes codées en dur par des appels i18n.t().",
2205
+ "recommendation_2": "2. Ajoutez de nouvelles clés aux fichiers JSON de traduction pertinents.",
2206
+ "recommendation_3": "3. Assurez-vous que tous les messages de la console sont destinés à l'utilisateur et nécessitent une traduction.",
2207
+ "recommendation_4": "4. Utilisez des littéraux de modèle ou une concaténation de chaînes pour les messages dynamiques, en passant des variables à i18n.t().",
2208
+ "translation_keys_to_add": "Clés de traduction suggérées à ajouter :",
2209
+ "add_keys_instruction": "Copiez la structure JSON suivante dans vos fichiers de traduction :",
2210
+ "perfect_translation_coverage": "Couverture de traduction parfaite !",
2211
+ "all_statements_using_translation": "Toutes les instructions de la console utilisent le système de traduction.",
2212
+ "i18n_console_translation_checker": "Vérificateur de traduction de la console I18n",
2213
+ "script_description_line1": "Ce script analyse tous les fichiers JavaScript à la recherche d'instructions de console",
2214
+ "script_description_line2": "et vérifie s'ils utilisent le système de traduction.",
2215
+ "analysis_completed_in_duration": "Analyse réalisée en {duration} secondes.",
2216
+ "report_saved_to_path": "Rapport enregistré dans : {path}",
2217
+ "found_hardcoded_messages": "Trouvé {count} messages codés en dur. Quitter avec le code d'erreur 1.",
2218
+ "all_console_messages_use_translation": "Tous les messages de la console utilisent la traduction. Sortir avec le code 0.",
2219
+ "consoleTranslationsCheck": "Vérification des traductions de la console"
2190
2220
  },
2191
2221
  "translate_mismatches": {
2192
- "title": "🌐 Assistant de Traduction {dryRun}",
2222
+ "title": "🌐 Aide à la traduction {dryRun}",
2193
2223
  "separator": "=====================================",
2194
- "processing_file": "📄 Traitement de {language}.json...",
2195
- "translation_summary_title": "📊 Résumé des Traductions :",
2196
- "total_translations_applied": "Total des traductions appliquées : {totalTranslations}",
2224
+ "processing_file": "📄 Traitement {language}.json...",
2225
+ "translation_summary_title": "📊 Résumé de la traduction :",
2226
+ "total_translations_applied": "Total des traductions appliquées : {totalTranslations}",
2197
2227
  "run_with_apply_instruction": "💡 Exécutez avec --apply pour appliquer ces traductions",
2198
- "no_translation_mappings": "⚠️ Aucune correspondance de traduction disponible pour {language}",
2199
- "translation_applied": "✅ {key} : \"{oldValue}\" → \"{newValue}\"",
2200
- "saved_translations": "💾 {count} traductions sauvegardées dans {filename}",
2201
- "found_translatable_items": "🔍 {count} éléments traduisibles trouvés",
2228
+ "no_translation_mappings": "⚠️ Aucun mappage de traduction disponible pour {language}",
2229
+ "translation_applied": "✅ {key}: \"{oldValue}\" → \"{newValue}\"",
2230
+ "saved_translations": "💾 Enregistré {count} traductions à {filename}",
2231
+ "found_translatable_items": "🔍 Trouvé {count} éléments traduisibles",
2202
2232
  "no_automatic_translations": "✨ Aucune traduction automatique disponible",
2203
- "error_processing_file": "❌ Erreur lors du traitement de {filename} : {errorMessage}",
2204
- "coverage_report_title": "📊 Rapport de Couverture des Traductions",
2205
- "coverage_report_separator": "===============================",
2206
- "file_header": "📄 {filename} :",
2207
- "total_keys": "Total des clés : {total}",
2208
- "translated_keys": "Traduites : {translated}",
2209
- "untranslated_markers": "Marqueurs non traduits : {untranslated}",
2210
- "contains_english": "Contient de l'anglais : {hasEnglish}",
2211
- "coverage_percentage": "Couverture : {coverage}%",
2212
- "error_general": "❌ Erreur :",
2213
- "use_help": "Utilisez --help pour voir les instructions d'utilisation"
2233
+ "error_processing_file": "❌ Traitement des erreurs {filename}: {errorMessage}",
2234
+ "coverage_report_title": "📊 Rapport de couverture des traductions",
2235
+ "coverage_report_separator": "================================",
2236
+ "file_header": "📄 {filename}:",
2237
+ "total_keys": "Clés totales : {total}",
2238
+ "translated_keys": "Traduit: {translated}",
2239
+ "untranslated_markers": "Marqueurs non traduits : {untranslated}",
2240
+ "contains_english": "Contient l'anglais : {hasEnglish}",
2241
+ "coverage_percentage": "Couverture: {coverage}%",
2242
+ "error_general": "❌ Erreur :",
2243
+ "use_help": "Utilisez --help pour les informations d'utilisation"
2214
2244
  },
2215
2245
  "cleaningUpReportFiles": "Nettoyage des anciens fichiers de rapport...",
2216
- "couldNotDelete": "Impossible de supprimer {file} : {error}",
2217
- "deletedOldReportFiles": "{count} anciens fichiers de rapport supprimés.",
2246
+ "couldNotDelete": "Impossible de supprimer {file}: {error}",
2247
+ "deletedOldReportFiles": "Supprimé {count} anciens fichiers de rapport.",
2218
2248
  "errorCleaningUpReports": "Erreur lors du nettoyage des rapports : {error}",
2219
2249
  "noOldReportFilesToDelete": "Aucun ancien fichier de rapport à supprimer.",
2220
2250
  "reportFilesPreserved": "Fichiers de rapport préservés.",
@@ -2222,139 +2252,139 @@
2222
2252
  "reportSaved": "Rapport enregistré dans : {reportPath}"
2223
2253
  },
2224
2254
  "ui": {
2225
- "autoDetectedI18nDirectory": "Répertoire i18n détecté automatiquement : {path}",
2226
- "executingCommand": "🔄 Exécution de la commande : {command}",
2227
- "unknownCommand": "Commande inconnue : {command}",
2228
- "errorExecutingCommand": "Erreur lors de l'exécution de la commande : {error}",
2229
- "errorLoadingTranslationFile": "Erreur lors du chargement du fichier de traduction pour '{language}' : {error}",
2230
- "errorSavingLanguagePreference": "Erreur lors de la sauvegarde de la préférence de langue : {error}",
2231
- "noActiveReadlineInterface": "Aucune interface readline active disponible",
2232
- "uiLanguageUpdated": "🌍 Langue de l'interface mise à jour vers : {language}",
2233
- "selectOptionPrompt": "Sélectionnez une option :",
2255
+ "autoDetectedI18nDirectory": "Répertoire i18n détecté automatiquement : {path}",
2256
+ "executingCommand": "Exécution de la commande : {command}",
2257
+ "unknownCommand": "Commande inconnue : {command}",
2258
+ "errorExecutingCommand": "Erreur lors de l'exécution de la commande : {error}",
2259
+ "errorLoadingTranslationFile": "Erreur lors du chargement du fichier de traduction pour '{language}': {error}",
2260
+ "errorSavingLanguagePreference": "Erreur lors de l'enregistrement des préférences de langue : {error}",
2261
+ "noActiveReadlineInterface": "Aucune interface de lecture active disponible",
2262
+ "uiLanguageUpdated": "Langue de l'interface utilisateur mise à jour : {language}",
2263
+ "selectOptionPrompt": "Sélectionnez une option :",
2234
2264
  "pressEnterToReturn": "Appuyez sur Entrée pour revenir au menu principal...",
2235
- "detectedSourceDirectory": "Répertoire source détecté : {sourceDir}",
2236
- "detectedI18nDirectory": "Répertoire i18n détecté : {directory}",
2237
- "toolkitTitle": "🌍 i18ntk - Boîte à outils de gestion i18n pour entreprise",
2238
- "versionInfo": "📦 Version : {version}",
2239
- "releaseDate": "📅 Date de sortie : {date}",
2240
- "maintainer": "👤 Mainteneur : {maintainer}",
2241
- "nodeVersion": "🔧 Node.js : {version}",
2242
- "license": "📄 Licence : {license}",
2243
- "whatsNew": "✨ Nouveautés de la v{version} :",
2265
+ "detectedSourceDirectory": "Répertoire source détecté : {sourceDir}",
2266
+ "detectedI18nDirectory": "Répertoire i18n détecté : {directory}",
2267
+ "toolkitTitle": "i18ntk - Boîte à outils de gestion Enterprise i18n",
2268
+ "versionInfo": "Version: {version}",
2269
+ "releaseDate": "Date de sortie : {date}",
2270
+ "maintainer": "Responsable : {maintainer}",
2271
+ "nodeVersion": "Noeud.js : {version}",
2272
+ "license": "Licence: {license}",
2273
+ "whatsNew": "✨ Quoi de neuf en v{version}:",
2244
2274
  "changeItem": "{change}",
2245
- "documentation": "📚 Documentation : {url}",
2246
- "issues": "🐛 Problèmes : {url}",
2247
- "versionInfoUnavailable": "Informations de version i18ntk non disponibles",
2248
- "versionInfoError": "Erreur : {error}"
2275
+ "documentation": "📚Documents : {url}",
2276
+ "issues": "🐛 Problèmes : {url}",
2277
+ "versionInfoUnavailable": "Les informations sur la version i18ntk ne sont pas disponibles",
2278
+ "versionInfoError": "Erreur: {error}"
2249
2279
  },
2250
2280
  "validateLanguagePurity": {
2251
2281
  "phrase_debug_tools": "outils de débogage",
2252
2282
  "phrase_settings": "paramètres",
2253
- "phrase_configuration": "parametrage",
2283
+ "phrase_configuration": "configuration",
2254
2284
  "phrase_invalid_choice": "choix invalide",
2255
2285
  "phrase_please_select": "veuillez sélectionner",
2256
2286
  "phrase_back_to_main_menu": "retour au menu principal",
2257
2287
  "phrase_error": "erreur",
2258
2288
  "phrase_warning": "avertissement",
2259
2289
  "phrase_success": "succès",
2260
- "phrase_failed": "échec",
2290
+ "phrase_failed": "échoué",
2261
2291
  "phrase_loading": "chargement",
2262
- "phrase_saving": "sauvegarde",
2263
- "phrase_full_system_debug": "débogage système complet",
2264
- "phrase_configuration_debug": "débogage de configuration",
2292
+ "phrase_saving": "économie",
2293
+ "phrase_full_system_debug": "débogage complet du système",
2294
+ "phrase_configuration_debug": "débogage de la configuration",
2265
2295
  "phrase_translation_debug": "débogage de traduction",
2266
- "phrase_performance_debug": "débogage de performance",
2267
- "phrase_admin_pin_setup": "configuration du code PIN administrateur",
2268
- "phrase_enter_admin_pin": "entrez le code PIN administrateur",
2269
- "phrase_confirm_admin_pin": "confirmez le code PIN administrateur",
2270
- "phrase_authentication_failed": "authentification échouée",
2271
- "phrase_access_denied": "accès refusé",
2296
+ "phrase_performance_debug": "débogage des performances",
2297
+ "phrase_admin_pin_setup": "configuration du code PIN d'administrateur",
2298
+ "phrase_enter_admin_pin": "entrez le code PIN d'administrateur",
2299
+ "phrase_confirm_admin_pin": "confirmer le code PIN d'administrateur",
2300
+ "phrase_authentication_failed": "l'authentification a échoué",
2301
+ "phrase_access_denied": "Accès refusé",
2272
2302
  "phrase_security_log": "journal de sécurité",
2273
2303
  "language_german": "Allemand",
2274
2304
  "language_french": "Français",
2275
2305
  "language_spanish": "Espagnol",
2276
- "language_russian": "Russe",
2277
- "language_japanese": "Japonais",
2306
+ "language_russian": "russe",
2307
+ "language_japanese": "japonais",
2278
2308
  "language_chinese": "Chinois",
2279
- "validator_title": "🔍 Validateur de Pureté Linguistique",
2280
- "validating_file": "📄 Validation de {language}.json ({name})...",
2281
- "valid_file_message": "✅ Valide - Aucune violation de pureté linguistique",
2282
- "invalid_file_message": "❌ Invalide - {count} violation(s) trouvée(s)",
2283
- "no_validation_rules": "Aucune règle de validation définie pour la langue : {language}",
2284
- "error_reading_file": "Erreur lors de la lecture du fichier : {errorMessage}",
2285
- "issue_forbidden_marker": "Contient un marqueur interdit : {marker}",
2286
- "issue_english_phrase": "Contient une phrase en anglais : \"{phrase}\"",
2287
- "issue_english_words": "Contient des mots en anglais : {words}",
2288
- "issue_missing_cyrillic": "Le texte long devrait contenir des caractères cyrilliques pour le russe",
2289
- "issue_missing_japanese": "Le texte long devrait contenir des caractères japonais",
2290
- "issue_missing_chinese": "Le texte long devrait contenir des caractères chinois",
2291
- "summary_title": "📊 RÉSUMÉ DE LA VALIDATION",
2292
- "overall_results_header": "📋 Résultats Globaux :",
2293
- "total_files_validated": "Total des fichiers validés : {count}",
2294
- "valid_files": "Fichiers valides : {count}",
2295
- "invalid_files": "Fichiers invalides : {count}",
2296
- "total_violations": "Total des violations : {count}",
2297
- "violations_by_file_header": "❌ VIOLATIONS PAR FICHIER :"
2309
+ "validator_title": "🔍 Validateur de pureté du langage",
2310
+ "validating_file": "📄 Validation {language}.json ({name})...",
2311
+ "valid_file_message": "✅ Valide - Aucune violation de la pureté du langage",
2312
+ "invalid_file_message": "❌ Invalide - {count} violation(s) constatée(s)",
2313
+ "no_validation_rules": "Aucune règle de validation définie pour la langue : {language}",
2314
+ "error_reading_file": "Erreur de lecture du fichier : {errorMessage}",
2315
+ "issue_forbidden_marker": "Contient un marqueur interdit : {marker}",
2316
+ "issue_english_phrase": "Contient la phrase anglaise : \"{phrase}\"",
2317
+ "issue_english_words": "Contient des mots anglais : {words}",
2318
+ "issue_missing_cyrillic": "Le texte long doit contenir des caractères cyrilliques pour le russe",
2319
+ "issue_missing_japanese": "Le texte long doit contenir des caractères japonais",
2320
+ "issue_missing_chinese": "Le texte long doit contenir des caractères chinois",
2321
+ "summary_title": "📊 RÉSUMÉ DE VALIDATION",
2322
+ "overall_results_header": "📋 Résultats globaux :",
2323
+ "total_files_validated": "Total des dossiers validés : {count}",
2324
+ "valid_files": "Fichiers valides : {count}",
2325
+ "invalid_files": "Fichiers invalides : {count}",
2326
+ "total_violations": "Total des violations : {count}",
2327
+ "violations_by_file_header": "❌VIOLATIONS PAR DOSSIER :"
2298
2328
  },
2299
2329
  "workflow": {
2300
- "title": "Gestion des workflows",
2301
- "description": "Gérer les workflows i18n.",
2302
- "select_workflow_file": "Sélectionnez un fichier de workflow à exécuter :",
2330
+ "title": "Gestion du flux de travail",
2331
+ "description": "Gérez les flux de travail i18n.",
2332
+ "select_workflow_file": "Sélectionnez un fichier de workflow à exécuter :",
2303
2333
  "no_workflow_files": "Aucun fichier de workflow trouvé dans le répertoire des workflows.",
2304
- "invalid_selection": "Sélection invalide. Veuillez entrer un numéro correspondant à un fichier de workflow.",
2305
- "workflow_execution_started": "Démarrage du workflow : {workflowName}",
2306
- "workflow_execution_completed": "Workflow terminé : {workflowName}",
2307
- "workflow_execution_failed": "Échec du workflow : {workflowName} - {error}",
2334
+ "invalid_selection": "Sélection invalide. Veuillez saisir un numéro correspondant à un fichier de workflow.",
2335
+ "workflow_execution_started": "Démarrage du flux de travail : {workflowName}",
2336
+ "workflow_execution_completed": "Flux de travail terminé : {workflowName}",
2337
+ "workflow_execution_failed": "Échec du flux de travail : {workflowName} - {error}",
2308
2338
  "workflow_cancelled": "Exécution du workflow annulée.",
2309
- "press_enter_to_continue": "Appuyez sur Entrée pour continuer !",
2310
- "starting": "🚀 Démarrage du workflow...",
2311
- "completed": "✅ Workflow terminé avec succès !",
2339
+ "press_enter_to_continue": "Appuyez sur Entrée pour continuer !",
2340
+ "starting": "🚀 Démarrage du flux de travail...",
2341
+ "completed": "✅ Workflow terminé avec succès !",
2312
2342
  "checkReports": "📄 Consultez les rapports pour plus de détails.",
2313
- "exitingCompleted": "📝 Workflow terminé. Fermeture...",
2343
+ "exitingCompleted": "📝 Workflow terminé. Sortir...",
2314
2344
  "summary": {
2315
- "title": "📋 RÉSUMÉ DU WORKFLOW",
2345
+ "title": "📋 RÉSUMÉ DU FLUX DE TRAVAIL",
2316
2346
  "separator": "===================",
2317
- "completedAt": "🕐 Workflow terminé à : {timestamp}",
2318
- "initialViolations": "📊 Violations initiales : {count}",
2319
- "finalViolations": "📉 Violations finales : {count}",
2320
- "totalFixes": "🔧 Total des corrections appliquées : {count}",
2321
- "improvement": "📈 Amélioration : {percentage}%",
2322
- "stepResults": "📝 RÉSULTATS DES ÉTAPES :",
2347
+ "completedAt": "🕐 Workflow terminé à : {timestamp}",
2348
+ "initialViolations": "📊 Infractions initiales : {count}",
2349
+ "finalViolations": "📉 Violations finales : {count}",
2350
+ "totalFixes": "🔧 Total des correctifs appliqués : {count}",
2351
+ "improvement": "📈 Amélioration : {percentage}%",
2352
+ "stepResults": "📝 RÉSULTATS DES ÉTAPES :",
2323
2353
  "stepDetail": "{number}. {status} {stepName}",
2324
- "violations": "Violations : {count}",
2325
- "fixesApplied": "Corrections appliquées : {count}",
2326
- "nextSteps": "💡 PROCHAINES ÉTAPES :",
2327
- "congratulations": "🎉 Félicitations ! Tous les fichiers de localisation ont maintenant une pureté linguistique parfaite !",
2328
- "cicdIntegration": "✅ Envisagez d'intégrer le validateur dans votre pipeline CI/CD",
2329
- "automatedChecks": "✅ Configurez des vérifications automatisées pour les nouvelles traductions",
2330
- "greatProgress": "🎯 Excellent progrès ! La plupart des problèmes ont été résolus.",
2354
+ "violations": "Infractions : {count}",
2355
+ "fixesApplied": "Correctifs appliqués : {count}",
2356
+ "nextSteps": "💡 PROCHAINES ÉTAPES :",
2357
+ "congratulations": "🎉 Félicitations ! Tous les fichiers de paramètres régionaux ont désormais une pureté de langue parfaite !",
2358
+ "cicdIntegration": "✅ Pensez à intégrer le validateur dans votre pipeline CI/CD",
2359
+ "automatedChecks": "✅ Mettre en place des contrôles automatisés pour les nouvelles traductions",
2360
+ "greatProgress": "🎯 Belle progression ! La plupart des problèmes ont été résolus.",
2331
2361
  "manualReview": "🔍 Examinez manuellement les violations restantes",
2332
- "addMappings": "🌐 Envisagez d'ajouter plus de mappages de traduction pour les cas particuliers",
2333
- "goodProgress": "📈 Bons progrès réalisés, mais plus de travail nécessaire.",
2334
- "expandMappings": "🔧 Étendre les mappages de traduction automatique",
2335
- "professionalReview": "👥 Envisagez une révision manuelle des traductions complexes",
2336
- "runAgain": "🔄 Relancez le workflow après avoir ajouté plus de mappages",
2337
- "limitedProgress": "⚠️ Progrès limités. Une intervention manuelle peut être nécessaire.",
2338
- "reviewMappings": "🔍 Examinez les mappages de traduction et ajoutez ceux manquants",
2362
+ "addMappings": "🌐 Envisagez d'ajouter davantage de mappages de traduction pour les cas extrêmes",
2363
+ "goodProgress": "📈 De bons progrès ont été réalisés, mais il reste encore du travail à faire.",
2364
+ "expandMappings": "🔧 Développez les mappages de traduction automatique",
2365
+ "professionalReview": "👥 Envisagez la révision manuelle des traductions complexes",
2366
+ "runAgain": "🔄 Exécutez à nouveau le workflow après avoir ajouté d'autres mappages",
2367
+ "limitedProgress": "⚠️ Progression limitée. Une intervention manuelle peut être nécessaire.",
2368
+ "reviewMappings": "🔍 Vérifiez les mappages de traduction et ajoutez ceux manquants",
2339
2369
  "professionalServices": "👥 Envisagez des services de traduction professionnels",
2340
- "checkIssues": "🔧 Vérifiez les problèmes systématiques dans les fichiers de localisation",
2370
+ "checkIssues": "🔧 Vérifiez les problèmes systématiques dans les fichiers de paramètres régionaux",
2341
2371
  "success": "✅",
2342
2372
  "warning": "⚠️"
2343
2373
  }
2344
2374
  },
2345
2375
  "consoleI18nTester": {
2346
2376
  "found_target_file": "Fichier cible trouvé",
2347
- "scanning_files_for_console_statements": "Analyse des fichiers pour les instructions console",
2377
+ "scanning_files_for_console_statements": "Analyse des fichiers pour les instructions de console",
2348
2378
  "found_javascript_files": "Fichiers javascript trouvés",
2349
- "console_i18n_analysis_results": "Résultats de l'analyse i18n de la console",
2350
- "total_console_statements": "Total des instructions console",
2351
- "translated_statements": "Instructions traduites",
2352
- "hardcoded_statements": "Instructions codées en dur",
2379
+ "console_i18n_analysis_results": "Résultats de l'analyse de la console i18n",
2380
+ "total_console_statements": "Total des instructions de la console",
2381
+ "translated_statements": "Déclarations traduites",
2382
+ "hardcoded_statements": "Déclarations codées en dur",
2353
2383
  "translation_coverage": "Couverture de traduction",
2354
- "coverage_by_file": "Couverture par fichier",
2384
+ "coverage_by_file": "Couverture par dossier",
2355
2385
  "file_coverage_stats": "Statistiques de couverture des fichiers",
2356
- "hardcoded_console_statements": "Instructions console codées en dur",
2357
- "file_header": "En-tête de fichier",
2386
+ "hardcoded_console_statements": "Instructions de console codées en dur",
2387
+ "file_header": "En-tête du fichier",
2358
2388
  "line_statement": "Instruction de ligne",
2359
2389
  "suggested_key": "Clé suggérée",
2360
2390
  "suggested_replacement": "Remplacement suggéré",
@@ -2366,14 +2396,14 @@
2366
2396
  "translation_keys_to_add": "Clés de traduction à ajouter",
2367
2397
  "add_keys_instruction": "Instruction d'ajout de clés",
2368
2398
  "perfect_translation_coverage": "Couverture de traduction parfaite",
2369
- "all_statements_using_translation": "Toutes les instructions utilisent la traduction",
2370
- "i18n_console_translation_checker": "Vérificateur de traduction console i18n",
2371
- "script_description_line1": "Description du script ligne 1",
2372
- "script_description_line2": "Description du script ligne 2",
2373
- "analysis_completed_in_duration": "Analyse terminée en durée",
2374
- "report_saved_to_path": "Rapport sauvegardé dans le chemin",
2399
+ "all_statements_using_translation": "Toutes les déclarations utilisant la traduction",
2400
+ "i18n_console_translation_checker": "Vérificateur de traduction de la console I18n",
2401
+ "script_description_line1": "Ligne de description du script 1",
2402
+ "script_description_line2": "Ligne de description du script 2",
2403
+ "analysis_completed_in_duration": "Analyse complétée en durée",
2404
+ "report_saved_to_path": "Rapport enregistré dans le chemin",
2375
2405
  "found_hardcoded_messages": "Messages codés en dur trouvés",
2376
- "all_console_messages_use_translation": "Tous les messages console utilisent la traduction"
2406
+ "all_console_messages_use_translation": "Tous les messages de la console utilisent la traduction"
2377
2407
  },
2378
2408
  "exportTranslations": {
2379
2409
  "createdDirectory": "Répertoire créé",
@@ -2381,21 +2411,21 @@
2381
2411
  "createdTemplate": "Modèle créé",
2382
2412
  "skippedExisting": "Existant ignoré",
2383
2413
  "title": "Titre",
2384
- "creatingTemplates": "Création des modèles",
2414
+ "creatingTemplates": "Création de modèles",
2385
2415
  "summary": "Résumé",
2386
- "summaryLanguages": "Résumé des langues",
2387
- "summaryFilesPerLanguage": "Résumé des fichiers par langue",
2388
- "summaryTotalFiles": "Résumé total des fichiers",
2416
+ "summaryLanguages": "Langues du résumé",
2417
+ "summaryFilesPerLanguage": "Fichiers récapitulatifs par langue",
2418
+ "summaryTotalFiles": "Récapitulatif du total des fichiers",
2389
2419
  "success": "Succès",
2390
2420
  "location": "Emplacement",
2391
2421
  "nextSteps": "Prochaines étapes"
2392
2422
  },
2393
2423
  "dashboard": {
2394
- "title": "Tableau de bord",
2395
- "overview": "Vue d'ensemble"
2424
+ "title": "Titre",
2425
+ "overview": "Aperçu"
2396
2426
  },
2397
2427
  "auth": {
2398
- "title": "Authentification",
2428
+ "title": "Titre",
2399
2429
  "email": "E-mail",
2400
2430
  "password": "Mot de passe",
2401
2431
  "signIn": "Se connecter",
@@ -2406,7 +2436,7 @@
2406
2436
  "usage_analysis_failed": "L'analyse de l'utilisation a échoué."
2407
2437
  },
2408
2438
  "completeTranslations": {
2409
- "warning_could_not_parse_filepa": "Avertissement : impossible d'analyser le chemin du fichier : {filePath}"
2439
+ "warning_could_not_parse_filepa": "Attention : impossible d'analyser le chemin du fichier : {filePath}"
2410
2440
  },
2411
2441
  "pressEnterToContinue": "Appuyez sur Entrée pour continuer...",
2412
2442
  "status": {