UNPKG

i18ntk

Version:

i18n Tool Kit - Zero-dependency internationalization toolkit for setup, scanning, analysis, validation, auto translation, fixing, reporting, and runtime translation loading.

741 lines 164 kB
{ "meta": { "version": "3.1.2", "updated": "2026-05-07" }, "common": { "welcome": "Bienvenido", "hello": "Hola", "goodbye": "Adiós", "yes": "Sí", "no": "No", "save": "Ahorrar", "cancel": "Cancelar", "delete": "Borrar", "edit": "Editar", "loading": "Cargando...", "offlineTitle": "Estás desconectado", "offlineMessage": "Por favor revisa tu conexión a internet", "tryReconnect": "Intenta volver a conectarte", "logout": "Cerrar sesión", "login": "Acceso", "amount": "Cantidad", "success": "Éxito", "error": "Error", "warning": "Advertencia", "info": "Información:", "debug": "Depurar", "progress": "Progreso:", "remaining": "Restante:", "total": "Total:", "completed": "7. ¡Completado con éxito!", "missing": "Desaparecido", "partial": "Parcial", "sameAsSource": "Igual que la fuente:", "formatMismatch": "El formato no coincide:", "typeMismatch": "Tipo no coincidente:", "structureMismatch": "Desajuste de estructura:", "invalidOption": "Opción no válida", "separator": "====================================================", "initializationFailed": "❌ Falló la inicialización: {error}", "stackTrace": "Seguimiento de pila: {stack}", "pressEnterToContinue": "Presione Entrar para continuar...", "pressEnterToReturn": "Presione Enter para regresar al menú principal...", "stepCompleted": "Paso '{stepName}' completado.", "stepFailed": "Paso '{stepName}' fallido.", "runningStep": "Paso de carrera: {stepName}", "command": "Dominio: {command}", "startingWorkflow": "Iniciando flujo de trabajo...", "workflowCompleted": "Flujo de trabajo completado.", "checkReports": "Consulte los informes para obtener más detalles.", "errorExecutingCommand": "Error al ejecutar el comando: {error}", "genericError": "❌Error: {error}", "errors": { "errors": "Errores:", "genericError": "❌Error: {error}", "initializationFailed": "❌ Falló la inicialización: {error}", "initializationCancelled": "❌ Inicialización cancelada por el usuario.", "translationKeyNotFound": "Clave de traducción no encontrada: {key}", "sourceDirectoryNotFound": "Directorio fuente no encontrado: {directory}", "configLoadingFailed": "Error al cargar la configuración", "invalidSourceDirectory": "Directorio fuente no válido: {directory}", "securityViolation": "Violación de seguridad detectada", "authenticationFailed": "Error de autenticación", "sourceEqualsI18nWarn": "⚠️ sourceDir es igual a i18nDir ({sourceDir}). Volviendo a {fallback} para escanear el origen." }, "errorGeneratingStatusSummary": "Error al generar el resumen de estado: {error}", "errorRunningDebugTool": "Error al ejecutar la herramienta de depuración '{displayName}': {error}", "errorReadingDebugLogs": "Error al leer los registros de depuración: {error}", "errorAnalyzingLogFile": "Error al analizar el archivo de registro: {error}", "errorAnalyzingTranslationKeys": "Error al analizar las claves de traducción: {error}", "errorAnalyzingTranslationCompleteness": "Error al analizar la integridad de la traducción: {error}", "analyzingTranslationCompleteness": "Analizando la integridad de la traducción en todos los idiomas...", "i18nDirectoryNotFound": "⚠️ directorio i18n no encontrado: {i18nDir}", "translationCompletenessAnalysisFailed": "⚠️ Error en el análisis de integridad de la traducción: {error}", "failedToAnalyzeLanguage": "❌ No se pudo analizar el idioma {language}: {error}", "errorReadingI18nDirectory": "❌ Error al leer el directorio i18n:", "languageCompletenessTitle": "📈 INTEGRIDAD DE LA TRADUCCIÓN POR IDIOMA", "errorAnalyzingTranslationFormat": "Error al analizar el formato de traducción: {error}", "errorAnalyzingTranslationType": "Error al analizar el tipo de traducción: {error}", "errorAnalyzingTranslationStructure": "Error al analizar la estructura de traducción: {error}", "errorAnalyzingTranslationFormatMismatch": "Error al analizar la falta de coincidencia del formato de traducción: {error}", "errorAnalyzingTranslationTypeMismatch": "Error al analizar la discrepancia del tipo de traducción: {error}", "errorAnalyzingTranslationStructureMismatch": "Error al analizar la estructura de traducción que no coincide: {error}", "errorAnalyzingTranslationSameAsSource": "Error al analizar la traducción igual que la fuente: {error}", "title": "Estado", "nextStep1": "1. Verifique el análisis de uso:", "nextStep2": "2. Validar traducciones:", "nextStep3": "3. Analizar la integridad:", "nextStep4": "4. Complete las traducciones que faltan:", "nextStep5": "5. Generar informe resumido:", "nextStep6": "6. Revisar y finalizar las traducciones:", "generating": "Generando informe resumido...", "review": "Revisando traducciones...", "finalizing": "Finalizando traducciones...", "finalized": "¡Finalizado con éxito!", "warnings": "Advertencias:", "completedKeys": "Claves completadas:", "missingKeys": "Teclas faltantes:", "partialKeys": "Claves parciales:", "home": "Hogar", "settings": "Ajustes", "startingSettings": "🎛️ Iniciando configuración CLI...", "confirm": "Confirmar", "errorExiting": "Error al salir." }, "errors": { "invalidOption": "❌ Opción no válida: {option}. Por favor inténtalo de nuevo.", "readlineClosed": "El flujo de entrada está cerrado; ejecutándose en modo no interactivo.", "noPackageJson": "No se encontró ningún paquete.json. No se puede detectar automáticamente el marco i18n.", "noI18nDir": "No se encontró ningún directorio i18n en la raíz del proyecto.", "noI18nConfig": "No se encontró ningún archivo de configuración de i18n en la raíz del proyecto.", "errorReadingDebugLogs": "Error al leer los registros de depuración: {error}" }, "scanner": { "help_message": "Uso del escáner de texto I18n: nodo i18ntk-scanner.js [opciones] Opciones: --source-dir <dir> Directorio de origen para escanear (predeterminado: ./src) --salida <file> Archivo de salida para los resultados del análisis (predeterminado: ./i18ntk-scanner-report.json) --framework <name> Marco de destino (react, vue, angular, vanilla) --patrones <patterns> Patrones de expresiones regulares personalizados (separados por comas) --include-tests Incluir archivos de prueba en el análisis --exclude-dirs <dirs> Directorios para excluir (separados por comas) --help Mostrar esta ayuda Ejemplos: node i18ntk-scanner.js --source-dir=./src --framework=react node i18ntk-scanner.js --patterns 'console.log\\((.*?)\\)' --include-tests node i18ntk-scanner.js --output=./scan-results.json", "help_options": { "source_dir": "Directorio de origen para buscar problemas con i18n", "output_dir": "Directorio de informes y resultados de escaneo", "framework": "Marco de destino (react, vue, angular, vanilla)", "patterns": "Patrones de expresiones regulares personalizados para la detección de texto", "exclude": "Patrones de archivos para excluir del escaneo", "output_report": "Generar informe de escaneo detallado", "min_length": "Longitud mínima del texto a considerar para la traducción", "max_length": "Longitud máxima del texto a considerar para la traducción", "include_tests": "Incluir archivos de prueba en el proceso de escaneo" }, "starting": "🔍 Iniciar el escáner de texto para framework: {framework}", "sourceDirectory": "📁 Directorio de escaneo: {sourceDir}", "frameworkDetected": "🎯 Marco detectado: {framework}", "scanningFiles": "📊 Escaneo {fileCount} archivos...", "foundTexts": "📝 Encontrado {textCount} textos que requieren traducción", "generatingReport": "📊 Generando informe detallado...", "reportSaved": "💾 Informe de escaneo guardado en: {reportPath}", "noTextsFound": "✅ No se encontraron textos en inglés codificados", "scanComplete": "🎉 ¡El escaneo se completó con éxito!", "analysisTitle": "🔍 ANÁLISIS DE ESCANEO DE TRADUCCIÓN", "fileSummary": "📄 {file}: {count} textos encontrados", "textLocation": "📍 Línea {line}: {text}", "foundText": "Encontró {count} posibles instancias de texto codificado", "context": "📝 Contexto: {context}", "severity": "⚠️ Gravedad: {severity}", "recommendation": "💡 Recomendación: {recommendation}", "welcome": { "title": "🎯 ¡Bienvenido al Escáner de Texto!", "description": "Esta herramienta escanea su código fuente en busca de texto codificado en inglés que pueda necesitar traducción." }, "frameworkPrompt": { "title": "🎯 Seleccionar marco", "available": "Marcos disponibles: reaccionar, vue, angular, vainilla", "description": "Ingrese el tipo de marco (o presione Enter para la detección automática):", "input": "Estructura:" }, "directoryPrompt": { "title": "📁 Seleccionar directorio de origen", "current": "Directorio actual: {dir}", "description": "Ingrese el directorio para escanear (o presione Enter para obtener el actual):", "input": "Directorio:" }, "options": { "includeTests": "¿Incluir archivos de prueba?", "excludeDirs": "Directorios a excluir (separados por comas):", "customPatterns": "Patrones personalizados para buscar (regex):" }, "reportGenerated": "Informe de escaneo generado: {path}" }, "fixer": { "help_message": "Uso de I18n Translation Fixer: nodo i18ntk-fixer.js [opciones] Opciones: --source-dir <dir> Directorio de origen para escanear (predeterminado: ./locales) --idiomas <langs> Lista separada por comas de idiomas para corregir: marcadores <markers> Marcadores separados por comas para tratarlos como no traducidos --no-backup Omitir la creación automática de copias de seguridad --help Mostrar esta ayuda Ejemplos: nodo i18ntk-fixer.js --languages ​​de,fr nodo i18ntk-fixer.js --source-dir=./locales --markers NOT_TRANSLATED nodo i18ntk-fixer.js --no-backup", "starting": "🚀 Inicio de corrección de traducción para idiomas: {languages}", "sourceDirectory": "📁 Directorio de fuentes: {sourceDir}", "sourceLanguage": "🔤 Idioma de origen: {sourceLanguage}", "markers": "🏷️ Marcadores para arreglar: {markers}", "scanningLanguage": "📊 Escaneo {language}...", "noLanguages": "❌ No se han especificado idiomas para la corrección.", "allComplete": "🎉 ¡Todas las traducciones ya están completas!", "fullReportSaved": "📊 Informe completo guardado en: {reportPath}", "reviewReport": "Revise el informe antes de continuar.", "backupCreated": "💾 Copia de seguridad creada exitosamente.", "applyingFixes": "🔄 Aplicando correcciones...", "fixingComplete": "✅ ¡Arreglo de traducción completo!", "operationCancelled": "❌ Operación cancelada por el usuario.", "analysisTitle": "🔍 ANÁLISIS DE FIJACIÓN DE TRADUCCIÓN", "analysisSeparator": "====================================================", "totalIssues": "Total de problemas encontrados: {totalIssues}", "missingTranslations": "Traducciones faltantes: {missing}", "placeholderTranslations": "Traducciones de marcadores de posición: {placeholder}", "noIssues": "✅ No se encontraron problemas. Todas las traducciones están completas.", "detailedIssues": "📋 CUESTIONES DETALLADAS:", "detailedSeparator": "--------------------------------------------------", "filePath": "📄 {file} → {path}", "missingKey": "❌ FALTA: {source} → {new}", "placeholderKey": "⚠️ MARCADOR DE LUGAR: \"{target}\" → \"{new}\"", "moreIssues": "... y {count} más problemas. Consulte el archivo del informe para obtener detalles completos.", "confirmationTitle": "🤔 ¿Quieres continuar 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 (s/n/s):", "nonInteractiveMode": "⚡ Se detectó modo no interactivo: se aplican correcciones automáticamente...", "reportGenerated": "📊 Informe de reparación generado: {path}", "summary": "Resumen del reparador:", "welcome": { "title": "🎯 ¡Bienvenido a Translation Fixer!", "description": "Esta herramienta le ayudará a corregir traducciones y marcadores de posición rotos en sus archivos locales." }, "markerPrompt": { "title": "🏷️ Configurar marcadores de posición", "description": "Ingrese los marcadores que indican texto no traducido (separados por comas):", "currentDefaults": "Marcadores predeterminados: {markers}", "input": "Marcadores (o presione Enter para ver los valores predeterminados):" }, "languagePrompt": { "title": "🌍 Seleccione idiomas para corregir", "available": "Idiomas disponibles: {languages}", "description": "Ingrese los idiomas a corregir (separados por comas) o presione Entrar para todos:", "input": "Idiomas:", "noLanguages": "No se encontraron idiomas para corregir." }, "directoryPrompt": { "title": "📁 Seleccionar directorio", "current": "Directorio actual: {dir}", "description": "Ingrese el directorio que contiene sus archivos locales (o presione Enter para ver los actuales):", "input": "Directorio:" }, "backupLocation": "Ubicación de la copia de seguridad: {dir}", "completed": "Reparación completada.", "creatingBackup": "Creando copia de seguridad en {dir}...", "dryRunMode": "Modo de funcionamiento en seco: {mode}", "error": "El reparador falló: {error}", "fixing": "Fijación {language}...", "foundLanguages": "Encontró {count} idiomas: {languages}", "languageFixed": "{language}: fijado {fixed} clave(s), omitida {skipped}.", "running": "Ejecutando el reparador de traducción...", "totalFixed": "Total fijo: {count}" }, "autorun": { "stepAnalyzeTranslations": "Analizar traducciones", "stepCompletedWithIcon": "✅ Completado: {stepName}", "stepValidateTranslations": "Validar traducciones", "stepRunning": "▶️ Paso {stepNumber}/{totalSteps}: {stepName}", "separator": "====================================================", "stepFailed": "❌ Fallido: {stepName}", "errorLabel": "Error", "autoRunScriptTitle": "🧪 Flujo de trabajo de ejecución automática", "usageTitle": "Uso", "runAllSteps": "Ejecutar: nodo i18ntk-autorun.js", "configureSettingsFirst": "Configuración: i18ntk-config.json o indicadores CLI", "runSpecificSteps": "Utilice --steps=1,3 o --list para mostrar los pasos", "showHelp": "--ayuda para más información", "examplesTitle": "Ejemplos", "configExample": "nodo i18ntk-autorun.js --ui-language=zh", "stepsExample1": "nodo i18ntk-autorun.js --steps=analizar,validar", "stepsExample2": "nodo i18ntk-autorun.js --lista", "customSettingsConfiguration": "Configuración de ejecución automática personalizada", "availableSteps": "Pasos disponibles", "startingAutoRunWorkflow": "🚀 Iniciando flujo de trabajo de ejecución automática...", "workflowIncludesSteps": "El flujo de trabajo incluye {count} pasos:", "missingRequiredFile": "Falta el archivo requerido: {file}", "workflowStopped": "El flujo de trabajo se detuvo debido a una falla.", "workflowCompleted": "🎉 ¡Flujo de trabajo completado!", "successfulSteps": "Pasos exitosos: {count}", "failedSteps": "Pasos fallidos: {count}", "stepInitializeProject": "Inicializar proyecto", "stepCheckUsage": "Verificar el uso de claves", "stepGenerateSummary": "Generar informe resumido", "runInitializationFirst": "Ejecute primero la inicialización.", "initializationCheckPassed": "Se pasó la verificación de inicialización.", "runningStep": "Paso de carrera: {stepName}", "commandLabel": "Dominio: {command}", "stepCompletedWithTime": "Paso '{stepName}' completado en {duration}EM.", "stepCompleted": "Paso '{stepName}' completado.", "stepFailedWithError": "Paso '{stepName}'falló con error: {error}", "requiredStepFailed": "El paso requerido falló. Deteniendo el flujo de trabajo.", "optionalStepFailed": "El paso opcional falló. Flujo de trabajo continuo.", "stepRequired": "(Requerido)", "stepOptional": "(Opcional)", "startingExecution": "Iniciando ejecución...", "pressEnterToContinue": "Presione Entrar para continuar...", "runningSelectedSteps": "Ejecutando los pasos seleccionados...", "invalidStepNumber": "Número de paso no válido: {stepNum}", "executionReport": "Informe de Ejecución:", "requiredFailedSteps": "Los pasos requeridos fallaron: {count}", "stepDetails": "Detalles del paso:", "reportSavedTo": "Informe guardado en: {path}", "overallStatusSuccess": "ÉXITO", "overallStatusFailed": "FALLIDO", "overallStatus": "Estado general: {status}", "pressEnterForDefaults": "Presione Entrar para usar la configuración predeterminada para cualquier mensaje.", "sourceDirPrompt": "Ingrese el directorio de origen (predeterminado: {default}):", "sourceLangPrompt": "Ingrese el idioma de origen (predeterminado: {default}):", "targetLangsPrompt": "Introduzca los idiomas de destino (separados por comas, predeterminado: {default}):", "translationMarkerPrompt": "Ingrese el marcador de traducción (predeterminado: {default}):", "outputDirPrompt": "Ingrese el directorio de salida para los informes (predeterminado: {default}):", "settingsUpdatedSuccessfully": "¡La configuración se actualizó correctamente!", "errorConfiguringSettings": "Error al configurar los ajustes: {error}", "configurationComplete": "Configuración completa.", "runAutoRunCommand": "Ahora puede ejecutar el comando de ejecución automática.", "configurationFailed": "Error de configuración: {error}", "noValidStepNumbers": "No se han proporcionado números de paso válidos.", "autoRunFailed": "Error de ejecución automática: {error}", "stepCompleteTranslations": "Traducciones completas", "stepAnalyzeSizing": "Analizar tallas", "stepCompletedIcon": "✅", "stepRunningWithNumber": "[{stepNumber}/{totalSteps}] Paso '{stepName}' correr...", "stepFailedIcon": "❌", "translationLoadWarning": "Advertencia: No se pudo cargar {lang} traducciones", "configReadError": "Error al leer {file}" }, "analyze": { "help_message": "Uso del analizador de traducción I18n: nodo i18ntk-analyze.js [opciones] Opciones: --source-dir <dir> Directorio de origen para escanear (predeterminado: ./src) --i18n-dir <dir> Directorio I18n (predeterminado: ./src/locales) --output-report Generar informe detallado --output-dir <dir> Directorio de salida para informes (predeterminado: ./reports) --help Mostrar esta ayuda Ejemplos: nodo i18ntk-analyze.js --output-report nodo i18ntk-analyze.js --source-dir=./app --i18n-dir=./locales nodo i18ntk-analyze.js --output-dir=./analysis --output-report", "source_directory": "📁 Directorio de fuentes: {sourceDir}", "i18n_directory": "🌐 Directorio I18n: {i18nDir}", "loading_translation_files": "📋 Cargando archivos de traducción...", "sourceDirectoryLabel": "📁 Directorio de fuentes: {sourceDir}", "sourceLanguageLabel": "🌍 Idioma de origen: {sourceLanguage}", "strictModeLabel": "⚙️ Modo estricto: {mode}", "found_translation_files_count": "✅ Encontrado {count} archivos de traducción", "analyzing_translations": "🔍Analizando traducciones...", "analysis_completed_successfully": "🎉 ¡Análisis completado con éxito!", "analysis_results": "📊 RESULTADOS DEL ANÁLISIS", "language_analysis_stats": "{language}: {translatedKeys}/{totalKeys} ({percentage}% traducido)", "sample_missing_keys": "Ejemplos de claves faltantes:", "missing_key": "- {key}", "and_more_missing": "...y {count} más.", "sample_unused_keys": "Ejemplos de claves no utilizadas:", "unused_key": "- {key}", "and_more_unused": "...y {count} más.", "recommendations": "📋 RECOMENDACIONES", "add_missing_translations": "💡 Agregue traducciones faltantes para mejorar la cobertura.", "remove_unused_translations": "💡 Elimina las traducciones no utilizadas para mantener limpio tu proyecto.", "next_steps": "📋 PRÓXIMOS PASOS", "review_analysis_results": "1. Revise los resultados del análisis en la consola o en el informe generado.", "run_with_output_report": "2. Ejecute con --output-report para obtener un informe detallado.", "add_or_remove_translations": "3. Agregue las traducciones que faltan o elimine las que no se utilicen.", "rerun_analysis": "4. Vuelva 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 comprobados: {translationFileCount}", "total_keys": "Claves totales: {totalKeys}", "translated_keys": "Claves traducidas: {translatedKeys}", "missing_keys": "Teclas 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": "❌ El análisis falló para {language} ({missingKeys} desaparecido, {unusedKeys} no usado)", "starting": "🔍 Iniciando análisis de traducción...", "foundLanguages": "📋 Encontrado {count} Idiomas a analizar: {languages}", "analyzing": "🔄 Analizando {language}...", "reportTitle": "📊 INFORME DE ANÁLISIS DE TRADUCCIÓN", "generated": "Generado: {timestamp}", "status": "Estado: {translated}/{total} llaves ({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 con éxito!", "statusFileMissing": "❌ Falta el archivo de traducción", "sourceKeys": "📊 Claves de origen: {count}", "translation": "📊 Traducción: {translated}/{total} ({percentage}%)", "structure": "🗂️ Estructura: {status}", "consistent": "Coherente", "inconsistent": "Inconsistente", "missingKeys": "Teclas faltantes: {count}", "extraKeys": "Claves adicionales: {count}", "issues": "⚠️ Problemas encontrados: {count}", "issueType": { "not_translated": "No traducido: {count}", "empty_value": "Valores vacíos: {count}", "partial_translation": "Traducciones parciales: {count}", "format_mismatch": "El formato no coincide: {count}", "type_mismatch": "Los tipos no coinciden: {count}", "structure_mismatch": "Desajustes estructurales: {count}", "same_as_source": "Igual que la fuente: {count}" }, "keysToTranslate": "📋 CLAVES PARA TRADUCIR", "key": "Llave", "english": "Inglés", "needsTranslation": "NECESITA TRADUCCIÓN", "andMoreKeys": "...y {count} más llaves.", "noLanguages": "⚠️ No se encontraron idiomas de destino.", "languageStats": "{language}: {percentage}% completo ({translated}/{total} llaves)", "invalidReportFilePath": "Ruta de archivo de informe no válida", "failedToWriteReportFile": "No se pudo escribir el archivo del informe de forma segura" }, "complete": { "configLoadedSuccessfully": "Configuración cargada exitosamente", "configLoadingFailed": "Error al cargar la configuración", "sourceLanguageNotFound": "Directorio del idioma de origen no encontrado: {sourceLanguage}", "couldNotParseTarget": "No se pudo analizar el archivo de destino: {file}", "couldNotParseSource": "No se pudo analizar el archivo fuente: {file}", "reportGenerated": "Informe generado: {path}", "generateReportPrompt": "¿Le gustaría generar un informe?", "title": "🌍 TERMINACIÓN DE LA TRADUCCIÓN I18NTK", "separator": "===============================================================", "sourceDir": "📁 Directorio de fuentes: {sourceDir}", "sourceLanguage": "🌐 Idioma de origen: {sourceLanguage}", "dryRunMode": "🧪 Modo de ejecución en seco: no se realizarán cambios", "languages": "🌍 Idiomas disponibles: {languages}", "addingMissingKeys": "➕ Agregar claves faltantes a los archivos de traducción...", "processing": "🔄 Procesamiento {language}...", "addedKeys": "✅ Agregado {count} llaves faltantes", "noChangesNeeded": "✅ No se necesitan cambios para {language}", "summaryTitle": "📊 RESUMEN DE FINALIZACIÓN", "totalChanges": "📝 Cambios totales: {totalChanges}", "languagesProcessed": "🌍 Idiomas procesados: {languagesProcessed}", "missingKeysAdded": "➕ Se agregaron claves faltantes: {missingKeysAdded}", "nextStepsTitle": "📋 PRÓXIMOS PASOS", "nextStep1": "1. Ejecute el análisis de uso:", "nextStep2": "nodo i18ntk-usage.js --informe de salida", "nextStep3": "2. Validar traducciones:", "nextStep4": "nodo i18ntk-validate.js", "nextStep5": "3. Analizar patrones:", "nextStep6": "nodo i18ntk-analyze.js", "allKeysAvailable": "🎉 ¡Todas las claves de traducción ya están disponibles!", "runWithoutDryRun": "💡 Ejecute sin --dry-run para aplicar cambios", "deletingOldReport": "🗑️ Eliminando informe antiguo...", "generatingFreshAnalysis": "📊 Generando nuevos análisis de uso...", "couldNotGenerate": "❌ No se pudo generar el análisis de uso", "reportNotFound": "📋 Informe de uso no encontrado. Usando claves comunes...", "foundMissingKeys": "📋 Encontrado {count} claves faltantes en el 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 la configuración: faltan campos obligatorios" }, "sizing": { "separator": "====================================================================================", "lineSeparator": "--------------------------------------------------------------------------------", "analysisStats": "{stats}", "sourceDirectoryLabel": "📁 Directorio de fuentes: {sourceDir}", "sourceLanguageLabel": "🌍 Idioma de origen: {sourceLanguage}", "strictModeLabel": "⚙️ Modo estricto: {mode}", "invalidSourceDirectoryError": "Ruta del directorio de origen no válida: {sourceDir}", "sourceDirectoryNotFoundError": "Directorio fuente no encontrado: {sourceDir}", "invalidOutputDirectoryError": "Ruta del directorio de salida no válida: {outputDir}", "invalidReportFileError": "Ruta de archivo de informe no válida", "problematic_keys": "Claves problemáticas: {problematicKeys}", "problematicKeysLabel": "Claves problemáticas: {problematicKeys}", "long_translations": "Traducciones largas: {longTranslations}", "failedToSaveReportError": "No se pudo guardar el informe de forma segura", "invalidCsvFileError": "Ruta del archivo CSV no válida", "failedToSaveCsvError": "No se pudo guardar el informe CSV de forma segura", "fatalError": "❌ Error en el análisis de tallas: {error}", "starting_i18n_sizing_analysis": "Iniciando análisis de tamaño de i18n...", "source_directory": "Directorio de origen: {sourceDir}", "found_languages": "Idiomas encontrados: {languages}", "analyzing_file_sizes": "Analizando tamaños de archivos...", "analyzing_translation_content": "Analizando el contenido de la traducción...", "generating_size_comparisons": "Generando comparaciones de tamaño...", "no_languages_found_for_comparison": "No se encontraron idiomas para comparar", "sizing_analysis_results": "Resultados del análisis de tamaño del 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 idiomas", "language_stats_header": "Idioma Teclas Caracteres Longitud promedio Longitud máxima Vacío Largo", "language_stats_row": "{lang} {totalKeys} {totalCharacters} {averageKeyLength} {maxKeyLength} {emptyKeys} {longKeys}", "size_variations_title": "Variaciones de tamaño", "size_variations_header": "Idioma Char Diff % Diff Problema", "size_variation_row": "{lang} {characterDifference} {percentageDifference}% {problematic}", "problematic_yes": "Sí", "problematic_no": "No", "recommendations_title": "Recomendaciones", "recommendation_item": "{index}. {recommendation}", "problematic_key_detail": "{index}. Llave: '{key}' - Variaciones: {variations}", "generating_detailed_report": "Generando informe detallado...", "keysHaveSignificantSizeVariations": "Las claves tienen variaciones significativas de tamaño.", "longTranslationsDetected": "${lang} tiene traducciones ${data.longKeys} de más de 100 caracteres; considere dividirlas", "longer": "más extenso", "shorter": "más corto", "review_translations": "Considere revisar {lang} traducciones - son {percentageDifference}% {comparison} que la línea de base", "report_saved_to": "Informe guardado en: {reportPath}", "considerReviewingTranslations": "Considere revisar ${lang} traducciones: son ${data.percentageDifference}% más largas que el valor inicial", "csv_report_saved_to": "Informe CSV guardado en: {csvPath}", "human_report_saved": "Informe legible guardado: {reportPath}", "folder_summary_title": "Resumen de carpeta", "folder_summary_table_header": "Idioma Tamaño (KB) Claves Longitud 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 a nivel de clave en la consola", "too_many_keys_warning": "⚠️ Demasiadas claves para mostrar en la consola: consulte el archivo del informe detallado para obtener un análisis completo", "no_translation_files_found": "No se encontraron archivos de traducción", "analysis_completed": "Análisis completado en {duration}EM", "analysis_failed": "El análisis falló: {errorMessage}", "starting_analysis": "Iniciando análisis...", "found_files": "Encontró {count} archivos", "failed_to_parse_language_error": "No se pudo analizar {language} traducciones: {errorMessage}", "recommendations": { "keys_have_significant_size_variations": "Las claves tienen variaciones significativas de tamaño.", "consider_reviewing_translations": "Considere revisar {lang} traducciones - son {percentageDifference}% {comparison} que la línea de base", "long_translations_detected": "{lang} tiene {longKeys} traducciones más largo que {threshold} personajes: considere dividirlos" }, "detailed_key_analysis_title": "Análisis clave detallado", "key_analysis_detail": "{lang}: {length} caracteres ({status}) - {translation}", "key_analysis_header": "Llave: {key}", "status_empty": "vacío", "status_long": "largo", "status_ok": "OK" }, "usage": { "help_message": "Uso del analizador de uso I18n: nodo i18ntk-usage.js [opciones] Opciones: --source-dir <dir> Directorio de origen para escanear (predeterminado: ./src) --i18n-dir <dir> Directorio I18n (predeterminado: ./src/locales) --output-report Generar informe detallado --output-dir <dir> Directorio de salida para informes (predeterminado: ./reports) --help Mostrar esta ayuda Ejemplos: nodo i18ntk-usage.js --output-report nodo i18ntk-usage.js --source-dir=./app --i18n-dir=./locales nodo i18ntk-usage.js --output-dir=./analysis --output-report", "source_directory_thissourcedir": "📁 Directorio de fuentes: {sourceDir}", "translationCompletenessTitle": "🌍 Integridad de la traducción:", "i18n_directory_thisi18ndir": "🌐 Directorio I18n: {i18nDir}", "failed_to_parse_filename_error": "⚠️ No se pudo analizar {fileName}: {errorMessage}", "analyzing_source_files": "🔍 Analizando archivos fuente...", "found_files_in_source": "📂 Encontrado {numFiles} archivos en el directorio fuente", "found_thisusedkeyssize_unique_": "🎯 Encontrado {usedKeysSize} llaves usadas únicas", "total_key_usages_totalkeysfoun": "📊 Usos totales de claves: {totalKeysFound}", "loading_available_translation_": "📋 Cargando claves de traducción disponibles...", "found_thisavailablekeyssize_av": "✅ Encontrado {availableKeysSize} llaves disponibles", "foundTranslationFiles": "✅ Encontrado {count} archivos de traducción", "errorReadingI18nDirectory": "⚠️ Error al leer el directorio i18n: {error}", "pressEnterToReturnToMenu": "📝 Pulsa Enter para volver al menú principal...", "notTranslatedKeysTotal": "⚠️ Claves no traducidas: {total}", "noSourceFilesFound": "⚠️ No se encontraron archivos fuente en el directorio fuente.", "reviewNotTranslatedKeys": "💡 Reseña de claves no traducidas", "analysisCompletedSuccessfully": "🎉 ¡Análisis completado con éxito!", "detectedSourceDirectory": "Directorio de origen detectado: {sourceDir}", "detectedI18nDirectory": "Directorio i18n detectado: {i18nDir}", "fileInfo": "📄 {namespace}: {keys} llaves", "failedToAnalyzeUsage": "❌ No se pudo analizar el uso: {error}", "failedToAnalyzeFile": "❌ No se pudo analizar el archivo: {error}", "failedToExtractKeys": "❌ No se pudieron extraer las claves de {filePath}: {error}", "analysisFailedError": "❌ El análisis falló: {error}", "analyzerInitialized": "Analizador inicializado", "analyzerInitFailed": "La inicialización del analizador falló: {error}", "argsParsed": "Argumentos analizados", "processedFiles": "Procesado {processedFiles} de {totalFiles} archivos.", "argsParseFailed": "Error al analizar el argumento: {error}", "translationDiscoveryError": "Error de descubrimiento de traducción: {error}", "fileTraversalError": "Error de recorrido de archivo: {error}", "sourceEqualsI18nWarn": "{reason}. El an?lisis de uso no escanear? archivos de idioma como c?digo fuente.", "i18nEqualsSourceWarn": "⚠️ El directorio I18n y el directorio fuente son los mismos. Esto puede causar problemas con el análisis.", "usageAnalysisFailed": "⚠️ Error en el análisis de uso: {error}", "translationFileParseError": "⚠️ Error de análisis del archivo de traducción: {error}", "translationKeysLoadError": "⚠️ Error al cargar las claves de traducción: {error}", "languageCompletenessStats": "🌐 {language}: {translated}/{total} ({completeness}% traducido)", "missingKeysCount": "⚠️ Teclas faltantes: {count}", "analyzingTranslationCompleteness": "Analizando la integridad de la traducción...", "unusedKeysCount": "Claves no utilizadas: {count}", "usedKeysCount": "Llaves usadas: {count}", "availableKeysCount": "Claves disponibles: {count}", "analysisResults": "Resultados del análisis:", "i18nDirectoryNotFound": "⚠️ No se encontró el directorio I18n. Por favor revisa la ruta.", "sourceDirectoryNotFound": "⚠️ Directorio fuente no encontrado: {dir}", "checkUsage": { "title": "🔍 ANÁLISIS DE USO DE I18NTK", "analyzing_source_files": "🔍 Analizando archivos fuente...", "source_directory_thissourcedir": "📁 Directorio de fuentes: {sourceDir}", "i18n_directory_thisi18ndir": "📁 directorio i18n: {i18nDir}", "found_files_in_source": "✅ Encontrado {numFiles} archivos en el directorio fuente", "no_source_files_found": "⚠️ No se encontraron archivos fuente en el directorio especificado", "processedFiles": "📊 Procesado {processedFiles} de {totalFiles} archivos", "failedToProcessFile": "❌ No se pudo procesar", "found_thisusedkeyssize_unique_": "🔍 Encontrado {usedKeysSize} llaves usadas únicas", "total_key_usages_totalkeysfoun": "📊 Usos totales de claves: {totalKeysFound}", "loading_available_translation_": "📂 Cargando claves de traducción disponibles...", "found_thisavailablekeyssize_av": "✅ Encontrado {availableKeysSize} llaves disponibles", "message": "Analizando el uso de claves de traducción en todo su 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 utilizadas: {usedKeysSize}", "dynamic_keys_detected_dynamick": "⚡ Teclas dinámicas detectadas: {dynamicKeysLength}", "unused_keys_unusedkeyslength": "🗑️ Claves no utilizadas: {unusedKeysLength}", "missing_keys_missingkeyslength": "❌ Teclas faltantes: {missingKeysLength}", "translation_completeness_title": "📈 INTEGRIDAD DE LA TRADUCCIÓN", "language_completeness_stats": "{language}: {translated}/{total} llaves ({percentage}%)", "n_sample_unused_keys": "🗑️ MUESTRAS DE LLAVES NO UTILIZADAS (primeras 5):", "key": "🔑 {key}", "and_unusedkeyslength_5_more": "... y {count} más llaves sin usar", "n_sample_missing_keys": "❌ MUESTRA DE TECLAS FALTANTES (primeras 5):", "and_missingkeyslength_5_more": "... y {count} más llaves faltantes", "n_generating_detailed_report": "📊 Generando informe detallado...", "report_saved_reportpath": "📄 Informe guardado: {reportPath}", "n_recommendations": "💡 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 que faltan para mantener la coherencia", "review_dynamic_keys_manually_t": "🔍 Revisar las claves dinámicas manualmente (pueden ser válidas)", "all_translation_keys_are_prope": "✅ ¡Todas las claves de traducción se utilizan correctamente!", "n_next_steps": "🎯 PRÓXIMOS PASOS:", "2_check_the_detailed_report_fo": "2. Consulte el informe detallado para conocer problemas específicos.", "help_message": "Uso del analizador de uso I18n: nodo i18ntk-usage.js [opciones] Opciones: --source-dir <dir> Directorio de origen para escanear (predeterminado: ./src) --i18n-dir <dir> Directorio I18n (predeterminado: ./src/locales) --output-report Generar informe detallado --output-dir <dir> Directorio de salida para informes (predeterminado: ./reports) --help Mostrar esta ayuda Ejemplos: nodo i18ntk-usage.js --output-report nodo i18ntk-usage.js --source-dir=./app --i18n-dir=./locales nodo i18ntk-usage.js --output-dir=./analysis --output-report", "1_review_the_analysis_results": "1. Revise los resultados del análisis en la consola o en el informe generado.", "2_run_with_outputreport_for_de": "2. Ejecute con --output-report para obtener un informe detallado.", "3_remove_unused_keys_or_add_mi": "3. Elimine las claves no utilizadas o agregue las claves que faltan a su código fuente.", "4_rerun_analysis_to_verify_imp": "4. Vuelva a ejecutar el análisis para verificar las mejoras.", "noSourceFilesFound": "No se encontraron archivos fuente para analizar.", "i18nDirectoryNotFound": "Directorio I18n no encontrado: {i18nDir}", "noTranslationLanguagesFound": "No se encontraron idiomas de traducción.", "failedToAnalyzeFile": "No se pudo analizar el archivo {filePath}: {error}", "failedToAnalyzeLanguage": "No se pudo analizar el idioma {language}: {error}", "translationCompletenessAnalysisFailed": "El análisis de integridad de la traducción falló: {error}", "n": "\\norte" }, "complete": { "configLoadedSuccessfully": "Configuración cargada exitosamente", "configLoadingFailed": "Error al cargar la configuración", "title": "🌍 TERMINACIÓN DE LA TRADUCCIÓN I18NTK", "separator": "===============================================================", "sourceDir": "📁 Directorio de fuentes: {sourceDir}", "sourceLanguage": "🌐 Idioma de origen: {sourceLanguage}", "dryRunMode": "🧪 Modo de ejecución en seco: no se realizarán cambios", "languages": "🌍 Idiomas disponibles: {languages}", "addingMissingKeys": "➕ Agregar claves faltantes a los archivos de traducción...", "processing": "🔄 Procesamiento {language}...", "addedKeys": "✅ Agregado {count} llaves faltantes", "changeDetails": "📝 {file}: {key}", "andMore": "...y {count} más", "noChangesNeeded": "✅ No se necesitan cambios para {language}", "summaryTitle": "📊 RESUMEN DE FINALIZACIÓN", "totalChanges": "📝 Cambios totales: {totalChanges}", "languagesProcessed": "🌍 Idiomas procesados: {languagesProcessed}", "missingKeysAdded": "➕ Se agregaron claves faltantes: {missingKeysAdded}", "nextStepsTitle": "📋 PRÓXIMOS PASOS", "nextStep1": "1. Ejecute el análisis de uso:", "nextStep2": "nodo i18ntk-usage.js --informe de salida", "nextStep3": "2. Validar traducciones:", "nextStep4": "nodo i18ntk-validate.js", "nextStep5": "3. Analizar patrones:", "nextStep6": "nodo i18ntk-analyze.js", "allKeysAvailable": "🎉 ¡Todas las claves de traducción ya están disponibles!", "runWithoutDryRun": "💡 Ejecute sin --dry-run para aplicar cambios", "deletingOldReport": "🗑️ Eliminando informe antiguo...", "generatingFreshAnalysis": "📊 Generando nuevos análisis de uso...", "couldNotGenerate": "❌ No se pudo generar el análisis de uso", "reportNotFound": "📋 Informe de uso no encontrado. Usando claves comunes...", "foundMissingKeys": "📋 Encontrado {count} claves faltantes en el 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": "No se pudo analizar el idioma", "translationCompletenessAnalysisFailed": "Error en el análisis de integridad de la traducción", "failedToProcessFile": "No se pudo procesar el archivo:", "failedToSaveReport": "No se pudo guardar el informe de uso: {error}", "i18nDirectoryDoesNotExist": "El directorio I18n no existe: {dir}", "reportSavedTo": "Informe de uso guardado en: {reportPath}", "sourceDirectoryDoesNotExist": "El directorio de origen no existe: {dir}", "noSourceDirectoryConfigured": "(sin configurar)" }, "validate": { "help_message": "Uso del validador de traducción I18n: nodo i18ntk-validate.js [opciones] Opciones: --source-dir <dir> Directorio de origen para escanear (predeterminado: ./src) --i18n-dir <dir> Directorio I18n (predeterminado: ./src/locales) --output-report Generar informe detallado --output-dir <dir> Directorio de salida para informes (predeterminado: ./reports) --help Mostrar esta ayuda Ejemplos: nodo i18ntk-validate.js --output-report nodo i18ntk-validate.js --source-dir=./app --i18n-dir=./locales nodo i18ntk-validate.js --output-dir=./analysis --output-report", "title": "🔍 Validador de traducción I18n", "message": "Iniciando proceso de validación...", "sourceDirectory": "📁 Directorio de fuentes: {dir}", "sourceLanguage": "🌍 Idioma de origen: {sourceLanguage}", "strictMode": "⚙️ Modo estricto: {mode}", "noTargetLanguages": "No hay idiomas de destino configurados; omitiendo la validación del objetivo. Agregue idiomas a través de \"i18ntk init --languages=de,fr\".", "validatingLanguages": "🌍 Idiomas de validación: {langs}", "validatingLanguage": "🔍 Idioma de validación: {lang}", "filesCount": "📄 Archivos: {count}", "keysCount": "🔑 Claves: {count}", "missingFilesCount": "📁 Archivos faltantes: {count}", "syntaxErrorsCount": "❌ Errores de sintaxis: {count}", "translationPercentage": "🎯 Traducción: {percentage}% ({translated}/{total} llaves)", "validationSummary": "📊 RESUMEN DE VALIDACIÓN", "validation_failed": "❌ La validación falló: {error}", "totalErrors": "❌ Errores totales: {count}", "totalWarnings": "⚠️ Advertencias totales: {count}", "errorsSection": "❌ ERRORES", "warningsSection": "⚠️ ADVERTENCIAS", "recommendationsSection": "💡 RECOMENDACIONES", "fixErrorsFirst": "1. Primero solucione todos los errores", "resolveMissingFilesAndSyntaxErrors": "1. Resolver archivos faltantes y errores de sintaxis", "fixStructuralInconsistencies": "2. Solucionar inconsistencias estructurales", "completeMissingTranslations": "3. Completa las traducciones que faltan", "rerunValidation": "4. Vuelva a ejecutar la validación para verificar las correcciones.", "addressWarnings": "Abordar las advertencias para mejorar la calidad.", "reviewWarnings": "Revisar las advertencias y corregirlas cuando corresponda", "considerRunningWithStrict": "2. Considere ejecutar con el indicador --strict para una validación más estricta", "allValidationsPassed": "🎉 ¡Todas las validaciones pasaron!", "considerRunningUsageAnalysis": "Considere ejecutar un análisis de uso: nodo i18ntk-usage.js", "deletedOldReport": "🗑️ Informe de validación antiguo eliminado", "sourceDir": "📁 Directorio de fuentes: {sourceDir}", "i18nDir": "🌐 Directorio I18n: {i18nDir}", "loadingTranslationFiles": "📋 Cargando archivos de traducción...", "foundTranslationFilesCount": "✅ Encontrado {count} archivos de traducción", "analyzingTranslations": "🔍Analizando traducciones...", "validationCompletedSuccessfully": "🎉 ¡La validación se completó con éxito!", "validationErrorsFound": "⚠️ Errores de validación encontrados: {count}", "validationWarningsFound": "⚠️ Advertencias de validación encontradas: {count}", "validationPassed": "✅ Validación aprobada sin errores", "validationFailed": "La validación falló: {error}", "startingValidationProcess": "🔍Iniciando proceso de validación...", "validationProcessCompletedSuccessfully": "✅ Proceso de validación completado con éxito", "stackTrace": "Seguimiento de pila: {stack}", "authenticationFailed": "❌ Error de autenticación. Acceso denegado.", "fatalValidationError": "❌ Error fatal de validación: {error}", "configAccess": "Accediendo a la configuración para su validación", "configValidated": "Configuración validada exitosamente", "configError": "Error de configuración: {error}", "validatorInit": "Inicializando el validador I18n", "validatorInitialized": "Validador I18n inicializado exitosamente", "validatorInitError": "Error de inicialización del validador: {error}", "argsParsing": "Analizando argumentos de línea de comando", "argsParsed": "Argumentos de la línea de comando analizados correctamente", "argsParseError": "Error de análisis de argumentos: {error}", "languagesScan": "Escaneando idiomas disponibles", "languagesFound": "Encontró {count} idiomas", "languagesScanError": "Error de escaneo de idioma: {error}", "filesScan": "Encontró {count} archivos en {language}", "filesScanError": "Error de escaneo de archivos: {error}", "jsonValidated": "Sintaxis JSON validada: {filePath}", "jsonValidationError": "Error de validación JSON: {error}", "languageValidation": "Idioma de validación: {language}", "languageValidationError": "Error de validación de idioma: {error}", "fileDeleted": "Archivo eliminado", "runStarted": "Iniciando ejecución de validación", "runCompleted": "La ejecución de validación se completó con éxito", "runError": "La ejecución de validación falló: {error}", "scriptExecution": "Ejecución de script", "validationCompleted": "Validación completada", "validationError": "Error de validación: {error}", "separator": "━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━", "languageHeader": "🌐 Idioma: {language}", "validationResults": "📊 Resultados de la validación", "noErrors": "✅ No se encontraron errores", "noWarnings": "✅ No se encontraron advertencias", "summaryHeader": "📋 RESUMEN GENERAL", "progressIndicator": "⏳ Procesamiento...", "completedIndicator": "✅ Completado", "errorIndicator": "❌Error", "warningIndicator": "⚠️ Advertencia", "infoIndicator": "ℹ️ Información", "sourceDirNotConfigured": "Directorio de origen no configurado", "sourceLanguageNotConfigured": "Idioma de origen no configurado", "translationFunctionNotInitialized": "La función de traducción no se inicializó correctamente", "sourceLanguageDirectoryNotFound": "Directorio del idioma de origen 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": "Se detectaron rutas de directorio no válidas", "invalidSampleFilePath": "Ruta de archivo de muestra no válida", "failedToCreat