i18ntk 3.1.2 → 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.
- package/CHANGELOG.md +94 -23
- package/README.md +29 -23
- package/SECURITY.md +19 -5
- package/main/i18ntk-complete.js +120 -49
- package/main/i18ntk-translate.js +25 -1
- package/main/manage/index.js +0 -2
- package/main/manage/managers/InteractiveMenu.js +4 -0
- package/main/manage/services/FileManagementService.js +14 -11
- package/package.json +5 -3
- package/runtime/enhanced.d.ts +1 -1
- package/runtime/i18ntk.d.ts +2 -11
- package/ui-locales/de.json +1389 -1359
- package/ui-locales/es.json +1503 -1473
- package/ui-locales/fr.json +1626 -1596
- package/ui-locales/ja.json +1595 -1565
- package/ui-locales/ru.json +1638 -1608
- package/ui-locales/zh.json +1613 -1583
- package/utils/admin-auth.js +6 -6
- package/utils/config-manager.js +6 -3
- package/utils/translate/api.js +172 -41
- package/utils/translate/safe-network.js +280 -0
- package/utils/translate/traverse.js +14 -25
package/ui-locales/fr.json
CHANGED
|
@@ -12,632 +12,632 @@
|
|
|
12
12
|
"save": "Sauvegarder",
|
|
13
13
|
"cancel": "Annuler",
|
|
14
14
|
"delete": "Supprimer",
|
|
15
|
-
"edit": "
|
|
15
|
+
"edit": "Modifier",
|
|
16
16
|
"loading": "Chargement...",
|
|
17
17
|
"offlineTitle": "Vous êtes hors ligne",
|
|
18
|
-
"offlineMessage": "
|
|
19
|
-
"tryReconnect": "
|
|
18
|
+
"offlineMessage": "Veuillez vérifier votre connexion Internet",
|
|
19
|
+
"tryReconnect": "Essayez de vous reconnecter",
|
|
20
20
|
"logout": "Déconnexion",
|
|
21
|
-
"login": "
|
|
21
|
+
"login": "Se connecter",
|
|
22
22
|
"amount": "Montant",
|
|
23
23
|
"success": "Succès",
|
|
24
24
|
"error": "Erreur",
|
|
25
25
|
"warning": "Avertissement",
|
|
26
|
-
"info": "
|
|
27
|
-
"debug": "
|
|
28
|
-
"progress": "
|
|
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": "
|
|
36
|
-
"typeMismatch": "
|
|
37
|
-
"structureMismatch": "
|
|
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": "❌
|
|
41
|
-
"stackTrace": "Trace de pile
|
|
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}'
|
|
45
|
-
"stepFailed": "Étape '{stepName}'
|
|
46
|
-
"runningStep": "
|
|
47
|
-
"command": "Commande
|
|
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": "
|
|
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
|
|
56
|
-
"initializationFailed": "❌
|
|
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
|
|
59
|
-
"sourceDirectoryNotFound": "Répertoire source
|
|
60
|
-
"configLoadingFailed": "
|
|
61
|
-
"invalidSourceDirectory": "Répertoire source invalide
|
|
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": "
|
|
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é
|
|
67
|
-
"errorRunningDebugTool": "Erreur lors de l'exécution de l'outil de débogage '{displayName}'
|
|
68
|
-
"errorReadingDebugLogs": "Erreur lors de la lecture des journaux de débogage
|
|
69
|
-
"errorAnalyzingLogFile": "Erreur lors de l'analyse du fichier journal
|
|
70
|
-
"errorAnalyzingTranslationKeys": "Erreur lors de l'analyse des clés de traduction
|
|
71
|
-
"errorAnalyzingTranslationCompleteness": "Erreur lors de l'analyse de l'
|
|
72
|
-
"analyzingTranslationCompleteness": "
|
|
73
|
-
"i18nDirectoryNotFound": "⚠️
|
|
74
|
-
"translationCompletenessAnalysisFailed": "⚠️
|
|
75
|
-
"failedToAnalyzeLanguage": "❌ Échec de l'analyse de la langue {language}
|
|
76
|
-
"errorReadingI18nDirectory": "❌ Erreur
|
|
77
|
-
"languageCompletenessTitle": "📈 EXHAUSTIVITÉ
|
|
78
|
-
"errorAnalyzingTranslationFormat": "Erreur lors de l'analyse du format de traduction
|
|
79
|
-
"errorAnalyzingTranslationType": "Erreur lors de l'analyse du type de traduction
|
|
80
|
-
"errorAnalyzingTranslationStructure": "Erreur lors de l'analyse de la structure de traduction
|
|
81
|
-
"errorAnalyzingTranslationFormatMismatch": "Erreur lors de l'analyse
|
|
82
|
-
"errorAnalyzingTranslationTypeMismatch": "Erreur lors de l'analyse
|
|
83
|
-
"errorAnalyzingTranslationStructureMismatch": "Erreur lors de l'analyse
|
|
84
|
-
"errorAnalyzingTranslationSameAsSource": "Erreur lors de l'analyse
|
|
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.
|
|
87
|
-
"nextStep2": "2.
|
|
88
|
-
"nextStep3": "3. Analyser l'exhaustivité
|
|
89
|
-
"nextStep4": "4. Compléter les traductions manquantes
|
|
90
|
-
"nextStep5": "5. Générer
|
|
91
|
-
"nextStep6": "6. Réviser et finaliser les traductions
|
|
92
|
-
"generating": "Génération
|
|
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
|
|
98
|
-
"missingKeys": "Clés manquantes
|
|
99
|
-
"partialKeys": "Clés partielles
|
|
100
|
-
"home": "
|
|
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": "🎛️
|
|
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": "
|
|
109
|
-
"noPackageJson": "Aucun
|
|
110
|
-
"noI18nDir": "Aucun répertoire i18n trouvé
|
|
111
|
-
"noI18nConfig": "Aucun fichier de configuration i18n trouvé
|
|
108
|
+
"readlineClosed": "Le flux d’entré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": "
|
|
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
|
|
118
|
-
"output_dir": "
|
|
119
|
-
"framework": "Framework cible (react, vue,
|
|
120
|
-
"patterns": "
|
|
121
|
-
"exclude": "
|
|
122
|
-
"output_report": "
|
|
123
|
-
"min_length": "Longueur minimale du texte à
|
|
124
|
-
"max_length": "Longueur maximale du texte à
|
|
125
|
-
"include_tests": "Inclure les fichiers de test dans le
|
|
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
|
|
128
|
-
"sourceDirectory": "📁
|
|
129
|
-
"frameworkDetected": "🎯
|
|
130
|
-
"scanningFiles": "📊
|
|
131
|
-
"foundTexts": "📝 {textCount} textes
|
|
132
|
-
"generatingReport": "📊 Génération
|
|
133
|
-
"reportSaved": "💾 Rapport
|
|
134
|
-
"noTextsFound": "✅ Aucun texte anglais
|
|
135
|
-
"scanComplete": "🎉 Scan terminé avec succès!",
|
|
136
|
-
"analysisTitle": "🔍 ANALYSE
|
|
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
|
|
140
|
-
"context": "📝
|
|
141
|
-
"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
|
|
145
|
-
"description": "Cet outil
|
|
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": "🎯
|
|
149
|
-
"available": "Frameworks disponibles:
|
|
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": "📁
|
|
155
|
-
"current": "Répertoire actuel: {dir}",
|
|
156
|
-
"description": "Entrez le répertoire à
|
|
157
|
-
"input": "
|
|
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": "
|
|
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": "
|
|
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": "🏷️
|
|
172
|
-
"scanningLanguage": "📊
|
|
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à
|
|
175
|
-
"fullReportSaved": "📊 Rapport complet
|
|
176
|
-
"reviewReport": "Veuillez
|
|
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
|
|
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
|
|
182
|
-
"analysisSeparator": "
|
|
183
|
-
"totalIssues": "
|
|
184
|
-
"missingTranslations": "Traductions manquantes: {missing}",
|
|
185
|
-
"placeholderTranslations": "Traductions
|
|
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": "📋
|
|
187
|
+
"detailedIssues": "📋 QUESTIONS DÉTAILLÉES :",
|
|
188
188
|
"detailedSeparator": "--------------------------------------------------",
|
|
189
189
|
"filePath": "📄 {file} → {path}",
|
|
190
|
-
"missingKey": "❌
|
|
191
|
-
"placeholderKey": "⚠️
|
|
192
|
-
"moreIssues": "... et {count} problèmes
|
|
193
|
-
"confirmationTitle": "🤔
|
|
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": "
|
|
195
|
+
"optionYes": "y - Oui, appliquer tous les correctifs",
|
|
196
196
|
"optionNo": "n - Non, annuler l'opération",
|
|
197
|
-
"optionShow": "
|
|
198
|
-
"choicePrompt": "Votre choix (o/n/
|
|
199
|
-
"nonInteractiveMode": "⚡ Mode non interactif détecté - application automatique des
|
|
200
|
-
"reportGenerated": "📊 Rapport de
|
|
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
|
|
204
|
-
"description": "Cet outil vous aidera à corriger les traductions brisées et les
|
|
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
|
|
208
|
-
"description": "
|
|
209
|
-
"currentDefaults": "Marqueurs par défaut
|
|
210
|
-
"input": "Marqueurs (ou appuyez sur Entrée pour
|
|
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": "🌍
|
|
214
|
-
"available": "Langues disponibles
|
|
215
|
-
"description": "
|
|
216
|
-
"input": "Langues
|
|
217
|
-
"noLanguages": "Aucune langue
|
|
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": "📁
|
|
221
|
-
"current": "Répertoire actuel
|
|
222
|
-
"description": "Entrez le répertoire contenant vos fichiers de
|
|
223
|
-
"input": "
|
|
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
|
|
229
|
-
"error": "
|
|
230
|
-
"fixing": "
|
|
231
|
-
"foundLanguages": "{count} langues
|
|
232
|
-
"languageFixed": "{language}
|
|
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": "✅
|
|
238
|
+
"stepCompletedWithIcon": "✅ Terminé : {stepName}",
|
|
239
239
|
"stepValidateTranslations": "Valider les traductions",
|
|
240
|
-
"stepRunning": "
|
|
241
|
-
"separator": "
|
|
242
|
-
"stepFailed": "
|
|
243
|
-
"errorLabel": "Erreur
|
|
244
|
-
"autoRunScriptTitle": "
|
|
245
|
-
"usageTitle": "
|
|
246
|
-
"runAllSteps": "
|
|
247
|
-
"configureSettingsFirst": "
|
|
248
|
-
"runSpecificSteps": "
|
|
249
|
-
"showHelp": "
|
|
250
|
-
"examplesTitle": "Exemples
|
|
251
|
-
"configExample": "
|
|
252
|
-
"stepsExample1": "
|
|
253
|
-
"stepsExample2": "
|
|
254
|
-
"customSettingsConfiguration": "
|
|
255
|
-
"availableSteps": "Étapes disponibles
|
|
256
|
-
"startingAutoRunWorkflow": "Démarrage du workflow
|
|
257
|
-
"workflowIncludesSteps": "Le
|
|
258
|
-
"missingRequiredFile": "Fichier requis manquant
|
|
259
|
-
"workflowStopped": "
|
|
260
|
-
"workflowCompleted": "Workflow
|
|
261
|
-
"successfulSteps": "Étapes réussies
|
|
262
|
-
"failedSteps": "Étapes
|
|
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": "
|
|
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": "
|
|
268
|
-
"runningStep": "
|
|
269
|
-
"commandLabel": "Commande
|
|
270
|
-
"stepCompletedWithTime": "
|
|
271
|
-
"stepCompleted": "
|
|
272
|
-
"stepFailedWithError": "
|
|
273
|
-
"requiredStepFailed": "
|
|
274
|
-
"optionalStepFailed": "
|
|
275
|
-
"stepRequired": "(
|
|
276
|
-
"stepOptional": "(
|
|
277
|
-
"startingExecution": "
|
|
278
|
-
"pressEnterToContinue": "Appuyez sur Entrée pour continuer
|
|
279
|
-
"runningSelectedSteps": "Exécution des étapes sélectionnées
|
|
280
|
-
"invalidStepNumber": "Numéro d'étape invalide
|
|
281
|
-
"executionReport": "Rapport d'exécution
|
|
282
|
-
"requiredFailedSteps": "
|
|
283
|
-
"stepDetails": "Détails de l'étape
|
|
284
|
-
"reportSavedTo": "Rapport enregistré dans
|
|
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": "
|
|
287
|
-
"overallStatus": "Statut
|
|
288
|
-
"pressEnterForDefaults": "Appuyez sur Entrée pour utiliser les paramètres par défaut pour
|
|
289
|
-
"sourceDirPrompt": "Entrez le répertoire source (par défaut
|
|
290
|
-
"sourceLangPrompt": "
|
|
291
|
-
"targetLangsPrompt": "
|
|
292
|
-
"translationMarkerPrompt": "
|
|
293
|
-
"outputDirPrompt": "Entrez le répertoire de sortie
|
|
294
|
-
"settingsUpdatedSuccessfully": "Paramètres mis à jour avec succès
|
|
295
|
-
"errorConfiguringSettings": "Erreur lors de la configuration des paramètres
|
|
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
|
|
298
|
-
"configurationFailed": "
|
|
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": "
|
|
301
|
-
"stepCompleteTranslations": "
|
|
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}]
|
|
304
|
+
"stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Étape '{stepName}' en cours d'exécution...",
|
|
305
305
|
"stepFailedIcon": "❌",
|
|
306
|
-
"translationLoadWarning": "
|
|
307
|
-
"configReadError": "Erreur de lecture
|
|
306
|
+
"translationLoadWarning": "Attention : Impossible de charger {lang} traductions",
|
|
307
|
+
"configReadError": "Erreur de lecture {file}"
|
|
308
308
|
},
|
|
309
309
|
"analyze": {
|
|
310
|
-
"help_message": "
|
|
311
|
-
"source_directory": "📁 Répertoire source: {sourceDir}",
|
|
312
|
-
"i18n_directory": "🌐
|
|
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
|
|
315
|
-
"sourceLanguageLabel": "🌍 Langue
|
|
316
|
-
"strictModeLabel": "⚙️ Mode
|
|
317
|
-
"found_translation_files_count": "✅
|
|
318
|
-
"analyzing_translations": "🔍
|
|
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": "
|
|
322
|
+
"sample_missing_keys": "Exemples de clés manquantes :",
|
|
323
323
|
"missing_key": "- {key}",
|
|
324
|
-
"and_more_missing": "...et {count}
|
|
325
|
-
"sample_unused_keys": "
|
|
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}
|
|
327
|
+
"and_more_unused": "...et {count} plus.",
|
|
328
328
|
"recommendations": "📋 RECOMMANDATIONS",
|
|
329
|
-
"add_missing_translations": "💡
|
|
330
|
-
"remove_unused_translations": "💡
|
|
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.
|
|
333
|
-
"run_with_output_report": "2.
|
|
334
|
-
"add_or_remove_translations": "3.
|
|
335
|
-
"rerun_analysis": "4.
|
|
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
|
|
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": "❌
|
|
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": "📋
|
|
348
|
-
"analyzing": "🔄 Analyse
|
|
347
|
+
"foundLanguages": "📋 Trouvé {count} langages à analyser : {languages}",
|
|
348
|
+
"analyzing": "🔄 Analyse {language}...",
|
|
349
349
|
"reportTitle": "📊 RAPPORT D'ANALYSE DE TRADUCTION",
|
|
350
|
-
"generated": "
|
|
350
|
+
"generated": "Généré : {timestamp}",
|
|
351
351
|
"status": "Statut: {translated}/{total} clés ({percentage}% traduit)",
|
|
352
|
-
"filesAnalyzed": "
|
|
353
|
-
"keysNeedingTranslation": "Clés
|
|
354
|
-
"fileBreakdown": "📋
|
|
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": "📊
|
|
358
|
-
"reportSaved": "Rapport
|
|
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
|
|
363
|
-
"translation": "📊 Traduction: {translated}/{total} ({percentage}%)",
|
|
364
|
-
"structure": "🗂️Structure : {status}",
|
|
365
|
-
"consistent": "
|
|
366
|
-
"inconsistent": "
|
|
367
|
-
"missingKeys": "Clés manquantes: {count}",
|
|
368
|
-
"extraKeys": "Clés supplémentaires: {count}",
|
|
369
|
-
"issues": "⚠️
|
|
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": "
|
|
375
|
-
"type_mismatch": "
|
|
376
|
-
"structure_mismatch": "
|
|
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
|
|
384
|
-
"noLanguages": "⚠️
|
|
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
|
|
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": "
|
|
393
|
-
"couldNotParseTarget": "Impossible
|
|
394
|
-
"couldNotParseSource": "Impossible
|
|
395
|
-
"reportGenerated": "Rapport généré",
|
|
396
|
-
"generateReportPrompt": "
|
|
397
|
-
"title": "🌍
|
|
398
|
-
"separator": "
|
|
399
|
-
"sourceDir": "📁 Répertoire source
|
|
400
|
-
"sourceLanguage": "🌐 Langue source
|
|
401
|
-
"dryRunMode": "🧪 Mode
|
|
402
|
-
"languages": "🌍 Langues disponibles
|
|
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
|
|
405
|
-
"addedKeys": "✅ {count} clés manquantes
|
|
406
|
-
"noChangesNeeded": "✅
|
|
407
|
-
"summaryTitle": "📊 RÉSUMÉ
|
|
408
|
-
"totalChanges": "📝 Modifications totales
|
|
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
|
|
411
|
-
"nextStepsTitle": "📋 ÉTAPES
|
|
412
|
-
"nextStep1": "1.
|
|
413
|
-
"nextStep2": "
|
|
414
|
-
"nextStep3": "2.
|
|
415
|
-
"nextStep4": "
|
|
416
|
-
"nextStep5": "3.
|
|
417
|
-
"nextStep6": "
|
|
418
|
-
"allKeysAvailable": "🎉 Toutes les clés de traduction sont
|
|
419
|
-
"runWithoutDryRun": "💡
|
|
420
|
-
"deletingOldReport": "🗑️
|
|
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
|
|
423
|
-
"reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation
|
|
424
|
-
"foundMissingKeys": "📋 Trouvé {count} clés manquantes
|
|
425
|
-
"couldNotParse": "❌ Impossible d'analyser le rapport d'utilisation. Utilisation
|
|
426
|
-
"errorDuringCompletion": "❌ Erreur lors de la
|
|
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
|
|
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
|
|
435
|
-
"sourceLanguageLabel": "🌍 Langue source
|
|
436
|
-
"strictModeLabel": "⚙️
|
|
437
|
-
"invalidSourceDirectoryError": "Chemin du répertoire source
|
|
438
|
-
"sourceDirectoryNotFoundError": "Répertoire source introuvable
|
|
439
|
-
"invalidOutputDirectoryError": "Chemin du répertoire de sortie
|
|
440
|
-
"invalidReportFileError": "Chemin
|
|
441
|
-
"problematic_keys": "Clés problématiques
|
|
442
|
-
"problematicKeysLabel": "Clés problématiques
|
|
443
|
-
"long_translations": "Traductions longues
|
|
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
|
|
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é
|
|
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
|
|
450
|
-
"found_languages": "Langues trouvées
|
|
451
|
-
"analyzing_file_sizes": "Analyse
|
|
452
|
-
"analyzing_translation_content": "
|
|
453
|
-
"generating_size_comparisons": "Génération
|
|
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
|
|
458
|
-
"file_size_row": "{lang}
|
|
459
|
-
"language_statistics_title": "Statistiques
|
|
460
|
-
"language_stats_header": "Langue
|
|
461
|
-
"language_stats_row": "{lang}
|
|
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
|
|
464
|
-
"size_variation_row": "{lang}
|
|
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}' -
|
|
470
|
-
"generating_detailed_report": "Génération
|
|
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}
|
|
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": "
|
|
476
|
-
"report_saved_to": "Rapport enregistré dans
|
|
477
|
-
"considerReviewingTranslations": "
|
|
478
|
-
"csv_report_saved_to": "Rapport CSV enregistré dans: {csvPath}",
|
|
479
|
-
"human_report_saved": "Rapport lisible
|
|
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
|
|
482
|
-
"folder_summary_row": "{lang}
|
|
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": "📊
|
|
486
|
-
"detailedKeysDescription": "Afficher
|
|
487
|
-
"too_many_keys_warning": "⚠️ Trop de clés
|
|
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
|
|
490
|
-
"analysis_failed": "L'analyse a échoué
|
|
491
|
-
"starting_analysis": "
|
|
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
|
|
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": "
|
|
497
|
-
"long_translations_detected": "{lang} a {longKeys} traductions
|
|
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}
|
|
501
|
-
"key_analysis_header": "
|
|
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": "
|
|
508
|
-
"source_directory_thissourcedir": "📁 Répertoire source: {sourceDir}",
|
|
509
|
-
"translationCompletenessTitle": "🌍
|
|
510
|
-
"i18n_directory_thisi18ndir": "🌐
|
|
511
|
-
"failed_to_parse_filename_error": "⚠️
|
|
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
|
|
515
|
-
"total_key_usages_totalkeysfoun": "📊
|
|
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": "⚠️
|
|
519
|
+
"errorReadingI18nDirectory": "⚠️ Erreur de lecture du répertoire i18n : {error}",
|
|
520
520
|
"pressEnterToReturnToMenu": "📝 Appuyez sur Entrée pour revenir au menu principal...",
|
|
521
|
-
"notTranslatedKeysTotal": "⚠️
|
|
522
|
-
"noSourceFilesFound": "⚠️
|
|
523
|
-
"reviewNotTranslatedKeys": "💡
|
|
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
|
|
526
|
-
"detectedI18nDirectory": "Répertoire i18n
|
|
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
|
|
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": "
|
|
531
|
+
"analysisFailedError": "❌ L'analyse a échoué : {error}",
|
|
532
532
|
"analyzerInitialized": "Analyseur initialisé",
|
|
533
|
-
"analyzerInitFailed": "
|
|
533
|
+
"analyzerInitFailed": "L'initialisation de l'analyseur a échoué : {error}",
|
|
534
534
|
"argsParsed": "Arguments analysés",
|
|
535
|
-
"processedFiles": "Traité {processedFiles}
|
|
536
|
-
"argsParseFailed": "
|
|
537
|
-
"translationDiscoveryError": "Erreur de découverte de traduction: {error}",
|
|
538
|
-
"fileTraversalError": "Erreur de parcours
|
|
539
|
-
"sourceEqualsI18nWarn": "⚠️
|
|
540
|
-
"i18nEqualsSourceWarn": "⚠️
|
|
541
|
-
"usageAnalysisFailed": "⚠️
|
|
542
|
-
"translationFileParseError": "⚠️
|
|
543
|
-
"translationKeysLoadError": "⚠️
|
|
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": "
|
|
546
|
-
"analyzingTranslationCompleteness": "
|
|
547
|
-
"unusedKeysCount": "
|
|
548
|
-
"usedKeysCount": "
|
|
549
|
-
"availableKeysCount": "Clés disponibles: {count}",
|
|
550
|
-
"analysisResults": "Résultats
|
|
551
|
-
"i18nDirectoryNotFound": "⚠️
|
|
552
|
-
"sourceDirectoryNotFound": "⚠️
|
|
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
|
|
557
|
-
"i18n_directory_thisi18ndir": "📁
|
|
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": "⚠️
|
|
560
|
-
"processedFiles": "📊 Traité {processedFiles}
|
|
561
|
-
"failedToProcessFile": "❌ Échec du traitement
|
|
562
|
-
"found_thisusedkeyssize_unique_": "🔍 Trouvé {usedKeysSize} clés uniques
|
|
563
|
-
"total_key_usages_totalkeysfoun": "📊
|
|
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
|
|
568
|
-
"source_files_scanned_thisfileu": "📁 Fichiers sources analysés
|
|
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
|
|
571
|
-
"dynamic_keys_detected_dynamick": "⚡ Clés dynamiques détectées
|
|
572
|
-
"unused_keys_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É
|
|
575
|
-
"language_completeness_stats": "{language}
|
|
576
|
-
"n_sample_unused_keys": "🗑️
|
|
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}
|
|
579
|
-
"n_sample_missing_keys": "❌
|
|
580
|
-
"and_missingkeyslength_5_more": "... et {count}
|
|
581
|
-
"n_generating_detailed_report": "📊 Génération
|
|
582
|
-
"report_saved_reportpath": "📄 Rapport
|
|
583
|
-
"n_recommendations": "💡 RECOMMANDATIONS
|
|
584
|
-
"consider_removing_unused_trans": "🗑️
|
|
585
|
-
"add_missing_translation_keys_t": "➕
|
|
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.
|
|
590
|
-
"help_message": "
|
|
591
|
-
"1_review_the_analysis_results": "1. Examinez les résultats
|
|
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.
|
|
595
|
-
"noSourceFilesFound": "Aucun fichier source
|
|
596
|
-
"i18nDirectoryNotFound": "Répertoire
|
|
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}
|
|
599
|
-
"failedToAnalyzeLanguage": "Échec de l'analyse de la langue {language}
|
|
600
|
-
"translationCompletenessAnalysisFailed": "L'analyse de l'
|
|
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": "🌍
|
|
607
|
-
"separator": "
|
|
608
|
-
"sourceDir": "📁 Répertoire source
|
|
609
|
-
"sourceLanguage": "🌐 Langue source
|
|
610
|
-
"dryRunMode": "🧪 Mode
|
|
611
|
-
"languages": "🌍 Langues disponibles
|
|
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
|
|
613
|
+
"processing": "🔄 Traitement {language}...",
|
|
614
614
|
"addedKeys": "✅ Ajouté {count} clés manquantes",
|
|
615
|
-
"changeDetails": "📝 {file}
|
|
616
|
-
"andMore": "...et {count}
|
|
617
|
-
"noChangesNeeded": "✅
|
|
618
|
-
"summaryTitle": "📊 RÉSUMÉ
|
|
619
|
-
"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
|
|
621
|
+
"missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
|
|
622
622
|
"nextStepsTitle": "📋 PROCHAINES ÉTAPES",
|
|
623
|
-
"nextStep1": "1.
|
|
624
|
-
"nextStep2": "
|
|
625
|
-
"nextStep3": "2.
|
|
626
|
-
"nextStep4": "
|
|
627
|
-
"nextStep5": "3.
|
|
628
|
-
"nextStep6": "
|
|
629
|
-
"allKeysAvailable": "🎉 Toutes les clés de traduction sont
|
|
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": "🗑️
|
|
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
|
|
634
|
-
"reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation
|
|
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
|
|
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": "
|
|
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": "
|
|
649
|
-
"title": "🔍 Validateur de
|
|
650
|
-
"message": "
|
|
651
|
-
"sourceDirectory": "📁 Répertoire source
|
|
652
|
-
"sourceLanguage": "🌍 Langue source
|
|
653
|
-
"strictMode": "⚙️
|
|
654
|
-
"noTargetLanguages": "Aucune langue cible configurée
|
|
655
|
-
"validatingLanguages": "🌍 Validation des langues
|
|
656
|
-
"validatingLanguage": "🔍
|
|
657
|
-
"filesCount": "📄 Fichiers
|
|
658
|
-
"keysCount": "🔑 Clés
|
|
659
|
-
"missingFilesCount": "📁 Fichiers manquants
|
|
660
|
-
"syntaxErrorsCount": "❌ Erreurs de syntaxe
|
|
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": "📊
|
|
663
|
-
"validation_failed": "❌
|
|
664
|
-
"totalErrors": "❌ Erreurs totales
|
|
665
|
-
"totalWarnings": "⚠️
|
|
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": "⚠️
|
|
667
|
+
"warningsSection": "⚠️ AVERTISSEMENTS",
|
|
668
668
|
"recommendationsSection": "💡 RECOMMANDATIONS",
|
|
669
|
-
"fixErrorsFirst": "1. Corrigez d
|
|
669
|
+
"fixErrorsFirst": "1. Corrigez d’abord toutes les erreurs",
|
|
670
670
|
"resolveMissingFilesAndSyntaxErrors": "1. Résolvez les fichiers manquants et les erreurs de syntaxe",
|
|
671
|
-
"fixStructuralInconsistencies": "2.
|
|
672
|
-
"completeMissingTranslations": "3.
|
|
673
|
-
"rerunValidation": "4.
|
|
674
|
-
"addressWarnings": "
|
|
675
|
-
"reviewWarnings": "
|
|
676
|
-
"considerRunningWithStrict": "2.
|
|
677
|
-
"allValidationsPassed": "🎉 Toutes les validations
|
|
678
|
-
"considerRunningUsageAnalysis": "Envisagez d'exécuter
|
|
679
|
-
"deletedOldReport": "🗑️
|
|
680
|
-
"sourceDir": "📁 Répertoire source
|
|
681
|
-
"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
|
|
684
|
-
"analyzingTranslations": "🔍
|
|
683
|
+
"foundTranslationFilesCount": "✅ Trouvé {count} fichiers de traduction",
|
|
684
|
+
"analyzingTranslations": "🔍 Analyser les traductions...",
|
|
685
685
|
"validationCompletedSuccessfully": "🎉 Validation terminée avec succès !",
|
|
686
|
-
"validationErrorsFound": "⚠️
|
|
687
|
-
"validationWarningsFound": "⚠️
|
|
688
|
-
"validationPassed": "✅ Validation réussie sans
|
|
689
|
-
"validationFailed": "
|
|
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
|
|
693
|
-
"authenticationFailed": "❌
|
|
694
|
-
"fatalValidationError": "❌ Erreur
|
|
695
|
-
"configAccess": "
|
|
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
|
|
697
|
+
"configError": "Erreur de configuration : {error}",
|
|
698
698
|
"validatorInit": "Initialisation du validateur I18n",
|
|
699
|
-
"validatorInitialized": "
|
|
700
|
-
"validatorInitError": "Erreur d'initialisation du validateur
|
|
701
|
-
"argsParsing": "
|
|
702
|
-
"argsParsed": "Arguments de
|
|
703
|
-
"argsParseError": "Erreur d'analyse des arguments
|
|
704
|
-
"languagesScan": "
|
|
705
|
-
"languagesFound": "{count} langues
|
|
706
|
-
"languagesScanError": "Erreur
|
|
707
|
-
"filesScan": "{count} fichiers
|
|
708
|
-
"filesScanError": "Erreur
|
|
709
|
-
"jsonValidated": "Syntaxe JSON validée
|
|
710
|
-
"jsonValidationError": "Erreur de validation JSON
|
|
711
|
-
"languageValidation": "
|
|
712
|
-
"languageValidationError": "Erreur de validation de
|
|
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
|
|
715
|
-
"runCompleted": "
|
|
716
|
-
"runError": "
|
|
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
|
|
720
|
-
"separator": "
|
|
721
|
-
"languageHeader": "🌐 Langue
|
|
722
|
-
"validationResults": "📊 Résultats de
|
|
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": "📋
|
|
726
|
-
"progressIndicator": "⏳
|
|
725
|
+
"summaryHeader": "📋 RÉSUMÉ GLOBAL",
|
|
726
|
+
"progressIndicator": "⏳Traitement...",
|
|
727
727
|
"completedIndicator": "✅ Terminé",
|
|
728
728
|
"errorIndicator": "❌ Erreur",
|
|
729
|
-
"warningIndicator": "⚠️
|
|
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": "
|
|
734
|
-
"sourceLanguageDirectoryNotFound": "Répertoire de
|
|
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
|
|
737
|
-
"i18nDirectoryNotFound": "Répertoire
|
|
738
|
-
"invalidDirectoryPaths": "Chemins de
|
|
739
|
-
"invalidSampleFilePath": "Chemin
|
|
740
|
-
"failedToCreateSampleTranslationFile": "Échec de la création
|
|
741
|
-
"invalidFilePathDetected": "Chemin de fichier
|
|
742
|
-
"failedToWriteFile": "Échec de l'écriture du fichier
|
|
743
|
-
"invalidSourceDirectory": "Répertoire source
|
|
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
|
|
748
|
-
"setupPinProtectionDescription": "Cela
|
|
749
|
-
"enablePinProtectionPrompt": "Voulez-vous activer la protection PIN
|
|
750
|
-
"setupCancelled": "Configuration de la protection PIN
|
|
751
|
-
"enterPinPrompt": "
|
|
752
|
-
"pinFormatError": "❌ Le PIN doit comporter 4 à 6 chiffres. Veuillez réessayer.",
|
|
753
|
-
"confirmPinPrompt": "
|
|
754
|
-
"pinMismatchError": "❌ Les PIN ne correspondent pas. Veuillez réessayer.",
|
|
755
|
-
"pinProtectionEnabledSuccess": "✅
|
|
756
|
-
"pinRecoveryWarning": "⚠️
|
|
757
|
-
"setupPinProtectionFailed": "❌ Échec de la configuration de la protection PIN
|
|
758
|
-
"errorSettingUpPin": "❌ Erreur lors de la configuration du PIN
|
|
759
|
-
"authRequiredForOperation": "🔐 Authentification
|
|
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": "❌
|
|
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
|
|
766
|
-
"disablingPinProtectionTitle": "🔓 Désactivation de la protection PIN
|
|
767
|
-
"confirmDisablePinProtection": "Êtes-vous sûr de vouloir désactiver la protection PIN
|
|
765
|
+
"pinProtectionNotEnabled": "La protection par code PIN administrateur n’est 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
|
|
770
|
-
"disablePinProtectionFailed": "❌ Échec de la désactivation de la protection PIN
|
|
771
|
-
"errorDisablingPinProtection": "❌ Erreur lors de la désactivation de la protection
|
|
772
|
-
"adminProtectionStatusTitle": "🔐
|
|
773
|
-
"statusEnabled": "Statut
|
|
774
|
-
"protectionDetails": "Protection
|
|
775
|
-
"lockoutDetails": "Verrouillage : 3
|
|
776
|
-
"statusDisabled": "Statut
|
|
777
|
-
"noAuthRequired": "Protection
|
|
778
|
-
"unprotectedRisk": "Risque
|
|
779
|
-
"errorCheckingAdminStatus": "❌ Erreur lors de la vérification du statut
|
|
780
|
-
"authRequired": "🔐 Authentification
|
|
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é
|
|
787
|
-
"enterPin": "
|
|
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
|
|
792
|
-
"setup_separator": "
|
|
793
|
-
"setup_description": "Créez un PIN de 4 à 6 chiffres pour l'accès
|
|
794
|
-
"required_for_title": "Ce PIN sera requis pour
|
|
795
|
-
"required_for_1": "•
|
|
796
|
-
"required_for_2": "•
|
|
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": "•
|
|
799
|
-
"setup_note": "💡 Remarque
|
|
800
|
-
"setup_digits_only": "Seuls les chiffres
|
|
801
|
-
"invalid_pin_length": "❌ PIN invalide. Doit
|
|
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
|
|
805
|
-
"setup_warning": "⚠️
|
|
806
|
-
"setup_error": "❌ Erreur lors de la configuration du PIN
|
|
807
|
-
"session_expired": "⏰
|
|
808
|
-
"no_pin_set_setting_up": "⚠️
|
|
809
|
-
"no_pin_configured_access_denied": "⚠️
|
|
810
|
-
"use_admin_settings_to_set_pin": "💡 Utilisez les paramètres
|
|
811
|
-
"locked_out": "🔒
|
|
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
|
|
817
|
-
"optional_setup_title": "🔐 Configuration
|
|
818
|
-
"optional_setup_description": "La protection PIN
|
|
819
|
-
"setup_prompt": "Souhaitez-vous configurer un PIN
|
|
820
|
-
"skipping_setup": "⏭️
|
|
821
|
-
"setup_prompt_error": "❌ Erreur lors de l'invite de configuration du PIN
|
|
822
|
-
"protectedAccess": "Accès protégé
|
|
823
|
-
"enterPin": "
|
|
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": "⚠️
|
|
827
|
-
"weak_pin_suggestion": "💡
|
|
828
|
-
"use_anyway_prompt": "Tapez
|
|
829
|
-
"enter_new_pin": "Entrez
|
|
830
|
-
"confirm_pin": "
|
|
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.
|
|
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
|
|
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": "
|
|
846
|
-
"debugToolNotFound": "❌ Outil de débogage introuvable
|
|
847
|
-
"errorRunningDebugTool": "
|
|
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
|
|
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
|
|
857
|
+
"tool_title": "🔍 Outil de détection des incompatibilités linguistiques",
|
|
858
858
|
"separator": "=====================================",
|
|
859
|
-
"analyzing_file": "📄 Analyse
|
|
860
|
-
"error_analyzing_file": "❌
|
|
861
|
-
"results_title": "📊 RÉSULTATS DE DÉTECTION DES
|
|
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": "📋
|
|
864
|
-
"total_files_analyzed": "
|
|
865
|
-
"files_with_mismatches": "Fichiers avec
|
|
866
|
-
"total_mismatches_found": "
|
|
867
|
-
"no_mismatches_found": "✅ Aucune
|
|
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": "
|
|
871
|
-
"mismatch_details": "{index}.
|
|
872
|
-
"mismatch_value": "Valeur
|
|
873
|
-
"mismatch_issue": "Problème
|
|
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 (
|
|
877
|
-
"recommendation_3": "3.
|
|
878
|
-
"recommendation_4": "4. Utilisez des équivalents
|
|
879
|
-
"recommendation_5": "5.
|
|
880
|
-
"detailed_report_saved": "📄 Rapport détaillé enregistré : {reportPath}",
|
|
881
|
-
"error_saving_report": "❌
|
|
882
|
-
"auto_fix_mode": "🔧 Mode
|
|
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": "✅
|
|
885
|
-
"auto_fix_summary_title": "📊
|
|
886
|
-
"total_fixes_applied": "Nombre total de
|
|
887
|
-
"preview_fixes_title": "🔍 Aperçu des
|
|
888
|
-
"fix_details": "{file}
|
|
889
|
-
"more_fixes": "
|
|
890
|
-
"run_with_apply_fixes": "💡 Exécutez avec --apply pour appliquer ces
|
|
891
|
-
"error_general": "❌ Erreur
|
|
892
|
-
"mainDebuggerSystemDiagnostics": "Diagnostics système
|
|
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
|
|
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.
|
|
899
|
-
"runningDebugTool": "Exécution de l
|
|
900
|
-
"debugToolNotFound": "Outil de débogage
|
|
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
|
|
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
|
|
909
|
-
"interactiveMode": "💡
|
|
910
|
-
"showHelp": "📖
|
|
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": "📊
|
|
916
|
-
"initCommand": "init
|
|
917
|
-
"analyzeCommand": "
|
|
918
|
-
"validateCommand": "validate
|
|
919
|
-
"usageCommand": "
|
|
920
|
-
"sizingCommand": "
|
|
921
|
-
"completeCommand": "
|
|
922
|
-
"summaryCommand": "
|
|
923
|
-
"debugCommand": "debug
|
|
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": "
|
|
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": "🌐
|
|
929
|
-
"description": "Menu interactif pour
|
|
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
|
|
934
|
-
"analyze": "
|
|
935
|
-
"validate": "validate
|
|
936
|
-
"usage": "
|
|
937
|
-
"sizing": "
|
|
938
|
-
"complete": "
|
|
939
|
-
"summary": "
|
|
940
|
-
"debug": "debug
|
|
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
|
|
944
|
-
"output": "--
|
|
945
|
-
"verbose": "--verbose, -v
|
|
946
|
-
"keepReports": "--keep-reports
|
|
947
|
-
"deleteReports": "--delete-reports
|
|
948
|
-
"help": "--help, -h
|
|
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": "
|
|
953
|
-
"example2": "
|
|
954
|
-
"example3": "
|
|
955
|
-
"example4": "
|
|
956
|
-
"example5": "
|
|
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": "📊
|
|
963
|
-
"completeTranslations": "🎯
|
|
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
|
|
966
|
-
"showStatus": "📋 Afficher
|
|
967
|
-
"deleteReports": "🗑️
|
|
968
|
-
"changeLanguage": "🌍 Changer la langue de l
|
|
969
|
-
"settings": "⚙️
|
|
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": "
|
|
976
|
-
"operationCompleted": "✅
|
|
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
|
|
980
|
-
"nonInteractive": "⚠️ Mode non interactif détecté. Menu affiché à titre
|
|
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
|
|
984
|
-
"error_loading_translations": "Erreur
|
|
985
|
-
"translation_not_found": "Traduction
|
|
986
|
-
"translation_key_not_string": "La clé de traduction ne
|
|
987
|
-
"error_reading_locales_directory": "Erreur de lecture du répertoire locales
|
|
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
|
|
991
|
+
"initializationTitle": "🚀 Boîte à outils de gestion i18n - Initialisation du projet",
|
|
992
992
|
"initializationCancelled": "🚫 Initialisation annulée par l'utilisateur.",
|
|
993
|
-
"sourceDirectoryLabel": "📁 Répertoire
|
|
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": "
|
|
997
|
-
"sourceLanguageLabel": "🌍 Langue source
|
|
998
|
-
"detectedI18nFrameworks": "🔍 Framework(s) i18n détecté(s)
|
|
999
|
-
"pinMustBe4Digits": "🔐 Le PIN doit
|
|
1000
|
-
"existingDirectoriesFound": "📁 Répertoires de traduction existants trouvés
|
|
1001
|
-
"useExistingDirectoryPrompt": "Voulez-vous utiliser le répertoire existant
|
|
1002
|
-
"selectDirectoryPrompt": "Sélectionnez un répertoire en
|
|
1003
|
-
"enterNewDirectoryName": "
|
|
1004
|
-
"createdNewDirectory": "✅
|
|
1005
|
-
"directoryAlreadyExists": "⚠️
|
|
1006
|
-
"invalidDirectoryName": "❌ Nom de répertoire
|
|
1007
|
-
"usingExistingDirectory": "Utilisation du répertoire existant
|
|
1008
|
-
"adminPinSetupOptional": "🔐 Configuration du code PIN administrateur
|
|
1009
|
-
"adminPinSeparator": "
|
|
1010
|
-
"adminPinDescription1": "
|
|
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
|
|
1013
|
-
"adminPinDescription4": "
|
|
1014
|
-
"adminPinSetupPrompt": "
|
|
1015
|
-
"skippingAdminPinSetup": "
|
|
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": "
|
|
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": "🔐
|
|
1022
|
-
"adminProtectionEnabled": "🔐 Protection administrateur activée. Toutes les actions
|
|
1023
|
-
"adminProtectionDisabled": "🔐 Protection administrateur désactivée. Toutes les actions sont
|
|
1024
|
-
"autoDetectedI18nDirectory": "
|
|
1025
|
-
"initializingProject": "⚙️
|
|
1026
|
-
"createdSampleTranslationFile": "✅
|
|
1027
|
-
"languageSelectionTitle": "🌐 Configuration
|
|
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
|
|
1030
|
-
"enterLanguageCodes": "🎯 Saisissez les codes
|
|
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
|
|
1033
|
-
"processingLanguage": "🔄
|
|
1034
|
-
"fileProcessingResult": "✅ {file}
|
|
1035
|
-
"overallProgress": "📊
|
|
1036
|
-
"initializationSummaryTitle": "📋
|
|
1037
|
-
"languageSummary": "{icon} {name} ({code})
|
|
1038
|
-
"languageFiles": "📄 Fichiers
|
|
1039
|
-
"languageKeys": "🔤 Clés
|
|
1040
|
-
"languageMissing": "⚠️
|
|
1041
|
-
"initializationCompletedSuccessfully": "🎉 Initialisation du projet terminée avec succès
|
|
1042
|
-
"nextStepsTitle": "🚀
|
|
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
|
|
1045
|
-
"nextStep3": "3. Exécutez à nouveau
|
|
1046
|
-
"detectedFrameworks": "
|
|
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": "
|
|
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
|
|
1059
|
-
"include_prompt": "
|
|
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
|
|
1065
|
-
"errorsNoFramework": "Aucun framework i18n détecté. Veuillez en installer un ou
|
|
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é.
|
|
1068
|
-
"installFramework": "Pour installer un framework, exécutez
|
|
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": "-
|
|
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
|
|
1078
|
-
"detectedI18nFramework": "Framework i18n détecté
|
|
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
|
|
1081
|
-
"creatingSourceDirectory": "Création du répertoire source
|
|
1082
|
-
"creatingSourceLanguageDirectory": "Création du répertoire de langue source
|
|
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
|
|
1085
|
-
"sourceDirectoryNotFound": "Répertoire source introuvable
|
|
1086
|
-
"sourceLanguageDirectoryNotFound": "Répertoire de langue source introuvable
|
|
1087
|
-
"noJsonFilesInSourceDirectory": "Aucun fichier JSON trouvé dans le répertoire source
|
|
1088
|
-
"invalidFilePathDetected": "Chemin de fichier
|
|
1089
|
-
"initializationFailed": "
|
|
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
|
|
1094
|
-
"fileAlreadyExistsMerging": "
|
|
1095
|
-
"createdNewFile": "Nouveau fichier créé
|
|
1096
|
-
"updatedFile": "Fichier mis à jour
|
|
1097
|
-
"skippingExcludedFile": "
|
|
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": "
|
|
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}
|
|
1104
|
-
"warningInvalidLanguageCodes": "Attention : codes de langue
|
|
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
|
|
1109
|
-
"separator": "
|
|
1110
|
-
"current": "Langue actuelle
|
|
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": "
|
|
1118
|
-
"changeFailed": "Échec du changement de langue
|
|
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é
|
|
1123
|
-
"step1_title": "📊 ÉTAPE 1
|
|
1124
|
-
"step2_title": "🔧 ÉTAPE 2
|
|
1125
|
-
"step3_title": "🌐 ÉTAPE 3
|
|
1126
|
-
"step4_title": "✅ ÉTAPE 4
|
|
1127
|
-
"workflow_error": "❌ Erreur
|
|
1128
|
-
"running_initial_validation": "Exécution de la validation initiale de la pureté
|
|
1129
|
-
"initial_assessment_complete": "✅
|
|
1130
|
-
"initial_assessment_warnings": "⚠️
|
|
1131
|
-
"detecting_fixing_mismatches": "
|
|
1132
|
-
"detection_complete_applying_fixes": "Détection terminée. Application des
|
|
1133
|
-
"mismatch_fixes_complete": "✅ Corrections terminées
|
|
1134
|
-
"mismatch_fixes_warnings": "⚠️ Corrections
|
|
1135
|
-
"applying_automatic_translations": "
|
|
1136
|
-
"translation_preview_complete": "Aperçu
|
|
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": "🌐
|
|
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": "📊
|
|
1146
|
-
"complete": "🎯
|
|
1145
|
+
"usage": "📊 Vérifiez l'utilisation de la clé",
|
|
1146
|
+
"complete": "🎯 Traductions complètes (couverture à 100%)",
|
|
1147
1147
|
"sizing": "📏 Analyser le dimensionnement",
|
|
1148
|
-
"fix": "🛠️
|
|
1149
|
-
"scanner": "🔍
|
|
1150
|
-
"translate": "🌐 Traduction
|
|
1151
|
-
"workflow": "🔄 Exécuter
|
|
1152
|
-
"status": "📋 Afficher
|
|
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 l
|
|
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": "📦
|
|
1160
|
+
"update": "📦 Forfait de mise à jour",
|
|
1161
1161
|
"goodbye": "👋 Au revoir !",
|
|
1162
|
-
"invalidChoice": "
|
|
1163
|
-
"returning": "
|
|
1164
|
-
"invalidOption": "
|
|
1165
|
-
"nonInteractiveModeWarning": "
|
|
1166
|
-
"useDirectExecution": "
|
|
1167
|
-
"useHelpForCommands": "
|
|
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": "
|
|
1174
|
-
"executingCommand": "Exécution de la commande
|
|
1175
|
-
"unknownCommand": "Commande inconnue
|
|
1176
|
-
"languageOption": "
|
|
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
|
|
1179
|
-
"2": "Analyse de l
|
|
1180
|
-
"3": "Analyse de
|
|
1181
|
-
"4": "Analyse du format
|
|
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
|
|
1183
|
+
"6": "Analyse de la structure de la traduction"
|
|
1184
1184
|
},
|
|
1185
1185
|
"native_translations": {
|
|
1186
|
-
"exact_translation_found": "✅ {keyPath}
|
|
1187
|
-
"no_exact_translation": "⚠️ Pas de traduction exacte pour '{keyPath}', clés similaires trouvées
|
|
1188
|
-
"similar_key": "- {key} ({similarity}%
|
|
1189
|
-
"processing_language_files": "🔄 Traitement
|
|
1190
|
-
"file_not_found": "⚠️ Fichier introuvable
|
|
1191
|
-
"processing_translations": "🌍 Traitement
|
|
1192
|
-
"backup_created": "📋 Sauvegarde créée
|
|
1193
|
-
"error_parsing_json": "❌ Erreur d
|
|
1194
|
-
"existing_keys_found": "📊 {code}
|
|
1195
|
-
"error_writing_json": "❌ Erreur d
|
|
1196
|
-
"translations_replaced": "📊 {code}
|
|
1197
|
-
"translation_replacement_complete": "✅ Remplacement
|
|
1198
|
-
"total_replacements": "📊 Remplacements totaux
|
|
1199
|
-
"dry_run_mode": "⚠️ MODE DRY RUN
|
|
1200
|
-
"tool_title": "🌍
|
|
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": "⚠️
|
|
1203
|
-
"error_during_replacement": "❌ Erreur lors du remplacement
|
|
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": "⚠️
|
|
1207
|
+
"dirFallbackWarning": "⚠️ Annuaire {dir} pas trouvé. En utilisant {fallback}.",
|
|
1208
1208
|
"dirInvalidError": "❌ Répertoire invalide : {dir}"
|
|
1209
1209
|
},
|
|
1210
1210
|
"operations": {
|
|
1211
|
-
"completed": "✅
|
|
1212
|
-
"deleteReportsTitle": "🗑️ Supprimer rapports et journaux",
|
|
1213
|
-
"scanningForFiles": "🔍 Recherche
|
|
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
|
|
1217
|
+
"andMore": "et plus encore...",
|
|
1218
1218
|
"cancelOption": "Annuler",
|
|
1219
|
-
"cancelReportOption": "Annuler /
|
|
1219
|
+
"cancelReportOption": "Annuler / Revenir au menu",
|
|
1220
1220
|
"invalidSelection": "❌ Sélection invalide.",
|
|
1221
|
-
"foundFilesInSelectedDirectories": "📊 {count}
|
|
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
|
|
1227
|
+
"filesToDeleteCount": "📋 Fichiers à supprimer : {count}",
|
|
1228
1228
|
"filesToKeepCount": "📋 Fichiers à conserver : {count}",
|
|
1229
|
-
"confirmDeletion": "⚠️
|
|
1230
|
-
"deletedFile": "✅ Supprimé
|
|
1231
|
-
"failedToDeleteFile": "❌ Échec de la suppression
|
|
1232
|
-
"cancelled": "❌
|
|
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
|
|
1234
|
+
"title": "🚀 Initialiser une nouvelle langue"
|
|
1235
1235
|
},
|
|
1236
1236
|
"usage": {
|
|
1237
|
-
"title": "📊 Vérifier l
|
|
1238
|
-
"noUsedKeysHint": "
|
|
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": "⚙️
|
|
1248
|
-
"separator": "
|
|
1247
|
+
"title": "⚙️ Gestion des paramètres",
|
|
1248
|
+
"separator": "============================================================="
|
|
1249
1249
|
},
|
|
1250
1250
|
"complete": {
|
|
1251
|
-
"deletingOldReport": "🗑️ Suppression de l
|
|
1252
|
-
"generatingFreshAnalysis": "🔄 Génération d
|
|
1253
|
-
"couldNotGenerate": "⚠️ Impossible de générer
|
|
1254
|
-
"reportNotFound": "⚠️ Rapport d
|
|
1255
|
-
"foundMissingKeys": "🔍 {count}
|
|
1256
|
-
"couldNotParse": "⚠️ Impossible d
|
|
1257
|
-
"title": "🎯
|
|
1258
|
-
"separator": "
|
|
1259
|
-
"sourceDir": "📁 Répertoire source
|
|
1260
|
-
"sourceLanguage": "🔤 Langue source
|
|
1261
|
-
"dryRunMode": "🧪 MODE DRY RUN
|
|
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
|
|
1265
|
-
"addedKeys": "✅ {count}
|
|
1266
|
-
"changeDetails": "📝 {file}
|
|
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": "📊
|
|
1269
|
-
"totalChanges": "📝 Modifications totales
|
|
1270
|
-
"languagesProcessed": "🌐 Langues traitées
|
|
1271
|
-
"missingKeysAdded": "➕ Clés manquantes ajoutées
|
|
1272
|
-
"nextStepsTitle": "📋 ÉTAPES
|
|
1273
|
-
"nextStep1": "1. Exécutez
|
|
1274
|
-
"nextStep2": "2. Validez les traductions
|
|
1275
|
-
"nextStep3": "3.
|
|
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
|
|
1282
|
-
"description": "Cela mettra à jour le
|
|
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
|
|
1285
|
-
"updating": "Mise à jour du
|
|
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": "
|
|
1293
|
-
"invalidInputType": "
|
|
1294
|
-
"pathTraversalAttempt": "
|
|
1295
|
-
"pathValidated": "✅
|
|
1296
|
-
"pathValidationError": "
|
|
1297
|
-
"fileTooLarge": "Sécurité
|
|
1298
|
-
"fileReadError": "Sécurité
|
|
1299
|
-
"contentTooLargeForFile": "Sécurité
|
|
1300
|
-
"fileWriteError": "Sécurité
|
|
1301
|
-
"jsonStringTooLarge": "Sécurité
|
|
1302
|
-
"jsonParseError": "Sécurité
|
|
1303
|
-
"inputContainsDisallowedCharacters": "Sécurité
|
|
1304
|
-
"unknownCommandArgument": "Sécurité
|
|
1305
|
-
"unknown_command_argument": "Sécurité
|
|
1306
|
-
"unknownConfigKey": "Sécurité
|
|
1307
|
-
"unknown_config_key": "Sécurité
|
|
1308
|
-
"securityAlert": "[ALERTE SÉCURITÉ] {timestamp}
|
|
1309
|
-
"contentTooLarge": "Sécurité
|
|
1310
|
-
"inputDisallowedCharacters": "Sécurité
|
|
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}
|
|
1313
|
-
"alertMessage": "[ALERTE SÉCURITÉ] {timestamp}
|
|
1314
|
-
"securityWarning": "[AVERTISSEMENT SÉCURITÉ] {timestamp}
|
|
1315
|
-
"json_parse_error": "Sécurité
|
|
1316
|
-
"file_too_large": "
|
|
1317
|
-
"file_read_error": "
|
|
1318
|
-
"content_too_large_for_file": "
|
|
1319
|
-
"file_write_error": "
|
|
1320
|
-
"json_string_too_large": "
|
|
1321
|
-
"recursion_detected": "
|
|
1322
|
-
"operation_timeout": "
|
|
1323
|
-
"operation_error": "
|
|
1324
|
-
"directory_read_error": "
|
|
1325
|
-
"security_alert": "
|
|
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
|
|
1332
|
-
"uiSettingsDesc": "
|
|
1333
|
-
"directorySettings": "Paramètres
|
|
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
|
|
1336
|
-
"scriptDirectorySettingsDesc": "Chemins
|
|
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": "
|
|
1345
|
-
"resetToDefaults": "Réinitialiser par défaut",
|
|
1346
|
-
"resetToDefaultsDesc": "Restaurer les paramètres d
|
|
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
|
|
1351
|
-
"updatePackage": "
|
|
1352
|
-
"updatePackageDesc": "
|
|
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
|
|
1354
|
+
"helpDesc": "Afficher des informations d'aide détaillées",
|
|
1355
1355
|
"quit": "Quitter",
|
|
1356
|
-
"quitDesc": "Quitter les paramètres (avec invite
|
|
1357
|
-
"unsavedChangesWarning": "⚠️
|
|
1358
|
-
"saveChangesBeforeQuit": "Voulez-vous enregistrer les modifications avant de quitter
|
|
1359
|
-
"selectOption": "Sélectionnez une option
|
|
1360
|
-
"goodbyeMessage": "Merci d
|
|
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
|
|
1363
|
-
"relativePathHint": "Utilisez
|
|
1364
|
-
"currentDirectory": "Répertoire
|
|
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
|
|
1368
|
-
"error_saving_settings": "❌ Erreur lors de l
|
|
1369
|
-
"error_setting_value": "❌
|
|
1370
|
-
"missing_required_setting": "❌ Paramètre
|
|
1371
|
-
"invalid_language": "❌ Langue invalide
|
|
1372
|
-
"invalid_source_language": "❌ Langue source invalide
|
|
1373
|
-
"default_languages_must_be_array": "❌ defaultLanguages doit être un tableau",
|
|
1374
|
-
"invalid_date_format": "❌ Format de date invalide
|
|
1375
|
-
"invalid_time_format": "❌ Format d
|
|
1376
|
-
"notifications_types_must_be_object": "❌ notifications.types
|
|
1377
|
-
"exclude_files_must_be_array": "❌
|
|
1378
|
-
"exclude_dirs_must_be_array": "❌
|
|
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
|
|
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
|
|
1384
|
-
"invalid_sizing_format": "❌ Format de dimensionnement invalide
|
|
1385
|
-
"error_validating_settings": "❌ Erreur de validation des paramètres
|
|
1386
|
-
"backup_created": "📋 Sauvegarde créée
|
|
1387
|
-
"error_creating_backup": "❌ Erreur lors de la création de la sauvegarde
|
|
1388
|
-
"language_not_supported": "
|
|
1389
|
-
"ui_language_set": "🌍 Langue de l
|
|
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
|
|
1396
|
-
"relativePathHint": "Utilisez
|
|
1397
|
-
"currentDirectory": "Répertoire
|
|
1398
|
-
"startingSettings": "
|
|
1399
|
-
"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": "
|
|
1403
|
-
"guidance": "Pour signaler
|
|
1404
|
-
"checkLogs": "1. Vérifiez les journaux de débogage
|
|
1405
|
-
"documentIssue": "2. Documentez le problème avec
|
|
1406
|
-
"contactSupport": "3. Contactez
|
|
1407
|
-
"completed": "
|
|
1408
|
-
"instructions": "Suivez les instructions ci-dessus pour signaler le
|
|
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
|
|
1413
|
-
"uiSettingsDesc": "
|
|
1414
|
-
"directorySettings": "Paramètres
|
|
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
|
|
1417
|
+
"processingSettingsDesc": "Taille du lot, simultanéité et performances",
|
|
1418
1418
|
"advancedSettings": "Paramètres avancés",
|
|
1419
|
-
"advancedSettingsDesc": "
|
|
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": "
|
|
1424
|
-
"updatePackageDesc": "
|
|
1425
|
-
"importExportDesc": "
|
|
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 d
|
|
1427
|
+
"resetToDefaultsDesc": "Restaurer les paramètres d'usine",
|
|
1428
1428
|
"reportBug": "Signaler un bug",
|
|
1429
|
-
"reportBugDesc": "
|
|
1429
|
+
"reportBugDesc": "Soumettre un rapport de problème sur GitHub",
|
|
1430
1430
|
"saveChanges": "Enregistrer les modifications",
|
|
1431
|
-
"saveChangesDesc": "Enregistrer
|
|
1431
|
+
"saveChangesDesc": "Enregistrer les paramètres actuels dans un fichier",
|
|
1432
1432
|
"help": "Aide",
|
|
1433
|
-
"helpDesc": "Afficher des informations d
|
|
1433
|
+
"helpDesc": "Afficher des informations d'aide détaillées",
|
|
1434
1434
|
"quit": "Quitter",
|
|
1435
|
-
"quitDesc": "Quitter les paramètres (avec invite
|
|
1436
|
-
"unsavedChangesWarning": "⚠️
|
|
1437
|
-
"saveChangesBeforeQuit": "Voulez-vous enregistrer les modifications avant de quitter
|
|
1438
|
-
"selectOption": "Sélectionnez une option
|
|
1439
|
-
"goodbyeMessage": "Merci d
|
|
1440
|
-
"selectSettingPrompt": "Sélectionnez un paramètre à modifier (ou
|
|
1441
|
-
"enterNewValue": "Entrez
|
|
1442
|
-
"updatedSuccessfully": "{setting} mis à jour avec succès
|
|
1443
|
-
"scriptDirectorySettings": "Paramètres
|
|
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.
|
|
1446
|
-
"currentDirectory": "Répertoire
|
|
1447
|
-
"securitySettings": "Paramètres de
|
|
1448
|
-
"securitySettingsDesc": "
|
|
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": "
|
|
1450
|
+
"backupSettingsDesc": "Sauvegarder et restaurer les paramètres de configuration"
|
|
1451
1451
|
},
|
|
1452
1452
|
"updatePackage": {
|
|
1453
|
-
"title": "
|
|
1454
|
-
"description": "
|
|
1455
|
-
"command": "npm
|
|
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": "
|
|
1458
|
-
"prompt": "Voulez-vous mettre à jour le
|
|
1459
|
-
"promptDesc": "Remarque
|
|
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
|
|
1467
|
-
"updateSuccess": "PIN
|
|
1468
|
-
"updateFailed": "Échec de la mise à jour du PIN
|
|
1469
|
-
"protectionRemoved": "Protection PIN
|
|
1470
|
-
"configSuccess": "PIN
|
|
1471
|
-
"configFailed": "Échec de la configuration du PIN
|
|
1472
|
-
"setupPinPrompt": "
|
|
1473
|
-
"pinUpdatedSuccess": "PIN
|
|
1474
|
-
"pinUpdatedFailed": "Échec de la mise à jour du PIN
|
|
1475
|
-
"pinRemoved": "Protection PIN
|
|
1476
|
-
"pinConfiguredSuccess": "PIN
|
|
1477
|
-
"pinConfiguredFailed": "Échec de la configuration du PIN
|
|
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
|
|
1480
|
-
"setupFailed": "❌ Échec de la configuration du PIN
|
|
1481
|
-
"pinConfigured": "📌 PIN
|
|
1482
|
-
"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 d
|
|
1487
|
-
"settingNewPin": "🔄 Configuration
|
|
1488
|
-
"verifyToRemove": "🔐 Vérifiez le PIN actuel pour supprimer la protection
|
|
1489
|
-
"noPinConfigured": "🔓 Aucun PIN
|
|
1490
|
-
"pinBenefits": "La configuration
|
|
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": "•
|
|
1493
|
+
"benefitDebug": "• Accéder aux outils de débogage",
|
|
1494
1494
|
"benefitReset": "• Réinitialisation des paramètres",
|
|
1495
|
-
"setupCancelled": "⏭️
|
|
1496
|
-
"operationCancelled": "❌
|
|
1497
|
-
"startingSettings": "🎛️
|
|
1498
|
-
"authRequired": "🔒 Authentification
|
|
1499
|
-
"pinSetupTitle": "Configuration du PIN
|
|
1500
|
-
"browserOpenFailed": "Impossible d
|
|
1501
|
-
"manualVisit": "Veuillez visiter manuellement
|
|
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": "
|
|
1506
|
-
"export": "
|
|
1507
|
-
"import": "
|
|
1508
|
-
"backup": "
|
|
1509
|
-
"enterFilename": "Entrez le nom
|
|
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
|
|
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
|
|
1515
|
-
"confirmImport": "
|
|
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
|
|
1518
|
-
"backupSuccess": "Sauvegarde créée
|
|
1519
|
-
"backupFailed": "Échec de la création de la sauvegarde
|
|
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
|
|
1528
|
-
"resetWarning1": "⚠️
|
|
1529
|
-
"resetWarning2": "
|
|
1530
|
-
"resetConfirm": "
|
|
1531
|
-
"resetSuccess": "
|
|
1532
|
-
"resetFailed": "Échec de la réinitialisation des paramètres
|
|
1533
|
-
"resetDone": "
|
|
1534
|
-
"resetScriptDirsDone": "
|
|
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 l
|
|
1537
|
-
"saveError": "
|
|
1538
|
-
"pressEnter": "Appuyez sur Entrée pour continuer
|
|
1539
|
-
"initFailed": "Échec de l
|
|
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
|
|
1545
|
-
"navigation2": "2. Paramètres
|
|
1546
|
-
"navigation3": "3. Paramètres de traitement
|
|
1547
|
-
"navigation4": "4. Paramètres avancés
|
|
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
|
|
1550
|
-
"categoryDirectory": "• Paramètres
|
|
1551
|
-
"categoryProcessing": "• Paramètres de traitement
|
|
1552
|
-
"categoryAdvanced": "• Paramètres avancés
|
|
1553
|
-
"envVarsTitle": "Variables d
|
|
1554
|
-
"envVar1": "• I18N_SOURCE_DIR
|
|
1555
|
-
"envVar2": "• I18N_OUTPUT_DIR
|
|
1556
|
-
"envVar3": "• I18N_DEBUG
|
|
1557
|
-
"cliUsageTitle": "Exemples d
|
|
1558
|
-
"cliUsage1": "• npx i18ntk --settings
|
|
1559
|
-
"cliUsage2": "• npx i18ntk --settings --lang de
|
|
1560
|
-
"cliUsage3": "• npx i18ntk --reset-settings
|
|
1561
|
-
"navigation": "Utilisez les touches numériques pour sélectionner,
|
|
1562
|
-
"editing": "Entrez de nouvelles valeurs ou appuyez sur Entrée pour conserver",
|
|
1563
|
-
"saving": "Utilisez
|
|
1564
|
-
"reset": "Utilisez l
|
|
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
|
|
1568
|
-
"directorySettings": "Paramètres
|
|
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
|
|
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
|
|
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
|
|
1583
|
-
"setupChange": "2) Configurer/Modifier le PIN
|
|
1584
|
-
"sessionTimeout": "3)
|
|
1585
|
-
"maxAttempts": "4)
|
|
1586
|
-
"lockoutDuration": "5) Durée
|
|
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
|
|
1591
|
-
"disablePin": "Désactiver la protection PIN
|
|
1592
|
-
"enterTimeout": "Entrez le délai d
|
|
1593
|
-
"enterMaxAttempts": "
|
|
1594
|
-
"enterLockoutDuration": "Entrez la durée
|
|
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
|
|
1598
|
-
"pinDisabled": "Protection PIN
|
|
1599
|
-
"timeoutUpdated": "Délai d
|
|
1600
|
-
"maxAttemptsUpdated": "
|
|
1601
|
-
"lockoutDurationUpdated": "Durée
|
|
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
|
-
"
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
"
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
"
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
"
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
"
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
"
|
|
1632
|
-
|
|
1633
|
-
|
|
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": "
|
|
1636
|
+
"label": "Annuaire I18n",
|
|
1639
1637
|
"description": "Répertoire contenant les fichiers de traduction",
|
|
1640
|
-
"current": "Actuel
|
|
1641
|
-
"help": "Chemin
|
|
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
|
|
1647
|
-
"help": "Chemin
|
|
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
|
|
1651
|
-
"usage_analysis_success": "
|
|
1652
|
-
"usage_analysis_complete": "
|
|
1653
|
-
"usage_analysis_in_progress": "
|
|
1654
|
-
"usage_analysis_started": "L'analyse
|
|
1655
|
-
"usage_analysis_skipped": "
|
|
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 l
|
|
1659
|
-
"description": "Langue de l
|
|
1660
|
-
"current": "
|
|
1661
|
-
"help": "Sélectionnez votre langue d
|
|
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": "
|
|
1665
|
-
"analyzeHelp": "
|
|
1666
|
-
"completeLabel": "Répertoires
|
|
1667
|
-
"initLabel": "
|
|
1668
|
-
"manageLabel": "
|
|
1669
|
-
"sizingLabel": "
|
|
1670
|
-
"summaryLabel": "Répertoires
|
|
1671
|
-
"usageLabel": "Répertoires
|
|
1672
|
-
"validateLabel": "
|
|
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
|
|
1677
|
-
"current": "Actuel
|
|
1678
|
-
"help": "Choisissez entre
|
|
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
|
|
1682
|
-
"description": "Format d
|
|
1683
|
-
"current": "Actuel
|
|
1684
|
-
"help": "
|
|
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
|
|
1690
|
-
"current": "Actuel
|
|
1691
|
-
"help": "Activer les notifications
|
|
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
|
|
1698
|
-
"help": "Chemin
|
|
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": "
|
|
1704
|
-
"help": "
|
|
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
|
|
1709
|
-
"current": "Actuel
|
|
1710
|
-
"help": "Où
|
|
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
|
|
1715
|
-
"current": "Actuel
|
|
1716
|
-
"help": "
|
|
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": "
|
|
1720
|
-
"description": "Nombre
|
|
1721
|
-
"current": "Actuel
|
|
1722
|
-
"help": "Nombre
|
|
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
|
|
1727
|
-
"current": "Actuel
|
|
1728
|
-
"help": "
|
|
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
|
|
1733
|
-
"current": "Actuel
|
|
1734
|
-
"help": "Activer
|
|
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 d
|
|
1738
|
-
"description": "
|
|
1739
|
-
"current": "Actuel
|
|
1740
|
-
"help": "
|
|
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
|
|
1746
|
-
"help": "
|
|
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": "
|
|
1750
|
-
"description": "Nombre
|
|
1751
|
-
"current": "Actuel
|
|
1752
|
-
"help": "Nombre
|
|
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
|
|
1757
|
-
"current": "Actuel
|
|
1758
|
-
"help": "Activer
|
|
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
|
|
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": "
|
|
1768
|
-
"description": "Délai d
|
|
1769
|
-
"current": "Actuel
|
|
1770
|
-
"help": "
|
|
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": "
|
|
1774
|
-
"description": "Nombre
|
|
1775
|
-
"current": "Actuel
|
|
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
|
|
1780
|
-
"description": "Durée du verrouillage après tentatives
|
|
1781
|
-
"current": "Actuel
|
|
1782
|
-
"help": "
|
|
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": "
|
|
1786
|
-
"description": "Répertoires personnalisés pour le script d
|
|
1787
|
-
"current": "Actuel
|
|
1788
|
-
"help": "Spécifiez le répertoire source pour le script d
|
|
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
|
|
1792
|
-
"description": "Répertoires personnalisés pour le script
|
|
1793
|
-
"current": "Actuel
|
|
1794
|
-
"help": "Spécifiez le répertoire source pour le script
|
|
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": "
|
|
1798
|
-
"description": "Répertoires personnalisés pour le script d
|
|
1799
|
-
"current": "Actuel
|
|
1800
|
-
"help": "Spécifiez le répertoire source pour le script d
|
|
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": "
|
|
1801
|
+
"label": "Gérer les répertoires de scripts",
|
|
1804
1802
|
"description": "Répertoires personnalisés pour le script de gestion",
|
|
1805
|
-
"current": "Actuel
|
|
1806
|
-
"help": "Spécifiez le répertoire source pour le script de gestion.
|
|
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": "
|
|
1807
|
+
"label": "Dimensionnement des répertoires de scripts",
|
|
1810
1808
|
"description": "Répertoires personnalisés pour le script de dimensionnement",
|
|
1811
|
-
"current": "Actuel
|
|
1812
|
-
"help": "Spécifiez le répertoire source pour le script de dimensionnement.
|
|
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
|
|
1816
|
-
"description": "Répertoires personnalisés pour le rapport
|
|
1817
|
-
"current": "Actuel
|
|
1818
|
-
"help": "Spécifiez le répertoire source pour le rapport
|
|
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
|
|
1822
|
-
"description": "Répertoires personnalisés pour le rapport d
|
|
1823
|
-
"current": "Actuel
|
|
1824
|
-
"help": "Spécifiez le répertoire source pour le rapport d
|
|
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": "
|
|
1828
|
-
"description": "Répertoires personnalisés pour le script
|
|
1829
|
-
"current": "Actuel
|
|
1830
|
-
"help": "Spécifiez le répertoire source pour le script de validation.
|
|
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
|
|
1834
|
-
"description": "Activer l
|
|
1835
|
-
"current": "Actuel
|
|
1836
|
-
"help": "Exiger un PIN
|
|
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
|
|
1841
|
-
"description": "Activer l
|
|
1842
|
-
"help": "Exiger un PIN
|
|
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
|
|
1847
|
-
"description": "Activer
|
|
1848
|
-
"current": "Actuel
|
|
1849
|
-
"help": "Exiger un PIN pour
|
|
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
|
|
1853
|
-
"description": "
|
|
1854
|
-
"help": "
|
|
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
|
|
1858
|
-
"description": "Exiger un PIN pour le menu de débogage",
|
|
1859
|
-
"current": "Actuel
|
|
1860
|
-
"help": "Activer la protection PIN pour
|
|
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": "
|
|
1864
|
-
"description": "Exiger un PIN pour
|
|
1865
|
-
"current": "Actuel
|
|
1866
|
-
"help": "Activer la protection PIN pour
|
|
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
|
|
1870
|
-
"description": "Exiger un PIN pour les rapports
|
|
1871
|
-
"current": "Actuel
|
|
1872
|
-
"help": "Activer la protection PIN pour
|
|
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
|
|
1876
|
-
"description": "Exiger un PIN pour le menu
|
|
1877
|
-
"current": "Actuel
|
|
1878
|
-
"help": "Activer la protection PIN pour
|
|
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": "
|
|
1882
|
-
"description": "Exiger un PIN pour le script
|
|
1883
|
-
"current": "Actuel
|
|
1884
|
-
"help": "Activer la protection PIN pour
|
|
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
|
|
1888
|
-
"description": "Réinitialiser tous les paramètres de protection PIN aux valeurs par défaut",
|
|
1889
|
-
"help": "
|
|
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
|
|
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
|
|
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
|
|
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}
|
|
1915
|
-
"pinProtectionReset": "✅
|
|
1916
|
-
"pinProtectionConfigure": "
|
|
1917
|
-
"pinProtectionSelectScript": "Sélectionnez un script pour activer la protection PIN
|
|
1918
|
-
"pinProtectionCurrentStatus": "Statut actuel
|
|
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": "
|
|
1922
|
-
"pinProtectionResetAll": "Réinitialiser
|
|
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": "
|
|
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": "
|
|
1936
|
-
"ja": "
|
|
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": "
|
|
1947
|
-
"enterNewValue": "Entrez
|
|
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": "
|
|
1950
|
-
"noHelp": "
|
|
1951
|
-
"resetScriptDirectories": "Réinitialiser
|
|
1952
|
-
"resetScriptDirectoriesTitle": "Réinitialiser les
|
|
1953
|
-
"resetScriptDirectoriesWarning1": "Cela réinitialisera toutes les configurations
|
|
1954
|
-
"resetScriptDirectoriesWarning2": "Tous les chemins de
|
|
1955
|
-
"resetScriptDirectoriesConfirm": "Êtes-vous sûr de vouloir réinitialiser tous les
|
|
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": "
|
|
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
|
|
1960
|
-
"success": "✅ Paramètres sauvegardés avec succès
|
|
1961
|
-
"failed": "❌ Échec de la sauvegarde des paramètres
|
|
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
|
|
1965
|
-
"singleFileModeHelp": "
|
|
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
|
|
1997
|
+
"singleBackupFileHelp": "Chemin d'accès au fichier de sauvegarde unique",
|
|
1968
1998
|
"retentionDays": "Jours de conservation",
|
|
1969
|
-
"retentionDaysHelp": "Nombre de jours
|
|
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": "🔧
|
|
1985
|
-
"sourceLanguage": "Langue source
|
|
1986
|
-
"supportedExtensions": "Extensions prises en charge
|
|
1987
|
-
"excludedFiles": "Fichiers exclus
|
|
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
|
|
1991
|
-
"helpDescription": "Analyse la structure
|
|
1992
|
-
"helpUsage": "Utilisation
|
|
1993
|
-
"helpOptions": "--source
|
|
1994
|
-
"helpSourceDir": "--source
|
|
1995
|
-
"helpOutput": "--
|
|
1996
|
-
"helpVerbose": "--verbose, -v
|
|
1997
|
-
"helpKeepReports": "--keep-reports
|
|
1998
|
-
"helpDeleteReports": "--delete-reports
|
|
1999
|
-
"helpHelp": "--help, -h
|
|
2000
|
-
"helpExamples": "Exemples
|
|
2001
|
-
"helpExample1": "
|
|
2002
|
-
"helpExample2": "
|
|
2003
|
-
"helpExample3": "
|
|
2004
|
-
"helpExample4": "
|
|
2005
|
-
"helpExample5": "
|
|
2006
|
-
"couldNotReadFile": "⚠️
|
|
2007
|
-
"couldNotParseJSFile": "⚠️
|
|
2008
|
-
"errorReadingFile": "⚠️
|
|
2009
|
-
"analyzingFolder": "🔍 Analyse de la structure
|
|
2010
|
-
"noLanguageDirectoriesFound": "❌ Aucun répertoire de
|
|
2011
|
-
"foundLanguages": "✅ Trouvé {count} langues
|
|
2012
|
-
"referenceLanguageFiles": "📁
|
|
2013
|
-
"analyzingLanguage": "🌍
|
|
2014
|
-
"keysInFiles": "📊 Trouvé {keys}
|
|
2015
|
-
"checkingInconsistentKeys": "🔍 Vérification des clés incohérentes
|
|
2016
|
-
"generatingSummaryReport": "📝 Génération
|
|
2017
|
-
"reportTitle": "📊 RAPPORT
|
|
2018
|
-
"generated": "Généré
|
|
2019
|
-
"sourceDirectory": "Répertoire source
|
|
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
|
|
2022
|
-
"totalFiles": "
|
|
2023
|
-
"totalKeys": "Clés totales
|
|
2024
|
-
"avgKeysPerLanguage": "
|
|
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}
|
|
2027
|
-
"fileStructure": "📁
|
|
2028
|
-
"fileKeys": "{file}
|
|
2029
|
-
"missingInLanguages": "⚠️ Manquant dans
|
|
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
|
|
2037
|
-
"extraKeys": "Supplémentaire
|
|
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
|
|
2069
|
+
"allFilesConsistent": "Tous les fichiers de traduction sont cohérents dans toutes les langues.",
|
|
2040
2070
|
"recommendations": "💡 RECOMMANDATIONS",
|
|
2041
|
-
"createMissingFiles": "• Créer
|
|
2042
|
-
"addContentToEmptyFiles": "•
|
|
2043
|
-
"fixMalformedFiles": "•
|
|
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": "•
|
|
2046
|
-
"splitLargeFiles": "•
|
|
2047
|
-
"addMoreLanguages": "•
|
|
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.
|
|
2050
|
-
"nextStep2": "2.
|
|
2051
|
-
"nextStep3": "3.
|
|
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
|
|
2055
|
-
"i18nSummaryReportGenerator": "📊 Générateur de
|
|
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
|
|
2087
|
+
"analyzedLanguages": "📊 Langues analysées : {count}",
|
|
2058
2088
|
"processedFiles": "📁 Fichiers traités : {count}",
|
|
2059
|
-
"foundTranslationKeys": "🔑 Clés de traduction trouvées
|
|
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
|
|
2063
|
-
"usageReportTitle": "📊 RAPPORT D'UTILISATION I18NTK",
|
|
2064
|
-
"usageReportGenerated": "Généré
|
|
2065
|
-
"usageReportSourceDir": "Répertoire source
|
|
2066
|
-
"usageReportI18nDir": "Répertoire
|
|
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
|
|
2069
|
-
"usageReportTranslationFilesFound": "Fichiers de traduction trouvés
|
|
2070
|
-
"usageReportAvailableKeys": "Clés de traduction disponibles
|
|
2071
|
-
"usageReportUsedKeys": "Clés de traduction utilisées
|
|
2072
|
-
"usageReportDynamicKeys": "Clés de traduction dynamiques
|
|
2073
|
-
"usageReportUnusedKeys": "Clés de traduction inutilisées
|
|
2074
|
-
"usageReportMissingKeys": "Clés de traduction manquantes
|
|
2075
|
-
"usageReportNotTranslatedKeys": "Clés non traduites
|
|
2076
|
-
"usageReportTranslationCompleteness": "🌍 EXHAUSTIVITÉ
|
|
2077
|
-
"usageReportLanguageCompleteness": "{language}
|
|
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
|
|
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
|
|
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
|
|
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
|
|
2089
|
-
"usageReportMoreFiles": "... et {count} fichiers
|
|
2090
|
-
"usageReportDynamicTranslationKeys": "⚡
|
|
2091
|
-
"usageReportDynamicKeysDescription": "Ces clés sont utilisées dynamiquement (construites
|
|
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}
|
|
2124
|
+
"usageReportFileUsage": "{filePath}: {count} clés",
|
|
2095
2125
|
"status": {
|
|
2096
|
-
"generating": "⏳ Génération
|
|
2126
|
+
"generating": "⏳ Génération...",
|
|
2097
2127
|
"completed": "✅ Terminé"
|
|
2098
2128
|
},
|
|
2099
2129
|
"help": {
|
|
2100
|
-
"usage": "
|
|
2101
|
-
"interactiveMode": "💡
|
|
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": "📊
|
|
2106
|
-
"showHelp": "📖
|
|
2107
|
-
"availableCommands": "📖 Commandes disponibles
|
|
2108
|
-
"initCommand": "init
|
|
2109
|
-
"analyzeCommand": "
|
|
2110
|
-
"validateCommand": "validate
|
|
2111
|
-
"usageCommand": "
|
|
2112
|
-
"sizingCommand": "
|
|
2113
|
-
"completeCommand": "
|
|
2114
|
-
"summaryCommand": "
|
|
2115
|
-
"scannerCommand": "scanner
|
|
2116
|
-
"translateCommand": "
|
|
2117
|
-
"debugCommand": "debug
|
|
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
|
|
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": "⚙️
|
|
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
|
|
2126
|
-
"non_critical_missing_keys": "ℹ️ {file}: {count} clés non critiques
|
|
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": "❌
|
|
2132
|
-
"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}
|
|
2136
|
-
"errors_title": "❌ Erreurs
|
|
2165
|
+
"missing_translations_more": "... et {count} plus",
|
|
2166
|
+
"errors_title": "❌ Erreurs :",
|
|
2137
2167
|
"error_message": "- {error}",
|
|
2138
|
-
"overall_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": "⚠️
|
|
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": "
|
|
2159
|
-
"scanning_files_for_console_statements": "
|
|
2160
|
-
"found_javascript_files": "Trouvé {count}
|
|
2161
|
-
"console_i18n_analysis_results": "Résultats
|
|
2162
|
-
"total_console_statements": "Total des instructions console
|
|
2163
|
-
"translated_statements": "
|
|
2164
|
-
"hardcoded_statements": "
|
|
2165
|
-
"translation_coverage": "Couverture de traduction
|
|
2166
|
-
"coverage_by_file": "Couverture par
|
|
2167
|
-
"file_coverage_stats": "{emoji} {fileName}
|
|
2168
|
-
"hardcoded_console_statements": "
|
|
2169
|
-
"file_header": "
|
|
2170
|
-
"line_statement": "
|
|
2171
|
-
"suggested_key": "Clé suggérée
|
|
2172
|
-
"suggested_replacement": "Remplacement suggéré
|
|
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.
|
|
2175
|
-
"recommendation_2": "2.
|
|
2176
|
-
"recommendation_3": "3.
|
|
2177
|
-
"recommendation_4": "4.
|
|
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
|
|
2183
|
-
"script_description_line1": "Ce script analyse tous les fichiers JavaScript
|
|
2184
|
-
"script_description_line2": "et vérifie
|
|
2185
|
-
"analysis_completed_in_duration": "Analyse
|
|
2186
|
-
"report_saved_to_path": "Rapport enregistré
|
|
2187
|
-
"found_hardcoded_messages": "Trouvé {count} messages en dur.
|
|
2188
|
-
"all_console_messages_use_translation": "
|
|
2189
|
-
"consoleTranslationsCheck": "Vérification de la
|
|
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": "🌐
|
|
2222
|
+
"title": "🌐 Aide à la traduction {dryRun}",
|
|
2193
2223
|
"separator": "=====================================",
|
|
2194
|
-
"processing_file": "📄 Traitement
|
|
2195
|
-
"translation_summary_title": "📊 Résumé
|
|
2196
|
-
"total_translations_applied": "Total des traductions appliquées
|
|
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": "⚠️
|
|
2199
|
-
"translation_applied": "✅ {key}
|
|
2200
|
-
"saved_translations": "💾 {count} traductions
|
|
2201
|
-
"found_translatable_items": "🔍 {count} éléments traduisibles
|
|
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": "❌
|
|
2204
|
-
"coverage_report_title": "📊 Rapport de
|
|
2205
|
-
"coverage_report_separator": "
|
|
2206
|
-
"file_header": "📄 {filename}
|
|
2207
|
-
"total_keys": "
|
|
2208
|
-
"translated_keys": "
|
|
2209
|
-
"untranslated_markers": "Marqueurs non traduits
|
|
2210
|
-
"contains_english": "Contient
|
|
2211
|
-
"coverage_percentage": "Couverture
|
|
2212
|
-
"error_general": "❌ Erreur
|
|
2213
|
-
"use_help": "Utilisez --help pour
|
|
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}
|
|
2217
|
-
"deletedOldReportFiles": "{count} anciens fichiers de rapport
|
|
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
|
|
2226
|
-
"executingCommand": "
|
|
2227
|
-
"unknownCommand": "
|
|
2228
|
-
"errorExecutingCommand": "
|
|
2229
|
-
"errorLoadingTranslationFile": "
|
|
2230
|
-
"errorSavingLanguagePreference": "
|
|
2231
|
-
"noActiveReadlineInterface": "
|
|
2232
|
-
"uiLanguageUpdated": "
|
|
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é
|
|
2236
|
-
"detectedI18nDirectory": "Répertoire i18n détecté
|
|
2237
|
-
"toolkitTitle": "
|
|
2238
|
-
"versionInfo": "
|
|
2239
|
-
"releaseDate": "
|
|
2240
|
-
"maintainer": "
|
|
2241
|
-
"nodeVersion": "
|
|
2242
|
-
"license": "
|
|
2243
|
-
"whatsNew": "✨
|
|
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": "📚
|
|
2246
|
-
"issues": "🐛 Problèmes
|
|
2247
|
-
"versionInfoUnavailable": "
|
|
2248
|
-
"versionInfoError": "Erreur
|
|
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": "
|
|
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": "
|
|
2290
|
+
"phrase_failed": "échoué",
|
|
2261
2291
|
"phrase_loading": "chargement",
|
|
2262
|
-
"phrase_saving": "
|
|
2263
|
-
"phrase_full_system_debug": "débogage système
|
|
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
|
|
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": "
|
|
2270
|
-
"phrase_authentication_failed": "authentification
|
|
2271
|
-
"phrase_access_denied": "
|
|
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": "
|
|
2277
|
-
"language_japanese": "
|
|
2306
|
+
"language_russian": "russe",
|
|
2307
|
+
"language_japanese": "japonais",
|
|
2278
2308
|
"language_chinese": "Chinois",
|
|
2279
|
-
"validator_title": "🔍 Validateur de
|
|
2280
|
-
"validating_file": "📄 Validation
|
|
2281
|
-
"valid_file_message": "✅ Valide - Aucune violation de pureté
|
|
2282
|
-
"invalid_file_message": "❌ Invalide - {count} violation(s)
|
|
2283
|
-
"no_validation_rules": "Aucune règle de validation définie pour la langue
|
|
2284
|
-
"error_reading_file": "Erreur
|
|
2285
|
-
"issue_forbidden_marker": "Contient un marqueur interdit
|
|
2286
|
-
"issue_english_phrase": "Contient
|
|
2287
|
-
"issue_english_words": "Contient des mots
|
|
2288
|
-
"issue_missing_cyrillic": "Le texte long
|
|
2289
|
-
"issue_missing_japanese": "Le texte long
|
|
2290
|
-
"issue_missing_chinese": "Le texte long
|
|
2291
|
-
"summary_title": "📊 RÉSUMÉ DE
|
|
2292
|
-
"overall_results_header": "📋 Résultats
|
|
2293
|
-
"total_files_validated": "Total des
|
|
2294
|
-
"valid_files": "Fichiers valides
|
|
2295
|
-
"invalid_files": "Fichiers invalides
|
|
2296
|
-
"total_violations": "Total des violations
|
|
2297
|
-
"violations_by_file_header": "❌
|
|
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
|
|
2301
|
-
"description": "
|
|
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
|
|
2305
|
-
"workflow_execution_started": "Démarrage du
|
|
2306
|
-
"workflow_execution_completed": "
|
|
2307
|
-
"workflow_execution_failed": "Échec du
|
|
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
|
|
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é.
|
|
2343
|
+
"exitingCompleted": "📝 Workflow terminé. Sortir...",
|
|
2314
2344
|
"summary": {
|
|
2315
|
-
"title": "📋 RÉSUMÉ DU
|
|
2345
|
+
"title": "📋 RÉSUMÉ DU FLUX DE TRAVAIL",
|
|
2316
2346
|
"separator": "===================",
|
|
2317
|
-
"completedAt": "🕐 Workflow terminé à
|
|
2318
|
-
"initialViolations": "📊
|
|
2319
|
-
"finalViolations": "📉 Violations finales
|
|
2320
|
-
"totalFixes": "🔧 Total des
|
|
2321
|
-
"improvement": "📈 Amélioration
|
|
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": "
|
|
2325
|
-
"fixesApplied": "
|
|
2326
|
-
"nextSteps": "💡 PROCHAINES ÉTAPES
|
|
2327
|
-
"congratulations": "🎉 Félicitations ! Tous les fichiers de
|
|
2328
|
-
"cicdIntegration": "✅
|
|
2329
|
-
"automatedChecks": "✅
|
|
2330
|
-
"greatProgress": "🎯
|
|
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
|
|
2333
|
-
"goodProgress": "📈
|
|
2334
|
-
"expandMappings": "🔧
|
|
2335
|
-
"professionalReview": "👥 Envisagez
|
|
2336
|
-
"runAgain": "🔄
|
|
2337
|
-
"limitedProgress": "⚠️
|
|
2338
|
-
"reviewMappings": "🔍
|
|
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
|
|
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
|
|
2350
|
-
"total_console_statements": "Total des instructions console",
|
|
2351
|
-
"translated_statements": "
|
|
2352
|
-
"hardcoded_statements": "
|
|
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
|
|
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
|
|
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
|
|
2370
|
-
"i18n_console_translation_checker": "Vérificateur de traduction console
|
|
2371
|
-
"script_description_line1": "
|
|
2372
|
-
"script_description_line2": "
|
|
2373
|
-
"analysis_completed_in_duration": "Analyse
|
|
2374
|
-
"report_saved_to_path": "Rapport
|
|
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
|
|
2414
|
+
"creatingTemplates": "Création de modèles",
|
|
2385
2415
|
"summary": "Résumé",
|
|
2386
|
-
"summaryLanguages": "
|
|
2387
|
-
"summaryFilesPerLanguage": "
|
|
2388
|
-
"summaryTotalFiles": "
|
|
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": "
|
|
2395
|
-
"overview": "
|
|
2424
|
+
"title": "Titre",
|
|
2425
|
+
"overview": "Aperçu"
|
|
2396
2426
|
},
|
|
2397
2427
|
"auth": {
|
|
2398
|
-
"title": "
|
|
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": "
|
|
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": {
|