import type { TranslationMap } from "../lib/types.ts";

// Generated by scripts/control-ui-i18n.ts.
export const es: TranslationMap = {
  common: {
    health: "Estado",
    ok: "OK",
    yes: "Sí",
    no: "No",
    active: "Activo",
    loading: "Cargando…",
    refreshing: "Actualizando…",
    online: "En línea",
    offline: "Desconectado",
    connect: "Conectar",
    connected: "Conectado",
    refresh: "Actualizar",
    reload: "Recargar",
    reset: "Restablecer",
    probe: "Probar",
    call: "Llamada",
    confirm: "Confirmar",
    cancel: "Cancelar",
    next: "Siguiente",
    back: "Atrás",
    create: "Crear",
    copy: "Copiar",
    copied: "¡Copiado!",
    copyCode: "Copiar código",
    delete: "Eliminar",
    dismiss: "Descartar",
    unselect: "Deseleccionar",
    enabled: "Habilitado",
    disabled: "Deshabilitado",
    none: "ninguno",
    na: "n/d",
    never: "never",
    configured: "Configurado",
    running: "En ejecución",
    linked: "Vinculado",
    mode: "Modo",
    system: "Sistema",
    light: "Ligero",
    dark: "Oscuro",
    baseUrl: "URL base",
    lastStart: "Último inicio",
    lastProbe: "Última prueba",
    lastInbound: "Última entrada",
    lastConnect: "Última conexión",
    lastMessage: "Último mensaje",
    authAge: "Antigüedad de autenticación",
    credential: "Credencial",
    audience: "Audiencia",
    publicKey: "Clave pública",
    probeOk: "Prueba correcta",
    probeFailed: "Prueba fallida",
    reloadConfig: "Recargar configuración",
    loadConfig: "Cargar configuración",
    loadApprovals: "Cargar aprobaciones",
    settingsSections: "Secciones de configuración",
    version: "Versión",
    docs: "Documentación",
    theme: "Tema",
    colorMode: "Modo de color",
    colorModeOption: "Modo de color: {mode}",
    resources: "Recursos",
    search: "Buscar",
    save: "Guardar",
    saving: "Guardando…",
    saveAndPublish: "Guardar y publicar",
    importing: "Importando…",
    importFromRelays: "Importar desde relays",
    showAdvanced: "Mostrar opciones avanzadas",
    hideAdvanced: "Ocultar opciones avanzadas",
    unsavedChanges: "Tienes cambios sin guardar",
    secondsAgo: "hace {count}s",
    working: "Trabajando…",
    showQr: "Mostrar QR",
    relink: "Volver a vincular",
    waitForScan: "Esperar escaneo",
    logout: "Cerrar sesión",
  },
  channels: {
    health: {
      title: "Estado del canal",
      subtitle: "Instantáneas del estado del canal desde el Gateway.",
      noSnapshotYet: "Aún no hay instantáneas.",
    },
    generic: {
      subtitle: "Estado y configuración del canal.",
    },
    gatewayUrlConfirmation: {
      title: "Cambiar URL del Gateway",
      subtitle: "Esto volverá a conectarse a un servidor Gateway diferente",
      warning:
        "Confirma solo si confías en esta URL. Las URL maliciosas pueden comprometer tu sistema.",
    },
    nostr: {
      profile: "Perfil",
      editProfile: "Editar perfil",
      profilePicture: "Foto de perfil",
      noProfile: "No hay un perfil configurado.",
      noProfileHint: 'Haz clic en "Editar perfil" para agregar tu nombre, biografía y avatar.',
      name: "Nombre",
      displayName: "Nombre para mostrar",
      about: "Acerca de",
      advanced: "Avanzado",
      profilePicturePreview: "Vista previa de la foto de perfil",
      account: "Cuenta",
      username: "Nombre de usuario",
      usernameHelp: "Nombre de usuario corto (p. ej., satoshi)",
      bio: "Biografía",
      bioPlaceholder: "Cuéntale a la gente sobre ti...",
      bioHelp: "Una breve biografía o descripción",
      displayNameHelp: "Tu nombre para mostrar completo",
      avatarUrl: "URL del avatar",
      avatarHelp: "URL HTTPS de tu foto de perfil",
      bannerUrl: "URL del banner",
      bannerHelp: "URL HTTPS de una imagen de banner",
      website: "Sitio web",
      websiteHelp: "Tu sitio web personal",
      nip05Identifier: "Identificador NIP-05",
      nip05Help: "Identificador verificable (p. ej., you@domain.com)",
      lightningAddress: "Dirección Lightning",
      lightningHelp: "Dirección Lightning para propinas (LUD-16)",
    },
  },
  lazyView: {
    loadingTitle: "Cargando panel",
    errorTitle: "No se pudo cargar el panel",
    errorSubtitle:
      "Vuelve a cargar la página para cargar el paquete más reciente de Control UI, o inténtalo de nuevo si falló la solicitud de red.",
    retry: "Reintentar",
    unknownError: "Error desconocido al cargar el módulo.",
  },
  nodes: {
    binding: {
      loadConfigHint: "Carga la configuración para editar las vinculaciones.",
      formModeHint: "Cambia la pestaña Config al modo Form para editar las vinculaciones aquí.",
      execNodeBinding: "Vinculación de nodo exec",
      execNodeBindingSubtitle: "Fija los agentes a un nodo específico cuando uses exec host=node.",
      defaultBinding: "Vinculación predeterminada",
      defaultBindingHint: "Se usa cuando los agentes no reemplazan una vinculación de nodo.",
      node: "Nodo",
    },
  },
  instances: {
    title: "Instancias conectadas",
    subtitle: "Balizas de presencia del Gateway y los clientes.",
    showHosts: "Mostrar hosts e IP",
    hideHosts: "Ocultar hosts e IP",
    toggleHostVisibility: "Alternar visibilidad de hosts",
    noInstances: "Aún no se informó ninguna instancia.",
    lastInput: "Última entrada {time}",
    reason: "Motivo {reason}",
  },
  sessionsView: {
    title: "Sesiones",
    subtitle: "Claves de sesión activas y anulaciones por sesión.",
    store: "Almacén: {path}",
    active: "Activo",
    limit: "Límite",
    filters: "Filtros",
    showFilters: "Mostrar filtros",
    hideFilters: "Ocultar filtros",
    sourceFilters: "Filtros de origen de sesión",
    global: "Global",
    unknown: "Desconocido",
    showArchived: "Mostrar archivadas",
    activeTooltip: "Actualizadas en los últimos {count} minutos.",
    limitTooltip: "Máximo de sesiones para cargar.",
    globalTooltip: "Incluir sesiones globales.",
    unknownTooltip: "Incluir sesiones desconocidas.",
    showArchivedTooltip: "Incluir sesiones archivadas.",
    minutesPlaceholder: "min",
    searchPlaceholder: "Filtrar por clave, agente, etiqueta, tipo…",
    selected: "{count} seleccionados",
    deleteSelected: "Eliminar",
    selectAllOnPage: "Seleccionar todo en la página",
    selectSession: "Seleccionar sesión",
    optionalPlaceholder: "(opcional)",
    key: "Clave",
    label: "Etiqueta",
    kind: "Tipo",
    updated: "Actualizado",
    tokens: "Tokens",
    compaction: "Compactación",
    thinking: "Pensamiento",
    fast: "Rápido",
    verbose: "Detallado",
    reasoning: "Razonamiento",
    noSessions: "No se encontraron sesiones.",
    noSessionsMatchFilters: "Ninguna sesión coincide con tus filtros.",
    showAll: "Mostrar todo",
    inherit: "heredar",
    defaultOption: "Predeterminado ({value})",
    offExplicit: "desactivado (explícito)",
    on: "activado",
    off: "apagado",
    full: "completo",
    stream: "stream",
    customOption: "{value} (personalizado)",
    manual: "manual",
    autoThreshold: "umbral automático",
    overflowRetry: "reintento por desbordamiento",
    timeoutRetry: "reintento por tiempo de espera",
    tokenRange: "{before} to {after} tokens",
    tokensBefore: "{count} tokens antes",
    tokenDeltaUnavailable: "delta de tokens no disponible",
    checkpoints: "{count} puntos de control",
    checkpoint: "{count} punto de control",
    showSessionDetails: "Mostrar detalles de la sesión de {count}",
    hideSessionDetails: "Ocultar detalles de la sesión de {count}",
    sessionDetails: "Detalles de la sesión",
    compactionHistory: "Historial de compactación",
    status: "Estado",
    statusLive: "En vivo",
    statusIdle: "Inactivo",
    statusUnknown: "Desconocido",
    statusRunning: "En ejecución",
    statusDone: "Completado",
    statusFailed: "Error",
    statusKilled: "Finalizado",
    statusTimeout: "Tiempo agotado",
    model: "Modelo",
    provider: "Proveedor",
    runtime: "Tiempo de ejecución",
    surface: "Superficie",
    subject: "Asunto",
    room: "Sala",
    space: "Espacio",
    sessionId: "ID de sesión",
    activeRun: "Ejecución activa",
    archived: "Archivada",
    loadingCheckpoints: "Cargando puntos de control…",
    noCheckpoints: "No hay puntos de control de compactación registrados para esta sesión.",
    noSummary: "No se capturó ningún resumen.",
    branchFromCheckpoint: "Crear rama desde el punto de control",
    restoreCheckpoint: "Restaurar punto de control",
  },
  agents: {
    noAgents: "No agents",
    copyId: "Copy ID",
    copyIdTitle: "Copy agent ID to clipboard",
    default: "Default",
    setDefault: "Set Default",
    alreadyDefaultTitle: "Already the default agent",
    setDefaultTitle: "Set as the default agent",
    selectTitle: "Select an agent",
    selectSubtitle: "Pick an agent to inspect its workspace and tools.",
    tabs: {
      overview: "Overview",
      files: "Archivos",
      tools: "Herramientas",
      skills: "Skills",
      channels: "Channels",
      cronJobs: "Cron Jobs",
    },
    context: {
      title: "Agent Context",
      workspace: "Workspace",
      openFilesTab: "Open Files tab",
      primaryModel: "Primary Model",
      runtime: "Tiempo de ejecución",
      identityName: "Identity Name",
      identityAvatar: "Identity Avatar",
      skillsFilter: "Skills Filter",
      default: "Default",
      configurationSubtitle: "Workspace, identity, and model configuration.",
      schedulingSubtitle: "Workspace and scheduling targets.",
    },
    channels: {
      title: "Channels",
      subtitle: "Gateway-wide channel status snapshot.",
      lastRefresh: "Last refresh: {time}",
      loadHint: "Load channels to see live status.",
      empty: "No channels found.",
      connectedCount: "{connected}/{total} connected",
      noAccounts: "no accounts",
      configuredCount: "{count} configured",
      notConfigured: "not configured",
      enabledCount: "{count} enabled",
      setupGuide: "Setup guide",
    },
    cronPanel: {
      schedulerTitle: "Scheduler",
      schedulerSubtitle: "Gateway cron status.",
      jobs: "Jobs",
      nextWake: "Next wake",
      agentJobsTitle: "Agent Cron Jobs",
      agentJobsSubtitle: "Scheduled jobs targeting this agent.",
      noJobs: "No jobs assigned.",
      runNow: "Run Now",
    },
    files: {
      emptyDraft: "Empty draft",
      minRead: "{count} min read",
      markdownPreview: "Markdown Preview",
      extensionPreview: "{ext} Preview",
      preview: "Preview",
      expandPreview: "Expand preview",
      collapsePreview: "Collapse preview",
      editFile: "Edit file",
      closePreview: "Close preview",
      coreFilesTitle: "Core Files",
      coreFilesSubtitle: "Bootstrap persona, identity, and tool guidance.",
      workspace: "Workspace",
      loadHint: "Load the agent workspace files to edit core instructions.",
      empty: "No files found.",
      missing: "missing",
      selectFile: "Select a file to edit.",
      previewMarkdownTitle: "Preview rendered markdown",
      willCreateOnSave: "Will Create on Save",
      liveDraftPreview: "Live Draft Preview",
      savedPreview: "Saved Preview",
      updated: "Updated {time}",
      notCreatedYet: "Not Created Yet",
      updatedUnknown: "Updated Unknown",
      missingHint: "This file is missing. Saving will create it in the agent workspace.",
      content: "Content",
      words: "{count} words",
      lines: "lines",
    },
  },
  debug: {
    snapshotsTitle: "Snapshots",
    snapshotsSubtitle: "Status, health, and heartbeat data.",
    status: "Status",
    health: "Health",
    lastHeartbeat: "Last heartbeat",
    security: {
      audit: "Security audit",
      critical: "{count} critical",
      warnings: "{count} warnings",
      noCriticalIssues: "No critical issues",
      info: "{count} info",
      runPrefix: "Run",
      runSuffix: "for details.",
    },
    manualRpcTitle: "Manual RPC",
    manualRpcSubtitle: "Send a raw gateway method with JSON params.",
    method: "Method",
    selectMethod: "Select a method…",
    paramsJson: "Params (JSON)",
    modelsTitle: "Models",
    modelsSubtitle: "Catalog from models.list.",
    eventLogTitle: "Registro de eventos",
    eventLogSubtitle: "Latest gateway events.",
    noEvents: "No events yet.",
  },
  quickSettings: {
    security: {
      browserEnabled: "Browser enabled",
      toolProfile: "Tool profile",
    },
  },
  execApproval: {
    expiresIn: "expires in {time}",
    expired: "expired",
    execApprovalNeeded: "Exec approval needed",
    pluginApprovalNeeded: "Plugin approval needed",
    pending: "{count} pending",
    allowOnce: "Allow once",
    alwaysAllow: "Always allow",
    allowAlwaysUnavailable:
      "The effective approval policy requires approval every time, so Allow Always is unavailable.",
    deny: "Deny",
    labels: {
      host: "Host",
      agent: "Agente",
      session: "Sesión",
      cwd: "CWD",
      resolved: "Resolved",
      security: "Security",
      ask: "Ask",
      severity: "Severity",
      plugin: "Plugin",
    },
  },
  agentTools: {
    connectedSource: "Conectado: {id}",
    connected: "Conectado",
    channelSource: "Canal: {id}",
    channel: "Canal",
    builtIn: "Integrado",
  },
  nav: {
    chat: "Chat",
    control: "Control",
    agent: "Agente",
    settings: "Ajustes",
    expand: "Expandir barra lateral",
    collapse: "Contraer barra lateral",
    resize: "Redimensionar la barra lateral",
  },
  tabs: {
    agents: "Agentes",
    activity: "Activity",
    overview: "Resumen",
    channels: "Canales",
    instances: "Instancias",
    sessions: "Sesiones",
    usage: "Uso",
    cron: "Tareas Cron",
    skills: "Skills",
    nodes: "Nodos",
    chat: "Chat",
    config: "Configuración",
    communications: "Comunicaciones",
    appearance: "Apariencia",
    automation: "Automatización",
    infrastructure: "Infraestructura",
    aiAgents: "IA y agentes",
    debug: "Depuración",
    logs: "Registros",
    dreams: "Sueños",
  },
  subtitles: {
    agents: "Gestionar espacios de trabajo, herramientas e identidades de agentes.",
    activity: "Browser-local tool activity summaries.",
    overview: "Estado de la puerta de enlace, puntos de entrada y lectura rápida de salud.",
    channels: "Gestionar canales y ajustes.",
    instances: "Balizas de presencia de clientes y nodos conectados.",
    sessions: "Inspeccionar sesiones activas y ajustar valores predeterminados por sesión.",
    usage: "Monitorear uso de API y costes.",
    cron: "Programar despertares y ejecuciones recurrentes de agentes.",
    skills: "Gestionar disponibilidad de habilidades e inyección de claves API.",
    nodes: "Dispositivos emparejados, capacidades y exposición de comandos.",
    chat: "Sesión de chat directa con la puerta de enlace para intervenciones rápidas.",
    config: "Editar ~/.openclaw/openclaw.json de forma segura.",
    communications: "Canales, mensajes y configuración de audio.",
    appearance: "Configuración del tema, la UI y el asistente de configuración.",
    automation: "Comandos, hooks, cron y plugins.",
    infrastructure: "Configuración de Gateway, web, navegador y medios.",
    aiAgents: "Agentes, modelos, Skills, herramientas, memoria, sesión.",
    debug: "Instantáneas de la puerta de enlace, eventos y llamadas RPC manuales.",
    logs: "Seguimiento en vivo de los registros de la puerta de enlace.",
    dreams: "Consolidación de la memoria durante el sueño.",
  },
  activity: {
    title: "Activity",
    subtitle: "Ephemeral tool activity derived from live session events.",
    visibleCount: "{visible} of {total}",
    filtersLabel: "Activity filters",
    search: "Buscar",
    searchPlaceholder: "Filter by tool, summary, run, session",
    toolFilter: "Herramienta",
    allTools: "All tools",
    statusFilters: "Status filters",
    autoFollow: "Auto-follow",
    expandAll: "Expand all",
    collapseAll: "Collapse all",
    clear: "Borrar",
    empty: "No tool activity yet.",
    emptyFiltered: "No activity matches these filters.",
    entrySummary: "{argumentSummary}",
    argumentHiddenOne: "1 argument hidden",
    argumentsHidden: "{count} arguments hidden",
    streamLabel: "Tool activity entries",
    toolCallId: "Tool call",
    runId: "Run",
    session: "Sesión",
    outputTruncated: "Preview redacted and truncated.",
    noOutputPreview: "No output preview.",
    status: {
      running: "En ejecución",
      done: "Completado",
      error: "Error",
    },
    duration: {
      ms: "{count} ms",
      seconds: "{count} s",
      minutes: "{minutes}m {seconds}s",
    },
  },
  overview: {
    access: {
      title: "Acceso a la puerta de enlace",
      subtitle: "Dónde se conecta el panel y cómo se autentica.",
      wsUrl: "URL de WebSocket",
      token: "Token de la puerta de enlace",
      password: "Contraseña (no se guarda)",
      passwordPlaceholder: "contraseña del sistema o compartida",
      sessionKey: "Clave de sesión predeterminada",
      language: "Idioma",
      connectHint: "Haz clic en Conectar para aplicar los cambios de conexión.",
      trustedProxy: "Autenticado mediante proxy de confianza.",
      showToken: "Mostrar token",
      hideToken: "Ocultar token",
      toggleTokenVisibility: "Alternar visibilidad del token",
      showPassword: "Mostrar contraseña",
      hidePassword: "Ocultar contraseña",
      togglePasswordVisibility: "Alternar visibilidad de la contraseña",
    },
    snapshot: {
      title: "Instantánea",
      subtitle: "Información más reciente del saludo con la puerta de enlace.",
      status: "Estado",
      uptime: "Tiempo de actividad",
      tickInterval: "Intervalo de tick",
      lastChannelsRefresh: "Última actualización de canales",
      channelsHint: "Usa Canales para vincular WhatsApp, Telegram, Discord, Signal o iMessage.",
    },
    stats: {
      instances: "Instancias",
      instancesHint: "Balizas de presencia en los últimos 5 minutos.",
      sessions: "Sesiones",
      sessionsHint: "Claves de sesión recientes rastreadas por la puerta de enlace.",
      cron: "Cron",
      cronNext: "Próximo despertar {time}",
    },
    notes: {
      title: "Notas",
      subtitle: "Recordatorios rápidos para configuraciones de control remoto.",
      tailscaleTitle: "Tailscale serve",
      tailscaleText:
        "Prefiere el modo serve para mantener la puerta de enlace en loopback con autenticación tailnet.",
      sessionTitle: "Higiene de sesión",
      sessionText: "Usa /new o sessions.patch para reiniciar el contexto.",
      cronTitle: "Recordatorios de Cron",
      cronText: "Usa sesiones aisladas para ejecuciones recurrentes.",
    },
    auth: {
      required:
        "Esta puerta de enlace requiere autenticación. Añade un token o contraseña y haz clic en Conectar.",
      failed:
        "Autenticación fallida. Vuelve a copiar una URL con token mediante {command}, o actualiza el token y haz clic en Conectar.",
    },
    pairing: {
      hint: "Este dispositivo necesita aprobación de emparejamiento del host de la puerta de enlace.",
      scopeUpgradeTitle: "Ampliación del alcance pendiente de aprobación.",
      scopeUpgradeSummary:
        "Este dispositivo ya está emparejado, pero el alcance más amplio solicitado está pendiente de aprobación.",
      roleUpgradeTitle: "Actualización del rol pendiente de aprobación.",
      roleUpgradeSummary:
        "Este dispositivo ya está emparejado, pero el cambio de rol solicitado está pendiente de aprobación.",
      metadataUpgradeTitle: "Cambio de metadatos del dispositivo pendiente de aprobación.",
      metadataUpgradeSummary:
        "Este dispositivo ya está emparejado, pero el cambio de metadatos está pendiente de aprobación.",
      mobileHint:
        "¿En el móvil? Copia la URL completa (incluyendo #token=...) desde openclaw dashboard --no-open en tu escritorio.",
      docsTitle: "Documentación de emparejamiento de dispositivos (se abre en una pestaña nueva)",
      docsLink: "Documentación: Emparejamiento de dispositivos",
    },
    insecure: {
      hint: "Esta página es HTTP, por lo que el navegador bloquea el acceso a la identidad del dispositivo. Usa HTTPS (Tailscale Serve) o abre {url} en el equipo host.",
      stayHttp: "Si debes permanecer en HTTP, utiliza {config} (solo token).",
    },
    connection: {
      title: "Cómo conectarse",
      step1: "Inicia el gateway en tu máquina host:",
      step2: "Obtén una URL del panel con token:",
      step3: "Pega la URL de WebSocket y el token arriba, o abre directamente la URL con token.",
      step4: "O genera un token reutilizable:",
      docsHint: "Para el acceso remoto, se recomienda Tailscale Serve. ",
      docsLink: "Leer la documentación →",
      authDocsTitle: "Documentación de autenticación de Control UI (se abre en una pestaña nueva)",
      authDocsLink: "Documentación: Autenticación de Control UI",
      tailscaleDocsTitle: "Documentación de Tailscale Serve (se abre en una pestaña nueva)",
      tailscaleDocsLink: "Documentación: Tailscale Serve",
      insecureHttpDocsTitle: "Documentación de HTTP inseguro (se abre en una pestaña nueva)",
      insecureHttpDocsLink: "Documentación: HTTP inseguro",
      copyCommand: "Copiar comando",
      copyCommandAria: "Copiar comando: {command}",
    },
    cards: {
      cost: "Costo",
      skills: "Skills",
      recentSessions: "Sesiones recientes",
      modelAuth: "Autenticación del modelo",
      modelAuthOk: "{count} ok",
      modelAuthExpired: "{count} caducadas",
      modelAuthExpiring: "{count} por caducar",
      modelAuthProviders: "{count} proveedores",
      modelAuthUsageLeft: "{pct}% restante",
      modelAuthExpiresIn: "caduca {when}",
      modelAuthAttentionExpiredTitle: "La autenticación del modelo ha caducado",
      modelAuthAttentionExpiringTitle: "La autenticación del modelo caducará pronto",
      modelAuthAttentionExpiredDesc: "{providers} — vuelve a autenticarte con openclaw models auth",
      modelAuthAttentionExpiringEntry: "{provider} ({when})",
    },
    attention: {
      title: "Atención",
    },
    eventLog: {
      title: "Registro de eventos",
    },
    logTail: {
      title: "Logs de Gateway",
    },
    quickActions: {
      newSession: "Nueva sesión",
      automation: "Automatización",
      refreshAll: "Actualizar todo",
      terminal: "Terminal",
    },
    palette: {
      placeholder: "Escribe un comando…",
      noResults: "Sin resultados",
      categories: {
        search: "Buscar",
        navigation: "Navegación",
        skills: "Skills",
      },
      items: {
        overview: "Resumen",
        sessions: "Sesiones",
        scheduled: "Programado",
        skills: "Skills",
        settings: "Configuración",
        agents: "Agentes",
        shellCommand: "Comando de shell",
        debugMode: "Modo de depuración",
      },
      descriptions: {
        shellCommand: "Ejecutar shell",
        debugMode: "Alternar depuración",
      },
      footer: {
        navigate: "navegar",
        select: "seleccionar",
        close: "cerrar",
      },
    },
  },
  dreaming: {
    tabs: {
      scene: "Escena",
      diary: "Diario",
      advanced: "Avanzado",
    },
    header: {
      refresh: "Actualizar",
      refreshing: "Actualizando…",
      on: "Sueño activado",
      off: "Sueño desactivado",
    },
    restartConfirmation: {
      title: "Restart Gateway to Apply Change",
      subtitle: "Changing Dreaming mode restarts the gateway.",
      warning:
        "This action will restart the Gateway and may temporarily interrupt chats, automations, and connected channels.",
      confirm: "Confirm Restart",
      restarting: "Restarting…",
      failed: "Could not apply change. Check your connection and try again.",
    },
    status: {
      active: "Sueño activo",
      idle: "Sueño inactivo",
      promotedSuffix: "promovido",
      nextSweepPrefix: "próximo barrido",
    },
    scene: {
      backfill: "Rellenar",
      dedupeDiary: "Diario de deduplicación",
      reset: "Restablecer",
      clearGrounded: "Borrar Grounded",
      repairCache: "Reparar caché de sueños",
      working: "Trabajando…",
    },
    phase: {
      light: "Ligero",
      deep: "Profundo",
      rem: "Rem",
      off: "apagado",
    },
    advanced: {
      eyebrow: "Revisión",
      title: "Revisión del registro diario",
      description:
        "Revisa lo que proviene del registro diario, lo que está esperando promoción y lo que fue promovido recientemente.",
      summaryFromDailyLog: "del registro diario",
      summaryWaiting: "en espera",
      summaryPromotedToday: "promovido hoy",
      stagedTitle: "Del registro diario",
      stagedDescription:
        "Volver a reproducir candidatos extraídos de entradas anteriores del registro diario.",
      shortTermTitle: "Esperando promoción",
      shortTermDescription:
        "Candidatos actuales a corto plazo que esperan ascender a memoria real.",
      sortRecent: "Más reciente",
      sortSignals: "Mayor respaldo",
      originDailyLog: "reproducido",
      originLive: "en vivo",
      originMixed: "mixto",
      promotedTitle: "Promociones recientes",
      promotedDescription: "Elementos que ya pasaron por la promoción.",
      emptyGrounded: "No hay entradas de reproducción fundamentada preparadas en este momento.",
      emptyShortTerm: "No hay entradas a corto plazo para inspeccionar.",
      emptyPromoted: "No hay promociones recientes para inspeccionar.",
      updatedPrefix: "actualizado",
    },
    stats: {
      shortTerm: "Corto plazo",
      grounded: "Grounded",
      signals: "Señales",
      promoted: "Promovidos",
      phaseHits: "Aciertos de fase",
    },
    trace: {
      shortTerm: "Corto plazo",
      grounded: "Grounded",
      signals: "Señales",
      promoted: "Promovidos",
      groundedLed: "grounded-led",
      emptyShortTerm: "No hay elementos activos a corto plazo.",
      emptyGrounded: "No hay elementos Grounded preparados.",
      emptySignals: "No hay señales activas.",
      emptyPromoted: "Todavía no se ha promovido nada hoy.",
    },
    diary: {
      title: "Diario de sueños",
      noDreamsYet: "Aún no hay sueños",
      noDreamsHint:
        "Los sueños aparecerán aquí después de que se ejecute el primer ciclo de sueño.",
      waitingTitle: "El diario está esperando",
      waitingHint: "Las entradas narrativas aparecerán después del próximo ciclo de sueño.",
      older: "Anteriores",
      newer: "Más recientes",
      reload: "Recargar",
      reloading: "Recargando…",
    },
    phrases: {
      consolidatingMemories: "consolidando recuerdos…",
      tidyingKnowledgeGraph: "ordenando el grafo de conocimiento…",
      replayingConversations: "reproduciendo las conversaciones de hoy…",
      weavingShortTerm: "entretejiendo el corto plazo con el largo plazo…",
      defragmentingMindPalace: "desfragmentando el palacio mental…",
      filingLooseThoughts: "archivando pensamientos sueltos…",
      connectingDots: "conectando puntos distantes…",
      compostingContext: "convirtiendo en compost las ventanas de contexto antiguas…",
      alphabetizingSubconscious: "poniendo el subconsciente en orden alfabético…",
      promotingHunches: "promoviendo corazonadas prometedoras…",
      forgettingNoise: "olvidando lo que no importa…",
      dreamingEmbeddings: "soñando en embeddings…",
      reorganizingAttic: "reorganizando el ático de la memoria…",
      indexingDay: "indexando suavemente el día…",
      nurturingInsights: "nutriendo ideas incipientes…",
      simmeringIdeas: "dejando hervir a fuego lento ideas a medio formar…",
      whisperingVectorStore: "susurrándole al vector store…",
    },
  },
  usage: {
    common: {
      emptyValue: "—",
      unknown: "desconocido",
    },
    loading: {
      title: "Resumen de uso",
      badge: "Cargando",
    },
    metrics: {
      tokens: "Tokens",
      cost: "Costo",
      session: "sesión",
      sessions: "sesiones",
    },
    presets: {
      today: "Hoy",
      last7d: "7d",
      last30d: "30d",
      last90d: "90 d",
      last1y: "1 a",
      all: "Todas",
    },
    scope: {
      instance: "Instancia actual",
      instanceHint: "Mostrar solo el id de sesión activo para cada sesión lógica.",
      family: "Linaje histórico",
      familyHint: "Agrupar los id de sesión conocidos rotados respaldados por transcripciones.",
      familyIncluded: "El linaje histórico incluye {count} instancias de sesión.",
    },
    filters: {
      title: "Filtros",
      to: "a",
      startDate: "Fecha de inicio",
      endDate: "Fecha de fin",
      timeZone: "Zona horaria",
      timeZoneLocal: "Local",
      timeZoneUtc: "UTC",
      pin: "Fijar",
      pinned: "Fijado",
      unpin: "Desfijar filtros",
      selectAll: "Seleccionar todo",
      clear: "Borrar",
      clearAll: "Borrar todo",
      remove: "Quitar filtro",
      all: "Todas",
      days: "Días",
      hours: "Horas",
      session: "Sesión",
      agent: "Agente",
      channel: "Canal",
      provider: "Proveedor",
      model: "Modelo",
      tool: "Herramienta",
      daysCount: "{count} días",
      hoursCount: "{count} horas",
      sessionsCount: "{count} sesiones",
    },
    query: {
      placeholder:
        "Filtra sesiones (p. ej., key:agent:main:cron* model:gpt-4o has:errors minTokens:2000)",
      apply: "Filtrar (del lado del cliente)",
      matching: "{shown} de {total} sesiones coinciden",
      inRange: "{total} sesiones en el rango",
      tip: "Consejo: usa filtros o haz clic en las barras para ajustar los días.",
    },
    export: {
      label: "Exportar",
      sessionsCsv: "CSV de sesiones",
      dailyCsv: "CSV diario",
      json: "JSON",
    },
    cacheStatus: {
      warning:
        "La caché de uso se está reconstruyendo en segundo plano. Los totales mostrados pueden estar desactualizados.",
      title: "{status}: {pending} pendientes, {stale} desactualizados, {cached} en caché",
      status: {
        refreshing: "actualizando",
        stale: "desactualizada",
        partial: "parcial",
      },
    },
    empty: {
      title: "Comienza con un rango de fechas",
      subtitle:
        "Carga datos de uso para comparar costos, inspeccionar sesiones y explorar cronologías sin salir del panel.",
      hint: "Selecciona un rango de fechas y haz clic en Actualizar para cargar el uso.",
      noData: "Sin datos",
      featureOverview: "Tarjetas de resumen",
      featureSessions: "Clasificación de sesiones",
      featureTimeline: "Exploración de cronología",
    },
    daily: {
      title: "Uso diario",
      total: "Total",
      byType: "Por tipo",
      tokensTitle: "Uso diario de tokens",
      costTitle: "Costo diario",
    },
    breakdown: {
      output: "Salida",
      input: "Entrada",
      cacheWrite: "Escritura en caché",
      cacheRead: "Lectura de caché",
      total: "Total",
      tokensByType: "Tokens por tipo",
      costByType: "Costo por tipo",
    },
    overview: {
      title: "Resumen de uso",
      messages: "Mensajes",
      messagesHint: "Total de mensajes del usuario y del asistente dentro del rango.",
      messagesAbbrev: "msgs",
      user: "usuario",
      assistant: "asistente",
      toolCalls: "Llamadas a herramientas",
      toolCallsHint: "Recuento total de llamadas a herramientas en las sesiones.",
      toolsUsed: "herramientas usadas",
      errors: "Errores",
      errorsHint: "Total de errores de mensajes y herramientas dentro del rango.",
      toolResults: "resultados de herramientas",
      avgTokens: "Prom. de tokens / mensaje",
      avgTokensHint: "Promedio de tokens por mensaje en este rango.",
      avgCost: "Costo prom. / mensaje",
      avgCostHint: "Costo promedio por mensaje cuando los proveedores informan costos.",
      avgCostHintMissing:
        "Costo promedio por mensaje cuando los proveedores informan costos. Faltan datos de costo para algunas o todas las sesiones de este rango.",
      acrossMessages: "En {count} mensajes",
      sessions: "Sesiones",
      sessionsHint: "Sesiones distintas dentro del rango.",
      sessionsInRange: "de {count} en el rango",
      throughput: "Rendimiento",
      throughputHint:
        "El rendimiento muestra tokens por minuto durante el tiempo activo. Cuanto más alto, mejor.",
      tokensPerMinute: "tok/min",
      perMinute: "/ min",
      errorRate: "Tasa de errores",
      errorHint: "Tasa de errores = errores / mensajes totales. Cuanto más baja, mejor.",
      avgSession: "sesión prom.",
      cacheHitRate: "Tasa de aciertos de caché",
      cacheHint:
        "Tasa de aciertos de caché = lectura de caché / (entrada + lectura de caché). Cuanto más alta, mejor.",
      cached: "en caché",
      prompt: "prompt",
      calls: "llamadas",
      topModels: "Modelos principales",
      topProviders: "Proveedores principales",
      topTools: "Herramientas principales",
      topAgents: "Agentes principales",
      topChannels: "Canales principales",
      peakErrorDays: "Días con más errores",
      peakErrorHours: "Horas con más errores",
      noModelData: "No hay datos de modelos",
      noProviderData: "No hay datos de proveedores",
      noToolCalls: "No hay llamadas a herramientas",
      noAgentData: "No hay datos de agentes",
      noChannelData: "No hay datos de canales",
      noErrorData: "No hay datos de errores",
    },
    sessions: {
      title: "Sesiones",
      shown: "{count} mostradas",
      total: "{count} en total",
      avg: "prom.",
      all: "Todas",
      recent: "Vistas recientemente",
      recentShort: "Recientes",
      sort: "Ordenar",
      ascending: "Ascendente",
      descending: "Descendente",
      clearSelection: "Borrar selección",
      noRecent: "No hay sesiones recientes",
      noneInRange: "No hay sesiones en el rango",
      more: "+{count} más",
      selected: "Seleccionadas ({count})",
      copy: "Copiar",
      copyName: "Copiar nombre de la sesión",
      limitReached:
        "Mostrando las primeras 1,000 sesiones. Reduce el rango de fechas para ver los resultados completos.",
    },
    details: {
      noUsageData: "No hay datos de uso para esta sesión.",
      duration: "Duración",
      modelMix: "Combinación de modelos",
      filtered: "(filtrado)",
      close: "Cerrar detalles de la sesión",
      noTimeline: "No hay datos de cronología",
      noDataInRange: "No hay datos en el rango",
      usageOverTime: "Uso a lo largo del tiempo",
      reset: "Restablecer",
      perTurn: "Por turno",
      cumulative: "Acumulado",
      turnRange: "Turnos {start}–{end} de {total}",
      assistantOutputTokens: "Tokens de salida del asistente",
      userToolInputTokens: "Tokens de entrada del usuario + herramientas",
      tokensWrittenToCache: "Tokens escritos en caché",
      tokensReadFromCache: "Tokens leídos de caché",
      noContextData: "No hay datos de contexto",
      systemPromptBreakdown: "Desglose del prompt del sistema",
      collapse: "Contraer",
      collapseAll: "Contraer todo",
      expandAll: "Expandir todo",
      baseContextPerMessage: "Contexto base por mensaje",
      system: "Sistema",
      systemShort: "Sis",
      skills: "Skills",
      tools: "Herramientas",
      files: "Archivos",
      ofInput: "de la entrada",
      of: "de",
      timelineFiltered: "cronología filtrada",
      conversation: "Conversación",
      noMessages: "No hay mensajes",
      tool: "Herramienta",
      toolResult: "Resultado de la herramienta",
      hasTools: "Tiene herramientas",
      searchConversation: "Buscar en la conversación",
      you: "Tú",
      noMessagesMatch: "Ningún mensaje coincide con los filtros.",
    },
    mosaic: {
      title: "Actividad por hora",
      subtitleEmpty: "Las estimaciones requieren marcas de tiempo de las sesiones.",
      subtitle:
        "Estimado a partir de los intervalos de las sesiones (primera/última actividad). Zona horaria: {zone}.",
      noTimelineData: "Todavía no hay datos de cronología.",
      dayOfWeek: "Día de la semana",
      midnight: "Medianoche",
      fourAm: "4 a. m.",
      eightAm: "8 a. m.",
      noon: "Mediodía",
      fourPm: "4 p. m.",
      eightPm: "8 p. m.",
      legend: "Baja → Alta densidad de tokens",
      sun: "Dom",
      mon: "Lun",
      tue: "Mar",
      wed: "Mié",
      thu: "Jue",
      fri: "Vie",
      sat: "Sáb",
    },
  },
  login: {
    subtitle: "Panel de Gateway",
    passwordPlaceholder: "opcional",
    showToken: "Mostrar token",
    hideToken: "Ocultar token",
    toggleTokenVisibility: "Alternar visibilidad del token",
    showPassword: "Mostrar contraseña",
    hidePassword: "Ocultar contraseña",
    togglePasswordVisibility: "Alternar visibilidad de la contraseña",
    failure: {
      rawError: "Error sin procesar",
      docsAuth: "Documentación de autenticación de Control UI",
      docsPairing: "Documentación de emparejamiento de dispositivos",
      docsInsecure: "Documentación de HTTP inseguro",
      authRequired: {
        title: "Autenticación requerida",
        summary:
          "Se puede acceder al Gateway, pero necesita un token o una contraseña coincidente antes de que este navegador pueda conectarse.",
        stepPaste:
          "Pega el token de openclaw dashboard --no-open o introduce la contraseña configurada.",
        stepGenerate:
          "Si no hay token configurado, ejecuta openclaw doctor --generate-gateway-token en el host del Gateway.",
        stepConnect: "Haz clic en Connect de nuevo después de actualizar la credencial.",
      },
      authFailed: {
        title: "La autenticación no coincide",
        summary:
          "La credencial proporcionada fue rechazada. La causa más común es un token obsoleto o copiado desde otra URL de Gateway.",
        stepDashboard: "Ejecuta openclaw dashboard --no-open y abre la URL nueva o pega su token.",
        stepReplace:
          "Reemplaza valores obsoletos de token/contraseña; no reutilices un token de otra URL de Gateway.",
        stepMode:
          "Usa un solo modo de autenticación coincidente a la vez: token de gateway para modo token, contraseña para modo contraseña.",
      },
      rateLimited: {
        title: "Demasiados intentos fallidos",
        summary:
          "El Gateway está limitando temporalmente los intentos de autenticación de este cliente.",
        stepStop: "Deja de reintentar desde esta pestaña por un momento.",
        stepWait:
          "Espera a que el limitador de autenticación se enfríe y vuelve a conectar con la credencial corregida.",
        stepCheckClients:
          "Si este es un host compartido, revisa otros clientes por reintentos incorrectos repetidos.",
      },
      pairing: {
        title: "Emparejamiento de dispositivo requerido",
        scopeTitle: "Actualización de alcance pendiente",
        roleTitle: "Actualización de rol pendiente",
        metadataTitle: "Actualización del dispositivo pendiente",
        summary:
          "Este navegador necesita una aprobación única del host del Gateway antes de poder usar Control UI.",
        upgradeSummary:
          "Este navegador ya es conocido, pero el acceso solicitado cambió y necesita una aprobación nueva.",
        stepList: "Ejecuta openclaw devices list en el host del Gateway.",
        stepApproveId: "Aprueba esta solicitud: openclaw devices approve {requestId}.",
        stepApprove: "Aprueba la solicitud pendiente de navegador/dispositivo desde esa lista.",
        stepReconnect: "Vuelve a conectar después de completar la aprobación.",
      },
      insecure: {
        title: "Se requiere un contexto seguro del navegador",
        summary:
          "Esta página se está ejecutando sobre HTTP simple, por lo que el navegador no puede crear la identidad de dispositivo que espera el Gateway.",
        stepHttps:
          "Usa HTTPS/Tailscale Serve, o abre http://127.0.0.1:18789 en el host del Gateway.",
        stepLocalCompat:
          "Para compatibilidad local solo con token, establece gateway.controlUi.allowInsecureAuth: true.",
        stepAvoidDisable:
          "Evita desactivar la autenticación de dispositivo para acceso HTTP remoto.",
      },
      origin: {
        title: "Origen del navegador no permitido",
        summary:
          "El Gateway rechazó el origen de esta página antes de aceptar la conexión de Control UI.",
        stepAllowedOrigins: "Agrega este origen del navegador a gateway.controlUi.allowedOrigins.",
        stepFullOrigin: "Usa orígenes completos como http://localhost:5173, no patrones comodín.",
        stepRestart: "Reinicia o recarga el Gateway después de cambiar los orígenes permitidos.",
      },
      protocol: {
        title: "El protocolo no coincide",
        summary:
          "La Control UI servida y el Gateway en ejecución no coinciden en el protocolo de conexión admitido.",
        stepDashboard:
          "Vuelve a abrir el dashboard servido con openclaw dashboard para que UI y Gateway provengan de la misma instalación.",
        stepDevUi:
          "Si usas pnpm ui:dev, reconstruye o reinicia la UI de desarrollo contra el checkout actual.",
        stepRestart:
          "Reinicia el Gateway después de actualizar OpenClaw para que sirva el protocolo actual.",
      },
      network: {
        title: "No se pudo conectar",
        summary:
          "El navegador no pudo completar la conexión al Gateway. Revisa el destino y el transporte antes de reintentar credenciales.",
        stepGateway:
          "Confirma que el Gateway esté en ejecución con openclaw status u openclaw gateway run.",
        stepUrl:
          "Revisa la URL de WebSocket y usa wss:// cuando el Gateway esté detrás de HTTPS/Tailscale Serve.",
        stepDashboard:
          "Vuelve a abrir el dashboard con openclaw dashboard --no-open para copiar la URL y los detalles de autenticación actuales.",
      },
    },
  },
  chat: {
    disconnected: "Desconectado de la puerta de enlace.",
    refreshTitle: "Actualizar datos del chat",
    settings: "Configuración del chat",
    thinkingToggle: "Alternar salida de pensamiento/trabajo del asistente",
    toolCallsToggle: "Alternar llamadas a herramientas y resultados de herramientas",
    autoScrollMode: "Modo de desplazamiento automático",
    autoScrollAlways: "Siempre",
    autoScrollNearBottom: "Cerca del final",
    autoScrollOff: "Desactivado",
    focusToggle: "Alternar modo de enfoque (ocultar barra lateral + cabecera)",
    hideCronSessions: "Ocultar sesiones de cron",
    showCronSessions: "Mostrar sesiones de cron",
    showCronSessionsHidden: "Mostrar sesiones de cron ({count} ocultas)",
    onboardingDisabled: "Deshabilitado durante el inicio guiado",
    gatewayStatus: "Estado del Gateway: {status}",
    commandPaletteTitle: "Buscar o ir a… (⌘K)",
    openCommandPalette: "Abrir paleta de comandos",
    docsOpensInNewTab: "{label} (se abre en una pestaña nueva)",
    updateAvailable: "Actualización disponible:",
    runningVersion: "ejecutando v{version}",
    updating: "Actualizando…",
    updateNow: "Actualizar ahora",
    dismissUpdateBanner: "Descartar banner de actualización",
    switchedSession: "Se cambió a {session}",
    welcome: {
      ready: "Ready to chat",
      hintBeforeShortcut: "Type a message below ·",
      hintAfterShortcut: "for commands",
      suggestions: {
        whatCanYouDo: "What can you do?",
        summarizeRecentSessions: "Summarize my recent sessions",
        configureChannel: "Help me configure a channel",
        checkSystemHealth: "Check system health",
      },
    },
    runControls: {
      newSession: "New session",
      export: "Exportar",
      exportChat: "Export chat",
      queue: "Queue",
      queueMessage: "Queue message",
      stop: "Stop",
      stopGenerating: "Stop generating",
      send: "Send",
      sendMessage: "Send message",
    },
    composer: {
      placeholder: "Message {name} (Enter to send)",
      placeholderWithAttachments: "Add a message or paste more images...",
      placeholderDisconnected: "Connect to the gateway to start chatting...",
      attachFile: "Attach file",
      startTalk: "Start Talk",
      stillListening: "Sigo escuchando",
      talkTranscript: "Transcripción de voz",
      stopTalk: "Stop Talk",
    },
    selectors: {
      agentFilter: "Filtrar sesiones por agente",
      session: "Chat session",
      sessionSearch: "Buscar sesiones",
      clearSessionSearch: "Borrar búsqueda de sesiones",
      loadMoreSessions: "Cargar más sesiones",
      model: "Chat model",
      thinkingLevel: "Chat thinking level",
    },
  },
  languages: {
    en: "Inglés (English)",
    zhCN: "Chino simplificado (简体中文)",
    zhTW: "Chino tradicional (繁體中文)",
    ptBR: "Portugués brasileño (Português)",
    de: "Deutsch (Alemán)",
    es: "Español",
    jaJP: "日本語 (japonés)",
    ko: "한국어 (coreano)",
    fr: "Français (francés)",
    ar: "العربية (árabe)",
    it: "Italiano (italiano)",
    tr: "Türkçe (turco)",
    uk: "Українська (ucraniano)",
    id: "Bahasa Indonesia (indonesio)",
    pl: "Polski (polaco)",
    th: "ไทย (tailandés)",
    vi: "Tiếng Việt (vietnamita)",
    nl: "Nederlands (neerlandés)",
    fa: "فارسی (persa)",
  },
  cron: {
    quickCreate: {
      schedules: {
        everyMorning: {
          label: "Cada mañana",
          description: "Diariamente a las 8:00 a. m.",
        },
        everyEvening: {
          label: "Cada tarde",
          description: "Diariamente a las 6:00 p. m.",
        },
        hourly: {
          label: "Cada hora",
          description: "Cada hora",
        },
        weekdays: {
          label: "Días laborables",
          description: "Lun–Vie a las 9:00 a. m.",
        },
        weekly: {
          label: "Semanal",
          description: "Todos los lunes a las 9:00 a. m.",
        },
        once: {
          label: "Ejecutar una vez",
          description: "Una sola vez, eliminar después de la ejecución",
        },
      },
      delivery: {
        notify: {
          label: "Notificarme",
          description: "Entregar resultados al chat",
        },
        silent: {
          label: "Silencioso",
          description: "Ejecutar sin notificación",
        },
        isolated: {
          label: "Sesión independiente",
          description: "Ejecutar en su propia sesión",
        },
      },
      steps: {
        what: "Qué",
        when: "Cuándo",
        how: "Cómo",
      },
      defaultName: "Automatización",
      whatHeading: "¿Qué debe hacer?",
      whatHint: "Describe la tarea en lenguaje natural. El agente ejecutará este prompt cada vez.",
      promptPlaceholder:
        "p. ej., Revisa mi bandeja de entrada para ver si hay correos urgentes y resúmelos...",
      nameOptional: "Nombre (opcional)",
      namePlaceholder: "p. ej., Revisión matutina de la bandeja de entrada",
      whenHeading: "¿Cuándo debe ejecutarse?",
      whenHint: "Elige una programación. Puedes ajustarla más adelante.",
      howHeading: "¿Cómo debe funcionar?",
      howHint: "Elige cómo se entregan los resultados.",
      title: "Nueva automatización",
    },
    summary: {
      enabled: "Habilitado",
      yes: "Sí",
      no: "No",
      jobs: "Tareas",
      nextWake: "Próxima activación",
      refreshing: "Actualizando...",
      refresh: "Actualizar",
    },
    jobs: {
      title: "Tareas",
      subtitle: "Todas las tareas programadas almacenadas en la puerta de enlace.",
      shownOf: "{shown} mostradas de {total}",
      searchJobs: "Buscar tareas",
      searchPlaceholder: "Nombre, descripción o agente",
      enabled: "Habilitado",
      schedule: "Programación",
      lastRun: "Última ejecución",
      all: "Todas",
      sort: "Ordenar",
      nextRun: "Próxima ejecución",
      recentlyUpdated: "Actualizadas recientemente",
      name: "Nombre",
      direction: "Dirección",
      ascending: "Ascendente",
      descending: "Descendente",
      reset: "Restablecer",
      emptyTitle: "No scheduled jobs yet.",
      emptyHint: "Create one from a plain-language prompt; advanced fields can wait.",
      emptyFilteredHint: "Clear or change filters to see scheduled jobs.",
      noMatching: "No hay tareas coincidentes.",
      loading: "Cargando...",
      loadMore: "Cargar más tareas",
    },
    runs: {
      title: "Historial de ejecuciones",
      subtitleAll: "Últimas ejecuciones de todas las tareas.",
      subtitleJob: "Últimas ejecuciones de {title}.",
      scope: "Alcance",
      allJobs: "Todas las tareas",
      selectedJob: "Tarea seleccionada",
      searchRuns: "Buscar ejecuciones",
      searchPlaceholder: "Resumen, error o tarea",
      newestFirst: "Más recientes primero",
      oldestFirst: "Más antiguas primero",
      status: "Estado",
      delivery: "Entrega",
      clear: "Borrar",
      allStatuses: "Todos los estados",
      allDelivery: "Todas las entregas",
      selectJobHint: "Selecciona una tarea para ver su historial de ejecuciones.",
      noMatching: "No hay ejecuciones coincidentes.",
      loadMore: "Cargar más ejecuciones",
      runStatusOk: "OK",
      runStatusError: "Error",
      runStatusSkipped: "Omitida",
      runStatusUnknown: "Desconocido",
      deliveryDelivered: "Entregado",
      deliveryNotDelivered: "No entregado",
      deliveryUnknown: "Desconocido",
      deliveryNotRequested: "No solicitado",
    },
    form: {
      editJob: "Editar tarea",
      newJob: "Nueva tarea",
      advancedJob: "Advanced job",
      updateSubtitle: "Actualiza la tarea programada seleccionada.",
      createSubtitle: "Crea una activación programada o ejecución de agente.",
      required: "Requerido",
      requiredSr: "requerido",
      basics: "Básico",
      basicsSub: "Asigna un nombre, elige el asistente y define si está habilitada.",
      fieldName: "Nombre",
      description: "Descripción",
      agentId: "ID de agente",
      namePlaceholder: "Resumen matutino",
      descriptionPlaceholder: "Contexto opcional para esta tarea",
      agentPlaceholder: "main u ops",
      agentHelp:
        "Comienza a escribir para seleccionar un agente conocido o ingresa uno personalizado.",
      schedule: "Programación",
      scheduleSub: "Controla cuándo se ejecuta esta tarea.",
      every: "Cada",
      at: "A las",
      cronOption: "Cron",
      runAt: "Ejecutar a las",
      unit: "Unidad",
      minutes: "Minutos",
      hours: "Horas",
      days: "Días",
      expression: "Expresión",
      expressionPlaceholder: "0 7 * * *",
      everyAmountPlaceholder: "30",
      timezoneOptional: "Zona horaria (opcional)",
      timezonePlaceholder: "America/Los_Angeles",
      timezoneHelp: "Selecciona una zona horaria común o ingresa cualquier zona IANA válida.",
      jitterHelp:
        "¿Necesitas variación? Usa Avanzado → Ventana de escalonamiento / Unidad de escalonamiento.",
      execution: "Ejecución",
      executionSub: "Elige cuándo activar y qué debe hacer esta tarea.",
      session: "Sesión",
      main: "Principal",
      isolated: "Aislada",
      sessionHelp:
        "Principal publica un evento del sistema. Aislada ejecuta un turno dedicado del agente.",
      wakeMode: "Modo de activación",
      now: "Ahora",
      nextHeartbeat: "Próximo latido",
      wakeModeHelp: "Ahora se activa inmediatamente. Próximo latido espera el siguiente ciclo.",
      payloadKind: "¿Qué debe ejecutarse?",
      systemEvent: "Publicar mensaje en la línea de tiempo principal",
      agentTurn: "Ejecutar tarea del asistente (aislada)",
      systemEventHelp:
        "Envía tu texto a la línea de tiempo principal de la puerta de enlace (ideal para recordatorios/activadores).",
      agentTurnHelp: "Inicia una ejecución del asistente en su propia sesión usando tu indicación.",
      timeoutSeconds: "Tiempo de espera (segundos)",
      timeoutPlaceholder: "Opcional, ej. 90",
      timeoutHelp:
        "Opcional. Déjalo en blanco para usar el comportamiento de tiempo de espera predeterminado de la puerta de enlace para esta ejecución.",
      mainTimelineMessage: "Mensaje de la línea de tiempo principal",
      assistantTaskPrompt: "Indicación para la tarea del asistente",
      deliverySection: "Entrega",
      deliverySub: "Elige dónde se envían los resúmenes de ejecución.",
      resultDelivery: "Entrega de resultados",
      announceDefault: "Anunciar resumen (predeterminado)",
      webhookPost: "Webhook POST",
      noneInternal: "Ninguna (interno)",
      deliveryHelp:
        "Anunciar publica un resumen en el chat. Ninguna mantiene la ejecución interna.",
      webhookUrl: "URL del webhook",
      channel: "Canal",
      webhookPlaceholder: "https://example.com/cron",
      channelHelp: "Elige qué canal conectado recibe el resumen.",
      webhookHelp: "Envía resúmenes de ejecución a un endpoint webhook.",
      to: "Para",
      toPlaceholder: "+1555... o ID de chat",
      toHelp: "Anulación opcional del destinatario (ID de chat, teléfono o ID de usuario).",
      advanced: "Avanzado",
      advancedHelp:
        "Anulaciones opcionales para garantías de entrega, variación de programación y controles del modelo.",
      deleteAfterRun: "Eliminar después de ejecutar",
      deleteAfterRunHelp:
        "Ideal para recordatorios de un solo uso que deben limpiarse automáticamente.",
      clearAgentOverride: "Limpiar anulación de agente",
      clearAgentHelp:
        "Forza a esta tarea a usar el asistente predeterminado de la puerta de enlace.",
      exactTiming: "Tiempo exacto (sin escalonamiento)",
      exactTimingHelp: "Ejecutar en límites exactos de cron sin dispersión.",
      staggerWindow: "Ventana de escalonamiento",
      staggerUnit: "Unidad de escalonamiento",
      staggerPlaceholder: "30",
      seconds: "Segundos",
      model: "Modelo",
      modelPlaceholder: "openai/gpt-5.2",
      modelHelp:
        "Comienza a escribir para seleccionar un modelo conocido o ingresa uno personalizado.",
      thinking: "Pensamiento",
      thinkingPlaceholder: "bajo",
      thinkingHelp: "Usa un nivel sugerido o ingresa un valor específico del proveedor.",
      bestEffortDelivery: "Entrega de mejor esfuerzo",
      bestEffortHelp: "No fallar la tarea si la entrega misma falla.",
      cantAddYet: "Aún no se puede agregar la tarea",
      fillRequired: "Completa los campos requeridos a continuación para habilitar el envío.",
      fixFields: "Corrige {count} campo para continuar.",
      fixFieldsPlural: "Corrige {count} campos para continuar.",
      saving: "Guardando...",
      saveChanges: "Guardar cambios",
      addJob: "Agregar tarea",
      cancel: "Cancelar",
    },
    jobList: {
      allJobs: "todas las tareas",
      selectJob: "(selecciona una tarea)",
      enabled: "habilitada",
      disabled: "deshabilitada",
      edit: "Editar",
      clone: "Clonar",
      disable: "Deshabilitar",
      enable: "Habilitar",
      run: "Ejecutar",
      history: "Historial",
      remove: "Eliminar",
    },
    jobDetail: {
      system: "Sistema",
      prompt: "Indicación",
      delivery: "Entrega",
      agent: "Agente",
    },
    jobState: {
      status: "Estado",
      next: "Próxima",
      last: "Última",
    },
    runEntry: {
      noSummary: "Sin resumen.",
      runAt: "Ejecutada a las",
      openRunChat: "Abrir chat de ejecución",
      next: "Próxima {rel}",
      due: "Programada {rel}",
    },
    errors: {
      nameRequired: "El nombre es requerido.",
      scheduleAtInvalid: "Ingresa una fecha/hora válida.",
      everyAmountInvalid: "El intervalo debe ser mayor a 0.",
      cronExprRequired: "La expresión Cron es requerida.",
      staggerAmountInvalid: "El escalonamiento debe ser mayor a 0.",
      systemTextRequired: "El texto del sistema es requerido.",
      agentMessageRequired: "El mensaje del agente es requerido.",
      timeoutInvalid: "Si se establece, el tiempo de espera debe ser mayor a 0 segundos.",
      webhookUrlRequired: "La URL del webhook es requerida.",
      webhookUrlInvalid: "La URL del webhook debe comenzar con http:// o https://.",
      invalidRunTime: "Tiempo de ejecución inválido.",
      invalidIntervalAmount: "Cantidad de intervalo inválida.",
      cronExprRequiredShort: "Expresión Cron requerida.",
      invalidStaggerAmount: "Cantidad de escalonamiento inválida.",
      systemEventTextRequired: "Texto de evento del sistema requerido.",
      agentMessageRequiredShort: "Mensaje del agente requerido.",
      nameRequiredShort: "Nombre requerido.",
    },
  },
};
