/ frontend / src / app / locales / es / translation.json
translation.json
   1  {
   2    "common": {
   3      "save": "Guardar",
   4      "cancel": "Cancelar",
   5      "close": "Cerrar",
   6      "delete": "Eliminar",
   7      "edit": "Editar",
   8      "add": "Añadir",
   9      "create": "Crear",
  10      "remove": "Quitar",
  11      "confirm": "Confirmar",
  12      "back": "Atrás",
  13      "next": "Siguiente",
  14      "previous": "Anterior",
  15      "search": "Buscar",
  16      "searchPlaceholder": "Buscar...",
  17      "filter": "Filtrar",
  18      "all": "Todos",
  19      "yes": "Sí",
  20      "no": "No",
  21      "none": "Ninguno",
  22      "loading": "Cargando...",
  23      "saving": "Guardando...",
  24      "submitting": "Enviando...",
  25      "refresh": "Actualizar",
  26      "retry": "Reintentar",
  27      "copy": "Copiar",
  28      "copied": "Copiado al portapapeles",
  29      "export": "Exportar",
  30      "exportCsv": "Exportar CSV",
  31      "clear": "Limpiar",
  32      "clearSearch": "Limpiar búsqueda",
  33      "done": "Hecho",
  34      "apply": "Aplicar",
  35      "disable": "Desactivar",
  36      "enable": "Activar",
  37      "enabled": "Activado",
  38      "disabled": "Desactivado",
  39      "name": "Nombre",
  40      "description": "Descripción",
  41      "actions": "Acciones",
  42      "status": "Estado",
  43      "date": "Fecha",
  44      "user": "Usuario",
  45      "username": "Usuario",
  46      "password": "Contraseña",
  47      "role": "Rol",
  48      "admin": "Administrador",
  49      "private": "Privado",
  50      "public": "Público",
  51      "team": "Equipo",
  52      "project": "Proyecto",
  53      "type": "Tipo",
  54      "pageSize": "Filas por página",
  55      "noResults": "No se encontraron elementos",
  56      "noMatches": "Sin resultados para \"{{query}}\"",
  57      "resultCount_one": "{{count}} resultado",
  58      "resultCount_other": "{{count}} resultados",
  59      "errorGeneric": "Algo salió mal. Inténtelo de nuevo.",
  60      "selectedCount": "{{count}} seleccionados",
  61      "keepEditing": "Seguir editando",
  62      "discard": "Descartar"
  63    },
  64    "nav": {
  65      "home": "Inicio",
  66      "projects": "Proyectos",
  67      "library": "Biblioteca",
  68      "users": "Usuarios",
  69      "teams": "Equipos",
  70      "llms": "LLMs",
  71      "embeddings": "Embeddings",
  72      "imageGenerators": "Generadores de imagen",
  73      "speechToText": "Voz a texto",
  74      "generators": "Generadores",
  75      "admin": "Administración",
  76      "cronLogs": "Registros de Cron",
  77      "auditLog": "Registro de auditoría",
  78      "permissionMatrix": "Matriz de permisos",
  79      "settings": "Ajustes",
  80      "invitations": "Invitaciones",
  81      "tools": "Herramientas",
  82      "logout": "Cerrar sesión",
  83      "profile": "Perfil",
  84      "account": "Cuenta",
  85      "language": "Idioma",
  86      "switchLanguage": "Cambiar idioma",
  87      "showMore": "Ver más",
  88      "collapse": "Contraer",
  89      "expand": "Expandir",
  90      "openMenu": "Abrir menú",
  91      "classifiers": "Clasificadores",
  92      "directAccess": "Acceso directo",
  93      "gpu": "GPU",
  94      "aiProxy": "Proxy de IA",
  95      "swagger": "Swagger",
  96      "adminLabel": "Administración",
  97      "docsLabel": "Documentación"
  98    },
  99    "topbar": {
 100      "exitImpersonation": "Salir de la suplantación",
 101      "impersonating": "Suplantando a {{username}}",
 102      "invitationsPending": "{{count}} invitaciones pendientes",
 103      "notifications": "Notificaciones"
 104    },
 105    "breadcrumb": {
 106      "home": "Inicio"
 107    },
 108    "sessions": {
 109      "signIn": "Iniciar sesión",
 110      "signInAction": "Entrar",
 111      "signingIn": "Iniciando sesión...",
 112      "welcome": "Bienvenido de nuevo",
 113      "subtitle": "Inicie sesión en su cuenta de RESTai",
 114      "username": "Usuario",
 115      "password": "Contraseña",
 116      "forgotPassword": "¿Olvidó su contraseña?",
 117      "rememberMe": "Recordarme",
 118      "loginFailed": "Error al iniciar sesión. Compruebe sus credenciales.",
 119      "sessionExpired": "Su sesión ha expirado. Inicie sesión de nuevo.",
 120      "signInWith": "Iniciar sesión con {{provider}}",
 121      "or": "o",
 122      "totpTitle": "Autenticación de dos factores",
 123      "totpSubtitle": "Introduzca el código de 6 dígitos de su aplicación de autenticación.",
 124      "totpCodeLabel": "Código del autenticador",
 125      "totpRecoveryToggle": "Usar un código de recuperación",
 126      "totpRecoveryLabel": "Código de recuperación",
 127      "totpVerify": "Verificar",
 128      "totpVerifying": "Verificando...",
 129      "totpInvalid": "Código inválido.",
 130      "passwordWarningTitle": "Aviso de caducidad de la contraseña",
 131      "passwordAgeMessage": "Su contraseña tiene {{days}} días. Le recomendamos cambiarla pronto."
 132    },
 133    "dashboard": {
 134      "title": "Inicio",
 135      "greeting": "Panel",
 136      "subtitle": "Visión general de su plataforma RESTai",
 137      "hero": {
 138        "tagline": "RESTai · Plataforma AIaaS",
 139        "subtitle": "Sus modelos, sus datos, sus reglas. Vista en tiempo real de lo que ocurre en la plataforma.",
 140        "operational": "Todos los sistemas operativos",
 141        "modelsOnline_one": "{{count}} modelo en línea",
 142        "modelsOnline_other": "{{count}} modelos en línea",
 143        "tokensToday": "{{value}} tokens hoy",
 144        "sinceOpen": "+{{value}} desde que abriste",
 145        "latency": "{{value}} latencia p50",
 146        "totalTokens": "{{value}} en total",
 147        "vsYesterday": "{{pct}}% vs ayer",
 148        "greetMorning": "Buenos días",
 149        "greetAfternoon": "Buenas tardes",
 150        "greetEvening": "Buenas noches",
 151        "greetLate": "Quemando las pestañas"
 152      },
 153      "fleet": {
 154        "title": "FLOTA DE MODELOS",
 155        "subtitle_one": "{{count}} modelo activo en sus equipos",
 156        "subtitle_other": "{{count}} modelos activos en sus equipos",
 157        "tokens": "Tokens",
 158        "requests": "Peticiones"
 159      },
 160      "stats": {
 161        "projects": "Proyectos",
 162        "users": "Usuarios",
 163        "teams": "Equipos",
 164        "tokens": "Tokens",
 165        "cost": "Coste",
 166        "avgLatency": "Latencia media"
 167      },
 168      "activity": "Actividad",
 169      "distribution": "Distribución",
 170      "projects": "Proyectos",
 171      "projectTypes": "Tipos de proyecto",
 172      "llmUsage": "Uso de LLM",
 173      "topLlms": "LLMs más usados",
 174      "topProjects": "Proyectos más usados",
 175      "latestProjects": "Proyectos recientes",
 176      "noProjectsYet": "Aún no hay proyectos",
 177      "noProjectsDesc": "Los proyectos son donde viven los flujos RAG, de agente y de bloques. Cree uno para empezar a hacer seguimiento de conversaciones, costes y calidad en este panel.",
 178      "createFirstProject": "Cree su primer proyecto",
 179      "authSecretWeak": "Aviso de seguridad: la variable de entorno RESTAI_AUTH_SECRET es débil o coincide con un valor predeterminado conocido. Cámbiela por un valor largo y aleatorio y reinicie el servidor. Las sesiones existentes tendrán que iniciar sesión de nuevo."
 180    },
 181    "projects": {
 182      "title": "Proyectos",
 183      "subtitle": "Sus proyectos RAG, de agente y de bloques",
 184      "new": "Nuevo proyecto",
 185      "newProject": "Nuevo proyecto",
 186      "search": "Buscar proyectos...",
 187      "noProjects": "Aún no hay proyectos.",
 188      "emptyTitle": "Aún no hay proyectos",
 189      "emptyMessage": "Cree su primer proyecto para empezar.",
 190      "type": {
 191        "rag": "RAG",
 192        "agent": "Agente",
 193        "block": "Bloque"
 194      },
 195      "fields": {
 196        "name": "Nombre",
 197        "humanName": "Nombre visible",
 198        "description": "Descripción",
 199        "llm": "LLM",
 200        "embeddings": "Embeddings",
 201        "team": "Equipo",
 202        "vectorstore": "Vectorstore",
 203        "system": "Prompt del sistema"
 204      },
 205      "actions": {
 206        "open": "Abrir",
 207        "edit": "Editar",
 208        "clone": "Clonar",
 209        "delete": "Eliminar",
 210        "playground": "Playground",
 211        "saveAsTemplate": "Guardar como plantilla",
 212        "useTemplate": "Usar plantilla"
 213      },
 214      "clone": {
 215        "title": "Clonar proyecto",
 216        "newName": "Nombre del nuevo proyecto",
 217        "helper": "Se clonarán los ajustes, los conjuntos de evaluación y las versiones del prompt."
 218      },
 219      "template": {
 220        "saveTitle": "Guardar como plantilla",
 221        "saveIntro": "Capture el prompt del sistema y las opciones de este proyecto como una plantilla reutilizable. El proyecto actual no se ve afectado.",
 222        "name": "Nombre de la plantilla",
 223        "description": "Descripción",
 224        "descHelper": "Se muestra en la lista de la biblioteca — explique para qué sirve esta plantilla.",
 225        "visibility": "Visibilidad",
 226        "private": "Privado — solo usted puede verla y usarla",
 227        "team": "Equipo — miembros del equipo de este proyecto",
 228        "public": "Público — cualquier usuario de esta instancia de RESTai",
 229        "publish": "Publicar",
 230        "publishing": "Publicando...",
 231        "published": "Plantilla \"{{name}}\" publicada.",
 232        "instantiateTitle": "Usar plantilla: {{name}}",
 233        "instantiateNewName": "Nombre del nuevo proyecto",
 234        "instantiateNameHelp": "Identificador seguro para URL (letras, números, . _ : -)",
 235        "instantiateTeam": "Equipo de destino",
 236        "instantiateLlm": "LLM",
 237        "instantiateSuggested": "(sugerido: {{name}})",
 238        "instantiateUseSuggested": "(usar sugerido)",
 239        "create": "Crear proyecto",
 240        "creating": "Creando..."
 241      },
 242      "library": {
 243        "title": "Biblioteca de proyectos",
 244        "subtitle": "Explore proyectos compartidos. Clone cualquier proyecto para personalizarlo.",
 245        "communityTemplates": "Plantillas de la comunidad",
 246        "communityTemplatesDesc": "Paquetes de inicio de proyectos reutilizables — instancie uno para crear un nuevo proyecto en cualquiera de sus equipos. Guarde los suyos desde el botón \"Guardar como plantilla\" de cualquier proyecto.",
 247        "noTemplates": "Aún no hay plantillas disponibles.",
 248        "noSharedProjects": "No se encontraron proyectos compartidos.",
 249        "markPublicHint": "Marque un proyecto como \"Compartido\" en sus ajustes para que aparezca aquí.",
 250        "by": "por {{author}}",
 251        "uses_one": "{{count}} uso",
 252        "uses_other": "{{count}} usos"
 253      },
 254      "gallery": {
 255        "chooseTemplate": "Elija una plantilla",
 256        "chooseSubtitle": "Empiece con un proyecto preconfigurado o cree desde cero",
 257        "startFromScratch": "Empezar desde cero",
 258        "scratchDesc": "Cree un proyecto en blanco y configure todo manualmente",
 259        "publishedTitle": "Sus plantillas publicadas",
 260        "publishedDesc": "Guardadas desde proyectos existentes. Al hacer clic en una, se crea un nuevo proyecto basado en la captura."
 261      },
 262      "unsavedChanges": {
 263        "title": "¿Descartar los cambios sin guardar?",
 264        "message": "Tiene ediciones sin guardar en este proyecto. Si sale ahora, se descartarán."
 265      },
 266      "edit": {
 267        "title": "Editar proyecto - {{name}}",
 268        "tabs": {
 269          "general": "General",
 270          "knowledge": "Conocimiento",
 271          "tools": "Herramientas",
 272          "secrets": "Secretos",
 273          "security": "Seguridad",
 274          "integrations": "Integraciones",
 275          "routines": "Rutinas",
 276          "mobile": "Móvil",
 277          "analytics": "Analíticas",
 278          "comments": "Comentarios",
 279          "evals": "Evaluaciones",
 280          "guards": "Guardias"
 281        },
 282        "general": {
 283          "basicInfo": "Información básica",
 284          "advanced": "Avanzado",
 285          "projectName": "Nombre del proyecto",
 286          "displayName": "Nombre visible",
 287          "description": "Descripción",
 288          "team": "Equipo",
 289          "llm": "LLM",
 290          "embeddings": "Embeddings",
 291          "systemPrompt": "Prompt del sistema",
 292          "systemPromptHint": "Instrucciones que moldean el comportamiento del agente",
 293          "generatePrompt": "Generar con IA",
 294          "promptVersions": "Historial de versiones",
 295          "censorship": "Respuesta de reserva",
 296          "censorshipHint": "Se devuelve cuando el agente no encuentra una buena respuesta",
 297          "logging": "Registrar inferencias",
 298          "redactLogs": "Ocultar PII en los registros de inferencia",
 299          "cache": "Caché semántica de respuestas",
 300          "cacheThreshold": "Umbral de caché",
 301          "memoryBankEnabled": "Banco de memoria (contexto del proyecto)",
 302          "memoryBankMaxTokens": "Presupuesto de tokens del banco de memoria",
 303          "memoryBankWarning": "El banco de memoria comparte un resumen comprimido de cada conversación de este proyecto con todas las demás conversaciones. Cualquier usuario con acceso a este proyecto verá al agente referirse a contexto resumido derivado de conversaciones de otros usuarios. No active esta opción para proyectos con datos confidenciales por usuario.",
 304          "browserSection": "Navegador de agente",
 305          "browserAllowedDomains": "Dominios permitidos",
 306          "browserAllowedHint": "Lista de hosts separados por comas que el navegador puede visitar. Vacío = sin restricción.",
 307          "browserAllowEval": "Permitir browser_eval (peligroso)"
 308        },
 309        "knowledge": {
 310          "retrieval": "Recuperación",
 311          "kHint": "Número de fragmentos recuperados por consulta",
 312          "scoreHint": "Puntuación mínima de similitud (0-1). Mayor = más estricto.",
 313          "rerank": "Reordenar",
 314          "llmRerank": "Reordenación por LLM",
 315          "colbertRerank": "Reordenación ColBERT",
 316          "sqlSection": "SQL en lenguaje natural",
 317          "connection": "Cadena de conexión a la base de datos",
 318          "connectionHint": "URI SQLAlchemy — p. ej. postgresql://user:pwd@host/db",
 319          "tables": "Tablas permitidas",
 320          "knowledgeGraph": "Grafo de conocimiento",
 321        "evals": {
 322          "datasets": "Conjuntos de datos",
 323          "newDataset": "Nuevo conjunto",
 324          "clickHint": "Haga clic en un conjunto para gestionar sus casos de prueba.",
 325          "noDatasets": "Aún sin conjuntos. Cree uno para empezar a evaluar.",
 326          "name": "Nombre",
 327          "cases": "Casos",
 328          "actions": "Acciones",
 329          "testCases": "{{name}} — Casos de prueba",
 330          "addCase": "Añadir caso",
 331          "noCases": "Aún sin casos de prueba. Añada preguntas para evaluar su proyecto.",
 332          "addFirstCase": "Añadir primer caso",
 333          "question": "Pregunta",
 334          "expectedAnswer": "Respuesta esperada",
 335          "runs": "Ejecuciones de evaluación",
 336          "noRuns": "Aún sin ejecuciones. Seleccione un conjunto y haga clic en el botón de reproducir para empezar.",
 337          "run": "Ejecución",
 338          "status": "Estado",
 339          "scores": "Puntuaciones",
 340          "scoreTrend": "Tendencia de puntuación",
 341          "runResults": "Resultados de la ejecución #{{id}}",
 342          "answer": "Respuesta",
 343          "metric": "Métrica",
 344          "score": "Puntuación",
 345          "reason": "Motivo",
 346          "newDatasetTitle": "Nuevo conjunto de evaluación",
 347          "description": "Descripción",
 348          "addTestCase": "Añadir caso de prueba",
 349          "expectedOptional": "Respuesta esperada (opcional)",
 350          "expectedHelp": "Proporcione una respuesta de referencia para activar la métrica 'corrección'",
 351          "runEval": "Ejecutar evaluación",
 352          "selectMetrics": "Seleccione qué métricas evaluar. Cada caso de prueba se puntuará por métrica.",
 353          "answerRelevancy": "Relevancia de la respuesta — ¿La respuesta es relevante para la pregunta?",
 354          "faithfulness": "Fidelidad — ¿La respuesta está fundamentada en el contexto recuperado? (solo RAG)",
 355          "correctness": "Corrección — ¿La respuesta coincide con la respuesta esperada?",
 356          "starting": "Iniciando…",
 357          "start": "Iniciar",
 358          "confirmDeleteDataset": "¿Eliminar este conjunto y todos sus casos de prueba?",
 359          "confirmDeleteRun": "¿Eliminar esta ejecución de evaluación?"
 360        },
 361        "guardAnalytics": {
 362          "title": "Analíticas de guards",
 363          "noData": "No hay datos de guards. Configure guards de entrada o salida en este proyecto para empezar a hacer seguimiento.",
 364          "totalChecks": "Total de comprobaciones",
 365          "blocked": "Bloqueadas",
 366          "blockRate": "Tasa de bloqueo",
 367          "warnings": "Avisos",
 368          "events": "Eventos de guard",
 369          "recentBlocked": "Solicitudes bloqueadas recientes ({{count}})",
 370          "noBlocked": "Aún sin solicitudes bloqueadas.",
 371          "date": "Fecha",
 372          "phase": "Fase",
 373          "guard": "Guard",
 374          "text": "Texto",
 375          "guardResponse": "Respuesta del guard",
 376          "loggingDisabled": "(registro desactivado)",
 377          "phaseInput": "entrada",
 378          "phaseOutput": "salida"
 379        },
 380        "infoKnowledge": {
 381          "title": "Ajustes RAG",
 382          "documents": "Documentos",
 383          "embeddings": "Embeddings",
 384          "vectorStore": "Almacén vectorial",
 385          "topK": "Documentos Top-K",
 386          "scoreCutoff": "Corte de puntuación",
 387          "colbertRerank": "Reordenación ColBERT",
 388          "llmRerank": "Reordenación LLM",
 389          "cache": "Caché",
 390          "cacheThreshold": "Umbral de caché",
 391          "sqlConnection": "Conexión SQL",
 392          "sqlTables": "Tablas SQL",
 393          "knowledgeGraph": "Grafo de conocimiento",
 394          "logging": "Registro",
 395          "rateLimit": "Límite de tasa",
 396          "rateLimitValue": "{{value}} solicitudes/min",
 397          "inputGuard": "Guard de entrada",
 398          "outputGuard": "Guard de salida",
 399          "guardMode": "Modo de guard",
 400          "guardWarn": "Avisar",
 401          "guardBlock": "Bloquear",
 402          "censorshipMessage": "Mensaje de censura",
 403          "autoSync": "Sincronización automática",
 404          "autoSyncActive_one": "Activa ({{count}} fuente)",
 405          "autoSyncActive_other": "Activa ({{count}} fuentes)",
 406          "configured": "Configurado"
 407        },
 408        "kgTabs": {
 409          "entities": "Entidades",
 410          "graph": "Grafo",
 411          "query": "Consulta"
 412        },
 413        "block": {
 414          "config": "Configuración de bloques",
 415          "status": "Estado",
 416          "configured": "Configurado",
 417          "notConfigured": "No configurado",
 418          "topBlocks": "Bloques de nivel superior",
 419          "variables": "Variables"
 420        },
 421        "ide": {
 422          "title": "IDE de bloques",
 423          "subtitleWithAi": "Componga visualmente su proyecto de bloques. Use \"Generar con IA\" para obtener un espacio de trabajo inicial.",
 424          "subtitle": "Componga visualmente su proyecto de bloques.",
 425          "generateAi": "Generar con IA",
 426          "dialogTitle": "Generar espacio de trabajo con IA",
 427          "dialogHelp": "Describa en lenguaje sencillo lo que este proyecto de bloques debe hacer. El LLM del sistema generará un espacio de trabajo inicial que podrá editar.",
 428          "placeholder": "ej. \"Clasifica los mensajes de los usuarios como facturación, técnico o ventas, y reenvía cada uno al subproyecto correcto\"",
 429          "warning": "Esto sustituye el espacio de trabajo actual. Guarde primero los bloques existentes si los necesita.",
 430          "generating": "Generando…",
 431          "generate": "Generar",
 432          "workspaceSaved": "Espacio de trabajo guardado",
 433          "workspaceGenerated": "Espacio de trabajo generado — revise y guarde cuando esté listo"
 434        },
 435          "sync": "Sincronización externa",
 436          "syncEnabled": "Activar sincronización programada",
 437          "syncSources": "Fuentes de sincronización",
 438          "addSource": "Añadir fuente",
 439          "syncNow": "Sincronizar ahora",
 440          "bulkIngest": "Ingesta masiva de archivos",
 441          "uploadFiles": "Cargar archivos",
 442          "uploading": "Cargando...",
 443          "queuedFiles": "{{count}} archivo(s) en cola para ingesta.",
 444          "ingestHelp": "PDF / DOCX / CSV / XLSX / TXT. Procesado de forma asíncrona por el cron bulk_ingest."
 445        },
 446        "security": {
 447          "guards": "Guards de prompt",
 448          "inputGuard": "Guard de entrada",
 449          "inputGuardHint": "Proyecto guard que valida las preguntas del usuario antes de que se ejecute el proyecto principal",
 450          "outputGuard": "Guard de salida",
 451          "guardMode": "Modo del guard",
 452          "guardModeBlock": "Bloquear",
 453          "guardModeWarn": "Solo avisar",
 454          "rateLimit": "Límite de tasa (solicitudes/min)",
 455          "rateLimitHint": "Máximo de solicitudes por minuto. Dejar vacío para ilimitado.",
 456          "redactInferenceLogs": "Ocultar datos sensibles en los registros de inferencia",
 457          "inviteUser": "Invitar usuario",
 458          "privacy": "Privacidad y acceso"
 459        },
 460        "integrations": {
 461          "telegram": "Telegram",
 462          "slack": "Slack",
 463          "whatsapp": "WhatsApp Business Cloud API",
 464          "email": "Correo (SMTP) — usado por la herramienta send_email",
 465          "sms": "SMS (Twilio) — usado por la herramienta send_sms",
 466          "webhooks": "Webhooks de eventos salientes",
 467          "telegramToken": "Token del bot de Telegram",
 468          "telegramTokenHint": "Pegue el token de @BotFather para conectar este proyecto a Telegram",
 469          "telegramDefaultChatId": "ID de chat de Telegram predeterminado",
 470          "telegramAllowedChatIds": "IDs de chat de Telegram permitidos (entrada)",
 471          "slackBotToken": "Token del bot de Slack",
 472          "slackAppToken": "Token de aplicación de Slack",
 473          "webhookUrl": "URL del webhook",
 474          "webhookUrlHelp": "Configure esta URL en Meta Business Suite → WhatsApp → Configuración → Webhooks.",
 475          "phoneNumberId": "ID del número de teléfono",
 476          "accessToken": "Token de acceso",
 477          "appSecret": "Secreto de la aplicación",
 478          "verifyToken": "Token de verificación",
 479          "defaultRecipient": "Destinatario predeterminado",
 480          "allowedPhoneNumbers": "Números de teléfono de remitentes permitidos",
 481          "testConnection": "Probar conexión",
 482          "testing": "Probando…",
 483          "smtpHost": "Servidor SMTP",
 484          "smtpPort": "Puerto SMTP",
 485          "smtpUsername": "Usuario SMTP",
 486          "smtpPassword": "Contraseña SMTP",
 487          "fromAddress": "Dirección del remitente",
 488          "twilioSid": "Twilio Account SID",
 489          "twilioToken": "Twilio Auth Token",
 490          "twilioFrom": "Número remitente (E.164)",
 491          "genericWebhookUrl": "URL del webhook",
 492          "signingSecret": "Secreto de firma",
 493          "subscribedEvents": "Eventos suscritos (CSV)",
 494          "sendTest": "Enviar evento de prueba"
 495        },
 496        "tools": {
 497          "builtinTools": "Herramientas integradas",
 498          "mcpServers": "Servidores MCP",
 499          "addMcp": "Añadir servidor MCP",
 500          "mcpHost": "URL o comando",
 501          "mcpArguments": "Argumentos",
 502          "mcpEnvVars": "Variables de entorno",
 503          "mcpHeaders": "Cabeceras",
 504          "mcpCheck": "Comprobar",
 505          "mcpProbing": "Sondeando...",
 506          "customTools": "Herramientas creadas por el agente",
 507          "toolEnabled": "Activada",
 508          "toolDeleteConfirm": "¿Eliminar esta herramienta?",
 509          "selectTools": "Seleccionar herramientas"
 510        },
 511        "secrets": {
 512          "title": "Secretos del proyecto",
 513          "subtitle": "Credenciales cifradas que el Navegador de Agente puede usar sin exponerlas al LLM",
 514          "add": "Añadir secreto",
 515          "name": "Nombre",
 516          "value": "Valor",
 517          "description": "Descripción",
 518          "created": "Creado"
 519        },
 520        "mobile": {
 521          "title": "Integración móvil",
 522          "subtitle": "Empareje clientes Android/iOS con este proyecto mediante un código QR",
 523          "intro": "Escanee el código QR con la aplicación móvil RESTai (Android hoy, más plataformas próximamente) para tener un chat de solo lectura con este proyecto. La aplicación solo usa el modo chat (streaming). Desactive o regenere para revocar todos los teléfonos emparejados de una vez.",
 524          "enable": "Activar integración móvil",
 525          "disable": "Desactivar",
 526          "regenerate": "Regenerar clave",
 527          "regenerating": "Regenerando…",
 528          "copyPayload": "Copiar payload sin formato (JSON)",
 529          "keyChip": "clave {{prefix}}…",
 530          "hint": "Muestre este QR a tantos teléfonos como desee — todos comparten la misma clave de solo lectura. Haga clic en <1>Regenerar clave</1> para invalidar todos los teléfonos emparejados de una vez.",
 531          "offMessage": "La integración móvil está desactivada. No existe ninguna clave de API para aplicaciones móviles en este proyecto.",
 532          "qrHint": "Escanee este código QR con la aplicación móvil RESTai."
 533        },
 534        "routines": {
 535          "title": "Rutinas",
 536          "subtitle": "Mensajes programados que se disparan automáticamente en este proyecto",
 537          "new": "Nueva rutina",
 538          "name": "Nombre",
 539          "message": "Mensaje",
 540          "schedule": "Programación",
 541          "fireNow": "Disparar ahora",
 542          "history": "Historial"
 543        },
 544        "analytics": {
 545          "title": "Analíticas de conversaciones",
 546          "conversations": "Conversaciones",
 547          "messages": "Mensajes",
 548          "avgMsgsPerConv": "Msjs/conv. media",
 549          "avgLatency": "Latencia media",
 550          "dailyActivity": "Actividad diaria",
 551          "peakHours": "Horas pico",
 552          "topUsers": "Principales usuarios",
 553          "outcomeBreakdown": "Desglose de resultados",
 554          "latencyDistribution": "Distribución de latencia",
 555          "llmUsage": "Uso de LLM",
 556          "messagesLabel": "Mensajes",
 557          "conversationsLabel": "Conversaciones",
 558          "requests": "Solicitudes",
 559          "msgs": "Msjs",
 560          "tokens": "Tokens"
 561        }
 562      }
 563    },
 564    "chat": {
 565      "placeholder": "Escriba un mensaje... (Shift+Enter para nueva línea)",
 566      "send": "Enviar",
 567      "stop": "Detener generación",
 568      "clear": "Limpiar chat",
 569      "attachImage": "Adjuntar imagen",
 570      "attachFiles": "Adjuntar archivos — las imágenes van al modelo de visión, el resto se ubica en /home/user/uploads/ para la herramienta de terminal",
 571      "thinking": "Pensando...",
 572      "stoppedSuffix": "(detenido)",
 573      "getStarted": "Envíe un mensaje para empezar.",
 574      "guardHit": "Esta pregunta activó el guard de prompt.",
 575      "ragNoSources": "No se encontraron fuentes. Pruebe a reducir el corte de puntuación.",
 576      "error": {
 577        "sessionExpired": "Su sesión ha expirado. Inicie sesión de nuevo.",
 578        "budgetExhausted": "Presupuesto del proyecto agotado. Contacte con un administrador para recargarlo.",
 579        "forbidden": "No tiene permiso para usar este proyecto.",
 580        "notFound": "Proyecto no encontrado o eliminado.",
 581        "tooLarge": "Su mensaje o adjunto es demasiado grande.",
 582        "invalid": "La solicitud no coincide con el formato esperado por el proyecto.",
 583        "invalidDetail": "Solicitud inválida: {{detail}}",
 584        "rateLimit": "Límite de solicitudes superado — espere un momento e inténtelo de nuevo.",
 585        "quotaReached": "Cuota de la clave de API alcanzada. {{detail}}",
 586        "internal": "El proyecto encontró un error. Consulte los registros del servidor o inténtelo de nuevo.",
 587        "overloaded": "El servicio está temporalmente sobrecargado. Reinténtelo en un momento.",
 588        "timeout": "La solicitud expiró. El LLM tardó demasiado en responder.",
 589        "default": "Error: {{detail}}",
 590        "generic": "Error: la solicitud falló. Compruebe su conexión e inténtelo de nuevo."
 591      }
 592    },
 593    "users": {
 594      "title": "Usuarios",
 595      "subtitle": "Usuarios de la plataforma, sus roles y acceso a proyectos",
 596      "new": "Nuevo usuario",
 597      "emptyTitle": "Aún no hay usuarios",
 598      "emptyMessage": "Los usuarios de la plataforma aparecen aquí. Añada un primer administrador o miembro para empezar.",
 599      "roleFilter": "Rol",
 600      "accessFilter": "Acceso",
 601      "roleAdmin": "Administrador",
 602      "roleUser": "Usuario",
 603      "accessReadOnly": "Solo lectura",
 604      "accessReadWrite": "Lectura/Escritura",
 605      "bulkDelete": "Eliminar",
 606      "bulkDeleteConfirm": "¿Eliminar {{count}} usuario(s)?\n\n{{names}}",
 607      "bulkDeleted": "{{count}} usuario(s) eliminado(s)",
 608      "bulkFailed": "Error al eliminar {{count}} usuario(s)",
 609      "noUsers": "Aún no hay usuarios.",
 610      "fields": {
 611        "username": "Usuario",
 612        "password": "Contraseña",
 613        "confirmPassword": "Confirmar contraseña",
 614        "isAdmin": "Administrador",
 615        "isRestricted": "Acceso de solo lectura",
 616        "isPrivate": "Solo IA local"
 617      },
 618      "tabs": {
 619        "basic": "Información básica",
 620        "password": "Contraseña",
 621        "twoFactor": "Autenticación de dos factores",
 622        "projects": "Proyectos",
 623        "teams": "Equipos",
 624        "apiKeys": "Claves de API",
 625        "activity": "Actividad",
 626        "delete": "Eliminar cuenta"
 627      },
 628      "showMore": "Mostrar más",
 629      "basic": {
 630        "title": "Información básica",
 631        "projects": "Proyectos",
 632        "roleAdmin": "Administrador",
 633        "roleRegular": "Regular",
 634        "authSso": "SSO",
 635        "authLocal": "Local",
 636        "impersonate": "Suplantar",
 637        "restricted": "Restringido",
 638        "restrictedHelp": "Los usuarios restringidos solo pueden conversar con los proyectos existentes. No pueden crear, editar o eliminar proyectos, ingerir datos ni usar endpoints de acceso directo.",
 639        "language": "Idioma",
 640        "languageHelp": "Idioma de la interfaz. Se aplica al guardar los cambios.",
 641        "saveChanges": "Guardar cambios"
 642      },
 643      "password": {
 644        "title": "Contraseña",
 645        "newPassword": "Nueva contraseña",
 646        "confirmPassword": "Confirmar contraseña",
 647        "twoFactorCode": "Código 2FA",
 648        "twoFactorAlert": "La autenticación 2FA está activa. Introduzca un código de su aplicación de autenticación para confirmar el cambio de contraseña.",
 649        "recommendations": "Recomendaciones para la contraseña:",
 650        "recMin": "8 caracteres - cuantos más, mejor",
 651        "recLower": "Al menos una letra minúscula",
 652        "recUpper": "Al menos una letra mayúscula",
 653        "recSymbol": "Al menos un número, símbolo o espacio en blanco",
 654        "saveChanges": "Guardar cambios",
 655        "mismatch": "Las contraseñas no coinciden",
 656        "twoFactorRequired": "Se requiere el código 2FA para cambiar la contraseña"
 657      },
 658      "twoFactor": {
 659        "title": "Autenticación de dos factores",
 660        "description": "Añada una capa adicional de seguridad usando una aplicación TOTP (Google Authenticator, Authy, etc.).",
 661        "enforced": "La 2FA es obligatoria por el administrador para todos los usuarios locales.",
 662        "enabledChip": "2FA activada",
 663        "disabledChip": "2FA desactivada",
 664        "setup": "Configurar 2FA",
 665        "step1": "1. Escanee este código QR con su aplicación de autenticación",
 666        "manualKey": "O introduzca esta clave manualmente:",
 667        "step2": "2. Guarde sus códigos de recuperación",
 668        "recoveryAlert": "Guarde estos códigos de forma segura. Cada código solo puede usarse una vez para iniciar sesión si pierde su autenticador.",
 669        "step3": "3. Confirme con un código y su contraseña",
 670        "code": "Código de 6 dígitos",
 671        "password": "Contraseña",
 672        "enable": "Activar 2FA",
 673        "cannotDisable": "No se puede desactivar (obligatorio)",
 674        "disable": "Desactivar 2FA",
 675        "confirmPassword": "Confirmar contraseña",
 676        "confirmDisable": "Confirmar desactivación",
 677        "setupFailed": "Error al configurar 2FA",
 678        "enabledSuccess": "2FA activada correctamente",
 679        "disabledSuccess": "2FA desactivada"
 680      },
 681      "deleteAccount": {
 682        "title": "Eliminar su cuenta",
 683        "description": "Cuando elimina su cuenta, pierde acceso a todo,",
 684        "confirm": "Confirmo que quiero eliminar mi cuenta.",
 685        "delete": "Eliminar"
 686      },
 687      "userActivity": {
 688        "title": "Actividad (últimos 30 días)",
 689        "requests": "Solicitudes",
 690        "tokens": "Tokens",
 691        "cost": "Coste",
 692        "avgLatency": "Latencia media",
 693        "conversations": "Conversaciones",
 694        "dailyActivity": "Actividad diaria",
 695        "peakHours": "Horas pico",
 696        "topProjects": "Principales proyectos",
 697        "project": "Proyecto"
 698      },
 699      "userProjects": {
 700        "title": "Preferencias generales",
 701        "project": "Proyecto",
 702        "associate": "Asociar",
 703        "dissociate": "Desasociar"
 704      },
 705      "userTeams": {
 706        "title": "Equipos",
 707        "noTeams": "Este usuario no es miembro de ningún equipo.",
 708        "adminOf": "Administrador de",
 709        "noAdmin": "No es administrador de ningún equipo.",
 710        "memberOf": "Miembro de",
 711        "noMember": "Sin pertenencias adicionales a equipos.",
 712        "admin": "Administrador",
 713        "member": "Miembro"
 714      },
 715      "newPage": {
 716        "title": "Crear un nuevo usuario",
 717        "subtitle": "Añada un usuario a la plataforma. Defina sus credenciales y nivel de permiso.",
 718        "account": "Cuenta",
 719        "permissions": "Permisos",
 720        "usernamePlaceholder": "ej. alice",
 721        "adminHelp": "Acceso completo a todos los proyectos, usuarios, equipos y ajustes de la plataforma.",
 722        "restrictedHelp": "El usuario solo puede conversar con proyectos existentes. Sin creación, edición, ingesta ni acceso directo.",
 723        "privateHelp": "Restrinja a este usuario a LLMs y embeddings locales — sin llamadas a proveedores externos.",
 724        "create": "Crear usuario",
 725        "creating": "Creando…",
 726        "passwordsMismatch": "Las contraseñas no coinciden",
 727        "passwordMin": "La contraseña debe tener al menos 8 caracteres",
 728        "usernameRequired": "El usuario es obligatorio",
 729        "passwordRequired": "La contraseña es obligatoria",
 730        "browserTitle": "Nuevo usuario"
 731      },
 732      "pwReq": {
 733        "chars": "Al menos 8 caracteres",
 734        "lower": "Una letra minúscula",
 735        "upper": "Una letra mayúscula",
 736        "digit": "Un número o símbolo",
 737        "tooWeak": "Muy débil",
 738        "weak": "Débil",
 739        "fair": "Aceptable",
 740        "good": "Buena",
 741        "strong": "Fuerte"
 742      },
 743      "apiKeys": {
 744        "title": "Claves de API",
 745        "new": "Nueva clave de API",
 746        "createNew": "Crear nueva clave",
 747        "description": "Descripción",
 748        "descriptionOptional": "Descripción (opcional)",
 749        "keyPrefix": "Prefijo de la clave",
 750        "scope": "Ámbito",
 751        "monthlyQuota": "Cuota mensual",
 752        "created": "Creada",
 753        "readOnly": "Solo lectura",
 754        "allowedProjects": "{{count}} proyecto(s)",
 755        "allProjects": "Todos los proyectos",
 756        "unlimited": "Ilimitada",
 757        "quotaTokens": "{{used}} / {{cap}} tokens",
 758        "quotaResets": "se reinicia {{date}}",
 759        "editQuota": "Editar cuota",
 760        "quotaDialogTitle": "Cuota mensual de tokens",
 761        "quotaUsedThis": "Clave {{prefix}}... — usó {{used}} tokens en este periodo.",
 762        "quotaInput": "Cuota de tokens (mensual)",
 763        "quotaInputHelper": "Deje vacío o ponga 0 para ilimitada. El contador se reinicia el día 1 del mes siguiente.",
 764        "resetUsage": "Reiniciar uso",
 765        "noKeys": "Aún no hay claves de API",
 766        "quotaSaved": "Cuota actualizada.",
 767        "usageReset": "Uso reiniciado.",
 768        "actions": "Acciones",
 769        "deleteConfirm": "¿Seguro que desea eliminar esta clave de API?",
 770        "createDialog": "Crear clave de API",
 771        "restrictProjects": "Restringir a proyectos (opcional)",
 772        "restrictHelp": "Deje vacío para acceso a todos sus proyectos",
 773        "readOnlyCheckbox": "Solo lectura (puede consultar pero no modificar proyectos)",
 774        "saveKeyTitle": "Guarde su clave de API",
 775        "saveKeyWarn": "Esta es la única vez que se mostrará la clave completa. Cópiela ahora.",
 776        "projectLabel": "Proyecto {{id}}",
 777        "tokens": "tokens"
 778      }
 779    },
 780    "teams": {
 781      "title": "Equipos",
 782      "subtitle": "Grupos de usuarios con acceso compartido a LLM, embeddings y proyectos",
 783      "new": "Nuevo equipo",
 784      "emptyTitle": "Aún no hay equipos",
 785      "emptyMessage": "Los equipos delimitan el acceso a LLMs, presupuestos y la pertenencia a proyectos. Cree uno para empezar a organizar usuarios.",
 786      "role": {
 787        "label": "Su rol",
 788        "platformAdmin": "Administrador de la plataforma",
 789        "teamAdmin": "Administrador del equipo",
 790        "member": "Miembro"
 791      },
 792      "noTeams": "Aún no hay equipos.",
 793      "columns": {
 794        "name": "Nombre",
 795        "description": "Descripción",
 796        "users": "Usuarios",
 797        "projects": "Proyectos"
 798      },
 799      "actions": {
 800        "view": "Ver",
 801        "edit": "Editar",
 802        "delete": "Eliminar"
 803      },
 804      "deleteConfirm": "¿Eliminar el equipo \"{{name}}\"?",
 805      "deleted": "Equipo eliminado",
 806      "edit": {
 807        "newTitle": "Nuevo equipo",
 808        "editTitle": "Editar equipo",
 809        "name": "Nombre del equipo",
 810        "description": "Descripción",
 811        "budget": "Presupuesto (-1 = ilimitado)",
 812        "budgetHelp": "Establezca en -1 para presupuesto ilimitado",
 813        "tabs": {
 814          "users": "Usuarios",
 815          "projects": "Proyectos",
 816          "models": "Modelos",
 817          "branding": "Marca"
 818        },
 819        "members": "Miembros del equipo",
 820        "selectUsers": "Seleccionar usuarios",
 821        "admins": "Administradores del equipo",
 822        "selectAdmins": "Seleccionar administradores",
 823        "adminsHelp": "Los administradores del equipo pueden gestionar los ajustes y miembros del equipo",
 824        "invite": "Invitar usuario",
 825        "inviteHelp": "Envíe una invitación a un usuario por nombre de usuario. Podrá aceptar o rechazar.",
 826        "username": "Usuario",
 827        "sendInvite": "Enviar invitación",
 828        "projectsHeading": "Proyectos del equipo",
 829        "selectProjects": "Seleccionar proyectos",
 830        "projectsHelp": "Los proyectos asignados a este equipo estarán accesibles para todos los miembros",
 831        "llms": "LLMs del equipo",
 832        "selectLlms": "Seleccionar LLMs",
 833        "embeddings": "Modelos de embedding del equipo",
 834        "selectEmbeddings": "Seleccionar embeddings",
 835        "imageGen": "Generadores de imagen",
 836        "selectImageGen": "Seleccionar generadores de imagen",
 837        "noImageGen": "No hay generadores de imagen disponibles. Puede que la GPU no esté activada en esta instancia.",
 838        "audioGen": "Generadores de audio",
 839        "selectAudioGen": "Seleccionar generadores de audio",
 840        "noAudioGen": "No hay generadores de audio disponibles. Puede que la GPU no esté activada en esta instancia.",
 841        "branding": "Marca personalizada",
 842        "brandingHelp": "Personalice la apariencia de la plataforma para los miembros del equipo. Deje los campos vacíos para usar los valores predeterminados.",
 843        "appName": "Nombre de la aplicación",
 844        "appNameHelp": "Sustituye el nombre de la plataforma en la barra lateral",
 845        "logoUrl": "URL del logotipo",
 846        "logoUrlHelp": "URL o data:image/... para el logotipo de la barra lateral",
 847        "primaryColor": "Color primario",
 848        "primaryColorHelp": "Color hexadecimal para la cabecera y elementos principales",
 849        "secondaryColor": "Color secundario",
 850        "secondaryColorHelp": "Color hexadecimal para acentos y elementos secundarios",
 851        "welcomeMessage": "Mensaje de bienvenida",
 852        "welcomeHelp": "Se muestra en la página de inicio para los miembros del equipo",
 853        "preview": "Vista previa",
 854        "createTeam": "Crear equipo",
 855        "saveChanges": "Guardar cambios",
 856        "created": "Equipo creado correctamente",
 857        "updated": "Equipo actualizado correctamente"
 858      },
 859      "view": {
 860        "loading": "Cargando detalles del equipo…",
 861        "notFoundTitle": "No encontrado",
 862        "notFound": "Equipo no encontrado o sin permiso para verlo.",
 863        "noDescription": "Sin descripción",
 864        "spent": "Gastado (este mes):",
 865        "left": "restante",
 866        "unlimited": "Presupuesto ilimitado",
 867        "edit": "Editar equipo",
 868        "tabs": {
 869          "transactions": "Transacciones"
 870        },
 871        "noMembers": "Sin miembros del equipo",
 872        "noAdmins": "Sin administradores del equipo",
 873        "noProjects": "Sin proyectos asignados a este equipo",
 874        "noLlms": "Sin LLMs asignados a este equipo",
 875        "noEmbeddings": "Sin modelos de embedding asignados a este equipo",
 876        "noImageGen": "Sin generadores de imagen asignados a este equipo",
 877        "noAudioGen": "Sin generadores de audio asignados a este equipo",
 878        "removeUser": "Quitar usuario",
 879        "removeAdmin": "Quitar privilegios de administrador",
 880        "removeProject": "Quitar proyecto",
 881        "removeLlm": "Quitar LLM",
 882        "removeEmbedding": "Quitar embedding",
 883        "removeImageGen": "Quitar generador de imagen",
 884        "removeAudioGen": "Quitar generador de audio",
 885        "you": "(Usted)",
 886        "transactions": "Transacciones",
 887        "tx": {
 888          "date": "Fecha",
 889          "project": "Proyecto",
 890          "user": "Usuario",
 891          "llm": "LLM",
 892          "inTokens": "Tokens de entrada",
 893          "outTokens": "Tokens de salida",
 894          "cost": "Coste",
 895          "noTransactions": "No se encontraron transacciones"
 896        },
 897        "confirmRemove": "¿Seguro que desea quitar a {{name}} de este equipo?",
 898        "confirmRemoveAdmin": "¿Seguro que desea quitar los privilegios de administrador a {{name}}?",
 899        "confirmRemoveProject": "¿Seguro que desea quitar este proyecto del equipo?",
 900        "removed": "{{name}} eliminado del equipo",
 901        "adminRemoved": "Privilegios de administrador retirados a {{name}}",
 902        "projectRemoved": "Proyecto eliminado del equipo"
 903      }
 904    },
 905    "llms": {
 906      "title": "LLMs",
 907      "subtitle": "Proveedores de modelos de lenguaje disponibles para sus equipos",
 908      "new": "Añadir LLM",
 909      "emptyTitle": "Ningún LLM configurado",
 910      "emptyMessage": "Registre al menos un LLM (OpenAI, Anthropic, Ollama, etc.) antes de que sus equipos puedan crear proyectos de chat o RAG.",
 911      "columns": {
 912        "name": "Nombre",
 913        "class": "Clase",
 914        "context": "Contexto",
 915        "privacy": "Privacidad"
 916      },
 917      "tooltip": {
 918        "class": "Clase",
 919        "privacy": "Privacidad",
 920        "context": "Contexto",
 921        "cost": "Coste",
 922        "costIn": "entrada",
 923        "costOut": "salida",
 924        "tokens": "tokens"
 925      },
 926      "noLlms": "Ningún LLM configurado.",
 927      "actions": {
 928        "view": "Ver",
 929        "edit": "Editar",
 930        "delete": "Eliminar"
 931      },
 932      "edit": {
 933        "title": "Editar LLM - {{name}}",
 934        "name": "Nombre",
 935        "className": "Nombre de la clase",
 936        "options": "Opciones",
 937        "listModels": "Listar modelos",
 938        "loading": "Cargando…",
 939        "modelsAvailable_one": "{{count}} modelo disponible — haga clic para seleccionar",
 940        "modelsAvailable_other": "{{count}} modelos disponibles — haga clic para seleccionar",
 941        "modelsNone": "No se encontraron modelos. Compruebe la URL base de la API y la clave de API en las opciones de abajo.",
 942        "privacy": "Privacidad",
 943        "description": "Descripción",
 944        "inputCost": "Coste de entrada",
 945        "outputCost": "Coste de salida",
 946        "contextWindow": "Ventana de contexto",
 947        "contextHelp": "Número máximo de tokens que el LLM puede procesar",
 948        "saveChanges": "Guardar cambios"
 949      },
 950      "info": {
 951        "class": "Clase",
 952        "privacy": "Privacidad",
 953        "options": "Opciones",
 954        "description": "Descripción",
 955        "inputCost": "Coste de entrada (por millón de tokens)",
 956        "outputCost": "Coste de salida (por millón de tokens)",
 957        "contextWindow": "Ventana de contexto",
 958        "tokens": "tokens",
 959        "confirmDelete": "¿Seguro que desea eliminar el LLM {{name}}?",
 960        "deleteConfirm": "¿Eliminar LLM \"{{name}}\"?",
 961        "deleted": "{{name}} eliminado"
 962      },
 963      "chooser": {
 964        "title": "Añadir un nuevo LLM",
 965        "subtitle": "Conecte un modelo de lenguaje a su plataforma. Elija la ruta más rápida según dónde esté alojado su modelo.",
 966        "fastest": "Más rápido",
 967        "ollama": "Importar de Ollama",
 968        "ollamaDesc": "Conéctese a una instancia local o remota de Ollama e importe sus modelos instalados con un clic.",
 969        "manual": "Añadir manualmente",
 970        "manualDesc": "Configure cualquier proveedor compatible — OpenAI, Anthropic, Azure, Bedrock, Gemini, y más.",
 971        "featAutoCtx": "Detecta automáticamente la ventana de contexto",
 972        "featVision": "Detecta la capacidad de visión",
 973        "featZeroConfig": "Cero configuración manual",
 974        "featBulk": "Importación masiva soportada",
 975        "feat13": "Más de 13 integraciones de proveedores",
 976        "featCompat": "Endpoints compatibles con OpenAI",
 977        "featFineGrain": "Opciones detalladas por modelo",
 978        "featCredentials": "Control total sobre las credenciales"
 979      },
 980      "interactive": {
 981        "title": "Elija un proveedor",
 982        "subtitle": "Elija el proveedor que aloja su modelo. Configuraremos los campos correctos automáticamente.",
 983        "searchPlaceholder": "Buscar proveedores…",
 984        "noProviders": "Ningún proveedor coincide con su búsqueda.",
 985        "back": "Volver a los proveedores",
 986        "newX": "Nuevo LLM {{provider}}",
 987        "general": "General",
 988        "name": "Nombre",
 989        "namePlaceholder": "Nombre único para este LLM",
 990        "description": "Descripción",
 991        "descPlaceholder": "Descripción corta opcional",
 992        "contextWindow": "Ventana de contexto",
 993        "maxTokens": "Tokens máximos",
 994        "providerOptions": "Opciones de {{provider}}",
 995        "rawOptions": "Opciones en bruto (JSON)",
 996        "rawHelp": "Se actualizan automáticamente a partir de los campos de arriba. Haga clic en los valores para editarlos, o use +/- para añadir/quitar opciones personalizadas.",
 997        "createLlm": "Crear LLM",
 998        "nameRequired": "El nombre es obligatorio"
 999      },
1000      "newBreadcrumb": "Nuevo LLM",
1001      "manualCrumb": "Manual"
1002    },
1003    "embeddings": {
1004      "title": "Embeddings",
1005      "subtitle": "Modelos de embedding usados por los proyectos RAG",
1006      "new": "Añadir embedding",
1007      "emptyTitle": "Ningún embedding configurado",
1008      "emptyMessage": "Registre un modelo de embedding para activar proyectos RAG. Variantes de OpenAI, HuggingFace y Ollama funcionan.",
1009      "columns": {
1010        "name": "Nombre",
1011        "class": "Clase",
1012        "privacy": "Privacidad",
1013        "dimensions": "Dimensiones"
1014      },
1015      "tooltip": {
1016        "class": "Clase",
1017        "privacy": "Privacidad",
1018        "dimensions": "Dimensiones"
1019      },
1020      "noEmbeddings": "Ningún embedding configurado.",
1021      "actions": {
1022        "view": "Ver",
1023        "edit": "Editar",
1024        "delete": "Eliminar"
1025      },
1026      "edit": {
1027        "title": "Editar embedding - {{name}}",
1028        "name": "Nombre",
1029        "className": "Nombre de la clase",
1030        "options": "Opciones",
1031        "privacy": "Privacidad",
1032        "description": "Descripción",
1033        "dimension": "Dimensión",
1034        "saveChanges": "Guardar cambios"
1035      },
1036      "info": {
1037        "class": "Clase",
1038        "privacy": "Privacidad",
1039        "options": "Opciones",
1040        "description": "Descripción",
1041        "dimension": "Dimensión",
1042        "confirmDelete": "¿Seguro que desea eliminar el embedding {{name}}?",
1043        "deleteConfirm": "¿Eliminar embedding \"{{name}}\"?",
1044        "deleted": "{{name}} eliminado"
1045      },
1046      "chooser": {
1047        "title": "Añadir un nuevo embedding",
1048        "subtitle": "Conecte un modelo de embedding para potenciar la recuperación de conocimiento RAG. Elija la ruta más rápida según dónde esté alojado su modelo.",
1049        "fastest": "Más rápido",
1050        "ollama": "Importar de Ollama",
1051        "ollamaDesc": "Conéctese a una instancia local o remota de Ollama e importe sus modelos de embedding instalados con un clic.",
1052        "manual": "Añadir manualmente",
1053        "manualDesc": "Configure cualquier proveedor de embeddings compatible (HuggingFace, OpenAI, LangChain, Ollama, etc.).",
1054        "featAutoDim": "Detecta automáticamente la dimensión del embedding",
1055        "featCapability": "Detecta la capacidad del modelo",
1056        "featZeroConfig": "Cero configuración manual",
1057        "featBulk": "Importación masiva soportada",
1058        "featMulti": "Varias integraciones de proveedores",
1059        "featHf": "HuggingFace, OpenAI, LangChain",
1060        "featFineGrain": "Opciones detalladas por modelo",
1061        "featCredentials": "Control total sobre las credenciales"
1062      },
1063      "interactive": {
1064        "title": "Elija un proveedor",
1065        "subtitle": "Elija el proveedor que aloja su modelo de embedding. Configuraremos los campos correctos automáticamente.",
1066        "searchPlaceholder": "Buscar proveedores…",
1067        "noProviders": "Ningún proveedor coincide con su búsqueda.",
1068        "back": "Volver a los proveedores",
1069        "newX": "Nuevo {{provider}}",
1070        "general": "General",
1071        "name": "Nombre",
1072        "namePlaceholder": "Nombre único para este embedding",
1073        "description": "Descripción",
1074        "descPlaceholder": "Descripción corta opcional",
1075        "dimension": "Dimensión",
1076        "vectorSize": "Tamaño del vector",
1077        "providerOptions": "Opciones de {{provider}}",
1078        "rawOptions": "Opciones en bruto (JSON)",
1079        "rawHelp": "Se actualizan automáticamente a partir de los campos de arriba. Haga clic en los valores para editarlos, o use +/- para añadir/quitar opciones personalizadas.",
1080        "createEmbedding": "Crear embedding",
1081        "nameRequired": "El nombre es obligatorio"
1082      },
1083      "newBreadcrumb": "Nuevo embedding",
1084      "manualCrumb": "Manual",
1085      "newCardTitle": "Añadir un nuevo embedding",
1086      "submit": "Enviar"
1087    },
1088    "audit": {
1089      "title": "Registro de auditoría",
1090      "entries_one": "{{count}} entrada",
1091      "entries_other": "{{count}} entradas",
1092      "filterUser": "Usuario",
1093      "filterAction": "Acción",
1094      "filterAll": "Todos",
1095      "exportCsv": "Exportar CSV",
1096      "noEntries": "No se encontraron entradas de auditoría",
1097      "page": "Página {{page}} de {{total}}",
1098      "columns": {
1099        "date": "Fecha",
1100        "user": "Usuario",
1101        "action": "Acción",
1102        "resource": "Recurso",
1103        "status": "Estado"
1104      }
1105    },
1106    "proxy": {
1107      "title": "Proxy de IA",
1108      "breadcrumb": "Proxy de IA",
1109      "info": "Información del proxy",
1110      "host": "Host del proxy",
1111      "availableModels": "Modelos disponibles ({{count}})",
1112      "noModels": "Sin modelos disponibles",
1113      "apiKeys": "Claves de API",
1114      "keys_one": "{{count}} clave",
1115      "keys_other": "{{count}} claves",
1116      "newKey": "Nueva clave",
1117      "noKeys": "Aún sin claves — haga clic en \"Nueva clave\" para crear una",
1118      "columns": {
1119        "name": "Nombre",
1120        "key": "Clave",
1121        "models": "Modelos",
1122        "spend": "Gasto",
1123        "budget": "Presupuesto",
1124        "duration": "Duración",
1125        "rpm": "RPM",
1126        "tpm": "TPM",
1127        "actions": "Acciones"
1128      },
1129      "deleteTip": "Eliminar",
1130      "cannotDeleteDefault": "No se puede eliminar la clave predeterminada",
1131      "deleteConfirm": "¿Eliminar la clave \"{{name}}\"?",
1132      "keyDeleted": "Clave eliminada",
1133      "usageExample": "Ejemplo de uso",
1134      "createTitle": "Crear nueva clave de API",
1135      "copyReveal": "Su nueva clave se ha creado. Cópiela ahora — no se mostrará de nuevo.",
1136      "copyTip": "Copiar",
1137      "fieldName": "Nombre",
1138      "fieldNameHelp": "Nombre descriptivo para esta clave (ej. 'producción', 'equipo-dev')",
1139      "fieldModels": "Modelos",
1140      "fieldModelsHelp": "Modelos que esta clave puede invocar",
1141      "fieldMaxBudget": "Presupuesto máximo (€)",
1142      "fieldMaxBudgetHelp": "Límite total de gasto",
1143      "fieldBudgetReset": "Reinicio de presupuesto",
1144      "fieldBudgetResetHelp": "Cuándo se reinicia el presupuesto",
1145      "fieldRpm": "Límite RPM",
1146      "fieldRpmHelp": "Solicitudes por minuto",
1147      "fieldTpm": "Límite TPM",
1148      "fieldTpmHelp": "Tokens por minuto",
1149      "durations": {
1150        "none": "—",
1151        "hourly": "Por hora",
1152        "daily": "Diario",
1153        "weekly": "Semanal",
1154        "monthly": "Mensual"
1155      },
1156      "nameRequired": "El nombre es obligatorio",
1157      "modelRequired": "Seleccione al menos un modelo",
1158      "created": "Clave creada correctamente",
1159      "creating": "Creando…",
1160      "createKey": "Crear clave",
1161      "done": "Hecho"
1162    },
1163    "direct": {
1164      "title": "Acceso directo",
1165      "breadcrumb": "Acceso directo",
1166      "subtitle": "Acceda a LLMs, embeddings, generadores de imagen y transcripción de audio directamente a través de endpoints de API compatibles con OpenAI. Use su clave de API para la autenticación (Bearer token o Basic auth).",
1167      "baseUrlLine": "URL base: <strong>{{url}}</strong> — gestione sus claves de API en su perfil de usuario.",
1168      "chat": "Chat Completions",
1169      "chatDesc": "Endpoint de chat completions compatible con OpenAI. Admite tanto respuestas en streaming (stream: true) como no-streaming. Funciona con cualquier LLM al que su equipo tenga acceso.",
1170      "embeddings": "Embeddings",
1171      "embeddingsDesc": "Endpoint de embeddings compatible con OpenAI. Genera embeddings vectoriales para entradas de texto. Admite entrada única o por lotes. Funciona con cualquier modelo de embedding al que su equipo tenga acceso.",
1172      "images": "Generación de imagen",
1173      "imagesDesc": "Endpoint de generación de imagen compatible con OpenAI. Admite generadores locales basados en GPU (ej. Stable Diffusion, Flux) y proveedores externos (DALL-E, Imagen). Devuelve imágenes en base64 o URLs de datos.",
1174      "audio": "Transcripción de audio",
1175      "audioDesc": "Endpoint de transcripción de audio compatible con OpenAI. Cargue un archivo de audio (mp3, wav, etc.) y reciba el texto transcrito. Los archivos no-mp3 se convierten automáticamente usando ffmpeg. Admite la especificación de idioma para mayor precisión.",
1176      "availableModels": "Modelos disponibles:",
1177      "availableGenerators": "Generadores disponibles:",
1178      "noLlms": "No hay LLMs disponibles. Pida a su administrador de equipo que conceda acceso a LLMs a su equipo.",
1179      "noEmbeddings": "No hay modelos de embedding disponibles. Pida a su administrador de equipo que conceda acceso a modelos de embedding.",
1180      "noImage": "No hay generadores de imagen disponibles. Pida a su administrador de equipo que conceda acceso, o puede que la GPU no esté activada en esta instancia.",
1181      "noAudio": "No hay generadores de audio disponibles. Pida a su administrador de equipo que conceda acceso, o puede que la GPU no esté activada en esta instancia.",
1182      "pythonSdk": "Python (SDK openai):",
1183      "streamingExample": "Ejemplo con streaming:",
1184      "batchExample": "Ejemplo por lotes:",
1185      "curl": "curl:",
1186      "embeddingChip": "{{name}} (dim: {{dim}})"
1187    },
1188    "classifier": {
1189      "title": "Clasificador",
1190      "breadcrumb": "Clasificador",
1191      "playgroundTitle": "Playground del clasificador",
1192      "model": "Modelo",
1193      "modelHelp": "Modelo de clasificación zero-shot",
1194      "textLabel": "Texto a clasificar",
1195      "textPlaceholder": "Introduzca el texto que desea clasificar…",
1196      "labels": "Etiquetas",
1197      "labelsPlaceholder": "facturación, técnico, ventas, general",
1198      "labelsHelp": "Lista de etiquetas candidatas separadas por comas",
1199      "classify": "Clasificar",
1200      "classifying": "Clasificando…",
1201      "enterBoth": "Introduzca texto y al menos una etiqueta",
1202      "results": "Resultados",
1203      "input": "Entrada",
1204      "inputHint": "Introduzca texto y etiquetas, y luego haga clic en Clasificar",
1205      "modelLabel": "Modelo: {{model}}",
1206      "bestMatch": "Mejor coincidencia: <strong>{{label}}</strong> ({{pct}}%)"
1207    },
1208    "permissions": {
1209      "title": "Permisos",
1210      "failed": "Error al cargar la matriz de permisos",
1211      "stats": {
1212        "users": "Usuarios",
1213        "projects": "Proyectos",
1214        "assignments": "Asignaciones directas",
1215        "admins": "Administradores"
1216      },
1217      "team": "Equipo",
1218      "allTeams": "Todos los equipos",
1219      "noTeam": "(Sin equipo)",
1220      "teamFallback": "Equipo #{{id}}",
1221      "searchPlaceholder": "Buscar usuarios o proyectos…",
1222      "noMatches": "Sin coincidencias",
1223      "header": "USUARIO \\ PROYECTO",
1224      "platformAdminTip": "Administrador de la plataforma (acceso universal)",
1225      "restrictedTip": "Restringido (solo lectura)",
1226      "legendDirect": "Acceso directo",
1227      "legendAdmin": "Administrador (acceso universal)",
1228      "legendRestricted": "Usuario restringido",
1229      "adminAccess": "{{user}} → {{project}} (administrador)",
1230      "directAccess": "{{user}} → {{project}}"
1231    },
1232    "cron": {
1233      "title": "Registros de Cron",
1234      "runNow": "Ejecutar ahora",
1235      "running": "Ejecutando…",
1236      "purge": "Purgar",
1237      "purgeConfirm": "¿Purgar todas las entradas del registro de cron?",
1238      "filterJob": "Tarea",
1239      "filterStatus": "Estado",
1240      "noEntries": "No se encontraron entradas de cron",
1241      "entries_one": "{{count}} entrada",
1242      "entries_other": "{{count}} entradas",
1243      "exportCsv": "Exportar CSV",
1244      "filterAll": "Todos",
1245      "filterSuccess": "Éxito",
1246      "filterError": "Error",
1247      "filterWarning": "Aviso",
1248      "details": "Detalles",
1249      "noOutput": "Sin salida",
1250      "page": "Página {{page}} de {{total}}",
1251      "columns": {
1252        "date": "Fecha",
1253        "job": "Tarea",
1254        "status": "Estado",
1255        "items": "Elementos",
1256        "itemsLong": "Elementos",
1257        "duration": "Duración",
1258        "durationMs": "Duración (ms)",
1259        "message": "Mensaje"
1260      }
1261    },
1262    "speechGen": {
1263      "title": "Voz a texto",
1264      "subtitle": "Workers locales de Whisper / WhisperX + proveedores externos de transcripción (OpenAI, Google, Deepgram, AssemblyAI)",
1265      "breadcrumb": "Voz a texto",
1266      "playground": "Playground",
1267      "new": "Nuevo modelo",
1268      "empty": "Ningún modelo de voz a texto configurado.",
1269      "columns": {
1270        "name": "Nombre",
1271        "provider": "Proveedor",
1272        "model": "Modelo",
1273        "privacy": "Privacidad",
1274        "enabled": "Activado"
1275      },
1276      "actions": {
1277        "edit": "Editar",
1278        "delete": "Eliminar",
1279        "deleteLocal": "Los modelos locales no se pueden eliminar"
1280      },
1281      "dialog": {
1282        "newTitle": "Nuevo modelo de voz a texto",
1283        "editTitle": "Editar {{name}}",
1284        "localInfo": "Modelo local de restai/audio/workers/{{name}}.py. Puede activarlo/desactivarlo, definir privacidad + descripción, y asignarlo a equipos. El proveedor + opciones vienen del módulo worker.",
1285        "name": "Nombre",
1286        "nameHelp": "Identificador seguro para URL — letras, números, puntos, guiones, guiones bajos",
1287        "provider": "Proveedor",
1288        "privacy": "Privacidad",
1289        "privacyPublic": "Público (alojado en la nube)",
1290        "privacyPrivate": "Privado (autoalojado / local)",
1291        "description": "Descripción",
1292        "enabled": "Activado",
1293        "providerOptions": "Opciones del proveedor",
1294        "model": "Modelo",
1295        "modelOptional": "Modelo (opcional)",
1296        "apiKey": "Clave de API",
1297        "apiKeyHelp": "Deje ******** para mantener la clave existente",
1298        "baseUrl": "URL base (opcional, para proveedores compatibles con OpenAI)",
1299        "baseUrlHelp": "Deje vacío para OpenAI. Configúrelo para Groq / Together / vLLM / autoalojado.",
1300        "languageCode": "Código de idioma (predeterminado)",
1301        "defaultLanguage": "Idioma predeterminado",
1302        "speechModel": "Modelo de voz",
1303        "speechBest": "best (máxima precisión)",
1304        "speechNano": "nano (más rápido)",
1305        "saving": "Guardando…",
1306        "save": "Guardar",
1307        "create": "Crear",
1308        "saved": "{{name}} guardado",
1309        "created": "{{name}} creado",
1310        "deleteConfirm": "¿Eliminar el modelo de voz a texto \"{{name}}\"?",
1311        "deleted": "{{name}} eliminado",
1312        "localCannotDelete": "Los modelos locales no se pueden eliminar. Desactívelos en su lugar.",
1313        "enabledToast": "{{name}} activado",
1314        "disabledToast": "{{name}} desactivado"
1315      }
1316    },
1317    "tools": {
1318      "title": "Herramientas del agente",
1319      "subtitle": "Herramientas integradas disponibles para que los proyectos de agente las usen durante las conversaciones.",
1320      "breadcrumb": "Herramientas",
1321      "toolCount": "{{count}} herramientas",
1322      "info": "Este es el catálogo global de herramientas integradas incluidas con RESTai. Cada proyecto de agente puede ampliar esta lista con sus propias herramientas — ya sea conectándose a servidores MCP (configurados en la página de edición del proyecto) o definiendo herramientas creadas por el agente al vuelo a través del builtin create_tool. Las herramientas específicas del proyecto solo aparecen en el chat de ese proyecto, no aquí.",
1323      "searchPlaceholder": "Buscar herramientas…",
1324      "noMatch": "Ninguna herramienta coincide con su búsqueda.",
1325      "noTools": "No hay herramientas disponibles.",
1326      "requiresDocker": "Requiere Docker",
1327      "categories": {
1328        "browser": {
1329          "title": "AUTOMATIZACIÓN DE NAVEGADOR",
1330          "subtitle": "Controla un contenedor Chromium + Playwright por chat. El administrador debe activar el Navegador Agente en Ajustes."
1331        },
1332        "routines": {
1333          "title": "RUTINAS PROGRAMADAS",
1334          "subtitle": "Permite al agente crear, listar y eliminar sus propios mensajes programados en el proyecto anfitrión."
1335        },
1336        "agentControl": {
1337          "title": "CONTROL DEL AGENTE",
1338          "subtitle": "Terminal aislado y creación de herramientas en tiempo de ejecución. Ambos requieren Docker."
1339        },
1340        "communication": {
1341          "title": "COMUNICACIÓN",
1342          "subtitle": "Envío de mensajes: correo (SMTP), SMS (Twilio), Telegram, WhatsApp Cloud API."
1343        },
1344        "web": {
1345          "title": "WEB Y BÚSQUEDA",
1346          "subtitle": "Obtener URLs, buscar en la web y consultar información de dominio o temas."
1347        },
1348        "data": {
1349          "title": "DATOS Y ARCHIVOS",
1350          "subtitle": "Analizar documentos cargados y generar imágenes a partir de prompts de texto."
1351        },
1352        "utility": {
1353          "title": "UTILIDADES",
1354          "subtitle": "Asistentes generales: matemáticas, hora, moderación, aleatoriedad, geolocalización."
1355        }
1356      },
1357      "reqs": {
1358        "requiresDocker": "Requiere Docker",
1359        "usesDocker": "Usa Docker",
1360        "usesBrowser": "Requiere contenedor de navegador",
1361        "adminOptIn": "Opt-in de admin",
1362        "needsSmtp": "Configuración SMTP",
1363        "needsTwilio": "Configuración Twilio",
1364        "needsTelegram": "Bot de Telegram",
1365        "needsWhatsApp": "Configuración WhatsApp",
1366        "perProject": "Por proyecto"
1367      }
1368    },
1369    "imageGen": {
1370      "title": "Generadores de imagen",
1371      "subtitle": "Workers locales + proveedores externos (OpenAI, Google) — los administradores gestionan credenciales por fila",
1372      "breadcrumb": "Generadores de imagen",
1373      "playground": "Playground",
1374      "new": "Nuevo generador",
1375      "empty": "Ningún generador de imagen configurado.",
1376      "columns": {
1377        "name": "Nombre",
1378        "provider": "Proveedor",
1379        "model": "Modelo",
1380        "privacy": "Privacidad",
1381        "enabled": "Activado"
1382      },
1383      "actions": {
1384        "edit": "Editar",
1385        "delete": "Eliminar",
1386        "deleteLocal": "Los generadores locales no se pueden eliminar"
1387      },
1388      "dialog": {
1389        "newTitle": "Nuevo generador de imagen",
1390        "editTitle": "Editar {{name}}",
1391        "localInfo": "Generador local de restai/image/workers/{{name}}.py. Puede activarlo/desactivarlo, definir privacidad + descripción, y asignarlo a equipos. El proveedor + opciones vienen del módulo worker.",
1392        "name": "Nombre",
1393        "nameHelp": "Identificador seguro para URL — letras, números, puntos, guiones, guiones bajos",
1394        "provider": "Proveedor",
1395        "privacy": "Privacidad",
1396        "privacyPublic": "Público (alojado en la nube)",
1397        "privacyPrivate": "Privado (autoalojado / local)",
1398        "description": "Descripción",
1399        "enabled": "Activado",
1400        "providerOptions": "Opciones del proveedor",
1401        "model": "Modelo",
1402        "apiKey": "Clave de API",
1403        "apiKeyHelp": "Deje ******** para mantener la clave existente",
1404        "baseUrl": "URL base (opcional, para proveedores compatibles con OpenAI)",
1405        "baseUrlHelp": "Deje vacío para OpenAI. Configúrelo para Together / Groq / vLLM / autoalojado.",
1406        "saving": "Guardando…",
1407        "save": "Guardar",
1408        "create": "Crear",
1409        "saved": "{{name}} guardado",
1410        "created": "{{name}} creado",
1411        "deleteConfirm": "¿Eliminar el generador de imagen \"{{name}}\"?",
1412        "deleted": "{{name}} eliminado",
1413        "localCannotDelete": "Los generadores locales no se pueden eliminar. Desactívelos en su lugar.",
1414        "enabledToast": "{{name}} activado",
1415        "disabledToast": "{{name}} desactivado"
1416      }
1417    },
1418    "invitations": {
1419      "sent": "Invitación enviada",
1420      "title": "Invitaciones",
1421      "subtitle": "Invitaciones pendientes a equipos y proyectos",
1422      "noInvitations": "Sin invitaciones pendientes",
1423      "teamSection": "Invitaciones a equipos",
1424      "projectSection": "Invitaciones a proyectos",
1425      "invitedBy": "Invitado por {{username}}",
1426      "accept": "Aceptar",
1427      "decline": "Rechazar",
1428      "accepted": "Se unió a {{name}}",
1429      "declined": "{{name}} rechazada",
1430      "failed": "No se pudo {{action}} la invitación a {{name}}"
1431    },
1432    "settings": {
1433      "title": "Ajustes",
1434      "subtitle": "Configuración de la plataforma",
1435      "tabs": {
1436        "general": "General",
1437        "authentication": "Autenticación"
1438      },
1439      "save": "Guardar",
1440      "saved": "Ajustes guardados",
1441      "fields": {
1442        "appName": "Nombre de la aplicación",
1443        "hideBranding": "Ocultar marca",
1444        "currency": "Moneda",
1445        "systemLlm": "LLM del sistema",
1446        "systemLlmHelp": "Modelo base para los asistentes de IA de la plataforma (Búsqueda Inteligente, Generador de Prompt, Generador Blockly). Deje vacío para desactivar estas funciones.",
1447        "enableProxy": "Activar proxy",
1448        "proxyUrl": "URL del proxy",
1449        "proxyKey": "Clave del proxy",
1450        "proxyTeamId": "ID de equipo del proxy",
1451        "maxAudioUploadSize": "Tamaño máximo de carga de audio (MB)",
1452        "dataRetentionDays": "Retención de datos (días)",
1453        "redisHost": "Host de Redis",
1454        "redisHostPlaceholder": "Deje vacío para memoria interna",
1455        "redisPort": "Puerto",
1456        "redisPassword": "Contraseña",
1457        "redisDatabase": "Base de datos",
1458        "enableMcp": "Activar servidor MCP",
1459        "enableDocker": "Activar terminal Docker",
1460        "dockerUrl": "URL de Docker",
1461        "dockerUrlPlaceholder": "unix:///var/run/docker.sock o tcp://host:2375",
1462        "containerImage": "Imagen del contenedor",
1463        "idleTimeout": "Tiempo de espera de inactividad (segundos)",
1464        "networkMode": "Modo de red",
1465        "readOnlyRootfs": "Rootfs de solo lectura",
1466        "testDocker": "Probar conexión",
1467        "enableBrowser": "Activar navegador de agente por chat",
1468        "browserImage": "Imagen del contenedor",
1469        "browserNetwork": "Modo de red",
1470        "browserTimeout": "Tiempo de espera de inactividad (segundos)",
1471        "disableLocalAuth": "Desactivar autenticación local",
1472        "enforce2fa": "Forzar 2FA",
1473        "autoCreateUsers": "Crear usuarios automáticamente",
1474        "allowedDomains": "Dominios permitidos",
1475        "restrictNewUsers": "Restringir nuevos usuarios",
1476        "defaultTeam": "Equipo predeterminado",
1477        "passwordMaxAgeDays": "Caducidad máxima de la contraseña (días)",
1478        "clientId": "ID de cliente",
1479        "clientSecret": "Secreto de cliente",
1480        "redirectUri": "URI de redireccionamiento",
1481        "scope": "Ámbito",
1482        "scopes": "Ámbitos",
1483        "tenantId": "ID del tenant",
1484        "providerUrl": "URL del proveedor",
1485        "providerName": "Nombre del proveedor",
1486        "emailClaim": "Claim de correo"
1487      },
1488      "helpers": {
1489        "systemLlm": "LLM usado por la plataforma para tareas internas (ayudas de prompt, resúmenes, etc.). Deje vacío para desactivar.",
1490        "retention": "Elimina automáticamente los registros más antiguos que este valor. 0 = mantener siempre.",
1491        "containerImage": "Imagen base para los contenedores sandbox",
1492        "dockerTimeout": "Eliminar contenedores tras este número de segundos de inactividad",
1493        "browserImage": "Imagen de Playwright. Necesita Chromium + playwright.sync_api preinstalados.",
1494        "browserTimeout": "Los contenedores no utilizados se eliminan tras este tiempo.",
1495        "allowedDomains": "Dominios de correo separados por comas, o * para todos",
1496        "oidcProviderUrl": "URL de descubrimiento de OpenID Connect",
1497        "oidcProviderName": "Nombre a mostrar en el botón de inicio de sesión",
1498        "autoTeam": "Los usuarios SSO creados automáticamente se añadirán a este equipo",
1499        "telemetryStatus": "Estado: {{status}}",
1500        "saveSettings": "Guardar ajustes",
1501        "saving": "Guardando…"
1502      },
1503      "status": {
1504        "enabled": "Activado",
1505        "disabled": "Desactivado"
1506      },
1507      "telemetry": {
1508        "description": "RESTai envía estadísticas de uso agregadas y anónimas para ayudar al proyecto de código abierto a comprender la adopción y priorizar el desarrollo. Nunca se envían datos personales, prompts, respuestas ni claves de API — solo recuentos (proyectos, usuarios, LLMs) y flags de funcionalidades.",
1509        "optOut": "Para darse de baja, defina la variable de entorno ANONYMIZED_TELEMETRY=false y reinicie el servidor."
1510      },
1511      "sections": {
1512        "general": "General",
1513        "platform": "Plataforma",
1514        "branding": "Marca",
1515        "proxy": "Proxy de LLM",
1516        "limits": "Límites",
1517        "redis": "Redis",
1518        "docker": "Sandbox Docker",
1519        "browser": "Navegador de agente",
1520        "mcp": "Servidor MCP",
1521        "systemLlm": "LLM del sistema",
1522        "authentication": "Autenticación",
1523        "localAuth": "Autenticación local",
1524        "sso": "Inicio de sesión único",
1525        "google": "Google",
1526        "microsoft": "Microsoft",
1527        "github": "GitHub",
1528        "oidc": "OIDC genérico",
1529        "retention": "Retención de datos",
1530        "twoFactor": "Autenticación de dos factores",
1531        "passwordPolicy": "Política de contraseñas",
1532        "telemetry": "Telemetría"
1533      }
1534    },
1535    "widgets": {
1536      "notifications": "Notificaciones"
1537    },
1538    "tabnav": {
1539      "menu": "Menú"
1540    },
1541    "dataList": {
1542      "search": "Buscar...",
1543      "noResults": "No se encontraron elementos",
1544      "noMatches": "Sin resultados para \"{{query}}\"",
1545      "clearSearch": "Limpiar búsqueda",
1546      "selected": "{{count}} seleccionados",
1547      "clear": "Limpiar"
1548    }
1549  }