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

// Generated by scripts/control-ui-i18n.ts.
export const es: TranslationMap = {
  common: {
    health: "Estado",
    ok: "Correcto",
    yes: "Sí",
    no: "No",
    active: "Activo",
    loading: "Cargando…",
    refreshing: "Actualizando…",
    online: "En línea",
    offline: "Desconectado",
    connect: "Conectar",
    connected: "Conectado",
    refresh: "Actualizar",
    reload: "Recargar",
    probe: "Probar",
    call: "Llamada",
    confirm: "Confirmar",
    cancel: "Cancelar",
    unselect: "Deseleccionar",
    enabled: "Habilitado",
    disabled: "Deshabilitado",
    na: "n/d",
    configured: "Configurado",
    running: "En ejecución",
    linked: "Vinculado",
    mode: "Modo",
    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",
    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)",
    },
  },
  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}",
  },
  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",
    overview: "Resumen",
    channels: "Canales",
    instances: "Instancias",
    sessions: "Sesiones",
    usage: "Uso",
    cron: "Tareas Cron",
    skills: "Habilidades",
    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.",
    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.",
  },
  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)",
      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.",
    },
    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.",
      mobileHint:
        "¿En el móvil? Copia la URL completa (incluyendo #token=...) desde openclaw dashboard --no-open en tu escritorio.",
    },
    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 →",
    },
    cards: {
      cost: "Costo",
      skills: "Skills",
      recentSessions: "Sesiones recientes",
    },
    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",
    },
  },
  dreaming: {
    tabs: {
      scene: "Escena",
      diary: "Diario",
      advanced: "Avanzado",
    },
    header: {
      refresh: "Actualizar",
      refreshing: "Actualizando…",
      on: "Sueño activado",
      off: "Sueño desactivado",
    },
    status: {
      active: "Sueño activo",
      idle: "Sueño inactivo",
      promotedSuffix: "promovido",
      nextSweepPrefix: "próximo barrido",
    },
    scene: {
      backfill: "Rellenar",
      reset: "Restablecer",
      clearGrounded: "Borrar Grounded",
      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: {
    page: {
      subtitle:
        "Consulta adónde van los tokens, cuándo aumentan las sesiones y qué impulsa el costo.",
    },
    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",
    },
    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: "Todos",
      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",
    },
    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",
  },
  chat: {
    disconnected: "Desconectado de la puerta de enlace.",
    refreshTitle: "Actualizar datos del chat",
    thinkingToggle: "Alternar salida de pensamiento/trabajo del asistente",
    toolCallsToggle: "Alternar llamadas a herramientas y resultados de herramientas",
    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",
  },
  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)",
    tr: "Türkçe (turco)",
    uk: "Українська (ucraniano)",
    id: "Bahasa Indonesia (indonesio)",
    pl: "Polski (polaco)",
  },
  cron: {
    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",
      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: "Limpiar",
      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",
      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.",
    },
  },
};
