UNPKG

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
{ "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