Adds a contextual Help button on each detail page, right of the title. Clicking it opens a Streamlit popover with a one-shot how-to: when to use, numbered steps, before→after examples, and an optional one-line tip. Designed to be scannable — no paragraph prose. Implementation: - New ``render_tool_header(tool_id)`` helper in components replaces the bare ``st.title(...) + st.caption(...)`` block on each of the 11 tool pages. Title in the wide column, popover in a narrow right column; caption sits on its own line beneath. - Help content is one markdown blob per tool stored in i18n under ``tools.<id>.help_md`` (en + es). Editors can tweak copy without touching Python. - ``help.button_label`` and ``help.missing_body`` keys added to both packs for the popover trigger and the empty-tool fallback. All 11 tool pages now use the same header pattern — including the PDF Extractor and Reconciler which previously had hardcoded title/ caption pairs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
222 lines
18 KiB
JSON
222 lines
18 KiB
JSON
{
|
||
"chrome": {
|
||
"language_label": "Idioma",
|
||
"footer": "Se ejecuta localmente. Tus datos nunca salen de este equipo. | DataTools v3.0"
|
||
},
|
||
"home": {
|
||
"page_title": "UNALOGIX DataTools",
|
||
"title": "UNALOGIX DataTools",
|
||
"caption": "Limpia. Normaliza. Transforma.",
|
||
"privacy_pill": "Se ejecuta 100% en local",
|
||
"findings_badge_one": "{n} hallazgo",
|
||
"findings_badge_other": "{n} hallazgos"
|
||
},
|
||
"status": {
|
||
"ready": "Listo",
|
||
"coming_soon": "Próximamente"
|
||
},
|
||
"help": {
|
||
"button_label": "Ayuda",
|
||
"missing_body": "Aún no hay ayuda para esta herramienta."
|
||
},
|
||
"upload": {
|
||
"heading": "Importa uno o más archivos para empezar",
|
||
"intro": "Opcional: analiza un archivo para detectar problemas de calidad de datos y ver qué herramientas pueden corregir cada uno. Sáltalo si ya sabes lo que necesitas.",
|
||
"limits": "**Hasta 1,5 GB.** Formatos: CSV, TSV, XLSX, XLS. Delimitadores detectados automáticamente: coma, tabulador, punto y coma, barra vertical. Codificaciones detectadas automáticamente: UTF-8 (con/sin BOM), UTF-16, cp1252, Latin-1/9, cp1250, ISO-8859-2, cp1251, KOI8-R, Mac Roman, Shift_JIS, GB18030, Big5, EUC-KR — y se pueden sustituir desde la página Revisar.",
|
||
"uploader_label": "Importa un archivo CSV o Excel",
|
||
"uploader_help": "Hasta 1,5 GB. Delimitadores coma / tabulador / punto y coma / barra vertical detectados automáticamente. Codificación detectada automáticamente, con opción de sustituirla en la página Revisar.",
|
||
"run_button": "Ejecutar análisis",
|
||
"skip_button": "Omitir",
|
||
"scanning": "Analizando…",
|
||
"skipped_notice": "Análisis omitido. Abre cualquier herramienta de abajo para empezar a trabajar.",
|
||
"using_session_file": "Usando **{name}** de la pantalla de importación.",
|
||
"use_different_file": "Usar otro archivo",
|
||
"switch_back": "Volver al archivo de la pantalla de importación",
|
||
"pickup_caption": "Hasta 1,5 GB. Delimitadores detectados automáticamente: coma, tabulador, punto y coma, barra vertical. Codificación detectada automáticamente (UTF-8 / UTF-16 / cp1252 / familia Latin-1 / cp1250 / cp1251 / KOI8-R / Mac Roman / Shift_JIS / GB18030 / Big5 / EUC-KR), con opción de sustituirla en la página Revisar.",
|
||
"intro_multi": "Suelta archivos abajo. Cada uno se analiza localmente — nada sale de este equipo.",
|
||
"uploader_label_multi": "Importa archivos CSV, TSV o Excel",
|
||
"clear_results": "Borrar resultados",
|
||
"empty_state": "Importa uno o más archivos para empezar. Tus datos nunca salen de este equipo."
|
||
},
|
||
"findings": {
|
||
"header": "Problemas detectados",
|
||
"none": "No se detectaron problemas. Abre cualquier herramienta de abajo para empezar a trabajar.",
|
||
"severity_summary_segment": "{icon} {n} {severity}",
|
||
"tool_section_label": "{tool} — {n} hallazgo(s)",
|
||
"other_section_label": "Otros / a nivel de archivo — {n} hallazgo(s)",
|
||
"open_tool": "Abrir {tool} →",
|
||
"untargeted_label": "Informativo"
|
||
},
|
||
"gate": {
|
||
"warning": "**{name}** debe pasar la verificación de normalización CSV antes de poder usar esta herramienta. Abre la página Revisar para aplicar las correcciones recomendadas por el analizador.",
|
||
"default_name": "el archivo importado",
|
||
"open_review": "Ir a Revisar y Normalizar"
|
||
},
|
||
"quit": {
|
||
"button": "Cerrar app",
|
||
"shutting_down": "Cerrando… ya puedes cerrar esta ventana.",
|
||
"farewell_title": "DataTools se ha cerrado",
|
||
"farewell_subtitle": "Ya puedes cerrar esta ventana.",
|
||
"close_window_button": "Cerrar esta ventana",
|
||
"close_hint": "Los navegadores no permiten que JavaScript cierre una pestaña que tú abriste — tampoco pueden enviar Ctrl+W ni Alt+F4 (esas combinaciones las intercepta el SO, no la página). Ejecuta DataTools con `python -m src.gui` para obtener una ventana Chrome/Edge --app que sí se cierra. Mientras tanto, esta pestaña pasará a una página en blanco en un momento — ciérrala con Ctrl+W (o ⌘W en Mac)."
|
||
},
|
||
"close_page": {
|
||
"page_title": "DataTools — Cerrar",
|
||
"title": "Cerrar DataTools",
|
||
"caption": "Detén la aplicación local y libera la terminal.",
|
||
"body": "Al pulsar el botón de abajo se cerrará el servidor de DataTools. Cualquier trabajo sin guardar en otras herramientas se perderá. Una vez cerrada la app, puedes cerrar esta ventana.",
|
||
"button": "Cerrar la app"
|
||
},
|
||
"activation": {
|
||
"page_title": "DataTools — Activar",
|
||
"title": "Activar DataTools",
|
||
"intro": "DataTools debe activarse antes de desbloquear cualquier herramienta. Introduce el nombre y correo asociados a tu compra, y luego pega el código de licencia del correo de entrega.",
|
||
"name_label": "Nombre completo",
|
||
"name_help": "Debe coincidir con el nombre en el recibo de compra.",
|
||
"email_label": "Correo electrónico",
|
||
"email_help": "Debe coincidir con el correo del recibo de compra.",
|
||
"blob_label": "Código de licencia",
|
||
"blob_help": "Empieza con `DTLIC1:` — pega la cadena completa.",
|
||
"activate_button": "Activar",
|
||
"renew_button": "Aplicar renovación",
|
||
"or_separator": "— o —",
|
||
"success": "¡Activado! Bienvenido, {name}. Tu licencia es válida hasta el {expires}.",
|
||
"renewed": "Licencia renovada. Nueva fecha de caducidad: {expires}.",
|
||
"errors_heading": "Problema al activar",
|
||
"deactivate_button": "Desactivar este dispositivo",
|
||
"deactivate_help": "Elimina el archivo de licencia local. Tendrás que volver a pegar tu código para reactivarla."
|
||
},
|
||
"license": {
|
||
"status_active": "{tier} · {days} días restantes",
|
||
"status_trial": "Prueba · {days} días restantes",
|
||
"status_expired": "Caducada",
|
||
"status_not_activated": "Sin activar",
|
||
"status_invalid": "Licencia inválida",
|
||
"renewal_warning_30": "⚠️ La licencia caduca en {days} días. Renueva pronto para evitar interrupciones.",
|
||
"renewal_warning_expired": "🛑 La licencia caducó el {date}. Renuévala para seguir usando DataTools.",
|
||
"tier_trial": "Prueba",
|
||
"tier_lite": "Lite",
|
||
"tier_core": "Core",
|
||
"tier_pro": "Pro",
|
||
"tier_enterprise": "Enterprise",
|
||
"registered_to": "Registrado a nombre de {name} · {email}",
|
||
"expires_on": "Caduca el {date}",
|
||
"issued_on": "Emitida el {date}",
|
||
"view_details": "Detalles de la licencia",
|
||
"feature_locked_title": "🔒 Esta herramienta no está incluida en tu licencia {tier}",
|
||
"feature_locked_body": "Tu licencia actual incluye: {features}. Actualiza para acceder a esta herramienta.",
|
||
"upgrade_link": "Gestionar licencia",
|
||
"status_locked": "Bloqueado"
|
||
},
|
||
"tools": {
|
||
"01_deduplicator": {
|
||
"name": "Buscar duplicados",
|
||
"description": "Encuentra filas que se repiten — exactas y similares — y elimina las extras.",
|
||
"page_title": "Buscar duplicados",
|
||
"page_caption": "Encuentra filas que se repiten, conserva una y elimina las extras.",
|
||
"help_md": "**Cuándo usarlo**\n- Listas de clientes o contactos\n- Listas de correo de varias fuentes\n- Catálogos de productos que pueden solaparse\n\n**Pasos**\n1. Sube tu archivo\n2. Elige la(s) columna(s) que identifican una fila (email, teléfono, nombre+CP)\n3. Elige coincidencia **Exacta** o **Similar**\n4. Elige qué fila conservar (más reciente, más larga, primera)\n5. Previsualiza y exporta\n\n**Ejemplos**\n- `John Smith` + `JOHN SMITH` → misma persona\n- `jane@co.com` + `jane@co.com ` → mismo email (espacio al final)\n- `555-1234` + `(555) 1234` → mismo teléfono\n\n**Consejo** Empieza con Exacta; añade Similar si sospechas erratas."
|
||
},
|
||
"02_text_cleaner": {
|
||
"name": "Limpiar texto",
|
||
"description": "Quita espacios extra y caracteres raros que deja el copiar y pegar.",
|
||
"page_title": "Limpiar texto",
|
||
"page_caption": "Quita espacios extra y caracteres raros.",
|
||
"help_md": "**Cuándo usarlo**\n- Texto copiado de páginas web, PDFs o sistemas antiguos\n- Archivos con espaciado inconsistente\n- Datos con caracteres ocultos o especiales\n\n**Pasos**\n1. Sube tu archivo\n2. Elige las columnas de texto a limpiar\n3. Elige opciones: recortar espacios, eliminar caracteres invisibles, normalizar comillas\n4. Previsualiza los cambios\n5. Exporta\n\n**Ejemplos**\n- ` hola mundo ` → `hola mundo`\n- `“comillas tipográficas”` → `\"comillas normales\"`\n- `datoconoculto` → `datoconoculto`\n\n**Consejo** Siempre previsualiza — los cambios pueden afectar pasos posteriores como duplicados."
|
||
},
|
||
"03_format_standardizer": {
|
||
"name": "Estandarizar formatos",
|
||
"description": "Haz que fechas, teléfonos, monedas, nombres y direcciones se vean iguales en todo el archivo.",
|
||
"page_title": "Estandarizar formatos",
|
||
"page_caption": "Haz que fechas, teléfonos, monedas y nombres se vean iguales en todo el archivo.",
|
||
"help_md": "**Cuándo usarlo**\n- Datos de varias fuentes con fechas/teléfonos en formatos distintos\n- Antes de enviar a un sistema que exige un formato\n- Preparando datos para análisis o gráficos\n\n**Pasos**\n1. Sube tu archivo\n2. Elige una columna (fecha, teléfono, moneda, etc.)\n3. Elige el formato destino\n4. Previsualiza\n5. Repite con otras columnas y exporta\n\n**Ejemplos**\n- `5 Ene 2025` / `01/05/2025` / `5-Ene-25` → `2025-01-05`\n- `(555) 123-4567` / `555.123.4567` → `+1 555-123-4567`\n- `$1.234,50` / `1234.5 USD` → `1234.50`\n\n**Consejo** Trabaja varias columnas en una sesión — cada una recuerda su formato."
|
||
},
|
||
"04_missing_handler": {
|
||
"name": "Corregir valores faltantes",
|
||
"description": "Encuentra celdas vacías (incluso escritas como «N/A» o «?») y rellénalas o elimínalas.",
|
||
"page_title": "Corregir valores faltantes",
|
||
"page_caption": "Encuentra celdas vacías (incluso ocultas) y rellénalas o elimínalas.",
|
||
"help_md": "**Cuándo usarlo**\n- Hojas con huecos\n- Archivos donde alguien escribió `N/A` o `-` en vez de dejar la celda vacía\n- Antes de importar a un sistema que rechaza celdas vacías\n\n**Pasos**\n1. Sube tu archivo\n2. Revisa qué columnas tienen celdas vacías\n3. Elige una estrategia por columna: **rellenar**, **eliminar la fila** o **dejar igual**\n4. Para números, elige el valor: media, mediana, cero o uno propio\n5. Previsualiza y exporta\n\n**Ejemplos**\n- `N/A`, `-`, ` ` → tratados como vacíos\n- Salario vacío → relleno con la media de la columna\n- Fila sin email → eliminada\n\n**Consejo** No rellenes el identificador (email, ID) — mejor elimina la fila."
|
||
},
|
||
"05_column_mapper": {
|
||
"name": "Mapear columnas",
|
||
"description": "Renombra columnas, cambia su orden y define cada una como texto, número o fecha.",
|
||
"page_title": "Mapear columnas",
|
||
"page_caption": "Renombra columnas, cambia su orden y define cada una como texto, número o fecha.",
|
||
"help_md": "**Cuándo usarlo**\n- Combinando archivos de proveedores con nombres de columna distintos\n- Forzando el esquema que tu sistema espera\n- Limpiando exportes con columnas raras o de más\n\n**Pasos**\n1. Sube tu archivo\n2. Empareja cada columna entrante con tu nombre estándar\n3. Define el tipo de cada columna: texto, número o fecha\n4. Reordena o elimina columnas\n5. Exporta con la nueva disposición\n\n**Ejemplos**\n- `cust_email` → `Email Cliente`\n- `amt` → `Importe` (definido como número)\n- `notes_internal` → eliminar\n\n**Consejo** Guarda el mapeo si recibirás el mismo formato el próximo mes."
|
||
},
|
||
"06_outlier_detector": {
|
||
"name": "Detectar valores atípicos",
|
||
"description": "Detecta valores que parecen incorrectos — demasiado altos, demasiado bajos o fuera de regla.",
|
||
"page_title": "Detectar valores atípicos",
|
||
"page_caption": "Detecta valores que parecen incorrectos — demasiado altos, bajos o fuera de regla.",
|
||
"help_md": "**Cuándo usarlo**\n- Detectar erratas, fraude o imports mal hechos en datos numéricos\n- Limpiar datos de sensores o transacciones\n- Antes de reportar números a dirección\n\n**Pasos**\n1. Sube tu archivo\n2. Elige la columna numérica a revisar\n3. Define un rango normal (o usa auto-detección)\n4. Revisa las filas marcadas\n5. Elige: conservar, eliminar o limitar al borde\n\n**Ejemplos**\n- Columna de salarios con una fila de `$9.999.999` → marcada\n- Columna de edad con `250` → marcada\n- Regla: `precio debe ser > 0` → marca los negativos\n\n**Consejo** Revisa a mano las filas marcadas — a veces un atípico real es el dato más importante."
|
||
},
|
||
"07_multi_file_merger": {
|
||
"name": "Combinar archivos",
|
||
"description": "Combina varios archivos CSV o Excel en uno — aunque sus columnas no coincidan.",
|
||
"page_title": "Combinar archivos",
|
||
"page_caption": "Combina varios CSV o Excel en uno — aunque las columnas no coincidan.",
|
||
"help_md": "**Cuándo usarlo**\n- Informes mensuales a lo largo del año\n- Exportes de varias tiendas o sucursales\n- Datos de varios sistemas que deben quedar en un archivo\n\n**Pasos**\n1. Sube dos o más archivos\n2. Confirma las coincidencias de columna (auto-detectadas; modifica si hace falta)\n3. Decide cómo tratar columnas que falten (omitir, vacío, valor por defecto)\n4. Previsualiza el resultado combinado\n5. Exporta el archivo único\n\n**Ejemplos**\n- `Enero.csv` + `Febrero.csv` → `2025.csv`\n- `NY-store.xlsx` + `LA-store.xlsx` → `todas-las-tiendas.csv`\n- Archivo A tiene `Email`, archivo B tiene `email_addr` → emparejados automáticamente\n\n**Consejo** Añade una columna `origen` para saber de qué archivo viene cada fila."
|
||
},
|
||
"08_validator_reporter": {
|
||
"name": "Verificación de calidad",
|
||
"description": "Comprueba tu archivo según reglas que tú definas y exporta un informe PDF o Excel.",
|
||
"page_title": "Verificación de calidad",
|
||
"page_caption": "Comprueba tu archivo según reglas y exporta un informe PDF o Excel.",
|
||
"help_md": "**Cuándo usarlo**\n- Antes de entregar datos a un cliente o socio\n- Antes de un import estricto a otro sistema\n- Auditorías rutinarias de calidad\n\n**Pasos**\n1. Sube tu archivo\n2. Elige las reglas (columnas requeridas, emails válidos, sin duplicados)\n3. Ejecuta la comprobación\n4. Revisa la puntuación y los hallazgos\n5. Exporta el informe como PDF o Excel\n\n**Ejemplos**\n- Regla: `email debe parecerse a un email` → 12 filas fallan\n- Regla: `importe debe ser > 0` → 3 filas fallan\n- Regla: `sin ID de cliente duplicados` → 5 duplicados encontrados\n\n**Consejo** Ejecuta esto al final, y guarda el PDF como prueba de calidad."
|
||
},
|
||
"09_pipeline_runner": {
|
||
"name": "Flujos automatizados",
|
||
"description": "Ejecuta varias herramientas seguidas — guarda los pasos una vez y reutilízalos.",
|
||
"page_title": "Flujos automatizados",
|
||
"page_caption": "Ejecuta varias herramientas seguidas — guarda los pasos y reutilízalos.",
|
||
"help_md": "**Cuándo usarlo**\n- Una limpieza que haces cada semana o mes\n- Procesos de varios pasos que repites\n- Cuando entrenas a un compañero en tu rutina de datos\n\n**Pasos**\n1. Elige las herramientas a ejecutar, en orden\n2. Configura cada paso\n3. Guarda el flujo como archivo JSON\n4. La próxima vez, carga el flujo y sube un archivo nuevo\n5. Obtén la salida limpia con un clic\n\n**Ejemplos**\n- `Limpiar texto` → `Estandarizar formatos` → `Buscar duplicados` → exportar\n- Guardado como `limpieza-clientes-semanal.json`\n- Compartido con un compañero para obtener el mismo resultado\n\n**Consejo** Empieza con dos o tres herramientas. Siempre puedes editar y añadir más."
|
||
},
|
||
"10_pdf_extractor": {
|
||
"name": "PDF a CSV",
|
||
"description": "Extrae transacciones de extractos bancarios en PDF a un archivo CSV limpio.",
|
||
"page_title": "PDF a CSV",
|
||
"page_caption": "Extrae transacciones de extractos bancarios en PDF a un archivo CSV limpio.",
|
||
"help_md": "**Cuándo usarlo**\n- Extractos bancarios o de tarjeta\n- Facturas de proveedor con tablas\n- Cualquier PDF con tabla de transacciones\n\n**Pasos**\n1. Sube un PDF\n2. Dibuja un recuadro alrededor de la tabla (una vez por fuente)\n3. Guarda la plantilla (p. ej. `Chase Cuenta`)\n4. Reutiliza la plantilla en los siguientes extractos del mismo tipo\n5. Exporta el CSV\n\n**Ejemplos**\n- Extracto Chase de marzo → 87 transacciones extraídas\n- La misma plantilla se ejecuta sola en abril, mayo, junio\n- Modo lote: procesa 12 meses de una vez\n\n**Consejo** Las plantillas son por fuente (Chase, Wells Fargo…). Crea una por cada banco que recibas con regularidad."
|
||
},
|
||
"11_reconciler": {
|
||
"name": "Reconciliar dos archivos",
|
||
"description": "Compara dos listas de transacciones (p. ej. banco vs. libro mayor) y señala lo que no coincide.",
|
||
"page_title": "Reconciliar dos archivos",
|
||
"page_caption": "Compara dos listas de transacciones (p. ej. banco vs. libro mayor) y señala lo que no coincide.",
|
||
"help_md": "**Cuándo usarlo**\n- Cuadrar el extracto del banco con tus libros\n- Facturas de proveedor vs. pagos enviados\n- Recepciones de inventario vs. pedidos realizados\n\n**Pasos**\n1. Sube ambos archivos (p. ej. exporte del banco + exporte contable)\n2. Elige las columnas para emparejar (fecha, importe, referencia)\n3. Define tolerancias (p. ej. fecha ±2 días, importe exacto)\n4. Revisa cuatro grupos: **emparejados**, **solo en izquierda**, **solo en derecha**, **necesita revisión**\n5. Exporta los resultados\n\n**Ejemplos**\n- Banco `2025-03-15 $99.50` ↔ Libros `2025-03-16 $99.50` → emparejado\n- Cargo bancario sin entrada en libros → solo en izquierda\n- Mismo importe el mismo día dos veces → marcado para revisión\n\n**Consejo** Estrecha la tolerancia de fecha cuando confíes en el emparejamiento — menos casos ambiguos."
|
||
}
|
||
},
|
||
"nav": {
|
||
"section_review": "Revisión de datos",
|
||
"section_analysis": "Análisis",
|
||
"section_cleaners": "Limpiadores de datos",
|
||
"section_transformations": "Transformaciones",
|
||
"section_automations": "Automatizaciones",
|
||
"review_page_title": "Revisión",
|
||
"home_page_title": "Inicio",
|
||
"file_analysis_title": "Análisis de archivo",
|
||
"section_account": "Cuenta",
|
||
"activate_title": "Activar",
|
||
"close_title": "Cerrar",
|
||
"section_close": "Cerrar",
|
||
"back_to_home": "← Volver al inicio"
|
||
},
|
||
"footer": {
|
||
"close": "Cerrar",
|
||
"help": "Ayuda",
|
||
"help_title": "DataTools",
|
||
"help_version": "Versión {version}",
|
||
"help_support": "Soporte: {email}",
|
||
"help_license_label": "Licencia",
|
||
"help_license_inactive": "No activada",
|
||
"help_license_active": "{name}",
|
||
"help_license_expires": "Caduca {date} ({days} días)",
|
||
"help_activate_link": "Activar ahora →",
|
||
"help_manage_link": "Gestionar licencia →",
|
||
"help_logs_label": "Archivo de registro",
|
||
"help_logs_link": "Ver todos los registros →",
|
||
"help_dismiss": "Cerrar"
|
||
}
|
||
}
|