UNPKG

i18ntk

Version:

i18ntk (i18n Toolkit) - A comprehensive, enterprise-grade internationalization (i18n) management toolkit for JavaScript/TypeScript projects with advanced analysis, validation, and automation features

740 lines 123 kB
{ "meta": { "version": "1.5.3", "consolidated": "2025-08-06T14:36:37.494Z", "sourceFiles": 256 }, "common": { "welcome": "Bienvenue", "hello": "Bonjour", "goodbye": "Au revoir", "yes": "Oui", "no": "Non", "save": "Sauvegarder", "cancel": "Annuler", "delete": "Supprimer", "edit": "Éditer", "loading": "Chargement...", "offlineTitle": "Vous êtes hors ligne", "offlineMessage": "Vous êtes hors ligne", "tryReconnect": "Essayer de se reconnecter", "logout": "Déconnexion", "login": "Connexion", "amount": "Montant", "success": "Succès", "error": "Erreur", "warning": "Avertissement", "info": "Info :", "debug": "Débogage", "progress": "Progression :", "remaining": "Restant :", "total": "Total :", "completed": "7. Terminé avec succès !", "missing": "Manquant", "partial": "Partiel", "sameAsSource": "Identique à la source :", "formatMismatch": "Format non correspondant :", "typeMismatch": "Type non correspondant :", "structureMismatch": "Structure non correspondante :", "invalidOption": "Option invalide", "separator": "==================================================", "initializationFailed": "❌ Échec de l'initialisation : {error}", "stackTrace": "Trace de pile : {stack}", "pressEnterToContinue": "Appuyez sur Entrée pour continuer...", "pressEnterToReturn": "Appuyez sur Entrée pour revenir au menu principal...", "stepCompleted": "Étape '{stepName}' terminée.", "stepFailed": "Étape '{stepName}' échouée.", "runningStep": "Exécution de l'étape : {stepName}", "command": "Commande : {command}", "startingWorkflow": "Démarrage du flux de travail...", "workflowCompleted": "Flux de travail terminé.", "checkReports": "Vérifiez les rapports pour plus de détails.", "errorExecutingCommand": "Error executing command: {error}", "genericError": "❌ Error: {{error}}", "errorGeneratingStatusSummary": "Error generating status summary: {error}", "errorRunningDebugTool": "Error running debug tool '{displayName}': {error}", "errorReadingDebugLogs": "Error reading debug logs: {error}", "errorAnalyzingLogFile": "Error analyzing log file: {error}", "errorAnalyzingTranslationKeys": "Error analyzing translation keys: {error}", "errorAnalyzingTranslationCompleteness": "Error analyzing translation completeness: {error}", "errorAnalyzingTranslationFormat": "Error analyzing translation format: {error}", "errorAnalyzingTranslationType": "Error analyzing translation type: {error}", "errorAnalyzingTranslationStructure": "Error analyzing translation structure: {error}", "errorAnalyzingTranslationFormatMismatch": "Error analyzing translation format mismatch: {error}", "errorAnalyzingTranslationTypeMismatch": "Error analyzing translation type mismatch: {error}", "errorAnalyzingTranslationStructureMismatch": "Error analyzing translation structure mismatch: {error}", "errorAnalyzingTranslationSameAsSource": "Error analyzing translation same as source: {error}", "title": "Statut", "nextStep1": "1. Vérifier l'analyse d'utilisation :", "nextStep2": "2. Valider les traductions :", "nextStep3": "3. Analyser l'exhaustivité :", "nextStep4": "4. Compléter les traductions manquantes :", "nextStep5": "5. Générer le rapport de synthèse :", "nextStep6": "6. Réviser et finaliser les traductions :", "generating": "Génération du rapport de synthèse...", "review": "Révision des traductions...", "finalizing": "Finalisation des traductions...", "finalized": "Finalisé avec succès !", "errors": "Erreurs :", "warnings": "Avertissements :", "completedKeys": "Clés complétées :", "missingKeys": "Clés manquantes :", "partialKeys": "Clés partielles :" }, "analyze": { "help_message": "\nAnalyseur de Traduction I18n\n\nUtilisation: node i18ntk-analyze.js [options]\n\nOptions:\n --source-dir <dir> Répertoire source à analyser (par défaut: ./src)\n --i18n-dir <dir> Répertoire i18n (par défaut: ./src/locales)\n --output-report Générer un rapport détaillé\n --output-dir <dir> Répertoire de sortie pour les rapports (par défaut: ./reports)\n --help Afficher cette aide\n\nExemples:\n node i18ntk-analyze.js --output-report\n node i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-analyze.js --output-dir=./analysis --output-report\n", "source_directory": "📁 Répertoire source: {sourceDir}", "i18n_directory": "🌐 Répertoire i18n: {i18nDir}", "loading_translation_files": "📋 Chargement des fichiers de traduction...", "sourceDirectoryLabel": "📁 Répertoire Source: {{sourceDir}}", "sourceLanguageLabel": "🌍 Langue Source: {{sourceLanguage}}", "strictModeLabel": "⚙️ Mode Strict: {{mode}}\n", "found_translation_files_count": "✅ Trouvés {count} fichiers de traduction", "analyzing_translations": "🔍 Analyse des traductions...", "analysis_completed_successfully": "🎉 Analyse terminée avec succès !", "analysis_results": "📊 RÉSULTATS DE L'ANALYSE", "language_analysis_stats": " {language}: {translatedKeys}/{totalKeys} ({percentage}% traduit)", "sample_missing_keys": "\nExemple de clés manquantes:", "missing_key": "- {key}", "and_more_missing": "...et {count} de plus.", "sample_unused_keys": "\nExemple de clés inutilisées:", "unused_key": "- {key}", "and_more_unused": "...et {count} de plus.", "recommendations": "\n📋 RECOMMANDATIONS", "add_missing_translations": "💡 Ajouter les traductions manquantes pour améliorer la couverture.", "remove_unused_translations": "💡 Supprimer les traductions inutilisées pour garder votre projet propre.", "next_steps": "\n📋 PROCHAINES ÉTAPES", "review_analysis_results": "1. Examiner les résultats de l'analyse dans la console ou le rapport généré.", "run_with_output_report": "2. Exécuter avec --output-report pour un rapport détaillé.", "add_or_remove_translations": "3. Ajouter les traductions manquantes ou supprimer les inutilisées.", "rerun_analysis": "4. Relancer l'analyse pour vérifier les améliorations.", "analysis_summary": "📊 RÉSUMÉ DE L'ANALYSE", "source_files_scanned": "Fichiers source analysés: {fileCount}", "translation_files_checked": "Fichiers de traduction vérifiés: {translationFileCount}", "total_keys": "Clés totales: {totalKeys}", "translated_keys": "Clés traduites: {translatedKeys}", "missing_keys": "Clés manquantes: {missingKeys}", "unused_keys": "Clés inutilisées: {unusedKeys}", "translation_coverage": "Couverture de traduction: {coverage}%", "analysis_passed_for_language": "✅ Analyse réussie pour {language}", "analysis_failed_for_language": "❌ Analyse échouée pour {language} ({missingKeys} manquantes, {unusedKeys} inutilisées)", "starting": "🔍 Démarrage de l'analyse de traduction...", "foundLanguages": "📋 Trouvées {count} langues à analyser: {languages}", "analyzing": "🔄 Analyse de {language}...", "reportTitle": "📊 RAPPORT D'ANALYSE DE TRADUCTION", "generated": "Généré: {timestamp}", "status": "Statut: {translated}/{total} clés ({percentage}% traduit)", "filesAnalyzed": "Fichiers analysés: {analyzed}/{total}", "keysNeedingTranslation": "Clés nécessitant une traduction: {count}", "fileBreakdown": "📋 DÉCOMPOSITION DES FICHIERS", "error": "Erreur", "completed": "✅ Analyse terminée pour {language}", "progress": "📊 Progression Globale: {translated}/{total} langues traitées", "reportSaved": " Rapport sauvegardé: {reportPath}", "summary": "📊 RÉSUMÉ DE L'ANALYSE", "finished": "✅ Analyse terminée avec succès !", "statusFileMissing": "❌ Fichier de traduction manquant", "sourceKeys": "📊 Clés source: {count}", "translation": "📊 Traduction: {translated}/{total} ({percentage}%)", "structure": "🗂️ Structure: {status}", "consistent": "Consistente", "inconsistent": "Inconsistante", "missingKeys": "Clés manquantes: {count}", "extraKeys": "Clés supplémentaires: {count}", "issues": "⚠️ Problèmes trouvés: {count}", "issueType": { "not_translated": "Non traduit: {count}", "empty_value": "Valeurs vides: {count}", "partial_translation": "Traductions partielles: {count}", "format_mismatch": "Discordances de format: {count}", "type_mismatch": "Discordances de type: {count}", "structure_mismatch": "Discordances de structure: {count}", "same_as_source": "Identique à la source: {count}" }, "keysToTranslate": "📋 CLÉS À TRADUIRE", "key": "Clé", "english": "Anglais", "needsTranslation": "BESOIN DE TRADUCTION", "andMoreKeys": "...et {count} clés supplémentaires.", "noLanguages": "⚠️ Aucune langue cible trouvée.", "languageStats": "{language}: {percentage}% complet ({translated}/{total} clés)", "invalidReportFilePath": "Chemin de fichier de rapport invalide", "failedToWriteReportFile": "Échec de l'écriture sécurisée du fichier de rapport" }, "complete": { "configLoadedSuccessfully": "Configuration chargée avec succès", "configLoadingFailed": "Échec du chargement de la configuration", "title": "🌍 COMPLÉTION DE TRADUCTION I18N", "separator": "============================================================", "sourceDir": "📁 Répertoire source : {sourceDir}", "sourceLanguage": "🌐 Langue source : {sourceLanguage}", "dryRunMode": "🧪 Mode test - aucune modification ne sera appliquée", "languages": "🌍 Langues disponibles : {languages}", "addingMissingKeys": "➕ Ajout des clés manquantes aux fichiers de traduction...", "processing": "🔄 Traitement de {language}...", "addedKeys": "✅ {count} clés manquantes ajoutées", "noChangesNeeded": "✅ Aucune modification nécessaire pour {language}", "summaryTitle": "📊 RÉSUMÉ DE COMPLÉTION", "totalChanges": "📝 Modifications totales : {totalChanges}", "languagesProcessed": "🌍 Langues traitées : {languagesProcessed}", "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}", "nextStepsTitle": "📋 ÉTAPES SUIVANTES", "nextStep1": "1. Exécuter l'analyse d'utilisation :", "nextStep2": " node i18ntk-usage.js --output-report", "nextStep3": "2. Valider les traductions :", "nextStep4": " node i18ntk-validate.js", "nextStep5": "3. Analyser les motifs :", "nextStep6": " node i18ntk-analyze.js", "allKeysAvailable": "🎉 Toutes les clés de traduction sont maintenant disponibles !", "runWithoutDryRun": "💡 Exécuter sans --dry-run pour appliquer les modifications", "deletingOldReport": "🗑️ Suppression de l'ancien rapport...", "generatingFreshAnalysis": "📊 Génération d'une nouvelle analyse d'utilisation...", "couldNotGenerate": "❌ Impossible de générer l'analyse d'utilisation", "reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation des clés communes...", "foundMissingKeys": "📋 Trouvé {count} clés manquantes depuis l'analyse d'utilisation", "couldNotParse": "❌ Impossible d'analyser le rapport d'utilisation. Utilisation des clés communes...", "errorDuringCompletion": "❌ Erreur lors de la finalisation : {error}", "fatalError": "❌ Erreur fatale : {error}", "configurationValidationFailed": "Échec de la validation de configuration : champs requis manquants" }, "sizing": { "separator": "================================================================================", "lineSeparator": "--------------------------------------------------------------------------------", "analysisStats": "{{stats}}", "sourceDirectoryLabel": "📁 Répertoire source : {{sourceDir}}", "sourceLanguageLabel": "🌍 Langue source : {{sourceLanguage}}", "strictModeLabel": "⚙️ Mode strict : {{mode}}", "invalidSourceDirectoryError": "Chemin du répertoire source invalide : {{sourceDir}}", "sourceDirectoryNotFoundError": "Répertoire source introuvable : {{sourceDir}}", "invalidOutputDirectoryError": "Chemin du répertoire de sortie invalide : {{outputDir}}", "invalidReportFileError": "Chemin du fichier de rapport invalide", "problematic_keys": "Clés problématiques : {problematicKeys}", "problematicKeysLabel": "Clés problématiques : {problematicKeys}", "long_translations": "Traductions longues : {longTranslations}", "failedToSaveReportError": "Échec de l'enregistrement sécurisé du rapport", "invalidCsvFileError": "Chemin du fichier CSV invalide", "failedToSaveCsvError": "Échec de l'enregistrement sécurisé du rapport CSV", "fatalError": "❌ L'analyse du dimensionnement a échoué : {{error}}", "starting_i18n_sizing_analysis": "Démarrage de l'analyse du dimensionnement i18n...", "source_directory": "Répertoire source : {{sourceDir}}", "found_languages": "Langues trouvées : {{languages}}", "analyzing_file_sizes": "Analyse des tailles de fichiers...", "analyzing_translation_content": "Analyse du contenu des traductions...", "generating_size_comparisons": "Génération des comparaisons de taille...", "no_languages_found_for_comparison": "Aucune langue trouvée pour la comparaison", "sizing_analysis_results": "Résultats de l'analyse du dimensionnement I18n", "file_sizes_title": "Tailles des fichiers", "file_sizes_header": "Langue Taille(Ko) Lignes Caractères", "file_size_row": "{{lang}} {{sizeKB}} {{lines}} {{characters}}", "language_statistics_title": "Statistiques des langues", "language_stats_header": "Langue Clés Caractères Long. moy. Long. max Vides Longs", "language_stats_row": "{{lang}} {{totalKeys}} {{totalCharacters}} {{averageKeyLength}} {{maxKeyLength}} {{emptyKeys}} {{longKeys}}", "size_variations_title": "Variations de taille", "size_variations_header": "Langue Diff. car. % Diff Problématique", "size_variation_row": "{{lang}} {{characterDifference}} {{percentageDifference}}% {{problematic}}", "problematic_yes": "Oui", "problematic_no": "Non", "recommendations_title": "Recommandations", "recommendation_item": "{{index}}. {{recommendation}}", "problematic_key_detail": " {{index}}. Clé: '{{key}}' - Variations: {{variations}}", "generating_detailed_report": "Génération du rapport détaillé...", "keysHaveSignificantSizeVariations": "les clés présentent des variations de taille significatives", "longTranslationsDetected": "{{lang}} a {{data.longKeys}} traductions de plus de 100 caractères - envisagez de les décomposer", "report_saved_to": "Rapport enregistré dans : {{reportPath}}", "considerReviewingTranslations": "Envisagez de revoir les traductions {{lang}} - elles sont {{data.percentageDifference}}% plus longues que la référence", "csv_report_saved_to": "Rapport CSV enregistré dans : {{csvPath}}", "no_translation_files_found": "Aucun fichier de traduction trouvé", "analysis_completed": "Analyse terminée en {{duration}}ms", "analysis_failed": "L'analyse a échoué : {{errorMessage}}", "failed_to_parse_language_error": "Échec de l'analyse des traductions {{language}} : {{errorMessage}}", "recommendations": { "keys_have_significant_size_variations": "les clés présentent des variations de taille significatives", "consider_reviewing_translations": "Envisagez de revoir les traductions {{lang}} - elles sont {{percentageDifference}}% {{comparison}} que la référence", "long_translations_detected": "{{lang}} a {{longKeys}} traductions de plus de {{threshold}} caractères - envisagez de les décomposer" }, "hardcodedTexts": { "keysHaveSignificantSizeVariations": "les clés présentent des variations de taille significatives", "considerReviewingTranslations": "Envisagez de revoir les traductions {{lang}} - elles sont {{percentageDifference}}% {{comparison}} que la référence", "longTranslationsDetected": "{{lang}} a {{longKeys}} traductions de plus de {{threshold}} caractères - envisagez de les décomposer" } }, "usage": { "help_message": "\nAnalyseur d'utilisation I18n\n\nUsage : node i18ntk-usage.js [options]\n\nOptions :\n --source-dir <dir> Répertoire source à analyser (défaut : ./src)\n --i18n-dir <dir> Répertoire I18n (défaut : ./src/locales)\n --output-report Générer un rapport détaillé\n --output-dir <dir> Répertoire de sortie pour les rapports (défaut : ./reports)\n --help Afficher cette aide\n\nExemples :\n node i18ntk-usage.js --output-report\n node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-usage.js --output-dir=./analysis --output-report\n", "source_directory_thissourcedir": "📁 Répertoire source : {sourceDir}", "translationCompletenessTitle": "🌍 Complétude de la traduction :", "i18n_directory_thisi18ndir": "🌐 Répertoire I18n : {i18nDir}", "failed_to_parse_filename_error": "⚠️ Échec de l'analyse de {fileName} : {errorMessage}", "analyzing_source_files": "🔍 Analyse des fichiers source...", "found_files_in_source": "📂 Trouvé {numFiles} fichiers dans le répertoire source", "found_thisusedkeyssize_unique_": "🎯 Trouvé {usedKeysSize} clés uniques utilisées", "total_key_usages_totalkeysfoun": "📊 Total des utilisations de clés : {totalKeysFound}", "loading_available_translation_": "📋 Chargement des clés de traduction disponibles...", "found_thisavailablekeyssize_av": "✅ Trouvé {availableKeysSize} clés disponibles", "foundTranslationFiles": "✅ Trouvé {count} fichiers de traduction", "pressEnterToReturnToMenu": "Appuyez sur Entrée pour revenir au menu principal", "notTranslatedKeysTotal": "⚠️ Clés non traduites : {total}", "noSourceFilesFound": "⚠️ Aucun fichier source trouvé dans le répertoire source.", "reviewNotTranslatedKeys": "💡 Examiner les clés non traduites", "analysisCompletedSuccessfully": "🎉 Analyse terminée avec succès !", "detectedSourceDirectory": "Répertoire source détecté : {{sourceDir}}", "detectedI18nDirectory": "Répertoire i18n détecté : {{i18nDir}}", "fileInfo": " 📄 {namespace}: {keys} clés", "failedToAnalyzeUsage": "❌ Échec de l'analyse d'utilisation : {error}", "failedToAnalyzeFile": "❌ Échec de l'analyse de fichier : {error}", "analyzerInitialized": "Analyseur initialisé", "analyzerInitFailed": "Échec de l'initialisation de l'analyseur : {error}", "argsParsed": "Arguments analysés", "argsParseFailed": "Échec de l'analyse des arguments : {error}", "translationDiscoveryError": "Erreur de découverte de traduction : {error}", "fileTraversalError": "Erreur de parcours des fichiers : {error}", "usageAnalysisFailed": "Échec de l'analyse d'utilisation : {error}", "translationFileParseError": "Erreur d'analyse du fichier de traduction : {error}", "translationKeysLoadError": "Erreur de chargement des clés de traduction : {error}", "languageCompletenessStats": "{language}: {translated}/{total} ({completeness}% traduit)", "missingKeysCount": "Clés manquantes : {count}", "analyzingTranslationCompleteness": "Analyse de la complétude des traductions...", "unusedKeysCount": "Clés inutilisées : {count}", "usedKeysCount": "Clés utilisées : {count}", "availableKeysCount": "Clés disponibles : {count}", "analysisResults": "Résultats de l'analyse :", "checkUsage": { "title": "🔍 ANALYSE D'UTILISATION I18N", "message": "Analyse de l'utilisation des clés i18n dans votre projet.", "help_message": "\nAnalyseur d'utilisation I18n\n\nUsage : node i18ntk-usage.js [options]\n\nOptions :\n --source-dir <dir> Répertoire source à analyser (défaut : ./src)\n --i18n-dir <dir> Répertoire I18n (défaut : ./src/locales)\n --output-report Générer un rapport détaillé\n --output-dir <dir> Répertoire de sortie pour les rapports (défaut : ./reports)\n --help Afficher cette aide\n\nExemples :\n node i18ntk-usage.js --output-report\n node i18ntk-usage.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-usage.js --output-dir=./analysis --output-report\n", "source_directory_thissourcedir": "📁 Répertoire source : {sourceDir}", "i18n_directory_thisi18ndir": "🌐 Répertoire I18n : {i18nDir}", "loading_available_translation_": "📋 Chargement des clés de traduction disponibles...", "found_thisavailablekeyssize_av": "✅ Trouvé {availableKeysSize} clés disponibles", "analyzing_source_files": "🔍 Analyse des fichiers source...", "found_files_in_source": "📂 Trouvé {numFiles} fichiers dans le répertoire source", "found_thisusedkeyssize_unique_": "🎯 Trouvé {usedKeysSize} clés uniques utilisées", "total_key_usages_totalkeysfoun": "📊 Total des utilisations de clés : {totalKeysFound}", "translation_completeness_title": "📊 COMPLÉTUDE DE LA TRADUCTION", "language_completeness_stats": " {language} : {translated}/{total} ({completeness}% traduit)", "n_sample_unused_keys": "\nÉchantillon de clés inutilisées :", "key": "- {key}", "and_unusedkeyslength_5_more": "...et {count} de plus.", "n_recommendations": "\n📋 RECOMMANDATIONS", "consider_removing_unused_trans": "💡 Envisager de supprimer les traductions inutilisées pour garder votre projet propre.", "n_next_steps": "\n📋 PROCHAINES ÉTAPES", "1_review_the_analysis_results": "1. Examiner les résultats de l'analyse dans la console ou le rapport généré.", "2_run_with_outputreport_for_de": "2. Exécuter avec --output-report pour un rapport détaillé.", "3_remove_unused_keys_or_add_mi": "3. Supprimer les clés inutilisées ou ajouter les clés manquantes à votre code source.", "4_rerun_analysis_to_verify_imp": "4. Ré-exécuter l'analyse pour vérifier les améliorations.", "usage_analysis_results": "📊 RÉSULTATS DE L'ANALYSE D'UTILISATION", "source_files_scanned_thisfileu": "Fichiers source analysés : {fileUsageSize}", "available_translation_keys_thi": "Clés de traduction disponibles : {availableKeysSize}", "used_translation_keys_thisused": "Clés de traduction utilisées : {usedKeysSize}", "dynamic_keys_detected_dynamick": "Clés dynamiques détectées : {dynamicKeysLength}", "unused_keys_unusedkeyslength": "Clés inutilisées : {unusedKeysLength}", "missing_keys_missingkeyslength": "Clés manquantes : {missingKeysLength}", "noSourceFilesFound": "Aucun fichier source trouvé à analyser.", "processedFiles": "Traité {processedFiles} sur {totalFiles} fichiers.", "i18nDirectoryNotFound": "Répertoire I18n introuvable : {i18nDir}", "noTranslationLanguagesFound": "Aucune langue de traduction trouvée.", "failedToAnalyzeFile": "Échec de l'analyse du fichier {filePath} : {error}", "failedToAnalyzeLanguage": "Échec de l'analyse de la langue {language} : {error}", "translationCompletenessAnalysisFailed": "L'analyse de complétude de traduction a échoué : {error}", "n": "" }, "complete": { "configLoadedSuccessfully": "Configuration chargée avec succès", "configLoadingFailed": "Échec du chargement de la configuration", "title": "🌍 COMPLÉTION DE TRADUCTION I18N", "separator": "============================================================", "sourceDir": "📁 Répertoire source : {sourceDir}", "sourceLanguage": "🌐 Langue source : {sourceLanguage}", "dryRunMode": "🧪 Mode test - aucun changement ne sera appliqué", "languages": "🌍 Langues disponibles : {languages}", "addingMissingKeys": "➕ Ajout des clés manquantes aux fichiers de traduction...", "processing": "🔄 Traitement de {language}...", "addedKeys": "✅ Ajouté {count} clés manquantes", "noChangesNeeded": "✅ Aucun changement nécessaire pour {language}", "summaryTitle": "📊 RÉSUMÉ DE COMPLÉTION", "totalChanges": "📝 Total des changements : {totalChanges}", "languagesProcessed": "🌍 Langues traitées : {languagesProcessed}", "missingKeysAdded": "➕ Clés manquantes ajoutées : {missingKeysAdded}", "nextStepsTitle": "📋 PROCHAINES ÉTAPES", "nextStep1": "1. Exécuter l'analyse d'utilisation :", "nextStep2": " node i18ntk-usage.js --output-report", "nextStep3": "2. Valider les traductions :", "nextStep4": " node i18ntk-validate.js", "nextStep5": "3. Analyser les modèles :", "nextStep6": " node i18ntk-analyze.js", "allKeysAvailable": "🎉 Toutes les clés de traduction sont maintenant disponibles !", "runWithoutDryRun": "💡 Exécuter sans --dry-run pour appliquer les changements", "deletingOldReport": "🗑️ Suppression de l'ancien rapport...", "generatingFreshAnalysis": "📊 Génération d'une nouvelle analyse d'utilisation...", "couldNotGenerate": "❌ Impossible de générer l'analyse d'utilisation", "reportNotFound": "📋 Rapport d'utilisation introuvable. Utilisation des clés communes...", "foundMissingKeys": "📋 Trouvé {count} clés manquantes depuis l'analyse d'utilisation", "couldNotParse": "❌ Impossible d'analyser le rapport d'utilisation. Utilisation des clés communes..." } }, "validate": { "help_message": "\nValidateur de traductions I18n\n\nUtilisation : node i18ntk-validate.js [options]\n\nOptions :\n --source-dir <dir> Répertoire source à analyser (par défaut : ./src)\n --i18n-dir <dir> Répertoire i18n (par défaut : ./src/locales)\n --output-report Générer un rapport détaillé\n --output-dir <dir> Répertoire de sortie pour les rapports (par défaut : ./reports)\n --help Afficher cette aide\n\nExemples :\n node i18ntk-validate.js --output-report\n node i18ntk-validate.js --source-dir=./app --i18n-dir=./locales\n node i18ntk-validate.js --output-dir=./analysis --output-report\n", "title": "🔍 Validateur de traductions I18n", "message": "Lancement du processus de validation...", "sourceDirectory": "📁 Répertoire source : {dir}", "sourceLanguage": "🌍 Langue source : {sourceLanguage}", "strictMode": "⚙️ Mode strict : {mode}", "noTargetLanguages": "⚠️ Aucune langue cible trouvée à valider", "validatingLanguages": "🌍 Validation des langues : {langs}", "validatingLanguage": "🔍 Validation de la langue : {lang}", "filesCount": "📄 Fichiers : {count}", "keysCount": "🔑 Clés : {count}", "missingFilesCount": "📁 Fichiers manquants : {count}", "syntaxErrorsCount": "❌ Erreurs de syntaxe : {count}", "translationPercentage": "🎯 Traduction : {percentage}% ({translated}/{total} clés)", "validationSummary": "📊 RÉCAPITULATIF DE LA VALIDATION", "validation_failed": "❌ Validation échouée : {error}", "totalErrors": "❌ Erreurs totales : {count}", "totalWarnings": "⚠️ Avertissements totaux : {count}", "errorsSection": "❌ ERREURS", "warningsSection": "⚠️ AVERTISSEMENTS", "recommendationsSection": "💡 RECOMMANDATIONS", "fixErrorsFirst": "1. Corrigez d'abord toutes les erreurs", "resolveMissingFilesAndSyntaxErrors": "1. Résolvez les fichiers manquants et les erreurs de syntaxe", "fixStructuralInconsistencies": "2. Corrigez les incohérences structurelles", "completeMissingTranslations": "3. Complétez les traductions manquantes", "rerunValidation": "4. Relancez la validation pour vérifier les corrections", "addressWarnings": "Traitez les avertissements pour améliorer la qualité", "reviewWarnings": "Vérifiez les avertissements et corrigez-les si nécessaire", "considerRunningWithStrict": "2. Envisagez d'exécuter avec l'option --strict pour une validation plus stricte", "allValidationsPassed": "🎉 Toutes les validations sont réussies !", "considerRunningUsageAnalysis": "Envisagez d'exécuter l'analyse d'utilisation : node i18ntk-usage.js", "deletedOldReport": "🗑️ Ancien rapport de validation supprimé", "sourceDir": "📁 Répertoire source : {sourceDir}", "i18nDir": "🌐 Répertoire i18n : {i18nDir}", "loadingTranslationFiles": "📋 Chargement des fichiers de traduction...", "foundTranslationFilesCount": "✅ {count} fichiers de traduction trouvés", "analyzingTranslations": "🔍 Analyse des traductions...", "validationCompletedSuccessfully": "🎉 Validation terminée avec succès !", "validationErrorsFound": "⚠️ Erreurs de validation trouvées : {count}", "validationWarningsFound": "⚠️ Avertissements de validation trouvés : {count}", "validationPassed": "✅ Validation réussie sans erreurs", "validationFailed": "Validation échouée : {error}", "startingValidationProcess": "🔍 Démarrage du processus de validation...", "validationProcessCompletedSuccessfully": "✅ Processus de validation terminé avec succès", "stackTrace": "Trace de la pile : {{stack}}", "authenticationFailed": "❌ Authentification échouée. Accès refusé.", "fatalValidationError": "❌ Erreur fatale de validation : {{error}}", "configAccess": "Accès à la configuration pour la validation", "configValidated": "Configuration validée avec succès", "configError": "Erreur de configuration : {error}", "validatorInit": "Initialisation du validateur I18n", "validatorInitialized": "Validateur I18n initialisé avec succès", "validatorInitError": "Erreur d'initialisation du validateur : {error}", "argsParsing": "Analyse des arguments de la ligne de commande", "argsParsed": "Arguments de la ligne de commande analysés avec succès", "argsParseError": "Erreur d'analyse des arguments : {error}", "languagesScan": "Analyse des langues disponibles", "languagesFound": "{count} langues trouvées", "languagesScanError": "Erreur lors de l'analyse des langues : {error}", "filesScan": "{count} fichiers trouvés en {language}", "filesScanError": "Erreur lors de l'analyse des fichiers : {error}", "jsonValidated": "Syntaxe JSON validée : {filePath}", "jsonValidationError": "Erreur de validation JSON : {error}", "languageValidation": "Validation de la langue : {language}", "languageValidationError": "Erreur de validation de la langue : {error}", "fileDeleted": "Fichier supprimé", "runStarted": "Démarrage de la validation", "runCompleted": "Validation terminée avec succès", "runError": "Exécution de la validation échouée : {error}", "scriptExecution": "Exécution du script", "validationCompleted": "Validation terminée", "validationError": "Erreur de validation : {error}", "separator": "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", "languageHeader": "🌐 Langue : {language}", "validationResults": "📊 Résultats de la validation", "noErrors": "✅ Aucune erreur trouvée", "noWarnings": "✅ Aucun avertissement trouvé", "summaryHeader": "📋 RÉCAPITULATIF GÉNÉRAL", "progressIndicator": "⏳ Traitement en cours...", "completedIndicator": "✅ Terminé", "errorIndicator": "❌ Erreur", "warningIndicator": "⚠️ Avertissement", "infoIndicator": "ℹ️ Info", "sourceDirNotConfigured": "Répertoire source non configuré", "sourceLanguageNotConfigured": "Langue source non configurée", "translationFunctionNotInitialized": "Fonction de traduction non initialisée correctement", "sourceLanguageDirectoryNotFound": "Répertoire de la langue source introuvable", "specifiedLanguageNotFound": "Langue spécifiée introuvable", "noJsonFilesFound": "Aucun fichier JSON trouvé dans le répertoire source : {sourceDir}", "i18nDirectoryNotFound": "Répertoire i18n introuvable : {i18nDir}", "invalidDirectoryPaths": "Chemins de répertoires invalides détectés", "invalidSampleFilePath": "Chemin de fichier d'exemple invalide", "failedToCreateSampleTranslationFile": "Échec de la création du fichier de traduction d'exemple", "invalidFilePathDetected": "Chemin de fichier invalide détecté", "failedToWriteFile": "Échec de l'écriture du fichier : {filePath}" }, "adminCli": { "setupPinProtectionTitle": "\n🔐 Configuration de la protection PIN Admin", "setupPinProtectionDescription": "Cela exigera un PIN de 4 à 6 chiffres pour les opérations administratives.", "enablePinProtectionPrompt": "Voulez-vous activer la protection PIN admin ?", "setupCancelled": "Configuration de la protection PIN admin annulée.", "enterPinPrompt": "Entrez un PIN de 4 à 6 chiffres : ", "pinFormatError": "❌ Le PIN doit comporter 4 à 6 chiffres. Veuillez réessayer.", "confirmPinPrompt": "Confirmez le PIN : ", "pinMismatchError": "❌ Les PIN ne correspondent pas. Veuillez réessayer.", "pinProtectionEnabledSuccess": "✅ Protection PIN admin activée avec succès !", "pinRecoveryWarning": "⚠️ Retenez votre PIN - il ne peut pas être récupéré en cas de perte.", "setupPinProtectionFailed": "❌ Échec de la configuration de la protection PIN admin.", "errorSettingUpPin": "❌ Erreur lors de la configuration du PIN admin : {message}", "authRequiredForOperation": "\n🔐 Authentification admin requise pour : {operation}", "invalidPinFormat": "❌ Format de PIN invalide. Le PIN doit comporter 4 à 6 chiffres.", "authenticationSuccess": "✅ Authentification réussie !", "invalidPinAttemptsRemaining": "❌ PIN invalide. {remaining} tentatives restantes.", "authenticationFailedAccessDenied": "❌ Authentification échouée. Accès refusé.", "authenticationError": "❌ Erreur d'authentification : {message}", "pinProtectionNotEnabled": "La protection PIN admin n'est pas activée actuellement.", "disablingPinProtectionTitle": "\n🔓 Désactivation de la protection PIN Admin", "confirmDisablePinProtection": "Êtes-vous sûr de vouloir désactiver la protection PIN admin ?", "operationCancelled": "Opération annulée.", "pinProtectionDisabledSuccess": "✅ Protection PIN admin désactivée.", "disablePinProtectionFailed": "❌ Échec de la désactivation de la protection PIN admin.", "errorDisablingPinProtection": "❌ Erreur lors de la désactivation de la protection admin : {message}", "adminProtectionStatusTitle": "\n🔐 État de la protection admin", "statusEnabled": "Statut : ✅ ACTIVÉ", "protectionDetails": "Protection : PIN de 4 à 6 chiffres requis pour les opérations admin", "lockoutDetails": "Verrouillage : 3 échecs = verrouillage de 15 minutes", "statusDisabled": "Statut : ❌ DÉSACTIVÉ", "noAuthRequired": "Protection : Aucune authentification requise", "unprotectedRisk": "Risque : les opérations admin ne sont pas protégées", "errorCheckingAdminStatus": "❌ Erreur lors de la vérification du statut admin : {message}", "authRequired": "🔐 Authentification admin requise.", "invalidPin": "❌ PIN invalide.", "authSuccess": "✅ Authentification réussie !", "adminPinSetupCli": "admin_pin_setup_cli", "adminAuthFailedCli": "admin_auth_failed_cli", "adminAuthDisabledCli": "admin_auth_disabled_cli", "protectedAccess": "Accès protégé : authentification admin requise pour les opérations sensibles.", "enterPin": "Entrez le PIN admin : ", "accessGranted": "Accès accordé." }, "adminPin": { "setup_title": "🔐 Configuration du PIN admin", "setup_separator": "============================================================", "setup_description": "Créez un PIN de 4 à 6 chiffres pour l'accès admin aux paramètres sensibles.", "required_for_title": "Ce PIN sera requis pour :", "required_for_1": " • Modifier les paramètres de sécurité", "required_for_2": " • Modifier des configurations avancées", "required_for_3": " • Accéder aux outils de débogage", "required_for_4": " • Réinitialiser les paramètres", "setup_note": "💡 Remarque : vous verrez des astérisques (*) pendant la saisie : ils masquent simplement les caractères.", "setup_digits_only": " Seuls les chiffres de 0 à 9 sont acceptés pour le PIN.", "invalid_pin_length": "❌ PIN invalide. Doit comporter 4 à 6 chiffres (0-9 uniquement).", "invalid_pin_example": " Exemple : 1234 ou 567890", "pins_do_not_match": "❌ Les PIN ne correspondent pas.", "setup_success": "✅ Le PIN admin a été configuré avec succès !", "setup_warning": "⚠️ Conservez ce PIN en lieu sûr. Il ne peut pas être récupéré en cas de perte.", "setup_error": "❌ Erreur lors de la configuration du PIN :", "session_expired": "\n⏰ Session admin expirée en raison de l'inactivité.", "no_pin_set_setting_up": "⚠️ Aucun PIN admin défini. Configuration du PIN en cours…", "no_pin_configured_access_denied": "⚠️ Aucun PIN admin configuré. Accès refusé.", "use_admin_settings_to_set_pin": "💡 Utilisez les paramètres admin pour configurer un PIN d'abord.", "locked_out": "🔒 Accès admin verrouillé en raison de trop nombreuses tentatives infructueuses.", "wait_before_retry": "Veuillez attendre 5 minutes avant de réessayer.", "access_granted": "✅ Accès accordé.", "incorrect_pin": "❌ PIN incorrect. {attempts} tentatives restantes.", "verify_pin_error": "❌ Erreur lors de la vérification du PIN :", "already_configured": "✅ Le PIN admin est déjà configuré.", "optional_setup_title": "\n🔐 Configuration facultative du PIN admin", "optional_setup_description": "La protection PIN admin ajoute de la sécurité pour des opérations sensibles telles que :", "setup_prompt": "Souhaitez-vous configurer un PIN admin ? (y/N) : ", "skipping_setup": "⏭️ Configuration du PIN facultative. Vous pouvez le configurer plus tard dans les paramètres.", "setup_prompt_error": "❌ Erreur lors de l'invite de configuration du PIN :", "protectedAccess": "Accès protégé : authentification admin requise pour les opérations sensibles.", "enterPin": "Entrez le PIN admin : ", "accessGranted": "Accès accordé.", "invalidPin": "❌ PIN invalide. Veuillez réessayer.", "weak_pin_warning": "⚠️ AVERTISSEMENT : Ce PIN semble être faible ou courant.", "weak_pin_suggestion": "💡 Envisagez d'utiliser un PIN plus robuste avec des chiffres variés.", "use_anyway_prompt": "Tapez \"yes\" pour l'utiliser quand même, ou appuyez sur Entrée pour choisir un autre PIN : ", "enter_new_pin": "Entrez un nouveau PIN admin (4-6 chiffres) : ", "confirm_pin": "Confirmez le PIN admin : ", "not_set": "Non défini", "pin_display_mask": "####" }, "autorun": { "missingRequiredFile": "Fichier requis manquant : {file}", "runInitializationFirst": "Veuillez d'abord exécuter l'initialisation.", "initializationCheckPassed": "Contrôle d'initialisation réussi.", "runningStep": "Exécution de l'étape : {stepName}", "commandLabel": "Commande : {command}", "stepRunning": "L'étape '{stepName}' est en cours…", "stepCompletedWithTime": "L'étape '{stepName}' terminée en {duration} ms.", "stepCompleted": "L'étape '{stepName}' terminée.", "stepFailed": "L'étape '{stepName}' a échoué.", "errorLabel": "Erreur : {error}", "stepFailedWithError": "L'étape '{stepName}' a échoué avec l'erreur : {error}", "requiredStepFailed": "Étape requise échouée. Arrêt du workflow.", "optionalStepFailed": "Étape facultative échouée. Poursuite du workflow.", "startingAutoRunWorkflow": "Démarrage du workflow Auto-Run…", "workflowIncludesSteps": "Le workflow comprend {count} étapes :", "stepRequired": "(Requise)", "stepOptional": "(Facultative)", "startingExecution": "Démarrage de l'exécution…", "workflowStopped": "Workflow arrêté.", "workflowCompleted": "Workflow terminé.", "pressEnterToContinue": "Appuyez sur Entrée pour continuer…", "runningSelectedSteps": "Exécution des étapes sélectionnées…", "invalidStepNumber": "Numéro d'étape invalide : {stepNum}", "executionReport": "Rapport d'exécution :", "successfulSteps": "Étapes réussies : {count}", "failedSteps": "Étapes échouées : {count}", "requiredFailedSteps": "Étapes requises échouées : {count}", "stepDetails": "Détails de l'étape :", "errorDetails": "Erreur : {error}", "reportSavedTo": "Rapport enregistré dans : {path}", "overallStatusSuccess": "SUCCÈS", "overallStatusFailed": "ÉCHEC", "overallStatus": "Statut global : {status}", "customSettingsConfiguration": "Configuration des paramètres personnalisés", "pressEnterForDefaults": "Appuyez sur Entrée pour utiliser les paramètres par défaut pour toute invite.", "sourceDirPrompt": "Entrez le répertoire source (par défaut : {default}) : ", "sourceLangPrompt": "Entrez la langue source (par défaut : {default}) : ", "targetLangsPrompt": "Entrez les langues cibles (séparées par des virgules, par défaut : {default}) : ", "translationMarkerPrompt": "Entrez le marqueur de traduction (par défaut : {default}) : ", "outputDirPrompt": "Entrez le répertoire de sortie pour les rapports (par défaut : {default}) : ", "settingsUpdatedSuccessfully": "Paramètres mis à jour avec succès !", "errorConfiguringSettings": "Erreur lors de la configuration des paramètres : {error}", "autoRunScriptTitle": "Script Auto-Run", "usageTitle": "Utilisation :", "runAllSteps": "node i18ntk-autorun.js --all - Exécuter toutes les étapes définies dans i18ntk-config.json", "configureSettingsFirst": "node i18ntk-autorun.js --config - Configurer les paramètres du workflow", "runSpecificSteps": "node i18ntk-autorun.js --steps <numéro_étapes> - Exécuter des étapes spécifiques (ex. --steps 1,3,5)", "showHelp": "node i18ntk-autorun.js --help - Afficher cette aide", "availableSteps": "Étapes disponibles :", "examplesTitle": "Exemples :", "configExample": "node i18ntk-autorun.js --config", "stepsExample1": "node i18ntk-autorun.js --steps 1,2,3", "stepsExample2": "node i18ntk-autorun.js --all", "configurationComplete": "Configuration terminée.", "runAutoRunCommand": "Vous pouvez maintenant exécuter la commande auto-run.", "configurationFailed": "Configuration échouée : {error}", "noValidStepNumbers": "Aucun numéro d'étape valide fourni.", "autoRunFailed": "Exécution auto-run échouée : {error}", "stepInitializeProject": "Initialiser le projet", "stepAnalyzeTranslations": "Analyser les traductions", "stepValidateTranslations": "Valider les traductions", "stepCheckUsage": "Vérifier l'utilisation", "stepCompleteTranslations": "Compléter les traductions", "stepAnalyzeSizing": "Analyser le dimensionnement", "stepGenerateSummary": "Génération du rapport résumé…", "stepCompletedIcon": "✅", "stepCompletedWithIcon": "✅ Étape '{stepName}' terminée.", "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Exécution de l'étape '{stepName}'…", "stepFailedIcon": "❌", "translationLoadWarning": "Avertissement : impossible de charger les traductions {lang}", "configReadError": "Erreur de lecture de {file}", "separator": "==================================================" }, "debug": { "title": "🔧 Outils de débogage", "separator": "============================================================", "mainDebuggerSystemDiagnostics": "1. Diagnostics système", "_consoleTranslationsCheck": "// 2. Vérification des traductions console", "_exportMissingKeys": "// 3. Exporter les clés de traduction manquantes", "_replaceHardcodedConsole": "// 4. Remplacer les chaînes console en dur", "_consoleKeyChecker": "// 5. Vérificateur de clés console", "debugLogs": "2. Journaux de débogage", "backToMainMenu": "0. Retour au menu principal", "selectOption": "Sélectionnez un outil de débogage : ", "runningDebugTool": "Exécution de {displayName}…", "debugToolNotFound": "❌ Outil de débogage introuvable : {toolName}", "recentDebugLogs": "📄 Journaux de débogage récents", "noDebugLogsFound": "❌ Aucun journal de débogage trouvé.", "debugLogsDirectoryNotFound": "❌ Répertoire des journaux de débogage introuvable.", "selectLogPrompt": "Sélectionnez le fichier journal à afficher (1-{count}) : ", "invalidChoiceSelectRange": "Choix invalide. Veuillez sélectionner dans la plage disponible.", "contentOf": "📄 Contenu de {filename} :", "pressEnterToContinue": "Appuyez sur Entrée pour continuer…" }, "detect_language_mismatches": { "tool_title": "🔍 Outil de détection des incohérences linguistiques", "separator": "=====================================\n", "analyzing_file": "📄 Analyse de {language}.json…", "error_analyzing_file": "❌ Erreur lors de l’analyse de {filename} : {errorMessage}", "results_title": "📊 RÉSULTATS DE DÉTECTION DES INCOHÉRENCES", "results_separator": "========================================\n", "summary_title": "📋 RÉCAPITULATIF :", "total_files_analyzed": " Fichiers analysés au total : {totalFiles}", "files_with_mismatches": " Fichiers avec incohérences : {filesWithMismatches}", "total_mismatches_found": " Incohérences totales trouvées : {totalMismatches}\n", "no_mismatches_found": "✅ Aucune incohérence linguistique trouvée ! Toutes les traductions semblent correctes.\n", "detailed_results_title": "🔍 RÉSULTATS DÉTAILLÉS :\n", "file_mismatch_header": "📄 {filename} ({language})", "mismatches_count": " Incohérences trouvées : {count}\n", "mismatch_details": " {index}. Clé : {key}", "mismatch_value": " Valeur : « {value} »", "mismatch_issue": " Problème : {description}", "recommendations_title": "💡 RECOMMANDATIONS :\n", "recommendation_1": "1. Vérifiez et traduisez toutes les entrées marquées [TRANSLATE]", "recommendation_2": "2. Remplacez les préfixes de langue (ex. [DE], [FR]) par de vraies traductions", "recommendation_3": "3. Traduisez le texte en anglais vers la langue cible appropriée", "recommendation_4": "4. Utilisez des équivalents natifs pour tout texte destiné à l’utilisateur", "recommendation_5": "5. Relancez cet outil après corrections pour vérifier les fixes\n", "detailed_report_saved": "📄 Rapport détaillé enregistré : {reportPath}\n", "error_saving_report": "❌ Erreur lors de la sauvegarde du rapport : {errorMessage}\n", "auto_fix_mode": "🔧 Mode correction automatique {dryRun}", "auto_fix_separator": "=====================================\n", "fixed_file": "✅ Fichier corrigé : {filename}", "auto_fix_summary_title": "\n📊 Récapitulatif des corrections :", "total_fixes_applied": " Nombre total de corrections appliquées : {count}", "preview_fixes_title": "\n🔍 Aperçu des corrections :", "fix_details": " {file} : {key}\n Ancien : « {old} »\n Nouveau : « {new} »\n", "more_fixes": " … et {count} corrections supplémentaires\n", "run_with_apply_fixes": "💡 Exécutez avec --apply pour appliquer ces corrections\n", "error_general": "❌ Erreur :", "mainDebuggerSystemDiagnostics": "Diagnostics système principal", "exportMissingKeys": "Exporter les clés manquantes", "replaceHardcodedConsole": "Remplacer console en dur", "consoleKeyChecker": "Vérificateur de clés console", "debugLogs": "Journaux de débogage", "backToMainMenu": "Retour au menu principal", "invalidChoiceSelectRange": "❌ Choix invalide. Sélectionnez un nombre du menu affiché.", "runningDebugTool": "Exécution de l’outil de débogage : {displayName}", "debugToolNotFound": "Outil de débogage « {toolName} » introuvable.", "recentDebugLogs": "Journaux de débogage récents", "noDebugLogsFound": "Aucun journal de débogage trouvé.", "logEntry": "Entrée journal : {timestamp} – {message}", "debugLogsDirectoryNotFound": "Répertoire des journaux de débogage introuvable." }, "help": { "title": "📊 AIDE À LA GESTION I18N\n\n", "usage": "Utilisation : node i18ntk-manage.js [options]\n", "interactiveMode": "\n💡 Utilisez : node i18ntk-manage.js --command=<commande> pour exécuter directement\n", "showHelp": "\n📖 Utilisez : node i18ntk-manage.js --help pour les commandes disponibles\n", "availableCommands": "\n📖 Commandes disponibles :\n", "initProject": "🚀 Initialiser de nouvelles langues", "analyzeTranslations": "🔍 Analyser les traductions", "validateTranslations": "✅ Valider les traductions", "checkUsage": "📊 Vérifier l’utilisation des clés", "initCommand": " init - Initialiser de nouvelles langues", "analyzeCommand": " analyze - Analyser les traductions", "validateCommand": " validate - Valider les traductions", "usageCommand": " usage - Vérifier l’utilisation des clés", "sizingCommand": " sizing - Analyser le dimensionnement", "completeCommand": " complete - Compléter les traductions (100 % de couverture)", "summaryCommand": " summary - Afficher le statut du projet", "debugCommand": " debug - Déboguer les problèmes de traduction", "menu": { "title": "\n🌐 MENU DE GESTION I18N\n", "description": "Menu interactif pour la gestion de l’internationalisation\n", "exit": "\n🚪 Quitter" }, "commands": { "init": "\n init - Initialiser de nouvelles langues", "analyze": " analyze - Analyser les traductions", "validate": " validate - Valider les traductions", "usage": " usage - Vérifier l’utilisation des clés", "sizing": " sizing - Analyser le dimensionnement", "complete": " complete - Compléter les traductions (100 % de couverture)", "summary": " summary - Afficher le statut du projet", "debug": " debug - Déboguer les problèmes de traduction" }, "options": { "sourceDir": "\n --source-dir <dir> Répertoire source à analyser", "output": " --output <file> Fichier de sortie pour le rapport", "verbose": " --verbose, -v Afficher les