{
  "meta": {
    "version": "3.1.2",
    "updated": "2026-05-07"
  },
  "common": {
    "welcome": "Bienvenue",
    "hello": "Bonjour",
    "goodbye": "Au revoir",
    "yes": "Oui",
    "no": "Non",
    "save": "Sauvegarder",
    "cancel": "Annuler",
    "delete": "Supprimer",
    "edit": "Modifier",
    "loading": "Chargement...",
    "offlineTitle": "Vous êtes hors ligne",
    "offlineMessage": "Veuillez vérifier votre connexion Internet",
    "tryReconnect": "Essayez de vous reconnecter",
    "logout": "Déconnexion",
    "login": "Se connecter",
    "amount": "Montant",
    "success": "Succès",
    "error": "Erreur",
    "warning": "Avertissement",
    "info": "Infos :",
    "debug": "Déboguer",
    "progress": "Progrès:",
    "remaining": "Restant:",
    "total": "Total:",
    "completed": "7. Terminé avec succès !",
    "missing": "Manquant",
    "partial": "Partiel",
    "sameAsSource": "Identique à la source :",
    "formatMismatch": "Incompatibilité de format :",
    "typeMismatch": "Incompatibilité de type :",
    "structureMismatch": "Inadéquation des structures :",
    "invalidOption": "Option invalide",
    "separator": "===================================================",
    "initializationFailed": "❌ L'initialisation a échoué : {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}' complété.",
    "stepFailed": "Étape '{stepName}' échoué.",
    "runningStep": "Étape d'exécution : {stepName}",
    "command": "Commande: {command}",
    "startingWorkflow": "Démarrage du flux de travail...",
    "workflowCompleted": "Flux de travail terminé.",
    "checkReports": "Consultez les rapports pour plus de détails.",
    "errorExecutingCommand": "Erreur lors de l'exécution de la commande : {error}",
    "genericError": "❌ Erreur : {error}",
    "errors": {
      "errors": "Erreurs :",
      "genericError": "❌ Erreur : {error}",
      "initializationFailed": "❌ L'initialisation a échoué : {error}",
      "initializationCancelled": "❌ Initialisation annulée par l'utilisateur.",
      "translationKeyNotFound": "Clé de traduction introuvable : {key}",
      "sourceDirectoryNotFound": "Répertoire source introuvable : {directory}",
      "configLoadingFailed": "Échec du chargement de la configuration",
      "invalidSourceDirectory": "Répertoire source invalide : {directory}",
      "securityViolation": "Violation de sécurité détectée",
      "authenticationFailed": "L'authentification a échoué",
      "sourceEqualsI18nWarn": "⚠️ sourceDir est égal à i18nDir ({sourceDir}). Revenir à {fallback} pour l'analyse des sources."
    },
    "errorGeneratingStatusSummary": "Erreur lors de la génération du résumé de l'état : {error}",
    "errorRunningDebugTool": "Erreur lors de l'exécution de l'outil de débogage '{displayName}': {error}",
    "errorReadingDebugLogs": "Erreur lors de la lecture des journaux de débogage : {error}",
    "errorAnalyzingLogFile": "Erreur lors de l'analyse du fichier journal : {error}",
    "errorAnalyzingTranslationKeys": "Erreur lors de l'analyse des clés de traduction : {error}",
    "errorAnalyzingTranslationCompleteness": "Erreur lors de l'analyse de l'intégralité de la traduction : {error}",
    "analyzingTranslationCompleteness": "Analyser l'exhaustivité de la traduction dans toutes les langues...",
    "i18nDirectoryNotFound": "⚠️ Répertoire i18n introuvable : {i18nDir}",
    "translationCompletenessAnalysisFailed": "⚠️ L'analyse de l'exhaustivité de la traduction a échoué : {error}",
    "failedToAnalyzeLanguage": "❌ Échec de l'analyse de la langue {language}: {error}",
    "errorReadingI18nDirectory": "❌ Erreur de lecture du répertoire i18n :",
    "languageCompletenessTitle": "📈 EXHAUSTIVITÉ DE LA TRADUCTION PAR LANGUE",
    "errorAnalyzingTranslationFormat": "Erreur lors de l'analyse du format de traduction : {error}",
    "errorAnalyzingTranslationType": "Erreur lors de l'analyse du type de traduction : {error}",
    "errorAnalyzingTranslationStructure": "Erreur lors de l'analyse de la structure de traduction : {error}",
    "errorAnalyzingTranslationFormatMismatch": "Erreur lors de l'analyse de la non-concordance du format de traduction : {error}",
    "errorAnalyzingTranslationTypeMismatch": "Erreur lors de l'analyse de l'incompatibilité des types de traduction : {error}",
    "errorAnalyzingTranslationStructureMismatch": "Erreur lors de l'analyse de l'inadéquation de la structure de traduction : {error}",
    "errorAnalyzingTranslationSameAsSource": "Erreur lors de l'analyse de la traduction identique à la source : {error}",
    "title": "Statut",
    "nextStep1": "1. Vérifiez l'analyse de l'utilisation :",
    "nextStep2": "2. Validez les traductions :",
    "nextStep3": "3. Analyser l'exhaustivité :",
    "nextStep4": "4. Compléter les traductions manquantes :",
    "nextStep5": "5. Générer un rapport récapitulatif :",
    "nextStep6": "6. Réviser et finaliser les traductions :",
    "generating": "Génération d'un rapport récapitulatif...",
    "review": "Révision des traductions...",
    "finalizing": "Finalisation des traductions...",
    "finalized": "Finalisé avec succès !",
    "warnings": "Avertissements :",
    "completedKeys": "Clés terminées :",
    "missingKeys": "Clés manquantes :",
    "partialKeys": "Clés partielles :",
    "home": "Maison",
    "settings": "Paramètres",
    "startingSettings": "🎛️ Démarrage de la CLI des paramètres...",
    "confirm": "Confirmer",
    "errorExiting": "Erreur lors de la sortie."
  },
  "errors": {
    "invalidOption": "❌ Option invalide : {option}. Veuillez réessayer.",
    "readlineClosed": "Le flux d’entrée est fermé ; fonctionnant en mode non interactif.",
    "noPackageJson": "Aucun package.json trouvé. Impossible de détecter automatiquement le framework i18n.",
    "noI18nDir": "Aucun répertoire i18n trouvé à la racine du projet.",
    "noI18nConfig": "Aucun fichier de configuration i18n trouvé à la racine du projet.",
    "errorReadingDebugLogs": "Erreur lors de la lecture des journaux de débogage : {error}"
  },
  "scanner": {
    "help_message": "Utilisation du scanner de texte I18n : nœud i18ntk-scanner.js [options] Options : --source-dir <dir>     Répertoire source à analyser (par défaut : ./src) --output <file>        Fichier de sortie pour les résultats de l'analyse (par défaut : ./i18ntk-scanner-report.json) --framework <name>     Framework à cibler (react, vue, angulaire, vanilla) --patterns <patterns>  Modèles d'expression régulière personnalisés (séparés par des virgules) --include-tests Inclure les fichiers de test dans l'analyse --exclude-dirs <dirs>  Répertoires à exclure (séparés par des virgules) --help Afficher cette aide Exemples : node i18ntk-scanner.js --source-dir=./src --framework=react node i18ntk-scanner.js --patterns 'console.log\\((.*?)\\)' --include-tests node i18ntk-scanner.js --output=./scan-results.json",
    "help_options": {
      "source_dir": "Répertoire source pour rechercher les problèmes i18n",
      "output_dir": "Répertoire des rapports et des résultats d'analyse",
      "framework": "Framework cible (react, vue, angulaire, vanilla)",
      "patterns": "Modèles d'expression régulière personnalisés pour la détection de texte",
      "exclude": "Modèles de fichiers à exclure de l'analyse",
      "output_report": "Générer un rapport d'analyse détaillé",
      "min_length": "Longueur minimale du texte à prendre en compte pour la traduction",
      "max_length": "Longueur maximale du texte à prendre en compte pour la traduction",
      "include_tests": "Inclure les fichiers de test dans le processus d'analyse"
    },
    "starting": "🔍 Démarrage du scanner de texte pour framework : {framework}",
    "sourceDirectory": "📁 Répertoire de numérisation : {sourceDir}",
    "frameworkDetected": "🎯 Cadre détecté : {framework}",
    "scanningFiles": "📊 Numérisation {fileCount} fichiers...",
    "foundTexts": "📝 Trouvé {textCount} textes à traduire",
    "generatingReport": "📊 Génération d'un rapport détaillé...",
    "reportSaved": "💾 Rapport d'analyse enregistré dans : {reportPath}",
    "noTextsFound": "✅ Aucun texte anglais codé en dur trouvé",
    "scanComplete": "🎉 Scan terminé avec succès !",
    "analysisTitle": "🔍 ANALYSE DE SCAN DE TRADUCTION",
    "fileSummary": "📄 {file}: {count} textes trouvés",
    "textLocation": "📍 Ligne {line}: {text}",
    "foundText": "Trouvé {count} instances de texte potentielles codées en dur",
    "context": "📝Contexte : {context}",
    "severity": "⚠️ Gravité : {severity}",
    "recommendation": "💡 Recommandation : {recommendation}",
    "welcome": {
      "title": "🎯 Bienvenue dans le scanner de texte !",
      "description": "Cet outil analyse votre code source à la recherche de texte anglais codé en dur pouvant nécessiter une traduction."
    },
    "frameworkPrompt": {
      "title": "🎯 Sélectionnez le cadre",
      "available": "Frameworks disponibles : React, Vue, Angular, Vanilla",
      "description": "Entrez le type de framework (ou appuyez sur Entrée pour la détection automatique) :",
      "input": "Cadre:"
    },
    "directoryPrompt": {
      "title": "📁 Sélectionnez le répertoire source",
      "current": "Répertoire actuel : {dir}",
      "description": "Entrez le répertoire à analyser (ou appuyez sur Entrée pour le courant) :",
      "input": "Annuaire:"
    },
    "options": {
      "includeTests": "Inclure les fichiers de test ?",
      "excludeDirs": "Répertoires à exclure (séparés par des virgules) :",
      "customPatterns": "Modèles personnalisés à rechercher (regex) :"
    },
    "reportGenerated": "Rapport d'analyse généré : {path}"
  },
  "fixer": {
    "help_message": "Utilisation du fixateur de traduction I18n : nœud i18ntk-fixer.js [options] Options : --source-dir <dir>     Répertoire source à analyser (par défaut : ./locales) --langues <langs>    Liste des langues séparées par des virgules à corriger --markers <markers>    Marqueurs séparés par des virgules à traiter comme non traduits --no-backup Ignorer la création de sauvegarde automatique --help Afficher cette aide Exemples : node i18ntk-fixer.js --langues de,fr node i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED node i18ntk-fixer.js --no-backup",
    "starting": "🚀 Démarrage de la correction de la traduction pour les langues : {languages}",
    "sourceDirectory": "📁 Répertoire source : {sourceDir}",
    "sourceLanguage": "🔤 Langue source : {sourceLanguage}",
    "markers": "🏷️ Balises à fixer : {markers}",
    "scanningLanguage": "📊 Numérisation {language}...",
    "noLanguages": "❌ Aucune langue spécifiée pour la correction.",
    "allComplete": "🎉 Toutes les traductions sont déjà terminées !",
    "fullReportSaved": "📊 Rapport complet enregistré dans : {reportPath}",
    "reviewReport": "Veuillez consulter le rapport avant de continuer.",
    "backupCreated": "💾 Sauvegarde créée avec succès.",
    "applyingFixes": "🔄 Application des correctifs...",
    "fixingComplete": "✅ Correction de la traduction terminée !",
    "operationCancelled": "❌ Opération annulée par l'utilisateur.",
    "analysisTitle": "🔍 ANALYSE DE FIXATION DE TRADUCTION",
    "analysisSeparator": "===================================================",
    "totalIssues": "Nombre total de problèmes trouvés : {totalIssues}",
    "missingTranslations": "Traductions manquantes : {missing}",
    "placeholderTranslations": "Traductions d'espace réservé : {placeholder}",
    "noIssues": "✅ Aucun problème trouvé. Toutes les traductions sont complètes.",
    "detailedIssues": "📋 QUESTIONS DÉTAILLÉES :",
    "detailedSeparator": "--------------------------------------------------",
    "filePath": "📄 {file} → {path}",
    "missingKey": "❌MANQUANT : {source} → {new}",
    "placeholderKey": "⚠️PLACEHOLDER : \"{target}\" → \"{new}\"",
    "moreIssues": "... et {count} plus de problèmes. Vérifiez le fichier de rapport pour plus de détails.",
    "confirmationTitle": "🤔 Souhaitez-vous procéder à ces correctifs ?",
    "confirmationOptions": "Possibilités :",
    "optionYes": "y - Oui, appliquer tous les correctifs",
    "optionNo": "n - Non, annuler l'opération",
    "optionShow": "s - Afficher les problèmes détaillés",
    "choicePrompt": "Votre choix (o/n/s) :",
    "nonInteractiveMode": "⚡ Mode non interactif détecté - application automatique des correctifs...",
    "reportGenerated": "📊 Rapport de fixateur généré : {path}",
    "summary": "Résumé du correcteur :",
    "welcome": {
      "title": "🎯 Bienvenue dans le fixateur de traduction !",
      "description": "Cet outil vous aidera à corriger les traductions brisées et les espaces réservés dans vos fichiers de paramètres régionaux."
    },
    "markerPrompt": {
      "title": "🏷️ Configurer les marqueurs d'espace réservé",
      "description": "Saisissez les marqueurs qui indiquent le texte non traduit (séparés par des virgules) :",
      "currentDefaults": "Marqueurs par défaut : {markers}",
      "input": "Marqueurs (ou appuyez sur Entrée pour les valeurs par défaut) :"
    },
    "languagePrompt": {
      "title": "🌍 Sélectionnez les langues à corriger",
      "available": "Langues disponibles : {languages}",
      "description": "Saisissez les langues à corriger (séparées par des virgules) ou appuyez sur Entrée pour toutes :",
      "input": "Langues :",
      "noLanguages": "Aucune langue à corriger trouvée."
    },
    "directoryPrompt": {
      "title": "📁 Sélectionnez l'annuaire",
      "current": "Répertoire actuel : {dir}",
      "description": "Entrez le répertoire contenant vos fichiers de paramètres régionaux (ou appuyez sur Entrée pour le courant) :",
      "input": "Annuaire:"
    },
    "backupLocation": "Emplacement de sauvegarde : {dir}",
    "completed": "Réparation terminée.",
    "creatingBackup": "Création d'une sauvegarde dans {dir}...",
    "dryRunMode": "Mode marche à sec : {mode}",
    "error": "Le correcteur a échoué : {error}",
    "fixing": "Fixation {language}...",
    "foundLanguages": "Trouvé {count} langues : {languages}",
    "languageFixed": "{language}: fixé {fixed} clé(s), ignorée(s) {skipped}.",
    "running": "Exécution du correcteur de traduction...",
    "totalFixed": "Total fixe : {count}"
  },
  "autorun": {
    "stepAnalyzeTranslations": "Analyser les traductions",
    "stepCompletedWithIcon": "✅ Terminé : {stepName}",
    "stepValidateTranslations": "Valider les traductions",
    "stepRunning": "▶️ Étape {stepNumber}/{totalSteps}: {stepName}",
    "separator": "===================================================",
    "stepFailed": "❌ Échec : {stepName}",
    "errorLabel": "Erreur",
    "autoRunScriptTitle": "🧪 Flux de travail à exécution automatique",
    "usageTitle": "Usage",
    "runAllSteps": "Exécuter : nœud i18ntk-autorun.js",
    "configureSettingsFirst": "Configuration : i18ntk-config.json ou indicateurs CLI",
    "runSpecificSteps": "Utilisez --steps=1,3 ou --list pour afficher les étapes",
    "showHelp": "--aide pour plus d'informations",
    "examplesTitle": "Exemples",
    "configExample": "nœud i18ntk-autorun.js --ui-langage=zh",
    "stepsExample1": "nœud i18ntk-autorun.js --steps=analyser, valider",
    "stepsExample2": "nœud i18ntk-autorun.js --list",
    "customSettingsConfiguration": "Paramètres d'exécution automatique personnalisés",
    "availableSteps": "Étapes disponibles",
    "startingAutoRunWorkflow": "🚀 Démarrage du workflow d'exécution automatique...",
    "workflowIncludesSteps": "Le flux de travail comprend {count} mesures:",
    "missingRequiredFile": "Fichier requis manquant : {file}",
    "workflowStopped": "Le flux de travail s'est arrêté en raison d'un échec.",
    "workflowCompleted": "🎉 Workflow terminé !",
    "successfulSteps": "Étapes réussies : {count}",
    "failedSteps": "Étapes ayant échoué : {count}",
    "stepInitializeProject": "Initialiser le projet",
    "stepCheckUsage": "Vérifier l'utilisation de la clé",
    "stepGenerateSummary": "Générer un rapport récapitulatif",
    "runInitializationFirst": "Veuillez d'abord exécuter l'initialisation.",
    "initializationCheckPassed": "Vérification d'initialisation réussie.",
    "runningStep": "Étape d'exécution : {stepName}",
    "commandLabel": "Commande: {command}",
    "stepCompletedWithTime": "Étape '{stepName}' terminé en {duration}MS.",
    "stepCompleted": "Étape '{stepName}' complété.",
    "stepFailedWithError": "Étape '{stepName}' a échoué avec l'erreur : {error}",
    "requiredStepFailed": "L'étape requise a échoué. Arrêt du flux de travail.",
    "optionalStepFailed": "L’étape facultative a échoué. Flux de travail continu.",
    "stepRequired": "(Requis)",
    "stepOptional": "(Facultatif)",
    "startingExecution": "Début de l'exécution...",
    "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 :",
    "requiredFailedSteps": "Les étapes requises ont échoué : {count}",
    "stepDetails": "Détails de l'étape :",
    "reportSavedTo": "Rapport enregistré dans : {path}",
    "overallStatusSuccess": "SUCCÈS",
    "overallStatusFailed": "ÉCHOUÉ",
    "overallStatus": "Statut général : {status}",
    "pressEnterForDefaults": "Appuyez sur Entrée pour utiliser les paramètres par défaut pour n'importe quelle invite.",
    "sourceDirPrompt": "Entrez le répertoire source (par défaut : {default}):",
    "sourceLangPrompt": "Saisissez la langue source (par défaut : {default}):",
    "targetLangsPrompt": "Saisissez les langues cibles (séparées par des virgules, par défaut : {default}):",
    "translationMarkerPrompt": "Saisissez le marqueur de traduction (par défaut : {default}):",
    "outputDirPrompt": "Entrez le répertoire de sortie des rapports (par défaut : {default}):",
    "settingsUpdatedSuccessfully": "Paramètres mis à jour avec succès !",
    "errorConfiguringSettings": "Erreur lors de la configuration des paramètres : {error}",
    "configurationComplete": "Configuration terminée.",
    "runAutoRunCommand": "Vous pouvez maintenant exécuter la commande d'exécution automatique.",
    "configurationFailed": "Échec de la configuration : {error}",
    "noValidStepNumbers": "Aucun numéro d'étape valide fourni.",
    "autoRunFailed": "Échec de l'exécution automatique : {error}",
    "stepCompleteTranslations": "Traductions complètes",
    "stepAnalyzeSizing": "Analyser le dimensionnement",
    "stepCompletedIcon": "✅",
    "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Étape '{stepName}' en cours d'exécution...",
    "stepFailedIcon": "❌",
    "translationLoadWarning": "Attention : Impossible de charger {lang} traductions",
    "configReadError": "Erreur de lecture {file}"
  },
  "analyze": {
    "help_message": "Utilisation de l'analyseur de traduction I18n : nœud i18ntk-analyze.js [options] Options : --source-dir <dir>     Répertoire source à analyser (par défaut : ./src) --i18n-dir <dir>       Répertoire I18n (par défaut : ./src/locales) --output-report Générer un rapport détaillé --output-dir <dir>     Répertoire de sortie des rapports (par défaut : ./reports) --help Afficher cette aide Exemples : node i18ntk-analyze.js --output-report node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales node i18ntk-analyze.js --output-dir=./analysis --output-report",
    "source_directory": "📁 Répertoire source : {sourceDir}",
    "i18n_directory": "🌐Annuaire I18n : {i18nDir}",
    "loading_translation_files": "📋 Chargement des fichiers de traduction...",
    "sourceDirectoryLabel": "📁 Répertoire des sources : {sourceDir}",
    "sourceLanguageLabel": "🌍 Langue source : {sourceLanguage}",
    "strictModeLabel": "⚙️ Mode strict : {mode}",
    "found_translation_files_count": "✅ Trouvé {count} fichiers de traduction",
    "analyzing_translations": "🔍 Analyser les 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": "Exemples de clés manquantes :",
    "missing_key": "- {key}",
    "and_more_missing": "...et {count} plus.",
    "sample_unused_keys": "Exemples de clés inutilisées :",
    "unused_key": "- {key}",
    "and_more_unused": "...et {count} plus.",
    "recommendations": "📋 RECOMMANDATIONS",
    "add_missing_translations": "💡 Ajoutez les traductions manquantes pour améliorer la couverture.",
    "remove_unused_translations": "💡 Supprimez les traductions inutilisées pour garder votre projet propre.",
    "next_steps": "📋 PROCHAINES ÉTAPES",
    "review_analysis_results": "1. Examinez les résultats de l'analyse dans la console ou dans le rapport généré.",
    "run_with_output_report": "2. Exécutez avec --output-report pour un rapport détaillé.",
    "add_or_remove_translations": "3. Ajoutez les traductions manquantes ou supprimez celles inutilisées.",
    "rerun_analysis": "4. Réexécutez l'analyse pour vérifier les améliorations.",
    "analysis_summary": "📊 RÉSUMÉ DE L'ANALYSE",
    "source_files_scanned": "Fichiers sources 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": "❌ L'analyse a échoué pour {language} ({missingKeys} manquant, {unusedKeys} inutilisé)",
    "starting": "🔍 Démarrage de l'analyse de traduction...",
    "foundLanguages": "📋 Trouvé {count} langages à analyser : {languages}",
    "analyzing": "🔄 Analyse {language}...",
    "reportTitle": "📊 RAPPORT D'ANALYSE DE TRADUCTION",
    "generated": "Généré : {timestamp}",
    "status": "Statut: {translated}/{total} clés ({percentage}% traduit)",
    "filesAnalyzed": "Dossiers analysés : {analyzed}/{total}",
    "keysNeedingTranslation": "Clés à traduire : {count}",
    "fileBreakdown": "📋 RÉPARTITION DES DOSSIERS",
    "error": "Erreur",
    "completed": "✅ Analyse terminée pour {language}",
    "progress": "📊 Progrès global : {translated}/{total} langues traitées",
    "reportSaved": "Rapport enregistré : {reportPath}",
    "summary": "📊 RÉSUMÉ DE L'ANALYSE",
    "finished": "✅ Analyse terminée avec succès !",
    "statusFileMissing": "❌ Fichier de traduction manquant",
    "sourceKeys": "📊 Clés sources : {count}",
    "translation": "📊 Traduction : {translated}/{total} ({percentage}%)",
    "structure": "🗂️ Structure : {status}",
    "consistent": "Cohérent",
    "inconsistent": "Incompatible",
    "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": "Incohérences de format : {count}",
      "type_mismatch": "Incohérences de type : {count}",
      "structure_mismatch": "Inadéquations 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} plus de clés.",
    "noLanguages": "⚠️ Aucune langue cible trouvée.",
    "languageStats": "{language}: {percentage}% complet ({translated}/{total} clés)",
    "invalidReportFilePath": "Chemin d'accès au fichier de rapport non valide",
    "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",
    "sourceLanguageNotFound": "Répertoire de langue source introuvable : {sourceLanguage}",
    "couldNotParseTarget": "Impossible d'analyser le fichier cible : {file}",
    "couldNotParseSource": "Impossible d'analyser le fichier source : {file}",
    "reportGenerated": "Rapport généré : {path}",
    "generateReportPrompt": "Souhaitez-vous qu'un rapport soit généré ?",
    "title": "🌍 ACHÈVEMENT DE LA TRADUCTION I18NTK",
    "separator": "=============================================================",
    "sourceDir": "📁 Répertoire source : {sourceDir}",
    "sourceLanguage": "🌐 Langue source : {sourceLanguage}",
    "dryRunMode": "🧪 Mode fonctionnement à sec - aucune modification ne sera apportée",
    "languages": "🌍 Langues disponibles : {languages}",
    "addingMissingKeys": "➕ Ajout des clés manquantes aux fichiers de traduction...",
    "processing": "🔄 Traitement {language}...",
    "addedKeys": "✅ Ajouté {count} clés manquantes",
    "noChangesNeeded": "✅ Aucun changement nécessaire pour {language}",
    "summaryTitle": "📊 RÉSUMÉ D'ACHÈVEMENT",
    "totalChanges": "📝 Modifications totales : {totalChanges}",
    "languagesProcessed": "🌍 Langues traitées : {languagesProcessed}",
    "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
    "nextStepsTitle": "📋 PROCHAINES ÉTAPES",
    "nextStep1": "1. Exécutez une analyse d'utilisation :",
    "nextStep2": "nœud i18ntk-usage.js --output-report",
    "nextStep3": "2. Validez les traductions :",
    "nextStep4": "nœud i18ntk-validate.js",
    "nextStep5": "3. Analysez les modèles :",
    "nextStep6": "nœud i18ntk-analyze.js",
    "allKeysAvailable": "🎉 Toutes les clés de traduction sont désormais disponibles !",
    "runWithoutDryRun": "💡 Exécutez 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 une analyse d'utilisation",
    "reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation de clés communes...",
    "foundMissingKeys": "📋 Trouvé {count} clés manquantes dans l'analyse d'utilisation",
    "couldNotParse": "❌ Impossible d'analyser le rapport d'utilisation. Utilisation de clés communes...",
    "errorDuringCompletion": "❌ Erreur lors de la réalisation : {error}",
    "fatalError": "❌ Erreur fatale : {error}",
    "configurationValidationFailed": "Échec de la validation de la configuration : champs obligatoires 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 non valide : {sourceDir}",
    "sourceDirectoryNotFoundError": "Répertoire source introuvable : {sourceDir}",
    "invalidOutputDirectoryError": "Chemin du répertoire de sortie non valide : {outputDir}",
    "invalidReportFileError": "Chemin d'accès au fichier de rapport non valide",
    "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 de 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 de la taille des fichiers...",
    "analyzing_translation_content": "Analyser le contenu de la traduction...",
    "generating_size_comparisons": "Génération de comparaisons de tailles...",
    "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 linguistiques",
    "language_stats_header": "Langue Touches Caractères Longueur moyenne Longueur maximale Vide Long",
    "language_stats_row": "{lang}      {totalKeys}    {totalCharacters}    {averageKeyLength}    {maxKeyLength}    {emptyKeys}    {longKeys}",
    "size_variations_title": "Variations de taille",
    "size_variations_header": "Langue Char Diff % 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}' - Variantes : {variations}",
    "generating_detailed_report": "Génération d'un rapport détaillé...",
    "keysHaveSignificantSizeVariations": "les clés présentent des variations de taille significatives",
    "longTranslationsDetected": "${lang} a des traductions ${data.longKeys} de plus de 100 caractères : pensez à les décomposer",
    "longer": "plus long",
    "shorter": "plus court",
    "review_translations": "Pensez à revoir {lang} traductions - ils sont {percentageDifference}% {comparison} que la ligne de base",
    "report_saved_to": "Rapport enregistré dans : {reportPath}",
    "considerReviewingTranslations": "Pensez à revoir ${lang} traductions - elles sont ${data.percentageDifference} % plus longues que la ligne de base",
    "csv_report_saved_to": "Rapport CSV enregistré dans : {csvPath}",
    "human_report_saved": "Rapport lisible enregistré : {reportPath}",
    "folder_summary_title": "Résumé du dossier",
    "folder_summary_table_header": "Langue Taille (Ko) Clés Longueur moyenne Nombre total de caractères",
    "folder_summary_row": "{lang}      {sizeKB}      {totalKeys}    {avgLength}    {totalChars}",
    "language_comparison_title": "Comparaison des langues",
    "language_comparison_row": "{lang}: {diff} caractères ({percent}%) {status}",
    "summary_stats": "📊Résumé : {totalLanguages} les langues, {totalKeys} touches - Rapports enregistrés dans {reportPath}",
    "detailedKeysDescription": "Afficher une analyse détaillée au niveau clé dans la console",
    "too_many_keys_warning": "⚠️ Trop de clés à afficher dans la console - consultez le fichier de rapport détaillé pour une analyse complète",
    "no_translation_files_found": "Aucun fichier de traduction trouvé",
    "analysis_completed": "Analyse réalisée en {duration}MS",
    "analysis_failed": "L'analyse a échoué : {errorMessage}",
    "starting_analysis": "Début de l'analyse...",
    "found_files": "Trouvé {count} fichiers",
    "failed_to_parse_language_error": "Échec de l'analyse {language} traductions: {errorMessage}",
    "recommendations": {
      "keys_have_significant_size_variations": "les clés présentent des variations de taille significatives",
      "consider_reviewing_translations": "Pensez à revoir {lang} traductions - ils sont {percentageDifference}% {comparison} que la ligne de base",
      "long_translations_detected": "{lang} a {longKeys} traductions plus longue que {threshold} personnages - pensez à les décomposer"
    },
    "detailed_key_analysis_title": "Analyse clé détaillée",
    "key_analysis_detail": "{lang}: {length} caractères ({status}) - {translation}",
    "key_analysis_header": "Clé: {key}",
    "status_empty": "vide",
    "status_long": "long",
    "status_ok": "d'accord"
  },
  "usage": {
    "help_message": "Utilisation de l'analyseur d'utilisation I18n : nœud i18ntk-usage.js [options] Options : --source-dir <dir>     Répertoire source à analyser (par défaut : ./src) --i18n-dir <dir>       Répertoire I18n (par défaut : ./src/locales) --output-report Générer un rapport détaillé --output-dir <dir>     Répertoire de sortie des rapports (par défaut : ./reports) --help Afficher cette aide Exemples : node i18ntk-usage.js --output-report node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales node i18ntk-usage.js --output-dir=./analysis --output-report",
    "source_directory_thissourcedir": "📁 Répertoire source : {sourceDir}",
    "translationCompletenessTitle": "🌍 Intégralité de la traduction :",
    "i18n_directory_thisi18ndir": "🌐Annuaire I18n : {i18nDir}",
    "failed_to_parse_filename_error": "⚠️ Échec de l'analyse {fileName}: {errorMessage}",
    "analyzing_source_files": "🔍 Analyse des fichiers sources...",
    "found_files_in_source": "📂 Trouvé {numFiles} fichiers dans le répertoire source",
    "found_thisusedkeyssize_unique_": "🎯 Trouvé {usedKeysSize} clés utilisées uniques",
    "total_key_usages_totalkeysfoun": "📊 Utilisations totales des 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",
    "errorReadingI18nDirectory": "⚠️ Erreur de lecture du répertoire i18n : {error}",
    "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": "💡 Revue des 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 de l'utilisation : {error}",
    "failedToAnalyzeFile": "❌ Échec de l'analyse du fichier : {error}",
    "failedToExtractKeys": "❌ Échec de l'extraction des clés de {filePath}: {error}",
    "analysisFailedError": "❌ L'analyse a échoué : {error}",
    "analyzerInitialized": "Analyseur initialisé",
    "analyzerInitFailed": "L'initialisation de l'analyseur a échoué : {error}",
    "argsParsed": "Arguments analysés",
    "processedFiles": "Traité {processedFiles} de {totalFiles} fichiers.",
    "argsParseFailed": "L'analyse des arguments a échoué : {error}",
    "translationDiscoveryError": "Erreur de découverte de traduction : {error}",
    "fileTraversalError": "Erreur de parcours de fichier : {error}",
    "sourceEqualsI18nWarn": "{reason}. L?analyse d?usage ne scannera pas les fichiers de langue comme code source.",
    "i18nEqualsSourceWarn": "⚠️ Le répertoire I18n et le répertoire source sont identiques. Cela peut entraîner des problèmes avec l'analyse.",
    "usageAnalysisFailed": "⚠️ L'analyse de l'utilisation a échoué : {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": "Analyser l'exhaustivité de la traduction...",
    "unusedKeysCount": "Clés inutilisées : {count}",
    "usedKeysCount": "Clés utilisées : {count}",
    "availableKeysCount": "Clés disponibles : {count}",
    "analysisResults": "Résultats d'analyse :",
    "i18nDirectoryNotFound": "⚠️ Répertoire I18n introuvable. Veuillez vérifier le chemin.",
    "sourceDirectoryNotFound": "⚠️ Répertoire source introuvable : {dir}",
    "checkUsage": {
      "title": "🔍 ANALYSE D'UTILISATION DU I18NTK",
      "analyzing_source_files": "🔍 Analyse des fichiers sources...",
      "source_directory_thissourcedir": "📁 Répertoire source : {sourceDir}",
      "i18n_directory_thisi18ndir": "📁 Annuaire i18n : {i18nDir}",
      "found_files_in_source": "✅ Trouvé {numFiles} fichiers dans le répertoire source",
      "no_source_files_found": "⚠️ Aucun fichier source trouvé dans le répertoire spécifié",
      "processedFiles": "📊 Traité {processedFiles} de {totalFiles} fichiers",
      "failedToProcessFile": "❌ Échec du traitement",
      "found_thisusedkeyssize_unique_": "🔍 Trouvé {usedKeysSize} clés utilisées uniques",
      "total_key_usages_totalkeysfoun": "📊 Utilisations totales des clés : {totalKeysFound}",
      "loading_available_translation_": "📂 Chargement des clés de traduction disponibles...",
      "found_thisavailablekeyssize_av": "✅ Trouvé {availableKeysSize} clés disponibles",
      "message": "Analyse de l'utilisation des clés de traduction dans votre projet...",
      "usage_analysis_results": "📊 RÉSULTATS DE L'ANALYSE D'UTILISATION",
      "source_files_scanned_thisfileu": "📁 Fichiers sources 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}",
      "translation_completeness_title": "📈 EXHAUSTIVITÉ DE LA TRADUCTION",
      "language_completeness_stats": "{language}: {translated}/{total} clés ({percentage}%)",
      "n_sample_unused_keys": "🗑️ EXEMPLES DE CLÉS INUTILISÉES (5 premières) :",
      "key": "🔑 {key}",
      "and_unusedkeyslength_5_more": "... et {count} plus de clés inutilisées",
      "n_sample_missing_keys": "❌ EXEMPLES DE CLÉS MANQUANTES (5 premières) :",
      "and_missingkeyslength_5_more": "... et {count} plus de clés manquantes",
      "n_generating_detailed_report": "📊 Génération d'un rapport détaillé...",
      "report_saved_reportpath": "📄 Rapport enregistré : {reportPath}",
      "n_recommendations": "💡 RECOMMANDATIONS :",
      "consider_removing_unused_trans": "🗑️ Pensez à supprimer les traductions inutilisées pour réduire la taille du bundle",
      "add_missing_translation_keys_t": "➕ Ajouter les clés de traduction manquantes pour maintenir la cohérence",
      "review_dynamic_keys_manually_t": "🔍 Vérifiez manuellement les clés dynamiques (elles peuvent être valides)",
      "all_translation_keys_are_prope": "✅ Toutes les clés de traduction sont correctement utilisées !",
      "n_next_steps": "🎯 PROCHAINES ÉTAPES :",
      "2_check_the_detailed_report_fo": "2. Consultez le rapport détaillé pour des problèmes spécifiques",
      "help_message": "Utilisation de l'analyseur d'utilisation I18n : nœud i18ntk-usage.js [options] Options : --source-dir <dir>     Répertoire source à analyser (par défaut : ./src) --i18n-dir <dir>       Répertoire I18n (par défaut : ./src/locales) --output-report Générer un rapport détaillé --output-dir <dir>     Répertoire de sortie des rapports (par défaut : ./reports) --help Afficher cette aide Exemples : node i18ntk-usage.js --output-report node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales node i18ntk-usage.js --output-dir=./analysis --output-report",
      "1_review_the_analysis_results": "1. Examinez les résultats de l'analyse dans la console ou dans le rapport généré.",
      "2_run_with_outputreport_for_de": "2. Exécutez avec --output-report pour un rapport détaillé.",
      "3_remove_unused_keys_or_add_mi": "3. Supprimez les clés inutilisées ou ajoutez les clés manquantes à votre code source.",
      "4_rerun_analysis_to_verify_imp": "4. Réexécutez l'analyse pour vérifier les améliorations.",
      "noSourceFilesFound": "Aucun fichier source à analyser trouvé.",
      "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 l'intégralité de la traduction a échoué : {error}",
      "n": "\\n"
    },
    "complete": {
      "configLoadedSuccessfully": "Configuration chargée avec succès",
      "configLoadingFailed": "Échec du chargement de la configuration",
      "title": "🌍 ACHÈVEMENT DE LA TRADUCTION I18NTK",
      "separator": "=============================================================",
      "sourceDir": "📁 Répertoire source : {sourceDir}",
      "sourceLanguage": "🌐 Langue source : {sourceLanguage}",
      "dryRunMode": "🧪 Mode fonctionnement à sec - aucune modification ne sera apportée",
      "languages": "🌍 Langues disponibles : {languages}",
      "addingMissingKeys": "➕ Ajout des clés manquantes aux fichiers de traduction...",
      "processing": "🔄 Traitement {language}...",
      "addedKeys": "✅ Ajouté {count} clés manquantes",
      "changeDetails": "📝 {file}: {key}",
      "andMore": "...et {count} plus",
      "noChangesNeeded": "✅ Aucun changement nécessaire pour {language}",
      "summaryTitle": "📊 RÉSUMÉ D'ACHÈVEMENT",
      "totalChanges": "📝 Modifications totales : {totalChanges}",
      "languagesProcessed": "🌍 Langues traitées : {languagesProcessed}",
      "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
      "nextStepsTitle": "📋 PROCHAINES ÉTAPES",
      "nextStep1": "1. Exécutez une analyse d'utilisation :",
      "nextStep2": "nœud i18ntk-usage.js --output-report",
      "nextStep3": "2. Validez les traductions :",
      "nextStep4": "nœud i18ntk-validate.js",
      "nextStep5": "3. Analysez les modèles :",
      "nextStep6": "nœud i18ntk-analyze.js",
      "allKeysAvailable": "🎉 Toutes les clés de traduction sont désormais disponibles !",
      "runWithoutDryRun": "💡 Exécutez 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 une analyse d'utilisation",
      "reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation de clés communes...",
      "foundMissingKeys": "📋 Trouvé {count} clés manquantes dans l'analyse d'utilisation",
      "couldNotParse": "❌ Impossible d'analyser le rapport d'utilisation. Utilisation de clés communes..."
    },
    "noTranslationLanguagesFound": "Aucune langue de traduction trouvée",
    "failedToAnalyzeLanguage": "Échec de l'analyse de la langue",
    "translationCompletenessAnalysisFailed": "Échec de l'analyse de l'intégralité de la traduction",
    "failedToProcessFile": "Échec du traitement du fichier :",
    "failedToSaveReport": "Échec de l'enregistrement du rapport d'utilisation : {error}",
    "i18nDirectoryDoesNotExist": "Le répertoire I18n n'existe pas : {dir}",
    "reportSavedTo": "Rapport d'utilisation enregistré dans : {reportPath}",
    "sourceDirectoryDoesNotExist": "Le répertoire source n'existe pas : {dir}",
    "noSourceDirectoryConfigured": "(non configur?)"
  },
  "validate": {
    "help_message": "Utilisation du validateur de traduction I18n : nœud i18ntk-validate.js [options] Options : --source-dir <dir>     Répertoire source à analyser (par défaut : ./src) --i18n-dir <dir>       Répertoire I18n (par défaut : ./src/locales) --output-report Générer un rapport détaillé --output-dir <dir>     Répertoire de sortie des rapports (par défaut : ./reports) --help Afficher cette aide Exemples : node i18ntk-validate.js --output-report node i18ntk-validate.js --source-dir=./app --i18n-dir=./locales node i18ntk-validate.js --output-dir=./analysis --output-report",
    "title": "🔍 Validateur de traduction I18n",
    "message": "Démarrage du processus de validation...",
    "sourceDirectory": "📁 Répertoire source : {dir}",
    "sourceLanguage": "🌍 Langue source : {sourceLanguage}",
    "strictMode": "⚙️ Mode strict : {mode}",
    "noTargetLanguages": "Aucune langue cible configurée ; ignorer la validation de la cible. Ajoutez des langues via \"i18ntk init --linguals=de,fr\".",
    "validatingLanguages": "🌍 Validation des langues : {langs}",
    "validatingLanguage": "🔍 Langue de validation : {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ÉSUMÉ DE VALIDATION",
    "validation_failed": "❌ La validation a échoué : {error}",
    "totalErrors": "❌ Erreurs totales : {count}",
    "totalWarnings": "⚠️ Total des avertissements : {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. Corriger les incohérences structurelles",
    "completeMissingTranslations": "3. Compléter les traductions manquantes",
    "rerunValidation": "4. Réexécutez la validation pour vérifier les correctifs",
    "addressWarnings": "Traiter les avertissements pour améliorer la qualité",
    "reviewWarnings": "Examinez les avertissements et corrigez-les le cas échéant",
    "considerRunningWithStrict": "2. Pensez à exécuter avec l'indicateur --strict pour une validation plus stricte",
    "allValidationsPassed": "🎉 Toutes les validations passées !",
    "considerRunningUsageAnalysis": "Envisagez d'exécuter une analyse d'utilisation : nœud i18ntk-usage.js",
    "deletedOldReport": "🗑️ Ancien rapport de validation supprimé",
    "sourceDir": "📁 Répertoire source : {sourceDir}",
    "i18nDir": "🌐Annuaire I18n : {i18nDir}",
    "loadingTranslationFiles": "📋 Chargement des fichiers de traduction...",
    "foundTranslationFilesCount": "✅ Trouvé {count} fichiers de traduction",
    "analyzingTranslations": "🔍 Analyser les 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 erreur",
    "validationFailed": "Échec de la validation : {error}",
    "startingValidationProcess": "🔍 Démarrage du processus de validation...",
    "validationProcessCompletedSuccessfully": "✅ Processus de validation terminé avec succès",
    "stackTrace": "Trace de pile : {stack}",
    "authenticationFailed": "❌ L'authentification a échoué. Accès refusé.",
    "fatalValidationError": "❌ Erreur de validation fatale : {error}",
    "configAccess": "Accéder à la configuration pour validation",
    "configValidated": "Configuration validée avec succès",
    "configError": "Erreur de configuration : {error}",
    "validatorInit": "Initialisation du validateur I18n",
    "validatorInitialized": "Le validateur I18n a été initialisé avec succès",
    "validatorInitError": "Erreur d'initialisation du validateur : {error}",
    "argsParsing": "Analyser les arguments de la ligne de commande",
    "argsParsed": "Arguments de ligne de commande analysés avec succès",
    "argsParseError": "Erreur d'analyse des arguments : {error}",
    "languagesScan": "Scanner les langues disponibles",
    "languagesFound": "Trouvé {count} langues",
    "languagesScanError": "Erreur d'analyse de la langue : {error}",
    "filesScan": "Trouvé {count} fichiers dans {language}",
    "filesScanError": "Erreur d'analyse de fichier : {error}",
    "jsonValidated": "Syntaxe JSON validée : {filePath}",
    "jsonValidationError": "Erreur de validation JSON : {error}",
    "languageValidation": "Langue de validation : {language}",
    "languageValidationError": "Erreur de validation de langue : {error}",
    "fileDeleted": "Fichier supprimé",
    "runStarted": "Démarrage de l'exécution de validation",
    "runCompleted": "L'exécution de la validation s'est terminée avec succès",
    "runError": "Échec de l'exécution de validation : {error}",
    "scriptExecution": "Exécution du script",
    "validationCompleted": "Validation terminée",
    "validationError": "Erreur de validation : {error}",
    "separator": "━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━",
    "languageHeader": "🌐 Langue : {language}",
    "validationResults": "📊 Résultats de validation",
    "noErrors": "✅ Aucune erreur trouvée",
    "noWarnings": "✅ Aucun avertissement trouvé",
    "summaryHeader": "📋 RÉSUMÉ GLOBAL",
    "progressIndicator": "⏳Traitement...",
    "completedIndicator": "✅ Terminé",
    "errorIndicator": "❌ Erreur",
    "warningIndicator": "⚠️ Attention",
    "infoIndicator": "ℹ️Infos",
    "sourceDirNotConfigured": "Répertoire source non configuré",
    "sourceLanguageNotConfigured": "Langue source non configurée",
    "translationFunctionNotInitialized": "La fonction de traduction n'est pas correctement initialisée",
    "sourceLanguageDirectoryNotFound": "Répertoire de 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épertoire non valides détectés",
    "invalidSampleFilePath": "Chemin d'accès au fichier d'exemple non valide",
    "failedToCreateSampleTranslationFile": "Échec de la création d'un exemple de fichier de traduction",
    "invalidFilePathDetected": "Chemin de fichier non valide détecté",
    "failedToWriteFile": "Échec de l'écriture du fichier : {filePath}",
    "invalidSourceDirectory": "Répertoire source invalide : {sourceDir}",
    "invalidSourceLanguageDirectory": "Répertoire de langue source non valide : {sourceDir}"
  },
  "adminCli": {
    "setupPinProtectionTitle": "🔐 Configuration de la protection du code PIN administrateur",
    "setupPinProtectionDescription": "Cela nécessitera un code PIN de 4 à 6 chiffres pour les opérations administratives.",
    "enablePinProtectionPrompt": "Voulez-vous activer la protection par code PIN administrateur ?",
    "setupCancelled": "Configuration de la protection par code PIN administrateur annulée.",
    "enterPinPrompt": "Saisissez un code PIN de 4 à 6 chiffres :",
    "pinFormatError": "❌ Le code PIN doit comporter de 4 à 6 chiffres. Veuillez réessayer.",
    "confirmPinPrompt": "Confirmer le code PIN :",
    "pinMismatchError": "❌ Les codes PIN ne correspondent pas. Veuillez réessayer.",
    "pinProtectionEnabledSuccess": "✅ La protection par code PIN administrateur a été activée avec succès !",
    "pinRecoveryWarning": "⚠️ N'oubliez pas votre code PIN : il ne peut pas être récupéré en cas de perte.",
    "setupPinProtectionFailed": "❌ Échec de la configuration de la protection par code PIN administrateur.",
    "errorSettingUpPin": "❌ Erreur lors de la configuration du code PIN administrateur : {message}",
    "authRequiredForOperation": "🔐 Authentification administrateur requise pour : {operation}",
    "invalidPinFormat": "❌ Format de code PIN invalide. Le code PIN doit comporter de 4 à 6 chiffres.",
    "authenticationSuccess": "✅ Authentification réussie !",
    "invalidPinAttemptsRemaining": "❌ Code PIN invalide. {remaining} tentatives restantes.",
    "authenticationFailedAccessDenied": "❌ L'authentification a échoué. Accès refusé.",
    "authenticationError": "❌ Erreur d'authentification : {message}",
    "pinProtectionNotEnabled": "La protection par code PIN administrateur n’est actuellement pas activée.",
    "disablingPinProtectionTitle": "🔓 Désactivation de la protection du code PIN administrateur",
    "confirmDisablePinProtection": "Êtes-vous sûr de vouloir désactiver la protection du code PIN administrateur ?",
    "operationCancelled": "Opération annulée.",
    "pinProtectionDisabledSuccess": "✅ Protection par code PIN administrateur désactivée.",
    "disablePinProtectionFailed": "❌ Échec de la désactivation de la protection du code PIN administrateur.",
    "errorDisablingPinProtection": "❌ Erreur lors de la désactivation de la protection de l'administrateur : {message}",
    "adminProtectionStatusTitle": "🔐 Statut de protection de l'administrateur",
    "statusEnabled": "Statut : ✅ ACTIVÉ",
    "protectionDetails": "Protection : code PIN de 4 à 6 chiffres requis pour les opérations d'administration",
    "lockoutDetails": "Verrouillage : 3 tentatives infructueuses = verrouillage de 15 minutes",
    "statusDisabled": "Statut : ❌ DÉSACTIVÉ",
    "noAuthRequired": "Protection : Aucune authentification requise",
    "unprotectedRisk": "Risque : les opérations administratives ne sont pas protégées",
    "errorCheckingAdminStatus": "❌ Erreur lors de la vérification du statut d'administrateur : {message}",
    "authRequired": "🔐 Authentification administrateur requise.",
    "invalidPin": "❌ Code 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 administrateur requise pour les opérations sensibles.",
    "enterPin": "Saisissez le code PIN administrateur :",
    "accessGranted": "Accès accordé."
  },
  "adminPin": {
    "setup_title": "🔐 Configuration du code PIN administrateur",
    "setup_separator": "=============================================================",
    "setup_description": "Créez un code PIN de 4 à 6 chiffres pour l'accès administrateur aux paramètres sensibles.",
    "required_for_title": "Ce code PIN sera requis pour :",
    "required_for_1": "• Modification des paramètres de sécurité",
    "required_for_2": "• Modification des configurations avancées",
    "required_for_3": "• Accéder aux outils de débogage",
    "required_for_4": "• Réinitialisation des paramètres",
    "setup_note": "💡 Remarque : vous verrez des astérisques (*) au fur et à mesure que vous tapez - ce ne sont que des caractères de masquage.",
    "setup_digits_only": "Seuls les chiffres 0 à 9 sont acceptés comme chiffres du code PIN.",
    "invalid_pin_length": "❌ Code PIN invalide. Doit contenir de 4 à 6 chiffres (chiffres de 0 à 9 uniquement).",
    "invalid_pin_example": "Exemple : 1234 ou 567890",
    "pins_do_not_match": "❌ Les codes PIN ne correspondent pas.",
    "setup_success": "✅ Le code PIN administrateur a été défini avec succès !",
    "setup_warning": "⚠️ Conservez ce code PIN en sécurité. Il ne peut pas être récupéré en cas de perte.",
    "setup_error": "❌ Erreur lors de la configuration du code PIN :",
    "session_expired": "⏰ La session d'administration a expiré pour cause d'inactivité.",
    "no_pin_set_setting_up": "⚠️ Aucun code PIN administrateur défini. Configuration du code PIN...",
    "no_pin_configured_access_denied": "⚠️ Aucun code PIN administrateur configuré. Accès refusé.",
    "use_admin_settings_to_set_pin": "💡 Utilisez d'abord les paramètres d'administration pour configurer un code PIN.",
    "locked_out": "🔒 L'accès administrateur est verrouillé en raison d'un trop grand nombre de tentatives infructueuses.",
    "wait_before_retry": "Veuillez attendre 5 minutes avant de réessayer.",
    "access_granted": "✅ Accès administrateur accordé.",
    "incorrect_pin": "❌ Code PIN incorrect. {attempts} tentatives restantes.",
    "verify_pin_error": "❌ Erreur lors de la vérification du code PIN :",
    "already_configured": "✅ Le code PIN administrateur est déjà configuré.",
    "optional_setup_title": "🔐 Configuration du code PIN administrateur (facultatif)",
    "optional_setup_description": "La protection par code PIN administrateur ajoute de la sécurité pour les opérations sensibles telles que :",
    "setup_prompt": "Souhaitez-vous configurer un code PIN administrateur ? (o/N) :",
    "skipping_setup": "⏭️ Ignorer la configuration du code PIN administrateur. Vous pourrez le configurer plus tard dans les paramètres.",
    "setup_prompt_error": "❌ Erreur lors de l'invite de configuration du code PIN :",
    "protectedAccess": "Accès protégé : authentification administrateur requise pour les opérations sensibles.",
    "enterPin": "Saisissez le code PIN administrateur :",
    "accessGranted": "Accès accordé.",
    "invalidPin": "❌ Code PIN invalide. Veuillez réessayer.",
    "weak_pin_warning": "⚠️ AVERTISSEMENT : ce code PIN semble faible ou courant.",
    "weak_pin_suggestion": "💡 Pensez à utiliser un code PIN plus fort avec des chiffres variés.",
    "use_anyway_prompt": "Tapez « oui » pour l'utiliser quand même, ou appuyez sur Entrée pour choisir un autre code PIN :",
    "enter_new_pin": "Entrez le nouveau code PIN administrateur (4 à 6 chiffres) :",
    "confirm_pin": "Confirmer le code PIN d'administrateur :",
    "not_set": "Non défini",
    "pin_display_mask": "####"
  },
  "debug": {
    "title": "🔧 Outils de débogage",
    "separator": "=============================================================",
    "mainDebuggerSystemDiagnostics": "1. Diagnostic du système",
    "_consoleTranslationsCheck": "// 2. Vérification des traductions de la console",
    "_exportMissingKeys": "// 3. Exporter les clés de traduction manquantes",
    "_replaceHardcodedConsole": "// 4. Remplacer les chaînes de console codées en dur",
    "_consoleKeyChecker": "// 5. Vérificateur de clé de console",
    "debugLogs": "2. Journaux de débogage",
    "backToMainMenu": "0. Retour au menu principal",
    "selectOption": "Sélectionnez un outil de débogage :",
    "runningDebugTool": "En cours d'exécution {displayName}...",
    "debugToolNotFound": "❌ Outil de débogage introuvable : {toolName}",
    "errorRunningDebugTool": "Erreur lors de l'exécution de l'outil de débogage '{displayName}': {error}",
    "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 parmi la gamme disponible.",
    "contentOf": "📄 Contenu de {filename}:",
    "pressEnterToContinue": "Appuyez sur Entrée pour continuer..."
  },
  "detect_language_mismatches": {
    "tool_title": "🔍 Outil de détection des incompatibilités linguistiques",
    "separator": "=====================================",
    "analyzing_file": "📄 Analyse {language}.json...",
    "error_analyzing_file": "❌ Analyse des erreurs {filename}: {errorMessage}",
    "results_title": "📊 RÉSULTATS DE DÉTECTION DES INADAPTATIONS DE LANGUE",
    "results_separator": "========================================",
    "summary_title": "📋 RÉSUMÉ :",
    "total_files_analyzed": "Total des dossiers analysés : {totalFiles}",
    "files_with_mismatches": "Fichiers avec des discordances : {filesWithMismatches}",
    "total_mismatches_found": "Total des incohérences trouvées : {totalMismatches}",
    "no_mismatches_found": "✅ Aucune incompatibilité de langue trouvée ! Toutes les traductions semblent être dans leurs langues correctes.",
    "detailed_results_title": "🔍 RÉSULTATS DÉTAILLÉS :",
    "file_mismatch_header": "📄 {filename} ({language})",
    "mismatches_count": "Trouvé {count} inadéquation(s):",
    "mismatch_details": "{index}. Clé: {key}",
    "mismatch_value": "Valeur: \"{value}\"",
    "mismatch_issue": "Problème: {description}",
    "recommendations_title": "💡 RECOMMANDATIONS :",
    "recommendation_1": "1. Vérifiez et traduisez toutes les entrées marquées de [TRANSLATE]",
    "recommendation_2": "2. Remplacez les préfixes de langue (par exemple, [DE], [FR]) par des traductions appropriées",
    "recommendation_3": "3. Traduire le texte anglais dans la langue cible appropriée",
    "recommendation_4": "4. Utilisez des équivalents en langue maternelle pour tous les textes destinés aux utilisateurs",
    "recommendation_5": "5. Exécutez à nouveau cet outil après avoir apporté des corrections pour vérifier les correctifs",
    "detailed_report_saved": "📄 Rapport détaillé enregistré dans : {reportPath}",
    "error_saving_report": "❌ Rapport d'erreur lors de l'enregistrement : {errorMessage}",
    "auto_fix_mode": "🔧 Mode de réparation automatique {dryRun}",
    "auto_fix_separator": "=====================================",
    "fixed_file": "✅ Corrigé {filename}",
    "auto_fix_summary_title": "📊 Résumé de la correction automatique :",
    "total_fixes_applied": "Nombre total de correctifs appliqués : {count}",
    "preview_fixes_title": "🔍 Aperçu des correctifs :",
    "fix_details": "{file}: {key}      Vieux: \"{old}\"      Nouveau: \"{new}\"",
    "more_fixes": "... et {count} plus de correctifs",
    "run_with_apply_fixes": "💡 Exécutez avec --apply pour appliquer ces correctifs",
    "error_general": "❌ Erreur :",
    "mainDebuggerSystemDiagnostics": "Débogueur principal/Diagnostics système",
    "exportMissingKeys": "Exporter les clés manquantes",
    "replaceHardcodedConsole": "Remplacer la console codée en dur",
    "consoleKeyChecker": "Vérificateur de clé de console",
    "debugLogs": "Journaux de débogage",
    "backToMainMenu": "Retour au menu principal",
    "invalidChoiceSelectRange": "❌ Choix invalide. Veuillez sélectionner un numéro dans la plage affichée.",
    "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 de journal : {timestamp} - {message}",
    "debugLogsDirectoryNotFound": "Répertoire des journaux de débogage introuvable."
  },
  "help": {
    "title": "📊 AIDE À LA GESTION I18NTK",
    "usage": "Utilisation : nœud main/manage/index.js [options]",
    "interactiveMode": "💡 Utilisation : node main/manage/index.js --command=<command> pour exécution directe",
    "showHelp": "📖 Utiliser : node main/manage/index.js --help pour les commandes disponibles",
    "availableCommands": "📖 Commandes disponibles :",
    "initProject": "🚀 Initialiser de nouvelles langues",
    "analyzeTranslations": "🔍 Analyser les traductions",
    "validateTranslations": "✅ Valider les traductions",
    "checkUsage": "📊 Vérifiez l'utilisation de la clé",
    "initCommand": "init - Initialiser de nouvelles langues",
    "analyzeCommand": "analyser - Analyser les traductions",
    "validateCommand": "validate - Valider les traductions",
    "usageCommand": "utilisation - Vérifier l'utilisation des clés",
    "sizingCommand": "dimensionnement - Analyser le dimensionnement",
    "completeCommand": "complet - Traductions complètes (couverture à 100 %)",
    "summaryCommand": "résumé - Afficher l'état du projet",
    "debugCommand": "debug - Problèmes de traduction de débogage",
    "scannerCommand": "scanner - Rechercher des clés",
    "translateCommand": "traduire - Traduire automatiquement les fichiers de paramètres régionaux",
    "menu": {
      "pressEnterToContinue": "Appuyez sur Entrée pour continuer...",
      "title": "🌐MENU DE GESTION I18NTK",
      "description": "Menu interactif pour gérer l'internationalisation",
      "exit": "🚪 Quitter"
    },
    "commands": {
      "init": "init - Initialiser de nouvelles langues",
      "analyze": "analyser - Analyser les traductions",
      "validate": "validate - Valider les traductions",
      "usage": "utilisation - Vérifier l'utilisation des clés",
      "sizing": "dimensionnement - Analyser le dimensionnement",
      "complete": "complet - Traductions complètes (couverture à 100 %)",
      "summary": "résumé - Afficher l'état du projet",
      "debug": "debug - Problèmes de traduction de débogage"
    },
    "options": {
      "sourceDir": "--rép-source <dir>     Répertoire source à analyser",
      "output": "--sortir <file>        Fichier de sortie pour le rapport",
      "verbose": "--verbose, -v Afficher des informations détaillées",
      "keepReports": "--keep-reports Conserver les rapports existants",
      "deleteReports": "--delete-reports Supprimer les rapports existants",
      "help": "--help, -h Afficher cette aide"
    },
    "examples": {
      "title": "Exemples :",
      "example1": "nœud i18ntk-manage.js",
      "example2": "nœud i18ntk-manage.js --source-dir ./locales",
      "example3": "nœud i18ntk-manage.js --output summary-report.txt",
      "example4": "nœud i18ntk-manage.js --verbose",
      "example5": "nœud 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érifiez l'utilisation de la clé",
      "completeTranslations": "🎯 Traductions complètes (couverture à 100%)",
      "showSizing": "📏 Analyser le dimensionnement",
      "runWorkflow": "🔄 Exécuter un flux de travail complet",
      "showStatus": "📋 Afficher l'état du projet",
      "deleteReports": "🗑️ Supprimer tous les rapports",
      "changeLanguage": "🌍 Changer la langue de l'interface utilisateur",
      "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 de référence uniquement."
    },
    "i18n_helper": {
      "translation_file_not_found": "Fichier de traduction introuvable : {translationFile}",
      "error_loading_translations": "Erreur lors du chargement des traductions : {errorMessage}",
      "translation_not_found": "Traduction non trouvée pour clé : {key}",
      "translation_key_not_string": "La clé de traduction ne se résout pas en 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",
    "initializationCancelled": "🚫 Initialisation annulée par l'utilisateur.",
    "sourceDirectoryLabel": "📁 Répertoire des sources : {dir}",
    "requiredTitle": "Initialisation requise",
    "requiredBody": "Ce projet doit être initialisé avant d'exécuter cette commande.",
    "promptRunNow": "Souhaitez-vous lancer l'initialisation maintenant ? (o/N) :",
    "sourceLanguageLabel": "🌍 Langue source : {language}",
    "detectedI18nFrameworks": "🔍 Framework(s) i18n détecté(s) : {frameworks}",
    "pinMustBe4Digits": "🔐 Le code PIN doit être composé de 4 chiffres.",
    "existingDirectoriesFound": "📁 Répertoires de traduction existants trouvés :",
    "useExistingDirectoryPrompt": "Voulez-vous utiliser le répertoire existant ? (o/n)",
    "selectDirectoryPrompt": "Sélectionnez un répertoire en saisissant le numéro (ou choisissez 'Créer un nouveau répertoire')",
    "enterNewDirectoryName": "Entrez le nom de votre nouveau répertoire de traduction",
    "createdNewDirectory": "✅ Création d'un nouveau répertoire : {dir}",
    "directoryAlreadyExists": "⚠️ L'annuaire existe déjà : {dir}",
    "invalidDirectoryName": "❌ Nom de répertoire fourni non valide.",
    "usingExistingDirectory": "Utilisation du répertoire existant : {dir}",
    "adminPinSetupOptional": "🔐 Configuration du code PIN administrateur en option (recommandé pour la sécurité)",
    "adminPinSeparator": "-------------------------------",
    "adminPinDescription1": "PIN administrateur : numéro à 4 chiffres pour un accès sécurisé",
    "adminPinDescription2": "Laissez vide pour ignorer la configuration du code PIN",
    "adminPinDescription3": "Si vous définissez un code PIN, il sera requis pour toutes les futures actions sécurisées.",
    "adminPinDescription4": "Cryptage AES-256-GCM utilisé pour le stockage sécurisé du code PIN.",
    "adminPinSetupPrompt": "Saisissez le code PIN administrateur (4 chiffres) ou laissez ce champ vide pour ignorer :",
    "skippingAdminPinSetup": "Ignorer la configuration du code PIN administrateur...",
    "settingUpAdminPin": "🔐 Configuration du code PIN administrateur...",
    "enterAdminPin": "Entrez le code PIN administrateur :",
    "confirmAdminPin": "Confirmer le code PIN administrateur :",
    "pinMismatch": "Les codes PIN ne correspondent pas. Veuillez réessayer.",
    "adminPinSetupSuccess": "🔐 Configuration du code PIN administrateur réussie !",
    "adminPinSetupFailure": "🔐 La configuration du code PIN administrateur a échoué. Veuillez réessayer.",
    "adminProtectionEnabled": "🔐 Protection de l'administrateur activée. Toutes les actions nécessitent une authentification par code PIN.",
    "adminProtectionDisabled": "🔐 Protection de l'administrateur désactivée. Toutes les actions sont désormais disponibles sans code PIN.",
    "autoDetectedI18nDirectory": "Répertoire i18n détecté automatiquement : {directory}",
    "initializingProject": "⚙️ Initialisation de la configuration du projet...",
    "createdSampleTranslationFile": "✅ Exemple de fichier de traduction créé : {file}",
    "languageSelectionTitle": "🌐 Configuration de la langue",
    "available": "Disponible",
    "defaultLanguages": "📝 Langues par défaut : {languages}",
    "enterLanguageCodes": "🎯 Saisissez les codes de la langue cible (séparés par des virgules, par exemple de, es, fr, ru) :",
    "targetLanguages": "🌍 Langues cibles",
    "foundSourceFiles": "📄 Trouvé {count} fichiers sources à analyser",
    "processingLanguage": "🔄 Langage de traitement : {language}",
    "fileProcessingResult": "✅ Traité {file}: {translated}/{total} clés ({percentage}%)",
    "overallProgress": "📊 Progrès global : {translated}/{total} clés traitées ({percentage}%)",
    "initializationSummaryTitle": "📋 Résumé de l'initialisation",
    "languageSummary": "{icon} {name} ({code}): {percentage}% complet",
    "languageFiles": "📄 Fichiers : {count}",
    "languageKeys": "🔤 Clés : {translated}/{total}",
    "languageMissing": "⚠️ Manquant : {count}",
    "initializationCompletedSuccessfully": "🎉 Initialisation du projet terminée avec succès !",
    "nextStepsTitle": "🚀 Prochaines étapes",
    "nextStep1": "1. Vérifiez les fichiers de traduction générés dans votre répertoire locales/",
    "nextStep2": "2. Ajoutez des traductions pour chaque langue cible",
    "nextStep3": "3. Exécutez à nouveau 'npm run i18ntk' pour valider les traductions",
    "detectedFrameworks": "✅ Framework(s) i18n détecté(s) : {frameworks}",
    "setup": {
      "title": "Installation",
      "question": "Question de configuration",
      "opt_single": "Fichier unique",
      "opt_modular": "Modulaire",
      "opt_existing": "Existant",
      "choice_prompt": "Choisissez une option :",
      "opt_confirm": "Confirmer",
      "opt_cancel": "Annuler",
      "apply_all_prompt": "Appliquer cette structure à toutes les langues ? (o/N) :",
      "per_language_intro": "Vous avez choisi de configurer les langues individuellement. Voici les langues disponibles :",
      "available_languages": "Langues disponibles : {languages}",
      "include_prompt": "Saisissez les codes de langue à inclure, séparés par des virgules (par exemple, « de,fr,es ») :"
    },
    "warnings": {
      "noPackageJson": "Aucun package.json trouvé. Impossible de détecter automatiquement le framework i18n."
    },
    "errorsPackageJsonRead": "Erreur de lecture de package.json : {error}",
    "errorsNoFramework": "Aucun framework i18n détecté. Veuillez en installer un ou le spécifier manuellement.",
    "suggestions": {
      "noFramework": "Aucun framework i18n détecté. Pensez à utiliser l'un des éléments suivants :",
      "installFramework": "Pour installer un framework, exécutez : npm install <package-name>"
    },
    "frameworks": {
      "react": "- Réagir i18next (react-i18next)",
      "vue": "-Vue i18n (vue-i18n)",
      "i18next": "- i18suivant (i18suivant)",
      "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": {
      "errorExecutingCommand": "Erreur lors de l'exécution de la commande : {error}",
      "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 non valide détecté",
      "initializationFailed": "L'initialisation a échoué : {error}",
      "noFramework": "Aucun framework i18n détecté. Continuez avec le mode générique.",
      "packageJsonRead": "Erreur de lecture de package.json."
    },
    "processingFile": "Traitement {file} pour {language}...",
    "fileAlreadyExistsMerging": "Déposer {file} existe déjà. Fusion de nouvelles clés.",
    "createdNewFile": "Nouveau fichier créé : {file}",
    "updatedFile": "Fichier mis à jour : {file}",
    "skippingExcludedFile": "Saut {file} pour {language} car il est exclu.",
    "continuingWithoutAdminPin": "Continuer sans configurer le code PIN administrateur.",
    "createdSourceLanguageDirectory": "Répertoire de langue source créé : {dir}",
    "errorSettingUpAdminPin": "Erreur lors de la configuration du code PIN administrateur : {error}",
    "noTargetLanguagesSpecified": "Aucune langue cible spécifiée.",
    "translationFilesCreatedWarning": "Les fichiers de traduction ont été créés avec des espaces réservés ; examen avant utilisation en production.",
    "warningCannotReadSourceDir": "Attention : impossible de lire le répertoire source {dir}: {error}",
    "warningInvalidLanguageCodes": "Attention : codes de langue invalides ignorés : {languages}",
    "warningProceedingWithoutFramework": "Poursuite sans framework i18n détecté.",
    "backup": {
      "title": "Param?tres de sauvegarde",
      "description": "Les sauvegardes sont d?sactiv?es par d?faut pour ?viter la r?cursion et la pollution du d?p?t.",
      "enablePrompt": "Activer les sauvegardes automatiques ? (o/N) : ",
      "keepPrompt": "Combien de sauvegardes conserver automatiquement (1-3, d?faut 1) : "
    },
    "completionSummaryTitle": "R?sum? de fin",
    "completionSummaryBasicTitle": "R?sum? de fin (basique)",
    "totalChanges": "Changements totaux : {count}",
    "languagesProcessed": "Langues trait?es : {count}",
    "missingKeysAdded": "Cl?s manquantes ajout?es : {count}",
    "reportPrompt": "Voulez-vous g?n?rer un rapport ? (O/n) : ",
    "reportGenerated": "Rapport g?n?r? : {reportPath}",
    "reportFailed": "?chec de g?n?ration du rapport : {error}",
    "completionError": "Erreur pendant la finalisation : {error}",
    "optimize": {
      "title": "Optimisation de la taille du paquet",
      "preview": "Execution de l apercu d optimisation des locales...",
      "reduceTip": "Vous pouvez reduire la taille du paquet en selectionnant uniquement les langues necessaires.",
      "prompt": "Voulez-vous lancer l optimisation interactive maintenant ? (o/N): ",
      "starting": "Demarrage de l optimisation interactive des locales...",
      "completed": "Optimisation du paquet terminee.",
      "later": "Vous pouvez lancer l optimisation des locales plus tard avec :",
      "unavailable": "Impossible de proposer l optimisation des locales : {error}"
    }
  },
  "language": {
    "title": "🌍 Changer de 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": "La langue a été modifiée comme suit : {language}",
    "changeFailed": "Échec du changement de langue : {error}",
    "pressEnterToContinue": "Appuyez sur Entrée pour continuer..."
  },
  "maintainLanguagePurity": {
    "workflow_title": "🚀 Flux de travail de maintenance de la pureté de la langue",
    "step1_title": "📊 ÉTAPE 1 : Évaluation initiale de la pureté de la langue",
    "step2_title": "🔧 ÉTAPE 2 : Détecter et corriger automatiquement les incompatibilités de langue",
    "step3_title": "🌐 ÉTAPE 3 : Appliquer les traductions automatiques",
    "step4_title": "✅ ÉTAPE 4 : Évaluation finale de la pureté de la langue",
    "workflow_error": "❌ Erreur de flux de travail : {errorMessage}",
    "running_initial_validation": "Exécution de la validation initiale de la pureté du langage...",
    "initial_assessment_complete": "✅ Bilan initial terminé : {count} violations constatées",
    "initial_assessment_warnings": "⚠️ Premier bilan complété par des avertissements",
    "detecting_fixing_mismatches": "Détecter et corriger les inadéquations linguistiques...",
    "detection_complete_applying_fixes": "Détection terminée. Application des correctifs automatiques...",
    "mismatch_fixes_complete": "✅ Corrections de non-concordance linguistique terminées : {count} correctifs appliqués",
    "mismatch_fixes_warnings": "⚠️ Corrections de non-concordance de langue complétées par des avertissements",
    "applying_automatic_translations": "Appliquer des traductions automatiques...",
    "translation_preview_complete": "Aperçu de la traduction terminé. Appliquer des traductions..."
  },
  "menu": {
    "title": "🌐MENU DE GESTION I18NTK",
    "separator": "=============================================================",
    "options": {
      "init": "🚀 Initialiser de nouvelles langues",
      "analyze": "🔍 Analyser les traductions",
      "validate": "✅ Valider les traductions",
      "usage": "📊 Vérifiez l'utilisation de la clé",
      "complete": "🎯 Traductions complètes (couverture à 100%)",
      "sizing": "📏 Analyser le dimensionnement",
      "fix": "🛠️ Correction des traductions d'espaces réservés",
      "scanner": "🔍 Rechercher les problèmes i18n",
      "translate": "🌐 Traduction automatique",
      "workflow": "🔄 Exécuter un flux de travail complet",
      "status": "📋 Afficher l'état du projet",
      "delete": "🗑️ Supprimer tous les rapports",
      "language": "🌍 Changer la langue de l'interface utilisateur",
      "settings": "⚙️ Paramètres",
      "help": "❓ Aide",
      "debug": "🔧 Outils de débogage",
      "exit": "🚪 Quitter"
    },
    "update": "📦 Forfait de mise à jour",
    "goodbye": "👋 Au revoir !",
    "invalidChoice": "Choix invalide. Veuillez sélectionner 0-15.",
    "returning": "Retour au menu principal...",
    "invalidOption": "Option invalide. Veuillez réessayer.",
    "nonInteractiveModeWarning": "Mode non interactif détecté. Menu affiché à titre de référence uniquement.",
    "useDirectExecution": "Utiliser : node main/manage/index.js --command=<command> pour une exécution directe.",
    "useHelpForCommands": "Utilisez : node main/manage/index.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 détecté automatiquement : {directory}",
    "executingCommand": "Exécution de la commande : {command}",
    "unknownCommand": "Commande inconnue : {command}",
    "languageOption": "{index}. {displayName}{current}",
    "debugTools": {
      "1": "Analyse du fichier journal",
      "2": "Analyse de l'utilisation des clés de traduction",
      "3": "Analyse de l'exhaustivité de la traduction",
      "4": "Analyse du format de traduction",
      "5": "Analyse du type de traduction",
      "6": "Analyse de la structure de la traduction"
    },
    "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}% correspondre)",
      "processing_language_files": "🔄 Traitement {count} fichiers de langue...",
      "file_not_found": "⚠️ Fichier introuvable : {file}",
      "processing_translations": "🌍 Traitement {code} traductions...",
      "backup_created": "📋 Sauvegarde créée : {filename}",
      "error_parsing_json": "❌ Erreur d'analyse {code}.json : {errorMessage}",
      "existing_keys_found": "📊 {code}: Trouvé {count} clés existantes",
      "error_writing_json": "❌ Erreur d'écriture {code}.json : {errorMessage}",
      "translations_replaced": "📊 {code}: {count} traductions remplacé",
      "translation_replacement_complete": "✅ Remplacement de la traduction terminé !",
      "total_replacements": "📊 Remplacements totaux : {count}",
      "dry_run_mode": "⚠️ MODE DRY RUN - Aucun fichier n'a été modifié",
      "tool_title": "🌍 Remplacement de traduction native v1.9.1",
      "tool_separator": "======================================",
      "dry_run_warning": "⚠️ Fonctionnement en mode DRY RUN - aucun fichier ne sera modifié",
      "error_during_replacement": "❌ Erreur lors du remplacement de la traduction :"
    }
  },
  "config": {
    "dirFallbackWarning": "⚠️ Annuaire {dir} pas trouvé. En utilisant {fallback}.",
    "dirInvalidError": "❌ Répertoire invalide : {dir}"
  },
  "operations": {
    "completed": "✅Opération terminée avec succès !",
    "deleteReportsTitle": "🗑️ Supprimer les rapports et les journaux",
    "scanningForFiles": "🔍 Recherche de fichiers à supprimer...",
    "noFilesFoundToDelete": "✅ Aucun fichier trouvé à supprimer.",
    "availableDirectories": "📁 Répertoires disponibles :",
    "allDirectories": "Tous les répertoires",
    "andMore": "et plus encore...",
    "cancelOption": "Annuler",
    "cancelReportOption": "Annuler / Revenir au menu",
    "invalidSelection": "❌ Sélection invalide.",
    "foundFilesInSelectedDirectories": "📊 Trouvé {count} fichiers 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": "⚠️ Etes-vous sûr de vouloir supprimer ces fichiers ? (o/N) :",
    "deletedFile": "✅ Supprimé : {filename}",
    "failedToDeleteFile": "❌ Échec de la suppression {filename}: {error}",
    "cancelled": "❌Opération annulée.",
    "init": {
      "title": "🚀 Initialiser une nouvelle langue"
    },
    "usage": {
      "title": "📊 Vérifier l'utilisation des clés",
      "noUsedKeysHint": "Traductions trouvées mais aucune utilisation dans la source. Vérifiez --source-dir et translationPatterns."
    },
    "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 une analyse d'utilisation. Utilisation des clés manquantes courantes.",
      "reportNotFound": "⚠️ Rapport d'utilisation introuvable. Générer une nouvelle analyse...",
      "foundMissingKeys": "🔍 Trouvé {count} clés manquantes dans l'analyse d'utilisation",
      "couldNotParse": "⚠️ Impossible d'analyser le rapport d'utilisation. Utilisation des clés manquantes courantes.",
      "title": "🎯 COMPLÉTER LES 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 {language}...",
      "addedKeys": "✅ Ajouté {count} clés",
      "changeDetails": "📝 {file}: {key}",
      "noChangesNeeded": "✅ Aucun changement nécessaire pour {language}",
      "summaryTitle": "📊 RÉSUMÉ D'ACHÈVEMENT",
      "totalChanges": "📝 Modifications totales : {totalChanges}",
      "languagesProcessed": "🌐 Langues traitées : {languagesProcessed}",
      "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}",
      "nextStepsTitle": "📋 PROCHAINES ÉTAPES",
      "nextStep1": "1. Exécutez une analyse d'utilisation :",
      "nextStep2": "2. Validez les traductions :",
      "nextStep3": "3. Analyser l'exhaustivité :",
      "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 package i18n-toolkit",
      "description": "Cela mettra à jour le package 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 ? (o/N) :",
      "updating": "Mise à jour du package... 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": "chemin_validation_failed",
    "invalidInputType": "invalid_input_type",
    "pathTraversalAttempt": "path_traversal_attempt",
    "pathValidated": "✅ Parcours validé avec succès",
    "pathValidationError": "chemin_validation_erreur",
    "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 grande",
    "jsonParseError": "Sécurité : erreur d'analyse JSON : {errorMessage}",
    "inputContainsDisallowedCharacters": "Sécurité : l'entrée contient des caractères non autorisés",
    "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 DE SÉCURITÉ] {timestamp}: {event}",
    "contentTooLarge": "Sécurité : Contenu trop volumineux pour le fichier : {validatedPath}",
    "inputDisallowedCharacters": "Sécurité : l'entrée contient des caractères non autorisés",
    "unknownCommandArg": "Argument de commande inconnu",
    "logMessage": "[SÉCURITÉ {level}] {timestamp}: {event}",
    "alertMessage": "[ALERTE DE SÉCURITÉ] {timestamp}: {event}",
    "securityWarning": "[AVERTISSEMENT DE SÉCURITÉ] {timestamp}: {event}",
    "json_parse_error": "Sécurité : erreur d'analyse JSON : {errorMessage}",
    "file_too_large": "Fichier trop volumineux",
    "file_read_error": "Erreur de lecture du fichier",
    "content_too_large_for_file": "Contenu trop volumineux pour le fichier",
    "file_write_error": "Erreur d'écriture de fichier",
    "json_string_too_large": "Chaîne Json trop grande",
    "recursion_detected": "Récursion détectée dans {operation}",
    "operation_timeout": "Délai d'expiration de l'opération : {operation}",
    "operation_error": "Erreur de fonctionnement dans {operation}: {error}",
    "directory_read_error": "Erreur de lecture du répertoire : {errorMessage}",
    "security_alert": "Alerte de sécurité"
  },
  "settings-cli": {
    "settings": {
      "mainMenu": {
        "title": "Menu principal :",
        "uiSettings": "Paramètres de l'interface utilisateur",
        "uiSettingsDesc": "Options de langue, de thème et d'interface",
        "directorySettings": "Paramètres du répertoire",
        "directorySettingsDesc": "Chemins des répertoires source et de sortie",
        "scriptDirectorySettings": "Paramètres du répertoire de scripts",
        "scriptDirectorySettingsDesc": "Chemins de répertoire pour les opérations de script individuelles",
        "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": "Paramètres de sauvegarde et de restauration",
        "resetToDefaults": "Réinitialiser aux valeurs 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 les paramètres actuels dans un fichier",
        "updatePackage": "Package de mise à jour",
        "updatePackageDesc": "Mettez à jour le package i18n-toolkit via npm",
        "help": "Aide",
        "helpDesc": "Afficher des informations d'aide détaillées",
        "quit": "Quitter",
        "quitDesc": "Quitter les paramètres (avec invite de sauvegarde si nécessaire)",
        "unsavedChangesWarning": "⚠️ Vous avez des modifications non enregistrées",
        "saveChangesBeforeQuit": "Voulez-vous enregistrer les modifications avant de quitter ? (o/N) :",
        "selectOption": "Sélectionnez une option :",
        "goodbyeMessage": "Merci d'utiliser le gestionnaire de paramètres i18n !"
      },
      "goodbyeMessage": "Merci d'utiliser le gestionnaire de paramètres i18n !",
      "relativePathHint": "Utilisez les chemins relatifs de ce répertoire (par exemple, ./src/i18n/locales)",
      "currentDirectory": "Répertoire du projet actuel"
    },
    "settings_manager": {
      "error_loading_settings": "❌ Erreur de chargement des paramètres :",
      "error_saving_settings": "❌ Erreur lors de l'enregistrement des paramètres :",
      "error_setting_value": "❌ Valeur de réglage d'erreur :",
      "missing_required_setting": "❌ Paramètre obligatoire 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 doivent être un objet",
      "exclude_files_must_be_array": "❌excludeFiles doit être un tableau",
      "exclude_dirs_must_be_array": "❌ ExclureDirs 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 maximal de fichiers simultanés non valide. Doit être un nombre positif",
      "invalid_sizing_threshold": "❌ Seuil de dimensionnement invalide. Doit être un nombre positif",
      "invalid_timeout": "❌ Délai d'expiration invalide. Doit être d'au moins 1 000 ms",
      "invalid_sizing_format": "❌ Format de dimensionnement invalide : {sizingFormat}. Formats valides : {validFormats}",
      "error_validating_settings": "❌ Erreur lors de la 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}' n'est pas pris en charge. Disponible: {availableLanguages}",
      "ui_language_set": "🌍 Langue de l'interface utilisateur définie sur : {language}"
    }
  },
  "settings": {
    "title": "⚙️ Gestion des paramètres",
    "separator": "=============================================================",
    "goodbyeMessage": "Merci d'utiliser le gestionnaire de paramètres i18ntk !",
    "relativePathHint": "Utilisez les chemins relatifs de ce répertoire (par exemple, ./src/i18n/locales)",
    "currentDirectory": "Répertoire du projet actuel",
    "startingSettings": "Paramètres de démarrage :",
    "pin": "ÉPINGLE:",
    "reportBug": {
      "title": "Signaler un bug",
      "description": "Signalez tout problème ou bug que vous rencontrez",
      "guidance": "Pour signaler les problèmes efficacement :",
      "checkLogs": "1. Vérifiez les journaux de débogage dans le répertoire de votre projet",
      "documentIssue": "2. Documentez le problème avec les étapes à reproduire",
      "contactSupport": "3. Contactez votre administrateur système ou votre équipe d'assistance",
      "completed": "Affichage des instructions de signalement de bogues",
      "instructions": "Suivez les instructions ci-dessus pour signaler le bug."
    },
    "mainMenu": {
      "title": "Menu principal :",
      "uiSettings": "Paramètres de l'interface utilisateur",
      "uiSettingsDesc": "Options de langue, de thème et d'interface",
      "directorySettings": "Paramètres du répertoire",
      "directorySettingsDesc": "Chemins des répertoires source et de sortie",
      "processingSettings": "Paramètres de traitement",
      "processingSettingsDesc": "Taille du lot, simultanéité et performances",
      "advancedSettings": "Paramètres avancés",
      "advancedSettingsDesc": "Options de validation, de journalisation et d'experts",
      "viewAllSettings": "Afficher tous les paramètres",
      "viewAllSettingsDesc": "Afficher la configuration actuelle",
      "importExport": "Importer/Exporter",
      "updatePackage": "Package de mise à jour",
      "updatePackageDesc": "Mettez à jour le package i18n-toolkit via npm",
      "importExportDesc": "Paramètres de sauvegarde et de restauration",
      "resetToDefaults": "Réinitialiser aux valeurs 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 les paramètres actuels dans un fichier",
      "help": "Aide",
      "helpDesc": "Afficher des informations d'aide détaillées",
      "quit": "Quitter",
      "quitDesc": "Quitter les paramètres (avec invite de sauvegarde si nécessaire)",
      "unsavedChangesWarning": "⚠️ Vous avez des modifications non enregistrées",
      "saveChangesBeforeQuit": "Voulez-vous enregistrer les modifications avant de quitter ? (o/N) :",
      "selectOption": "Sélectionnez une option :",
      "goodbyeMessage": "Merci d'utiliser le gestionnaire de paramètres i18n !",
      "selectSettingPrompt": "Sélectionnez un paramètre à modifier (ou « b » pour revenir en arrière) :",
      "enterNewValue": "Entrez une nouvelle valeur :",
      "updatedSuccessfully": "{setting} mis à jour avec succès !",
      "scriptDirectorySettings": "Paramètres du répertoire 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. S’ils ne sont pas définis, les paramètres globaux seront utilisés.",
      "currentDirectory": "Répertoire du projet actuel",
      "securitySettings": "Paramètres de sécurité",
      "securitySettingsDesc": "Code PIN administrateur et autres options de sécurité",
      "backupSettings": "Paramètres de sauvegarde",
      "backupSettingsDesc": "Sauvegarder et restaurer les paramètres de configuration",
      "autoTranslate": "Traduction automatique",
      "autoTranslateDesc": "Ajuster les espaces reserves, la concurrence, les lots et les rapports"
    },
    "updatePackage": {
      "title": "Package de mise à jour",
      "description": "Mettez à jour le package i18n-toolkit via npm",
      "command": "npm mise à jour i18ntk -g",
      "success": "Mise à jour terminée avec succès.",
      "failed": "La mise à jour a échoué.",
      "prompt": "Voulez-vous mettre à jour le package maintenant ? (o/N) :",
      "promptDesc": "Remarque : Cela mettra à jour le package i18ntk vers la dernière version.",
      "confirm": "oui",
      "cancelled": "Mise à jour annulée.",
      "error": "Échec de la mise à jour du package",
      "updating": "Mise à jour du package..."
    },
    "admin": {
      "selectOption": "Sélectionnez l'option :",
      "updateSuccess": "Code PIN administrateur mis à jour avec succès !",
      "updateFailed": "Échec de la mise à jour du code PIN administrateur.",
      "protectionRemoved": "Protection par code PIN administrateur supprimée.",
      "configSuccess": "PIN administrateur configuré avec succès !",
      "configFailed": "Échec de la configuration du code PIN administrateur.",
      "setupPinPrompt": "Souhaitez-vous configurer un code PIN administrateur ? (o/N) :",
      "pinUpdatedSuccess": "Code PIN administrateur mis à jour avec succès !",
      "pinUpdatedFailed": "Échec de la mise à jour du code PIN administrateur.",
      "pinRemoved": "Protection par code PIN administrateur supprimée.",
      "pinConfiguredSuccess": "PIN administrateur configuré avec succès !",
      "pinConfiguredFailed": "Échec de la configuration du code PIN administrateur.",
      "accessDenied": "❌ Accès refusé. Retour au menu.",
      "setupPin": "🔐 Configuration du code PIN administrateur...",
      "setupFailed": "❌ Échec de la configuration du code PIN administrateur. Paramètre non modifié.",
      "pinConfigured": "📌 Le code PIN administrateur est actuellement configuré.",
      "options": "Possibilités :",
      "changePin": "1) Modifier le code PIN existant",
      "removePin": "2) Supprimer la protection par code PIN",
      "cancel": "3) Annuler",
      "verifyCurrentPin": "🔐 Vérifiez d'abord le code PIN actuel :",
      "settingNewPin": "🔄 Configuration d'un nouveau code PIN...",
      "verifyToRemove": "🔐 Vérifiez le code PIN actuel pour supprimer la protection :",
      "noPinConfigured": "🔓 Aucun code PIN administrateur n'est actuellement configuré.",
      "pinBenefits": "La configuration du code PIN administrateur ajoutera de la sécurité pour :",
      "benefitSecurity": "• Modification des paramètres de sécurité",
      "benefitAdvanced": "• Modification des configurations avancées",
      "benefitDebug": "• Accéder aux outils de débogage",
      "benefitReset": "• Réinitialisation des paramètres",
      "setupCancelled": "⏭️ Configuration du code PIN administrateur annulée.",
      "operationCancelled": "❌Opération annulée.",
      "startingSettings": "🎛️ Démarrage de la CLI des paramètres...",
      "authRequired": "🔒 Authentification administrateur requise pour : {label}",
      "pinSetupTitle": "Configuration du code PIN administrateur",
      "browserOpenFailed": "Impossible d'ouvrir automatiquement le navigateur.",
      "manualVisit": "Veuillez visiter manuellement : {url}",
      "browserOpened": "✅ Navigateur ouvert avec succès !"
    },
    "importExport": {
      "title": "Paramètres d'importation/exportation",
      "export": "Paramètres d'exportation",
      "import": "Paramètres d'importation",
      "backup": "Créer une sauvegarde",
      "enterFilename": "Entrez le nom du fichier (ou appuyez sur Entrée par défaut) :",
      "exportSuccess": "Paramètres exportés vers {file}",
      "exportFailed": "Échec de l'exportation des paramètres : {error}",
      "importFilename": "Entrez le nom du fichier à importer :",
      "fileNotFound": "Fichier introuvable.",
      "invalidFormat": "Format de fichier de paramètres non valide.",
      "confirmImport": "Cela remplacera tous les paramètres actuels. Continuer? (o/N) :",
      "importSuccess": "Paramètres importés avec succès.",
      "importFailed": "Échec de l'importation des paramètres : {error}",
      "backupSuccess": "Sauvegarde créée : {file}",
      "backupFailed": "Échec de la création de la sauvegarde : {error}",
      "exportFilenamePrompt": "Entrez le nom du fichier d'exportation :",
      "importConfirm": "Importer ce fichier de paramètres ? (o/N) :",
      "importFilenamePrompt": "Entrez le nom du fichier d'importation :",
      "manageBackups": "Gérer les sauvegardes",
      "restore": "Restaurer les paramètres"
    },
    "selectOption": "Sélectionnez une option :",
    "resetToDefaultsTitle": "Réinitialiser les paramètres aux valeurs par défaut",
    "resetWarning1": "⚠️ Cela réinitialisera TOUS les paramètres à leurs valeurs par défaut.",
    "resetWarning2": "Cette action ne peut pas être annulée.",
    "resetConfirm": "Êtes-vous sûr de vouloir continuer ? (o/N) :",
    "resetSuccess": "Les paramètres ont été réinitialisés avec succès aux valeurs par défaut.",
    "resetFailed": "Échec de la réinitialisation des paramètres : {error}",
    "resetDone": "Les paramètres ont été réinitialisés avec succès aux valeurs par défaut.",
    "resetScriptDirsDone": "Les répertoires de scripts ont été réinitialisés avec succès aux valeurs par défaut du système.",
    "saveSuccess": "Paramètres enregistrés avec succès.",
    "saveFailed": "Échec de l'enregistrement des paramètres.",
    "saveError": "Paramètres fournis non valides",
    "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, le thème et les préférences de base de l'interface utilisateur",
      "navigation2": "2. Paramètres du répertoire - Définir les répertoires source et de sortie pour les fichiers de traduction",
      "navigation3": "3. Paramètres de traitement - Configurer les options de taille de lot, de concurrence et de performances",
      "navigation4": "4. Paramètres avancés - Accédez aux options de validation, de journalisation et de configuration experte",
      "categoriesTitle": "Catégories de paramètres",
      "categoryUI": "• Paramètres de l'interface utilisateur : langue de l'interface, thème de couleur et préférences d'affichage.",
      "categoryDirectory": "• Paramètres du répertoire : emplacement des fichiers source et répertoires du rapport de sortie",
      "categoryProcessing": "• Paramètres de traitement : traitement par lots, limites de fichiers et réglage des performances",
      "categoryAdvanced": "• Paramètres avancés : mode débogage, journalisation d'audit et options de sécurité",
      "envVarsTitle": "Variables d'environnement",
      "envVar1": "• I18N_SOURCE_DIR : remplace le chemin du répertoire source par défaut.",
      "envVar2": "• I18N_OUTPUT_DIR : remplace le chemin du répertoire de sortie par défaut.",
      "envVar3": "• I18N_DEBUG : activer le mode débogage (vrai/faux)",
      "cliUsageTitle": "Exemples d'utilisation de la CLI",
      "cliUsage1": "• npx i18ntk --settings : ouvrir le menu des paramètres interactifs",
      "cliUsage2": "• npx i18ntk --settings --lang de : ouvrir les paramètres en allemand",
      "cliUsage3": "• npx i18ntk --reset-settings : réinitialiser tous les paramètres par défaut",
      "navigation": "Utilisez les touches numériques pour sélectionner les options, « b » pour revenir en arrière",
      "editing": "Entrez de nouvelles valeurs lorsque vous y êtes invité ou appuyez sur Entrée pour conserver les valeurs actuelles.",
      "saving": "Utilisez « s » pour enregistrer les modifications avant de quitter",
      "reset": "Utilisez l'option 7 pour réinitialiser tous les paramètres aux valeurs par défaut"
    },
    "categories": {
      "uiSettings": "Paramètres de l'interface utilisateur",
      "directorySettings": "Paramètres du répertoire",
      "processingSettings": "Paramètres de traitement",
      "advancedSettings": "Paramètres avancés",
      "scriptDirectorySettings": "Paramètres du répertoire de scripts",
      "securitySettings": "Paramètres de sécurité",
      "autoTranslate": "Parametres de traduction automatique"
    },
    "security": {
      "title": "🔐 Paramètres de sécurité",
      "description": "Configurer les options de protection et de sécurité du code PIN administrateur",
      "currentPin": "Code PIN actuel :",
      "pinConfigured": "✅ Configuré",
      "pinNotConfigured": "❌ Non configuré",
      "pinDisplay": "Affichage du code PIN :",
      "menu": {
        "enableDisable": "1) Activer/Désactiver le code PIN administrateur",
        "setupChange": "2) Configurer/Modifier le code PIN administrateur",
        "sessionTimeout": "3) Expiration de la session",
        "maxAttempts": "4) Nombre maximal de tentatives infructueuses",
        "lockoutDuration": "5) Durée du verrouillage",
        "back": "b) Retour au menu principal"
      },
      "prompts": {
        "enablePin": "Activer la protection par code PIN administrateur ? (o/N) :",
        "disablePin": "Désactiver la protection du code PIN administrateur ? (o/N) :",
        "enterTimeout": "Entrez le délai d'expiration de la session (minutes) :",
        "enterMaxAttempts": "Saisissez le nombre maximal de tentatives infructueuses :",
        "enterLockoutDuration": "Entrez la durée du verrouillage (minutes) :"
      },
      "messages": {
        "pinEnabled": "Protection par code PIN administrateur activée",
        "pinDisabled": "Protection par code PIN administrateur désactivée",
        "timeoutUpdated": "Délai d'expiration de la session mis à jour à {minutes} minutes",
        "maxAttemptsUpdated": "Nombre maximal de tentatives infructueuses mis à jour : {attempts}",
        "lockoutDurationUpdated": "Durée du verrouillage mise à jour à {minutes} minutes"
      }
    },
    "fields": {
      "backup.enabled": {
        "label": "Enable Backup",
        "description": "Enable automatic backup of settings",
        "help": "Enable/disable backup feature"
      },
      "backup.singleFileMode": {
        "label": "Single File Mode",
        "description": "Use single file for backups",
        "help": "Backup settings in a single file"
      },
      "backup.singleBackupFile": {
        "label": "Backup File Path",
        "description": "Path to the backup file",
        "help": "Path to the single backup file"
      },
      "backup.retentionDays": {
        "label": "Retention Period",
        "description": "Days to keep backup files",
        "help": "Number of days to retain old backup files"
      },
      "backup.maxBackups": {
        "label": "Maximum Backups",
        "description": "Maximum backup files to keep",
        "help": "Maximum number of backup files to keep"
      },
      "backup.confirm": {
        "label": "Confirm Backup",
        "description": "Require confirmation for backup operations",
        "help": "Confirm backup operation"
      },
      "i18nDir": {
        "label": "Annuaire I18n",
        "description": "Répertoire contenant les fichiers de traduction",
        "current": "Actuel: {value}",
        "help": "Chemin d'accès au répertoire contenant les fichiers de traduction"
      },
      "projectRoot": {
        "label": "Racine du projet",
        "description": "Répertoire racine du projet",
        "current": "Actuel: {value}",
        "help": "Chemin d'accès au répertoire racine du projet"
      },
      "checkUsage": {
        "usage_analysis_failed": "L'analyse de l'utilisation a échoué",
        "usage_analysis_success": "Analyse d'utilisation réussie",
        "usage_analysis_complete": "Analyse d'utilisation terminée",
        "usage_analysis_in_progress": "Analyse d'utilisation en cours",
        "usage_analysis_started": "L'analyse de l'utilisation a commencé",
        "usage_analysis_skipped": "Analyse d'utilisation ignorée"
      },
      "language": {
        "label": "Langue de l'interface",
        "description": "Langue de l'interface utilisateur",
        "current": "Actuel: {value}",
        "help": "Sélectionnez votre langue d'interface préférée"
      },
      "scriptDirectories": {
        "analyzeLabel": "Analyser les répertoires de scripts",
        "analyzeHelp": "Analyser les répertoires de scripts pour détecter les problèmes",
        "completeLabel": "Répertoires d'installation complets",
        "initLabel": "Initialiser les répertoires de scripts",
        "manageLabel": "Gérer les répertoires de scripts",
        "sizingLabel": "Dimensionnement des répertoires de scripts",
        "summaryLabel": "Répertoires des rapports récapitulatifs",
        "usageLabel": "Répertoires des rapports d'utilisation",
        "validateLabel": "Valider les répertoires de scripts"
      },
      "theme": {
        "label": "Thème de couleur",
        "description": "Préférence du thème de l'interface utilisateur",
        "current": "Actuel: {value}",
        "help": "Choisissez entre des thèmes clairs et sombres"
      },
      "dateFormat": {
        "label": "Format des dates",
        "description": "Format d'affichage des dates",
        "current": "Actuel: {value}",
        "help": "Choisir la manière dont les dates sont affichées dans les rapports"
      },
      "notifications": {
        "enabled": {
          "label": "Activer les notifications",
          "description": "Afficher les notifications sur le bureau",
          "current": "Actuel: {value}",
          "help": "Activer les notifications sur le bureau pour les opérations terminées"
        }
      },
      "sourceDir": {
        "label": "Répertoire source",
        "description": "Répertoire contenant les fichiers de traduction",
        "current": "Actuel: {value}",
        "help": "Chemin d'accès au répertoire contenant les fichiers de traduction sources"
      },
      "sourceLanguage": {
        "label": "Langue source",
        "description": "Langue principale pour les traductions",
        "current": "Actuel: {value}",
        "help": "La langue principale utilisée comme source pour les traductions"
      },
      "outputDir": {
        "label": "Répertoire de sortie",
        "description": "Répertoire des rapports générés",
        "current": "Actuel: {value}",
        "help": "Où les rapports et les fichiers traités seront enregistrés"
      },
      "batchSize": {
        "label": "Taille du lot",
        "description": "Nombre d'articles traités par lot",
        "current": "Actuel: {value}",
        "help": "Combien de fichiers traiter dans chaque lot"
      },
      "maxConcurrentFiles": {
        "label": "Nombre maximum de fichiers simultanés",
        "description": "Nombre maximum de fichiers traités simultanément",
        "current": "Actuel: {value}",
        "help": "Nombre maximum de fichiers à traiter en même temps"
      },
      "sizingThreshold": {
        "label": "Seuil de dimensionnement (%)",
        "description": "Seuil pour les avertissements de variation de taille",
        "current": "Actuel: {value}%",
        "help": "Seuil de pourcentage pour détecter les inadéquations de taille"
      },
      "strictMode": {
        "label": "Mode de validation strict",
        "description": "Activer le mode de validation stricte",
        "current": "Actuel: {value}",
        "help": "Activer une validation stricte pour les fichiers de traduction"
      },
      "enableAuditLog": {
        "label": "Activer le journal d'audit",
        "description": "Suivez toutes les modifications de traduction",
        "current": "Actuel: {value}",
        "help": "Enregistrez toutes les modifications apportées aux fichiers de traduction"
      },
      "backupBeforeChanges": {
        "label": "Sauvegarde automatique",
        "description": "Créer des sauvegardes avant les modifications",
        "current": "Actuel: {value}",
        "help": "Créez automatiquement des sauvegardes avant d'apporter des modifications"
      },
      "advanced_maxConcurrentFiles": {
        "label": "Nombre maximum de fichiers simultanés",
        "description": "Nombre maximum de fichiers traités simultanément",
        "current": "Actuel: {value}",
        "help": "Nombre maximum de fichiers à traiter en même temps"
      },
      "advanced_strictMode": {
        "label": "Mode de validation strict",
        "description": "Activer le mode de validation stricte",
        "current": "Actuel: {value}",
        "help": "Activer une validation stricte pour les fichiers de traduction"
      },
      "adminPinEnabled": {
        "label": "Protection du code PIN d'administrateur",
        "description": "Activer l'authentification par code PIN administrateur pour les paramètres sensibles",
        "current": "Actuel: {value}",
        "help": "Exiger un code PIN administrateur pour modifier les paramètres de sécurité et avancés"
      },
      "sessionTimeout": {
        "label": "Expiration de la session",
        "description": "Délai d'expiration de la session d'administration en minutes",
        "current": "Actuel: {value} minutes",
        "help": "Combien de temps les sessions d'administrateur restent actives avant de nécessiter une réauthentification"
      },
      "maxFailedAttempts": {
        "label": "Nombre maximum de tentatives infructueuses",
        "description": "Nombre maximal de tentatives de code PIN ayant échoué avant le verrouillage",
        "current": "Actuel: {value} tentatives",
        "help": "Nombre de tentatives de code PIN échouées autorisées avant le verrouillage temporaire"
      },
      "lockoutDuration": {
        "label": "Durée du verrouillage",
        "description": "Durée du verrouillage après des tentatives infructueuses",
        "current": "Actuel: {value} minutes",
        "help": "Combien de temps le système reste verrouillé après un maximum de tentatives infructueuses"
      },
      "scriptDirectories_analyze": {
        "label": "Analyser les répertoires de scripts",
        "description": "Répertoires personnalisés pour le script d'analyse",
        "current": "Actuel: {value}",
        "help": "Spécifiez le répertoire source personnalisé pour le script d'analyse. Laissez vide pour utiliser le paramètre global."
      },
      "scriptDirectories_complete": {
        "label": "Répertoires d'installation complets",
        "description": "Répertoires personnalisés pour le script d'installation complet",
        "current": "Actuel: {value}",
        "help": "Spécifiez le répertoire source personnalisé pour le script d'installation complet. Laissez vide pour utiliser le paramètre global."
      },
      "scriptDirectories_init": {
        "label": "Initialiser les répertoires de scripts",
        "description": "Répertoires personnalisés pour le script d'initialisation",
        "current": "Actuel: {value}",
        "help": "Spécifiez le répertoire source personnalisé pour le script d'initialisation. Laissez vide pour utiliser le paramètre global."
      },
      "scriptDirectories_manage": {
        "label": "Gérer les répertoires de scripts",
        "description": "Répertoires personnalisés pour le script de gestion",
        "current": "Actuel: {value}",
        "help": "Spécifiez le répertoire source personnalisé pour le script de gestion. Laissez vide pour utiliser le paramètre global."
      },
      "scriptDirectories_sizing": {
        "label": "Dimensionnement des répertoires de scripts",
        "description": "Répertoires personnalisés pour le script de dimensionnement",
        "current": "Actuel: {value}",
        "help": "Spécifiez le répertoire source personnalisé pour le script de dimensionnement. Laissez vide pour utiliser le paramètre global."
      },
      "scriptDirectories_summary": {
        "label": "Répertoires des rapports récapitulatifs",
        "description": "Répertoires personnalisés pour le script de rapport récapitulatif",
        "current": "Actuel: {value}",
        "help": "Spécifiez le répertoire source personnalisé pour le script du rapport récapitulatif. Laissez vide pour utiliser le paramètre global."
      },
      "scriptDirectories_usage": {
        "label": "Répertoires des rapports d'utilisation",
        "description": "Répertoires personnalisés pour le script de rapport d'utilisation",
        "current": "Actuel: {value}",
        "help": "Spécifiez le répertoire source personnalisé pour le script de rapport d'utilisation. Laissez vide pour utiliser le paramètre global."
      },
      "scriptDirectories_validate": {
        "label": "Valider les répertoires de scripts",
        "description": "Répertoires personnalisés pour valider le script",
        "current": "Actuel: {value}",
        "help": "Spécifiez le répertoire source personnalisé pour le script de validation. Laissez vide pour utiliser le paramètre global."
      },
      "security_adminPinEnabled": {
        "label": "Protection du code PIN d'administrateur",
        "description": "Activer l'authentification par code PIN administrateur pour les paramètres sensibles",
        "current": "Actuel: {value}",
        "help": "Exiger un code PIN administrateur pour modifier les paramètres de sécurité et avancés"
      },
      "fields": {
        "adminPinEnabled": {
          "label": "Protection du code PIN d'administrateur",
          "description": "Activer l'authentification par code PIN administrateur pour les paramètres sensibles",
          "help": "Exiger un code PIN administrateur pour modifier les paramètres de sécurité et avancés"
        }
      },
      "security_pinProtection_enabled": {
        "label": "Protection par code PIN",
        "description": "Activer la protection par code PIN pour les paramètres sensibles",
        "current": "Actuel: {value}",
        "help": "Exiger un code PIN pour modifier les paramètres de sécurité et avancés"
      },
      "pinProtection_configure": {
        "label": "Configurer les scripts protégés par code PIN",
        "description": "Configurer les scripts nécessitant une protection par code PIN",
        "help": "Sélectionnez des scripts individuels qui nécessitent une authentification par code PIN"
      },
      "pinProtection_debugMenu": {
        "label": "Menu Outils de débogage",
        "description": "Exiger un code PIN pour le menu Outils de débogage",
        "current": "Actuel: {value}",
        "help": "Activer la protection par code PIN pour accéder aux outils de débogage"
      },
      "pinProtection_deleteReports": {
        "label": "Supprimer des rapports",
        "description": "Exiger un code PIN pour supprimer des rapports",
        "current": "Actuel: {value}",
        "help": "Activer la protection par code PIN pour supprimer des rapports"
      },
      "pinProtection_summaryReports": {
        "label": "Rapports récapitulatifs",
        "description": "Exiger un code PIN pour les rapports récapitulatifs",
        "current": "Actuel: {value}",
        "help": "Activer la protection par code PIN pour générer des rapports récapitulatifs"
      },
      "pinProtection_settingsMenu": {
        "label": "Menu Paramètres",
        "description": "Exiger un code PIN pour le menu Paramètres",
        "current": "Actuel: {value}",
        "help": "Activer la protection par code PIN pour accéder aux paramètres"
      },
      "pinProtection_initScript": {
        "label": "Initialiser le script",
        "description": "Exiger un code PIN pour initialiser le script",
        "current": "Actuel: {value}",
        "help": "Activer la protection par code PIN pour exécuter le script d'initialisation"
      },
      "pinProtection_resetDefaults": {
        "label": "Réinitialiser la protection du code PIN",
        "description": "Réinitialiser tous les paramètres de protection par code PIN aux valeurs par défaut",
        "help": "Réinitialiser toutes les protections PIN de script individuelles aux valeurs par défaut"
      },
      "removeUiLanguages": {
        "label": "Supprimer les langues de l'interface utilisateur",
        "description": "Supprimer les langues de l'interface utilisateur qui ne sont pas installées",
        "help": "Supprimez les langues de l'interface utilisateur qui ne sont pas installées sur le système"
      },
      "${helperKey}": {
        "help": "Aide"
      },
      "backup": {
        "enabled": {
          "label": "Activer la sauvegarde",
          "description": "Activer la sauvegarde automatique des paramètres",
          "help": "Activer/désactiver la fonction de sauvegarde"
        },
        "singleFileMode": {
          "label": "Mode fichier unique",
          "description": "Utiliser un seul fichier pour les sauvegardes",
          "help": "Paramètres de sauvegarde dans un seul fichier"
        },
        "singleBackupFile": {
          "label": "Chemin du fichier de sauvegarde",
          "description": "Chemin d'accès au fichier de sauvegarde",
          "help": "Chemin d'accès au fichier de sauvegarde unique"
        },
        "retentionDays": {
          "label": "Période de conservation",
          "description": "Jours pour conserver les fichiers de sauvegarde",
          "help": "Nombre de jours pour conserver les anciens fichiers de sauvegarde"
        },
        "maxBackups": {
          "label": "Sauvegardes maximales",
          "description": "Fichiers de sauvegarde maximum à conserver",
          "help": "Nombre maximum de fichiers de sauvegarde à conserver"
        },
        "confirm": {
          "label": "Confirmer la sauvegarde",
          "description": "Exiger une confirmation pour les opérations de sauvegarde",
          "help": "Confirmer l'opération de sauvegarde"
        }
      },
      "reports_format": {
        "label": "Format du rapport",
        "help": "Choisissez markdown pour des rapports lisibles, json pour l automatisation ou text pour des journaux simples."
      },
      "autoTranslate_placeholderMode": {
        "label": "Mode de gestion des espaces reserves",
        "help": "Traitement des chaines avec espaces reserves pendant la traduction automatique."
      },
      "autoTranslate_concurrency": {
        "label": "Requetes de traduction simultanees",
        "help": "Nombre maximal de requetes fournisseur simultanees. Google accepte jusqu'a 100 dans i18ntk; DeepL et LibreTranslate sont limites plus bas."
      },
      "autoTranslate_batchSize": {
        "label": "Segments de texte par lot",
        "help": "Nombre de segments de texte planifies par lot."
      },
      "autoTranslate_progressInterval": {
        "label": "Intervalle de progression",
        "help": "Segments termines entre deux mises a jour de progression."
      },
      "autoTranslate_retryCount": {
        "label": "Nombre de tentatives",
        "help": "Nombre maximal de tentatives par requete echouee."
      },
      "autoTranslate_retryDelay": {
        "label": "Delai de nouvelle tentative (ms)",
        "help": "Delai de base en millisecondes."
      },
      "autoTranslate_timeout": {
        "label": "Expiration de requete (ms)",
        "help": "Delai maximal pour la requete au fournisseur de traduction."
      },
      "autoTranslate_dryRunFirst": {
        "label": "Apercu d abord",
        "help": "Afficher ce qui sera traduit avant d ecrire les fichiers."
      },
      "autoTranslate_onlyMissingOrEnglish": {
        "label": "Seulement les cles manquantes ou anglaises",
        "help": "Conserver les valeurs cible deja traduites et traduire seulement les valeurs manquantes, marqueurs, copies source ou probablement anglaises."
      },
      "autoTranslate_reportStdout": {
        "label": "Afficher le rapport dans le terminal",
        "help": "Afficher le rapport apres traduction sur stdout."
      },
      "autoTranslate_bom": {
        "label": "Ecrire le BOM UTF-8",
        "help": "Ecrire les fichiers JSON traduits avec un BOM UTF-8."
      },
      "autoTranslate_protectionEnabled": {
        "label": "Proteger marques, cles et valeurs",
        "help": "Activer les termes, cles, valeurs et motifs proteges modifiables par l utilisateur."
      },
      "autoTranslate_protectionFile": {
        "label": "Fichier JSON de protection",
        "help": "Fichier JSON du projet contenant les regles de protection de traduction automatique."
      },
      "autoTranslate_promptProtectionSetup": {
        "label": "Demander la creation du fichier de protection",
        "help": "Demander la creation du fichier de protection au premier lancement."
      },
      "autoTranslate_promptProtectionUpdate": {
        "label": "Demander la mise a jour des regles de protection",
        "help": "Demander la mise a jour des regles de protection avant les traductions du gestionnaire."
      }
    },
    "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": "Êtes-vous sûr de vouloir réinitialiser tous les paramètres par défaut ? (o/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 par code PIN pour {script} mis à jour avec succès !",
      "pinProtectionReset": "✅ Tous les paramètres de protection par code PIN sont réinitialisés aux valeurs par défaut !",
      "pinProtectionConfigure": "Configurer la protection par code PIN pour des scripts individuels",
      "pinProtectionSelectScript": "Sélectionnez un script pour activer la protection par code PIN :",
      "pinProtectionCurrentStatus": "Statut actuel : {status}",
      "pinProtectionEnabled": "Activé",
      "pinProtectionDisabled": "Désactivé",
      "pinProtectionToggle": "Activer/désactiver la protection par code PIN",
      "pinProtectionResetAll": "Réinitialiser tout aux valeurs par défaut",
      "pinProtectionBack": "Retour aux paramètres de sécurité"
    },
    "themes": {
      "light": "Lumière",
      "dark": "Sombre",
      "system": "Système"
    },
    "languages": {
      "en": "Anglais",
      "de": "Allemand",
      "es": "Espagnol",
      "fr": "Français",
      "ru": "russe",
      "ja": "japonais",
      "zh": "Chinois",
      "it": "Italien",
      "pt": "Portugais",
      "nl": "Néerlandais",
      "pl": "Polonais",
      "sv": "Suédois",
      "uk": "Ukrainien",
      "cs": "Tchèque",
      "tr": "Turc",
      "ko": "Coréen",
      "ar": "Arabe",
      "hi": "Hindi",
      "th": "Thaï",
      "vi": "Vietnamien",
      "he": "Hébreu",
      "el": "Grec",
      "hu": "Hongrois"
    },
    "viewAll": {
      "title": "Afficher tous les paramètres"
    },
    "current": "Actuel",
    "back": "Retour au menu principal",
    "selectSettingPrompt": "Sélectionnez le paramètre à modifier (ou b pour revenir en arrière, r pour réinitialiser) :",
    "invalidOption": "Option invalide.",
    "editing": "Édition",
    "enterNewValue": "Entrez une nouvelle valeur (ou appuyez sur Entrée pour conserver la valeur actuelle, tapez « par défaut » pour utiliser la valeur par défaut du système) :",
    "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 du répertoire de script à leurs valeurs par défaut du système.",
    "resetScriptDirectoriesWarning2": "Tous les chemins de répertoire personnalisés seront effacés. Cette action ne peut pas être annulée.",
    "resetScriptDirectoriesConfirm": "Êtes-vous sûr de vouloir réinitialiser tous les répertoires de scripts aux valeurs par défaut ? (o/N) :",
    "backup": {
      "title": "Paramètres de sauvegarde",
      "description": "Sauvegarder les paramètres actuels dans un fichier",
      "confirm": "Êtes-vous sûr de vouloir sauvegarder les paramètres actuels ? (o/N) :",
      "success": "✅ Paramètres sauvegardés avec succès sur {backupFile}",
      "failed": "❌ Échec de la sauvegarde des paramètres : {error}",
      "enabled": "Activer la sauvegarde",
      "enabledHelp": "Activer/désactiver la fonction de sauvegarde",
      "singleFileMode": "Mode fichier unique",
      "singleFileModeHelp": "Paramètres de sauvegarde dans un seul fichier",
      "singleBackupFile": "Fichier de sauvegarde unique",
      "singleBackupFileHelp": "Chemin d'accès au fichier de sauvegarde unique",
      "retentionDays": "Jours de conservation",
      "retentionDaysHelp": "Nombre de jours pour conserver les anciens fichiers de sauvegarde",
      "maxBackups": "Sauvegardes maximales",
      "maxBackupsHelp": "Nombre maximum de fichiers de sauvegarde à conserver",
      "confirmHelp": "Confirmer l'opération de sauvegarde",
      "confirmYes": "Oui",
      "confirmNo": "Non"
    },
    "validation": {
      "valid": "Valide",
      "validatingPaths": "Validation des chemins configurés...",
      "validationComplete": "Validation du chemin terminée : {valid}/{total} valide."
    }
  },
  "summary": {
    "separator": "=============================================================",
    "configurationTitle": "🔧Configuration :",
    "sourceLanguage": "Langue source : {sourceLanguage}",
    "supportedExtensions": "Extensions prises en charge : {extensions}",
    "excludedFiles": "Fichiers exclus : {files}",
    "reportContent": "{report}",
    "fatalError": "❌ Erreur fatale : {error}",
    "helpTitle": "📊 GÉNÉRATEUR DE RAPPORT DE RÉSUMÉ I18NTK",
    "helpDescription": "Analyse la structure des dossiers i18n et génère un rapport de synthèse complet comprenant des statistiques clés, une analyse de la structure des fichiers et des contrôles de validation.",
    "helpUsage": "Utilisation : nœud i18ntk-summary.js [options]",
    "helpOptions": "--rép-source <dir>     Répertoire source à analyser",
    "helpSourceDir": "--rép-source <dir>     Répertoire source à analyser",
    "helpOutput": "--sortir <file>        Fichier de sortie pour le rapport",
    "helpVerbose": "--verbose, -v Afficher des 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": "Exemples :",
    "helpExample1": "nœud i18ntk-summary.js",
    "helpExample2": "nœud i18ntk-summary.js --source-dir ./locales",
    "helpExample3": "nœud i18ntk-summary.js --output summary-report.txt",
    "helpExample4": "nœud i18ntk-summary.js --verbose",
    "helpExample5": "nœud 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": "🔍 Analyse de la structure des dossiers...",
    "noLanguageDirectoriesFound": "❌ Aucun répertoire de langues trouvé dans le répertoire source spécifié.",
    "foundLanguages": "✅ Trouvé {count} langues : {languages}",
    "referenceLanguageFiles": "📁Langage de référence'{language}' a {count} fichiers",
    "analyzingLanguage": "🌍 Analyser le langage : {language}",
    "keysInFiles": "📊 Trouvé {keys} touches à travers {files} fichiers",
    "checkingInconsistentKeys": "🔍 Vérification des clés incohérentes dans toutes les langues...",
    "generatingSummaryReport": "📝 Génération d'un rapport récapitulatif...",
    "reportTitle": "📊 RAPPORT SOMMAIRE I18NTK",
    "generated": "Généré : {timestamp}",
    "sourceDirectory": "Répertoire source : {dir}",
    "overview": "📈 APERÇU",
    "languagesCount": "Langues : {count}",
    "totalFiles": "Total des fichiers : {count}",
    "totalKeys": "Clés totales : {count}",
    "avgKeysPerLanguage": "Clés moyennes par langue : {count}",
    "languagesBreakdown": "🌍 RÉPARTITION DES LANGUES",
    "languageBreakdown": "{language}: {files} des fichiers, {keys} clés",
    "fileStructure": "📁STRUCTURE DES FICHIERS",
    "fileKeys": "{file}: {keys} clés",
    "missingInLanguages": "⚠️ Manquant dans : {languages}",
    "issuesFound": "❌ PROBLÈMES TROUVÉS",
    "missingFiles": "📁 Fichiers manquants :",
    "emptyFiles": "📄 Fichiers vides :",
    "malformedFiles": "⚠️ Fichiers mal formés :",
    "duplicateKeys": "🔑 Clés en double :",
    "inconsistentKeys": "🔍 Clés incohérentes :",
    "missingKeys": "Manquant: {keys}{more}",
    "extraKeys": "Supplémentaire: {keys}{more}",
    "noIssuesFound": "✅ AUCUN PROBLÈME TROUVÉ",
    "allFilesConsistent": "Tous les fichiers de traduction sont cohérents dans toutes les langues.",
    "recommendations": "💡 RECOMMANDATIONS",
    "createMissingFiles": "• Créer des fichiers de traduction manquants",
    "addContentToEmptyFiles": "• Ajouter du contenu à des fichiers de traduction vides",
    "fixMalformedFiles": "• Correction des fichiers JSON/JS mal formés",
    "removeDuplicateKeys": "• Supprimer les clés en double des fichiers",
    "synchronizeKeys": "• Synchronisez les clés dans toutes les langues",
    "splitLargeFiles": "• Envisagez de diviser les fichiers volumineux en espaces de noms plus petits.",
    "addMoreLanguages": "• Envisagez d'ajouter d'autres langues.",
    "nextSteps": "🎯 PROCHAINES ÉTAPES",
    "nextStep1": "1. Résolvez tous les problèmes identifiés ci-dessus",
    "nextStep2": "2. Exécutez la validation pour garantir la cohérence",
    "nextStep3": "3. Pensez à utiliser i18ntk-validate pour une validation détaillée",
    "nextStep4": "4. Surveillance régulière recommandée",
    "couldNotFindI18nDirectory": "❌ Impossible de trouver le répertoire i18n. Veuillez spécifier --source-dir.",
    "sourceDirectoryDoesNotExist": "❌ Le répertoire source n'existe pas : {dir}",
    "i18nSummaryReportGenerator": "📊 Générateur de rapport de synthèse I18N",
    "analysisComplete": "✅ Analyse terminée",
    "analyzedLanguages": "📊 Langues analysées : {count}",
    "processedFiles": "📁 Fichiers traités : {count}",
    "foundTranslationKeys": "🔑 Clés de traduction trouvées : {count}",
    "foundIssues": "❌ Trouvé {count} problèmes",
    "noIssuesConsole": "✅ Aucun problème trouvé - tous les fichiers sont cohérents !",
    "errorDuringAnalysis": "❌ Erreur lors de l'analyse : {error}",
    "usageReportTitle": "📊 RAPPORT D'UTILISATION DU I18NTK",
    "usageReportGenerated": "Généré : {timestamp}",
    "usageReportSourceDir": "Répertoire source : {sourceDir}",
    "usageReportI18nDir": "Répertoire I18n : {i18nDir}",
    "usageReportSummary": "📈 RÉSUMÉ",
    "usageReportSourceFilesScanned": "Fichiers sources 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 inutilisées : {count}",
    "usageReportMissingKeys": "Clés de traduction manquantes : {count}",
    "usageReportNotTranslatedKeys": "Clés non traduites : {count}",
    "usageReportTranslationCompleteness": "🌍 EXHAUSTIVITÉ DE LA TRADUCTION",
    "usageReportLanguageCompleteness": "{language}: {completeness}% ({translated}/{total})",
    "usageReportNotTranslatedInLanguage": "Non traduit : {count} clés",
    "usageReportTranslationFilesDiscovered": "📁 FICHIERS DE TRADUCTION",
    "usageReportFileInfo": "{relativePath} (espace de noms : {namespace}, taper: {type})",
    "usageReportUnusedTranslationKeys": "🗑️ CLÉS DE TRADUCTION INUTILISÉ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} plus de clés inutilisées",
    "usageReportMissingTranslationKeys": "❌ CLÉS DE TRADUCTION MANQUANTES",
    "usageReportMissingKeysDescription": "Ces clés sont utilisées dans le code source mais absentes des fichiers de traduction :",
    "usageReportMissingKey": "• {key}",
    "usageReportUsedIn": "Utilisé dans : {filePath}",
    "usageReportMoreFiles": "... et {count} plus de fichiers",
    "usageReportDynamicTranslationKeys": "⚡ TOUCHES DE TRADUCTION DYNAMIQUES",
    "usageReportDynamicKeysDescription": "Ces clés sont utilisées dynamiquement (construites au moment de l'exécution) :",
    "usageReportDynamicKey": "• {key}",
    "usageReportFileUsageBreakdown": "📊 RÉPARTITION DE L'UTILISATION DES FICHIERS",
    "usageReportFileUsage": "{filePath}: {count} clés",
    "status": {
      "generating": "⏳ Génération...",
      "completed": "✅ Terminé"
    },
    "help": {
      "usage": "Utilisation : nœud main/manage/index.js [options]",
      "interactiveMode": "💡 Utilisation : node main/manage/index.js --command=<command> pour exécution directe",
      "initProject": "🚀 Initialiser de nouvelles langues",
      "analyzeTranslations": "🔍 Analyser les traductions",
      "validateTranslations": "✅ Valider les traductions",
      "checkUsage": "📊 Vérifiez l'utilisation de la clé",
      "showHelp": "📖 Utiliser : node main/manage/index.js --help pour les commandes disponibles",
      "availableCommands": "📖 Commandes disponibles :",
      "initCommand": "init - Initialiser de nouvelles langues",
      "analyzeCommand": "analyser - Analyser les traductions",
      "validateCommand": "validate - Valider les traductions",
      "usageCommand": "utilisation - Vérifier l'utilisation des clés",
      "sizingCommand": "dimensionnement - Analyser le dimensionnement",
      "completeCommand": "complet - Traductions complètes (couverture à 100 %)",
      "summaryCommand": "résumé - Afficher l'état du projet",
      "scannerCommand": "scanner - Rechercher les problèmes i18n",
      "translateCommand": "traduire - Traduire automatiquement les fichiers de paramètres régionaux",
      "debugCommand": "debug - Problèmes de traduction de débogage"
    },
    "test_complete_system": {
      "starting_test": "🧪 Démarrage du test système complet",
      "separator": "=",
      "testing_ui_translations": "📝 Test des traductions de l'interface utilisateur...",
      "testing_settings_manager": "⚙️ Test du gestionnaire de paramètres...",
      "testing_main_scripts": "🔧 Test des scripts principaux...",
      "checking_translation_consistency": "🌐 Vérification de la cohérence de la traduction...",
      "non_critical_missing_keys": "ℹ️ {file}: {count} clés manquantes non critiques",
      "extra_keys": "ℹ️ {file}: {count} clés supplémentaires",
      "generating_report": "📊 Génération du rapport...",
      "final_test_report_title": "📋 RAPPORT DE TEST FINAL",
      "passed": "✅ Réussi : {passed}",
      "failed": "❌ Échec : {failed}",
      "warnings": "⚠️ Avertissements : {warnings}",
      "missing_translations_title": "🔍 Traductions manquantes ({count}):",
      "missing_translation_key": "- {key}",
      "missing_translations_more": "... et {count} plus",
      "errors_title": "❌ Erreurs :",
      "error_message": "- {error}",
      "overall_status": "📊 Statut général : {status}",
      "success_message": "✅ {message}",
      "failure_message": "❌ {message}",
      "failure_error_message": "{errorMessage}",
      "warning_message": "⚠️  {message}",
      "test_runner_failed": "❌ L'exécuteur de test a échoué :",
      "recommendations": {
        "add_missing_translation_keys": "Ajouter les clés de traduction manquantes pour maintenir la cohérence",
        "fix_failing_scripts": "Corriger les scripts défaillants avant le déploiement",
        "review_warning_messages": "Examiner et traiter les messages d'avertissement",
        "system_ready_for_deployment": "Le système est prêt pour le déploiement"
      },
      "hardcodedTexts": {
        "addMissingTranslationKeys": "Ajouter les clés de traduction manquantes pour maintenir la cohérence",
        "fixFailingScripts": "Corriger les scripts défaillants avant le déploiement",
        "reviewWarningMessages": "Examiner et traiter les messages d'avertissement",
        "systemReadyForDeployment": "Le système est prêt pour le déploiement"
      }
    },
    "testConsoleI18n": {
      "found_target_file": "Fichier cible trouvé : {fileName}",
      "scanning_files_for_console_statements": "Analyse des fichiers pour les instructions de la console...",
      "found_javascript_files": "Trouvé {count} Fichiers JavaScript.",
      "console_i18n_analysis_results": "Résultats de l'analyse de la console I18n",
      "total_console_statements": "Total des instructions de la console : {count}",
      "translated_statements": "Déclarations traduites : {count}",
      "hardcoded_statements": "Déclarations codées en dur : {count}",
      "translation_coverage": "Couverture de traduction : {percentage}%",
      "coverage_by_file": "Couverture par dossier :",
      "file_coverage_stats": "{emoji} {fileName}: {coverage}% ({translated}/{total})",
      "hardcoded_console_statements": "Déclarations de console codées en dur :",
      "file_header": "Déposer: {file}",
      "line_statement": "Doubler {line}: {statement}",
      "suggested_key": "Clé suggérée : {key}",
      "suggested_replacement": "Remplacement suggéré : {replacement}",
      "recommendations": "Recommandations :",
      "recommendation_1": "1. Remplacez les chaînes codées en dur par des appels i18n.t().",
      "recommendation_2": "2. Ajoutez de nouvelles clés aux fichiers JSON de traduction pertinents.",
      "recommendation_3": "3. Assurez-vous que tous les messages de la console sont destinés à l'utilisateur et nécessitent une traduction.",
      "recommendation_4": "4. Utilisez des littéraux de modèle ou une concaténation de chaînes pour les messages dynamiques, en passant des variables à i18n.t().",
      "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 de la console utilisent le système de traduction.",
      "i18n_console_translation_checker": "Vérificateur de traduction de la console I18n",
      "script_description_line1": "Ce script analyse tous les fichiers JavaScript à la recherche d'instructions de console",
      "script_description_line2": "et vérifie s'ils utilisent le système de traduction.",
      "analysis_completed_in_duration": "Analyse réalisée en {duration} secondes.",
      "report_saved_to_path": "Rapport enregistré dans : {path}",
      "found_hardcoded_messages": "Trouvé {count} messages codés en dur. Quitter avec le code d'erreur 1.",
      "all_console_messages_use_translation": "Tous les messages de la console utilisent la traduction. Sortir avec le code 0.",
      "consoleTranslationsCheck": "Vérification des traductions de la console"
    },
    "translate_mismatches": {
      "title": "🌐 Aide à la traduction {dryRun}",
      "separator": "=====================================",
      "processing_file": "📄 Traitement {language}.json...",
      "translation_summary_title": "📊 Résumé de la traduction :",
      "total_translations_applied": "Total des traductions appliquées : {totalTranslations}",
      "run_with_apply_instruction": "💡 Exécutez avec --apply pour appliquer ces traductions",
      "no_translation_mappings": "⚠️ Aucun mappage de traduction disponible pour {language}",
      "translation_applied": "✅ {key}: \"{oldValue}\" → \"{newValue}\"",
      "saved_translations": "💾 Enregistré {count} traductions à {filename}",
      "found_translatable_items": "🔍 Trouvé {count} éléments traduisibles",
      "no_automatic_translations": "✨ Aucune traduction automatique disponible",
      "error_processing_file": "❌ Traitement des erreurs {filename}: {errorMessage}",
      "coverage_report_title": "📊 Rapport de couverture des traductions",
      "coverage_report_separator": "================================",
      "file_header": "📄 {filename}:",
      "total_keys": "Clés totales : {total}",
      "translated_keys": "Traduit: {translated}",
      "untranslated_markers": "Marqueurs non traduits : {untranslated}",
      "contains_english": "Contient l'anglais : {hasEnglish}",
      "coverage_percentage": "Couverture: {coverage}%",
      "error_general": "❌ Erreur :",
      "use_help": "Utilisez --help pour les informations d'utilisation"
    },
    "cleaningUpReportFiles": "Nettoyage des anciens fichiers de rapport...",
    "couldNotDelete": "Impossible de supprimer {file}: {error}",
    "deletedOldReportFiles": "Supprimé {count} anciens fichiers de rapport.",
    "errorCleaningUpReports": "Erreur lors du nettoyage des rapports : {error}",
    "noOldReportFilesToDelete": "Aucun ancien fichier de rapport à supprimer.",
    "reportFilesPreserved": "Fichiers de rapport préservés.",
    "reportSaveFailed": "Échec de l'enregistrement du rapport dans : {reportPath}",
    "reportSaved": "Rapport enregistré dans : {reportPath}"
  },
  "ui": {
    "autoDetectedI18nDirectory": "Répertoire i18n détecté automatiquement : {path}",
    "executingCommand": "Exécution de la commande : {command}",
    "unknownCommand": "Commande inconnue : {command}",
    "errorExecutingCommand": "Erreur lors de l'exécution de la commande : {error}",
    "errorLoadingTranslationFile": "Erreur lors du chargement du fichier de traduction pour '{language}': {error}",
    "errorSavingLanguagePreference": "Erreur lors de l'enregistrement des préférences de langue : {error}",
    "noActiveReadlineInterface": "Aucune interface de lecture active disponible",
    "uiLanguageUpdated": "Langue de l'interface utilisateur mise à jour : {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 de gestion Enterprise i18n",
    "versionInfo": "Version: {version}",
    "releaseDate": "Date de sortie : {date}",
    "maintainer": "Responsable : {maintainer}",
    "nodeVersion": "Noeud.js : {version}",
    "license": "Licence: {license}",
    "whatsNew": "✨ Quoi de neuf en v{version}:",
    "changeItem": "{change}",
    "documentation": "📚Documents : {url}",
    "issues": "🐛 Problèmes : {url}",
    "versionInfoUnavailable": "Les informations sur la version i18ntk ne sont pas disponibles",
    "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": "veuillez sélectionner",
    "phrase_back_to_main_menu": "retour au menu principal",
    "phrase_error": "erreur",
    "phrase_warning": "avertissement",
    "phrase_success": "succès",
    "phrase_failed": "échoué",
    "phrase_loading": "chargement",
    "phrase_saving": "économie",
    "phrase_full_system_debug": "débogage complet du système",
    "phrase_configuration_debug": "débogage de la configuration",
    "phrase_translation_debug": "débogage de traduction",
    "phrase_performance_debug": "débogage des performances",
    "phrase_admin_pin_setup": "configuration du code PIN d'administrateur",
    "phrase_enter_admin_pin": "entrez le code PIN d'administrateur",
    "phrase_confirm_admin_pin": "confirmer le code PIN d'administrateur",
    "phrase_authentication_failed": "l'authentification a échoué",
    "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é du langage",
    "validating_file": "📄 Validation {language}.json ({name})...",
    "valid_file_message": "✅ Valide - Aucune violation de la pureté du langage",
    "invalid_file_message": "❌ Invalide - {count} violation(s) constaté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 la phrase 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ÉSUMÉ DE VALIDATION",
    "overall_results_header": "📋 Résultats globaux :",
    "total_files_validated": "Total des dossiers validés : {count}",
    "valid_files": "Fichiers valides : {count}",
    "invalid_files": "Fichiers invalides : {count}",
    "total_violations": "Total des violations : {count}",
    "violations_by_file_header": "❌VIOLATIONS PAR DOSSIER :"
  },
  "workflow": {
    "title": "Gestion du flux de travail",
    "description": "Gérez les flux de travail i18n.",
    "select_workflow_file": "Sélectionnez un fichier de workflow à exécuter :",
    "no_workflow_files": "Aucun fichier de workflow trouvé dans le répertoire des workflows.",
    "invalid_selection": "Sélection invalide. Veuillez saisir un numéro correspondant à un fichier de workflow.",
    "workflow_execution_started": "Démarrage du flux de travail : {workflowName}",
    "workflow_execution_completed": "Flux de travail terminé : {workflowName}",
    "workflow_execution_failed": "Échec du flux de travail : {workflowName} - {error}",
    "workflow_cancelled": "Exécution du workflow annulée.",
    "press_enter_to_continue": "Appuyez sur Entrée pour continuer !",
    "starting": "🚀 Démarrage du flux de travail...",
    "completed": "✅ Workflow terminé avec succès !",
    "checkReports": "📄 Consultez les rapports pour plus de détails.",
    "exitingCompleted": "📝 Workflow terminé. Sortir...",
    "summary": {
      "title": "📋 RÉSUMÉ DU FLUX DE TRAVAIL",
      "separator": "===================",
      "completedAt": "🕐 Workflow terminé à : {timestamp}",
      "initialViolations": "📊 Infractions initiales : {count}",
      "finalViolations": "📉 Violations finales : {count}",
      "totalFixes": "🔧 Total des correctifs appliqués : {count}",
      "improvement": "📈 Amélioration : {percentage}%",
      "stepResults": "📝 RÉSULTATS DES ÉTAPES :",
      "stepDetail": "{number}. {status} {stepName}",
      "violations": "Infractions : {count}",
      "fixesApplied": "Correctifs appliqués : {count}",
      "nextSteps": "💡 PROCHAINES ÉTAPES :",
      "congratulations": "🎉 Félicitations ! Tous les fichiers de paramètres régionaux ont désormais une pureté de langue parfaite !",
      "cicdIntegration": "✅ Pensez à intégrer le validateur dans votre pipeline CI/CD",
      "automatedChecks": "✅ Mettre en place des contrôles automatisés pour les nouvelles traductions",
      "greatProgress": "🎯 Belle progression ! La plupart des problèmes ont été résolus.",
      "manualReview": "🔍 Examinez manuellement les violations restantes",
      "addMappings": "🌐 Envisagez d'ajouter davantage de mappages de traduction pour les cas extrêmes",
      "goodProgress": "📈 De bons progrès ont été réalisés, mais il reste encore du travail à faire.",
      "expandMappings": "🔧 Développez les mappages de traduction automatique",
      "professionalReview": "👥 Envisagez la révision manuelle des traductions complexes",
      "runAgain": "🔄 Exécutez à nouveau le workflow après avoir ajouté d'autres mappages",
      "limitedProgress": "⚠️ Progression limitée. 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 paramètres régionaux",
      "success": "✅",
      "warning": "⚠️"
    }
  },
  "consoleI18nTester": {
    "found_target_file": "Fichier cible trouvé",
    "scanning_files_for_console_statements": "Analyse des fichiers pour les instructions de console",
    "found_javascript_files": "Fichiers javascript trouvés",
    "console_i18n_analysis_results": "Résultats de l'analyse de la console i18n",
    "total_console_statements": "Total des instructions de la console",
    "translated_statements": "Déclarations traduites",
    "hardcoded_statements": "Déclarations codées en dur",
    "translation_coverage": "Couverture de traduction",
    "coverage_by_file": "Couverture par dossier",
    "file_coverage_stats": "Statistiques de couverture des fichiers",
    "hardcoded_console_statements": "Instructions de console codées en dur",
    "file_header": "En-tête du fichier",
    "line_statement": "Instruction de ligne",
    "suggested_key": "Clé suggérée",
    "suggested_replacement": "Remplacement suggéré",
    "recommendations": "Recommandations",
    "recommendation_1": "Recommandation 1",
    "recommendation_2": "Recommandation 2",
    "recommendation_3": "Recommandation 3",
    "recommendation_4": "Recommandation 4",
    "translation_keys_to_add": "Clés de traduction à ajouter",
    "add_keys_instruction": "Instruction d'ajout de clés",
    "perfect_translation_coverage": "Couverture de traduction parfaite",
    "all_statements_using_translation": "Toutes les déclarations utilisant la traduction",
    "i18n_console_translation_checker": "Vérificateur de traduction de la console I18n",
    "script_description_line1": "Ligne de description du script 1",
    "script_description_line2": "Ligne de description du script 2",
    "analysis_completed_in_duration": "Analyse complétée en durée",
    "report_saved_to_path": "Rapport enregistré dans le chemin",
    "found_hardcoded_messages": "Messages codés en dur trouvés",
    "all_console_messages_use_translation": "Tous les messages de la console utilisent la traduction"
  },
  "exportTranslations": {
    "createdDirectory": "Répertoire créé",
    "foundFiles": "Fichiers trouvés",
    "createdTemplate": "Modèle créé",
    "skippedExisting": "Existant ignoré",
    "title": "Titre",
    "creatingTemplates": "Création de modèles",
    "summary": "Résumé",
    "summaryLanguages": "Langues du résumé",
    "summaryFilesPerLanguage": "Fichiers récapitulatifs par langue",
    "summaryTotalFiles": "Récapitulatif du total des fichiers",
    "success": "Succès",
    "location": "Emplacement",
    "nextSteps": "Prochaines étapes"
  },
  "dashboard": {
    "title": "Titre",
    "overview": "Aperçu"
  },
  "auth": {
    "title": "Titre",
    "email": "E-mail",
    "password": "Mot de passe",
    "signIn": "Se connecter",
    "forgotPassword": "Mot de passe oublié",
    "signUp": "S'inscrire"
  },
  "checkUsage": {
    "usage_analysis_failed": "L'analyse de l'utilisation a échoué."
  },
  "completeTranslations": {
    "warning_could_not_parse_filepa": "Attention : impossible d'analyser le chemin du fichier : {filePath}"
  },
  "pressEnterToContinue": "Appuyez sur Entrée pour continuer...",
  "status": {
    "exitingCompleted": "Flux de travail terminé. Sortir..."
  },
  "prompt": {
    "yesTokens": [
      "o",
      "oui",
      "y",
      "yes"
    ],
    "noTokens": [
      "n",
      "non",
      "no"
    ]
  },
  "translate": {
    "title": "Traduction automatique",
    "sourceDirectory": {
      "title": "Repertoire de locale source",
      "currentProject": "Projet actuel : {dir}",
      "accepted": "Accepte : chemin absolu ou chemin relatif au projet actuel.",
      "localeRootExample": "./locales  (puis choisir la langue source : en)",
      "folderHint": "Le dossier peut contenir directement des fichiers JSON ou des dossiers de langue comme ./locales/en.",
      "defaultNotFound": "Repertoire par defaut introuvable : {dir}",
      "enterExisting": "Saisissez un repertoire existant avec des fichiers JSON de locale.",
      "directoryNotFound": "Repertoire introuvable : {dir}",
      "enterFolderExample": "Saisissez un dossier existant, par exemple ./locales/en.",
      "notDirectory": "Ce n est pas un repertoire : {dir}",
      "using": "Repertoire source utilise : {dir}",
      "noJsonDirect": "Aucun fichier JSON trouve directement dans : {dir}",
      "usingLanguageFolder": "Dossier de langue source utilise : {dir}",
      "noJsonWithLanguageFolder": "Aucun fichier JSON trouve dans : {dir}\nDossier de langue source egalement verifie : {languageDir}",
      "noJson": "Aucun fichier JSON trouve dans : {dir}"
    },
    "targetLanguages": {
      "title": "Langue(s) cible",
      "allConfigured": "a) Toutes les langues cible configurees : {languages}",
      "noneConfigured": "a) Toutes les langues cible configurees : aucune configuree",
      "enterCodes": "Ou saisissez un ou plusieurs codes de langue separes par des virgules ou espaces.",
      "sourceExcluded": "La langue source \"{lang}\" sera exclue automatiquement.",
      "noneSelected": "Aucune langue cible valide selectionnee. Annulation.",
      "configureHint": "Configurez defaultLanguages dans .i18ntk-config ou saisissez les codes cible manuellement.",
      "selected": "Langues cible : {languages}"
    },
    "protection": {
      "title": "Termes et cles proteges"
    },
    "common": {
      "default": "Par defaut : {value}",
      "examples": "Exemples :",
      "exampleValue": "Exemple : {value}",
      "examplesInline": "Exemples : {examples}",
      "pressEnterDefault": "Appuyez sur Entree pour utiliser la valeur par defaut.",
      "usingDefault": "Valeur par defaut utilisee : {value}"
    },
    "sourceLanguage": {
      "title": "Code de langue source",
      "hint": "Il doit correspondre a la langue des valeurs JSON source.",
      "using": "Langue source utilisee : {lang}",
      "invalid": "Code de langue invalide. Utilisez 2 caracteres ou plus (ex. en, de, fr)."
    },
    "files": {
      "title": "Quel(s) fichier(s) traduire ?",
      "all": "a) Tous les fichiers JSON ({count} : {files})",
      "choicePrompt": "Choix [a/all ou numero de fichier] : ",
      "invalidChoice": "Choix invalide. Annulation."
    },
    "dryRun": {
      "previewFor": "Apercu pour \"{lang}\"..."
    },
    "confirm": {
      "proceed": "Continuer avec la traduction reelle ?",
      "yesNoPrompt": "[o]ui / [n]on : ",
      "cancelled": "Traduction annulee."
    },
    "run": {
      "translatingTo": "Traduction vers \"{lang}\"...",
      "failedFor": "Echec pour \"{lang}\" : {error}"
    },
    "summary": {
      "title": "Resume :",
      "complete": "Traduction terminee !"
    },
    "nonInteractive": {
      "useDirect": "Mode non interactif. Utilisez la CLI directe :"
    },
    "errors": {
      "sourceDirectoryNotFound": "Repertoire de locale source introuvable : {dir}"
    }
  }
}
