UNPKG

i18ntk

Version:

🚀 The fastest i18n toolkit with 97% performance boost! Zero-dependency, enterprise-grade internationalization for React, Vue, Angular, Python, Java, PHP & more. Features PIN protection, auto framework detection, 7+ UI languages, and comprehensive transla

729 lines 151 kB
{ "meta": { "version": "1.10.0", "updated": "2025-08-16" }, "common": { "welcome": "Bienvenido", "hello": "Hola", "goodbye": "Adiós", "yes": "Sí", "no": "No", "save": "Guardar", "cancel": "Cancelar", "delete": "Eliminar", "edit": "Editar", "loading": "Cargando...", "offlineTitle": "Estás fuera de línea", "offlineMessage": "Por favor, verifica tu conexión a internet", "tryReconnect": "Intentar reconectar", "logout": "Cerrar sesión", "login": "Iniciar sesión", "amount": "Cantidad", "success": "Éxito", "error": "Error", "warning": "Advertencia", "info": "Información:", "debug": "Depuración", "progress": "Progreso:", "remaining": "Restante:", "total": "Total:", "completed": "7. Completado con éxito!", "missing": "Faltante", "partial": "Parcial", "sameAsSource": "Mismo que fuente:", "formatMismatch": "Desformateado:", "typeMismatch": "Tipo no coincidente:", "structureMismatch": "Estructura no coincidente:", "invalidOption": "Opción inválida", "separator": "==================================================", "initializationFailed": "❌ Inicialización fallida: {error}", "stackTrace": "Pila de llamadas: {stack}", "pressEnterToContinue": "Presiona Enter para continuar...", "pressEnterToReturn": "Presiona Enter para regresar al menú principal...", "stepCompleted": "Paso '{stepName}' completado.", "stepFailed": "Paso '{stepName}' fallido.", "runningStep": "Ejecutando paso: {stepName}", "command": "Comando: {command}", "startingWorkflow": "Iniciando flujo de trabajo...", "workflowCompleted": "Flujo de trabajo completado.", "checkReports": "Revisa los informes para más detalles.", "errorExecutingCommand": "Error al ejecutar el comando: {error}", "genericError": "❌ Error: {error}", "errors": { "errors": "Errores:", "genericError": "❌ Error: {error}", "initializationCancelled": "🚫 Inicialización cancelada por el usuario.", "initializationFailed": "❌ Inicialización fallida: {error}", "translationKeyNotFound": "Traducción no encontrada: {key}", "sourceDirectoryNotFound": "Directorio fuente no encontrado: {directory}", "configLoadingFailed": "Carga de configuración fallida", "invalidSourceDirectory": "Directorio fuente inválido: {directory}", "securityViolation": "Violación de seguridad detectada", "authenticationFailed": "Autenticación fallida", "sourceEqualsI18nWarn": "⚠️ El directorio fuente es igual al directorio i18n ({sourceDir}). Usando {fallback} para escaneo de fuentes." }, "errorGeneratingStatusSummary": "Error al generar resumen de estado: {error}", "errorRunningDebugTool": "Error al ejecutar herramienta de depuración '{displayName}': {error}", "errorReadingDebugLogs": "Error al leer registros de depuración: {error}", "errorAnalyzingLogFile": "Error al analizar archivo de registro: {error}", "errorAnalyzingTranslationKeys": "Error al analizar claves de traducción: {error}", "errorAnalyzingTranslationCompleteness": "Error al analizar completitud de traducciones: {error}", "analyzingTranslationCompleteness": "Analizando completitud de traducciones en todos los idiomas...", "i18nDirectoryNotFound": "⚠️ Directorio i18n no encontrado: {i18nDir}", "translationCompletenessAnalysisFailed": "⚠️ Análisis de completitud de traducciones fallido: {error}", "failedToAnalyzeLanguage": "❌ Error al analizar idioma {language}: {error}", "errorReadingI18nDirectory": "❌ Error al leer directorio i18n: ", "languageCompletenessTitle": "📈 COMPLETITUD DE TRADUCCIONES POR IDIOMA", "errorAnalyzingTranslationFormat": "Error al analizar formato de traducción: {error}", "errorAnalyzingTranslationType": "Error al analizar tipo de traducción: {error}", "errorAnalyzingTranslationStructure": "Error al analizar estructura de traducción: {error}", "errorAnalyzingTranslationFormatMismatch": "Error al analizar desajuste de formato de traducción: {error}", "errorAnalyzingTranslationTypeMismatch": "Error al analizar desajuste de tipo de traducción: {error}", "errorAnalyzingTranslationStructureMismatch": "Error al analizar desajuste de estructura de traducción: {error}", "errorAnalyzingTranslationSameAsSource": "Error al analizar traducción igual a la fuente: {error}", "title": "Estado", "nextStep1": "1. Verificar análisis de uso:", "nextStep2": "2. Validar traducciones:", "nextStep3": "3. Analizar completitud:", "nextStep4": "4. Completar traducciones faltantes:", "nextStep5": "5. Generar informe resumen:", "nextStep6": "6. Revisar y finalizar traducciones:", "generating": "Generando informe resumen...", "review": "Revisando traducciones...", "finalizing": "Finalizando traducciones...", "finalized": "¡Finalizado exitosamente!", "warnings": "Advertencias:", "completedKeys": "Claves completadas:", "missingKeys": "Claves faltantes:", "partialKeys": "Claves parciales:", "home": "Inicio", "settings": "Configuración", "startingSettings": "🎛️ Iniciando CLI de Configuración...", "confirm": "Confirmar" }, "errors": { "readlineClosed": "Flujo de entrada cerrado; ejecutando en modo no interactivo.", "initializationCancelled": "🚫 Inicialización cancelada por el usuario.", "invalidOption": "❌ Opción inválida: {option}. Por favor, inténtelo de nuevo.", "noPackageJson": "No se encontró package.json. No se puede autodetectar el framework i18n.", "noI18nDir": "No se encontró directorio i18n en la raíz del proyecto.", "noI18nConfig": "No se encontró archivo de configuración i18n en la raíz del proyecto." }, "fixer": { "help_message": "\nCorrector de Traducciones I18n\n\nUso: node i18ntk-fixer.js [opciones]\n\nOpciones:\n --source-dir <dir> Directorio fuente a escanear (predeterminado: ./locales)\n --languages <langs> Lista de idiomas a corregir separados por comas\n --markers <markers> Marcadores separados por comas para tratar como no traducido\n --no-backup Omitir creación automática de respaldo\n --help Mostrar esta ayuda\n\nEjemplos:\n node i18ntk-fixer.js --languages de,fr\n node i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED\n node i18ntk-fixer.js --no-backup\n", "starting": "🚀 Iniciando corrección de traducciones para idiomas: {languages}", "sourceDirectory": "📁 Directorio fuente: {sourceDir}", "sourceLanguage": "🔤 Idioma fuente: {sourceLanguage}", "markers": "🏷️ Marcadores a corregir: {markers}", "scanningLanguage": "📊 Escaneando {language}...", "noLanguages": "❌ No se especificaron idiomas para corregir.", "allComplete": "🎉 ¡Todas las traducciones ya están completas!", "fullReportSaved": "📊 Informe completo guardado en: {reportPath}", "reviewReport": "Por favor revisa el informe antes de continuar.", "backupCreated": "💾 Respaldo creado exitosamente.", "applyingFixes": "🔄 Aplicando correcciones...", "fixingComplete": "✅ ¡Corrección de traducciones completa!", "operationCancelled": "❌ Operación cancelada por el usuario.", "analysisTitle": "🔍 ANÁLISIS DE CORRECCIÓN DE TRADUCCIONES", "analysisSeparator": "==================================================", "totalIssues": "Total de problemas encontrados: {totalIssues}", "missingTranslations": "Traducciones faltantes: {missing}", "placeholderTranslations": "Traducciones provisionales: {placeholder}", "noIssues": "✅ No se encontraron problemas. Todas las traducciones están completas.", "detailedIssues": "📋 PROBLEMAS DETALLADOS:", "detailedSeparator": "--------------------------------------------------", "filePath": "📄 {file} → {path}", "missingKey": "❌ FALTANTE: {source} → {new}", "placeholderKey": "⚠️ PROVISIONAL: \"{target}\" → \"{new}\"", "moreIssues": "... y {count} problemas más. Revisa el archivo de informe para detalles completos.", "confirmationTitle": "🤔 ¿Deseas proceder con estas correcciones?", "confirmationOptions": "Opciones:", "optionYes": "y - Sí, aplicar todas las correcciones", "optionNo": "n - No, cancelar operación", "optionShow": "s - Mostrar problemas detallados", "choicePrompt": "Tu elección (y/n/s): ", "nonInteractiveMode": "⚡ Modo no interactivo detectado - aplicando correcciones automáticamente...", "reportGenerated": "📊 Informe del corrector generado: {path}", "summary": { "totalIssues": "Total de problemas: {total}", "missingKeys": "Claves faltantes: {missing}", "placeholderKeys": "Claves provisionales: {placeholder}", "languages": "Idiomas: {languages}" }, "welcome": { "title": "🎯 ¡Bienvenido al Corrector de Traducciones!", "description": "Esta herramienta te ayudará a corregir traducciones rotas y marcadores provisionales en tus archivos de localización." }, "markerPrompt": { "title": "🏷️ Configurar Marcadores Provisionales", "description": "Ingresa los marcadores que indican texto no traducido (separados por comas):", "currentDefaults": "Marcadores predeterminados: {markers}", "input": "Marcadores (o presiona Enter para usar predeterminados): " }, "languagePrompt": { "title": "🌍 Seleccionar Idiomas a Corregir", "available": "Idiomas disponibles: {languages}", "description": "Ingresa los idiomas a corregir (separados por comas) o presiona Enter para todos:", "input": "Idiomas: ", "noLanguages": "No se encontraron idiomas para corregir." }, "directoryPrompt": { "title": "📁 Seleccionar Directorio", "current": "Directorio actual: {dir}", "description": "Ingresa el directorio que contiene tus archivos de localización (o presiona Enter para el actual):", "input": "Directorio: " } }, "autorun": { "stepAnalyzeTranslations": "Analizar traducciones", "stepCompletedWithIcon": "✅ Completado: {stepName}", "stepValidateTranslations": "Validar traducciones", "stepRunning": "▶️ Paso {stepNumber}/{totalSteps}: {stepName}", "separator": "==================================================", "stepFailed": "❌ Fallido: {stepName}", "errorLabel": "Error", "autoRunScriptTitle": "🧪 Flujo de Ejecución Automática", "usageTitle": "Uso", "runAllSteps": "Ejecutar: node i18ntk-autorun.js", "configureSettingsFirst": "Config: i18ntk-config.json or CLI flags", "runSpecificSteps": "Use --steps=1,3 or --list to show steps", "showHelp": "--help for more info", "examplesTitle": "Ejemplos", "configExample": "node i18ntk-autorun.js --ui-language=zh", "stepsExample1": "node i18ntk-autorun.js --steps=analyze,validate", "stepsExample2": "node i18ntk-autorun.js --list", "customSettingsConfiguration": "Configuración de autorun personalizada", "availableSteps": "Pasos disponibles", "startingAutoRunWorkflow": "🚀 Iniciando Flujo de Ejecución Automática...", "workflowIncludesSteps": "Flujo incluye {count} pasos:", "missingRequiredFile": "Falta archivo requerido: {file}", "workflowStopped": "Workflow detenido debido a un fallo.", "workflowCompleted": "🎉 Workflow completado!", "successfulSteps": "Pasos exitosos: {count}", "failedSteps": "Pasos fallidos: {count}", "stepInitializeProject": "Inicializar proyecto", "stepCheckUsage": "Verificar uso de claves", "stepGenerateSummary": "Generar informe de resumen", "runInitializationFirst": "Por favor, ejecuta la inicialización primero.", "initializationCheckPassed": "Comprobación de inicialización pasada.", "runningStep": "Ejecutando paso: {stepName}", "commandLabel": "Comando: {command}", "stepCompletedWithTime": "Paso '{stepName}' completado en {duration}ms.", "stepCompleted": "Paso '{stepName}' completado.", "stepFailedWithError": "Paso '{stepName}' fallado con error: {error}", "requiredStepFailed": "Paso requerido fallado. Deteniendo flujo.", "optionalStepFailed": "Paso opcional fallado. Continuando flujo.", "stepRequired": "(Requerido)", "stepOptional": "(Opcional)", "startingExecution": "Iniciando ejecución...", "pressEnterToContinue": "Presiona Enter para continuar...", "runningSelectedSteps": "Ejecutando pasos seleccionados...", "invalidStepNumber": "Número de paso inválido: {stepNum}", "executionReport": "Informe de ejecución:", "requiredFailedSteps": "Pasos requeridos fallidos: {count}", "stepDetails": "Detalles del paso:", "reportSavedTo": "Informe guardado en: {path}", "overallStatusSuccess": "SUCCESS", "overallStatusFailed": "FAILED", "overallStatus": "Estado general: {status}", "pressEnterForDefaults": "Presiona Enter para usar configuraciones predeterminadas para cualquier prompt.", "sourceDirPrompt": "Ingresa directorio fuente (predeterminado: {default}): ", "sourceLangPrompt": "Ingresa idioma fuente (predeterminado: {default}): ", "targetLangsPrompt": "Ingresa idiomas objetivo (separados por comas, predeterminado: {default}): ", "translationMarkerPrompt": "Ingresa marcador de traducción (predeterminado: {default}): ", "outputDirPrompt": "Ingresa directorio de salida para informes (predeterminado: {default}): ", "settingsUpdatedSuccessfully": "Configuraciones actualizadas con éxito!", "errorConfiguringSettings": "Error al configurar configuraciones: {error}", "configurationComplete": "Configuración completada.", "runAutoRunCommand": "Ahora puedes ejecutar el comando de auto-run.", "configurationFailed": "Configuración fallida: {error}", "noValidStepNumbers": "No se proporcionaron números de paso válidos.", "autoRunFailed": "Auto-run fallido: {error}", "stepCompleteTranslations": "Completar traducciones", "stepAnalyzeSizing": "Analizar-sizing", "stepCompletedIcon": "✅", "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Paso '{stepName}' en ejecución...", "stepFailedIcon": "❌", "translationLoadWarning": "Advertencia: No se pudieron cargar traducciones {lang}", "configReadError": "Error al leer {file}" }, "analyze": { "help_message": "\nAnalizador de Traducciones I18n\n\nUso: node i18ntk-analyze.js [opciones]\n\nOpciones:\n --source-dir <dir> Directorio fuente a escanear (predeterminado: ./src)\n --i18n-dir <dir> Directorio i18n (predeterminado: ./src/locales)\n --output-report Generar informe detallado\n --output-dir <dir> Directorio de salida para informes (predeterminado: ./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": "💡 Agrega traducciones faltantes para mejorar la cobertura.", "remove_unused_translations": "💡 Elimina traducciones no utilizadas para mantener tu proyecto limpio.", "next_steps": "\n📋 SIGUIENTES PASOS", "review_analysis_results": "1. Revisa los resultados del análisis en la consola o en el informe generado.", "run_with_output_report": "2. Ejecuta con --output-report para un informe detallado.", "add_or_remove_translations": "3. Agrega traducciones faltantes o elimina las no utilizadas.", "rerun_analysis": "4. Vuelve a ejecutar el análisis para verificar las 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": "Total de claves: {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 que necesitan 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": "❌ Archivo de traducción faltante", "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 la 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 objetivo.", "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 la configuración", "sourceLanguageNotFound": "No se encontró el directorio del idioma fuente: {sourceLanguage}", "couldNotParseTarget": "No se pudo analizar el archivo objetivo: {file}", "couldNotParseSource": "No se pudo analizar el archivo fuente: {file}", "reportGenerated": "Informe generado: {path}", "generateReportPrompt": "¿Deseas generar un informe?", "title": "🌍 COMPLETADO DE TRADUCCIÓN I18NTK", "separator": "============================================================", "sourceDir": "📁 Directorio fuente: {sourceDir}", "sourceLanguage": "🌐 Idioma fuente: {sourceLanguage}", "dryRunMode": "🧪 Modo de prueba - no se realizarán cambios", "languages": "🌍 Idiomas disponibles: {languages}", "addingMissingKeys": "➕ Agregando claves faltantes a los archivos de traducción...", "processing": "🔄 Procesando {language}...", "addedKeys": "✅ Se agregaron {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. 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 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": "📋 Se encontraron {count} claves faltantes del análisis de uso", "couldNotParse": "❌ No se pudo analizar el informe de uso. Usando claves comunes...", "errorDuringCompletion": "❌ Error durante la completació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 el informe de forma segura", "invalidCsvFileError": "Ruta de archivo CSV inválida", "failedToSaveCsvError": "Error al guardar el informe CSV de forma segura", "fatalError": "❌ Error fatal: {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 archivo...", "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 archivo", "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 Longitud Promedio Longitud Máxima Vacías Largas", "language_stats_row": "{lang} {totalKeys} {totalCharacters} {averageKeyLength} {maxKeyLength} {emptyKeys} {longKeys}", "size_variations_title": "Variaciones de tamaño", "size_variations_header": "Idioma Char Diff % Diff Problematic", "size_variation_row": "{lang} {characterDifference} {percentageDifference}% {problematic}", "problematic_yes": "Yes", "problematic_no": "No", "recommendations_title": "Recommendaciones", "recommendation_item": "{index}. {recommendation}", "problematic_key_detail": " {index}. Clave: '{key}' - Variaciones: {variations}", "generating_detailed_report": "Generando informe detallado...", "keysHaveSignificantSizeVariations": "las claves tienen variaciones significativas de tamaño", "longTranslationsDetected": "${lang} tiene ${data.longKeys} traducciones más largas que 100 caracteres - considere dividirlas", "longer": "más largo", "shorter": "más corto", "review_translations": "Considere revisar las traducciones de {lang} - son {percentageDifference}% {comparison} que la línea base", "report_saved_to": "Informe guardado en: {reportPath}", "considerReviewingTranslations": "Considere revisar las traducciones de ${lang} - son ${data.percentageDifference}% más largas que la línea base", "csv_report_saved_to": "Informe CSV guardado en: {csvPath}", "human_report_saved": "Informe legible guardado en: {reportPath}", "folder_summary_title": "Resumen de Carpeta", "folder_summary_table_header": "Idioma Tamaño(KB) Claves Long. Promedio Caracteres Totales", "folder_summary_row": "{lang} {sizeKB} {totalKeys} {avgLength} {totalChars}", "language_comparison_title": "Comparación de Idiomas", "language_comparison_row": "{lang}: {diff} caracteres ({percent}%) {status}", "summary_stats": "📊 Resumen: {totalLanguages} idiomas, {totalKeys} claves - Informes guardados en {reportPath}", "detailedKeysDescription": "Mostrar análisis detallado de claves en consola", "too_many_keys_warning": "⚠️ Demasiadas claves para mostrar en consola - revise el archivo de informe detallado para análisis completo", "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}", "starting_analysis": "Iniciando análisis...", "found_files": "Encontrados {count} archivos", "failed_to_parse_language_error": "Error al analizar traducciones de {language}: {errorMessage}", "recommendations": { "keys_have_significant_size_variations": "las claves tienen variaciones significativas de tamaño", "consider_reviewing_translations": "Considere revisar las traducciones de {lang} - son {percentageDifference}% {comparison} que la línea base", "long_translations_detected": "{lang} tiene {longKeys} traducciones más largas que {threshold} caracteres - considere dividirlas" } }, "usage": { "help_message": "\nAnalizador de Uso I18n\n\nUso: node i18ntk-usage.js [opciones]\n\nOpciones:\n --source-dir <dir> Directorio fuente a escanear (predeterminado: ./src)\n --i18n-dir <dir> Directorio i18n (predeterminado: ./src/locales)\n --output-report Generar informe detallado\n --output-dir <dir> Directorio de salida para 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 fuente: {sourceDir}", "translationCompletenessTitle": "🌍 Completitud de Traducción:", "i18n_directory_thisi18ndir": "🌐 Directorio i18n: {i18nDir}", "failed_to_parse_filename_error": "⚠️ Error al analizar {fileName}: {errorMessage}", "analyzing_source_files": "🔍 Analizando archivos fuente...", "found_files_in_source": "📂 Encontrados {numFiles} archivos en el directorio fuente", "found_thisusedkeyssize_unique_": "🎯 Encontradas {usedKeysSize} claves únicas usadas", "total_key_usages_totalkeysfoun": "📊 Total de usos 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", "errorReadingI18nDirectory": "⚠️ Error al leer directorio i18n: {error}", "pressEnterToReturnToMenu": "📝 Presiona Enter para volver al menú principal...", "notTranslatedKeysTotal": "⚠️ Claves no traducidas: {total}", "noSourceFilesFound": "⚠️ No se encontraron archivos fuente en el directorio fuente.", "reviewNotTranslatedKeys": "💡 Revisar claves no traducidas", "analysisCompletedSuccessfully": "🎉 ¡Análisis completado exitosamente!", "detectedSourceDirectory": "Directorio fuente detectado: {sourceDir}", "detectedI18nDirectory": "Directorio i18n detectado: {i18nDir}", "fileInfo": " 📄 {namespace}: {keys} claves", "failedToAnalyzeUsage": "❌ Error al analizar uso: {error}", "failedToAnalyzeFile": "❌ Error al analizar archivo: {error}", "failedToExtractKeys": "❌ Error al extraer claves de {filePath}: {error}", "analysisFailedError": "❌ Error de análisis: {error}", "analyzerInitialized": "Analizador inicializado", "analyzerInitFailed": "Error al inicializar analizador: {error}", "argsParsed": "Argumentos analizados", "processedFiles": "Procesados {processedFiles} de {totalFiles} archivos.", "argsParseFailed": "Error al analizar argumentos: {error}", "translationDiscoveryError": "Error al descubrir traducción: {error}", "fileTraversalError": "Error al recorrer archivo: {error}", "sourceEqualsI18nWarn": "⚠️ El directorio fuente y el directorio i18n son el mismo. Esto puede causar problemas con el análisis.", "i18nEqualsSourceWarn": "⚠️ El directorio i18n y el directorio fuente son el mismo. Esto puede causar problemas con el análisis.", "usageAnalysisFailed": "⚠️ Error en el análisis de uso: {error}", "translationFileParseError": "⚠️ Error al analizar 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 completitud de traducción...", "unusedKeysCount": "Claves no usadas: {count}", "usedKeysCount": "Claves usadas: {count}", "availableKeysCount": "Claves disponibles: {count}", "analysisResults": "Resultados del análisis:", "i18nDirectoryNotFound": "⚠️ Directorio i18n no encontrado. Por favor verifica la ruta.", "sourceDirectoryNotFound": "⚠️ Directorio fuente no encontrado: {dir}", "checkUsage": { "title": "🔍 I18NTK USAGE ANALYSIS", "analyzing_source_files": "🔍 Analizando archivos fuente...", "source_directory_thissourcedir": "📁 Directorio fuente: {sourceDir}", "i18n_directory_thisi18ndir": "📁 Directorio i18n: {i18nDir}", "found_files_in_source": "✅ Encontrados {numFiles} archivos en el directorio fuente", "no_source_files_found": "⚠️ No se encontraron archivos fuente en el directorio fuente", "processedFiles": "📊 Procesados {processedFiles} de {totalFiles} archivos", "failedToProcessFile": "❌ Error al procesar archivo", "found_thisusedkeyssize_unique_": "🔍 Encontradas {usedKeysSize} claves únicas usadas", "total_key_usages_totalkeysfoun": "📊 Total de usos de claves: {totalKeysFound}", "loading_available_translation_": "📂 Cargando claves de traducción disponibles...", "found_thisavailablekeyssize_av": "✅ Encontradas {availableKeysSize} claves disponibles", "message": "Analizando uso de claves de traducción en tu proyecto...", "usage_analysis_results": "📊 RESULTADOS DEL ANÁLISIS DE USO", "source_files_scanned_thisfileu": "📁 Archivos fuente 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}", "translation_completeness_title": "📈 COMPLETENESS OF TRANSLATION", "language_completeness_stats": "{language}: {translated}/{total} ({completeness}% traducido)", "n_sample_unused_keys": "🗑️ EJEMPLO DE CLAVES NO UTILIZADAS (primeras 5):", "key": " 🔑 {key}", "and_unusedkeyslength_5_more": "... y {count} claves no utilizadas más", "n_sample_missing_keys": "\n❌ EJEMPLO DE CLAVES FALTANTES (primeras 5):", "and_missingkeyslength_5_more": "... y {count} claves faltantes más", "n_generating_detailed_report": "\n📊 Generando informe detallado...", "report_saved_reportpath": "📄 Informe guardado: {reportPath}", "n_recommendations": "\n💡 RECOMENDACIONES:", "consider_removing_unused_trans": " 🗑️ Considere eliminar las traducciones no utilizadas para reducir el tamaño del paquete", "add_missing_translation_keys_t": " ➕ Agregue las claves de traducción faltantes para mantener la consistencia", "review_dynamic_keys_manually_t": " 🔍 Revise manualmente las claves dinámicas (pueden ser válidas)", "all_translation_keys_are_prope": "✅ ¡Todas las claves de traducción se utilizan correctamente!", "n_next_steps": "\n🎯 SIGUIENTES PASOS:", "2_check_the_detailed_report_fo": " 2. Verifique el informe detallado para problemas específicos", "help_message": "\nAnalizador de Uso i18ntk\n\nUso: node i18ntk-usage.js [opciones]\n\nOpciones:\n --source-dir <dir> Directorio fuente a escanear (predeterminado: ./src)\n --i18n-dir <dir> Directorio i18n (predeterminado: ./src/locales)\n --output-report Generar informe detallado\n --output-dir <dir> Directorio de salida para 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", "1_review_the_analysis_results": "1. Revise los resultados del análisis en la consola o informe generado.", "2_run_with_outputreport_for_de": "2. Ejecute con --output-report para informe detallado.", "3_remove_unused_keys_or_add_mi": "3. Elimine claves no utilizadas o agregue claves faltantes al código fuente.", "4_rerun_analysis_to_verify_imp": "4. Re-ejecute el análisis para verificar mejoras.", "noSourceFilesFound": "No se encontraron archivos fuente para analizar.", "i18nDirectoryNotFound": "No se encontró el directorio i18n: {i18nDir}", "noTranslationLanguagesFound": "No se encontraron idiomas de traducción.", "failedToAnalyzeFile": "Error al analizar archivo {filePath}: {error}", "failedToAnalyzeLanguage": "Error al analizar el idioma {language}: {error}", "translationCompletenessAnalysisFailed": "El análisis de completitud de traducción falló: {error}", "n": "" }, "complete": { "configLoadedSuccessfully": "Configuración cargada correctamente", "configLoadingFailed": "Error al cargar la configuración", "title": "🌍 COMPLETADO DE TRADUCCIÓN I18NTK", "separator": "============================================================", "sourceDir": "📁 Directorio fuente: {sourceDir}", "sourceLanguage": "🌐 Idioma fuente: {sourceLanguage}", "dryRunMode": "🧪 Modo de prueba - no se realizarán cambios", "languages": "🌍 Idiomas disponibles: {languages}", "addingMissingKeys": "➕ Agregando claves faltantes a archivos de traducción...", "processing": "🔄 Procesando {language}...", "addedKeys": "✅ Se agregaron {count} claves faltantes", "changeDetails": "📝 {file}: {key}", "andMore": "...y {count} más", "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. Run usage analysis:", "nextStep2": " node i18ntk-usage.js --output-report", "nextStep3": "2. Validate translations:", "nextStep4": " node i18ntk-validate.js", "nextStep5": "3. Analyze patterns:", "nextStep6": " node i18ntk-analyze.js", "allKeysAvailable": "🎉 ¡Todas las claves de traducción están disponibles!", "runWithoutDryRun": "💡 Ejecute sin --dry-run para aplicar cambios", "deletingOldReport": "🗑️ Eliminando informe antiguo...", "generatingFreshAnalysis": "📊 Generando análisis de uso fresco...", "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 analizar el informe de uso. Usando claves comunes..." }, "noTranslationLanguagesFound": "No se encontraron idiomas de traducción.", "failedToAnalyzeLanguage": "Error al analizar el idioma {language}: {error}", "translationCompletenessAnalysisFailed": "El análisis de completitud de traducción falló: {error}" }, "validate": { "help_message": "\nValidador de Traducciones I18n\n\nUso: node i18ntk-validate.js [opciones]\n\nOpciones:\n --source-dir <dir> Directorio fuente a escanear (predeterminado: ./src)\n --i18n-dir <dir> Directorio i18n (predeterminado: ./src/locales)\n --output-report Generar informe detallado\n --output-dir <dir> Directorio de salida para informes (predeterminado: ./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 hay idiomas objetivo configurados; omitiendo validación de objetivos. Agregue idiomas mediante \"i18ntk init --languages=de,fr\".", "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. Corregir todos los errores primero", "resolveMissingFilesAndSyntaxErrors": "1. Resolver archivos faltantes y errores de sintaxis", "fixStructuralInconsistencies": "2. Corregir inconsistencias estructurales", "completeMissingTranslations": "3. Completar traducciones faltantes", "rerunValidation": "4. Volver a ejecutar validación para verificar correcciones", "addressWarnings": "Abordar advertencias para mejorar la calidad", "reviewWarnings": "Revisar advertencias y corregir donde sea apropiado", "considerRunningWithStrict": "2. Considerar ejecutar con bandera --strict para validación más estricta", "allValidationsPassed": "🎉 ¡Todas las validaciones pasaron!", "considerRunningUsageAnalysis": "Considerar ejecutar análisis de uso: node i18ntk-usage.js", "deletedOldReport": "🗑️ Informe de validación antiguo eliminado", "sourceDir": "📁 Directorio fuente: {sourceDir}", "i18nDir": "🌐 Directorio i18n: {i18nDir}", "loadingTranslationFiles": "📋 Cargando archivos de traducción...", "foundTranslationFilesCount": "✅ Encontrados {count} archivos de traducción", "analyzingTranslations": "🔍 Analizando traducciones...", "validationCompletedSuccessfully": "🎉 ¡Validación completada exitosamente!", "validationErrorsFound": "⚠️ Errores de validación encontrados: {count}", "validationWarningsFound": "⚠️ Advertencias de validación encontradas: {count}", "validationPassed": "✅ Validación pasada sin errores", "validationFailed": "Validación fallida: {error}", "startingValidationProcess": "🔍 Iniciando proceso de validación...", "validationProcessCompletedSuccessfully": "✅ Proceso de validación completado exitosamente", "stackTrace": "Rastro de pila: {stack}", "authenticationFailed": "❌ Autenticación fallida. Acceso denegado.", "fatalValidationError": "❌ Error de validación fatal: {error}", "configAccess": "Accediendo a configuración para validación", "configValidated": "Configuración validada exitosamente", "configError": "Error de configuración: {error}", "validatorInit": "Inicializando validador I18n", "validatorInitialized": "Validador I18n inicializado exitosamente", "validatorInitError": "Error de inicialización del validador: {error}", "argsParsing": "Analizando argumentos de línea de comandos", "argsParsed": "Argumentos de línea de comandos analizados exitosamente", "argsParseError": "Error de análisis de argumentos: {error}", "languagesScan": "Escaneando idiomas disponibles", "languagesFound": "Encontrados {count} idiomas", "languagesScanError": "Error de escaneo de idiomas: {error}", "filesScan": "Encontrados {count} archivos en {language}", "filesScanError": "Error de escaneo de 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": "Ejecución de validación fallida: {error}", "scriptExecution": "Ejecución de 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": "Directorio de idioma fuente no encontrado", "specifiedLanguageNotFound": "Idioma especificado no encontrado", "noJsonFilesFound": "No se encontraron archivos JSON en el directorio fuente: {sourceDir}", "i18nDirectoryNotFound": "Directorio i18n no encontrado: {i18nDir}", "invalidDirectoryPaths": "Rutas de directorio inválidas detectadas", "invalidSampleFilePath": "Ruta de archivo de ejemplo inválida", "failedToCreateSampleTranslationFile": "Falló al crear archivo de traducción de ejemplo", "invalidFilePathDetected": "Ruta de archivo inválida detectada", "failedToWriteFile": "Falló al escribir archivo: {filePath}" }, "adminCli": { "setupPinProtectionTitle": "\n🔐 Configurando Protección PIN de Administrador", "setupPinProtectionDescription": "Esto requerirá un PIN de 4-6 dígitos para operaciones administrativas.", "enablePinProtectionPrompt": "¿Deseas habilitar la protección PIN de administrador?", "setupCancelled": "Configuración de protección PIN de administrador cancelada.", "enterPinPrompt": "Ingresa un PIN de 4-6 dígitos: ", "pinFormatError": "❌ El PIN debe tener 4-6 dígitos. Por favor intenta de nuevo.", "confirmPinPrompt": "Confirma el PIN: ", "pinMismatchError": "❌ Los PINs no coinciden. Por favor intenta de nuevo.", "pinProtectionEnabledSuccess": "✅ ¡Protección PIN de administrador habilitada exitosamente!", "pinRecoveryWarning": "⚠️ Recuerda tu PIN - no podrá ser recuperado si lo pierdes.", "setupPinProtectionFailed": "❌ Falló la configuración de protección PIN de administrador.", "errorSettingUpPin": "❌ Error configurando 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. {remaining} intentos restantes.", "authenticationFailedAccessDenied": "❌ Autenticación fallida. Acceso denegado.", "authenticationError": "❌ Error de autenticación: {message}", "pinProtectionNotEnabled": "La protección PIN de administrador no está habilitada actualmente.", "disablingPinProtectionTitle": "\n🔓 Deshabilitando Protección PIN de Administrador", "confirmDisablePinProtection": "¿Estás seguro de que deseas deshabilitar la protección PIN de administrador?", "operationCancelled": "Operación cancelada.", "pinProtectionDisabledSuccess": "✅ Protección PIN de administrador deshabilitada.", "disablePinProtectionFailed": "❌ Falló al deshabilitar la protección PIN de administrador.", "errorDisablingPinProtection": "❌ Error deshabilitando protección de administrador: {message}", "adminProtectionStatusTitle": "\n🔐 Estado de Protección de Administrador", "statusEnabled": "Estado: ✅ HABILITADO", "protectionDetails": "Protección: PIN de 4-6 dígitos requerido 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 verificando estado de administrador: {message}", "authRequired": "🔐 Se requiere autenticación de administrador.", "invalidPin": "❌ PIN inválido.", "authSuccess": "✅ ¡Autenticación exitosa!", "adminPinSetupCli": "configuracion_pin_admin_cli", "adminAuthFailedCli": "autenticacion_admin_fallida_cli", "adminAuthDisabledCli": "autenticacion_admin_deshabilitada_cli", "protectedAccess": "Acceso protegido: Se requiere autenticación de administrador para operaciones sensibles.", "enterPin": "Ingresa el PIN de administrador: ", "accessGranted": "Acceso concedido." }, "adminPin": { "setup_title": "🔐 Configuración de PIN de Administrador", "setup_separator": "============================================================", "setup_description": "Crea un PIN de 4-6 dígitos para acceso administrativo 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ás asteriscos (*) mientras escribes - son solo caracteres de enmascaramiento.", "setup_digits_only": " Solo se aceptan números del 0-9 como d