{
  "app": {
    "simpleChat": "Chat simple de IA",
    "gatewayConfig": "Configuración del gateway",
    "config": "Configuración",
    "backToChat": "Volver al chat",
    "title": "Corvus Dashboard",
    "subtitle": "Configuración segura del gateway"
  },
  "sections": {
    "auth": "Onboarding del dashboard",
    "core": "Configuración base",
    "observability": "Observabilidad",
    "runtime": "Runtime",
    "autonomy": "Autonomía",
    "scheduler": "Scheduler",
    "gateway": "Gateway",
    "webhook": "Webhook",
    "webSearch": "Búsqueda web",
    "browser": "Navegador",
    "composio": "Composio",
    "memory": "Memoria",
    "updates": "Actualizaciones",
    "channels": "Canales",
    "schedulerStatus": "Estado del Scheduler",
    "health": "Estado del sistema",
    "cost": "Seguimiento de costos",
    "mcp": "Servidores MCP",
    "tunnel": "Túnel",
    "reliability": "Fiabilidad",
    "heartbeat": "Heartbeat"
  },
  "health": {
    "loading": "Cargando estado...",
    "uptime": "Tiempo activo",
    "restarts": "Reinicios"
  },
  "auth": {
    "baseUrl": "URL base del gateway",
    "pairingCode": "Código de emparejamiento",
    "bearerToken": "Token bearer",
    "connect": "Conectar al gateway",
    "pair": "Emparejar este dashboard",
    "pairSuccess": "Emparejamiento completado. Token bearer cargado.",
    "connected": "Dashboard listo para tareas de operación.",
    "loadError": "No se pudo cargar la configuración admin.",
    "networkError": "No se pudo conectar con el gateway. Verifica red, URL y que el servicio esté activo.",
    "emptyWebhookSecret": "El webhook secret no puede estar vacío. Usa 'Limpiar' si deseas removerlo.",
    "unauthorized": "No autorizado. Haz pairing y vuelve a intentar.",
    "pairingInvalid": "El código de emparejamiento es inválido. Obtén un código nuevo y vuelve a intentarlo.",
    "pairingExpired": "El código de emparejamiento expiró. Genera uno nuevo y vuelve a emparejar.",
    "credentialMissing": "Se requiere un token bearer. Empareja este dashboard para continuar.",
    "credentialInvalid": "El token bearer guardado fue rechazado. Empareja de nuevo para recuperar el acceso.",
    "quickPairValidating": "Enlace detectado, validando...",
    "quickPairConnecting": "Conectando al gateway...",
    "quickPairFailed": "Falló el emparejamiento rápido, revisa la URL o el código."
  },
  "onboarding": {
    "intro": "Sigue el flujo compartido de onboarding: confirma el runtime, empareja este dashboard, conecta al gateway y termina en estado listo para operar.",
    "stepStatus": {
      "pending": "Pendiente",
      "current": "Actual",
      "complete": "Completo",
      "blocked": "Bloqueado"
    },
    "steps": {
      "runtime": {
        "title": "Runtime disponible",
        "description": "Alcanza un runtime o gateway local de Corvus utilizable para este dashboard."
      },
      "trust": {
        "title": "Confiar en esta superficie",
        "description": "Intercambia un código de emparejamiento una sola vez para obtener el token bearer de este dashboard."
      },
      "connect": {
        "title": "Conectar al gateway",
        "description": "Valida el transporte admin con el token bearer actual y la URL del gateway."
      },
      "ready": {
        "title": "Listo para tareas de operación",
        "description": "Carga la configuración y continúa con el trabajo de gestión desde el dashboard."
      }
    },
    "ready": {
      "title": "Listo para operar",
      "description": "El dashboard completó el emparejamiento y la conexión al gateway. Ahora puedes gestionar Corvus desde esta superficie."
    },
    "recovery": {
      "runtime_unavailable": {
        "title": "Runtime no disponible",
        "description": "El dashboard no pudo alcanzar el runtime local de Corvus. Inicia el runtime y vuelve a intentar el paso de conexión."
      },
      "transport_unavailable": {
        "title": "Transporte de la superficie no disponible",
        "description": "El dashboard encontró una falla inesperada del transporte. Verifica la URL del gateway y reintenta de forma segura."
      },
      "trust_input_invalid": {
        "title": "Código de emparejamiento inválido",
        "description": "El código de emparejamiento fue rechazado. Solicita un código válido al runtime y vuelve a emparejar."
      },
      "trust_input_expired": {
        "title": "Código de emparejamiento expirado",
        "description": "El código de emparejamiento ya no es válido. Genera uno nuevo y repite el paso de confianza."
      },
      "credential_missing": {
        "title": "Falta el token bearer",
        "description": "Este dashboard todavía no está autenticado. Empareja esta superficie para recibir un token bearer antes de conectar."
      },
      "credential_invalid": {
        "title": "Token bearer inválido o revocado",
        "description": "El token bearer guardado ya no funciona. El dashboard limpió el token obsoleto; vuelve a emparejar para continuar."
      },
      "paired_but_not_connected": {
        "title": "Emparejado pero sin conexión",
        "description": "La confianza ya existe, pero el dashboard no pudo completar la verificación autenticada del gateway. Reintenta el paso de conexión."
      }
    }
  },
  "chatOnboarding": {
    "intro": "Confirma el runtime local, empareja esta superficie de chat, conecta al gateway y luego crea o reanuda una sesión de chat.",
    "gatewayReady": "Gateway listo. Crea o reanuda una sesión de chat para continuar.",
    "loadError": "No se pudo alcanzar el gateway local.",
    "transportDisconnected": "El emparejamiento se completó, pero la superficie de chat no pudo mantener su conexión con el gateway.",
    "steps": {
      "runtime": {
        "title": "Runtime disponible",
        "description": "Alcanza un runtime o gateway local de Corvus utilizable para esta superficie de chat."
      },
      "trust": {
        "title": "Confiar en esta superficie",
        "description": "Intercambia un código de emparejamiento una sola vez para obtener el token bearer de esta superficie de chat."
      },
      "connect": {
        "title": "Conectar al gateway",
        "description": "Valida el transporte de chat con el token bearer actual y la URL local del gateway."
      },
      "ready": {
        "title": "Listo para iniciar chat",
        "description": "Completa el onboarding HTTP para que esta superficie pueda crear o reanudar una sesión de chat."
      }
    },
    "ready": {
      "title": "Listo para iniciar chat",
      "description": "Esta superficie de chat completó el emparejamiento y la conexión al gateway. Crea o reanuda una sesión para empezar a chatear."
    },
    "session": {
      "title": "Se requiere una sesión",
      "description": "La confianza con el gateway está lista. Crea una nueva sesión o reanuda una existente antes de enviar mensajes."
    },
    "recovery": {
      "runtime_unavailable": {
        "title": "Runtime no disponible",
        "description": "La superficie de chat no pudo alcanzar el runtime local de Corvus. Inicia el runtime y vuelve a intentar el paso de conexión."
      },
      "transport_unavailable": {
        "title": "Transporte de la superficie no disponible",
        "description": "La superficie de chat encontró una falla inesperada del transporte. Verifica la URL local del gateway y reintenta de forma segura."
      },
      "trust_input_invalid": {
        "title": "Código de emparejamiento inválido",
        "description": "El código de emparejamiento fue rechazado. Solicita un código válido al runtime y vuelve a emparejar."
      },
      "trust_input_expired": {
        "title": "Código de emparejamiento expirado",
        "description": "El código de emparejamiento ya no es válido. Genera uno nuevo y repite el paso de confianza."
      },
      "credential_missing": {
        "title": "Falta el token bearer",
        "description": "Esta superficie de chat todavía no está autenticada. Empareja esta superficie para recibir un token bearer antes de conectar."
      },
      "credential_invalid": {
        "title": "Token bearer inválido o revocado",
        "description": "El token bearer guardado ya no funciona. La superficie de chat limpió el token obsoleto; vuelve a emparejar para continuar."
      },
      "paired_but_not_connected": {
        "title": "Emparejado pero sin conexión",
        "description": "La confianza ya existe, pero la superficie de chat no pudo completar su verificación del gateway. Reintenta el paso de conexión."
      }
    }
  },
  "form": {
    "baseUrl": "Base URL",
    "baseUrlPlaceholder": "/api",
    "pairingCode": "Código de emparejamiento",
    "pairingCodePlaceholder": "Código de emparejamiento",
    "bearerToken": "Token bearer",
    "bearerTokenPlaceholder": "Token bearer",
    "webhookSecret": "Secreto del webhook",
    "webhookSecretPlaceholder": "Secreto del webhook",
    "save": "Guardar cambios",
    "saveSuccess": "Configuración guardada correctamente.",
    "saveError": "No se pudo guardar la configuración.",
    "pairingInvalidError": "Código de emparejamiento inválido.",
    "pairingRateLimitError": "Demasiados intentos de emparejamiento. Inténtalo más tarde.",
    "pairingMissingTokenError": "No se recibió token de emparejamiento.",
    "timeoutError": "Tiempo de espera agotado",
    "configSubtitle": "Conecta con tu gateway de Corvus",
    "noChanges": "No hay cambios para guardar.",
    "connectBeforeSave": "Conéctate primero al gateway para cargar la configuración actual.",
    "restartRequired": "Estos cambios requieren reiniciar el gateway para aplicar: {fields}",
    "provider": "Provider por defecto",
    "model": "Modelo por defecto",
    "temperature": "Temperatura",
    "memoryBackend": "Backend de memoria",
    "observabilityBackend": "Backend de observabilidad",
    "otelEndpoint": "OTEL endpoint",
    "otelServiceName": "OTEL service name",
    "runtimeKind": "Runtime kind",
    "autonomyLevel": "Nivel de autonomía",
    "workspaceOnly": "Sólo workspace",
    "maxActionsPerHour": "Máx acciones por hora",
    "maxCostPerDayCents": "Máx costo por día (centavos)",
    "schedulerEnabled": "Scheduler habilitado",
    "schedulerMaxTasks": "Scheduler max tasks",
    "schedulerMaxConcurrent": "Scheduler max concurrent",
    "gatewayPort": "Gateway port",
    "gatewayHost": "Gateway host",
    "requirePairing": "Requerir pairing",
    "allowPublicBind": "Permitir bind público",
    "webhookPort": "Webhook port",
    "webhookSecretMode": "Webhook secret",
    "webhookSecretValue": "Nuevo webhook secret",
    "secretUnchanged": "Sin cambios",
    "secretReplace": "Reemplazar",
    "secretClear": "Limpiar"
  },
  "general": {
    "apiUrl": "API URL"
  },
  "gateway": {
    "pair_rate_limit_per_min": "Límite de emparejamiento/min",
    "webhook_rate_limit_per_min": "Límite de webhook/min"
  },
  "security": {
    "identity_format": "Formato de identidad",
    "identity_aieos_path": "Ruta AIEOS de identidad",
    "requireApprovalMediumRisk": "Requerir aprobación para riesgo medio",
    "blockHighRiskCommands": "Bloquear comandos de alto riesgo",
    "autoApprove": "Comandos auto-aprobados (separados por coma)",
    "alwaysAsk": "Comandos que siempre preguntan (separados por coma)",
    "placeholderCommands": "comando1, comando2"
  },
  "errors": {
    "insecureUrlError": "No se pueden enviar credenciales por HTTP a un host remoto. Usa HTTPS o un host local.",
    "invalidGatewayUrl": "URL de gateway no válida",
    "costNotAvailable": "Datos de costos no disponibles"
  },
  "chat": {
    "welcome": "Hola, soy {modelName}. ¿En qué puedo ayudarte?",
    "processing": "Procesando \"{text}\" con {modelName}. Gateway: {gateway}",
    "requestError": "No se pudo obtener respuesta para \"{text}\". Verifica el gateway e inténtalo de nuevo.",
    "unauthorizedError": "No autorizado. Realiza el emparejamiento con /pair y usa el token bearer.",
    "rateLimitError": "Demasiadas solicitudes. Espera un momento e inténtalo de nuevo.",
    "timeoutError": "El gateway tardó demasiado en responder.",
    "streamUnavailable": "El streaming no está disponible. Se usará una solicitud estándar.",
    "emptyResponse": "El gateway no devolvió contenido.",
    "inputPlaceholder": "Escribe un mensaje...",
    "send": "Enviar",
    "newChat": "Nuevo chat",
    "newSession": "Nueva sesión",
    "startSession": "Iniciar nueva sesión",
    "resumeSession": "Reanudar sesión",
    "sessionReady": "Sesión lista.",
    "sessionResumed": "Sesión reanudada.",
    "sessionCleared": "Sesión limpiada.",
    "sessionUnavailable": "Todavía no hay una sesión reanudable. Inicia una nueva sesión.",
    "sessionActive": "Sesión: {sessionId}",
    "connectBeforeChat": "Completa el onboarding del gateway antes de iniciar el chat.",
    "emptyMessageError": "Escribe un mensaje antes de enviarlo.",
    "approve": "Aprobar",
    "reject": "Rechazar",
    "connected": "Conectado",
    "disconnected": "Desconectado",
    "toolApprovalTitle": "La herramienta requiere aprobación",
    "disclaimer": "Corvus Agent puede cometer errores. Verifica la información importante.",
    "memoryRecalled": "Contexto recordado",
    "memoryRecallLabel": "El agente recordó memoria",
    "memoryRecallHint": "Esta respuesta utilizó información de la memoria del agente."
  },
  "session": {
    "history": "Historial",
    "justNow": "Ahora mismo",
    "minutesAgo": "hace {count} minuto | hace {count} minutos",
    "hoursAgo": "hace {count} hora | hace {count} horas",
    "daysAgo": "hace {count} día | hace {count} días",
    "messageCount": "{count} mensaje | {count} mensajes",
    "sidebarLabel": "Historial de sesiones",
    "expand": "Expandir barra lateral",
    "collapse": "Contraer barra lateral",
    "noHistory": "Todavía no hay historial de sesiones"
  },
  "webhook": {
    "enabled": "Habilitado",
    "secretStatus": "Secret actual: {status}",
    "statusConfigured": "configurado",
    "statusNotConfigured": "no configurado",
    "errorFixBeforeSave": "Por favor, corrija el siguiente error antes de guardar."
  },
  "webSearch": {
    "enabled": "Habilitado",
    "provider": "Proveedor",
    "maxResults": "Máx resultados",
    "timeoutSecs": "Tiempo de espera (segundos)",
    "braveApiKeyMode": "Clave API de Brave",
    "braveApiKeyValue": "Nueva clave API de Brave"
  },
  "browser": {
    "computerUseApiKeyMode": "Clave API de Computer Use",
    "computerUseApiKeyValue": "Nueva clave API de Computer Use"
  },
  "composio": {
    "enabled": "Habilitado",
    "entityId": "ID de entidad",
    "apiKeyMode": "Clave API",
    "apiKeyValue": "Nueva clave API"
  },
  "actions": {
    "close": "Cerrar",
    "delete": "Eliminar"
  },
  "nav": {
    "config": "Configuración",
    "sessions": "Sesiones",
    "memory": "Memoria",
    "chat": "Chat"
  },
  "sessions": {
    "detail": "Detalle de la sesión",
    "empty": "No se encontraron sesiones",
    "loading": "Cargando…",
    "colId": "ID de sesión",
    "colStatus": "Estado",
    "colActions": "Acciones",
    "colStarted": "Inició",
    "colMessages": "Mensajes",
    "colLastActivity": "Última actividad",
    "endedAt": "Finalizó",
    "statusActive": "Activa",
    "statusEnded": "Finalizada",
    "filterStatus": "Estado",
    "filterAll": "Todas",
    "sortBy": "Ordenar por",
    "sortLastActivity": "Última actividad",
    "sortStartedAt": "Fecha de inicio",
    "selectSession": "Ver sesión",
    "view": "Ver",
    "memorySummary": "Resumen de memoria",
    "noMemoryEntries": "0 entradas",
    "viewMemory": "Ver entradas de memoria"
  },
  "memory": {
    "cerebroEndpoint": "Endpoint de Cerebro",
    "cerebroTimeoutMs": "Timeout de Cerebro (ms)",
    "cerebroAllowInsecureLoopback": "Permitir loopback inseguro",
    "cerebroAuthTokenMode": "Token de autenticación",
    "cerebroAuthTokenValue": "Nuevo token de autenticación",
    "statsLoading": "Cargando estadísticas…",
    "statTotalEntries": "Entradas totales",
    "statTotalSessions": "Sesiones totales",
    "statActiveSessions": "Sesiones activas",
    "statBackend": "Backend",
    "cerebroConfigured": "Configurado",
    "cerebroNotConfigured": "No configurado",
    "statCerebro": "Cerebro",
    "statByCategory": "Por categoría",
    "kicker": "Memoria local",
    "title": "Explorador de memoria respaldado por SQLite",
    "helper": "La memoria local sigue disponible aunque Cerebro no esté configurado, esté inaccesible o esté parcialmente implementado.",
    "loading": "Cargando entradas de memoria…",
    "empty": "No se encontraron entradas de memoria",
    "colKey": "Clave",
    "colCategory": "Categoría",
    "colTimestamp": "Marca de tiempo",
    "colSessionId": "ID de sesión",
    "colContent": "Contenido",
    "colActions": "Acciones",
    "delete": "Eliminar",
    "confirmDelete": "Eliminar entrada de memoria",
    "confirmDeletePrompt": "¿Seguro que deseas eliminar la entrada de memoria",
    "confirmYes": "Eliminar",
    "confirmNo": "Cancelar",
    "filterCategory": "Categoría",
    "filterAll": "Todas",
    "filterSessionId": "ID de sesión",
    "sessionIdPlaceholder": "Filtrar por sesión…",
    "filterSearch": "Buscar",
    "searchPlaceholder": "Buscar contenido…"
  },
  "pagination": {
    "perPage": "Filas por página",
    "prev": "Anterior",
    "page": "Página",
    "total": "total",
    "next": "Siguiente"
  },
  "scheduler": {
    "loading": "Cargando estado del scheduler...",
    "enabled": "Habilitado",
    "maxTasks": "Tareas máximas",
    "maxConcurrent": "Concurrencia máxima",
    "taskCount": "Tareas activas",
    "notAvailable": "No disponible",
    "yes": "Sí",
    "no": "No"
  },
  "channels": {
    "loading": "Cargando canales...",
    "configured": "Configurado",
    "notConfigured": "No configurado"
  },
  "cost": {
    "loading": "Cargando seguimiento de costos...",
    "enabled": "Habilitado",
    "sessionLimit": "Límite de sesión (USD)",
    "dailyLimit": "Límite diario (USD)",
    "monthlyLimit": "Límite mensual (USD)",
    "warnAtPercent": "Alertar en porcentaje",
    "allowOverride": "Permitir anulación",
    "liveStatus": "Estado en vivo",
    "statusAllowed": "Dentro del presupuesto",
    "statusWarning": "Cerca del límite",
    "statusExceeded": "Presupuesto excedido",
    "periodStable": "estable",
    "sessionSpend": "Gasto de la sesión",
    "dailySpend": "Gasto diario",
    "monthlySpend": "Gasto mensual",
    "requests": "Solicitudes",
    "tokens": "Tokens",
    "sessionBudgetUsage": "Uso del presupuesto de la sesión",
    "dailyBudgetUsage": "Uso del presupuesto diario",
    "monthlyBudgetUsage": "Uso del presupuesto mensual",
    "usageUnavailable": "El uso en vivo no está disponible. Mostrando solo la política guardada.",
    "history": "Historial reciente",
    "actions": "Acciones del operador",
    "grantOverride": "Conceder anulación para la próxima solicitud",
    "resetSession": "Reiniciar totales de sesión",
    "overrideGranted": "Anulación concedida",
    "sessionReset": "Totales de sesión reiniciados",
    "yes": "Sí",
    "no": "No"
  },
  "mcp": {
    "loading": "Cargando servidores MCP...",
    "enabled": "Habilitado",
    "command": "Comando",
    "capabilities": "Capacidades",
    "yes": "Sí",
    "no": "No"
  },
  "tunnel": {
    "loading": "Cargando túnel...",
    "provider": "Proveedor",
    "cloudflareToken": "Token de Cloudflare",
    "tailscaleFunnel": "Funnel de Tailscale",
    "tailscaleHostname": "Hostname de Tailscale",
    "ngrokAuthToken": "Token de autenticación ngrok",
    "ngrokDomain": "Dominio ngrok",
    "customHealthUrl": "URL de salud personalizada",
    "noData": "No hay datos de túnel disponibles.",
    "yes": "Sí",
    "no": "No"
  },
  "reliability": {
    "loading": "Cargando fiabilidad...",
    "providerRetries": "Reintentos del proveedor",
    "providerBackoff": "Backoff del proveedor",
    "fallbackProviders": "Proveedores de respaldo",
    "modelFallbacks": "Fallbacks de modelo",
    "channelInitialBackoff": "Backoff inicial del canal",
    "channelMaxBackoff": "Backoff máximo del canal",
    "schedulerPoll": "Intervalo de sondeo del scheduler",
    "schedulerRetries": "Reintentos del scheduler",
    "none": "Ninguno",
    "unit": {
      "ms": "ms",
      "s": "s"
    }
  },
  "heartbeat": {
    "loading": "Cargando heartbeat...",
    "enabled": "Habilitado",
    "interval": "Intervalo (minutos)",
    "unit": "min",
    "noData": "No hay datos de heartbeat disponibles.",
    "yes": "Sí",
    "no": "No"
  },
  "updates": {
    "currentVersion": "Versión actual",
    "latestVersion": "Última versión",
    "updateAvailable": "Actualización disponible",
    "autoInstallEnabled": "Auto-instalación habilitada",
    "restartPolicy": "Política de reinicio",
    "lastCheckOutcome": "Resultado de última verificación",
    "effectiveInstallMethod": "Método de instalación efectivo",
    "yes": "Sí",
    "no": "No",
    "unknown": "Desconocido",
    "never": "Nunca"
  }
}
