i18ntk
Version:
i18n Tool Kit - Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.
733 lines • 168 kB
JSON
{
"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é",
"sourc