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

742 lines 119 kB
{ "meta": { "version": "1.5.3", "consolidated": "2025-08-06T14:36:37.481Z", "sourceFiles": 256 }, "common": { "welcome": "Bienvenido", "hello": "Hola", "goodbye": "Adiós", "yes": "Sí", "no": "No", "save": "Guardar", "cancel": "Cancelar", "delete": "Eliminar", "edit": "Editar", "loading": "Cargando...", "offlineTitle": "Desconectado", "offlineMessage": "Estás desconectado", "tryReconnect": "Intentar reconectar", "logout": "Cerrar sesión", "login": "Iniciar sesión", "amount": "Monto", "success": "Éxito", "error": "Error", "warning": "Advertencia", "info": "Información:", "debug": "Depuración", "progress": "Progreso:", "remaining": "Restante:", "total": "Total:", "completed": "7. ¡Completado exitosamente!", "missing": "Faltante", "partial": "Parcial", "sameAsSource": "Igual que origen:", "formatMismatch": "Desajuste de formato:", "typeMismatch": "Desajuste de tipo:", "structureMismatch": "Desajuste de estructura:", "invalidOption": "Opción inválida", "separator": "==================================================", "initializationFailed": "❌ Falló la inicialización: {error}", "stackTrace": "Traza de pila: {stack}", "pressEnterToContinue": "Presione Enter para continuar...", "pressEnterToReturn": "Presione Enter para volver al menú principal...", "stepCompleted": "Paso '{stepName}' completado.", "stepFailed": "Paso '{stepName}' falló.", "runningStep": "Ejecutando paso: {stepName}", "command": "Comando: {command}", "startingWorkflow": "Iniciando flujo de trabajo...", "workflowCompleted": "Flujo de trabajo completado.", "checkReports": "Verifique los informes para más detalles.", "errorExecutingCommand": "Error ejecutando comando: {error}", "genericError": "❌ Error: {{error}}", "errorGeneratingStatusSummary": "Error generando resumen de estado: {error}", "errorRunningDebugTool": "Error ejecutando herramienta de depuración '{displayName}': {error}", "errorReadingDebugLogs": "Error leyendo registros de depuración: {error}", "errorAnalyzingLogFile": "Error analizando archivo de registro: {error}", "errorAnalyzingTranslationKeys": "Error analizando claves de traducción: {error}", "errorAnalyzingTranslationCompleteness": "Error analizando completitud de traducción: {error}", "errorAnalyzingTranslationFormat": "Error analizando formato de traducción: {error}", "errorAnalyzingTranslationType": "Error analizando tipo de traducción: {error}", "errorAnalyzingTranslationStructure": "Error analizando estructura de traducción: {error}", "errorAnalyzingTranslationFormatMismatch": "Error analizando desajuste de formato de traducción: {error}", "errorAnalyzingTranslationTypeMismatch": "Error analizando desajuste de tipo de traducción: {error}", "errorAnalyzingTranslationStructureMismatch": "Error analizando desajuste de estructura de traducción: {error}", "errorAnalyzingTranslationSameAsSource": "Error analizando traducción igual que fuente: {error}", "title": "Estado", "nextStep1": "1. Análisis de uso:", "nextStep2": "2. Validar traducciones:", "nextStep3": "3. Analizar completitud:", "nextStep4": "4. Completar traducciones faltantes:", "nextStep5": "5. Generar reporte resumido:", "nextStep6": "6. Revisar y finalizar traducciones:", "generating": "Generando reporte resumido...", "review": "Revisando traducciones...", "finalizing": "Finalizando traducciones...", "finalized": "¡Finalizado exitosamente!", "errors": "Errores:", "warnings": "Advertencias:", "completedKeys": "Claves completadas:", "missingKeys": "Claves faltantes:", "partialKeys": "Claves parciales:" }, "analyze": { "help_message": "\nAnalizador de Traducción I18n\n\nUso: node i18ntk-analyze.js [opciones]\n\nOpciones:\n --source-dir <dir> Directorio fuente para escanear (por defecto: ./src)\n --i18n-dir <dir> Directorio i18n (por defecto: ./src/locales)\n --output-report Generar informe detallado\n --output-dir <dir> Directorio de salida para informes (por defecto: ./reports)\n --help Mostrar esta ayuda\n\nEjemplos:\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": "📁 Directorio fuente: {sourceDir}", "i18n_directory": "🌐 Directorio i18n: {i18nDir}", "loading_translation_files": "📋 Cargando archivos de traducción...", "sourceDirectoryLabel": "📁 Directorio Fuente: {{sourceDir}}", "sourceLanguageLabel": "🌍 Idioma Fuente: {{sourceLanguage}}", "strictModeLabel": "⚙️ Modo Estricto: {{mode}}\n", "found_translation_files_count": "✅ Encontrados {count} archivos de traducción", "analyzing_translations": "🔍 Analizando traducciones...", "analysis_completed_successfully": "🎉 ¡Análisis completado exitosamente!", "analysis_results": "📊 RESULTADOS DEL ANÁLISIS", "language_analysis_stats": " {language}: {translatedKeys}/{totalKeys} ({percentage}% traducido)", "sample_missing_keys": "\nEjemplo de claves faltantes:", "missing_key": "- {key}", "and_more_missing": "...y {count} más.", "sample_unused_keys": "\nEjemplo de claves no utilizadas:", "unused_key": "- {key}", "and_more_unused": "...y {count} más.", "recommendations": "\n📋 RECOMENDACIONES", "add_missing_translations": "💡 Agregar traducciones faltantes para mejorar la cobertura.", "remove_unused_translations": "💡 Eliminar traducciones no utilizadas para mantener su proyecto limpio.", "next_steps": "\n📋 PRÓXIMOS PASOS", "review_analysis_results": "1. Revisar los resultados del análisis en la consola o informe generado.", "run_with_output_report": "2. Ejecutar con --output-report para informe detallado.", "add_or_remove_translations": "3. Agregar traducciones faltantes o eliminar las no utilizadas.", "rerun_analysis": "4. Volver a ejecutar el análisis para verificar mejoras.", "analysis_summary": "📊 RESUMEN DEL ANÁLISIS", "source_files_scanned": "Archivos fuente escaneados: {fileCount}", "translation_files_checked": "Archivos de traducción verificados: {translationFileCount}", "total_keys": "Claves totales: {totalKeys}", "translated_keys": "Claves traducidas: {translatedKeys}", "missing_keys": "Claves faltantes: {missingKeys}", "unused_keys": "Claves no utilizadas: {unusedKeys}", "translation_coverage": "Cobertura de traducción: {coverage}%", "analysis_passed_for_language": "✅ Análisis aprobado para {language}", "analysis_failed_for_language": "❌ Análisis fallido para {language} ({missingKeys} faltantes, {unusedKeys} no utilizadas)", "starting": "🔍 Iniciando análisis de traducción...", "foundLanguages": "📋 Encontrados {count} idiomas para analizar: {languages}", "analyzing": "🔄 Analizando {language}...", "reportTitle": "📊 INFORME DE ANÁLISIS DE TRADUCCIÓN", "generated": "Generado: {timestamp}", "status": "Estado: {translated}/{total} claves ({percentage}% traducido)", "filesAnalyzed": "Archivos analizados: {analyzed}/{total}", "keysNeedingTranslation": "Claves necesitando traducción: {count}", "fileBreakdown": "📋 DESGLOSE DE ARCHIVOS", "error": "Error", "completed": "✅ Análisis completado para {language}", "progress": "📊 Progreso General: {translated}/{total} idiomas procesados", "reportSaved": " Informe guardado: {reportPath}", "summary": "📊 RESUMEN DEL ANÁLISIS", "finished": "✅ ¡Análisis completado exitosamente!", "statusFileMissing": "❌ Falta archivo de traducción", "sourceKeys": "📊 Claves fuente: {count}", "translation": "📊 Traducción: {translated}/{total} ({percentage}%)", "structure": "🗂️ Estructura: {status}", "consistent": "Consistente", "inconsistent": "Inconsistente", "missingKeys": "Claves faltantes: {count}", "extraKeys": "Claves extra: {count}", "issues": "⚠️ Problemas encontrados: {count}", "issueType": { "not_translated": "No traducido: {count}", "empty_value": "Valores vacíos: {count}", "partial_translation": "Traducciones parciales: {count}", "format_mismatch": "Desajustes de formato: {count}", "type_mismatch": "Desajustes de tipo: {count}", "structure_mismatch": "Desajustes de estructura: {count}", "same_as_source": "Igual que fuente: {count}" }, "keysToTranslate": "📋 CLAVES PARA TRADUCIR", "key": "Clave", "english": "Inglés", "needsTranslation": "NECESITA TRADUCCIÓN", "andMoreKeys": "...y {count} claves más.", "noLanguages": "⚠️ No se encontraron idiomas de destino.", "languageStats": "{language}: {percentage}% completo ({translated}/{total} claves)", "invalidReportFilePath": "Ruta de archivo de informe inválida", "failedToWriteReportFile": "Error al escribir el archivo de informe de forma segura" }, "complete": { "configLoadedSuccessfully": "Configuración cargada exitosamente", "configLoadingFailed": "Falló la carga de configuración", "title": "🌍 COMPLETADO DE TRADUCCIÓN I18N", "separator": "============================================================", "sourceDir": "📁 Directorio fuente: {sourceDir}", "sourceLanguage": "🌐 Idioma fuente: {sourceLanguage}", "dryRunMode": "🧪 Modo de simulación - no se realizarán cambios", "languages": "🌍 Idiomas disponibles: {languages}", "addingMissingKeys": "➕ Agregando claves faltantes a los archivos de traducción...", "processing": "🔄 Procesando {language}...", "addedKeys": "✅ Agregadas {count} claves faltantes", "noChangesNeeded": "✅ No se necesitan cambios para {language}", "summaryTitle": "📊 RESUMEN DE COMPLETADO", "totalChanges": "📝 Cambios totales: {totalChanges}", "languagesProcessed": "🌍 Idiomas procesados: {languagesProcessed}", "missingKeysAdded": "➕ Claves faltantes agregadas: {missingKeysAdded}", "nextStepsTitle": "📋 PRÓXIMOS PASOS", "nextStep1": "1. Ejecutar análisis de uso:", "nextStep2": " node i18ntk-usage.js --output-report", "nextStep3": "2. Validar traducciones:", "nextStep4": " node i18ntk-validate.js", "nextStep5": "3. Analizar patrones:", "nextStep6": " node i18ntk-analyze.js", "allKeysAvailable": "🎉 ¡Todas las claves de traducción están ahora disponibles!", "runWithoutDryRun": "💡 Ejecutar sin --dry-run para aplicar cambios", "deletingOldReport": "🗑️ Eliminando informe antiguo...", "generatingFreshAnalysis": "📊 Generando análisis de uso nuevo...", "couldNotGenerate": "❌ No se pudo generar el análisis de uso", "reportNotFound": "📋 No se encontró el informe de uso. Usando claves comunes...", "foundMissingKeys": "📋 Encontradas {count} claves faltantes del análisis de uso", "couldNotParse": "❌ No se pudo analizar el informe de uso. Usando claves comunes...", "errorDuringCompletion": "❌ Error durante la finalización: {error}", "fatalError": "❌ Error fatal: {error}", "configurationValidationFailed": "Falló la validación de configuración: faltan campos requeridos" }, "sizing": { "separator": "================================================================================", "lineSeparator": "--------------------------------------------------------------------------------", "analysisStats": "{{stats}}", "sourceDirectoryLabel": "📁 Directorio fuente: {{sourceDir}}", "sourceLanguageLabel": "🌍 Idioma fuente: {{sourceLanguage}}", "strictModeLabel": "⚙️ Modo estricto: {{mode}}", "invalidSourceDirectoryError": "Ruta de directorio fuente inválida: {{sourceDir}}", "sourceDirectoryNotFoundError": "Directorio fuente no encontrado: {{sourceDir}}", "invalidOutputDirectoryError": "Ruta de directorio de salida inválida: {{outputDir}}", "invalidReportFileError": "Ruta de archivo de informe inválida", "problematic_keys": "Claves problemáticas: {problematicKeys}", "problematicKeysLabel": "Claves problemáticas: {problematicKeys}", "long_translations": "Traducciones largas: {longTranslations}", "failedToSaveReportError": "Error al guardar informe de forma segura", "invalidCsvFileError": "Ruta de archivo CSV inválida", "failedToSaveCsvError": "Error al guardar informe CSV de forma segura", "fatalError": "❌ El análisis de tamaño falló: {{error}}", "starting_i18n_sizing_analysis": "Iniciando análisis de tamaño i18n...", "source_directory": "Directorio fuente: {{sourceDir}}", "found_languages": "Idiomas encontrados: {{languages}}", "analyzing_file_sizes": "Analizando tamaños de archivos...", "analyzing_translation_content": "Analizando contenido de traducción...", "generating_size_comparisons": "Generando comparaciones de tamaño...", "no_languages_found_for_comparison": "No se encontraron idiomas para comparación", "sizing_analysis_results": "Resultados del Análisis de Tamaño I18n", "file_sizes_title": "Tamaños de Archivos", "file_sizes_header": "Idioma Tamaño(KB) Líneas Caracteres", "file_size_row": "{{lang}} {{sizeKB}} {{lines}} {{characters}}", "language_statistics_title": "Estadísticas de Idioma", "language_stats_header": "Idioma Claves Caracteres Long Prom Long Máx Vacías Largas", "language_stats_row": "{{lang}} {{totalKeys}} {{totalCharacters}} {{averageKeyLength}} {{maxKeyLength}} {{emptyKeys}} {{longKeys}}", "size_variations_title": "Variaciones de Tamaño", "size_variations_header": "Idioma Dif Caract % Dif Problemático", "size_variation_row": "{{lang}} {{characterDifference}} {{percentageDifference}}% {{problematic}}", "problematic_yes": "Sí", "problematic_no": "No", "recommendations_title": "Recomendaciones", "recommendation_item": "{{index}}. {{recommendation}}", "problematic_key_detail": " {{index}}. Clave: '{{key}}' - Variaciones: {{variations}}", "generating_detailed_report": "Generando informe detallado...", "keysHaveSignificantSizeVariations": "las claves tienen variaciones de tamaño significativas", "longTranslationsDetected": "${lang} tiene ${data.longKeys} traducciones de más de 100 caracteres - considera dividirlas", "report_saved_to": "Informe guardado en: {{reportPath}}", "considerReviewingTranslations": "Considera revisar las traducciones de ${lang} - son ${data.percentageDifference}% más largas que la referencia", "csv_report_saved_to": "Informe CSV guardado en: {{csvPath}}", "no_translation_files_found": "No se encontraron archivos de traducción", "analysis_completed": "Análisis completado en {{duration}}ms", "analysis_failed": "Análisis fallido: {{errorMessage}}", "failed_to_parse_language_error": "Error al analizar las traducciones de {{language}}: {{errorMessage}}", "recommendations": { "keys_have_significant_size_variations": "las claves tienen variaciones de tamaño significativas", "consider_reviewing_translations": "Considera revisar las traducciones de {{lang}} - son {{percentageDifference}}% {{comparison}} que la referencia", "long_translations_detected": "{{lang}} tiene {{longKeys}} traducciones de más de {{threshold}} caracteres - considera dividirlas" }, "hardcodedTexts": { "keysHaveSignificantSizeVariations": "las claves tienen variaciones de tamaño significativas", "considerReviewingTranslations": "Considera revisar las traducciones de {{lang}} - son {{percentageDifference}}% {{comparison}} que la referencia", "longTranslationsDetected": "{{lang}} tiene {{longKeys}} traducciones de más de {{threshold}} caracteres - considera dividirlas" } }, "usage": { "help_message": "\nAnalizador de Uso de I18n\n\nUso: node i18ntk-usage.js [opciones]\n\nOpciones:\n --source-dir <dir> Directorio de origen a escanear (predeterminado: ./src)\n --i18n-dir <dir> Directorio de i18n (predeterminado: ./src/locales)\n --output-report Generar informe detallado\n --output-dir <dir> Directorio de salida para los informes (predeterminado: ./reports)\n --help Mostrar esta ayuda\n\nEjemplos:\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": "📁 Directorio de origen: {sourceDir}", "translationCompletenessTitle": "🌍 Completitud de Traducción:", "i18n_directory_thisi18ndir": "🌐 Directorio i18n: {i18nDir}", "failed_to_parse_filename_error": "⚠️ Error al parsear {fileName}: {errorMessage}", "analyzing_source_files": "🔍 Analizando archivos de origen...", "found_files_in_source": "📂 Encontrados {numFiles} archivos en el directorio de origen", "found_thisusedkeyssize_unique_": "🎯 Encontradas {usedKeysSize} claves únicas usadas", "total_key_usages_totalkeysfoun": "📊 Uso total de claves: {totalKeysFound}", "loading_available_translation_": "📋 Cargando claves de traducción disponibles...", "found_thisavailablekeyssize_av": "✅ Encontradas {availableKeysSize} claves disponibles", "foundTranslationFiles": "✅ Encontrados {count} archivos de traducción", "pressEnterToReturnToMenu": "Presiona Enter para regresar al menú principal", "notTranslatedKeysTotal": "⚠️ Claves no traducidas: {total}", "noSourceFilesFound": "⚠️ No se encontraron archivos de origen.", "reviewNotTranslatedKeys": "💡 Revisa las claves no traducidas", "analysisCompletedSuccessfully": "🎉 ¡Análisis completado con éxito!", "detectedSourceDirectory": "Directorio de origen detectado: {{sourceDir}}", "detectedI18nDirectory": "Directorio i18n detectado: {{i18nDir}}", "fileInfo": " 📄 {namespace}: {keys} claves", "failedToAnalyzeUsage": "❌ Error al analizar uso: {error}", "failedToAnalyzeFile": "❌ Error al analizar archivo: {error}", "analyzerInitialized": "Analizador inicializado", "analyzerInitFailed": "Fallo la inicialización del analizador: {error}", "argsParsed": "Argumentos analizados", "argsParseFailed": "Error al parsear argumentos: {error}", "translationDiscoveryError": "Error al descubrir traducciones: {error}", "fileTraversalError": "Error al recorrer archivos: {error}", "usageAnalysisFailed": "Fallo el análisis de uso: {error}", "translationFileParseError": "Error al parsear archivo de traducción: {error}", "translationKeysLoadError": "Error al cargar claves de traducción: {error}", "languageCompletenessStats": "{language}: {translated}/{total} ({completeness}% traducido)", "missingKeysCount": "Claves faltantes: {count}", "analyzingTranslationCompleteness": "Analizando la completitud de traducción...", "unusedKeysCount": "Claves no utilizadas: {count}", "usedKeysCount": "Claves usadas: {count}", "availableKeysCount": "Claves disponibles: {count}", "analysisResults": "Resultados del análisis:", "checkUsage": { "title": "🔍 ANÁLISIS DE USO DE I18N", "message": "Analizando el uso de claves i18n en tu proyecto.", "help_message": "\nAnalizador de Uso de I18n\n\nUso: node i18ntk-usage.js [opciones]\n\nOpciones:\n --source-dir <dir> Directorio de origen a escanear (predeterminado: ./src)\n --i18n-dir <dir> Directorio de i18n (predeterminado: ./src/locales)\n --output-report Generar informe detallado\n --output-dir <dir> Directorio de salida para los informes (predeterminado: ./reports)\n --help Mostrar esta ayuda\n\nEjemplos:\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": "📁 Directorio de origen: {sourceDir}", "i18n_directory_thisi18ndir": "🌐 Directorio i18n: {i18nDir}", "loading_available_translation_": "📋 Cargando claves de traducción disponibles...", "found_thisavailablekeyssize_av": "✅ Encontradas {availableKeysSize} claves disponibles", "analyzing_source_files": "🔍 Analizando archivos de origen...", "found_files_in_source": "📂 Encontrados {numFiles} archivos en el directorio de origen", "found_thisusedkeyssize_unique_": "🎯 Encontradas {usedKeysSize} claves únicas usadas", "total_key_usages_totalkeysfoun": "📊 Uso total de claves: {totalKeysFound}", "translation_completeness_title": "📊 COMPLETITUD DE TRADUCCIÓN", "language_completeness_stats": " {language}: {translated}/{total} ({completeness}% traducido)", "n_sample_unused_keys": "\nEjemplo de claves no usadas:", "key": "- {key}", "and_unusedkeyslength_5_more": "...y {count} más.", "n_recommendations": "\n📋 RECOMENDACIONES", "consider_removing_unused_trans": "💡 Considera eliminar traducciones no usadas para mantener tu proyecto limpio.", "n_next_steps": "\n📋 PRÓXIMOS PASOS", "1_review_the_analysis_results": "1. Revisa los resultados del análisis en la consola o en el informe generado.", "2_run_with_outputreport_for_de": "2. Ejecuta con --output-report para obtener un informe detallado.", "3_remove_unused_keys_or_add_mi": "3. Elimina claves no usadas o añade claves faltantes en tu código fuente.", "4_rerun_analysis_to_verify_imp": "4. Vuelve a ejecutar el análisis para verificar las mejoras.", "usage_analysis_results": "📊 RESULTADOS DEL ANÁLISIS DE USO", "source_files_scanned_thisfileu": "Archivos de origen escaneados: {fileUsageSize}", "available_translation_keys_thi": "Claves de traducción disponibles: {availableKeysSize}", "used_translation_keys_thisused": "Claves de traducción usadas: {usedKeysSize}", "dynamic_keys_detected_dynamick": "Claves dinámicas detectadas: {dynamicKeysLength}", "unused_keys_unusedkeyslength": "Claves no usadas: {unusedKeysLength}", "missing_keys_missingkeyslength": "Claves faltantes: {missingKeysLength}", "noSourceFilesFound": "No se encontraron archivos de origen para analizar.", "processedFiles": "Procesados {processedFiles} de {totalFiles} archivos.", "i18nDirectoryNotFound": "Directorio i18n no encontrado: {i18nDir}", "noTranslationLanguagesFound": "No se encontraron idiomas de traducción.", "failedToAnalyzeFile": "Error al analizar el archivo {filePath}: {error}", "failedToAnalyzeLanguage": "Error al analizar el idioma {language}: {error}", "translationCompletenessAnalysisFailed": "Fallo el análisis de completitud de traducción: {error}", "n": "" }, "complete": { "configLoadedSuccessfully": "Configuración cargada correctamente", "configLoadingFailed": "Error al cargar la configuración", "title": "🌍 COMPLETADO DE TRADUCCIÓN I18N", "separator": "============================================================", "sourceDir": "📁 Directorio de origen: {sourceDir}", "sourceLanguage": "🌐 Idioma de origen: {sourceLanguage}", "dryRunMode": "🧪 Modo de simulación - no se harán cambios", "languages": "🌍 Idiomas disponibles: {languages}", "addingMissingKeys": "➕ Agregando claves faltantes a los archivos de traducción...", "processing": "🔄 Procesando {language}...", "addedKeys": "✅ Agregadas {count} claves faltantes", "noChangesNeeded": "✅ No se necesitan cambios para {language}", "summaryTitle": "📊 RESUMEN DE COMPLETADO", "totalChanges": "📝 Cambios totales: {totalChanges}", "languagesProcessed": "🌍 Idiomas procesados: {languagesProcessed}", "missingKeysAdded": "➕ Claves faltantes agregadas: {missingKeysAdded}", "nextStepsTitle": "📋 SIGUIENTES PASOS", "nextStep1": "1. Ejecuta el análisis de uso:", "nextStep2": " node i18ntk-usage.js --output-report", "nextStep3": "2. Valida las traducciones:", "nextStep4": " node i18ntk-validate.js", "nextStep5": "3. Analiza patrones:", "nextStep6": " node i18ntk-analyze.js", "allKeysAvailable": "🎉 ¡Todas las claves de traducción ya están disponibles!", "runWithoutDryRun": "💡 Ejecuta sin --dry-run para aplicar los cambios", "deletingOldReport": "🗑️ Eliminando informe antiguo...", "generatingFreshAnalysis": "📊 Generando un nuevo análisis de uso...", "couldNotGenerate": "❌ No se pudo generar el análisis de uso", "reportNotFound": "📋 Informe de uso no encontrado. Usando claves comunes...", "foundMissingKeys": "📋 Encontradas {count} claves faltantes del análisis de uso", "couldNotParse": "❌ No se pudo parsear el informe de uso. Usando claves comunes..." } }, "validate": { "help_message": "\nValidador de Traducciones I18n\n\nUso: node i18ntk-validate.js [opciones]\n\nOpciones:\n --source-dir <dir> Directorio fuente a escanear (por defecto: ./src)\n --i18n-dir <dir> Directorio I18n (por defecto: ./src/locales)\n --output-report Generar informe detallado\n --output-dir <dir> Directorio de salida para informes (por defecto: ./reports)\n --help Mostrar esta ayuda\n\nEjemplos:\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": "🔍 Validador de Traducciones I18n", "message": "Iniciando proceso de validación...", "sourceDirectory": "📁 Directorio fuente: {dir}", "sourceLanguage": "🌍 Idioma fuente: {sourceLanguage}", "strictMode": "⚙️ Modo estricto: {mode}", "noTargetLanguages": "⚠️ No se encontraron idiomas de destino para validar", "validatingLanguages": "🌍 Validando idiomas: {langs}", "validatingLanguage": "🔍 Validando idioma: {lang}", "filesCount": "📄 Archivos: {count}", "keysCount": "🔑 Claves: {count}", "missingFilesCount": "📁 Archivos faltantes: {count}", "syntaxErrorsCount": "❌ Errores de sintaxis: {count}", "translationPercentage": "🎯 Traducción: {percentage}% ({translated}/{total} claves)", "validationSummary": "📊 RESUMEN DE VALIDACIÓN", "validation_failed": "❌ Validación fallida: {error}", "totalErrors": "❌ Errores totales: {count}", "totalWarnings": "⚠️ Advertencias totales: {count}", "errorsSection": "❌ ERRORES", "warningsSection": "⚠️ ADVERTENCIAS", "recommendationsSection": "💡 RECOMENDACIONES", "fixErrorsFirst": "1. Corrige todos los errores primero", "resolveMissingFilesAndSyntaxErrors": "1. Resuelve archivos faltantes y errores de sintaxis", "fixStructuralInconsistencies": "2. Corrige inconsistencias estructurales", "completeMissingTranslations": "3. Completa traducciones faltantes", "rerunValidation": "4. Ejecuta nuevamente la validación para verificar las correcciones", "addressWarnings": "Aborda las advertencias para mejorar la calidad", "reviewWarnings": "Revisa las advertencias y corrige si es necesario", "considerRunningWithStrict": "2. Considera ejecutar con el indicador --strict para una validación más estricta", "allValidationsPassed": "🎉 ¡Todas las validaciones pasaron!", "considerRunningUsageAnalysis": "Considera ejecutar el análisis de uso: node i18ntk-usage.js", "deletedOldReport": "🗑️ Informe de validación anterior eliminado", "sourceDir": "📁 Directorio fuente: {sourceDir}", "i18nDir": "🌐 Directorio I18n: {i18nDir}", "loadingTranslationFiles": "📋 Cargando archivos de traducción...", "foundTranslationFilesCount": "✅ {count} archivos de traducción encontrados", "analyzingTranslations": "🔍 Analizando traducciones...", "validationCompletedSuccessfully": "🎉 Validación completada con éxito", "validationErrorsFound": "⚠️ Se encontraron errores de validación: {count}", "validationWarningsFound": "⚠️ Se encontraron advertencias de validación: {count}", "validationPassed": "✅ Validación aprobada sin errores", "validationFailed": "Validación fallida: {error}", "startingValidationProcess": "🔍 Iniciando proceso de validación...", "validationProcessCompletedSuccessfully": "✅ Proceso de validación completado con éxito", "stackTrace": "Traza de error: {{stack}}", "authenticationFailed": "❌ Autenticación fallida. Acceso denegado.", "fatalValidationError": "❌ Error fatal de validación: {{error}}", "configAccess": "Accediendo a configuración para validación", "configValidated": "Configuración validada con éxito", "configError": "Error de configuración: {error}", "validatorInit": "Inicializando validador I18n", "validatorInitialized": "Validador I18n inicializado correctamente", "validatorInitError": "Error al inicializar el validador: {error}", "argsParsing": "Analizando argumentos de línea de comandos", "argsParsed": "Argumentos analizados con éxito", "argsParseError": "Error al analizar argumentos: {error}", "languagesScan": "Escaneando idiomas disponibles", "languagesFound": "{count} idiomas encontrados", "languagesScanError": "Error al escanear idiomas: {error}", "filesScan": "{count} archivos encontrados en {language}", "filesScanError": "Error al escanear archivos: {error}", "jsonValidated": "Sintaxis JSON validada: {filePath}", "jsonValidationError": "Error de validación JSON: {error}", "languageValidation": "Validando idioma: {language}", "languageValidationError": "Error de validación de idioma: {error}", "fileDeleted": "Archivo eliminado", "runStarted": "Iniciando ejecución de validación", "runCompleted": "Ejecución de validación completada exitosamente", "runError": "Fallo en la ejecución de validación: {error}", "scriptExecution": "Ejecución del script", "validationCompleted": "Validación completada", "validationError": "Error de validación: {error}", "separator": "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", "languageHeader": "🌐 Idioma: {language}", "validationResults": "📊 Resultados de Validación", "noErrors": "✅ No se encontraron errores", "noWarnings": "✅ No se encontraron advertencias", "summaryHeader": "📋 RESUMEN GENERAL", "progressIndicator": "⏳ Procesando...", "completedIndicator": "✅ Completado", "errorIndicator": "❌ Error", "warningIndicator": "⚠️ Advertencia", "infoIndicator": "ℹ️ Información", "sourceDirNotConfigured": "Directorio fuente no configurado", "sourceLanguageNotConfigured": "Idioma fuente no configurado", "translationFunctionNotInitialized": "Función de traducción no inicializada correctamente", "sourceLanguageDirectoryNotFound": "No se encontró el directorio del idioma fuente", "specifiedLanguageNotFound": "No se encontró el idioma especificado", "noJsonFilesFound": "No se encontraron archivos JSON en el directorio fuente: {sourceDir}", "i18nDirectoryNotFound": "No se encontró el directorio I18n: {i18nDir}", "invalidDirectoryPaths": "Se detectaron rutas de directorio no válidas", "invalidSampleFilePath": "Ruta del archivo de muestra no válida", "failedToCreateSampleTranslationFile": "No se pudo crear el archivo de traducción de muestra", "invalidFilePathDetected": "Se detectó una ruta de archivo no válida", "failedToWriteFile": "Error al escribir el archivo: {filePath}" }, "adminCli": { "setupPinProtectionTitle": "\n🔐 Configurando Protección con PIN de Administrador", "setupPinProtectionDescription": "Esto requerirá un PIN de 4-6 dígitos para operaciones administrativas.", "enablePinProtectionPrompt": "¿Desea habilitar la protección con PIN de administrador?", "setupCancelled": "Configuración de protección con PIN de administrador cancelada.", "enterPinPrompt": "Ingrese un PIN de 4-6 dígitos: ", "pinFormatError": "❌ El PIN debe tener 4-6 dígitos. Inténtelo de nuevo.", "confirmPinPrompt": "Confirme el PIN: ", "pinMismatchError": "❌ Los PIN no coinciden. Inténtelo de nuevo.", "pinProtectionEnabledSuccess": "¡✅ Protección con PIN de administrador habilitada exitosamente!", "pinRecoveryWarning": "⚠️ Recuerde su PIN - no puede recuperarse si se pierde.", "setupPinProtectionFailed": "❌ Error al configurar la protección con PIN de administrador.", "errorSettingUpPin": "❌ Error al configurar el PIN de administrador: {message}", "authRequiredForOperation": "\n🔐 Autenticación de administrador requerida para: {operation}", "invalidPinFormat": "❌ Formato de PIN inválido. El PIN debe tener 4-6 dígitos.", "authenticationSuccess": "¡✅ Autenticación exitosa!", "invalidPinAttemptsRemaining": "❌ PIN inválido. Quedan {remaining} intentos.", "authenticationFailedAccessDenied": "❌ Autenticación fallida. Acceso denegado.", "authenticationError": "❌ Error de autenticación: {message}", "pinProtectionNotEnabled": "La protección con PIN de administrador no está habilitada actualmente.", "disablingPinProtectionTitle": "\n🔓 Deshabilitando Protección con PIN de Administrador", "confirmDisablePinProtection": "¿Está seguro de que desea deshabilitar la protección con PIN de administrador?", "operationCancelled": "Operación cancelada.", "pinProtectionDisabledSuccess": "✅ Protección con PIN de administrador deshabilitada.", "disablePinProtectionFailed": "❌ Error al deshabilitar la protección con PIN de administrador.", "errorDisablingPinProtection": "❌ Error al deshabilitar la protección de administrador: {message}", "adminProtectionStatusTitle": "\n🔐 Estado de Protección de Administrador", "statusEnabled": "Estado: ✅ HABILITADO", "protectionDetails": "Protección: Se requiere PIN de 4-6 dígitos para operaciones de administrador", "lockoutDetails": "Bloqueo: 3 intentos fallidos = 15 minutos de bloqueo", "statusDisabled": "Estado: ❌ DESHABILITADO", "noAuthRequired": "Protección: No se requiere autenticación", "unprotectedRisk": "Riesgo: Las operaciones administrativas están desprotegidas", "errorCheckingAdminStatus": "❌ Error al verificar el estado de administrador: {message}", "authRequired": "🔐 Autenticación de administrador requerida.", "invalidPin": "❌ PIN inválido.", "authSuccess": "¡✅ Autenticación exitosa!", "adminPinSetupCli": "admin_pin_setup_cli", "adminAuthFailedCli": "admin_auth_failed_cli", "adminAuthDisabledCli": "admin_auth_disabled_cli", "protectedAccess": "Acceso protegido: Se requiere autenticación de administrador para operaciones sensibles.", "enterPin": "Ingrese el PIN de administrador: ", "accessGranted": "Acceso concedido." }, "adminPin": { "setup_title": "🔐 Configuración de PIN de Administrador", "setup_separator": "============================================================", "setup_description": "Cree un PIN de 4-6 dígitos para acceso de administrador a configuraciones sensibles.", "required_for_title": "Este PIN será requerido para:", "required_for_1": " • Cambiar configuraciones de seguridad", "required_for_2": " • Modificar configuraciones avanzadas", "required_for_3": " • Acceder a herramientas de depuración", "required_for_4": " • Restablecer configuraciones", "setup_note": "💡 Nota: Verá asteriscos (*) mientras escribe - estos son solo caracteres de enmascaramiento.", "setup_digits_only": " Solo se aceptan números 0-9 como dígitos del PIN.", "invalid_pin_length": "❌ PIN inválido. Debe tener 4-6 dígitos (solo números 0-9).", "invalid_pin_example": " Ejemplo: 1234 o 567890", "pins_do_not_match": "❌ Los PIN no coinciden.", "setup_success": "¡✅ PIN de administrador configurado exitosamente!", "setup_warning": "⚠️ Mantenga este PIN seguro. No puede recuperarse si se pierde.", "setup_error": "❌ Error al configurar el PIN:", "session_expired": "\n⏰ Sesión de administrador expirada por inactividad.", "no_pin_set_setting_up": "⚠️ No hay PIN de administrador configurado. Configurando PIN...", "no_pin_configured_access_denied": "⚠️ No hay PIN de administrador configurado. Acceso denegado.", "use_admin_settings_to_set_pin": "💡 Use la configuración de administrador para configurar un PIN primero.", "locked_out": "🔒 El acceso de administrador está bloqueado por demasiados intentos fallidos.", "wait_before_retry": "Por favor espere 5 minutos antes de intentar de nuevo.", "access_granted": "✅ Acceso de administrador concedido.", "incorrect_pin": "❌ PIN incorrecto. Quedan {attempts} intentos.", "verify_pin_error": "❌ Error al verificar el PIN:", "already_configured": "✅ PIN de administrador ya está configurado.", "optional_setup_title": "\n🔐 Configuración de PIN de Administrador (Opcional)", "optional_setup_description": "La protección con PIN de administrador agrega seguridad para operaciones sensibles como:", "setup_prompt": "¿Desea configurar un PIN de administrador? (s/N): ", "skipping_setup": "⏭️ Omitiendo configuración de PIN de administrador. Puede configurarlo más tarde en ajustes.", "setup_prompt_error": "❌ Error durante el mensaje de configuración de PIN:", "protectedAccess": "Acceso protegido: Se requiere autenticación de administrador para operaciones sensibles.", "enterPin": "Ingrese el PIN de administrador: ", "accessGranted": "Acceso concedido.", "invalidPin": "❌ PIN inválido. Inténtelo de nuevo.", "weak_pin_warning": "⚠️ ADVERTENCIA: Este PIN parece ser débil o común.", "weak_pin_suggestion": "💡 Considere usar un PIN más fuerte con dígitos variados.", "use_anyway_prompt": "Escriba \"sí\" para usar de todos modos, o presione Enter para elegir un PIN diferente: ", "enter_new_pin": "Ingrese el nuevo PIN de administrador (4-6 dígitos): ", "confirm_pin": "Confirme el PIN de administrador: ", "not_set": "No Configurado", "pin_display_mask": "####" }, "autorun": { "missingRequiredFile": "Archivo requerido faltante: {file}", "runInitializationFirst": "Por favor ejecute la inicialización primero.", "initializationCheckPassed": "Verificación de inicialización aprobada.", "runningStep": "Ejecutando paso: {stepName}", "commandLabel": "Comando: {command}", "stepRunning": "Paso '{stepName}' ejecutando...", "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Paso '{stepName}' ejecutando...", "stepCompletedWithTime": "Paso '{stepName}' completado en {duration}ms.", "stepCompleted": "Paso '{stepName}' completado.", "stepFailed": "Paso '{stepName}' falló.", "errorLabel": "Error: {error}", "stepFailedWithError": "Paso '{stepName}' falló con error: {error}", "requiredStepFailed": "Paso requerido falló. Deteniendo flujo de trabajo.", "optionalStepFailed": "Paso opcional falló. Continuando flujo de trabajo.", "startingAutoRunWorkflow": "Iniciando Flujo de Trabajo Automático...", "workflowIncludesSteps": "El flujo de trabajo incluye {count} pasos:", "stepRequired": "(Requerido)", "stepOptional": "(Opcional)", "startingExecution": "Iniciando ejecución...", "workflowStopped": "Flujo de trabajo detenido.", "workflowCompleted": "Flujo de trabajo completado.", "pressEnterToContinue": "Presione Enter para continuar...", "runningSelectedSteps": "Ejecutando pasos seleccionados...", "invalidStepNumber": "Número de paso inválido: {stepNum}", "executionReport": "Informe de Ejecución:", "successfulSteps": "Pasos exitosos: {count}", "failedSteps": "Pasos fallidos: {count}", "requiredFailedSteps": "Pasos requeridos fallidos: {count}", "stepDetails": "Detalles del Paso:", "errorDetails": "Error: {error}", "reportSavedTo": "Informe guardado en: {path}", "overallStatusSuccess": "ÉXITO", "overallStatusFailed": "FALLÓ", "overallStatus": "Estado General: {status}", "customSettingsConfiguration": "Configuración de Configuraciones Personalizadas", "pressEnterForDefaults": "Presione Enter para usar configuraciones predeterminadas para cualquier aviso.", "sourceDirPrompt": "Ingrese directorio fuente (predeterminado: {default}): ", "sourceLangPrompt": "Ingrese idioma fuente (predeterminado: {default}): ", "targetLangsPrompt": "Ingrese idiomas destino (separados por comas, predeterminado: {default}): ", "translationMarkerPrompt": "Ingrese marcador de traducción (predeterminado: {default}): ", "outputDirPrompt": "Ingrese directorio de salida para informes (predeterminado: {default}): ", "settingsUpdatedSuccessfully": "¡Configuraciones actualizadas exitosamente!", "errorConfiguringSettings": "Error configurando configuraciones: {error}", "autoRunScriptTitle": "Script de Ejecución Automática", "usageTitle": "Uso:", "runAllSteps": "node i18ntk-autorun.js --all - Ejecutar todos los pasos definidos en i18ntk-config.json", "configureSettingsFirst": "node i18ntk-autorun.js --config - Configurar configuraciones para el flujo de trabajo", "runSpecificSteps": "node i18ntk-autorun.js --steps <números_pasos> - Ejecutar pasos específicos (ej: --steps 1,3,5)", "showHelp": "node i18ntk-autorun.js --help - Mostrar este mensaje de ayuda", "availableSteps": "Pasos Disponibles:", "examplesTitle": "Ejemplos:", "configExample": "node i18ntk-autorun.js --config", "stepsExample1": "node i18ntk-autorun.js --steps 1,2,3", "stepsExample2": "node i18ntk-autorun.js --all", "configurationComplete": "Configuración completada.", "runAutoRunCommand": "Ahora puede ejecutar el comando de ejecución automática.", "configurationFailed": "Configuración fallida: {error}", "noValidStepNumbers": "No se proporcionaron números de paso válidos.", "autoRunFailed": "Ejecución automática fallida: {error}", "stepInitializeProject": "Inicializar estructura de proyecto i18n", "stepAnalyzeTranslations": "Analizar archivos de traducción", "stepValidateTranslations": "Validar traducciones", "stepCheckUsage": "Verificar estadísticas de uso", "stepCompleteTranslations": "Completar traducciones", "stepAnalyzeSizing": "Analizar dimensionamiento", "stepGenerateSummary": "Generar informe de resumen", "stepCompletedIcon": "✅", "stepCompletedWithIcon": "{icon} Paso '{stepName}' completado.", "stepFailedIcon": "❌", "translationLoadWarning": "Advertencia: No se pudieron cargar traducciones de {lang}", "configReadError": "Error leyendo {file}", "separator": "==================================================" }, "debug": { "title": "🔧 Herramientas de Depuración", "separator": "============================================================", "mainDebuggerSystemDiagnostics": "1. Diagnósticos del Sistema", "_consoleTranslationsCheck": "// 2. Verificación de Traducciones de Consola", "_exportMissingKeys": "// 3. Exportar Claves de Traducción Faltantes", "_replaceHardcodedConsole": "// 4. Reemplazar Cadenas de Consola Codificadas", "_consoleKeyChecker": "// 5. Verificador de Claves de Consola", "debugLogs": "2. Registros de Depuración", "backToMainMenu": "0. Volver al Menú Principal", "selectOption": "Seleccione una herramienta de depuración: ", "runningDebugTool": "Ejecutando {displayName}...", "debugToolNotFound": "❌ Herramienta de depuración no encontrada: {toolName}", "errorRunningDebugTool": "Error ejecutando herramienta de depuración '{displayName}': {error}", "recentDebugLogs": "📄 Registros de depuración recientes", "noDebugLogsFound": "❌ No se encontraron registros de depuración.", "debugLogsDirectoryNotFound": "❌ No se encontró el directorio de registros de depuración.", "selectLogPrompt": "Seleccione archivo de registro para ver (1-{count}): ", "invalidChoiceSelectRange": "Selección inválida. Por favor seleccione del rango disponible.", "contentOf": "📄 Contenido de {filename}:", "pressEnterToContinue": "Presione Enter para continuar..." }, "detect_language_mismatches": { "tool_title": "🔍 Herramienta de Detección de Desajustes de Idioma", "separator": "=====================================\n", "analyzing_file": "📄 Analizando {language}.json...", "error_analyzing_file": "❌ Error analizando {filename}: {errorMessage}", "results_title": "📊 RESULTADOS DE DETECCIÓN DE DESAJUSTES DE IDIOMA", "results_separator": "========================================\n", "summary_title": "📋 RESUMEN:", "total_files_analyzed": " Archivos totales analizados: {totalFiles}", "files_with_mismatches": " Archivos con desajustes: {filesWithMismatches}", "total_mismatches_found": " Desajustes totales encontrados: {totalMismatches}\n", "no_mismatches_found": "✅ ¡No se encontraron desajustes de idioma! Todas las traducciones parecen estar en sus idiomas correctos.\n", "detailed_results_title": "🔍 RESULTADOS DETALLADOS:\n", "file_mismatch_header": "📄 {filename} ({language})", "mismatches_count": " Encontrados {count} desajuste(s):\n", "mismatch_details": " {index}. Clave: {key}", "mismatch_value": " Valor: \"{value}\"", "mismatch_issue": " Problema: {description}", "recommendations_title": "💡 RECOMENDACIONES:\n", "recommendation_1": "1. Revisar y traducir todas las entradas marcadas con [TRANSLATE]", "recommendation_2": "2. Reemplazar prefijos de idioma (ej: [DE], [FR]) con traducciones apropiadas", "recommendation_3": "3. Traducir texto en inglés al idioma destino apropiado", "recommendation_4": "4. Usar equivalentes en idioma nativo para todo el texto visible al usuario", "recommendation_5": "5. Ejecutar esta herramienta nuevamente después de hacer correcciones para verificar las soluciones\n", "detailed_report_saved": "📄 Informe detallado guardado en: {reportPath}\n", "error_saving_report": "❌ Error guardando informe: {errorMessage}\n", "auto_fix_mode": "🔧 Modo auto-corrección {dryRun}", "auto_fix_separator": "=====================================\n", "fixed_file": "✅ Archivo corregido {filename}", "auto_fix_summary_title": "\n📊 Resumen de Auto-corrección:", "total_fixes_applied": " Correcciones totales aplicadas: {count}", "preview_fixes_title": "\n🔍 Vista previa de correcciones:", "fix_details": " {file}: {key}\n Antiguo: \"{old}\"\n Nuevo: \"{new}\"\n", "more_fixes": " ... y {count} correcciones más\n", "run_with_apply_fixes": "💡 Ejecutar con --apply para aplicar estas correcciones\n", "error_general": "❌ Error:", "mainDebuggerSystemDiagnostics": "Depurador Principal / Diagnósticos del Sistema", "exportMissingKeys": "Exportar Claves Faltantes", "replaceHardcodedConsole": "Reemplazar Consola Codificada", "consoleKeyChecker": "Verificador de Claves de Consola", "debugLogs": "Registros de Depuración", "backToMainMenu": "Volver al Menú Principal", "invalidChoiceSelectRange": "❌ Selección inválida. Por favor seleccione un número dentro del rango mostrado.", "runningDebugTool": "Ejecutando herramienta de depuración: {displayName}", "debugToolNotFound": "Herramienta de depuración '{toolName}' no encontrada.", "recentDebugLogs": "Registros de Depuración Recientes", "noDebugLogsFound": "No se encontraron registros de depuración.", "logEntry": "Entrada de Registro: {timestamp} - {message}", "debugLogsDirectoryNotFound": "No se encontró el directorio de registros de depuración." }, "help": { "title": "📊 AYUDA DE GESTIÓN DE I18N\n\n", "usage": "Uso: node i18ntk-manage.js [opciones]\n", "interactiveMode": "\n💡 Usa: node i18ntk-manage.js --command=<comando> para ejecución directa\n", "showHelp": "\n📖 Usa: node i18ntk-manage.js --help para ver los comandos disponibles\n", "availableCommands": "\n📖 Comandos Disponibles:\n", "initProject": "🚀 Inicializar nuevos idiomas", "analyzeTranslations": "🔍 Analizar traducciones", "validateTranslations": "✅ Validar traducciones", "checkUsage": "📊 Comprobar uso de claves", "initCommand": " init - Inicializar nuevos idiomas", "analyzeCommand": " analyze - Analizar traducciones", "validateCommand": " validate - Validar traducciones", "usageCommand": " usage - Comprobar uso de claves", "sizingCommand": " sizing - Analizar tamaños", "completeCommand": " complete - Completar traducciones (100% cobertura)", "summaryCommand": " summary - Mostrar estado del proyecto", "debugCommand": " debug - Depurar problemas de traducción", "menu": { "title": "\n🌐 MENÚ DE GESTIÓN DE I18N\n", "description": "Menú interactivo para gestionar la internacionalización\n", "exit": "\n🚪 Salir" }, "commands": { "init": "\n init - Inicializar nuevos idiomas", "analyze": " analyze - Analizar traducciones", "validate": " validate - Validar traducciones", "usage": " usage - Comprobar uso de claves", "sizing": " sizing - Analizar tamaños", "complete": " complete - Completar traducciones (100% cobertura)", "summary": " summary - Mostrar estado del proyecto", "debug": " debug - Depurar problemas de traducción" }, "options": { "sourceDir": "\n --source-dir <dir> Directorio fuente a analizar", "output": " --output <file> Archivo de salida para el informe", "verbose": " --verbose, -v Mostrar información detallada", "keepReports": " --keep-reports Conservar info