|
|
|
|
@@ -0,0 +1,347 @@
|
|
|
|
|
import type { TranslationMap } from "../lib/types.ts";
|
|
|
|
|
|
|
|
|
|
export const es: TranslationMap = {
|
|
|
|
|
common: {
|
|
|
|
|
version: "Versión",
|
|
|
|
|
health: "Estado",
|
|
|
|
|
ok: "Correcto",
|
|
|
|
|
offline: "Desconectado",
|
|
|
|
|
connect: "Conectar",
|
|
|
|
|
refresh: "Actualizar",
|
|
|
|
|
enabled: "Habilitado",
|
|
|
|
|
disabled: "Deshabilitado",
|
|
|
|
|
na: "n/a",
|
|
|
|
|
docs: "Docs",
|
|
|
|
|
resources: "Recursos",
|
|
|
|
|
},
|
|
|
|
|
nav: {
|
|
|
|
|
chat: "Chat",
|
|
|
|
|
control: "Control",
|
|
|
|
|
agent: "Agente",
|
|
|
|
|
settings: "Ajustes",
|
|
|
|
|
expand: "Expandir barra lateral",
|
|
|
|
|
collapse: "Contraer 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",
|
|
|
|
|
debug: "Depuración",
|
|
|
|
|
logs: "Registros",
|
|
|
|
|
},
|
|
|
|
|
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.",
|
|
|
|
|
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.",
|
|
|
|
|
},
|
|
|
|
|
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).",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
chat: {
|
|
|
|
|
disconnected: "Desconectado de la puerta de enlace.",
|
|
|
|
|
refreshTitle: "Actualizar datos del chat",
|
|
|
|
|
thinkingToggle: "Alternar salida de pensamiento/trabajo del asistente",
|
|
|
|
|
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",
|
|
|
|
|
},
|
|
|
|
|
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.",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|