{
  "meta": {
    "version": "1.5.3",
    "consolidated": "2025-08-06T14:36:37.494Z",
    "sourceFiles": 256
  },
  "common": {
    "welcome": "Bienvenue",
    "hello": "Bonjour",
    "goodbye": "Au revoir",
    "yes": "Oui",
    "no": "Non",
    "save": "Sauvegarder",
    "cancel": "Annuler",
    "delete": "Supprimer",
    "edit": "Éditer",
    "loading": "Chargement...",
    "offlineTitle": "Vous êtes hors ligne",
    "offlineMessage": "Vous êtes hors ligne",
    "tryReconnect": "Essayer de se reconnecter",
    "logout": "Déconnexion",
    "login": "Connexion",
    "amount": "Montant",
    "success": "Succès",
    "error": "Erreur",
    "warning": "Avertissement",
    "info": "Info :",
    "debug": "Débogage",
    "progress": "Progression :",
    "remaining": "Restant :",
    "total": "Total :",
    "completed": "7. Terminé avec succès !",
    "missing": "Manquant",
    "partial": "Partiel",
    "sameAsSource": "Identique à la source :",
    "formatMismatch": "Format non correspondant :",
    "typeMismatch": "Type non correspondant :",
    "structureMismatch": "Structure non correspondante :",
    "invalidOption": "Option invalide",
    "separator": "==================================================",
    "initializationFailed": "❌ Échec de l'initialisation : {error}",
    "stackTrace": "Trace de pile : {stack}",
    "pressEnterToContinue": "Appuyez sur Entrée pour continuer...",
    "pressEnterToReturn": "Appuyez sur Entrée pour revenir au menu principal...",
    "stepCompleted": "Étape '{stepName}' terminée.",
    "stepFailed": "Étape '{stepName}' échouée.",
    "runningStep": "Exécution de l'étape : {stepName}",
    "command": "Commande : {command}",
    "startingWorkflow": "Démarrage du flux de travail...",
    "workflowCompleted": "Flux de travail terminé.",
    "checkReports": "Vérifiez les rapports pour plus de détails.",
    "errorExecutingCommand": "Error executing command: {error}",
    "genericError": "❌ Error: {{error}}",
    "errorGeneratingStatusSummary": "Error generating status summary: {error}",
    "errorRunningDebugTool": "Error running debug tool '{displayName}': {error}",
    "errorReadingDebugLogs": "Error reading debug logs: {error}",
    "errorAnalyzingLogFile": "Error analyzing log file: {error}",
    "errorAnalyzingTranslationKeys": "Error analyzing translation keys: {error}",
    "errorAnalyzingTranslationCompleteness": "Error analyzing translation completeness: {error}",
    "errorAnalyzingTranslationFormat": "Error analyzing translation format: {error}",
    "errorAnalyzingTranslationType": "Error analyzing translation type: {error}",
    "errorAnalyzingTranslationStructure": "Error analyzing translation structure: {error}",
    "errorAnalyzingTranslationFormatMismatch": "Error analyzing translation format mismatch: {error}",
    "errorAnalyzingTranslationTypeMismatch": "Error analyzing translation type mismatch: {error}",
    "errorAnalyzingTranslationStructureMismatch": "Error analyzing translation structure mismatch: {error}",
    "errorAnalyzingTranslationSameAsSource": "Error analyzing translation same as source: {error}",
    "title": "Statut",
    "nextStep1": "1. Vérifier l'analyse d'utilisation :",
    "nextStep2": "2. Valider les traductions :",
    "nextStep3": "3. Analyser l'exhaustivité :",
    "nextStep4": "4. Compléter les traductions manquantes :",
    "nextStep5": "5. Générer le rapport de synthèse :",
    "nextStep6": "6. Réviser et finaliser les traductions :",
    "generating": "Génération du rapport de synthèse...",
    "review": "Révision des traductions...",
    "finalizing": "Finalisation des traductions...",
    "finalized": "Finalisé avec succès !",
    "errors": "Erreurs :",
    "warnings": "Avertissements :",
    "completedKeys": "Clés complétées :",
    "missingKeys": "Clés manquantes :",
    "partialKeys": "Clés partielles :"
  },
  "analyze": {
    "help_message": "\nAnalyseur de Traduction I18n\n\nUtilisation: node i18ntk-analyze.js [options]\n\nOptions:\n  --source-dir <dir>     Répertoire source à analyser (par défaut: ./src)\n  --i18n-dir <dir>       Répertoire i18n (par défaut: ./src/locales)\n  --output-report        Générer un rapport détaillé\n  --output-dir <dir>     Répertoire de sortie pour les rapports (par défaut: ./reports)\n  --help                 Afficher cette aide\n\nExemples:\n  node i18ntk-analyze.js --output-report\n  node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales\n  node i18ntk-analyze.js --output-dir=./analysis --output-report\n",
    "source_directory": "📁 Répertoire source: {sourceDir}",
    "i18n_directory": "🌐 Répertoire i18n: {i18nDir}",
    "loading_translation_files": "📋 Chargement des fichiers de traduction...",
    "sourceDirectoryLabel": "📁 Répertoire Source: {{sourceDir}}",
    "sourceLanguageLabel": "🌍 Langue Source: {{sourceLanguage}}",
    "strictModeLabel": "⚙️ Mode Strict: {{mode}}\n",
    "found_translation_files_count": "✅ Trouvés {count} fichiers de traduction",
    "analyzing_translations": "🔍 Analyse des traductions...",
    "analysis_completed_successfully": "🎉 Analyse terminée avec succès !",
    "analysis_results": "📊 RÉSULTATS DE L'ANALYSE",
    "language_analysis_stats": "  {language}: {translatedKeys}/{totalKeys} ({percentage}% traduit)",
    "sample_missing_keys": "\nExemple de clés manquantes:",
    "missing_key": "- {key}",
    "and_more_missing": "...et {count} de plus.",
    "sample_unused_keys": "\nExemple de clés inutilisées:",
    "unused_key": "- {key}",
    "and_more_unused": "...et {count} de plus.",
    "recommendations": "\n📋 RECOMMANDATIONS",
    "add_missing_translations": "💡 Ajouter les traductions manquantes pour améliorer la couverture.",
    "remove_unused_translations": "💡 Supprimer les traductions inutilisées pour garder votre projet propre.",
    "next_steps": "\n📋 PROCHAINES ÉTAPES",
    "review_analysis_results": "1. Examiner les résultats de l'analyse dans la console ou le rapport généré.",
    "run_with_output_report": "2. Exécuter avec --output-report pour un rapport détaillé.",
    "add_or_remove_translations": "3. Ajouter les traductions manquantes ou supprimer les inutilisées.",
    "rerun_analysis": "4. Relancer l'analyse pour vérifier les améliorations.",
    "analysis_summary": "📊 RÉSUMÉ DE L'ANALYSE",
    "source_files_scanned": "Fichiers source analysés: {fileCount}",
    "translation_files_checked": "Fichiers de traduction vérifiés: {translationFileCount}",
    "total_keys": "Clés totales: {totalKeys}",
    "translated_keys": "Clés traduites: {translatedKeys}",
    "missing_keys": "Clés manquantes: {missingKeys}",
    "unused_keys": "Clés inutilisées: {unusedKeys}",
    "translation_coverage": "Couverture de traduction: {coverage}%",
    "analysis_passed_for_language": "✅ Analyse réussie pour {language}",
    "analysis_failed_for_language": "❌ Analyse échouée pour {language} ({missingKeys} manquantes, {unusedKeys} inutilisées)",
    "starting": "🔍 Démarrage de l'analyse de traduction...",
    "foundLanguages": "📋 Trouvées {count} langues à analyser: {languages}",
    "analyzing": "🔄 Analyse de {language}...",
    "reportTitle": "📊 RAPPORT D'ANALYSE DE TRADUCTION",
    "generated": "Généré: {timestamp}",
    "status": "Statut: {translated}/{total} clés ({percentage}% traduit)",
    "filesAnalyzed": "Fichiers analysés: {analyzed}/{total}",
    "keysNeedingTranslation": "Clés nécessitant une traduction: {count}",
    "fileBreakdown": "📋 DÉCOMPOSITION DES FICHIERS",
    "error": "Erreur",
    "completed": "✅ Analyse terminée pour {language}",
    "progress": "📊 Progression Globale: {translated}/{total} langues traitées",
    "reportSaved": "   Rapport sauvegardé: {reportPath}",
    "summary": "📊 RÉSUMÉ DE L'ANALYSE",
    "finished": "✅ Analyse terminée avec succès !",
    "statusFileMissing": "❌ Fichier de traduction manquant",
    "sourceKeys": "📊 Clés source: {count}",
    "translation": "📊 Traduction: {translated}/{total} ({percentage}%)",
    "structure": "🗂️  Structure: {status}",
    "consistent": "Consistente",
    "inconsistent": "Inconsistante",
    "missingKeys": "Clés manquantes: {count}",
    "extraKeys": "Clés supplémentaires: {count}",
    "issues": "⚠️  Problèmes trouvés: {count}",
    "issueType": {
      "not_translated": "Non traduit: {count}",
      "empty_value": "Valeurs vides: {count}",
      "partial_translation": "Traductions partielles: {count}",
      "format_mismatch": "Discordances de format: {count}",
      "type_mismatch": "Discordances de type: {count}",
      "structure_mismatch": "Discordances de structure: {count}",
      "same_as_source": "Identique à la source: {count}"
    },
    "keysToTranslate": "📋 CLÉS À TRADUIRE",
    "key": "Clé",
    "english": "Anglais",
    "needsTranslation": "BESOIN DE TRADUCTION",
    "andMoreKeys": "...et {count} clés supplémentaires.",
    "noLanguages": "⚠️  Aucune langue cible trouvée.",
    "languageStats": "{language}: {percentage}% complet ({translated}/{total} clés)",
    "invalidReportFilePath": "Chemin de fichier de rapport invalide",
    "failedToWriteReportFile": "Échec de l'écriture sécurisée du fichier de rapport"
  },
  "complete": {
    "configLoadedSuccessfully": "Configuration chargée avec succès",
    "configLoadingFailed": "Échec du chargement de la configuration",
    "title": "🌍 COMPLÉTION DE TRADUCTION I18N",
    "separator": "============================================================",
    "sourceDir": "📁 Répertoire source : {sourceDir}",
    "sourceLanguage": "🌐 Langue source : {sourceLanguage}",
    "dryRunMode": "🧪 Mode test - aucune modification ne sera appliquée",
    "languages": "🌍 Langues disponibles : {languages}",
    "addingMissingKeys": "➕ Ajout des clés manquantes aux fichiers de traduction...",
    "processing": "🔄 Traitement de {language}...",
    "addedKeys": "✅ {count} clés manquantes ajoutées",
    "noChangesNeeded": "✅ Aucune modification nécessaire pour {language}",
    "summaryTitle": "📊 RÉSUMÉ DE COMPLÉTION",
    "totalChanges": "📝 Modifications totales : {totalChanges}",
    "languagesProcessed": "🌍 Langues traitées : {languagesProcessed}",
    "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
    "nextStepsTitle": "📋 ÉTAPES SUIVANTES",
    "nextStep1": "1. Exécuter l'analyse d'utilisation :",
    "nextStep2": "   node i18ntk-usage.js --output-report",
    "nextStep3": "2. Valider les traductions :",
    "nextStep4": "   node i18ntk-validate.js",
    "nextStep5": "3. Analyser les motifs :",
    "nextStep6": "   node i18ntk-analyze.js",
    "allKeysAvailable": "🎉 Toutes les clés de traduction sont maintenant disponibles !",
    "runWithoutDryRun": "💡 Exécuter sans --dry-run pour appliquer les modifications",
    "deletingOldReport": "🗑️  Suppression de l'ancien rapport...",
    "generatingFreshAnalysis": "📊 Génération d'une nouvelle analyse d'utilisation...",
    "couldNotGenerate": "❌ Impossible de générer l'analyse d'utilisation",
    "reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation des clés communes...",
    "foundMissingKeys": "📋 Trouvé {count} clés manquantes depuis l'analyse d'utilisation",
    "couldNotParse": "❌ Impossible d'analyser le rapport d'utilisation. Utilisation des clés communes...",
    "errorDuringCompletion": "❌ Erreur lors de la finalisation : {error}",
    "fatalError": "❌ Erreur fatale : {error}",
    "configurationValidationFailed": "Échec de la validation de configuration : champs requis manquants"
  },
  "sizing": {
    "separator": "================================================================================",
    "lineSeparator": "--------------------------------------------------------------------------------",
    "analysisStats": "{{stats}}",
    "sourceDirectoryLabel": "📁 Répertoire source : {{sourceDir}}",
    "sourceLanguageLabel": "🌍 Langue source : {{sourceLanguage}}",
    "strictModeLabel": "⚙️  Mode strict : {{mode}}",
    "invalidSourceDirectoryError": "Chemin du répertoire source invalide : {{sourceDir}}",
    "sourceDirectoryNotFoundError": "Répertoire source introuvable : {{sourceDir}}",
    "invalidOutputDirectoryError": "Chemin du répertoire de sortie invalide : {{outputDir}}",
    "invalidReportFileError": "Chemin du fichier de rapport invalide",
    "problematic_keys": "Clés problématiques : {problematicKeys}",
    "problematicKeysLabel": "Clés problématiques : {problematicKeys}",
    "long_translations": "Traductions longues : {longTranslations}",
    "failedToSaveReportError": "Échec de l'enregistrement sécurisé du rapport",
    "invalidCsvFileError": "Chemin du fichier CSV invalide",
    "failedToSaveCsvError": "Échec de l'enregistrement sécurisé du rapport CSV",
    "fatalError": "❌ L'analyse du dimensionnement a échoué : {{error}}",
    "starting_i18n_sizing_analysis": "Démarrage de l'analyse du dimensionnement i18n...",
    "source_directory": "Répertoire source : {{sourceDir}}",
    "found_languages": "Langues trouvées : {{languages}}",
    "analyzing_file_sizes": "Analyse des tailles de fichiers...",
    "analyzing_translation_content": "Analyse du contenu des traductions...",
    "generating_size_comparisons": "Génération des comparaisons de taille...",
    "no_languages_found_for_comparison": "Aucune langue trouvée pour la comparaison",
    "sizing_analysis_results": "Résultats de l'analyse du dimensionnement I18n",
    "file_sizes_title": "Tailles des fichiers",
    "file_sizes_header": "Langue    Taille(Ko)  Lignes  Caractères",
    "file_size_row": "{{lang}}      {{sizeKB}}      {{lines}}      {{characters}}",
    "language_statistics_title": "Statistiques des langues",
    "language_stats_header": "Langue    Clés  Caractères  Long. moy.  Long. max  Vides  Longs",
    "language_stats_row": "{{lang}}      {{totalKeys}}    {{totalCharacters}}    {{averageKeyLength}}    {{maxKeyLength}}    {{emptyKeys}}    {{longKeys}}",
    "size_variations_title": "Variations de taille",
    "size_variations_header": "Langue    Diff. car.  % Diff  Problématique",
    "size_variation_row": "{{lang}}      {{characterDifference}}    {{percentageDifference}}%    {{problematic}}",
    "problematic_yes": "Oui",
    "problematic_no": "Non",
    "recommendations_title": "Recommandations",
    "recommendation_item": "{{index}}. {{recommendation}}",
    "problematic_key_detail": "  {{index}}. Clé: '{{key}}' - Variations: {{variations}}",
    "generating_detailed_report": "Génération du rapport détaillé...",
    "keysHaveSignificantSizeVariations": "les clés présentent des variations de taille significatives",
    "longTranslationsDetected": "{{lang}} a {{data.longKeys}} traductions de plus de 100 caractères - envisagez de les décomposer",
    "report_saved_to": "Rapport enregistré dans : {{reportPath}}",
    "considerReviewingTranslations": "Envisagez de revoir les traductions {{lang}} - elles sont {{data.percentageDifference}}% plus longues que la référence",
    "csv_report_saved_to": "Rapport CSV enregistré dans : {{csvPath}}",
    "no_translation_files_found": "Aucun fichier de traduction trouvé",
    "analysis_completed": "Analyse terminée en {{duration}}ms",
    "analysis_failed": "L'analyse a échoué : {{errorMessage}}",
    "failed_to_parse_language_error": "Échec de l'analyse des traductions {{language}} : {{errorMessage}}",
    "recommendations": {
      "keys_have_significant_size_variations": "les clés présentent des variations de taille significatives",
      "consider_reviewing_translations": "Envisagez de revoir les traductions {{lang}} - elles sont {{percentageDifference}}% {{comparison}} que la référence",
      "long_translations_detected": "{{lang}} a {{longKeys}} traductions de plus de {{threshold}} caractères - envisagez de les décomposer"
    },
    "hardcodedTexts": {
      "keysHaveSignificantSizeVariations": "les clés présentent des variations de taille significatives",
      "considerReviewingTranslations": "Envisagez de revoir les traductions {{lang}} - elles sont {{percentageDifference}}% {{comparison}} que la référence",
      "longTranslationsDetected": "{{lang}} a {{longKeys}} traductions de plus de {{threshold}} caractères - envisagez de les décomposer"
    }
  },
  "usage": {
    "help_message": "\nAnalyseur d'utilisation I18n\n\nUsage : node i18ntk-usage.js [options]\n\nOptions :\n  --source-dir <dir>     Répertoire source à analyser (défaut : ./src)\n  --i18n-dir <dir>       Répertoire I18n (défaut : ./src/locales)\n  --output-report        Générer un rapport détaillé\n  --output-dir <dir>     Répertoire de sortie pour les rapports (défaut : ./reports)\n  --help                 Afficher cette aide\n\nExemples :\n  node i18ntk-usage.js --output-report\n  node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales\n  node i18ntk-usage.js --output-dir=./analysis --output-report\n",
    "source_directory_thissourcedir": "📁 Répertoire source : {sourceDir}",
    "translationCompletenessTitle": "🌍 Complétude de la traduction :",
    "i18n_directory_thisi18ndir": "🌐 Répertoire I18n : {i18nDir}",
    "failed_to_parse_filename_error": "⚠️  Échec de l'analyse de {fileName} : {errorMessage}",
    "analyzing_source_files": "🔍 Analyse des fichiers source...",
    "found_files_in_source": "📂 Trouvé {numFiles} fichiers dans le répertoire source",
    "found_thisusedkeyssize_unique_": "🎯 Trouvé {usedKeysSize} clés uniques utilisées",
    "total_key_usages_totalkeysfoun": "📊 Total des utilisations de clés : {totalKeysFound}",
    "loading_available_translation_": "📋 Chargement des clés de traduction disponibles...",
    "found_thisavailablekeyssize_av": "✅ Trouvé {availableKeysSize} clés disponibles",
    "foundTranslationFiles": "✅ Trouvé {count} fichiers de traduction",
    "pressEnterToReturnToMenu": "Appuyez sur Entrée pour revenir au menu principal",
    "notTranslatedKeysTotal": "⚠️  Clés non traduites : {total}",
    "noSourceFilesFound": "⚠️  Aucun fichier source trouvé dans le répertoire source.",
    "reviewNotTranslatedKeys": "💡 Examiner les clés non traduites",
    "analysisCompletedSuccessfully": "🎉 Analyse terminée avec succès !",
    "detectedSourceDirectory": "Répertoire source détecté : {{sourceDir}}",
    "detectedI18nDirectory": "Répertoire i18n détecté : {{i18nDir}}",
    "fileInfo": "   📄 {namespace}: {keys} clés",
    "failedToAnalyzeUsage": "❌ Échec de l'analyse d'utilisation : {error}",
    "failedToAnalyzeFile": "❌ Échec de l'analyse de fichier : {error}",
    "analyzerInitialized": "Analyseur initialisé",
    "analyzerInitFailed": "Échec de l'initialisation de l'analyseur : {error}",
    "argsParsed": "Arguments analysés",
    "argsParseFailed": "Échec de l'analyse des arguments : {error}",
    "translationDiscoveryError": "Erreur de découverte de traduction : {error}",
    "fileTraversalError": "Erreur de parcours des fichiers : {error}",
    "usageAnalysisFailed": "Échec de l'analyse d'utilisation : {error}",
    "translationFileParseError": "Erreur d'analyse du fichier de traduction : {error}",
    "translationKeysLoadError": "Erreur de chargement des clés de traduction : {error}",
    "languageCompletenessStats": "{language}: {translated}/{total} ({completeness}% traduit)",
    "missingKeysCount": "Clés manquantes : {count}",
    "analyzingTranslationCompleteness": "Analyse de la complétude des traductions...",
    "unusedKeysCount": "Clés inutilisées : {count}",
    "usedKeysCount": "Clés utilisées : {count}",
    "availableKeysCount": "Clés disponibles : {count}",
    "analysisResults": "Résultats de l'analyse :",
    "checkUsage": {
      "title": "🔍 ANALYSE D'UTILISATION I18N",
      "message": "Analyse de l'utilisation des clés i18n dans votre projet.",
      "help_message": "\nAnalyseur d'utilisation I18n\n\nUsage : node i18ntk-usage.js [options]\n\nOptions :\n  --source-dir <dir>     Répertoire source à analyser (défaut : ./src)\n  --i18n-dir <dir>       Répertoire I18n (défaut : ./src/locales)\n  --output-report        Générer un rapport détaillé\n  --output-dir <dir>     Répertoire de sortie pour les rapports (défaut : ./reports)\n  --help                 Afficher cette aide\n\nExemples :\n  node i18ntk-usage.js --output-report\n  node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales\n  node i18ntk-usage.js --output-dir=./analysis --output-report\n",
      "source_directory_thissourcedir": "📁 Répertoire source : {sourceDir}",
      "i18n_directory_thisi18ndir": "🌐 Répertoire I18n : {i18nDir}",
      "loading_available_translation_": "📋 Chargement des clés de traduction disponibles...",
      "found_thisavailablekeyssize_av": "✅ Trouvé {availableKeysSize} clés disponibles",
      "analyzing_source_files": "🔍 Analyse des fichiers source...",
      "found_files_in_source": "📂 Trouvé {numFiles} fichiers dans le répertoire source",
      "found_thisusedkeyssize_unique_": "🎯 Trouvé {usedKeysSize} clés uniques utilisées",
      "total_key_usages_totalkeysfoun": "📊 Total des utilisations de clés : {totalKeysFound}",
      "translation_completeness_title": "📊 COMPLÉTUDE DE LA TRADUCTION",
      "language_completeness_stats": "  {language} : {translated}/{total} ({completeness}% traduit)",
      "n_sample_unused_keys": "\nÉchantillon de clés inutilisées :",
      "key": "- {key}",
      "and_unusedkeyslength_5_more": "...et {count} de plus.",
      "n_recommendations": "\n📋 RECOMMANDATIONS",
      "consider_removing_unused_trans": "💡 Envisager de supprimer les traductions inutilisées pour garder votre projet propre.",
      "n_next_steps": "\n📋 PROCHAINES ÉTAPES",
      "1_review_the_analysis_results": "1. Examiner les résultats de l'analyse dans la console ou le rapport généré.",
      "2_run_with_outputreport_for_de": "2. Exécuter avec --output-report pour un rapport détaillé.",
      "3_remove_unused_keys_or_add_mi": "3. Supprimer les clés inutilisées ou ajouter les clés manquantes à votre code source.",
      "4_rerun_analysis_to_verify_imp": "4. Ré-exécuter l'analyse pour vérifier les améliorations.",
      "usage_analysis_results": "📊 RÉSULTATS DE L'ANALYSE D'UTILISATION",
      "source_files_scanned_thisfileu": "Fichiers source analysés : {fileUsageSize}",
      "available_translation_keys_thi": "Clés de traduction disponibles : {availableKeysSize}",
      "used_translation_keys_thisused": "Clés de traduction utilisées : {usedKeysSize}",
      "dynamic_keys_detected_dynamick": "Clés dynamiques détectées : {dynamicKeysLength}",
      "unused_keys_unusedkeyslength": "Clés inutilisées : {unusedKeysLength}",
      "missing_keys_missingkeyslength": "Clés manquantes : {missingKeysLength}",
      "noSourceFilesFound": "Aucun fichier source trouvé à analyser.",
      "processedFiles": "Traité {processedFiles} sur {totalFiles} fichiers.",
      "i18nDirectoryNotFound": "Répertoire I18n introuvable : {i18nDir}",
      "noTranslationLanguagesFound": "Aucune langue de traduction trouvée.",
      "failedToAnalyzeFile": "Échec de l'analyse du fichier {filePath} : {error}",
      "failedToAnalyzeLanguage": "Échec de l'analyse de la langue {language} : {error}",
      "translationCompletenessAnalysisFailed": "L'analyse de complétude de traduction a échoué : {error}",
      "n": ""
    },
    "complete": {
      "configLoadedSuccessfully": "Configuration chargée avec succès",
      "configLoadingFailed": "Échec du chargement de la configuration",
      "title": "🌍 COMPLÉTION DE TRADUCTION I18N",
      "separator": "============================================================",
      "sourceDir": "📁 Répertoire source : {sourceDir}",
      "sourceLanguage": "🌐 Langue source : {sourceLanguage}",
      "dryRunMode": "🧪 Mode test - aucun changement ne sera appliqué",
      "languages": "🌍 Langues disponibles : {languages}",
      "addingMissingKeys": "➕ Ajout des clés manquantes aux fichiers de traduction...",
      "processing": "🔄 Traitement de {language}...",
      "addedKeys": "✅ Ajouté {count} clés manquantes",
      "noChangesNeeded": "✅ Aucun changement nécessaire pour {language}",
      "summaryTitle": "📊 RÉSUMÉ DE COMPLÉTION",
      "totalChanges": "📝 Total des changements : {totalChanges}",
      "languagesProcessed": "🌍 Langues traitées : {languagesProcessed}",
      "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
      "nextStepsTitle": "📋 PROCHAINES ÉTAPES",
      "nextStep1": "1. Exécuter l'analyse d'utilisation :",
      "nextStep2": "   node i18ntk-usage.js --output-report",
      "nextStep3": "2. Valider les traductions :",
      "nextStep4": "   node i18ntk-validate.js",
      "nextStep5": "3. Analyser les modèles :",
      "nextStep6": "   node i18ntk-analyze.js",
      "allKeysAvailable": "🎉 Toutes les clés de traduction sont maintenant disponibles !",
      "runWithoutDryRun": "💡 Exécuter sans --dry-run pour appliquer les changements",
      "deletingOldReport": "🗑️  Suppression de l'ancien rapport...",
      "generatingFreshAnalysis": "📊 Génération d'une nouvelle analyse d'utilisation...",
      "couldNotGenerate": "❌ Impossible de générer l'analyse d'utilisation",
      "reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation des clés communes...",
      "foundMissingKeys": "📋 Trouvé {count} clés manquantes depuis l'analyse d'utilisation",
      "couldNotParse": "❌ Impossible d'analyser le rapport d'utilisation. Utilisation des clés communes..."
    }
  },
  "validate": {
    "help_message": "\nValidateur de traductions I18n\n\nUtilisation : node i18ntk-validate.js [options]\n\nOptions :\n  --source-dir <dir>     Répertoire source à analyser (par défaut : ./src)\n  --i18n-dir <dir>       Répertoire i18n (par défaut : ./src/locales)\n  --output-report        Générer un rapport détaillé\n  --output-dir <dir>     Répertoire de sortie pour les rapports (par défaut : ./reports)\n  --help                 Afficher cette aide\n\nExemples :\n  node i18ntk-validate.js --output-report\n  node i18ntk-validate.js --source-dir=./app --i18n-dir=./locales\n  node i18ntk-validate.js --output-dir=./analysis --output-report\n",
    "title": "🔍 Validateur de traductions I18n",
    "message": "Lancement du processus de validation...",
    "sourceDirectory": "📁 Répertoire source : {dir}",
    "sourceLanguage": "🌍 Langue source : {sourceLanguage}",
    "strictMode": "⚙️  Mode strict : {mode}",
    "noTargetLanguages": "⚠️  Aucune langue cible trouvée à valider",
    "validatingLanguages": "🌍 Validation des langues : {langs}",
    "validatingLanguage": "🔍 Validation de la langue : {lang}",
    "filesCount": "📄 Fichiers : {count}",
    "keysCount": "🔑 Clés : {count}",
    "missingFilesCount": "📁 Fichiers manquants : {count}",
    "syntaxErrorsCount": "❌ Erreurs de syntaxe : {count}",
    "translationPercentage": "🎯 Traduction : {percentage}% ({translated}/{total} clés)",
    "validationSummary": "📊 RÉCAPITULATIF DE LA VALIDATION",
    "validation_failed": "❌ Validation échouée : {error}",
    "totalErrors": "❌ Erreurs totales : {count}",
    "totalWarnings": "⚠️  Avertissements totaux : {count}",
    "errorsSection": "❌ ERREURS",
    "warningsSection": "⚠️  AVERTISSEMENTS",
    "recommendationsSection": "💡 RECOMMANDATIONS",
    "fixErrorsFirst": "1. Corrigez d'abord toutes les erreurs",
    "resolveMissingFilesAndSyntaxErrors": "1. Résolvez les fichiers manquants et les erreurs de syntaxe",
    "fixStructuralInconsistencies": "2. Corrigez les incohérences structurelles",
    "completeMissingTranslations": "3. Complétez les traductions manquantes",
    "rerunValidation": "4. Relancez la validation pour vérifier les corrections",
    "addressWarnings": "Traitez les avertissements pour améliorer la qualité",
    "reviewWarnings": "Vérifiez les avertissements et corrigez-les si nécessaire",
    "considerRunningWithStrict": "2. Envisagez d'exécuter avec l'option --strict pour une validation plus stricte",
    "allValidationsPassed": "🎉 Toutes les validations sont réussies !",
    "considerRunningUsageAnalysis": "Envisagez d'exécuter l'analyse d'utilisation : node i18ntk-usage.js",
    "deletedOldReport": "🗑️  Ancien rapport de validation supprimé",
    "sourceDir": "📁 Répertoire source : {sourceDir}",
    "i18nDir": "🌐 Répertoire i18n : {i18nDir}",
    "loadingTranslationFiles": "📋 Chargement des fichiers de traduction...",
    "foundTranslationFilesCount": "✅ {count} fichiers de traduction trouvés",
    "analyzingTranslations": "🔍 Analyse des traductions...",
    "validationCompletedSuccessfully": "🎉 Validation terminée avec succès !",
    "validationErrorsFound": "⚠️  Erreurs de validation trouvées : {count}",
    "validationWarningsFound": "⚠️  Avertissements de validation trouvés : {count}",
    "validationPassed": "✅ Validation réussie sans erreurs",
    "validationFailed": "Validation échouée : {error}",
    "startingValidationProcess": "🔍 Démarrage du processus de validation...",
    "validationProcessCompletedSuccessfully": "✅ Processus de validation terminé avec succès",
    "stackTrace": "Trace de la pile : {{stack}}",
    "authenticationFailed": "❌ Authentification échouée. Accès refusé.",
    "fatalValidationError": "❌ Erreur fatale de validation : {{error}}",
    "configAccess": "Accès à la configuration pour la validation",
    "configValidated": "Configuration validée avec succès",
    "configError": "Erreur de configuration : {error}",
    "validatorInit": "Initialisation du validateur I18n",
    "validatorInitialized": "Validateur I18n initialisé avec succès",
    "validatorInitError": "Erreur d'initialisation du validateur : {error}",
    "argsParsing": "Analyse des arguments de la ligne de commande",
    "argsParsed": "Arguments de la ligne de commande analysés avec succès",
    "argsParseError": "Erreur d'analyse des arguments : {error}",
    "languagesScan": "Analyse des langues disponibles",
    "languagesFound": "{count} langues trouvées",
    "languagesScanError": "Erreur lors de l'analyse des langues : {error}",
    "filesScan": "{count} fichiers trouvés en {language}",
    "filesScanError": "Erreur lors de l'analyse des fichiers : {error}",
    "jsonValidated": "Syntaxe JSON validée : {filePath}",
    "jsonValidationError": "Erreur de validation JSON : {error}",
    "languageValidation": "Validation de la langue : {language}",
    "languageValidationError": "Erreur de validation de la langue : {error}",
    "fileDeleted": "Fichier supprimé",
    "runStarted": "Démarrage de la validation",
    "runCompleted": "Validation terminée avec succès",
    "runError": "Exécution de la validation échouée : {error}",
    "scriptExecution": "Exécution du script",
    "validationCompleted": "Validation terminée",
    "validationError": "Erreur de validation : {error}",
    "separator": "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
    "languageHeader": "🌐 Langue : {language}",
    "validationResults": "📊 Résultats de la validation",
    "noErrors": "✅ Aucune erreur trouvée",
    "noWarnings": "✅ Aucun avertissement trouvé",
    "summaryHeader": "📋 RÉCAPITULATIF GÉNÉRAL",
    "progressIndicator": "⏳ Traitement en cours...",
    "completedIndicator": "✅ Terminé",
    "errorIndicator": "❌ Erreur",
    "warningIndicator": "⚠️  Avertissement",
    "infoIndicator": "ℹ️  Info",
    "sourceDirNotConfigured": "Répertoire source non configuré",
    "sourceLanguageNotConfigured": "Langue source non configurée",
    "translationFunctionNotInitialized": "Fonction de traduction non initialisée correctement",
    "sourceLanguageDirectoryNotFound": "Répertoire de la langue source introuvable",
    "specifiedLanguageNotFound": "Langue spécifiée introuvable",
    "noJsonFilesFound": "Aucun fichier JSON trouvé dans le répertoire source : {sourceDir}",
    "i18nDirectoryNotFound": "Répertoire i18n introuvable : {i18nDir}",
    "invalidDirectoryPaths": "Chemins de répertoires invalides détectés",
    "invalidSampleFilePath": "Chemin de fichier d'exemple invalide",
    "failedToCreateSampleTranslationFile": "Échec de la création du fichier de traduction d'exemple",
    "invalidFilePathDetected": "Chemin de fichier invalide détecté",
    "failedToWriteFile": "Échec de l'écriture du fichier : {filePath}"
  },
  "adminCli": {
    "setupPinProtectionTitle": "\n🔐 Configuration de la protection PIN Admin",
    "setupPinProtectionDescription": "Cela exigera un PIN de 4 à 6 chiffres pour les opérations administratives.",
    "enablePinProtectionPrompt": "Voulez-vous activer la protection PIN admin ?",
    "setupCancelled": "Configuration de la protection PIN admin annulée.",
    "enterPinPrompt": "Entrez un PIN de 4 à 6 chiffres : ",
    "pinFormatError": "❌ Le PIN doit comporter 4 à 6 chiffres. Veuillez réessayer.",
    "confirmPinPrompt": "Confirmez le PIN : ",
    "pinMismatchError": "❌ Les PIN ne correspondent pas. Veuillez réessayer.",
    "pinProtectionEnabledSuccess": "✅ Protection PIN admin activée avec succès !",
    "pinRecoveryWarning": "⚠️  Retenez votre PIN - il ne peut pas être récupéré en cas de perte.",
    "setupPinProtectionFailed": "❌ Échec de la configuration de la protection PIN admin.",
    "errorSettingUpPin": "❌ Erreur lors de la configuration du PIN admin : {message}",
    "authRequiredForOperation": "\n🔐 Authentification admin requise pour : {operation}",
    "invalidPinFormat": "❌ Format de PIN invalide. Le PIN doit comporter 4 à 6 chiffres.",
    "authenticationSuccess": "✅ Authentification réussie !",
    "invalidPinAttemptsRemaining": "❌ PIN invalide. {remaining} tentatives restantes.",
    "authenticationFailedAccessDenied": "❌ Authentification échouée. Accès refusé.",
    "authenticationError": "❌ Erreur d'authentification : {message}",
    "pinProtectionNotEnabled": "La protection PIN admin n'est pas activée actuellement.",
    "disablingPinProtectionTitle": "\n🔓 Désactivation de la protection PIN Admin",
    "confirmDisablePinProtection": "Êtes-vous sûr de vouloir désactiver la protection PIN admin ?",
    "operationCancelled": "Opération annulée.",
    "pinProtectionDisabledSuccess": "✅ Protection PIN admin désactivée.",
    "disablePinProtectionFailed": "❌ Échec de la désactivation de la protection PIN admin.",
    "errorDisablingPinProtection": "❌ Erreur lors de la désactivation de la protection admin : {message}",
    "adminProtectionStatusTitle": "\n🔐 État de la protection admin",
    "statusEnabled": "Statut : ✅ ACTIVÉ",
    "protectionDetails": "Protection : PIN de 4 à 6 chiffres requis pour les opérations admin",
    "lockoutDetails": "Verrouillage : 3 échecs = verrouillage de 15 minutes",
    "statusDisabled": "Statut : ❌ DÉSACTIVÉ",
    "noAuthRequired": "Protection : Aucune authentification requise",
    "unprotectedRisk": "Risque : les opérations admin ne sont pas protégées",
    "errorCheckingAdminStatus": "❌ Erreur lors de la vérification du statut admin : {message}",
    "authRequired": "🔐 Authentification admin requise.",
    "invalidPin": "❌ PIN invalide.",
    "authSuccess": "✅ Authentification réussie !",
    "adminPinSetupCli": "admin_pin_setup_cli",
    "adminAuthFailedCli": "admin_auth_failed_cli",
    "adminAuthDisabledCli": "admin_auth_disabled_cli",
    "protectedAccess": "Accès protégé : authentification admin requise pour les opérations sensibles.",
    "enterPin": "Entrez le PIN admin : ",
    "accessGranted": "Accès accordé."
  },
  "adminPin": {
    "setup_title": "🔐 Configuration du PIN admin",
    "setup_separator": "============================================================",
    "setup_description": "Créez un PIN de 4 à 6 chiffres pour l'accès admin aux paramètres sensibles.",
    "required_for_title": "Ce PIN sera requis pour :",
    "required_for_1": "  • Modifier les paramètres de sécurité",
    "required_for_2": "  • Modifier des configurations avancées",
    "required_for_3": "  • Accéder aux outils de débogage",
    "required_for_4": "  • Réinitialiser les paramètres",
    "setup_note": "💡 Remarque : vous verrez des astérisques (*) pendant la saisie : ils masquent simplement les caractères.",
    "setup_digits_only": "   Seuls les chiffres de 0 à 9 sont acceptés pour le PIN.",
    "invalid_pin_length": "❌ PIN invalide. Doit comporter 4 à 6 chiffres (0-9 uniquement).",
    "invalid_pin_example": "   Exemple : 1234 ou 567890",
    "pins_do_not_match": "❌ Les PIN ne correspondent pas.",
    "setup_success": "✅ Le PIN admin a été configuré avec succès !",
    "setup_warning": "⚠️  Conservez ce PIN en lieu sûr. Il ne peut pas être récupéré en cas de perte.",
    "setup_error": "❌ Erreur lors de la configuration du PIN :",
    "session_expired": "\n⏰ Session admin expirée en raison de l'inactivité.",
    "no_pin_set_setting_up": "⚠️  Aucun PIN admin défini. Configuration du PIN en cours…",
    "no_pin_configured_access_denied": "⚠️  Aucun PIN admin configuré. Accès refusé.",
    "use_admin_settings_to_set_pin": "💡 Utilisez les paramètres admin pour configurer un PIN d'abord.",
    "locked_out": "🔒 Accès admin verrouillé en raison de trop nombreuses tentatives infructueuses.",
    "wait_before_retry": "Veuillez attendre 5 minutes avant de réessayer.",
    "access_granted": "✅ Accès accordé.",
    "incorrect_pin": "❌ PIN incorrect. {attempts} tentatives restantes.",
    "verify_pin_error": "❌ Erreur lors de la vérification du PIN :",
    "already_configured": "✅ Le PIN admin est déjà configuré.",
    "optional_setup_title": "\n🔐 Configuration facultative du PIN admin",
    "optional_setup_description": "La protection PIN admin ajoute de la sécurité pour des opérations sensibles telles que :",
    "setup_prompt": "Souhaitez-vous configurer un PIN admin ? (y/N) : ",
    "skipping_setup": "⏭️  Configuration du PIN facultative. Vous pouvez le configurer plus tard dans les paramètres.",
    "setup_prompt_error": "❌ Erreur lors de l'invite de configuration du PIN :",
    "protectedAccess": "Accès protégé : authentification admin requise pour les opérations sensibles.",
    "enterPin": "Entrez le PIN admin : ",
    "accessGranted": "Accès accordé.",
    "invalidPin": "❌ PIN invalide. Veuillez réessayer.",
    "weak_pin_warning": "⚠️  AVERTISSEMENT : Ce PIN semble être faible ou courant.",
    "weak_pin_suggestion": "💡 Envisagez d'utiliser un PIN plus robuste avec des chiffres variés.",
    "use_anyway_prompt": "Tapez \"yes\" pour l'utiliser quand même, ou appuyez sur Entrée pour choisir un autre PIN : ",
    "enter_new_pin": "Entrez un nouveau PIN admin (4-6 chiffres) : ",
    "confirm_pin": "Confirmez le PIN admin : ",
    "not_set": "Non défini",
    "pin_display_mask": "####"
  },
  "autorun": {
    "missingRequiredFile": "Fichier requis manquant : {file}",
    "runInitializationFirst": "Veuillez d'abord exécuter l'initialisation.",
    "initializationCheckPassed": "Contrôle d'initialisation réussi.",
    "runningStep": "Exécution de l'étape : {stepName}",
    "commandLabel": "Commande : {command}",
    "stepRunning": "L'étape '{stepName}' est en cours…",
    "stepCompletedWithTime": "L'étape '{stepName}' terminée en {duration} ms.",
    "stepCompleted": "L'étape '{stepName}' terminée.",
    "stepFailed": "L'étape '{stepName}' a échoué.",
    "errorLabel": "Erreur : {error}",
    "stepFailedWithError": "L'étape '{stepName}' a échoué avec l'erreur : {error}",
    "requiredStepFailed": "Étape requise échouée. Arrêt du workflow.",
    "optionalStepFailed": "Étape facultative échouée. Poursuite du workflow.",
    "startingAutoRunWorkflow": "Démarrage du workflow Auto-Run…",
    "workflowIncludesSteps": "Le workflow comprend {count} étapes :",
    "stepRequired": "(Requise)",
    "stepOptional": "(Facultative)",
    "startingExecution": "Démarrage de l'exécution…",
    "workflowStopped": "Workflow arrêté.",
    "workflowCompleted": "Workflow terminé.",
    "pressEnterToContinue": "Appuyez sur Entrée pour continuer…",
    "runningSelectedSteps": "Exécution des étapes sélectionnées…",
    "invalidStepNumber": "Numéro d'étape invalide : {stepNum}",
    "executionReport": "Rapport d'exécution :",
    "successfulSteps": "Étapes réussies : {count}",
    "failedSteps": "Étapes échouées : {count}",
    "requiredFailedSteps": "Étapes requises échouées : {count}",
    "stepDetails": "Détails de l'étape :",
    "errorDetails": "Erreur : {error}",
    "reportSavedTo": "Rapport enregistré dans : {path}",
    "overallStatusSuccess": "SUCCÈS",
    "overallStatusFailed": "ÉCHEC",
    "overallStatus": "Statut global : {status}",
    "customSettingsConfiguration": "Configuration des paramètres personnalisés",
    "pressEnterForDefaults": "Appuyez sur Entrée pour utiliser les paramètres par défaut pour toute invite.",
    "sourceDirPrompt": "Entrez le répertoire source (par défaut : {default}) : ",
    "sourceLangPrompt": "Entrez la langue source (par défaut : {default}) : ",
    "targetLangsPrompt": "Entrez les langues cibles (séparées par des virgules, par défaut : {default}) : ",
    "translationMarkerPrompt": "Entrez le marqueur de traduction (par défaut : {default}) : ",
    "outputDirPrompt": "Entrez le répertoire de sortie pour les rapports (par défaut : {default}) : ",
    "settingsUpdatedSuccessfully": "Paramètres mis à jour avec succès !",
    "errorConfiguringSettings": "Erreur lors de la configuration des paramètres : {error}",
    "autoRunScriptTitle": "Script Auto-Run",
    "usageTitle": "Utilisation :",
    "runAllSteps": "node i18ntk-autorun.js --all - Exécuter toutes les étapes définies dans i18ntk-config.json",
    "configureSettingsFirst": "node i18ntk-autorun.js --config - Configurer les paramètres du workflow",
    "runSpecificSteps": "node i18ntk-autorun.js --steps <numéro_étapes> - Exécuter des étapes spécifiques (ex. --steps 1,3,5)",
    "showHelp": "node i18ntk-autorun.js --help - Afficher cette aide",
    "availableSteps": "Étapes disponibles :",
    "examplesTitle": "Exemples :",
    "configExample": "node i18ntk-autorun.js --config",
    "stepsExample1": "node i18ntk-autorun.js --steps 1,2,3",
    "stepsExample2": "node i18ntk-autorun.js --all",
    "configurationComplete": "Configuration terminée.",
    "runAutoRunCommand": "Vous pouvez maintenant exécuter la commande auto-run.",
    "configurationFailed": "Configuration échouée : {error}",
    "noValidStepNumbers": "Aucun numéro d'étape valide fourni.",
    "autoRunFailed": "Exécution auto-run échouée : {error}",
    "stepInitializeProject": "Initialiser le projet",
    "stepAnalyzeTranslations": "Analyser les traductions",
    "stepValidateTranslations": "Valider les traductions",
    "stepCheckUsage": "Vérifier l'utilisation",
    "stepCompleteTranslations": "Compléter les traductions",
    "stepAnalyzeSizing": "Analyser le dimensionnement",
    "stepGenerateSummary": "Génération du rapport résumé…",
    "stepCompletedIcon": "✅",
    "stepCompletedWithIcon": "✅ Étape '{stepName}' terminée.",
    "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Exécution de l'étape '{stepName}'…",
    "stepFailedIcon": "❌",
    "translationLoadWarning": "Avertissement : impossible de charger les traductions {lang}",
    "configReadError": "Erreur de lecture de {file}",
    "separator": "=================================================="
  },
  "debug": {
    "title": "🔧 Outils de débogage",
    "separator": "============================================================",
    "mainDebuggerSystemDiagnostics": "1. Diagnostics système",
    "_consoleTranslationsCheck": "// 2. Vérification des traductions console",
    "_exportMissingKeys": "// 3. Exporter les clés de traduction manquantes",
    "_replaceHardcodedConsole": "// 4. Remplacer les chaînes console en dur",
    "_consoleKeyChecker": "// 5. Vérificateur de clés console",
    "debugLogs": "2. Journaux de débogage",
    "backToMainMenu": "0. Retour au menu principal",
    "selectOption": "Sélectionnez un outil de débogage : ",
    "runningDebugTool": "Exécution de {displayName}…",
    "debugToolNotFound": "❌ Outil de débogage introuvable : {toolName}",
    "recentDebugLogs": "📄 Journaux de débogage récents",
    "noDebugLogsFound": "❌ Aucun journal de débogage trouvé.",
    "debugLogsDirectoryNotFound": "❌ Répertoire des journaux de débogage introuvable.",
    "selectLogPrompt": "Sélectionnez le fichier journal à afficher (1-{count}) : ",
    "invalidChoiceSelectRange": "Choix invalide. Veuillez sélectionner dans la plage disponible.",
    "contentOf": "📄 Contenu de {filename} :",
    "pressEnterToContinue": "Appuyez sur Entrée pour continuer…"
  },
  "detect_language_mismatches": {
    "tool_title": "🔍 Outil de détection des incohérences linguistiques",
    "separator": "=====================================\n",
    "analyzing_file": "📄 Analyse de {language}.json…",
    "error_analyzing_file": "❌ Erreur lors de l’analyse de {filename} : {errorMessage}",
    "results_title": "📊 RÉSULTATS DE DÉTECTION DES INCOHÉRENCES",
    "results_separator": "========================================\n",
    "summary_title": "📋 RÉCAPITULATIF :",
    "total_files_analyzed": "   Fichiers analysés au total : {totalFiles}",
    "files_with_mismatches": "   Fichiers avec incohérences : {filesWithMismatches}",
    "total_mismatches_found": "   Incohérences totales trouvées : {totalMismatches}\n",
    "no_mismatches_found": "✅ Aucune incohérence linguistique trouvée ! Toutes les traductions semblent correctes.\n",
    "detailed_results_title": "🔍 RÉSULTATS DÉTAILLÉS :\n",
    "file_mismatch_header": "📄 {filename} ({language})",
    "mismatches_count": "   Incohérences trouvées : {count}\n",
    "mismatch_details": "   {index}. Clé : {key}",
    "mismatch_value": "      Valeur : « {value} »",
    "mismatch_issue": "      Problème : {description}",
    "recommendations_title": "💡 RECOMMANDATIONS :\n",
    "recommendation_1": "1. Vérifiez et traduisez toutes les entrées marquées [TRANSLATE]",
    "recommendation_2": "2. Remplacez les préfixes de langue (ex. [DE], [FR]) par de vraies traductions",
    "recommendation_3": "3. Traduisez le texte en anglais vers la langue cible appropriée",
    "recommendation_4": "4. Utilisez des équivalents natifs pour tout texte destiné à l’utilisateur",
    "recommendation_5": "5. Relancez cet outil après corrections pour vérifier les fixes\n",
    "detailed_report_saved": "📄 Rapport détaillé enregistré : {reportPath}\n",
    "error_saving_report": "❌ Erreur lors de la sauvegarde du rapport : {errorMessage}\n",
    "auto_fix_mode": "🔧 Mode correction automatique {dryRun}",
    "auto_fix_separator": "=====================================\n",
    "fixed_file": "✅ Fichier corrigé : {filename}",
    "auto_fix_summary_title": "\n📊 Récapitulatif des corrections :",
    "total_fixes_applied": "   Nombre total de corrections appliquées : {count}",
    "preview_fixes_title": "\n🔍 Aperçu des corrections :",
    "fix_details": "   {file} : {key}\n     Ancien : « {old} »\n     Nouveau : « {new} »\n",
    "more_fixes": "   … et {count} corrections supplémentaires\n",
    "run_with_apply_fixes": "💡 Exécutez avec --apply pour appliquer ces corrections\n",
    "error_general": "❌ Erreur :",
    "mainDebuggerSystemDiagnostics": "Diagnostics système principal",
    "exportMissingKeys": "Exporter les clés manquantes",
    "replaceHardcodedConsole": "Remplacer console en dur",
    "consoleKeyChecker": "Vérificateur de clés console",
    "debugLogs": "Journaux de débogage",
    "backToMainMenu": "Retour au menu principal",
    "invalidChoiceSelectRange": "❌ Choix invalide. Sélectionnez un nombre du menu affiché.",
    "runningDebugTool": "Exécution de l’outil de débogage : {displayName}",
    "debugToolNotFound": "Outil de débogage « {toolName} » introuvable.",
    "recentDebugLogs": "Journaux de débogage récents",
    "noDebugLogsFound": "Aucun journal de débogage trouvé.",
    "logEntry": "Entrée journal : {timestamp} – {message}",
    "debugLogsDirectoryNotFound": "Répertoire des journaux de débogage introuvable."
  },
  "help": {
    "title": "📊 AIDE À LA GESTION I18N\n\n",
    "usage": "Utilisation : node i18ntk-manage.js [options]\n",
    "interactiveMode": "\n💡 Utilisez : node i18ntk-manage.js --command=<commande> pour exécuter directement\n",
    "showHelp": "\n📖 Utilisez : node i18ntk-manage.js --help pour les commandes disponibles\n",
    "availableCommands": "\n📖 Commandes disponibles :\n",
    "initProject": "🚀 Initialiser de nouvelles langues",
    "analyzeTranslations": "🔍 Analyser les traductions",
    "validateTranslations": "✅ Valider les traductions",
    "checkUsage": "📊 Vérifier l’utilisation des clés",
    "initCommand": "  init      - Initialiser de nouvelles langues",
    "analyzeCommand": "  analyze   - Analyser les traductions",
    "validateCommand": "  validate  - Valider les traductions",
    "usageCommand": "  usage     - Vérifier l’utilisation des clés",
    "sizingCommand": "  sizing    - Analyser le dimensionnement",
    "completeCommand": "  complete  - Compléter les traductions (100 % de couverture)",
    "summaryCommand": "  summary   - Afficher le statut du projet",
    "debugCommand": "  debug     - Déboguer les problèmes de traduction",
    "menu": {
      "title": "\n🌐 MENU DE GESTION I18N\n",
      "description": "Menu interactif pour la gestion de l’internationalisation\n",
      "exit": "\n🚪 Quitter"
    },
    "commands": {
      "init": "\n  init      - Initialiser de nouvelles langues",
      "analyze": "  analyze   - Analyser les traductions",
      "validate": "  validate  - Valider les traductions",
      "usage": "  usage     - Vérifier l’utilisation des clés",
      "sizing": "  sizing    - Analyser le dimensionnement",
      "complete": "  complete  - Compléter les traductions (100 % de couverture)",
      "summary": "  summary   - Afficher le statut du projet",
      "debug": "  debug     - Déboguer les problèmes de traduction"
    },
    "options": {
      "sourceDir": "\n  --source-dir <dir>     Répertoire source à analyser",
      "output": "  --output <file>        Fichier de sortie pour le rapport",
      "verbose": "  --verbose, -v           Afficher les détails",
      "keepReports": "  --keep-reports          Conserver les rapports existants",
      "deleteReports": "  --delete-reports        Supprimer les rapports existants",
      "help": "  --help, -h              Afficher cette aide"
    },
    "examples": {
      "title": "\nExemples :\n",
      "example1": "  node i18ntk-manage.js",
      "example2": "  node i18ntk-manage.js --source-dir ./locales",
      "example3": "  node i18ntk-manage.js --output summary-report.txt",
      "example4": "  node i18ntk-manage.js --verbose",
      "example5": "  node i18ntk-manage.js --source-dir ./locales --output report.json"
    },
    "features": {
      "initProject": "🚀 Initialiser de nouvelles langues",
      "analyzeTranslations": "🔍 Analyser les traductions",
      "validateTranslations": "✅ Valider les traductions",
      "checkUsage": "📊 Vérifier l’utilisation des clés",
      "completeTranslations": "🎯 Compléter les traductions (100 % de couverture)",
      "showSizing": "📏 Analyser le dimensionnement",
      "runWorkflow": "🔄 Exécuter le workflow complet",
      "showStatus": "📋 Afficher le statut du projet",
      "deleteReports": "🗑️  Supprimer tous les rapports",
      "changeLanguage": "🌍 Changer la langue de l’interface",
      "settings": "⚙️  Paramètres",
      "showHelp": "❓ Aide",
      "debugTools": "🔧 Outils de débogage"
    },
    "messages": {
      "selectOption": "Sélectionnez une option :",
      "invalidOption": "❌ Option invalide. Veuillez réessayer.",
      "operationCompleted": "✅ Opération terminée avec succès !",
      "pressEnter": "Appuyez sur Entrée pour continuer…",
      "goodbye": "👋 Au revoir !",
      "unknownCommand": "Commande inconnue : {{command}}",
      "nonInteractive": "⚠️ Mode non interactif détecté. Menu affiché à titre indicatif."
    },
    "i18n_helper": {
      "translation_file_not_found": "Fichier de traduction introuvable : {translationFile}",
      "error_loading_translations": "Erreur de chargement des traductions : {errorMessage}",
      "translation_not_found": "Traduction introuvable pour la clé : {key}",
      "translation_key_not_string": "La clé de traduction ne renvoie pas une chaîne : {key}",
      "error_reading_locales_directory": "Erreur de lecture du répertoire locales : {errorMessage}"
    }
  },
  "init": {
    "initializationTitle": "🚀 Boîte à outils de gestion i18n – Initialisation du projet",
    "sourceDirectoryLabel": "📁 Répertoire source : {dir}",
    "sourceLanguageLabel": "🌍 Langue source : {language}",
    "detectedI18nFrameworks": "🔍 Framework(s) i18n détecté(s) : {frameworks}",
    "existingDirectoriesFound": "📁 Répertoires de traduction existants trouvés :",
    "useExistingDirectoryPrompt": "Voulez-vous utiliser le répertoire existant ? (y/n)",
    "autoDetectedI18nDirectory": "📂 Répertoire i18n auto-détecté : {directory}",
    "initializingProject": "⚙️  Initialisation de la configuration du projet…",
    "createdSampleTranslationFile": "✅ Fichier de traduction d’exemple créé : {file}",
    "languageSelectionTitle": "🌐 Configuration des langues",
    "available": "Disponible",
    "defaultLanguages": "📝 Langues par défaut : {languages}",
    "enterLanguageCodes": "🎯 Saisissez les codes des langues cibles (séparés par des virgules, ex. de, es, fr, ru) :",
    "targetLanguages": "🌍 Langues cibles",
    "foundSourceFiles": "📄 {count} fichiers source trouvés pour analyse",
    "processingLanguage": "🔄 Traitement de la langue : {language}",
    "fileProcessingResult": "✅ {file} traité : {translated}/{total} clés ({percentage} %)",
    "overallProgress": "📊 Progression globale : {translated}/{total} clés traitées ({percentage} %)",
    "initializationSummaryTitle": "📋 Récapitulatif de l’initialisation",
    "languageSummary": "{icon} {name} ({code}) : {percentage} % complété",
    "languageFiles": "   📄 Fichiers : {count}",
    "languageKeys": "   🔤 Clés : {translated}/{total}",
    "languageMissing": "   ⚠️ Manquantes : {count}",
    "initializationCompletedSuccessfully": "🎉 Initialisation du projet terminée avec succès !",
    "nextStepsTitle": "🚀 Étapes suivantes",
    "nextStep1": "1. Vérifiez les fichiers de traduction générés dans votre répertoire locales/",
    "nextStep2": "2. Ajoutez les traductions pour chaque langue cible",
    "nextStep3": "3. Exécutez à nouveau « npm run i18ntk » pour valider les traductions",
    "warnings.noPackageJson": "Aucun package.json trouvé. Impossible de détecter le framework i18n.",
    "errorsNoFramework": "Aucun framework i18n détecté. Veuillez en installer un ou en spécifier un manuellement.",
    "suggestions": {
      "noFramework": "Aucun framework i18n détecté. Envisagez d'utiliser l'un des suivants :",
      "installFramework": "Pour installer un framework, exécutez : npm install <nom-du-paquet>"
    },
    "frameworks": {
      "react": "- React i18next (react-i18next)",
      "vue": "- Vue i18n (vue-i18n)",
      "i18next": "- i18next (i18next)",
      "nuxt": "- Nuxt i18n (@nuxtjs/i18n)",
      "svelte": "- Svelte i18n (svelte-i18n)"
    },
    "continueWithoutI18nPrompt": "Aucun framework i18n détecté. Voulez-vous continuer sans ? (o/N) : ",
    "detectedI18nFramework": "Framework i18n détecté : {frameworks}",
    "existingDirectoryItem": "  {index}. {location}",
    "usingExistingStructure": "Utilisation de la structure existante : {dir}",
    "creatingSourceDirectory": "Création du répertoire source : {dir}",
    "creatingSourceLanguageDirectory": "Création du répertoire de langue source : {dir}",
    "errors": {
      "sourceDirectoryNotFound": "Répertoire source introuvable : {dir}",
      "sourceLanguageDirectoryNotFound": "Répertoire de langue source introuvable : {dir}",
      "noJsonFilesInSourceDirectory": "Aucun fichier JSON trouvé dans le répertoire source : {dir}",
      "invalidFilePathDetected": "Chemin de fichier invalide détecté",
      "initializationFailed": "Échec de l'initialisation : {error}"
    },
    "processingFile": "Traitement de {file} pour {language}...",
    "fileAlreadyExistsMerging": "Le fichier {file} existe déjà. Fusion des nouvelles clés.",
    "createdNewFile": "Nouveau fichier créé : {file}",
    "updatedFile": "Fichier mis à jour : {file}",
    "skippingExcludedFile": "Ignorer {file} pour {language} car il est exclu."
  },
  "language": {
    "title": "🌍 Changer la langue",
    "separator": "============================================================",
    "current": "Langue actuelle : {language}",
    "available": "Langues disponibles :",
    "languageOption": "{index}. {displayName}{current}",
    "backToMainMenu": "Retour au menu principal",
    "prompt": "Sélectionnez une langue (0-8) :",
    "cancelled": "Changement de langue annulé.",
    "invalid": "Choix invalide. Veuillez réessayer.",
    "changed": "Langue changée en : {language}",
    "pressEnterToContinue": "Appuyez sur Entrée pour continuer…"
  },
  "maintainLanguagePurity": {
    "workflow_title": "🚀 Flux de maintenance de la pureté linguistique",
    "step1_title": "📊 ÉTAPE 1 : Évaluation initiale de la pureté linguistique",
    "step2_title": "\n🔧 ÉTAPE 2 : Détection et correction automatique des incohérences",
    "step3_title": "\n🌐 ÉTAPE 3 : Application des traductions automatiques",
    "step4_title": "\n✅ ÉTAPE 4 : Évaluation finale de la pureté linguistique",
    "workflow_error": "❌ Erreur du flux : {errorMessage}",
    "running_initial_validation": "Exécution de la validation initiale de la pureté linguistique…",
    "initial_assessment_complete": "✅ Évaluation initiale terminée : {count} violation(s) trouvée(s)\n",
    "initial_assessment_warnings": "⚠️ Évaluation initiale terminée avec des avertissements\n",
    "detecting_fixing_mismatches": "Détection et correction des incohérences…",
    "detection_complete_applying_fixes": "Détection terminée. Application des corrections automatiques…",
    "mismatch_fixes_complete": "✅ Corrections terminées : {count} correction(s) appliquée(s)\n",
    "mismatch_fixes_warnings": "⚠️ Corrections terminées avec des avertissements\n",
    "applying_automatic_translations": "Application des traductions automatiques…",
    "translation_preview_complete": "Aperçu des traductions terminé. Application en cours…"
  },
  "menu": {
    "title": "🌐 MENU DE GESTION I18N",
    "separator": "============================================================",
    "options": {
      "init": "🚀 Initialiser de nouvelles langues",
      "analyze": "🔍 Analyser les traductions",
      "validate": "✅ Valider les traductions",
      "usage": "📊 Vérifier l’utilisation des clés",
      "complete": "🎯 Compléter les traductions (100 % de couverture)",
      "sizing": "📏 Analyser le dimensionnement",
      "workflow": "🔄 Exécuter le flux complet",
      "status": "📋 Afficher le statut du projet",
      "delete": "🗑️ Supprimer tous les rapports",
      "language": "🌍 Changer la langue de l’interface",
      "settings": "⚙️ Paramètres",
      "help": "❓ Aide",
      "debug": "🔧 Outils de débogage",
      "exit": "🚪 Quitter"
    },
    "update": "📦 Mettre à jour le paquet",
    "goodbye": "👋 Au revoir !",
    "invalidChoice": "❌ Choix invalide. Veuillez sélectionner 0-13.",
    "returning": "🔄 Retour au menu principal…",
    "invalidOption": "❌ Option invalide. Veuillez réessayer.",
    "nonInteractiveModeWarning": "⚠️ Mode non interactif détecté. Menu affiché à titre indicatif.",
    "useDirectExecution": "💡 Utilisez : node main/i18ntk-manage.js --command=<commande> pour exécuter directement.",
    "useHelpForCommands": "📖 Utilisez : node main/i18ntk-manage.js --help pour les commandes disponibles.",
    "returnToMainMenu": "Appuyez sur Entrée pour revenir au menu principal.",
    "pressEnterToContinue": "Appuyez sur Entrée pour continuer…",
    "selectOptionPrompt": "Sélectionnez une option :",
    "selectDebugToolPrompt": "Sélectionnez un outil de débogage :",
    "selectLogPrompt": "Sélectionnez un fichier journal (1-{count}) :",
    "autoDetectedI18nDirectory": "📂 Répertoire i18n auto-détecté : {directory}",
    "executingCommand": "Exécution de la commande : {command}",
    "unknownCommand": "Commande inconnue : {command}",
    "debugTools": {
      "1": "Analyse des fichiers journaux",
      "2": "Analyse de l’utilisation des clés de traduction",
      "3": "Analyse de la complétude des traductions",
      "4": "Analyse du format des traductions",
      "5": "Analyse du type de traduction",
      "6": "Analyse de la structure des traductions"
    },
    "native_translations": {
      "exact_translation_found": "  ✅ {keyPath} : {value}",
      "no_exact_translation": "  ⚠️ Pas de traduction exacte pour '{keyPath}', clés similaires trouvées :",
      "similar_key": "    - {key} ({similarity}% de correspondance)",
      "processing_language_files": "🔄 Traitement de {count} fichiers de langue…\n",
      "file_not_found": "⚠️ Fichier introuvable : {file}",
      "processing_translations": "🌍 Traitement des traductions {code}…",
      "backup_created": "📋 Sauvegarde créée : {filename}",
      "error_parsing_json": "❌ Erreur d’analyse de {code}.json : {errorMessage}",
      "existing_keys_found": "📊 {code} : {count} clés existantes trouvées",
      "error_writing_json": "❌ Erreur d’écriture de {code}.json : {errorMessage}",
      "translations_replaced": "📊 {code} : {count} traductions remplacées",
      "translation_replacement_complete": "\n✅ Remplacement des traductions terminé !",
      "total_replacements": "📊 Remplacements totaux : {count}",
      "dry_run_mode": "\n⚠️ MODE DRY RUN – Aucun fichier n’a été modifié",
      "tool_title": "🌍 Remplaceur de traductions natives v1.5.3",
      "tool_separator": "======================================\n",
      "dry_run_warning": "⚠️ Exécution en mode DRY RUN – aucun fichier ne sera modifié\n",
      "error_during_replacement": "❌ Erreur lors du remplacement des traductions :"
    }
  },
  "operations": {
    "completed": "✅ Opération terminée avec succès !",
    "deleteReportsTitle": "🗑️ Supprimer rapports et journaux",
    "scanningForFiles": "🔍 Recherche des fichiers à supprimer…",
    "noFilesFoundToDelete": "✅ Aucun fichier à supprimer.",
    "availableDirectories": "📁 Répertoires disponibles :",
    "allDirectories": "Tous les répertoires",
    "cancelOption": "Annuler",
    "cancelReportOption": "Annuler / Retour au menu",
    "invalidSelection": "❌ Sélection invalide.",
    "foundFilesInSelectedDirectories": "📊 {count} fichier(s) trouvé(s) dans les répertoires sélectionnés :",
    "deletionOptions": "🗑️ Options de suppression :",
    "deleteAllFiles": "Supprimer tous les fichiers",
    "keepLast3Files": "Conserver les 3 derniers fichiers (par date)",
    "keepLast5Files": "Conserver les 5 derniers fichiers (par date)",
    "noFilesToDelete": "✅ Aucun fichier à supprimer.",
    "filesToDeleteCount": "📋 Fichiers à supprimer : {count}",
    "filesToKeepCount": "📋 Fichiers à conserver : {count}",
    "confirmDeletion": "⚠️ Êtes-vous sûr de vouloir supprimer ces fichiers ? (y/N) :",
    "deletedFile": "✅ Supprimé : {filename}",
    "failedToDeleteFile": "❌ Échec de la suppression de {filename} : {error}",
    "cancelled": "❌ Opération annulée.",
    "init": {
      "title": "🚀 Initialiser de nouvelles langues"
    },
    "usage": {
      "title": "📊 Vérifier l’utilisation des clés"
    },
    "analyze": {
      "title": "🔍 Analyser les traductions"
    },
    "validate": {
      "title": "✅ Valider les traductions"
    },
    "settings": {
      "title": "⚙️  Gestion des paramètres",
      "separator": "============================================================"
    },
    "complete": {
      "deletingOldReport": "🗑️ Suppression de l’ancien rapport d’utilisation pour une nouvelle analyse",
      "generatingFreshAnalysis": "🔄 Génération d’une nouvelle analyse d’utilisation…",
      "couldNotGenerate": "⚠️ Impossible de générer l’analyse d’utilisation. Utilisation des clés manquantes courantes.",
      "reportNotFound": "⚠️ Rapport d’utilisation introuvable. Génération d’une nouvelle analyse…",
      "foundMissingKeys": "🔍 {count} clé(s) manquante(s) trouvée(s) lors de l’analyse d’utilisation",
      "couldNotParse": "⚠️ Impossible d’analyser le rapport d’utilisation. Utilisation des clés manquantes courantes.",
      "title": "🎯 COMPLÉTION DES TRADUCTIONS",
      "separator": "============================================================",
      "sourceDir": "📁 Répertoire source : {sourceDir}",
      "sourceLanguage": "🔤 Langue source : {sourceLanguage}",
      "dryRunMode": "🧪 MODE DRY RUN – Aucun fichier ne sera modifié",
      "languages": "🎯 Langues cibles : {languages}",
      "addingMissingKeys": "➕ Ajout des clés manquantes aux fichiers de traduction…",
      "processing": "🔄 Traitement de {language}…",
      "addedKeys": "✅ {count} clé(s) ajoutée(s)",
      "changeDetails": "📝 {file} : {key}",
      "noChangesNeeded": "✅ Aucun changement nécessaire pour {language}",
      "summaryTitle": "📊 RÉCAPITULATIF DE LA COMPLÉTION",
      "totalChanges": "📝 Modifications totales : {totalChanges}",
      "languagesProcessed": "🌐 Langues traitées : {languagesProcessed}",
      "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
      "nextStepsTitle": "📋 ÉTAPES SUIVANTES",
      "nextStep1": "1. Exécutez l’analyse d’utilisation :",
      "nextStep2": "2. Validez les traductions :",
      "nextStep3": "3. Analysez la complétude :",
      "allKeysAvailable": "🎉 Toutes les clés de traduction sont désormais disponibles !",
      "runWithoutDryRun": "💡 Exécutez sans --dry-run pour appliquer les modifications",
      "pressEnterToContinue": "Appuyez sur Entrée pour continuer…"
    },
    "updatePackage": {
      "title": "📦 Mettre à jour le paquet i18n-toolkit",
      "description": "Cela mettra à jour le paquet i18n-toolkit vers la dernière version disponible sur npm.",
      "command": "Commande à exécuter",
      "confirm": "Êtes-vous sûr de vouloir procéder à la mise à jour ? (y/N) :",
      "updating": "Mise à jour du paquet… Cela peut prendre un moment.",
      "success": "✅ i18n-toolkit mis à jour avec succès !",
      "error": "❌ Échec de la mise à jour de i18n-toolkit",
      "cancelled": "❌ Mise à jour annulée."
    }
  },
  "security": {
    "pathValidationFailed": "échec_validation_chemin",
    "invalidInputType": "type_entrée_invalide",
    "pathTraversalAttempt": "tentative_traversée_chemin",
    "pathValidated": "✅ Chemin validé avec succès",
    "pathValidationError": "erreur_validation_chemin",
    "fileTooLarge": "Sécurité : Fichier trop volumineux : {filePath}",
    "fileReadError": "Sécurité : Erreur de lecture du fichier : {errorMessage}",
    "contentTooLargeForFile": "Sécurité : Contenu trop volumineux pour le fichier : {filePath}",
    "fileWriteError": "Sécurité : Erreur d’écriture du fichier : {errorMessage}",
    "jsonStringTooLarge": "Sécurité : Chaîne JSON trop volumineuse",
    "jsonParseError": "Sécurité : Erreur d’analyse JSON : {errorMessage}",
    "inputContainsDisallowedCharacters": "Sécurité : Entrée contient des caractères interdits",
    "unknownCommandArgument": "Sécurité : Argument de commande inconnu : {key}",
    "unknown_command_argument": "Sécurité : Argument de commande inconnu : {key}",
    "unknownConfigKey": "Sécurité : Clé de configuration inconnue : {key}",
    "unknown_config_key": "Sécurité : Clé de configuration inconnue : {key}",
    "securityAlert": "[ALERTE SÉCURITÉ] {timestamp} : {event}",
    "contentTooLarge": "Sécurité : Contenu trop volumineux pour le fichier : {validatedPath}",
    "inputDisallowedCharacters": "Sécurité : Entrée contient des caractères interdits",
    "unknownCommandArg": "Argument de commande inconnu",
    "logMessage": "[SÉCURITÉ {level}] {timestamp} : {event}",
    "alertMessage": "[ALERTE SÉCURITÉ] {timestamp} : {event}",
    "securityWarning": "[AVERTISSEMENT SÉCURITÉ] {timestamp} : {event}",
    "json_parse_error": "Sécurité : Erreur d’analyse JSON : {errorMessage}"
  },
  "settings-cli": {
    "settings": {
      "mainMenu": {
        "title": "Menu principal :",
        "uiSettings": "Paramètres UI",
        "uiSettingsDesc": "Langue, thème et options d’interface",
        "directorySettings": "Paramètres de répertoires",
        "directorySettingsDesc": "Chemins des répertoires source et de sortie",
        "scriptDirectorySettings": "Paramètres du répertoire des scripts",
        "scriptDirectorySettingsDesc": "Chemins des répertoires pour chaque opération de script",
        "processingSettings": "Paramètres de traitement",
        "processingSettingsDesc": "Taille des lots, concurrence et performances",
        "advancedSettings": "Paramètres avancés",
        "advancedSettingsDesc": "Validation, journalisation et options expertes",
        "viewAllSettings": "Afficher tous les paramètres",
        "viewAllSettingsDesc": "Afficher la configuration actuelle",
        "importExport": "Importer/Exporter",
        "importExportDesc": "Sauvegarder et restaurer les paramètres",
        "resetToDefaults": "Réinitialiser par défaut",
        "resetToDefaultsDesc": "Restaurer les paramètres d’usine",
        "reportBug": "Signaler un bug",
        "reportBugDesc": "Soumettre un rapport de problème sur GitHub",
        "saveChanges": "Enregistrer les modifications",
        "saveChangesDesc": "Enregistrer la configuration actuelle dans un fichier",
        "updatePackage": "Mettre à jour le paquet",
        "updatePackageDesc": "Mettre à jour le paquet i18n-toolkit via npm",
        "help": "Aide",
        "helpDesc": "Afficher des informations détaillées d’aide",
        "quit": "Quitter",
        "quitDesc": "Quitter les paramètres (avec invite d’enregistrement si nécessaire)",
        "unsavedChangesWarning": "⚠️  Vous avez des modifications non enregistrées",
        "saveChangesBeforeQuit": "Voulez-vous enregistrer les modifications avant de quitter ? (y/N) :",
        "selectOption": "Sélectionnez une option : ",
        "goodbyeMessage": "Merci d’avoir utilisé le gestionnaire de paramètres i18n !"
      },
      "goodbyeMessage": "Merci d’avoir utilisé le gestionnaire de paramètres i18n !",
      "relativePathHint": "Utilisez des chemins relatifs depuis ce répertoire (ex. : ./src/i18n/locales)",
      "currentDirectory": "Répertoire de projet actuel"
    },
    "settings_manager": {
      "error_loading_settings": "❌ Erreur lors du chargement des paramètres :",
      "error_saving_settings": "❌ Erreur lors de l’enregistrement des paramètres :",
      "error_setting_value": "❌ Erreur lors de la définition de la valeur :",
      "missing_required_setting": "❌ Paramètre requis manquant : {prop}",
      "invalid_language": "❌ Langue invalide : {language}",
      "invalid_source_language": "❌ Langue source invalide : {sourceLanguage}",
      "default_languages_must_be_array": "❌ defaultLanguages doit être un tableau",
      "invalid_date_format": "❌ Format de date invalide : {dateFormat}. Formats valides : {validFormats}",
      "invalid_time_format": "❌ Format d’heure invalide : {timeFormat}. Formats valides : {validFormats}",
      "notifications_types_must_be_object": "❌ notifications.types doit être un objet",
      "exclude_files_must_be_array": "❌ excludeFiles doit être un tableau",
      "exclude_dirs_must_be_array": "❌ excludeDirs doit être un tableau",
      "include_extensions_must_be_array": "❌ includeExtensions doit être un tableau",
      "invalid_batch_size": "❌ Taille de lot invalide. Doit être un nombre positif",
      "invalid_max_concurrent_files": "❌ Nombre max de fichiers concurrents invalide. Doit être un nombre positif",
      "invalid_sizing_threshold": "❌ Seuil de dimensionnement invalide. Doit être un nombre positif",
      "invalid_timeout": "❌ Délai d’attente invalide. Doit être au moins 1000 ms",
      "invalid_sizing_format": "❌ Format de dimensionnement invalide : {sizingFormat}. Formats valides : {validFormats}",
      "error_validating_settings": "❌ Erreur de validation des paramètres :",
      "backup_created": "📋 Sauvegarde créée : {backupPath}",
      "error_creating_backup": "❌ Erreur lors de la création de la sauvegarde :",
      "language_not_supported": "❌ Langue '{language}' non prise en charge. Disponibles : {availableLanguages}",
      "ui_language_set": "🌍 Langue de l’interface définie sur : {language}"
    }
  },
  "settings": {
    "title": "⚙️ Gestion des paramètres",
    "separator": "============================================================",
    "goodbyeMessage": "Merci d’avoir utilisé le gestionnaire de paramètres i18ntk !",
    "relativePathHint": "Utilisez des chemins relatifs depuis ce répertoire (ex. : ./src/i18n/locales)",
    "currentDirectory": "Répertoire de projet actuel",
    "pin": "PIN :",
    "mainMenu": {
      "title": "Menu principal :",
      "uiSettings": "Paramètres UI",
      "uiSettingsDesc": "Langue, thème et options d’interface",
      "directorySettings": "Paramètres des répertoires",
      "directorySettingsDesc": "Chemins des répertoires source et de sortie",
      "processingSettings": "Paramètres de traitement",
      "processingSettingsDesc": "Taille des lots, concurrence et performances",
      "advancedSettings": "Paramètres avancés",
      "advancedSettingsDesc": "Validation, journalisation et options expertes",
      "viewAllSettings": "Afficher tous les paramètres",
      "viewAllSettingsDesc": "Afficher la configuration actuelle",
      "importExport": "Importer/Exporter",
      "updatePackage": "Mettre à jour le paquet",
      "updatePackageDesc": "Mettre à jour le paquet i18n-toolkit via npm",
      "importExportDesc": "Sauvegarder et restaurer les paramètres",
      "resetToDefaults": "Réinitialiser aux valeurs par défaut",
      "resetToDefaultsDesc": "Restaurer les paramètres d’usine",
      "reportBug": "Signaler un bug",
      "reportBugDesc": "Soumettre un rapport d’incident sur GitHub",
      "saveChanges": "Enregistrer les modifications",
      "saveChangesDesc": "Enregistrer la configuration actuelle dans un fichier",
      "help": "Aide",
      "helpDesc": "Afficher des informations d’aide détaillées",
      "quit": "Quitter",
      "quitDesc": "Quitter les paramètres (avec invite d’enregistrement si nécessaire)",
      "unsavedChangesWarning": "⚠️  Vous avez des modifications non enregistrées",
      "saveChangesBeforeQuit": "Voulez-vous enregistrer les modifications avant de quitter ? (y/N) :",
      "selectOption": "Sélectionnez une option : ",
      "goodbyeMessage": "Merci d’avoir utilisé le gestionnaire de paramètres i18n !",
      "selectSettingPrompt": "Sélectionnez un paramètre à modifier (ou 'b' pour revenir) : ",
      "enterNewValue": "Entrez la nouvelle valeur : ",
      "updatedSuccessfully": "{setting} mis à jour avec succès !",
      "scriptDirectorySettings": "Paramètres des répertoires de scripts",
      "scriptDirectoryDesc": "Spécifiez des répertoires personnalisés pour chaque script",
      "scriptDirectorySettingsDesc": "Vous pouvez définir des répertoires personnalisés pour chaque script. Si non défini, les paramètres globaux seront utilisés.",
      "currentDirectory": "Répertoire de projet actuel",
      "securitySettings": "Paramètres de sécurité",
      "securitySettingsDesc": "PIN admin et autres options de sécurité"
    },
    "updatePackage": {
      "title": "Mettre à jour le paquet",
      "description": "Mettre à jour le paquet i18n-toolkit via npm",
      "command": "npm update i18ntk -g",
      "success": "Mise à jour terminée avec succès.",
      "failed": "Échec de la mise à jour.",
      "prompt": "Voulez-vous mettre à jour le paquet maintenant ? (y/N) : ",
      "promptDesc": "Remarque : cela mettra à jour le paquet i18ntk vers la dernière version.",
      "confirm": "y",
      "cancelled": "Mise à jour annulée."
    },
    "admin": {
      "selectOption": "Sélectionnez une option : ",
      "updateSuccess": "PIN admin mis à jour avec succès !",
      "updateFailed": "Échec de la mise à jour du PIN admin.",
      "protectionRemoved": "Protection PIN admin supprimée.",
      "configSuccess": "PIN admin configuré avec succès !",
      "configFailed": "Échec de la configuration du PIN admin.",
      "setupPinPrompt": "Voulez-vous configurer un PIN admin ? (y/N) : ",
      "pinUpdatedSuccess": "PIN admin mis à jour avec succès !",
      "pinUpdatedFailed": "Échec de la mise à jour du PIN admin.",
      "pinRemoved": "Protection PIN admin supprimée.",
      "pinConfiguredSuccess": "PIN admin configuré avec succès !",
      "pinConfiguredFailed": "Échec de la configuration du PIN admin.",
      "accessDenied": "❌ Accès refusé. Retour au menu.",
      "setupPin": "🔐 Configuration du PIN admin…",
      "setupFailed": "❌ Échec de la configuration du PIN admin. Paramètre non modifié.",
      "pinConfigured": "📌 PIN admin actuellement configuré.",
      "options": "Options :",
      "changePin": "1) Modifier le PIN existant",
      "removePin": "2) Supprimer la protection PIN",
      "cancel": "3) Annuler",
      "verifyCurrentPin": "🔐 Vérifiez d’abord le PIN actuel :",
      "settingNewPin": "🔄 Configuration du nouveau PIN…",
      "verifyToRemove": "🔐 Vérifiez le PIN actuel pour supprimer la protection :",
      "noPinConfigured": "🔓 Aucun PIN admin configuré.",
      "pinBenefits": "La configuration d’un PIN admin ajoutera de la sécurité pour :",
      "benefitSecurity": "• Modification des paramètres de sécurité",
      "benefitAdvanced": "• Modification des configurations avancées",
      "benefitDebug": "• Accès aux outils de débogage",
      "benefitReset": "• Réinitialisation des paramètres",
      "setupCancelled": "⏭️  Configuration du PIN admin annulée.",
      "operationCancelled": "❌ Opération annulée.",
      "startingSettings": "🎛️  Démarrage du CLI des paramètres…",
      "authRequired": "🔒 Authentification admin requise pour : {label}",
      "pinSetupTitle": "Configuration du PIN admin",
      "browserOpenFailed": "Impossible d’ouvrir automatiquement le navigateur.",
      "manualVisit": "Veuillez visiter manuellement : {url}",
      "browserOpened": "✅ Navigateur ouvert avec succès !"
    },
    "importExport": {
      "enterFilename": "Entrez le nom de fichier (ou appuyez sur Entrée pour défaut) : ",
      "exportSuccess": "Paramètres exportés vers {file}",
      "exportFailed": "Échec de l’export des paramètres : {error}",
      "importFilename": "Entrez le nom du fichier à importer : ",
      "fileNotFound": "Fichier introuvable.",
      "invalidFormat": "Format de fichier de paramètres invalide.",
      "confirmImport": "Ceci remplacera tous les paramètres actuels. Continuer ? (y/N) : ",
      "importSuccess": "Paramètres importés avec succès.",
      "importFailed": "Échec de l’import des paramètres : {error}",
      "backupSuccess": "Sauvegarde créée : {file}",
      "backupFailed": "Échec de la création de la sauvegarde : {error}"
    },
    "resetConfirm": "Êtes-vous sûr de vouloir continuer ? (y/N) : ",
    "resetSuccess": "Paramètres réinitialisés aux valeurs par défaut avec succès.",
    "resetFailed": "Échec de la réinitialisation des paramètres : {error}",
    "saveSuccess": "Paramètres enregistrés avec succès.",
    "saveFailed": "Échec de l’enregistrement des paramètres.",
    "pressEnter": "Appuyez sur Entrée pour continuer…",
    "initFailed": "Échec de l’initialisation des paramètres : {error}",
    "invalidValueFormat": "Format de valeur invalide.",
    "help": {
      "title": "Aide sur les paramètres",
      "navigationTitle": "Navigation",
      "navigation1": "1. Paramètres généraux – Configurer la langue UI, le thème et les préférences de base",
      "navigation2": "2. Paramètres des répertoires – Définir les répertoires source et de sortie pour les fichiers de traduction",
      "navigation3": "3. Paramètres de traitement – Configurer la taille des lots, la concurrence et les options de performance",
      "navigation4": "4. Paramètres avancés – Accéder à la validation, la journalisation et la configuration experte",
      "categoriesTitle": "Catégories de paramètres",
      "categoryUI": "• Paramètres UI : Langue de l’interface, thème couleur et préférences d’affichage",
      "categoryDirectory": "• Paramètres des répertoires : Emplacement des fichiers source et répertoires de rapports",
      "categoryProcessing": "• Paramètres de traitement : Traitement par lots, limites de fichiers et réglage des performances",
      "categoryAdvanced": "• Paramètres avancés : Mode débogage, journal d’audit et options de sécurité",
      "envVarsTitle": "Variables d’environnement",
      "envVar1": "• I18N_SOURCE_DIR : Remplace le répertoire source par défaut",
      "envVar2": "• I18N_OUTPUT_DIR : Remplace le répertoire de sortie par défaut",
      "envVar3": "• I18N_DEBUG : Active le mode débogage (true/false)",
      "cliUsageTitle": "Exemples d’utilisation CLI",
      "cliUsage1": "• npx i18ntk --settings : Ouvre le menu interactif des paramètres",
      "cliUsage2": "• npx i18ntk --settings --lang de : Ouvre les paramètres en allemand",
      "cliUsage3": "• npx i18ntk --reset-settings : Réinitialise tous les paramètres aux valeurs par défaut",
      "navigation": "Utilisez les touches numériques pour sélectionner, 'b' pour revenir",
      "editing": "Entrez de nouvelles valeurs ou appuyez sur Entrée pour conserver",
      "saving": "Utilisez 's' pour enregistrer avant de quitter",
      "reset": "Utilisez l’option 7 pour réinitialiser tous les paramètres"
    },
    "categories": {
      "uiSettings": "Paramètres UI",
      "directorySettings": "Paramètres des répertoires",
      "processingSettings": "Paramètres de traitement",
      "advancedSettings": "Paramètres avancés",
      "scriptDirectorySettings": "Paramètres des répertoires de scripts",
      "securitySettings": "Paramètres de sécurité"
    },
    "security": {
      "title": "🔐 Paramètres de sécurité",
      "description": "Configurer la protection PIN admin et les options de sécurité",
      "currentPin": "PIN actuel :",
      "pinConfigured": "✅ Configuré",
      "pinNotConfigured": "❌ Non configuré",
      "pinDisplay": "Affichage du PIN :",
      "menu": {
        "enableDisable": "1) Activer/Désactiver le PIN admin",
        "setupChange": "2) Configurer/Modifier le PIN admin",
        "sessionTimeout": "3) Délai d’expiration de session",
        "maxAttempts": "4) Tentatives max échouées",
        "lockoutDuration": "5) Durée de verrouillage",
        "back": "b) Retour au menu principal"
      },
      "prompts": {
        "enablePin": "Activer la protection PIN admin ? (y/N) : ",
        "disablePin": "Désactiver la protection PIN admin ? (y/N) : ",
        "enterTimeout": "Entrez le délai d’expiration de session (minutes) : ",
        "enterMaxAttempts": "Entrez le nombre max de tentatives échouées : ",
        "enterLockoutDuration": "Entrez la durée de verrouillage (minutes) : "
      },
      "messages": {
        "pinEnabled": "Protection PIN admin activée",
        "pinDisabled": "Protection PIN admin désactivée",
        "timeoutUpdated": "Délai d’expiration mis à jour à {minutes} minutes",
        "maxAttemptsUpdated": "Tentatives max échouées mis à jour à {attempts}",
        "lockoutDurationUpdated": "Durée de verrouillage mise à jour à {minutes} minutes"
      }
    },
    "fields": {
      "language": {
        "label": "Langue de l’interface",
        "description": "Langue de l’interface utilisateur",
        "current": "Actuelle : {value}",
        "help": "Sélectionnez votre langue d’interface préférée"
      },
      "scriptDirectories": {
        "analyzeLabel": "Répertoires du script d’analyse",
        "analyzeHelp": "Analyse des répertoires de scripts pour détection de problèmes",
        "completeLabel": "Répertoires du script de complétion",
        "initLabel": "Répertoires du script d’initialisation",
        "manageLabel": "Répertoires du script de gestion",
        "sizingLabel": "Répertoires du script de dimensionnement",
        "summaryLabel": "Répertoires du script de rapport résumé",
        "usageLabel": "Répertoires du script de rapport d’utilisation",
        "validateLabel": "Répertoires du script de validation"
      },
      "theme": {
        "label": "Thème de couleur",
        "description": "Préférence de thème UI",
        "current": "Actuel : {value}",
        "help": "Choisissez entre clair et sombre"
      },
      "dateFormat": {
        "label": "Format de date",
        "description": "Format d’affichage des dates",
        "current": "Actuel : {value}",
        "help": "Choisissez le format des dates dans les rapports"
      },
      "notifications": {
        "enabled": {
          "label": "Activer les notifications",
          "description": "Afficher des notifications de bureau",
          "current": "Actuel : {value}",
          "help": "Activer les notifications à la fin des opérations"
        }
      },
      "sourceDir": {
        "label": "Répertoire source",
        "description": "Répertoire contenant les fichiers de traduction",
        "current": "Actuel : {value}",
        "help": "Chemin vers le répertoire des fichiers de traduction source"
      },
      "sourceLanguage": {
        "label": "Langue source",
        "description": "Langue principale pour les traductions",
        "current": "Actuelle : {value}",
        "help": "Langue utilisée comme source pour les traductions"
      },
      "outputDir": {
        "label": "Répertoire de sortie",
        "description": "Répertoire pour les rapports générés",
        "current": "Actuel : {value}",
        "help": "Où seront enregistrés les rapports et fichiers traités"
      },
      "batchSize": {
        "label": "Taille du lot",
        "description": "Nombre d’éléments traités par lot",
        "current": "Actuel : {value}",
        "help": "Nombre de fichiers traités par lot"
      },
      "maxConcurrentFiles": {
        "label": "Fichiers max concurrents",
        "description": "Nombre max de fichiers traités simultanément",
        "current": "Actuel : {value}",
        "help": "Nombre max de fichiers à traiter en même temps"
      },
      "sizingThreshold": {
        "label": "Seuil de dimensionnement (%)",
        "description": "Seuil d’avertissement pour variation de taille",
        "current": "Actuel : {value}%",
        "help": "Pourcentage pour détecter les incohérences de taille"
      },
      "strictMode": {
        "label": "Mode de validation strict",
        "description": "Activer le mode de validation strict",
        "current": "Actuel : {value}",
        "help": "Activer la validation stricte des fichiers de traduction"
      },
      "enableAuditLog": {
        "label": "Activer le journal d’audit",
        "description": "Suivre toutes les modifications de traduction",
        "current": "Actuel : {value}",
        "help": "Journaliser tous les changements apportés aux fichiers de traduction"
      },
      "backupBeforeChanges": {
        "label": "Sauvegarde automatique",
        "description": "Créer des sauvegardes avant modifications",
        "current": "Actuel : {value}",
        "help": "Créer automatiquement des sauvegardes avant chaque modification"
      },
      "adminPinEnabled": {
        "label": "Protection PIN admin",
        "description": "Activer l’authentification PIN admin pour les paramètres sensibles",
        "current": "Actuel : {value}",
        "help": "Exiger un PIN admin pour modifier les paramètres de sécurité et avancés"
      },
      "sessionTimeout": {
        "label": "Délai d’expiration de session",
        "description": "Délai d’expiration de la session admin en minutes",
        "current": "Actuel : {value} minutes",
        "help": "Durée de validité d’une session admin avant ré-authentification"
      },
      "maxFailedAttempts": {
        "label": "Tentatives max échouées",
        "description": "Nombre max de tentatives PIN échouées avant verrouillage",
        "current": "Actuel : {value}",
        "help": "Nombre de tentatives échouées autorisées avant verrouillage temporaire"
      },
      "lockoutDuration": {
        "label": "Durée de verrouillage",
        "description": "Durée du verrouillage après tentatives échouées",
        "current": "Actuel : {value} minutes",
        "help": "Durée de verrouillage après dépassement du nombre max de tentatives"
      },
      "scriptDirectories_analyze": {
        "label": "Répertoires du script d’analyse",
        "description": "Répertoires personnalisés pour le script d’analyse",
        "current": "Actuel : {value}",
        "help": "Spécifiez le répertoire source pour le script d’analyse. Laisser vide pour le paramètre global."
      },
      "scriptDirectories_complete": {
        "label": "Répertoires du script de complétion",
        "description": "Répertoires personnalisés pour le script de complétion",
        "current": "Actuel : {value}",
        "help": "Spécifiez le répertoire source pour le script de complétion. Laisser vide pour le paramètre global."
      },
      "scriptDirectories_init": {
        "label": "Répertoires du script d’initialisation",
        "description": "Répertoires personnalisés pour le script d’initialisation",
        "current": "Actuel : {value}",
        "help": "Spécifiez le répertoire source pour le script d’initialisation. Laisser vide pour le paramètre global."
      },
      "scriptDirectories_manage": {
        "label": "Répertoires du script de gestion",
        "description": "Répertoires personnalisés pour le script de gestion",
        "current": "Actuel : {value}",
        "help": "Spécifiez le répertoire source pour le script de gestion. Laisser vide pour le paramètre global."
      },
      "scriptDirectories_sizing": {
        "label": "Répertoires du script de dimensionnement",
        "description": "Répertoires personnalisés pour le script de dimensionnement",
        "current": "Actuel : {value}",
        "help": "Spécifiez le répertoire source pour le script de dimensionnement. Laisser vide pour le paramètre global."
      },
      "scriptDirectories_summary": {
        "label": "Répertoires du rapport résumé",
        "description": "Répertoires personnalisés pour le rapport résumé",
        "current": "Actuel : {value}",
        "help": "Spécifiez le répertoire source pour le rapport résumé. Laisser vide pour le paramètre global."
      },
      "scriptDirectories_usage": {
        "label": "Répertoires du rapport d’utilisation",
        "description": "Répertoires personnalisés pour le rapport d’utilisation",
        "current": "Actuel : {value}",
        "help": "Spécifiez le répertoire source pour le rapport d’utilisation. Laisser vide pour le paramètre global."
      },
      "scriptDirectories_validate": {
        "label": "Répertoires du script de validation",
        "description": "Répertoires personnalisés pour le script de validation",
        "current": "Actuel : {value}",
        "help": "Spécifiez le répertoire source pour le script de validation. Laisser vide pour le paramètre global."
      },
      "security_adminPinEnabled": {
        "label": "Protection PIN admin",
        "description": "Activer l’authentification PIN admin pour les paramètres sensibles",
        "current": "Actuel : {value}",
        "help": "Exiger un PIN admin pour modifier les paramètres de sécurité et avancés"
      },
      "pinProtection_configure": {
        "label": "Configurer la protection PIN des scripts",
        "description": "Sélectionnez les scripts nécessitant une protection PIN",
        "help": "Choisissez les scripts qui nécessitent une authentification PIN"
      },
      "pinProtection_debugMenu": {
        "label": "Menu des outils de débogage",
        "description": "Exiger un PIN pour le menu de débogage",
        "current": "Actuel : {value}",
        "help": "Activer la protection PIN pour l’accès aux outils de débogage"
      },
      "pinProtection_deleteReports": {
        "label": "Suppression des rapports",
        "description": "Exiger un PIN pour la suppression des rapports",  
        "current": "Actuel : {value}",
        "help": "Activer la protection PIN pour la suppression des rapports"
      },
      "pinProtection_summaryReports": {
        "label": "Rapports résumés",
        "description": "Exiger un PIN pour les rapports résumés",
        "current": "Actuel : {value}",
        "help": "Activer la protection PIN pour la génération des rapports résumés"
      },
      "pinProtection_settingsMenu": {
        "label": "Menu des paramètres",
        "description": "Exiger un PIN pour le menu des paramètres",
        "current": "Actuel : {value}",
        "help": "Activer la protection PIN pour l’accès aux paramètres"
      },
      "pinProtection_initScript": {
        "label": "Script d’initialisation",
        "description": "Exiger un PIN pour le script d’initialisation",
        "current": "Actuel : {value}",
        "help": "Activer la protection PIN pour l’exécution du script d’initialisation"
      },
      "pinProtection_resetDefaults": {
        "label": "Réinitialiser la protection PIN",
        "description": "Réinitialiser tous les paramètres de protection PIN aux valeurs par défaut",
        "help": "Réinitialiser toutes les protections PIN des scripts aux valeurs par défaut"
      }
    },
    "actions": {
      "editSetting": "Modifier {setting} : ",
      "settingUpdated": "✅ {setting} mis à jour avec succès !",
      "invalidValue": "❌ Valeur invalide. Veuillez réessayer.",
      "pressEnter": "Appuyez sur Entrée pour continuer…",
      "backToMenu": "Retour au menu principal",
      "saveSuccess": "✅ Paramètres enregistrés avec succès !",
      "saveFailed": "❌ Échec de l’enregistrement des paramètres : {error}",
      "resetConfirm": "Voulez-vous réinitialiser tous les paramètres aux valeurs par défaut ? (y/N) : ",
      "resetSuccess": "✅ Paramètres réinitialisés aux valeurs par défaut avec succès !",
      "importSuccess": "✅ Paramètres importés avec succès !",
      "exportSuccess": "✅ Paramètres exportés avec succès !",
      "fileNotFound": "❌ Fichier introuvable : {path}",
      "invalidFormat": "❌ Format de fichier de paramètres invalide",
      "pinProtectionUpdated": "✅ Protection PIN pour {script} mise à jour avec succès !",
      "pinProtectionReset": "✅ Toutes les protections PIN réinitialisées aux valeurs par défaut !",
      "pinProtectionConfigure": "Configurer la protection PIN pour les scripts individuels",
      "pinProtectionSelectScript": "Sélectionnez un script pour activer/désactiver la protection PIN :",
      "pinProtectionCurrentStatus": "Statut actuel : {status}",
      "pinProtectionEnabled": "Activée",
      "pinProtectionDisabled": "Désactivée",
      "pinProtectionToggle": "Basculer la protection PIN",
      "pinProtectionResetAll": "Tout réinitialiser aux valeurs par défaut",
      "pinProtectionBack": "Retour aux paramètres de sécurité"
    },
    "themes": {
      "light": "Clair",
      "dark": "Sombre",
      "system": "Système"
    },
    "languages": {
      "en": "Anglais",
      "de": "Allemand",
      "es": "Espagnol",
      "fr": "Français",
      "ru": "Russe",
      "ja": "Japonais",
      "zh": "Chinois"
    },
    "viewAll": {
      "title": "Afficher tous les paramètres"
    },
    "current": "Actuel",
    "back": "Retour au menu principal",
    "selectSettingPrompt": "Sélectionnez un paramètre à modifier (ou 'b' pour revenir, 'r' pour réinitialiser) : ",
    "invalidOption": "Option invalide.",
    "editing": "Modification",
    "enterNewValue": "Entrez la nouvelle valeur (ou appuyez sur Entrée pour conserver, tapez 'default' pour la valeur système) :",
    "validOptions": "Options valides",
    "updatedSuccessfully": "mis à jour avec succès !",
    "noHelp": "Aucune aide disponible pour ce paramètre",
    "resetScriptDirectories": "Réinitialiser aux valeurs par défaut",
    "resetScriptDirectoriesTitle": "Réinitialiser les répertoires de scripts aux valeurs par défaut",
    "resetScriptDirectoriesWarning1": "Cela réinitialisera toutes les configurations de répertoires de scripts aux valeurs système par défaut.",
    "resetScriptDirectoriesWarning2": "Tous les chemins personnalisés seront effacés. Cette action est irréversible.",
    "resetScriptDirectoriesConfirm": "Êtes-vous sûr de vouloir réinitialiser tous les répertoires de scripts aux valeurs par défaut ? (y/N) : "
  },
  "summary": {
    "separator": "============================================================",
    "configurationTitle": "🔧 Configuration :",
    "sourceLanguage": "   Langue source : {sourceLanguage}",
    "supportedExtensions": "   Extensions prises en charge : {extensions}",
    "excludedFiles": "   Fichiers exclus : {files}",
    "reportContent": "\n{report}",
    "fatalError": "❌ Erreur fatale : {error}",
    "helpTitle": "📊 GÉNÉRATEUR DE RAPPORT RÉCAPITULATIF I18N",
    "helpDescription": "Analyse la structure du dossier i18n et génère un rapport complet incluant statistiques, analyse de l’arborescence et contrôles de validation.",
    "helpUsage": "Utilisation : node i18ntk-summary.js [options]",
    "helpOptions": "  --source-dir <dir>     Répertoire source à analyser",
    "helpSourceDir": "  --source-dir <dir>     Répertoire source à analyser",
    "helpOutput": "  --output <file>        Fichier de sortie pour le rapport",
    "helpVerbose": "  --verbose, -v           Afficher les informations détaillées",
    "helpKeepReports": "  --keep-reports          Conserver les rapports existants",
    "helpDeleteReports": "  --delete-reports        Supprimer les rapports existants",
    "helpHelp": "  --help, -h              Afficher cette aide",
    "helpExamples": "\nExemples :",
    "helpExample1": "  node i18ntk-summary.js",
    "helpExample2": "  node i18ntk-summary.js --source-dir ./locales",
    "helpExample3": "  node i18ntk-summary.js --output summary-report.txt",
    "helpExample4": "  node i18ntk-summary.js --verbose",
    "helpExample5": "  node i18ntk-summary.js --source-dir ./locales --output report.json",
    "couldNotReadFile": "⚠️  Impossible de lire le fichier : {filePath}",
    "couldNotParseJSFile": "⚠️  Impossible d’analyser le fichier JS/TS : {filePath}",
    "errorReadingFile": "⚠️  Erreur de lecture du fichier {filePath} : {error}",
    "analyzingFolder": "\n🔍 Analyse de la structure du dossier...\n",
    "noLanguageDirectoriesFound": "\n❌ Aucun répertoire de langue trouvé dans le répertoire source spécifié.\n",
    "foundLanguages": "\n✅ {count} langue(s) trouvée(s) : {languages}\n",
    "referenceLanguageFiles": "\n📁 La langue de référence « {language} » contient {count} fichier(s)\n",
    "analyzingLanguage": "\n🌍 Analyse de la langue : {language}",
    "keysInFiles": "\n📊 {keys} clés trouvées dans {files} fichier(s)\n",
    "checkingInconsistentKeys": "\n🔍 Vérification des clés incohérentes entre les langues...\n",
    "generatingSummaryReport": "\n📝 Génération du rapport récapitulatif...\n",
    "reportTitle": "\n📊 RAPPORT RÉCAPITULATIF I18N\n",
    "generated": "\nGénéré le : {timestamp}\n",
    "sourceDirectory": "\nRépertoire source : {dir}\n",
    "overview": "\n📈 VUE D’ENSEMBLE",
    "languagesCount": "Langues : {count}",
    "totalFiles": "Fichiers totaux : {count}",
    "totalKeys": "Clés totales : {count}",
    "avgKeysPerLanguage": "Clés moyennes par langue : {count}",
    "languagesBreakdown": "\n🌍 RÉPARTITION PAR LANGUE",
    "languageBreakdown": "{language} : {files} fichier(s), {keys} clé(s)",
    "fileStructure": "\n📁 ARBORESCENCE DES FICHIERS",
    "fileKeys": "{file} : {keys} clé(s)",
    "missingInLanguages": "   ⚠️ Manquant dans : {languages}",
    "issuesFound": "\n❌ PROBLÈMES IDENTIFIÉS",
    "missingFiles": "📁 Fichiers manquants :",
    "emptyFiles": "📄 Fichiers vides :",
    "malformedFiles": "⚠️ Fichiers mal formés :",
    "duplicateKeys": "🔑 Clés en double :",
    "inconsistentKeys": "🔍 Clés incohérentes :",
    "missingKeys": "   Manquantes : {keys}{more}",
    "extraKeys": "   Supplémentaires : {keys}{more}",
    "noIssuesFound": "\n✅ AUCUN PROBLÈME IDENTIFIÉ",
    "allFilesConsistent": "Tous les fichiers de traduction sont cohérents entre les langues.",
    "recommendations": "\n💡 RECOMMANDATIONS",
    "createMissingFiles": "• Créer les fichiers de traduction manquants",
    "addContentToEmptyFiles": "• Ajouter du contenu aux fichiers vides",
    "fixMalformedFiles": "• Corriger les fichiers JSON/JS mal formés",
    "removeDuplicateKeys": "• Supprimer les clés en double des fichiers",
    "synchronizeKeys": "• Synchroniser les clés entre toutes les langues",
    "splitLargeFiles": "• Envisager de séparer les gros fichiers en namespaces plus petits",
    "addMoreLanguages": "• Envisager d’ajouter d’autres langues",
    "nextSteps": "🎯 ÉTAPES SUIVANTES",
    "nextStep1": "1. Corriger les problèmes identifiés ci-dessus",
    "nextStep2": "2. Exécuter la validation pour garantir la cohérence",
    "nextStep3": "3. Envisager d’utiliser i18ntk-validate pour une validation détaillée",
    "nextStep4": "4. Mettre en place une surveillance régulière",
    "couldNotFindI18nDirectory": "❌ Impossible de trouver le répertoire i18n. Veuillez préciser --source-dir.",
    "sourceDirectoryDoesNotExist": "❌ Le répertoire source n’existe pas : {dir}",
    "i18nSummaryReportGenerator": "📊 Générateur de rapport récapitulatif I18N",
    "analysisComplete": "\n✅ Analyse terminée",
    "analyzedLanguages": "\n📊 Langues analysées : {count}",
    "processedFiles": "\n📁 Fichiers traités : {count}",
    "foundTranslationKeys": "\n🔑 Clés de traduction trouvées : {count}\n",
    "foundIssues": "\n❌ {count} problème(s) trouvé(s)\n",
    "noIssuesConsole": "\n✅ Aucun problème – tous les fichiers sont cohérents !\n",
    "errorDuringAnalysis": "❌ Erreur lors de l’analyse : {error}",
    "usageReportTitle": "📊 RAPPORT D’UTILISATION I18N",
    "usageReportGenerated": "Généré le : {timestamp}",
    "usageReportSourceDir": "Répertoire source : {sourceDir}",
    "usageReportI18nDir": "Répertoire i18n : {i18nDir}",
    "usageReportSummary": "📈 RÉCAPITULATIF",
    "usageReportSourceFilesScanned": "Fichiers source analysés : {count}",
    "usageReportTranslationFilesFound": "Fichiers de traduction trouvés : {count}",
    "usageReportAvailableKeys": "Clés de traduction disponibles : {count}",
    "usageReportUsedKeys": "Clés de traduction utilisées : {count}",
    "usageReportDynamicKeys": "Clés de traduction dynamiques : {count}",
    "usageReportUnusedKeys": "Clés de traduction non utilisées : {count}",
    "usageReportMissingKeys": "Clés de traduction manquantes : {count}",
    "usageReportNotTranslatedKeys": "Clés non traduites : {count}",
    "usageReportTranslationCompleteness": "🌍 COMPLÉTUDE DES TRADUCTIONS",
    "usageReportLanguageCompleteness": "{language} : {completeness}% ({translated}/{total})",
    "usageReportNotTranslatedInLanguage": "   Non traduit : {count} clé(s)",
    "usageReportTranslationFilesDiscovered": "📁 FICHIERS DE TRADUCTION",
    "usageReportFileInfo": "{relativePath} (namespace : {namespace}, type : {type})",
    "usageReportUnusedTranslationKeys": "🗑️ CLÉS DE TRADUCTION NON UTILISÉES",
    "usageReportUnusedKeysDescription": "Ces clés existent dans les fichiers de traduction mais ne sont pas utilisées dans le code source :",
    "usageReportUnusedKey": "• {key}",
    "usageReportMoreUnusedKeys": "   … et {count} clé(s) supplémentaire(s)",
    "usageReportMissingTranslationKeys": "❌ CLÉS DE TRADUCTION MANQUANTES",
    "usageReportMissingKeysDescription": "Ces clés sont utilisées dans le code source mais manquent dans les fichiers de traduction :",
    "usageReportMissingKey": "• {key}",
    "usageReportUsedIn": "   Utilisée dans : {filePath}",
    "usageReportMoreFiles": "   … et {count} fichier(s) supplémentaire(s)",
    "usageReportDynamicTranslationKeys": "⚡ CLÉS DE TRADUCTION DYNAMIQUES",
    "usageReportDynamicKeysDescription": "Ces clés sont construites dynamiquement (à l’exécution) :",
    "usageReportDynamicKey": "• {key}",
    "usageReportFileUsageBreakdown": "📊 RÉPARTITION PAR FICHIER",
    "usageReportFileUsage": "{filePath} : {count} clé(s)",
    "status": {
      "generating": "⏳ Génération en cours…",
      "completed": "✅ Terminé"
    },
    "help": {
      "usage": "Utilisation : node i18ntk-manage.js [options]",
      "interactiveMode": "💡 Utilisez : node i18ntk-manage.js --command=<commande> pour exécution directe",
      "initProject": "🚀 Initialiser de nouvelles langues",
      "analyzeTranslations": "🔍 Analyser les traductions",
      "validateTranslations": "✅ Valider les traductions",
      "checkUsage": "📊 Vérifier l’utilisation des clés",
      "showHelp": "📖 Utilisez : node i18ntk-manage.js --help pour les commandes disponibles",
      "availableCommands": "📖 Commandes disponibles :",
      "initCommand": "  init      - Initialiser de nouvelles langues",
      "analyzeCommand": "  analyze   - Analyser les traductions",
      "validateCommand": "  validate  - Valider les traductions",
      "usageCommand": "  usage     - Vérifier l’utilisation des clés",
      "sizingCommand": "  sizing    - Analyser le dimensionnement",
      "completeCommand": "  complete  - Compléter les traductions (100 % de couverture)",
      "summaryCommand": "  summary   - Afficher le statut du projet",
      "debugCommand": "  debug     - Déboguer les problèmes de traduction"
    },
    "test_complete_system": {
    "starting_test": "🧪 Démarrage du test complet du système\n",
    "separator": "=",
    "testing_ui_translations": "\n📝 Test des traductions de l’interface…",
    "testing_settings_manager": "\n⚙️  Test du gestionnaire de paramètres…",
    "testing_main_scripts": "\n🔧 Test des scripts principaux…",
    "checking_translation_consistency": "\n🌐 Vérification de la cohérence des traductions…",
    "non_critical_missing_keys": "ℹ️ {file} : {count} clés manquantes non critiques",
    "extra_keys": "ℹ️ {file} : {count} clés en trop",
    "generating_report": "\n📊 Génération du rapport…",
    "final_test_report_title": "📋 RAPPORT DE TEST FINAL",
    "passed": "✅ Réussis : {passed}",
    "failed": "❌ Échoués : {failed}",
    "warnings": "⚠️  Avertissements : {warnings}",
    "missing_translations_title": "\n🔍 Traduct­­ions manquantes ({count}) :",
    "missing_translation_key": "   - {key}",
    "missing_translations_more": "   … et {count} de plus",
    "errors_title": "\n❌ Erreurs :",
    "error_message": "   - {error}",
    "overall_status": "\n📊 Statut global : {status}",
    "success_message": "✅ {message}",
    "failure_message": "❌ {message}",
    "failure_error_message": "   {errorMessage}",
    "warning_message": "⚠️  {message}",
    "test_runner_failed": "❌ Le lanceur de tests a échoué :",
    "recommendations": {
      "add_missing_translation_keys": "Ajouter les clés de traduction manquantes pour garantir la cohérence",
      "fix_failing_scripts": "Corriger les scripts en échec avant le déploiement",
      "review_warning_messages": "Examiner et traiter les avertissements",
      "system_ready_for_deployment": "Le système est prêt pour le déploiement"
    },
    "hardcodedTexts": {
      "addMissingTranslationKeys": "Ajouter les clés de traduction manquantes pour garantir la cohérence",
      "fixFailingScripts": "Corriger les scripts en échec avant le déploiement",
      "reviewWarningMessages": "Examiner et traiter les avertissements",
      "systemReadyForDeployment": "Le système est prêt pour le déploiement"
    }
  },
  "testConsoleI18n": {
    "found_target_file": "Fichier cible trouvé : {fileName}",
    "scanning_files_for_console_statements": "Recherche des instructions console…",
    "found_javascript_files": "{count} fichiers JavaScript trouvés.",
    "console_i18n_analysis_results": "Résultats de l’analyse i18n console",
    "total_console_statements": "Total d’instructions console : {count}",
    "translated_statements": "Instructions traduites : {count}",
    "hardcoded_statements": "Instructions codées en dur : {count}",
    "translation_coverage": "Couverture des traductions : {percentage}%",
    "coverage_by_file": "Couverture par fichier :",
    "file_coverage_stats": "{emoji} {fileName} : {coverage}% ({translated}/{total})",
    "hardcoded_console_statements": "Instructions console codées en dur :",
    "file_header": "Fichier : {file}",
    "line_statement": "  Ligne {line} : {statement}",
    "suggested_key": "    Clé suggérée : {key}",
    "suggested_replacement": "    Remplacement suggéré : {replacement}",
    "recommendations": "Recommandations :",
    "recommendation_1": "1. Remplacer les chaînes codées en dur par des appels i18n.t().",
    "recommendation_2": "2. Ajouter de nouvelles clés dans les fichiers JSON de traduction correspondants.",
    "recommendation_3": "3. S’assurer que tous les messages console destinés à l’utilisateur sont traduisibles.",
    "recommendation_4": "4. Utiliser des littéraux de gabarit ou la concaténation, en passant les variables à i18n.t().",
    "translation_keys_to_add": "Clés de traduction suggérées à ajouter :",
    "add_keys_instruction": "Copiez la structure JSON suivante dans vos fichiers de traduction :",
    "perfect_translation_coverage": "Couverture de traduction parfaite !",
    "all_statements_using_translation": "Toutes les instructions console utilisent le système de traduction.",
    "i18n_console_translation_checker": "Vérificateur de traduction console i18n",
    "script_description_line1": "Ce script parcourt tous les fichiers JavaScript pour trouver les instructions console",
    "script_description_line2": "et vérifie si elles utilisent le système de traduction.",
    "analysis_completed_in_duration": "Analyse terminée en {duration} secondes.",
    "report_saved_to_path": "Rapport enregistré dans : {path}",
    "found_hardcoded_messages": "{count} messages codés en dur trouvés. Sortie avec le code d’erreur 1.",
    "all_console_messages_use_translation": "Toutes les instructions console utilisent la traduction. Sortie avec le code 0.",
    "consoleTranslationsCheck": "Vérification des traductions console"
  },
  "translate_mismatches": {
    "title": "🌐 Assistant de traduction {dryRun}",
    "separator": "=====================================\n",
    "processing_file": "📄 Traitement de {language}.json…",
    "translation_summary_title": "\n📊 Résumé des traductions :",
    "total_translations_applied": "   Total de traductions appliquées : {totalTranslations}",
    "run_with_apply_instruction": "\n💡 Exécutez avec --apply pour appliquer ces traductions\n",
    "no_translation_mappings": "   ⚠️  Aucun mappage de traduction disponible pour {language}",
    "translation_applied": "   ✅ {key} : « {oldValue} » → « {newValue} »",
    "saved_translations": "   💾 {count} traductions enregistrées dans {filename}",
    "found_translatable_items": "   🔍 {count} éléments traduisibles trouvés",
    "no_automatic_translations": "   ✨ Aucune traduction automatique disponible",
    "error_processing_file": "   ❌ Erreur de traitement de {filename} : {errorMessage}",
    "coverage_report_title": "📊 Rapport de couverture des traductions",
    "coverage_report_separator": "===============================\n",
    "file_header": "📄 {filename} :",
    "total_keys": "   Total de clés : {total}",
    "translated_keys": "   Traduites : {translated}",
    "untranslated_markers": "   Marqueurs non traduits : {untranslated}",
    "contains_english": "   Contient de l’anglais : {hasEnglish}",
    "coverage_percentage": "   Couverture : {coverage}%\n",
    "error_general": "❌ Erreur :",
    "use_help": "Utilisez --help pour l’aide"
  }
},
  "ui": {
    "autoDetectedI18nDirectory": "Répertoire i18n auto-détecté : {path}",
    "executingCommand": "🔄 Exécution de la commande : {command}",
    "unknownCommand": "❌ Commande inconnue : {command}",
    "errorExecutingCommand": "❌ Erreur d’exécution de la commande : {error}",
    "errorLoadingTranslationFile": "❌ Erreur de chargement du fichier de traduction pour « {language} » : {error}",
    "errorSavingLanguagePreference": "❌ Erreur d’enregistrement de la langue : {error}",
    "noActiveReadlineInterface": "❌ Aucune interface readline active disponible",
    "uiLanguageUpdated": "🌍 Langue de l’interface mise à jour en : {language}",
    "selectOptionPrompt": "Sélectionnez une option :",
    "pressEnterToReturn": "Appuyez sur Entrée pour revenir au menu principal…",
    "detectedSourceDirectory": "Répertoire source détecté : {sourceDir}",
    "detectedI18nDirectory": "Répertoire i18n détecté : {directory}",
    "toolkitTitle": "🌍 i18ntk – Boîte à outils i18n d’entreprise",
    "versionInfo": "📦 Version : {version}",
    "releaseDate": "📅 Date de publication : {date}",
    "maintainer": "👤 Mainteneur : {maintainer}",
    "nodeVersion": "🔧 Node.js : {version}",
    "license": "📄 Licence : {license}",
    "whatsNew": "✨ Nouveautés de la v{version} :",
    "changeItem": "   {change}",
    "documentation": "📚 Documentation : {url}",
    "issues": "🐛 Problèmes : {url}",
    "versionInfoUnavailable": "Informations sur la version i18ntk indisponibles",
    "versionInfoError": "Erreur : {error}"
  },
  "validateLanguagePurity": {
    "phrase_debug_tools": "outils de débogage",
    "phrase_settings": "paramètres",
    "phrase_configuration": "configuration",
    "phrase_invalid_choice": "choix invalide",
    "phrase_please_select": "merci de sélectionner",
    "phrase_back_to_main_menu": "retour au menu principal",
    "phrase_error": "erreur",
    "phrase_warning": "avertissement",
    "phrase_success": "succès",
    "phrase_failed": "échec",
    "phrase_loading": "chargement",
    "phrase_saving": "enregistrement",
    "phrase_full_system_debug": "débogage complet du système",
    "phrase_configuration_debug": "débogage de la configuration",
    "phrase_translation_debug": "débogage des traductions",
    "phrase_performance_debug": "débogage des performances",
    "phrase_admin_pin_setup": "configuration PIN admin",
    "phrase_enter_admin_pin": "saisir le PIN admin",
    "phrase_confirm_admin_pin": "confirmer le PIN admin",
    "phrase_authentication_failed": "échec de l’authentification",
    "phrase_access_denied": "accès refusé",
    "phrase_security_log": "journal de sécurité",
    "language_german": "Allemand",
    "language_french": "Français",
    "language_spanish": "Espagnol",
    "language_russian": "Russe",
    "language_japanese": "Japonais",
    "language_chinese": "Chinois",
    "validator_title": "🔍 Validateur de pureté linguistique",
    "validating_file": "📄 Validation de {language}.json ({name})…",
    "valid_file_message": "   ✅ Valide – Aucune violation de pureté linguistique",
    "invalid_file_message": "   ❌ Invalide – {count} violation(s) détectée(s)",
    "no_validation_rules": "Aucune règle de validation définie pour la langue : {language}",
    "error_reading_file": "Erreur de lecture du fichier : {errorMessage}",
    "issue_forbidden_marker": "Contient un marqueur interdit : {marker}",
    "issue_english_phrase": "Contient une expression anglaise : « {phrase} »",
    "issue_english_words": "Contient des mots anglais : {words}",
    "issue_missing_cyrillic": "Le texte long doit contenir des caractères cyrilliques pour le russe",
    "issue_missing_japanese": "Le texte long doit contenir des caractères japonais",
    "issue_missing_chinese": "Le texte long doit contenir des caractères chinois",
    "summary_title": "📊 RÉCAPITULATIF DE VALIDATION",
    "overall_results_header": "📋 Résultats globaux :",
    "total_files_validated": "   Total de fichiers validés : {count}",
    "valid_files": "   Fichiers valides : {count}",
    "invalid_files": "   Fichiers invalides : {count}",
    "total_violations": "   Total de violations : {count}\n",
    "violations_by_file_header": "❌ VIOLATIONS PAR FICHIER :\n"
  },
  "workflow": {
    "title": "Gestion des workflows",
    "description": "Gérer les workflows i18n.",
    "select_workflow_file": "Sélectionnez un fichier de workflow à exécuter :",
    "no_workflow_files": "Aucun fichier de workflow trouvé dans le répertoire workflows.",
    "invalid_selection": "Sélection invalide. Veuillez entrer un numéro correspondant à un fichier de workflow.",
    "workflow_execution_started": "Démarrage du workflow : {workflowName}",
    "workflow_execution_completed": "Workflow terminé : {workflowName}",
    "workflow_execution_failed": "Workflow échoué : {workflowName} – {error}",
    "workflow_cancelled": "Exécution du workflow annulée.",
    "press_enter_to_continue": "Appuyez sur Entrée pour continuer…",
    "starting": "🚀 Démarrage du workflow…",
    "completed": "✅ Workflow terminé avec succès !",
    "checkReports": "📄 Consultez les rapports pour plus de détails.",
    "exitingCompleted": "📝 Workflow terminé. Fermeture…",
    "summary": {
      "title": "📋 RÉCAPITULATIF DU WORKFLOW",
      "separator": "===================",
      "completedAt": "🕐 Workflow terminé à : {timestamp}",
      "initialViolations": "📊 Violations initiales : {count}",
      "finalViolations": "📉 Violations finales : {count}",
      "totalFixes": "🔧 Total de corrections appliquées : {count}",
      "improvement": "📈 Amélioration : {percentage}%",
      "stepResults": "📝 RÉSULTATS PAR ÉTAPE :\n",
      "stepDetail": "{number}. {status} {stepName}",
      "violations": "   Violations : {count}",
      "fixesApplied": "   Corrections appliquées : {count}",
      "nextSteps": "💡 PROCHAINES ÉTAPES :\n",
      "congratulations": "🎉 Félicitations ! Tous les fichiers de locale ont désormais une pureté linguistique parfaite !",
      "cicdIntegration": "✅ Envisagez d’intégrer le validateur dans votre pipeline CI/CD",
      "automatedChecks": "✅ Mettez en place des contrôles automatisés pour les nouvelles traductions",
      "greatProgress": "🎯 Gros progrès ! La plupart des problèmes ont été résolus.",
      "manualReview": "🔍 Passez en revue manuellement les violations restantes",
      "addMappings": "🌐 Envisagez d’ajouter plus de mappages de traduction pour les cas particuliers",
      "goodProgress": "📈 Bon progrès, mais le travail n’est pas terminé.",
      "expandMappings": "🔧 Étendez les mappages de traduction automatiques",
      "professionalReview": "👥 Envisagez une relecture professionnelle pour les traductions complexes",
      "runAgain": "🔄 Exécutez à nouveau le workflow après avoir ajouté d’autres mappages",
      "limitedProgress": "⚠️  Progrès limité. Une intervention manuelle peut être nécessaire.",
      "reviewMappings": "🔍 Vérifiez les mappages de traduction et ajoutez ceux manquants",
      "professionalServices": "👥 Envisagez des services de traduction professionnels",
      "checkIssues": "🔧 Vérifiez les problèmes systématiques dans les fichiers de locale",
      "success": "✅",
      "warning": "⚠️"
    }
  }
}