libre-webui 0.21.1 → 0.21.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/backend/dist/routes/documents.d.ts.map +1 -1
  2. package/backend/dist/routes/documents.js +2 -0
  3. package/backend/dist/routes/documents.js.map +1 -1
  4. package/backend/dist/services/ollamaService.d.ts +11 -1
  5. package/backend/dist/services/ollamaService.d.ts.map +1 -1
  6. package/backend/dist/services/ollamaService.js +101 -3
  7. package/backend/dist/services/ollamaService.js.map +1 -1
  8. package/backend/dist/services/titleGenerationService.d.ts.map +1 -1
  9. package/backend/dist/services/titleGenerationService.js +14 -3
  10. package/backend/dist/services/titleGenerationService.js.map +1 -1
  11. package/backend/package.json +1 -1
  12. package/frontend/dist/artifact-runtime/.build-fingerprint +1 -1
  13. package/frontend/dist/assets/index-BBpNbfKW.js +16 -0
  14. package/frontend/dist/assets/index-BLATyFmD.css +1 -0
  15. package/frontend/dist/index.html +41 -16
  16. package/frontend/dist/js/ArtifactContainer-Dy2Q0iIL.js +1 -0
  17. package/frontend/dist/js/{ArtifactDemoPage-DQBTKgzC.js → ArtifactDemoPage-K79dWshB.js} +1 -1
  18. package/frontend/dist/js/{ArtifactSandboxFrame-CpblpEf4.js → ArtifactSandboxFrame-DhqLNUtY.js} +2 -2
  19. package/frontend/dist/js/ArtifactSlideOutPanel-Cl8JG7bz.js +1 -0
  20. package/frontend/dist/js/{Button-X9TT9gTD.js → Button-CTXHujOd.js} +1 -1
  21. package/frontend/dist/js/ChatPage-BBayfMLS.js +16 -0
  22. package/frontend/dist/js/{FirstTimeSetup-C3ldEPmK.js → FirstTimeSetup-kHhRzGJ8.js} +1 -1
  23. package/frontend/dist/js/{GalleryPage-DrrOhli8.js → GalleryPage-By8VI39Q.js} +1 -1
  24. package/frontend/dist/js/HomePage-C1L8WAXL.js +1 -0
  25. package/frontend/dist/js/LibreClawPage-Dyua8IUu.js +1 -0
  26. package/frontend/dist/js/{ModelManagerModals-D-NxeVvV.js → ModelManagerModals-CuMRGUd-.js} +1 -1
  27. package/frontend/dist/js/ModelSelector-CqHc-Ln4.js +1 -0
  28. package/frontend/dist/js/ModelsPage-ODeXhDDk.js +2 -0
  29. package/frontend/dist/js/{NotesPage-D10aWpVj.js → NotesPage-CApzDjOq.js} +1 -1
  30. package/frontend/dist/js/{PersonasPage-BvCPzwx2.js → PersonasPage-D_6WBCH5.js} +2 -2
  31. package/frontend/dist/js/{PluginUsagePage-B9YgizW8.js → PluginUsagePage-kutS6SOd.js} +1 -1
  32. package/frontend/dist/js/{RichMessageContent-2L-mHp9Q.js → RichMessageContent-g6WT75Te.js} +1 -1
  33. package/frontend/dist/js/SettingsModal-B7z51BCx.js +1 -0
  34. package/frontend/dist/js/{SettingsToggle-bZ5W4CCf.js → SettingsToggle-DLHlCDBl.js} +1 -1
  35. package/frontend/dist/js/{SystemPage-CKnhy0Fr.js → SystemPage-BMWEet9e.js} +1 -1
  36. package/frontend/dist/js/{UserManagementPage-B3gA_Zx8.js → UserManagementPage-D08lM51c.js} +1 -1
  37. package/frontend/dist/js/WorkPage-DdVLefsK.js +6 -0
  38. package/frontend/dist/js/{api-DjQINB7B.js → api-CLEmGcEh.js} +1 -1
  39. package/frontend/dist/js/{appStore-CIV0DhiE.js → appStore-CGdhvp9P.js} +2 -2
  40. package/frontend/dist/js/ar-BTmB2WVm.js +2 -0
  41. package/frontend/dist/js/{authStore-pmXfK_qt.js → authStore-Dh3beEOq.js} +3 -3
  42. package/frontend/dist/js/{bn-C7CHC42H.js → bn-CQnH7YVT.js} +2 -2
  43. package/frontend/dist/js/chatStore-CDeYWL_q.js +3 -0
  44. package/frontend/dist/js/{config-DF-g5uwS.js → config-DkV1ka7I.js} +1 -1
  45. package/frontend/dist/js/{cs-zGEtwQn_.js → cs-oTTZkQXr.js} +2 -2
  46. package/frontend/dist/js/{da-B-0sHNTu.js → da-Br0gB6J6.js} +2 -2
  47. package/frontend/dist/js/{de-UZNE6t2h.js → de-DE2iztTF.js} +2 -2
  48. package/frontend/dist/js/{es-CPLnFYIw.js → es-DgthfVtl.js} +2 -2
  49. package/frontend/dist/js/{estree-livw6QLA.js → estree-D5KP-qbw.js} +1 -1
  50. package/frontend/dist/js/{fr-Br1o0WVz.js → fr-BjxjFwPh.js} +2 -2
  51. package/frontend/dist/js/{hi-BcEvNEpb.js → hi-D1q7E-9N.js} +2 -2
  52. package/frontend/dist/js/{html-CWlKlrlk.js → html-Cm9c2akd.js} +1 -1
  53. package/frontend/dist/js/{id-C30L2DoT.js → id-CDJZqLTF.js} +2 -2
  54. package/frontend/dist/js/{is-BAEhfi5Z.js → is-BU7Um_Tq.js} +2 -2
  55. package/frontend/dist/js/{it-HWnfQXZY.js → it-CdAxr8P_.js} +2 -2
  56. package/frontend/dist/js/ja-BLbQwz9u.js +2 -0
  57. package/frontend/dist/js/{ko-agDQ__KP.js → ko-CY5lpkAe.js} +2 -2
  58. package/frontend/dist/js/{markdown-BM75gisb.js → markdown-B2u7CnKN.js} +1 -1
  59. package/frontend/dist/js/{messageCodeStyles-DxPb6SKm.js → messageCodeStyles-DalG2j6U.js} +2 -2
  60. package/frontend/dist/js/{ms-aNRa2QX7.js → ms-tQ8AYXEQ.js} +2 -2
  61. package/frontend/dist/js/{nl-BtkiDUn-.js → nl-CRNi2oWT.js} +2 -2
  62. package/frontend/dist/js/{pl-SEO0lBnX.js → pl-CWtFRS_W.js} +2 -2
  63. package/frontend/dist/js/{pt-BYtjmvq1.js → pt-C7SPoLF8.js} +2 -2
  64. package/frontend/dist/js/{ru-B-ynj2hU.js → ru-Dz4AX8xc.js} +2 -2
  65. package/frontend/dist/js/{standalone-h0KNQ5yy.js → standalone-Dwm1daef.js} +1 -1
  66. package/frontend/dist/js/{sv-CliKR15U.js → sv-ETy5-boa.js} +2 -2
  67. package/frontend/dist/js/{th-DJQyDr9J.js → th-DpuMqvxU.js} +2 -2
  68. package/frontend/dist/js/{tr-BBGKZ1la.js → tr-C-1AYAqg.js} +2 -2
  69. package/frontend/dist/js/{typescript-CPI0lY4n.js → typescript-CwieSptM.js} +1 -1
  70. package/frontend/dist/js/{ui-ovAoLjDQ.js → ui-BnDZpjfc.js} +2 -2
  71. package/frontend/dist/js/{uk-C1GcFWxE.js → uk-CyS680gr.js} +2 -2
  72. package/frontend/dist/js/useTranslation-CXY69qNk.js +1 -0
  73. package/frontend/dist/js/utils-BM0_0iFj.js +1 -0
  74. package/frontend/dist/js/{vi-CIxgICOQ.js → vi-BG8HuiTz.js} +2 -2
  75. package/frontend/dist/js/{workApi-CCHIEahA.js → workApi-BOS7crs9.js} +2 -2
  76. package/frontend/dist/js/{zh-Cm7vsQ9s.js → zh-NCs2mkHj.js} +2 -2
  77. package/package.json +3 -20
  78. package/electron/main.js +0 -560
  79. package/frontend/dist/assets/index-BN-WAt2j.js +0 -2
  80. package/frontend/dist/assets/index-D7m1zWWg.css +0 -1
  81. package/frontend/dist/js/ArtifactContainer-BD20LheX.js +0 -1
  82. package/frontend/dist/js/ArtifactSlideOutPanel-BVgr8Cv6.js +0 -1
  83. package/frontend/dist/js/ChatPage-D2EWlzO4.js +0 -16
  84. package/frontend/dist/js/HomePage-D21Haon_.js +0 -1
  85. package/frontend/dist/js/LibreClawPage-CEf9ws8z.js +0 -1
  86. package/frontend/dist/js/ModelSelector-whWBlN-S.js +0 -1
  87. package/frontend/dist/js/ModelsPage-CL2t9qNT.js +0 -2
  88. package/frontend/dist/js/SettingsModal-BK05P_rU.js +0 -1
  89. package/frontend/dist/js/WorkPage-Bj3UVrmb.js +0 -5
  90. package/frontend/dist/js/ar-Bm27TCMQ.js +0 -2
  91. package/frontend/dist/js/chatStore-D76rdaV6.js +0 -2
  92. package/frontend/dist/js/i18n-DJTg6xWw.js +0 -2
  93. package/frontend/dist/js/ja-Dvux1mon.js +0 -2
  94. package/frontend/dist/js/useTranslation-CdeLZqSW.js +0 -1
  95. package/frontend/dist/js/utils-BhpNrGnR.js +0 -1
@@ -1,2 +1,2 @@
1
- var e={common:{loading:`Cargando...`,save:`Guardar`,saving:`Guardando...`,cancel:`Cancelar`,delete:`Eliminar`,edit:`Editar`,close:`Cerrar`,back:`Atrás`,next:`Siguiente`,confirm:`Confirmar`,error:`Error`,success:`Éxito`,warning:`Advertencia`,or:`o`,optional:`opcional`,enabled:`Habilitado`,disabled:`Deshabilitado`,on:`Activado`,off:`Desactivado`,yes:`Sí`,no:`No`,search:`Buscar`,noResults:`No se encontraron resultados`,retry:`Reintentar`,refresh:`Actualizar`,download:`Descargar`,upload:`Subir`,export:`Exportar`,import:`Importar`,reset:`Restablecer`,apply:`Aplicar`,clear:`Limpiar`,all:`Todos`,none:`Ninguno`,default:`Predeterminado`,custom:`Personalizado`,remove:`Quitar`,home:`Inicio`,more:`Más`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`Bienvenido de nuevo`,subtitle:`Inicia sesión en tu cuenta para continuar`,username:`Nombre de usuario`,usernamePlaceholder:`Ingresa tu nombre de usuario`,password:`Contraseña`,passwordPlaceholder:`Ingresa tu contraseña`,signIn:`Iniciar sesión`,signingIn:`Iniciando sesión...`,noAccount:`¿No tienes una cuenta?`,signUpHere:`Regístrate aquí`,loginSuccess:`¡Inicio de sesión exitoso!`,loginFailed:`Error de inicio de sesión`,checkCredentials:`Error de inicio de sesión. Por favor verifica tus credenciales.`,enterBoth:`Por favor ingresa usuario y contraseña`,githubSuccess:`¡Inicio de sesión con GitHub exitoso!`,githubFailed:`Autenticación de GitHub fallida`,githubVerifyFailed:`Error al verificar autenticación de GitHub`,approvalPending:`Tu cuenta está esperando la aprobación del administrador.`,verificationFailed:`La verificación de seguridad falló. Actualiza la página e inténtalo de nuevo.`},signup:{title:`Crear cuenta`,subtitle:`Regístrate para una nueva cuenta`,username:`Nombre de usuario`,usernamePlaceholder:`Elige un nombre de usuario`,email:`Correo electrónico`,emailPlaceholder:`tu@correo.com`,password:`Contraseña`,passwordPlaceholder:`Elige una contraseña`,confirmPassword:`Confirmar contraseña`,confirmPasswordPlaceholder:`Confirma tu contraseña`,createAccount:`Crear cuenta`,creatingAccount:`Creando cuenta...`,hasAccount:`¿Ya tienes una cuenta?`,signInHere:`Inicia sesión aquí`,signupSuccess:`¡Cuenta creada exitosamente!`,signupFailed:`Error en el registro`,tryAgain:`Error en el registro. Por favor intenta de nuevo.`,usernameRequired:`Nombre de usuario y contraseña son obligatorios`,passwordMismatch:`Las contraseñas no coinciden`,passwordTooShort:`La contraseña debe tener al menos 6 caracteres`,approvalPending:`Registro recibido. Un administrador debe aprobar tu cuenta.`,awaitingApproval:`Esperando aprobación`,awaitingApprovalDescription:`Tu cuenta ha sido creada, pero un administrador debe activarla antes de que puedas iniciar sesión.`,backToSignIn:`Volver a iniciar sesión`},logout:{button:`Cerrar sesión`,success:`Sesión cerrada exitosamente`},oauth:{continueWith:`Continuar con {{provider}}`,connectingTo:`Conectando a {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`Verificando autenticación...`,welcome:`Bienvenido`,noEmail:`Sin correo electrónico`,role:`Rol`,id:`ID`,userId:`ID de usuario`,signInDescription:`Inicia sesión con tu cuenta de GitHub para continuar`,signInWithGitHub:`Iniciar sesión con GitHub`,jwtActive:`Autenticación JWT activa`,jwtDescription:`Autenticación basada en JWT con GitHub OAuth`,github:`GitHub`,provider:`Proveedor`,tagline:`Tu pila de IA debería responder a ti.`,selfHosted:`Autohospedado · Apache 2.0`,highlights:{local:{title:`Primero local`,body:`Tus conversaciones y archivos permanecen en la máquina donde ejecutas esto.`},providers:{title:`Cualquier proveedor`,body:`Modelos locales a través de Ollama, además de los proveedores remotos que elijas añadir.`},work:{title:`Trabajo aislado`,body:`Dale a un modelo un espacio de trabajo aislado con archivos, una terminal y una vista previa.`}}},setup:{welcome:{title:`Bienvenido a Libre WebUI`,subtitle:`Comencemos`,description:`Configura tu instancia de Libre WebUI en solo unos pasos`,createAdmin:`Crear cuenta de administrador`,features:{secure:{title:`Seguro y privado`,description:`Tus conversaciones permanecen en tu dispositivo`},fast:{title:`Rápido y responsivo`,description:`Optimizado para velocidad y rendimiento`},openSource:{title:`Código abierto`,description:`Software libre y de código abierto`}}},admin:{title:`Crear cuenta de administrador`,subtitle:`Configuración del administrador`,description:`Crea la primera cuenta de administrador para tu instancia de Libre WebUI`,usernamePlaceholder:`Ingresa nombre de usuario admin`,passwordPlaceholder:`Ingresa contraseña (mín. 6 caracteres)`,confirmPlaceholder:`Confirma tu contraseña`,creating:`Creando...`,createAdmin:`Crear admin`,success:`¡Cuenta de administrador creada exitosamente!`,failed:`Error al crear cuenta de administrador`,fillAllFields:`Por favor completa todos los campos`,note:`Esta será la cuenta de administrador principal para tu instancia de Libre WebUI`,approvalUnexpected:`El administrador inicial no pudo ser activado. Por favor, inténtalo de nuevo.`},encryptionKey:{title:`Guarda tu clave de cifrado`,subtitle:`Importante: Guarda esta clave`,description:`Esta clave de cifrado protege tus datos sensibles. Guárdala de forma segura - la necesitarás si alguna vez necesitas restaurar tu base de datos.`,warning:`Advertencia`,warningText:`Si pierdes esta clave y necesitas restaurar tu base de datos, tus datos cifrados (claves API, preferencias) serán irrecuperables.`,label:`Tu clave de cifrado`,loading:`Cargando...`,copyToClipboard:`Copiar al portapapeles`,copied:`¡Clave de cifrado copiada al portapapeles!`,copyFailed:`Error al copiar la clave al portapapeles`,envNote:`Esta clave también está guardada en tu archivo backend/.env como ENCRYPTION_KEY`,acknowledgment:`He guardado mi clave de cifrado en un lugar seguro y entiendo que perderla puede resultar en pérdida de datos.`,confirmRequired:`Por favor confirma que has guardado la clave de cifrado`,continue:`Continuar a Libre WebUI`}},chat:{greeting:{morning:`Buenos días`,afternoon:`Buenas tardes`,evening:`Buenas tardes`,night:`Buenas noches`},followUp:`Continuar`,welcome:{helpToday:`¿En qué puedo ayudarte hoy?`,helpTonight:`¿En qué puedo ayudarte esta noche?`,variety:{create:{title:`¿Qué vamos a crear?`,subtitle:`Empieza con una idea, un boceto o un problema que se resiste.`},explore:{title:`¿Por dónde empezamos?`,subtitle:`Trae esa pregunta a la que siempre vuelves.`},imagine:{title:`¿Qué estás imaginando?`,subtitle:`Podemos darle forma juntos.`},focus:{title:`¿Qué merece tu atención?`,subtitle:`Aclaremos cuál es el siguiente paso.`},untangle:{title:`¿Qué se ha complicado?`,subtitle:`Cuéntame primero la versión desordenada.`},momentum:{title:`Cuando quieras.`,subtitle:`Retoma una idea, un plan o algo que dejaste a medias.`},open:{title:`¿Qué tienes en mente?`,subtitle:`Una idea pequeña o un proyecto ambicioso. Todo sirve.`},challenge:{title:`¿Qué vamos a resolver?`,subtitle:`Cuéntame qué no está funcionando todavía.`},draft:{title:`Empecemos por algún sitio.`,subtitle:`No tiene que estar perfecto.`},possibility:{title:`¿En qué podría convertirse?`,subtitle:`Enséñame el material en bruto.`},unexpected:{title:`Hagamos algo inesperado.`,subtitle:`Dame una condición, un estado de ánimo o una idea a medio formar.`}}},input:{placeholder:`Enviar un mensaje`,messagePlaceholder:`Mensaje...`,attachImages:`Adjuntar imágenes`,attachments:`Adjuntos y funciones avanzadas`,sendMessage:`Enviar mensaje`,stopGeneration:`Detener generación`,menu:{uploadImages:`Subir imágenes`,attachDocument:`Adjuntar documento`,attachWebpage:`Adjuntar página web`,structuredOutput:`Salida estructurada`,attach:`Adjuntar`,documentAttached:`Documento adjuntado`,webpageAttached:`Página web adjuntada`,attachFailed:`No se pudo adjuntar`,attachKnowledge:`Adjuntar conocimiento`,noCollections:`Aún no hay colecciones: crea una en Ajustes → Documentos`},voiceInput:`Entrada de voz`,voiceStop:`Dejar de escuchar`,webSearchOn:`Búsqueda web activada — las respuestas usan resultados en vivo`,webSearchOff:`Buscar en la web para este mensaje`},session:{new:`Nuevo chat`,work:`Trabajo`,chat:`Chat`,private:`Privado`,privateMode:`Modo privado`,privateDescription:`Esta conversación no se guardará`,privateTooltip:`Iniciar una conversación privada que no se guardará`,deleteConfirm:`¿Estás seguro de que deseas eliminar este chat?`,generatingTitle:`Generando título`,noChats:`Aún no hay chats`,createFirst:`Crea tu primer chat arriba`,chats:`Chats`,renameChat:`Renombrar chat`,openNewTab:`Abrir en pestaña nueva`,pinChat:`Fijar`,unpinChat:`Desfijar`,deleteChat:`Eliminar chat`,incognito:`Chat de incógnito`,archiveChat:`Archivar chat`,groups:{pinned:`Fijados`,today:`Hoy`,yesterday:`Ayer`,previous7Days:`Últimos 7 días`,previous30Days:`Últimos 30 días`,older:`Más antiguos`},folder:{new:`Nueva carpeta`,namePlaceholder:`Nombre de la carpeta`,move:`Mover a carpeta`,remove:`Quitar de la carpeta`,delete:`Eliminar carpeta`,deleteConfirm:`¿Eliminar esta carpeta? Los chats se conservan.`}},persona:{applied:`Persona aplicada`,label:`Persona`,removeFailed:`No se pudo eliminar la persona`},model:{updated:`Modelo actualizado`,noModels:`No hay modelos disponibles`,noModelsDescription:`No hay modelos disponibles. Asegúrate de que Ollama esté ejecutándose y tenga modelos instalados.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`No hay modelos disponibles. Asegúrate de que Ollama esté ejecutándose y los modelos estén instalados.`,selectBeforePrivateChat:`Selecciona un modelo disponible antes de iniciar el chat privado`,selectBeforeSending:`Selecciona un modelo disponible antes de enviar`},footer:{disclaimer:`Los LLM pueden cometer errores - verifica la información importante`,images:`{{count}} imagen`,images_plural:`{{count}} imágenes`,structuredOutput:`Salida estructurada`},mediaUpload:{dropImagesHere:`Arrastra imágenes aquí o`,supportedFormats:`Soporta: JPG, PNG, GIF, WebP (máx. 10 MB cada una)`,browse:`explorar`},structuredOutput:{title:`Formato de respuesta`,none:`Ninguno (lenguaje natural)`,noneDescription:`Respuesta predeterminada en lenguaje natural`,json:`JSON`,jsonDescription:`Formato JSON estructurado`,list:`Lista`,listDescription:`Array de elementos`,summary:`Resumen`,summaryDescription:`Resumen de documento con puntos clave`,analysis:`Análisis`,analysisDescription:`Análisis estructurado con pros/contras`,custom:`Esquema personalizado`,customDescription:`Define tu propio esquema JSON`,customSchema:`Esquema JSON personalizado`,schemaPreview:`Vista previa del esquema`,applySchema:`Aplicar esquema`,cancel:`Cancelar`,enabled:`Salida estructurada habilitada`},controls:{title:`Controles del chat`,systemPrompt:`Prompt del sistema`,systemPromptPlaceholder:`Instrucciones que solo se aplican a este chat…`,advancedParams:`Parámetros avanzados`,advancedParamsDescription:`Anulaciones para este chat. Los campos vacíos usan tus valores globales.`,fromModel:`del modelo`,fromModelHint:`Este valor proviene de la configuración recomendada por el propio modelo.`,contextCapped:`Contexto limitado a {{context}} de los {{trained}} para los que se entrenó el modelo, para que siga cargando.`,saved:`Controles guardados`,saveFailed:`No se pudieron guardar los controles`,params:{temperature:`Temperatura`,topP:`Top P`,topK:`Top K`,minP:`Min P`,maxTokens:`Tokens máx.`,repeatPenalty:`Penalización de repetición`,seed:`Semilla`,contextLength:`Longitud de contexto`}},message:{sources:`Fuentes`}},sidebar:{navigation:{chat:`Chat`,models:`Modelos`,personas:`Personas`,imagine:`Generar`,settings:`Configuración`,userManagement:`Gestión de usuarios`,signOut:`Cerrar sesión`,agents:`Agentes`,work:`Trabajo`,exploreLabel:`Explorar`,usageAnalytics:`Uso del proveedor`,system:`Sistema`,notes:`Notas`},toggleSize:`Cambiar tamaño de barra lateral`,expandSidebar:`Expandir barra lateral`},user:{menu:{changePicture:`Cambiar imagen`,settings:`Configuración`,userManagement:`Gestión de usuarios`,logout:`Cerrar sesión`,usageAnalytics:`Uso del proveedor`,system:`Sistema`},avatar:{title:`Cambiar imagen de perfil`,updated:`Imagen de perfil actualizada`,updateFailed:`Error al actualizar imagen de perfil`,saving:`Guardando...`,label:`Avatar`,uploadAvatarImage:`Subir imagen de avatar`,dragAndDrop:`Arrastra y suelta una imagen o haz clic para explorar`,chooseImage:`Elegir imagen`,uploading:`Subiendo...`,enterImageUrl:`O introduce la URL de la imagen`,supportedFormats:`Soporta: JPG, PNG, GIF, WebP (máx. 2 MB). Las imágenes cuadradas funcionan mejor.`,customAvatar:`Imagen de avatar personalizada`,clickToChange:`Haz clic para cambiar o eliminar`,removed:`Avatar eliminado`,uploaded:`Avatar subido con éxito`,invalidFile:`Por favor selecciona un archivo de imagen válido`,fileTooLarge:`El tamaño de la imagen del avatar debe ser menor a 2 MB`,readFailed:`Error al leer el archivo de imagen`,uploadFailed:`Error al subir la imagen del avatar`},profile:{noEmail:`Sin correo electrónico`}},settings:JSON.parse(`{"title":"Configuración","tabs":{"appearance":"Apariencia","model":"Modelo","systemMessage":"Mensaje del sistema","plugins":"Plugins","search":"Búsqueda","generation":"Generación","documents":"Documentos","tts":"Voz","imageGen":"Imágenes","data":"Datos","shortcuts":"Atajos","about":"Acerca de"},"appearance":{"title":"Apariencia","language":{"title":"Idioma","description":"Selecciona tu idioma preferido"},"theme":{"title":"Tema","light":"Claro","dark":"Oscuro","amoled":"Negro Puro","system":"Sistema"},"accent":{"title":"Color de acento","custom":"Color personalizado","useColor":"Usar {{color}} como acento","behaviorTitle":"Paleta de la interfaz","behaviorDescription":"Elige si el acento se limita a los controles o adapta toda la interfaz clara u oscura.","defaultStyle":"Predeterminada","defaultStyleDescription":"Mantener las superficies neutras de los temas claro y oscuro.","adaptedStyle":"Adaptar al acento","adaptedStyleDescription":"Teñir superficies, bordes y texto con el color de acento."},"chatInterface":{"title":"Interfaz de chat","showUsername":"Mostrar nombre de usuario","showUsernameDescription":"Mostrar nombre de usuario en mensajes de chat","followUpSuggestions":"Sugerencias de seguimiento","followUpSuggestionsDescription":"Sugerir respuestas rápidas tras cada respuesta","hapticFeedback":"Respuesta háptica (Android)","hapticFeedbackDescription":"Usar vibraciones sutiles para acciones móviles importantes"},"background":{"title":"Imagen de fondo","enable":"Habilitar imagen de fondo","enableDescription":"Mostrar fondo personalizado con efecto de desenfoque","blur":"Desenfoque","opacity":"Opacidad","upload":"Subir imagen de fondo","dragDrop":"Arrastra una imagen o haz clic para explorar","chooseImage":"Elegir imagen"}},"saveSettings":"Guardar configuración","model":{"title":"Configuración del modelo","defaultModel":"Modelo predeterminado","defaultModelDescription":"Este modelo se usará por defecto para nuevas conversaciones","selectModel":"Seleccionar un modelo","updateAll":"Actualizar todos los modelos","updateAllDescription":"Buscar actualizaciones y descargar las últimas versiones de todos los modelos instalados","updateAllButton":"Actualizar todos","updating":"Actualizando modelos...","currentModelInfo":"Info del modelo actual","name":"Nombre","size":"Tamaño","family":"Familia","format":"Formato","status":"Estado","statusStarting":"Iniciando...","statusComplete":"Completado","statusError":"Error","bulkOperations":"Operaciones masivas","autoTitle":{"title":"Generación automática de títulos","enable":"Habilitar título automático","enableDescription":"Generar automáticamente títulos para nuevas conversaciones","taskModel":"Modelo de tarea","selectTaskModel":"Seleccionar modelo de tarea","taskModelDescription":"Modelo usado para generar títulos de conversación"},"persona":"Persona","updatingModel":"Actualizando {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} de {{total}} modelos","specializedModels":"Modelos especializados","visionModel":"Modelo de visión","selectVisionModel":"Usar el modelo de chat actual","visionModelDescription":"Se utiliza automáticamente siempre que el contexto del chat saliente contenga imágenes. Elige un modelo que admita la entrada de imágenes.","visionModelUpdateFailed":"Error al actualizar el modelo de visión: {{error}}","visionModelNoProvider":"Este modelo de visión no tiene identidad de proveedor. Selecciona un modelo disponible."},"systemMessage":{"title":"Mensaje del sistema","description":"Establece un mensaje de sistema personalizado que se usará para todas las nuevas conversaciones.","placeholder":"Ingresa un mensaje del sistema...","saved":"Mensaje del sistema guardado","saveFailed":"Error al guardar mensaje del sistema"},"plugins":{"title":"Plugins","description":"Gestiona tus plugins instalados","addNew":"Agregar nuevo plugin","upload":"Subir plugin","addJson":"Agregar JSON","uploading":"Subiendo...","jsonPlaceholder":"Pega la configuración JSON del plugin...","install":"Instalar plugin","noPlugins":"No hay plugins instalados","noPluginsDescription":"Agrega un plugin para extender funcionalidades","loading":"Cargando plugins...","installed":"Plugins instalados","active":"Plugins activos","activeLabel":"Activo","inactive":"Inactivo","activate":"Activar","deactivate":"Desactivar","models":"modelos","apiKeySet":"Clave API establecida","apiKeyConfiguration":"Configuración de clave API","apiKeyEnvAlternative":"Alternativamente, establece la","environmentVariable":"variable de entorno","apiKeyConfigured":"Clave API configurada","apiKeyPlaceholder":"Ingresa tu clave API...","saveApiKey":"Guardar clave API","apiKey":{"title":"Clave API","placeholder":"Ingresa clave API","save":"Guardar clave","remove":"Eliminar clave","configured":"Clave API configurada","notConfigured":"Clave API requerida","saved":"Clave API guardada exitosamente","removed":"Clave API eliminada","saveFailed":"Error al guardar clave API","removeFailed":"Error al eliminar clave API","enterKey":"Por favor ingresa una clave API"},"variables":"Variables","providerConnections":"Conexiones de proveedores","providerConnectionsDescription":"Conecta, configura e inspecciona proveedores de modelos a través de plugins.","providers":"Proveedores","searchProviders":"Buscar proveedores","noProvidersFound":"Ningún proveedor coincide con tu búsqueda.","selectProvider":"Selecciona un proveedor","selectProviderDescription":"Elige un proveedor para inspeccionar su conexión y catálogo de modelos.","apiKeyDescription":"Almacena una clave API personal para {{name}}.","showApiKey":"Mostrar clave API","hideApiKey":"Ocultar clave API","configure":"Configurar","providerSettings":"Ajustes del proveedor","status":"Estado","defaultEndpoint":"Endpoint predeterminado","modelCatalog":"Catálogo de modelos","modelCatalogDescription":"Modelos descubiertos y configurados para este proveedor y sus capacidades.","refreshModels":"Actualizar modelos","noModelsConfigured":"No hay modelos configurados para este proveedor.","modelId":"ID del modelo","capabilities":"Capacidades","modelCatalogUpdated":"Catálogo de modelos actualizado: {{count}} modelos.","modelCatalogUnchanged":"El catálogo de modelos ya está actualizado.","modelCatalogNeedsApiKey":"Añade una clave de API válida para este proveedor para cargar su lista de modelos en vivo.","modelCatalogUnavailable":"No se pudo cargar la lista de modelos del proveedor.","modelCatalogRefreshFailed":"Error al actualizar el catálogo de modelos","capability":{"chat":"Chat","embedding":"Embedding","image":"Imagen","speech":"Voz","transcription":"Transcripción"},"exportPlugin":"Exportar plugin","deletePlugin":"Eliminar plugin"},"generation":{"title":"Opciones de generación","description":"Configura cómo la IA genera respuestas","scopeLabel":"Se aplica a","scopeAll":"Todos los modelos","scopeModel":"Solo {{model}}","scopeAllHint":"Los valores que usa cada modelo salvo que tenga los suyos.","scopeModelHint":"Se guarda solo para este modelo y prevalece sobre los valores generales.","coreParameters":"Parámetros principales","temperature":"Temperatura","temperatureDescription":"Controla la aleatoriedad. Valores más bajos son más enfocados, más altos más creativos.","topP":"Top P","topPDescription":"Controla la diversidad mediante muestreo de núcleo. Valores más bajos se enfocan en tokens probables.","topK":"Top K","topKDescription":"Limita la selección de tokens a los K más probables. Establece en 0 para deshabilitar.","minP":"Min P","minPDescription":"Umbral mínimo de probabilidad para selección de tokens.","generationControl":"Control de generación","maxTokens":"Tokens máximos","maxTokensDescription":"Número máximo de tokens a generar en la respuesta.","repeatPenalty":"Penalización de repetición","repeatPenaltyDescription":"Penaliza tokens repetidos. Valores más altos reducen la repetición.","contextLength":"Longitud de contexto","contextLengthDescription":"Tamaño máximo de ventana de contexto para conversaciones.","seed":"Semilla","optional":"opcional","random":"Aleatorio","seedDescription":"Establece una semilla específica para salidas reproducibles.","advancedOptions":"Opciones avanzadas","presencePenalty":"Penalización de presencia","presencePenaltyDescription":"Penaliza tokens que aparecen en el contexto.","frequencyPenalty":"Penalización de frecuencia","frequencyPenaltyDescription":"Penaliza tokens usados frecuentemente.","stopSequences":"Secuencias de parada","commaSeparated":"separadas por comas","stopSequencesDescription":"Tokens personalizados que detendrán la generación cuando se encuentren.","resetDefaults":"Restablecer predeterminados","saveOptions":"Guardar opciones","embeddingSettings":"Configuración de embeddings","enableEmbeddings":"Habilitar embeddings de documentos","advancedSettings":"Ajustes avanzados de generación","advancedSettingsDescription":"Muestreo, límites de tokens, contexto, penalizaciones y secuencias de parada"},"documents":{"title":"Configuración de documentos","embeddings":{"title":"Embeddings","enable":"Habilitar embeddings de documentos","model":"Modelo de embedding","modelDescription":"Selecciona el modelo usado para embedding de documentos","chunkSize":"Tamaño de chunk","chunkSizeInTokens":"(en tokens)","chunkSizeDescription":"Tamaño de los chunks de texto para embedding","chunkOverlap":"Superposición de chunks","chunkOverlapInTokens":"(en tokens)","chunkOverlapDescription":"Superposición entre chunks consecutivos","similarityThreshold":"Umbral de similitud","similarityDescription":"Puntuación mínima de similitud para incluir resultados","status":"Estado de embedding","statusLabel":"Estado","available":"Disponible","unavailable":"No disponible","chunksWithEmbeddings":"Chunks con embeddings","coverage":"Cobertura","regenerate":"Regenerar embeddings","regenerating":"Regenerando..."},"collections":{"title":"Colecciones de conocimiento","description":"Agrupa documentos en colecciones y adjúntalas a cualquier chat.","namePlaceholder":"Nombre de la colección","create":"Crear","none":"Sin colección","deleteConfirm":"¿Eliminar esta colección? Los documentos se conservan."}},"tts":{"title":"Texto a voz","description":"Configura ajustes de texto a voz para leer mensajes en voz alta","loadingProviders":"Cargando proveedores TTS...","noProviders":"Sin proveedores TTS","noProvidersDescription":"Configura un plugin con soporte TTS para habilitar texto a voz","enable":"Habilitar TTS","enableDescription":"Permitir texto a voz para mensajes del asistente","autoPlay":"Reproducción automática","autoPlayDescription":"Leer automáticamente nuevos mensajes del asistente en voz alta","streamSentences":"Transmitir oraciones","streamSentencesDescription":"Reproducir audio oración por oración en lugar de esperar el mensaje completo. Recomendado para TTS local para evitar tiempos de espera en mensajes largos.","voiceConfiguration":"Configuración de voz","model":"Modelo TTS","modelDescription":"Selecciona el modelo para generación de texto a voz","voice":"Voz","selectVoice":"Selecciona una voz","voiceDescription":"Elige la voz para texto a voz","speed":"Velocidad","speedSlow":"0,5x","speedNormal":"1,0x","speedFast":"2,0x","availableProviders":"Proveedores disponibles","models":"modelos","test":"Probar","testing":"Probando...","stop":"Detener"},"imageGen":{"title":"Generación de imágenes","description":"Configura ajustes y proveedores de generación de imágenes","loadingProviders":"Cargando proveedores de generación de imágenes...","noProviders":"Sin proveedores de generación de imágenes","noProvidersDescription":"Configura un plugin con soporte de generación de imágenes","enable":"Habilitar generación de imágenes","enableDescription":"Permitir generación de imágenes con IA en conversaciones","configuration":"Configuración","model":"Modelo","modelDescription":"Selecciona el modelo para generación de imágenes","size":"Tamaño","sizeDescription":"Resolución de imágenes generadas","quality":"Calidad","qualityDescription":"Nivel de calidad de imágenes generadas","style":"Estilo","styleDescription":"Preajuste de estilo para imágenes generadas","availableProviders":"Proveedores disponibles","models":"modelos"},"data":{"title":"Gestión de datos","export":"Exportar datos","exportDescription":"Descarga todos tus datos incluyendo preferencias, sesiones y documentos.","exportAll":"Exportar todos los datos","import":"Importar datos","importDescription":"Importa datos de una exportación anterior.","importData":"Importar datos","importing":"Importando...","clearSessions":"Limpiar sesiones","clearSessionsDescription":"Eliminar todas las sesiones de chat. Esta acción no se puede deshacer.","clearAll":"Limpiar todo","clearing":"Limpiando...","importOptions":"Opciones de importación","importOptionsDescription":"Elige cómo manejar datos existentes","skipDuplicates":"Omitir duplicados","overwrite":"Sobrescribir existentes","importResults":"Resultados de importación","preferences":"Preferencias","imported":"Importado","failed":"Fallido","sessions":"Sesiones","importedLabel":"importado","skipped":"omitido","documents":"Documentos","errors":"Errores","archivedChats":{"title":"Chats archivados","empty":"No hay chats archivados","unarchive":"Desarchivar"}},"about":{"title":"Acerca de","versionLabel":"Versión","ollama":{"title":"Estado de Ollama","version":"Versión","healthy":"Saludable","unhealthy":"No saludable"},"stats":{"models":"Modelos","sessions":"Sesiones"},"features":{"privacy":{"title":"Privacidad primero","description":"Tus datos permanecen en tu dispositivo"},"openSource":{"title":"Código abierto","description":"Software libre y de código abierto"},"localInference":{"title":"Inferencia local","description":"Ejecuta modelos de IA localmente con Ollama"}},"openSourceBy":"Código abierto por {{company}}","links":{"title":"Enlaces","github":"GitHub","githubDescription":"Ver código fuente y contribuir","website":"Sitio web","websiteDescription":"Visita nuestro sitio web","ollama":"Ollama","ollamaDescription":"Aprende más sobre Ollama","documentation":"Documentación","reportIssue":"Reportar problemas","reportIssueDescription":"Reportes de bugs y solicitudes de funciones","gitlab":"Espejo GitLab","gitlabDescription":"Repositorio GitLab auto-alojado","documentationDescription":"Guías, tutoriales y referencia de API"},"version":"Versión {{version}}"},"groups":{"general":"General","chat":"Chat","media":"Voz e imágenes","connections":"Conexiones"},"search":{"title":"Búsqueda web","description":"Busca en la web mediante una instancia autoalojada de SearXNG. Al activarla, el chat ofrece un interruptor de búsqueda y las tareas de Work con acceso a red pueden buscar.","enableLabel":"Activar búsqueda web","enableDescription":"Ofrecer búsqueda web en chats y tareas de Work. Las búsquedas se ejecutan en el servidor contra la instancia configurada.","urlLabel":"URL de SearXNG","urlDescription":"URL base de la instancia de SearXNG accesible desde el servidor. La pila de despliegue privado incluida ofrece http://searxng:8080.","maxResultsLabel":"Resultados por búsqueda","maxResultsDescription":"Cuántos resultados alimentan una respuesta o llamada de herramienta, 1-10.","maxResultsInvalid":"Los resultados por búsqueda deben estar entre 1 y 10.","safeSearchLabel":"Búsqueda segura","safeSearchDescription":"Pedir al motor que filtre resultados explícitos.","test":"Probar conexión","testing":"Probando…","testOk":"La búsqueda funciona — se devolvieron {{results}} resultados","testFailed":"La prueba de búsqueda falló","save":"Guardar","saved":"Configuración de búsqueda guardada","saveFailed":"No se pudo guardar la configuración de búsqueda"}}`),models:{title:`Modelos`,subtitle:`Descarga, gestiona y monitorea tus modelos de Ollama`,installed:`Modelos instalados`,available:`Modelos disponibles`,pull:`Descargar modelo`,pulling:`Descargando...`,delete:`Eliminar modelo`,deleting:`Eliminando...`,size:`Tamaño`,modified:`Modificado`,family:`Familia`,parameters:`Parámetros`,quantization:`Cuantización`,noModels:`No hay modelos instalados`,pullFirst:`Descarga un modelo para comenzar`,noModelsFound:`No se encontraron modelos`},personas:{title:`Personas`,create:`Crear persona`,edit:`Editar persona`,delete:`Eliminar persona`,name:`Nombre`,description:`Descripción`,systemPrompt:`Prompt del sistema`,model:`Modelo`,avatar:`Avatar`,background:`Fondo`,noPersonas:`No hay personas creadas`,createFirst:`Crea tu primera persona para personalizar tu experiencia de chat`},gallery:{title:`Galería`,subtitle:`Tu galería de imágenes generadas por IA`,imageCount:`{{count}} imágenes`,generate:`Generar imagen`,generateDescription:`Crea imágenes con IA`,generating:`Generando...`,prompt:`Prompt`,promptPlaceholder:`Describe la imagen que quieres generar...`,noImages:`Aún no hay imágenes generadas`,download:`Descargar`,delete:`Eliminar`,regenerate:`Regenerar`,model:`Modelo`,size:`Tamaño`,quality:`Calidad`,created:`Creado`},errors:{generic:`Ocurrió un error`,network:`Error de red. Por favor verifica tu conexión.`,unauthorized:`No estás autorizado para realizar esta acción.`,notFound:`El recurso solicitado no fue encontrado.`,serverError:`Error del servidor. Por favor intenta más tarde.`,validation:`Por favor verifica tu entrada e intenta de nuevo.`},keyboard:{title:`Atajos de teclado`,toggleSidebar:`Alternar barra lateral`,openSettings:`Abrir configuración`,toggleDarkMode:`Alternar modo oscuro`,showShortcuts:`Mostrar atajos de teclado`,closeModals:`Cerrar modales`,groups:{navigation:`Navegación`,general:`General`,chat:`Chat`,workspace:`Espacio de trabajo`},actions:{sendMessage:`Enviar mensaje`,newLine:`Nueva línea en mensaje`,saveEdit:`Guardar el mensaje editado`,cancelEdit:`Cancelar la edición`,saveFile:`Guardar archivo`,formatCode:`Formatear código`},description:`Todos los atajos de teclado disponibles en Libre WebUI.`,newChat:`Nuevo chat`,newWork:`Nueva sesión de Work`,openPalette:`Abrir la paleta de comandos`},modelManager:{title:`Modelos`,loading:`Cargando modelos...`,systemStatus:{online:`Ollama en línea`,offline:`Ollama sin conexión`,models:`modelo`,models_plural:`modelos`,running:`ejecutándose`,vram:`VRAM`},sections:{pull:`Descargar nuevo modelo`,library:`Explorar biblioteca`,running:`Modelos en ejecución`,local:`Modelos locales`,advanced:`Acciones avanzadas`,huggingface:`HuggingFace Hub`},pull:{placeholder:`Ingresa nombre del modelo (ej. llama3.2:3b, deepseek-r1:14b)`,button:`Descargar`,cancel:`Cancelar`,popular:`Modelos populares:`,browseAll:`Explorar todos los modelos en ollama.com`,success:`Modelo {{name}} descargado exitosamente`,cancelled:`Descarga de modelo cancelada`,failed:`Error al descargar modelo`,enterName:`Por favor ingresa un nombre de modelo`,restricted:`La instalación de modelos está restringida a administradores en esta instancia.`},progress:{starting:`Inicializando...`,pulling:`Descargando modelo...`,pullingLayer:`descargando`,verifying:`Verificando integridad...`,verifyingDigest:`verificando digest sha256`,writing:`Escribiendo manifiesto...`,cleaning:`Limpiando...`},library:{available:`disponible`,search:`Buscar modelos...`,noResults:`No se encontraron modelos que coincidan con tu criterio`,installed:`Instalado`,more:`+{{count}} más`,refresh:`Actualizar biblioteca`},local:{noModels:`Aún no hay modelos instalados`,pullToStart:`Descarga un modelo arriba para comenzar`,installed:`instalado`,running:`Ejecutándose`,info:`Info`,copy:`Copiar`,delete:`Eliminar`,deleteConfirm:`¿Estás seguro de que deseas eliminar el modelo "{{name}}"?`,deleteSuccess:`Modelo {{name}} eliminado exitosamente`,deleteFailed:`Error al eliminar modelo`},advanced:{createModel:`Crear modelo`,fromModelfile:`Desde Modelfile`,copyModel:`Copiar modelo`,duplicateExisting:`Duplicar existente`,testEmbeddings:`Probar embeddings`,generateVectors:`Generar vectores`,healthCheck:`Verificación de salud`,testConnection:`Probar conexión`,healthy:`¡Ollama está saludable!`},modals:{details:{title:`Detalles del modelo`,info:`Información del modelo`,family:`Familia`,parameters:`Parámetros`,quantization:`Cuantización`,format:`Formato`,systemPrompt:`Prompt del sistema`,template:`Plantilla`,license:`Licencia`,modelfile:`Modelfile`,noDetails:`Sin detalles disponibles`},copy:{title:`Copiar modelo`,source:`Modelo origen`,selectModel:`Selecciona un modelo...`,newName:`Nuevo nombre de modelo`,placeholder:`ej. mi-modelo-personalizado`,copying:`Copiando...`,button:`Copiar modelo`,success:`Modelo copiado a {{name}}`,failed:`Error al copiar modelo`,enterBoth:`Por favor ingresa nombres de origen y destino`},create:{title:`Crear modelo personalizado`,name:`Nombre del modelo`,namePlaceholder:`ej. mi-asistente`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
2
- SYSTEM Eres un asistente útil.`,see:`Ver`,docs:`Documentación de Modelfile`,docsLink:`para referencia de sintaxis`,creating:`Creando...`,button:`Crear modelo`,success:`Modelo {{name}} creado exitosamente`,failed:`Error al crear modelo`,enterBoth:`Por favor ingresa nombre del modelo y contenido del Modelfile`},embeddings:{title:`Probar embeddings`,model:`Modelo de embedding`,selectModel:`Selecciona un modelo...`,recommended:`Recomendados: nomic-embed-text, mxbai-embed-large`,input:`Texto de entrada`,placeholder:`Ingresa texto para generar embeddings...`,generating:`Generando...`,button:`Generar embeddings`,result:`Resultado ({{count}} dimensiones)`,success:`Vector de embedding de {{count}} dimensiones generado`,failed:`Error al generar embeddings`,enterBoth:`Por favor selecciona un modelo e ingresa texto`}},huggingface:{browseAll:`Ver todo en HuggingFace`,checkingGguf:`Buscando archivos GGUF...`,noGgufAvailable:`No hay archivos GGUF disponibles para Ollama`,ggufFilesCount:`Archivos GGUF ({{count}}) - Descargar a Ollama`,noModelsFound:`No se encontraron modelos`,noResults:`No se encontraron modelos. Intenta ajustar tu búsqueda o filtros.`,browseAllLink:`Ver todo`,search:`Buscar modelos en HuggingFace...`,by:`por`,gated:`Acceso restringido`,viewOnHF:`Ver en HuggingFace`,sortDownloads:`Descargas`,sortLikes:`Me gusta`,sortRecent:`Reciente`,taskTextGeneration:`Generación de texto`,taskTextToSpeech:`Texto a voz`,taskTextToImage:`Texto a imagen`,taskSpeechRecognition:`Reconocimiento de voz`,tasks:{textGen:`Generación de texto`,tts:`Texto a voz`,image:`Texto a imagen`,stt:`Reconocimiento de voz`},sort:{downloads:`Más descargados`,likes:`Más gustados`,recent:`Actualizados recientemente`}}},personaManager:{title:`Personas`,subtitle:`Crea y gestiona personas de IA con personalidades, memorias y comportamientos personalizados`,loading:`Cargando personas...`,createButton:`Crear persona`,importExport:`Importar/Exportar`,stats:{title:`Tus personas`,count:`{{count}} persona creada`,count_plural:`{{count}} personas creadas`},empty:{title:`Aún no hay personas`,description:`Crea tu primera persona para comenzar con interacciones de IA personalizadas`,button:`Crear tu primera persona`},deleteConfirm:`¿Estás seguro de que deseas eliminar "{{name}}"?`,deleteSuccess:`Persona "{{name}}" eliminada exitosamente`,downloadSuccess:`Persona "{{name}}" descargada exitosamente`,failed:`Error al {{action}} persona`},personaForm:{title:{create:`Crear nueva persona`,edit:`Editar persona`},subtitle:{create:`Crea una nueva persona de IA con personalidad personalizada, sistemas de memoria y capacidades de aprendizaje adaptativo`,edit:`Personaliza tu persona de IA con memoria avanzada, aprendizaje adaptativo y parámetros inteligentes`},loading:`Cargando formulario...`,saved:`Guardado`,tabs:{basic:`Básico`,parameters:`Parámetros`,memory:`Memoria y aprendizaje`,advanced:`Avanzado`},basic:{name:`Nombre`,namePlaceholder:`Ingresa nombre de persona`,model:`Modelo`,selectModel:`Selecciona un modelo`,description:`Descripción`,descriptionPlaceholder:`Describe tu persona...`,systemPrompt:`Prompt del sistema`,systemPromptPlaceholder:`Ingresa el prompt del sistema que define el comportamiento de tu persona...`,systemPromptHint:`El prompt del sistema define cómo se comportará y responderá tu persona.`},parameters:{temperature:`Temperatura`,temperatureHint:`Controla creatividad vs consistencia`,topP:`Top-P`,topPHint:`Controla diversidad de respuesta`,topK:`Top-K`,topKHint:`Limita vocabulario a los top-k tokens`,contextWindow:`Ventana de contexto`,contextWindowHint:`Longitud máxima del historial de conversación`,maxTokens:`Tokens máximos`,maxTokensHint:`Longitud máxima de respuesta`,repeatPenalty:`Penalización de repetición`,repeatPenaltyHint:`Reduce respuestas repetitivas`},memory:{title:`Sistema de memoria`,subtitle:`La persona recuerda conversaciones a lo largo del tiempo`,enableHint:`Habilita el sistema de memoria para que tu persona recuerde conversaciones y construya contexto a lo largo del tiempo.`,loading:`Cargando estado de memoria...`,noData:`Aún no hay datos de memoria`,memories:`Memorias`,mbUsed:`MB usados`,lastBackup:`Última copia de seguridad`,never:`Nunca`,maxMemories:`Memorias máximas`,maxMemoriesHint:`Cuántas memorias puede almacenar esta persona`,retention:`Retención de memoria`,retentionHint:`Días para mantener memorias antes de limpiar`,autoCleanup:`Limpieza automática de memorias antiguas`,wipeAll:`Borrar todas las memorias`,wipeCannot:`Esto no se puede deshacer`,wipeButton:`Borrar`,wiping:`Borrando...`,wipeConfirm:`¿Estás seguro de que deseas borrar todas las memorias? Esto no se puede deshacer.`,wipeSuccess:`Se borraron {{count}} memorias`},learning:{title:`Aprendizaje adaptativo`,subtitle:`La persona evoluciona basándose en interacciones`,enableHint:`Habilita el aprendizaje adaptativo para que tu persona evolucione y personalice respuestas basándose en tus interacciones.`,speed:`Velocidad de aprendizaje`,slow:`Lento`,slowDesc:`Cambios graduales`,balanced:`Equilibrado`,balancedDesc:`Ritmo moderado`,fast:`Rápido`,fastDesc:`Adaptación rápida`,autoAdapt:`Auto-adaptar a preferencias del usuario`,whatLearns:`Lo que aprende la persona:`,conversationTone:`Tono de conversación`,responseStyle:`Estilo de respuesta`,userPreferences:`Preferencias del usuario`,topicInterests:`Intereses en temas`},advanced:{embeddingModel:`Modelo de embedding`,embeddingHint:`Selecciona el modelo usado para codificación de memoria y búsqueda semántica. Los modelos de embedding se muestran primero, seguidos de otros modelos disponibles.`,noModels:`No se encontraron modelos`,embeddingModels:`Modelos de embedding`,otherModels:`Otros modelos`,installHint:`Instala un modelo de embedding:`,recommended:`Recomendados: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`Acerca de configuración avanzada`,aboutDescription:`El modelo de embedding es usado por el sistema de memoria para entender significado semántico y encontrar memorias relevantes durante conversaciones. Elige un modelo que coincida con tu caso de uso y recursos disponibles.`},actions:{cancel:`Cancelar`,save:`Guardar`,saving:`Guardando...`,saveClose:`Guardar y cerrar`,create:`Crear`},success:{created:`Persona creada`,updated:`Persona actualizada`},error:{saveFailed:`Error al guardar`}},personaCard:{enhanced:`Mejorado`,systemPrompt:`Prompt del sistema`,memories:`memorias`,use:`Usar`,editTooltip:`Editar persona`,downloadTooltip:`Descargar persona`,backup:`Copia de seguridad`,exportDNA:`Exportar ADN`,wipeMemories:`Borrar memorias`,wipeConfirm:`¿Estás seguro de que deseas borrar todas las memorias de esta persona? Esta acción no se puede deshacer.`,wipeSuccess:`Se borraron {{count}} memorias`,backupSuccess:`Copia de seguridad de persona descargada exitosamente`,dnaSuccess:`ADN de persona exportado exitosamente`,failed:`Error al {{action}}`},userManager:{title:`Gestión de usuarios`,subtitle:`Gestiona cuentas de usuario y permisos`,pageDescription:`Gestiona cuentas de usuario, permisos y controles de acceso para tu instancia de Libre WebUI.`,loading:`Cargando usuarios...`,createUser:`Crear usuario`,search:`Buscar usuarios...`,noUsers:`No se encontraron usuarios`,noUsersMatching:`No hay usuarios que coincidan con tu búsqueda`,columns:{user:`Usuario`,email:`Correo electrónico`,role:`Rol`,created:`Creado`,actions:`Acciones`},roles:{admin:`Admin`,user:`Usuario`},noEmail:`Sin correo`,deleteConfirm:`¿Estás seguro de que deseas eliminar el usuario "{{name}}"?`,deleteSuccess:`Usuario eliminado exitosamente`,deleteFailed:`Error al eliminar usuario`,cannotDeleteSelf:`No puedes eliminar tu propia cuenta`,form:{title:{create:`Crear usuario`,edit:`Editar usuario`},username:`Nombre de usuario`,usernamePlaceholder:`Ingresa nombre de usuario`,email:`Correo electrónico`,emailPlaceholder:`Ingresa correo (opcional)`,password:`Contraseña`,passwordPlaceholder:`Ingresa contraseña`,passwordHint:`Deja en blanco para mantener contraseña actual`,role:`Rol`,creating:`Creando...`,updating:`Actualizando...`,createButton:`Crear usuario`,updateButton:`Actualizar usuario`,createSuccess:`Usuario creado exitosamente`,updateSuccess:`Usuario actualizado exitosamente`,createFailed:`Error al crear usuario`,updateFailed:`Error al actualizar usuario`},approval:{title:`Aprobaciones pendientes`,description:`Revisa los nuevos registros antes de permitirles acceso a esta instancia.`,registered:`Registrado`,activate:`Activar cuenta`,reject:`Rechazar registro`,approved:`{{name}} ya puede iniciar sesión.`,failed:`No se pudo aprobar la cuenta.`,notification:`{{count}} registro(s) esperando tu aprobación.`,notificationBadge:`{{count}} aprobaciones de usuario pendientes`},workAccess:{title:`Acceso a Work`,description:`Permitir que todos los usuarios activos creen y ejecuten tareas de Work en sandboxes aislados. Los administradores siempre tienen acceso; los espacios de trabajo en carpetas del host siguen siendo solo para administradores.`,saved:`Acceso a Work actualizado`,saveFailed:`No se pudo actualizar el acceso a Work`},workPolicies:{title:`Políticas de Work`,description:`Preajustes de ejecución con nombre (imagen, límites, parada por inactividad) bajo los que crear tareas. Los campos vacíos heredan los valores globales.`,add:`Añadir política`,name:`Nombre`,image:`Imagen`,memory:`Memoria`,cpu:`CPU`,pids:`Límite de PID`,workspaceSize:`Tamaño del espacio de trabajo`,idleMinutes:`Parada por inactividad (minutos)`,networkDefault:`Red predeterminada`,networkInherit:`Heredar predeterminado`,networkOn:`Activada`,networkOff:`Desactivada`,save:`Guardar`,cancel:`Cancelar`,edit:`Editar política`,delete:`Eliminar política`,deleteConfirm:`¿Eliminar esta política? Las tareas que la usan vuelven a los valores globales.`,empty:`Aún no hay políticas. Las tareas usan los valores de ejecución globales.`,saved:`Política de Work guardada`,deleted:`Política de Work eliminada`,failed:`No se pudo guardar la política de Work`,invalidNumber:`El límite de PID y la parada por inactividad deben ser números.`},modelAccess:{title:`Descarga de modelos`,description:`Permitir que todos los usuarios activos descarguen modelos desde Ollama y el navegador de Hugging Face. Los administradores siempre pueden descargar modelos.`,saved:`Acceso a descarga de modelos actualizado`,saveFailed:`No se pudo actualizar el acceso a descarga de modelos`},webSearchAccess:{title:`Búsqueda web`,description:`Permitir que todos los usuarios activos usen la búsqueda web en chats y tareas de Work. Los administradores siempre pueden usarla. El motor se configura en Configuración > Búsqueda.`,saved:`Acceso a búsqueda web actualizado`,saveFailed:`No se pudo actualizar el acceso a búsqueda web`},agentAccess:{title:`Agentes`,description:`Ofrecer la sección Agentes (Libre Claw) a los administradores. Las CLI de agentes se ejecutan en el host como el usuario del servidor, fuera del sandbox de Work.`,saved:`Acceso a agentes actualizado`,saveFailed:`No se pudo actualizar el acceso a agentes`,lockedByEnv:`Fijado por la variable de entorno AGENT_CLI_MODELS_ENABLED.`}},chatHistory:{label:`Historial de la conversación`,jumpToTurn:`Ir al turno {{index}} de {{total}}`},chatMessage:{you:`Tú`,assistant:`Asistente`,system:`Sistema`,copy:`Copiar`,copyMessage:`Copiar mensaje`,copied:`¡Copiado!`,regenerate:`Regenerar`,regenerateResponse:`Regenerar respuesta`,edit:`Editar`,editSystemMessage:`Editar mensaje del sistema`,saveChanges:`Guardar cambios`,cancelEditing:`Cancelar edición`,saveAndSubmit:`Guardar y enviar`,goodResponse:`Buena respuesta`,badResponse:`Mala respuesta`,delete:`Eliminar`,deleteConfirm:`¿Eliminar este mensaje?`,branch:`Ramificar`,speaking:`Hablando...`,speakMessage:`Leer mensaje`,stopSpeaking:`Detener lectura`,showMore:`Mostrar más`,showLess:`Mostrar menos`,thinking:`Pensando`,thoughtFor:`Pensó durante {{duration}}`,hiddenLines:`{{count}} líneas ocultas`,systemMessagePlaceholder:`Ingresa tu mensaje del sistema...`,fullSizeImage:`Imagen a tamaño completo`,startConversation:`Iniciar una conversación`,startConversationDescription:`Envía un mensaje para comenzar a chatear con tu asistente de IA. Haz preguntas, obtén ayuda con código o mantén una conversación natural.`,scrollToBottom:`Desplazar al final`,newMessages:`Nuevos mensajes`},imageGallery:{title:`Galería de imágenes`,noImages:`Aún no hay imágenes`,noImagesHint:`Genera tu primera imagen usando el panel de la derecha`,delete:`Eliminar`,download:`Descargar`,deleteConfirm:`¿Estás seguro de que deseas eliminar esta imagen?`,deleteSuccess:`Imagen eliminada`,deleteFailed:`Error al eliminar imagen`,downloadFailed:`Error al descargar imagen`,loadMore:`Cargar más ({{current}} de {{total}})`,loadFailed:`Error al cargar galería`},imageGeneration:{title:`Generar imagen`,prompt:`Prompt`,promptPlaceholder:`Describe la imagen que quieres crear...`,model:`Modelo`,selectModel:`Seleccionar modelo`,noModels:`No hay modelos de generación de imágenes disponibles`,configurePlugin:`Configura un plugin con soporte de generación de imágenes`,size:`Tamaño`,quality:`Calidad`,style:`Estilo`,generate:`Generar`,generating:`Generando...`,success:`Imagen generada exitosamente`,failed:`Error al generar imagen`,enterPrompt:`Por favor ingresa un prompt`,promptTooLong:`El prompt excede la longitud máxima de {{max}} caracteres`},errorBoundary:{title:`Algo salió mal`,description:`Encontramos un error inesperado. Por favor intenta actualizar la página.`,tryAgain:`Actualizar página`,goHome:`Ir al inicio`,errorDetails:`Detalles del error (desarrollo)`},documents:{title:`Documentos`,upload:`Subir documento`,uploading:`Subiendo...`,noDocuments:`No hay documentos subidos`,uploadHint:`Sube documentos para usar en tus conversaciones`,delete:`Eliminar`,deleteConfirm:`¿Estás seguro de que deseas eliminar este documento?`,deleteSuccess:`Documento eliminado`,deleteFailed:`Error al eliminar documento`,uploadSuccess:`Documento subido exitosamente`,uploadFailed:`Error al subir documento`,types:`Soportados: PDF, TXT, MD, DOCX`,unsupportedFileType:`Solo se soportan archivos PDF y TXT`,fileSizeTooLarge:`El tamaño del archivo debe ser menor a 10 MB`,uploadSuccessWithName:`Documento "{{name}}" subido exitosamente`,removeSuccess:`Documento eliminado exitosamente`,removeFailed:`Error al eliminar documento`,removeError:`Ocurrió un error al eliminar el documento`,clickToUpload:`Haz clic para subir`,orDragAndDrop:`o arrastra y suelta`,fileTypesAndSize:`Archivos PDF o TXT hasta 10 MB`,uploadedDocuments:`Documentos subidos`,removeDocument:`Eliminar documento`},ttsButton:{speak:`Hablar`,stop:`Detener`,speaking:`Hablando...`,generateFailed:`Error al generar voz`,playbackFailed:`Error en reproducción de audio`,stopSpeaking:`Detener lectura`,generatingSpeech:`Generando voz...`,readAloud:`Leer en voz alta`},artifacts:{title:`Artefactos`,code:`Código`,preview:`Vista previa`,copy:`Copiar código`,copied:`¡Copiado!`,download:`Descargar`,expand:`Expandir`,collapse:`Contraer`,openInNewTab:`Abrir en nueva pestaña`,invalidSvg:`Contenido SVG inválido`,invalidJson:`Contenido JSON inválido`,previewMode:`Modo vista previa`,codeMode:`Modo código`,copyContent:`Copiar contenido`,openInPanel:`Abrir en panel`,openInNewWindow:`Abrir en nueva ventana`,created:`Creado`,closePanelEsc:`Cerrar panel (Esc)`,copyButton:`Copiar`,open:`Abrir`,dragEdgeToResize:`Arrastra el borde para redimensionar`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`Versión {{current}} de {{total}}`,previousVersion:`Versión anterior`,nextVersion:`Versión siguiente`},personaImportExport:{title:`Importar y exportar personas`,description:`Exporta tus personas para compartirlas o importa personas de otros`,exportPersonas:`Exportar personas`,importPersonas:`Importar personas`,noPersonasToExport:`No hay personas para exportar`,personasAvailable:`{{count}} persona disponible`,personasAvailable_plural:`{{count}} personas disponibles`,exportAll:`Exportar todo`,uploadJsonFile:`Subir archivo JSON`,pasteJsonLabel:`Pegar datos JSON`,pasteJsonPlaceholder:`Pega los datos JSON de la persona aquí...`,importing:`Importando...`,importButton:`Importar persona(s)`,expectedFormat:`Formato JSON esperado:`,exportSuccess:`Persona "{{name}}" exportada exitosamente`,exportFailed:`Error al exportar persona`,exportAllSuccess:`Todas las {{count}} personas exportadas exitosamente`,exportAllFailed:`Error al exportar personas`,pasteJsonData:`Por favor pega los datos JSON de la persona`,importMultipleSuccess:`Se importaron {{count}} personas exitosamente`,importMultipleFailed:`Error al importar {{count}} personas`,importNoneFailed:`Error al importar cualquier persona`,importSuccess:`Persona importada exitosamente`,importFailed:`Error al importar persona`},generationStats:{details:`Detalles`,promptTokens:`Tokens del prompt:`,generatedTokens:`Tokens generados:`,totalTokens:`Tokens totales:`,speed:`Velocidad:`,promptEval:`Evaluación del prompt:`,generation:`Generación:`,modelLoad:`Carga del modelo:`,totalTime:`Tiempo total:`,generatedAt:`Generado a las:`},userMenu:{loggedOut:`Sesión cerrada correctamente`,pictureUpdated:`Foto de perfil actualizada`,failedUpdateAvatar:`Error al actualizar el avatar`,failedUpdatePicture:`Error al actualizar la foto de perfil`,noEmail:`Sin correo electrónico`,changePicture:`Cambiar imagen`,settings:`Configuración`,userManagement:`Gestión de usuarios`,signOut:`Cerrar sesión`,changeProfilePicture:`Cambiar foto de perfil`},pluginManager:{title:`Gestor de plugins`,upload:`Subir`,addJson:`Añadir JSON`,browseHF:`Explorar HF Hub`,confirmDelete:`¿Estás seguro de que quieres eliminar este plugin?`,uploading:`Subiendo plugin...`,pasteJson:`Pega el JSON del plugin aquí...`,installPlugin:`Instalar plugin`,loading:`Cargando plugins...`,noPlugins:`No hay plugins instalados`,noPluginsDescription:`Sube un archivo de plugin o añade uno desde JSON para comenzar.`,active:`Activo`,id:`ID`,endpoint:`Endpoint`,activate:`Activar`,deactivate:`Desactivar`,activePlugin:`Plugin activo`,activePluginDescription:`Todas las solicitudes de chat se enrutarán a través de este plugin`,variables:{title:`Variables`,save:`Guardar`,saving:`Guardando...`,saved:`Variables guardadas`,saveFailed:`Error al guardar variables`,resetDefaults:`Restablecer valores`,reset:`Variables restablecidas`,sensitiveSet:`Valor establecido (ingrese nuevo valor para cambiar)`,resetFailed:`Error al restablecer las variables`,showValue:`Mostrar valor de {{label}}`,hideValue:`Ocultar valor de {{label}}`,connection:`Conexión`,advanced:`Parámetros avanzados`,inherited:`Usar predeterminado del proveedor`,inheritedValue:`Usar predeterminado del proveedor ({{value}})`,enabled:`Habilitado`,disabled:`Deshabilitado`,required:`Se requiere un valor`,fullApiEndpoint:`URL completa del endpoint de API`,endpointHelp:`Introduce la URL de solicitud completa, incluyendo su ruta de operación (por ejemplo, /v1/chat/completions), no solo la URL base del proveedor.`,invalidUrl:`Introduce una URL de endpoint de API completa válida, por ejemplo https://provider.example/v1/chat/completions`,insecureUrl:`Los endpoints de API deben usar HTTP o HTTPS.`,httpWarning:`HTTP no cifra las credenciales ni el tráfico. Úsalo solo en una red de confianza.`,invalidBaseUrl:`Las URLs base no pueden contener una cadena de consulta ni un fragmento.`,invalidApiPath:`Debe empezar con / y no contener URL, consulta, fragmento ni el segmento ..`,tooLong:`El valor es demasiado largo`}},huggingface:{title:`Explorador de modelos HuggingFace`,subtitle:`Explora y selecciona modelos del Hub`,searchPlaceholder:`Buscar modelos...`,filters:`Filtros`,task:`Tarea`,sortBy:`Ordenar por`,noModels:`No se encontraron modelos`,adjustSearch:`Intenta ajustar tu búsqueda o filtros`,gated:`Restringido`,selected:`Seleccionado`,select:`Seleccionar`,refresh:`Actualizar`,modelsFound:`modelos encontrados`},demoMode:{title:`Modo demo`,github:`GitHub`},personaBackground:{label:`Imagen de fondo`,uploadBackgroundImage:`Subir imagen de fondo`,dragAndDrop:`Arrastra y suelta una imagen o haz clic para explorar`,chooseImage:`Elegir imagen`,uploading:`Subiendo...`,enterImageUrl:`O ingresa la URL de la imagen`,supportedFormats:`Soporta: JPG, PNG, GIF, WebP (máx 5MB). Las imágenes horizontales anchas funcionan mejor.`,customBackground:`Imagen de fondo personalizada`,clickToChange:`Haz clic para cambiar o eliminar`,removed:`Fondo eliminado`,uploaded:`Fondo subido exitosamente`,invalidFile:`Por favor selecciona un archivo de imagen válido`,fileTooLarge:`El tamaño de la imagen de fondo debe ser menor a 5MB`,readFailed:`Error al leer el archivo de imagen`,uploadFailed:`Error al subir la imagen de fondo`},modelSelector:{searchInstalled:`Buscar modelos instalados...`,searchOllama:`Buscar en la biblioteca de Ollama...`,searchHuggingFace:`Buscar en HuggingFace...`,selectModel:`Seleccionar modelo`,personas:`Personas`,ollamaModels:`Modelos Ollama`,pluginModels:`Modelos de plugins`,actions:`Acciones`,installed:`Instalado`,use:`Usar`,pull:`Descargar`,pullRestricted:`La instalación de modelos está restringida a administradores en esta instancia.`,adminOnlyPull:`Solo administradores`,legacyProvider:`proveedor no registrado`,providerNotRecorded:`Proveedor no registrado`,providerUnavailable:`proveedor no disponible`,reselectProvider:`vuelve a seleccionar un proveedor para fijar este modelo`,unavailable:`no disponible`,unavailableSelections:`Selecciones no disponibles`,agentModels:`Agentes`},libreClaw:{title:`Agentes`,subtitle:`Ejecuciones, aprobaciones, programaciones, memoria, herramientas y uso del agente local.`,dashboard:`Panel de control`,connection:{disconnectedTitle:`El demonio de Libre Claw no está conectado`,disconnectedDescription:`Inícielo localmente con <command>libre-claw start</command> o configure <env>LIBRE_CLAW_BASE_URL</env> en el entorno backend.`},status:{connected:`Conectado`,disconnected:`desconectado`,activeRuns:`{{count}} activo`,activeRuns_plural:`{{count}} activo`},states:{queued:`En cola`,running:`En ejecución`,blocked:`Bloqueado`,done:`hecho`,failed:`Fallido`,cancelled:`Cancelado`},startRun:{title:`Iniciar ejecución del agente`,placeholder:`Pídale a Libre Claw que inspeccione un repositorio, corrija un error, ejecute una revisión, programe un informe...`,chatRun:`Ejecutar chat`,goalMode:`Modo objetivo`,providerOverride:`Anulación del proveedor`,modelOverride:`Anulación de modelo`,run:`Ejecutar`},modelRoute:{title:`Ruta Modelo`,providerPlaceholder:`proveedor`,modelPlaceholder:`modelo`,persistGlobal:`Persistir en la configuración global Libre Claw`,saveModel:`Guardar modelo`,theme:`Tema de Libre Claw`,saveTheme:`Guardar tema`},runs:{title:`Ejecuciones`,empty:`Aún no hay ejecuciones de Libre Claw.`},timeline:{title:`Cronología de la ejecución`,empty:`Seleccione una ejecución para inspeccionar sus eventos.`,streaming:`Transmitiendo...`,assistantResponse:`Respuesta del asistente`,resultOk:`bien`,resultError:`error`,labels:{userMessage:`Mensaje de usuario`,toolCall:`llamada de herramienta`,toolResult:`Resultado de la herramienta`,approvalRequest:`Solicitud de aprobación`,approvalResponse:`Respuesta de aprobación`,runStarted:`Ejecución iniciada`,runFinished:`Ejecución finalizada`,usage:`Uso`,error:`error`}},approvals:{needed:`Aprobación necesaria`,allowOnce:`permitir una vez`,alwaysAllowTool:`Permitir siempre la herramienta`,deny:`Rechazar`,toolApprovalRequested:`Se solicita aprobación de herramienta`},automations:{title:`Automatizaciones`,namePlaceholder:`Nombre`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Aviso de automatización`,create:`crear`,empty:`No hay automatizaciones programadas Libre Claw.`,runNow:`Ejecutar ahora`,pause:`Pausa`,resume:`Reanudar`,routes:{report:`Informe`,telegram:`Telegram`},status:{active:`Activo`,paused:`En pausa`}},usageFallback:{title:`Uso y respaldo`,usage:`Uso`,fallbackRoute:`Ruta alternativa`,noUsage:`Aún no hay registros de uso.`},metrics:{provider:`Proveedor`,model:`modelo`,input:`Entrada`,output:`Salida`,cached:`En caché`,reasoning:`Razonamiento`,cost:`Costo`,tool:`Herramienta`,resolution:`Resolución`,state:`Estado`,stopReason:`Motivo de detención`,tokens:`{{formatted}} ficha`,tokens_plural:`{{formatted}} fichas`},fallbacks:{tool:`herramienta`,unknown:`desconocido`,resolved:`resuelto`,unknownError:`Error desconocido`},toasts:{loadStatusFailed:`No se pudo cargar el estado Libre Claw`,enterTask:`Ingrese una tarea para Libre Claw`,runStarted:`Ejecución de Libre Claw iniciada`,startRunFailed:`No se pudo iniciar la ejecución de Libre Claw`,runCancelled:`Ejecución cancelada`,cancelRunFailed:`No se pudo cancelar la ejecución`,approved:`Aprobado`,denied:`denegado`,resolvePermissionFailed:`No se pudo resolver el permiso`,providerModelRequired:`Se requiere proveedor y modelo.`,modelUpdated:`Modelo de Libre Claw actualizado`,updateModelFailed:`No se pudo actualizar el modelo`,themeUpdated:`Tema de Libre Claw actualizado`,updateThemeFailed:`No se pudo actualizar el tema`,automationRequired:`Se requieren el nombre, el cronograma y el aviso de la automatización`,automationCreated:`Automatización creada`,createAutomationFailed:`No se pudo crear la automatización`,automationUpdated:`Automatización actualizada`,updateAutomationFailed:`No se pudo actualizar la automatización`}},work:{title:`Trabajo`,subtitle:`Espacios de trabajo aislados para modelos`,tasks:{title:`Tareas de trabajo`,subtitle:`Espacios de trabajo locales persistentes`,new:`Nueva tarea`,emptyTitle:`Aún no hay tareas de trabajo`,empty:`Tus tareas de trabajo aparecerán aquí después de enviar el primer mensaje.`,untitled:`Tarea sin título`,actions:`Acciones de la tarea`,delete:`Eliminar tarea`,deleteNamed:`Eliminar {{title}}`,deleteConfirm:`¿Eliminar «{{title}}» y su espacio de trabajo de forma permanente?`,close:`Cerrar tareas de trabajo`,open:`Abrir tareas de trabajo`,rename:`Título de la tarea`,loading:`Cargando tarea…`,notFound:`Esta tarea de trabajo no está disponible`,back:`Iniciar una nueva tarea`,status:`Estado: {{status}}`},landing:{title:`Iniciar una nueva tarea de trabajo`,description:`Asigna a un modelo local o de un proveedor configurado un espacio de trabajo aislado y persistente. Puede inspeccionar archivos, ejecutar herramientas y continuar donde lo dejó cuando vuelvas.`,isolated:`Aislado`,isolatedBody:`Cada tarea tiene su propio contenedor y archivos.`,durable:`Persistente`,durableBody:`Vuelve más tarde a su conversación y espacio de trabajo.`,controlled:`Controlado`,controlledBody:`El entorno de ejecución y los archivos de la tarea permanecen aislados del host.`},composer:{placeholder:`Describe lo que quieres crear o cambiar…`,model:`Modelo de trabajo`,noModels:`No hay modelos compatibles con el modo Trabajo`,cancel:`Detener`,send:`Ejecutar`,hint:`Cada tarea conserva sus propios archivos e historial. Revisa la salida del modelo antes de usarla.`,remoteTitle:`Proveedor remoto`,remoteHint:`La conversación y la salida de las herramientas se envían al servicio configurado. Una ejecución autónoma puede realizar varias llamadas al proveedor y generar cargos. Los archivos del espacio de trabajo permanecen locales, salvo que una herramienta devuelva su contenido.`,remoteDismiss:`Ocultar`,remoteDismissLabel:`Ocultar aviso del proveedor remoto`,remoteDismissFailed:`No se pudo guardar la preferencia del proveedor remoto.`,noModelSelected:`No hay ningún modelo compatible con el modo Trabajo seleccionado.`},conversation:{ready:`Espacio de trabajo listo`,empty:`Continúa la tarea abajo. Esta conversación y sus archivos permanecen asociados a este espacio de trabajo.`,loadOlder:`Cargar mensajes anteriores`},status:{preparing:`Preparando el espacio de trabajo aislado…`,running:`Trabajando en el espacio de trabajo local…`},statusLabels:{idle:`Inactivo`,thinking:`Pensando`,complete:`Completado`,needsInput:`Requiere información`,error:`Error`},live:{connecting:`Conectando con las actualizaciones en vivo…`,reconnecting:`Reconectando con las actualizaciones en vivo…`,unavailable:`Actualizaciones en vivo no disponibles`,newActivity:`Nueva actividad`,skillsLoaded:`Habilidades del espacio de trabajo · {{count}}`},runtime:{unavailable:`Entorno de ejecución no disponible`,ready:`Entorno de ejecución listo`,readyOllama:`Docker listo`,readyPlugin:`Docker + plugin listos`,readyHybrid:`Docker + modelos listos`,reason:`Se requieren Docker y un proveedor de modelos disponible mediante Ollama o un plugin.`},workspace:{label:`Vistas del espacio de trabajo`,files:`Archivos`,activity:`Actividad`,preview:`Vista previa`,resize:`Cambiar el tamaño de la conversación y el espacio de trabajo`,resizeHint:`Arrastra para cambiar el tamaño. Usa las teclas de flecha para un control preciso. Haz doble clic o pulsa Intro para restablecer.`,splitSize:`Conversación {{conversation}} %, espacio de trabajo {{workspace}} %`,terminal:`Terminal`,git:`Git`},files:{discard:`¿Descartar los cambios no guardados del archivo?`,leaveWithDraft:`¿Salir de este archivo? La edición sin guardar se conservará como borrador en el navegador.`,up:`Carpeta principal`,back:`Volver a los archivos`,empty:`Aún no hay archivos en esta carpeta.`,select:`Selecciona un archivo para inspeccionarlo y editarlo.`,editorLabel:`Editor de archivos: {{path}}`,format:`Formatear`,formatted:`Código formateado.`,formatFailed:`No se pudo formatear este archivo.`,formatShortcut:`Formatear (Mayús+Alt+F)`,formatTooLarge:`El formateo está limitado a archivos de menos de 100.000 caracteres y 4.000 líneas.`,formatUnsupported:`El formato no está disponible para este tipo de archivo.`,saveShortcut:`Guardar (⌘/Ctrl+S)`,highlightPaused:`El resaltado en tiempo real está pausado para archivos grandes, a fin de mantener una edición fluida.`,plainTextLarge:`Texto sin formato · archivo grande`,changes:`Cambios`,changesSince:`Qué cambió desde el último turno`,diffLabel:`Cambios desde el último turno: {{path}}`,diffFolded:`{{count}} líneas sin cambios`},activity:{empty:`Los comandos, las operaciones de archivos y los resultados de las herramientas aparecerán aquí.`,toolActivity:`Actividad de herramientas`,details:`Detalles`,kinds:{message:`Mensaje`,toolCall:`Llamada a herramienta`,toolResult:`Resultado de herramienta`,error:`Error`}},preview:{command:`Comando de inicio opcional`,start:`Iniciar vista previa`,stop:`Detener vista previa`,open:`Abrir`,starting:`Iniciando vista previa…`,frameTitle:`Vista previa del espacio de trabajo`,failed:`No se pudo iniciar la vista previa. Revisa Actividad e inténtalo con otro comando.`,empty:`Inicia la aplicación dentro de este espacio de trabajo para inspeccionarla aquí.`},mobile:{surface:`Vista de la tarea`,conversation:`Conversación`,workspace:`Espacio de trabajo`},toasts:{runFailed:`No se pudo iniciar la tarea de trabajo.`,updateFailed:`No se pudo actualizar esta tarea.`,renameFailed:`No se pudo cambiar el nombre de esta tarea.`,cancelled:`Ejecución de trabajo detenida.`,cancelFailed:`No se pudo detener la ejecución de trabajo.`,deleteFailed:`No se pudo eliminar esta tarea de trabajo.`,saveFailed:`No se pudo guardar este archivo.`,saved:`Archivo guardado.`,previewFailed:`No se pudo iniciar la vista previa.`,previewStopFailed:`No se pudo detener la vista previa.`},terminal:{connecting:`Abriendo un shell en el entorno aislado…`,closed:`La sesión de terminal ha terminado.`,failed:`No se pudo iniciar la sesión de terminal.`,reconnect:`Reconectar`,unavailable:`La terminal interactiva no está disponible en esta instalación.`,blockedByRun:`El modelo está usando este contenedor. La terminal se abrirá al terminar el turno.`,taskRunning:`Turno del modelo en curso`},policy:{label:`Política de ejecución`,default:`Predeterminada (límites globales)`},git:{actionFailed:`La acción de Git falló.`,blockedByPreview:`Detén la vista previa antes de cambiar el estado de Git.`,blockedByRun:`Las acciones de escritura de Git se desbloquean al terminar el turno del modelo.`,branchCreated:`{{name}} creada.`,branchSwitched:`Cambiado a {{name}}.`,clean:`El árbol de trabajo está limpio.`,commit:`Confirmar cambios preparados`,commitMessage:`Mensaje del commit`,committed:`Commit creado.`,detached:`HEAD separado`,diff:`Vista previa del diff`,diffFailed:`No se pudo cargar este diff.`,history:`Historial local`,initialize:`Inicializar Git`,initializeDescription:`Crea un repositorio local para estado, diffs, ramas y commits. No se conectan credenciales remotas.`,initialized:`Repositorio Git inicializado.`,loadFailed:`No se pudo cargar el estado de Git.`,localOnly:`Solo Git local. Push, pull y pull requests requieren un intermediario de credenciales de confianza aparte.`,newBranch:`Nueva rama local`,noCommits:`Aún no hay commits.`,noDiff:`Aún no hay diff textual. Los archivos sin seguimiento aparecen tras prepararlos.`,notInitialized:`Git no está inicializado`,selectChange:`Selecciona un archivo modificado para inspeccionar su diff.`,selectPath:`Seleccionar {{path}}`,stageAll:`Preparar todo`,stageSelected:`Preparar {{count}}`,staged:`Cambios preparados.`,switchBranch:`Cambiar de rama local`,changes:`Cambios`,createBranch:`Crear`},hostWorkspace:{hint:`Déjalo en blanco para un espacio aislado, o apunta la tarea a una carpeta de esta máquina.`,label:`Carpeta del espacio de trabajo (opcional)`,warning:`La tarea puede leer y escribir esta carpeta directamente. Déjalo en blanco para usar un espacio aislado.`}},usageAnalytics:{eyebrow:`Administración`,title:`Uso del proveedor`,description:`Sigue las llamadas de API salientes y el consumo de modelos en los plugins habilitados en esta instancia.`,days:`{{count}} días`,refresh:`Actualizar uso`,loadFailed:`No se pudo cargar el uso del proveedor.`,metrics:{calls:`Llamadas`,tokens:`Tokens`},cards:{calls:`Llamadas de API`,callsDetail:`Entre {{count}} usuario(s) activo(s)`,tokens:`Tokens reportados`,tokensDetail:`Uso reportado en {{count}} llamada(s)`,success:`Tasa de éxito`,successDetail:`{{count}} llamada(s) fallida(s)`,latency:`Latencia media`,latencyDetail:`Tiempo de extremo a extremo del proveedor`},activity:{title:`Consumo a lo largo del tiempo`,callsDescription:`Solicitudes salientes diarias a los complementos habilitados`,tokensDescription:`Totales diarios de tokens reportados por los proveedores`,chartLabel:`Gráfico diario de {{metric}} del proveedor`},models:{title:`Consumo por modelo`,description:`Los modelos con mayor tráfico en este período.`,model:`Modelo`,success:`Éxito`,latency:`Latencia`},providers:{title:`Tráfico de complementos habilitados`},capabilities:{title:`Mezcla de capacidades`,characters:`{{count}} caracteres`,images:`{{count}} imágenes`,jobs:`{{count}} trabajos de video`,inputs:`{{count}} entradas`,reportedTokens:`{{count}} tokens reportados`},empty:{title:`Aún no hay llamadas al proveedor`,description:`Las llamadas aparecerán aquí después de que un complemento habilitado gestione solicitudes de chat, Work, incrustación, imagen, voz, sonido o video.`},privacyNote:`El uso se mide en el servidor en el límite del complemento saliente. Libre WebUI almacena proveedor, modelo, tiempo, estado y contadores reportados, nunca prompts, respuestas, endpoints, credenciales ni cuerpos de error del proveedor. Los totales de tokens incluyen solo las llamadas en las que el proveedor devolvió metadatos de uso.`,heatmap:{title:`Un año de actividad`,description:`Llamadas diarias a proveedores durante el último año, coloreadas según el modelo más usado cada día.`,calls:`llamadas`,noCalls:`Sin llamadas`,other:`Otros modelos`,less:`Menos`,more:`Más`,yearTotal:`{{formatted}} llamadas en el último año`}},systemPage:{eyebrow:`Administración`,title:`Sistema`,description:`Monitoree la máquina y el entorno de ejecución que alojan esta instancia de Libre WebUI.`,updated:`Actualizado el {{date}}`,refresh:`Actualizar información del sistema`,loadFailed:`No se pudo cargar la información del sistema.`,cards:{uptime:`Tiempo de actividad del host`,uptimeDetail:`En ejecución desde {{date}}`,memory:`Memoria usada`,memoryDetail:`{{used}} de {{total}}`,freeSpace:`Espacio libre`,freeSpaceDetail:`{{label}} · {{total}} total`,containers:`Contenedores en ejecución`,containersDetail:`{{total}} contenedor(es) conocidos por Docker`,dockerUnavailable:`Docker no disponible`,unavailable:`No disponible`},host:{title:`Host y entorno de ejecución`,description:`Detalles del sistema operativo, procesador y proceso de Libre WebUI.`,container:`Entorno de ejecución de contenedores`,native:`Tiempo de ejecución nativo`,hostname:`Nombre de host`,operatingSystem:`Sistema operativo`,processor:`Procesador`,logicalCpus:`CPU lógicas`,loadAverage:`Carga media · 1 / 5 / 15 min`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`Proceso`,workingDirectory:`Directorio de trabajo`},memory:{title:`Memoria`,description:`Memoria del sistema visible en tiempo de ejecución y uso del proceso de la aplicación.`,usedOf:`{{used}} usados de {{total}}`,free:`{{value}} libres`,processRss:`RSS del proceso`,heapUsed:`Heap V8 usado`,heapTotal:`Heap V8 total`,external:`Memoria externa`},storage:{title:`Almacenamiento`,description:`Espacio disponible para el sistema de archivos del tiempo de ejecución y los datos persistentes de la aplicación.`,used:`{{value}} usados`,free:`{{value}} libres`,empty:`La información del sistema de archivos no está disponible en este tiempo de ejecución.`},docker:{title:`Docker`,description:`Estado de solo lectura de Docker Engine y una lista reducida de contenedores.`,connected:`Conectado`,unavailable:`No disponible`,unavailableDetail:`Los diagnósticos de Docker Engine no están disponibles.`,socketStatus:`Socket local: {{status}}`,mounted:`montado`,notMounted:`no montado`,running:`En ejecución`,stopped:`Detenido`,paused:`En pausa`,total:`Total`,version:`Versión`,host:`Host`,architecture:`Arquitectura`,cpus:`CPU`,memory:`Memoria`,container:`Contenedor`,image:`Imagen`,state:`Estado`,created:`Creado`,empty:`Docker está conectado y actualmente no hay contenedores listados.`},network:{title:`Red`,description:`Interfaces visibles en tiempo de ejecución, direcciones y contadores de tráfico de Linux.`,internal:`interna`,empty:`No hay interfaces de red visibles para el entorno de ejecución de la aplicación.`},securityNote:`Esta página está restringida a administradores. El servidor solo devuelve resúmenes operativos: no expone variables de entorno, credenciales, etiquetas de Docker, montajes, comandos de contenedor ni cargas útiles de inspección. Cuando Libre WebUI se ejecuta en un contenedor, los detalles de CPU y memoria a nivel de host provienen de Docker Engine cuando su socket local está disponible; otros valores describen el entorno de ejecución de la aplicación.`,work:{title:`Work`,description:`Sandboxes de todos los usuarios`,access:`Acceso`,accessAdmins:`Solo administradores`,accessAllUsers:`Todos los usuarios`,runtimeAvailable:`Disponible`,runtimeUnavailable:`No disponible`,activeRuntimes:`Entornos activos`,pendingCleanups:`Limpiezas pendientes`,orphans:`Contenedores huérfanos`,owner:`Propietario`,task:`Tarea`,state:`Estado`,preview:`Vista previa`,terminals:`Terminales`,updated:`Actualizado`,stateRunning:`En ejecución`,stateStopped:`Detenido`,stateStarting:`Iniciando`,stateUnknown:`Desconocido`,noTasks:`Aún no hay tareas de Work.`}},mediaGeneration:{title:`Generar multimedia`,description:`Crea video, sonido, música o voz con un proveedor multimedia activado.`,image:`Imagen`,video:`Video`,audio:`Audio`,sound:`Sonido`,speech:`Voz`,model:`Modelo`,voice:`Voz o ID de voz`,resolution:`Resolución`,aspectRatio:`Relación de aspecto`,duration:`Duración`,providerDefault:`Predeterminado del proveedor`,generateAudio:`Generar audio con el video cuando se admita`,prompt:`Indicación`,text:`Texto a hablar`,videoPlaceholder:`Describe la escena, el movimiento, la cámara y la iluminación...`,audioPlaceholder:`Introduce el texto que quieres que diga la voz...`,soundPlaceholder:`Describe el sonido, la música, la atmósfera o la respuesta hablada que deseas...`,generate:`Generar`,generating:`Generando… esto puede tardar varios minutos`,success:`Multimedia generada y guardada en Imagine`,failed:`Error al generar multimedia`,loadFailed:`Error al cargar los proveedores multimedia`,noModels:`No hay modelos de {{kind}} disponibles. Activa un proveedor compatible y guarda sus credenciales primero.`},mediaGallery:{itemCount:`{{count}} elementos`,empty:`Aún no hay multimedia generada`,emptyHint:`Genera una imagen, video o clip de voz y aparecerá aquí.`,filters:{all:`Todos`,image:`Imágenes`,video:`Vídeos`,audio:`Audio`}},whatsNew:{title:`Novedades`,releaseNotes:`Notas de la versión`,cta:`Vale, vamos`},notes:{title:`Notas`,new:`Nueva nota`,untitled:`Sin título`,empty:`Aún no hay notas`,selectOrCreate:`Selecciona una nota o crea una nueva`,contentPlaceholder:`Escribe en Markdown…`,saved:`Guardado`,saveFailed:`No se pudo guardar la nota`,createFailed:`No se pudo crear la nota`,deleteConfirm:`¿Eliminar esta nota?`,deleteFailed:`No se pudo eliminar la nota`},home:{active:`activo`,continue:`Continuar`,start:`Empezar`,explore:`Explorar`},palette:{empty:`Sin coincidencias.`,placeholder:`Buscar chats, Work, acciones…`,toggleTheme:`Cambiar tema`,actions:`Acciones`,chats:`Chats`,search:`Buscar`,settings:`Configuración`,work:`Trabajo`},tabs:{actions:`Acciones de pestaña`,close:`Cerrar pestaña`,closeAll:`Cerrar todas las pestañas`,closeOthers:`Cerrar las demás pestañas`,closeRight:`Cerrar pestañas a la derecha`,home:`Inicio`,label:`Pestañas abiertas`,new:`Nueva pestaña`,newWork:`Nuevo Work`,chat:`Chat`,newChat:`Nuevo chat`,work:`Trabajo`}};export{e as default};
1
+ var e={common:{loading:`Cargando...`,save:`Guardar`,saving:`Guardando...`,cancel:`Cancelar`,delete:`Eliminar`,edit:`Editar`,close:`Cerrar`,back:`Atrás`,next:`Siguiente`,confirm:`Confirmar`,error:`Error`,success:`Éxito`,warning:`Advertencia`,or:`o`,optional:`opcional`,enabled:`Habilitado`,disabled:`Deshabilitado`,on:`Activado`,off:`Desactivado`,yes:`Sí`,no:`No`,search:`Buscar`,noResults:`No se encontraron resultados`,retry:`Reintentar`,refresh:`Actualizar`,download:`Descargar`,upload:`Subir`,export:`Exportar`,import:`Importar`,reset:`Restablecer`,apply:`Aplicar`,clear:`Limpiar`,all:`Todos`,none:`Ninguno`,default:`Predeterminado`,custom:`Personalizado`,remove:`Quitar`,home:`Inicio`,more:`Más`},brand:{name:`Libre WebUI`,shortName:`Libre`},auth:{login:{title:`Bienvenido de nuevo`,subtitle:`Inicia sesión en tu cuenta para continuar`,username:`Nombre de usuario`,usernamePlaceholder:`Ingresa tu nombre de usuario`,password:`Contraseña`,passwordPlaceholder:`Ingresa tu contraseña`,signIn:`Iniciar sesión`,signingIn:`Iniciando sesión...`,noAccount:`¿No tienes una cuenta?`,signUpHere:`Regístrate aquí`,loginSuccess:`¡Inicio de sesión exitoso!`,loginFailed:`Error de inicio de sesión`,checkCredentials:`Error de inicio de sesión. Por favor verifica tus credenciales.`,enterBoth:`Por favor ingresa usuario y contraseña`,githubSuccess:`¡Inicio de sesión con GitHub exitoso!`,githubFailed:`Autenticación de GitHub fallida`,githubVerifyFailed:`Error al verificar autenticación de GitHub`,approvalPending:`Tu cuenta está esperando la aprobación del administrador.`,verificationFailed:`La verificación de seguridad falló. Actualiza la página e inténtalo de nuevo.`},signup:{title:`Crear cuenta`,subtitle:`Regístrate para una nueva cuenta`,username:`Nombre de usuario`,usernamePlaceholder:`Elige un nombre de usuario`,email:`Correo electrónico`,emailPlaceholder:`tu@correo.com`,password:`Contraseña`,passwordPlaceholder:`Elige una contraseña`,confirmPassword:`Confirmar contraseña`,confirmPasswordPlaceholder:`Confirma tu contraseña`,createAccount:`Crear cuenta`,creatingAccount:`Creando cuenta...`,hasAccount:`¿Ya tienes una cuenta?`,signInHere:`Inicia sesión aquí`,signupSuccess:`¡Cuenta creada exitosamente!`,signupFailed:`Error en el registro`,tryAgain:`Error en el registro. Por favor intenta de nuevo.`,usernameRequired:`Nombre de usuario y contraseña son obligatorios`,passwordMismatch:`Las contraseñas no coinciden`,passwordTooShort:`La contraseña debe tener al menos 6 caracteres`,approvalPending:`Registro recibido. Un administrador debe aprobar tu cuenta.`,awaitingApproval:`Esperando aprobación`,awaitingApprovalDescription:`Tu cuenta ha sido creada, pero un administrador debe activarla antes de que puedas iniciar sesión.`,backToSignIn:`Volver a iniciar sesión`},logout:{button:`Cerrar sesión`,success:`Sesión cerrada exitosamente`},oauth:{continueWith:`Continuar con {{provider}}`,connectingTo:`Conectando a {{provider}}...`,github:`GitHub`,huggingFace:`Hugging Face`},checkingAuth:`Verificando autenticación...`,welcome:`Bienvenido`,noEmail:`Sin correo electrónico`,role:`Rol`,id:`ID`,userId:`ID de usuario`,signInDescription:`Inicia sesión con tu cuenta de GitHub para continuar`,signInWithGitHub:`Iniciar sesión con GitHub`,jwtActive:`Autenticación JWT activa`,jwtDescription:`Autenticación basada en JWT con GitHub OAuth`,github:`GitHub`,provider:`Proveedor`,tagline:`Tu pila de IA debería responder a ti.`,selfHosted:`Autohospedado · Apache 2.0`,highlights:{local:{title:`Primero local`,body:`Tus conversaciones y archivos permanecen en la máquina donde ejecutas esto.`},providers:{title:`Cualquier proveedor`,body:`Modelos locales a través de Ollama, además de los proveedores remotos que elijas añadir.`},work:{title:`Trabajo aislado`,body:`Dale a un modelo un espacio de trabajo aislado con archivos, una terminal y una vista previa.`}}},setup:{welcome:{title:`Bienvenido a Libre WebUI`,subtitle:`Comencemos`,description:`Configura tu instancia de Libre WebUI en solo unos pasos`,createAdmin:`Crear cuenta de administrador`,features:{secure:{title:`Seguro y privado`,description:`Tus conversaciones permanecen en tu dispositivo`},fast:{title:`Rápido y responsivo`,description:`Optimizado para velocidad y rendimiento`},openSource:{title:`Código abierto`,description:`Software libre y de código abierto`}}},admin:{title:`Crear cuenta de administrador`,subtitle:`Configuración del administrador`,description:`Crea la primera cuenta de administrador para tu instancia de Libre WebUI`,usernamePlaceholder:`Ingresa nombre de usuario admin`,passwordPlaceholder:`Ingresa contraseña (mín. 6 caracteres)`,confirmPlaceholder:`Confirma tu contraseña`,creating:`Creando...`,createAdmin:`Crear admin`,success:`¡Cuenta de administrador creada exitosamente!`,failed:`Error al crear cuenta de administrador`,fillAllFields:`Por favor completa todos los campos`,note:`Esta será la cuenta de administrador principal para tu instancia de Libre WebUI`,approvalUnexpected:`El administrador inicial no pudo ser activado. Por favor, inténtalo de nuevo.`},encryptionKey:{title:`Guarda tu clave de cifrado`,subtitle:`Importante: Guarda esta clave`,description:`Esta clave de cifrado protege tus datos sensibles. Guárdala de forma segura - la necesitarás si alguna vez necesitas restaurar tu base de datos.`,warning:`Advertencia`,warningText:`Si pierdes esta clave y necesitas restaurar tu base de datos, tus datos cifrados (claves API, preferencias) serán irrecuperables.`,label:`Tu clave de cifrado`,loading:`Cargando...`,copyToClipboard:`Copiar al portapapeles`,copied:`¡Clave de cifrado copiada al portapapeles!`,copyFailed:`Error al copiar la clave al portapapeles`,envNote:`Esta clave también está guardada en tu archivo backend/.env como ENCRYPTION_KEY`,acknowledgment:`He guardado mi clave de cifrado en un lugar seguro y entiendo que perderla puede resultar en pérdida de datos.`,confirmRequired:`Por favor confirma que has guardado la clave de cifrado`,continue:`Continuar a Libre WebUI`}},chat:{greeting:{morning:`Buenos días`,afternoon:`Buenas tardes`,evening:`Buenas tardes`,night:`Buenas noches`},followUp:`Continuar`,welcome:{helpToday:`¿En qué puedo ayudarte hoy?`,helpTonight:`¿En qué puedo ayudarte esta noche?`,variety:{create:{title:`¿Qué vamos a crear?`,subtitle:`Empieza con una idea, un boceto o un problema que se resiste.`},explore:{title:`¿Por dónde empezamos?`,subtitle:`Trae esa pregunta a la que siempre vuelves.`},imagine:{title:`¿Qué estás imaginando?`,subtitle:`Podemos darle forma juntos.`},focus:{title:`¿Qué merece tu atención?`,subtitle:`Aclaremos cuál es el siguiente paso.`},untangle:{title:`¿Qué se ha complicado?`,subtitle:`Cuéntame primero la versión desordenada.`},momentum:{title:`Cuando quieras.`,subtitle:`Retoma una idea, un plan o algo que dejaste a medias.`},open:{title:`¿Qué tienes en mente?`,subtitle:`Una idea pequeña o un proyecto ambicioso. Todo sirve.`},challenge:{title:`¿Qué vamos a resolver?`,subtitle:`Cuéntame qué no está funcionando todavía.`},draft:{title:`Empecemos por algún sitio.`,subtitle:`No tiene que estar perfecto.`},possibility:{title:`¿En qué podría convertirse?`,subtitle:`Enséñame el material en bruto.`},unexpected:{title:`Hagamos algo inesperado.`,subtitle:`Dame una condición, un estado de ánimo o una idea a medio formar.`}}},input:{placeholder:`Enviar un mensaje`,messagePlaceholder:`Mensaje...`,attachImages:`Adjuntar imágenes`,attachments:`Adjuntos y funciones avanzadas`,sendMessage:`Enviar mensaje`,stopGeneration:`Detener generación`,menu:{uploadImages:`Subir imágenes`,attachDocument:`Adjuntar documento`,attachWebpage:`Adjuntar página web`,structuredOutput:`Salida estructurada`,attach:`Adjuntar`,documentAttached:`Documento adjuntado`,webpageAttached:`Página web adjuntada`,attachFailed:`No se pudo adjuntar`,attachKnowledge:`Adjuntar conocimiento`,noCollections:`Aún no hay colecciones: crea una en Ajustes → Documentos`},voiceInput:`Entrada de voz`,voiceStop:`Dejar de escuchar`,webSearchOn:`Búsqueda web activada — las respuestas usan resultados en vivo`,webSearchOff:`Buscar en la web para este mensaje`},session:{new:`Nuevo chat`,work:`Trabajo`,chat:`Chat`,private:`Privado`,privateMode:`Modo privado`,privateDescription:`Esta conversación no se guardará`,privateTooltip:`Iniciar una conversación privada que no se guardará`,deleteConfirm:`¿Estás seguro de que deseas eliminar este chat?`,generatingTitle:`Generando título`,noChats:`Aún no hay chats`,createFirst:`Crea tu primer chat arriba`,chats:`Chats`,renameChat:`Renombrar chat`,openNewTab:`Abrir en pestaña nueva`,pinChat:`Fijar`,unpinChat:`Desfijar`,deleteChat:`Eliminar chat`,incognito:`Chat de incógnito`,archiveChat:`Archivar chat`,groups:{pinned:`Fijados`,today:`Hoy`,yesterday:`Ayer`,previous7Days:`Últimos 7 días`,previous30Days:`Últimos 30 días`,older:`Más antiguos`},folder:{new:`Nueva carpeta`,namePlaceholder:`Nombre de la carpeta`,move:`Mover a carpeta`,remove:`Quitar de la carpeta`,delete:`Eliminar carpeta`,deleteConfirm:`¿Eliminar esta carpeta? Los chats se conservan.`}},persona:{applied:`Persona aplicada`,label:`Persona`,loadFailed:`No se pudieron cargar los detalles de la persona`,removeFailed:`No se pudo eliminar la persona`},model:{updated:`Modelo actualizado`,noModels:`No hay modelos disponibles`,noModelsDescription:`No hay modelos disponibles. Asegúrate de que Ollama esté ejecutándose y tenga modelos instalados.`,pullCommand:`ollama pull llama3.2:3b`,noModelsTooltip:`No hay modelos disponibles. Asegúrate de que Ollama esté ejecutándose y los modelos estén instalados.`,selectBeforePrivateChat:`Selecciona un modelo disponible antes de iniciar el chat privado`,selectBeforeSending:`Selecciona un modelo disponible antes de enviar`},footer:{disclaimer:`Los LLM pueden cometer errores - verifica la información importante`,images:`{{count}} imagen`,images_plural:`{{count}} imágenes`,structuredOutput:`Salida estructurada`},mediaUpload:{dropImagesHere:`Arrastra imágenes aquí o`,supportedFormats:`Soporta: JPG, PNG, GIF, WebP (máx. 10 MB cada una)`,browse:`explorar`},structuredOutput:{title:`Formato de respuesta`,none:`Ninguno (lenguaje natural)`,noneDescription:`Respuesta predeterminada en lenguaje natural`,json:`JSON`,jsonDescription:`Formato JSON estructurado`,list:`Lista`,listDescription:`Array de elementos`,summary:`Resumen`,summaryDescription:`Resumen de documento con puntos clave`,analysis:`Análisis`,analysisDescription:`Análisis estructurado con pros/contras`,custom:`Esquema personalizado`,customDescription:`Define tu propio esquema JSON`,customSchema:`Esquema JSON personalizado`,schemaPreview:`Vista previa del esquema`,applySchema:`Aplicar esquema`,cancel:`Cancelar`,enabled:`Salida estructurada habilitada`},controls:{title:`Controles del chat`,systemPrompt:`Prompt del sistema`,systemPromptPlaceholder:`Instrucciones que solo se aplican a este chat…`,advancedParams:`Parámetros avanzados`,advancedParamsDescription:`Anulaciones para este chat. Los campos vacíos usan tus valores globales.`,fromModel:`del modelo`,fromModelHint:`Este valor proviene de la configuración recomendada por el propio modelo.`,contextCapped:`Contexto limitado a {{context}} de los {{trained}} para los que se entrenó el modelo, para que siga cargando.`,saved:`Controles guardados`,saveFailed:`No se pudieron guardar los controles`,params:{temperature:`Temperatura`,topP:`Top P`,topK:`Top K`,minP:`Min P`,maxTokens:`Tokens máx.`,repeatPenalty:`Penalización de repetición`,seed:`Semilla`,contextLength:`Longitud de contexto`}},message:{sources:`Fuentes`},toasts:{chatCreated:`Nuevo chat creado`,createFailed:`No se pudo crear la sesión`,loadFailed:`No se pudieron cargar las sesiones`,chatDeleted:`Chat eliminado`,deleteFailed:`No se pudo eliminar el chat`,deleteSessionFailed:`No se pudo eliminar la sesión`,historyCleared:`Todo el historial de chat se ha borrado`,historyClearFailed:`No se pudo borrar el historial de chat`,titleUpdated:`Título del chat actualizado`,updateFailed:`No se pudo actualizar la sesión`,noValidSession:`No hay una sesión de chat válida. Crea o selecciona un chat.`,sessionNotFound:`Sesión no encontrada o no válida. Selecciona o crea una sesión de chat válida.`,noModelProvider:`No hay ningún proveedor de modelos disponible`,modelUnavailable:`El modelo seleccionado "{{model}}" no está disponible desde {{provider}}. Reactiva ese proveedor o selecciona otro modelo.`,modelSwitched:`Cambiado a {{model}} (el modelo anterior ya no está disponible)`,modelsLoadFailed:`No se pudieron cargar los modelos`,modelUpdated:`Modelo actualizado para el chat actual`,modelUpdateFailed:`No se pudo actualizar el modelo de la sesión`},documents:{title:`Documentos en contexto`}},sidebar:{navigation:{chat:`Chat`,models:`Modelos`,personas:`Personas`,imagine:`Generar`,settings:`Configuración`,userManagement:`Gestión de usuarios`,signOut:`Cerrar sesión`,agents:`Agentes`,work:`Trabajo`,exploreLabel:`Explorar`,usageAnalytics:`Uso del proveedor`,system:`Sistema`,notes:`Notas`},toggleSize:`Cambiar tamaño de barra lateral`,expandSidebar:`Expandir barra lateral`},user:{menu:{changePicture:`Cambiar imagen`,settings:`Configuración`,userManagement:`Gestión de usuarios`,logout:`Cerrar sesión`,usageAnalytics:`Uso del proveedor`,system:`Sistema`},avatar:{title:`Cambiar imagen de perfil`,updated:`Imagen de perfil actualizada`,updateFailed:`Error al actualizar imagen de perfil`,saving:`Guardando...`,label:`Avatar`,uploadAvatarImage:`Subir imagen de avatar`,dragAndDrop:`Arrastra y suelta una imagen o haz clic para explorar`,chooseImage:`Elegir imagen`,uploading:`Subiendo...`,enterImageUrl:`O introduce la URL de la imagen`,supportedFormats:`Soporta: JPG, PNG, GIF, WebP (máx. 2 MB). Las imágenes cuadradas funcionan mejor.`,customAvatar:`Imagen de avatar personalizada`,clickToChange:`Haz clic para cambiar o eliminar`,removed:`Avatar eliminado`,uploaded:`Avatar subido con éxito`,invalidFile:`Por favor selecciona un archivo de imagen válido`,fileTooLarge:`El tamaño de la imagen del avatar debe ser menor a 2 MB`,readFailed:`Error al leer el archivo de imagen`,uploadFailed:`Error al subir la imagen del avatar`},profile:{noEmail:`Sin correo electrónico`}},settings:JSON.parse(`{"title":"Configuración","tabs":{"appearance":"Apariencia","model":"Modelo","systemMessage":"Mensaje del sistema","plugins":"Plugins","search":"Búsqueda","generation":"Generación","documents":"Documentos","tts":"Voz","imageGen":"Imágenes","data":"Datos","shortcuts":"Atajos","about":"Acerca de"},"appearance":{"title":"Apariencia","language":{"title":"Idioma","description":"Selecciona tu idioma preferido"},"theme":{"title":"Tema","light":"Claro","dark":"Oscuro","amoled":"Negro Puro","system":"Sistema"},"accent":{"title":"Color de acento","custom":"Color personalizado","useColor":"Usar {{color}} como acento","behaviorTitle":"Paleta de la interfaz","behaviorDescription":"Elige si el acento se limita a los controles o adapta toda la interfaz clara u oscura.","defaultStyle":"Predeterminada","defaultStyleDescription":"Mantener las superficies neutras de los temas claro y oscuro.","adaptedStyle":"Adaptar al acento","adaptedStyleDescription":"Teñir superficies, bordes y texto con el color de acento."},"chatInterface":{"title":"Interfaz de chat","showUsername":"Mostrar nombre de usuario","showUsernameDescription":"Mostrar nombre de usuario en mensajes de chat","followUpSuggestions":"Sugerencias de seguimiento","followUpSuggestionsDescription":"Sugerir respuestas rápidas tras cada respuesta","hapticFeedback":"Respuesta háptica (Android)","hapticFeedbackDescription":"Usar vibraciones sutiles para acciones móviles importantes"},"background":{"title":"Imagen de fondo","enable":"Habilitar imagen de fondo","enableDescription":"Mostrar fondo personalizado con efecto de desenfoque","blur":"Desenfoque","opacity":"Opacidad","upload":"Subir imagen de fondo","dragDrop":"Arrastra una imagen o haz clic para explorar","chooseImage":"Elegir imagen"}},"saveSettings":"Guardar configuración","model":{"title":"Configuración del modelo","defaultModel":"Modelo predeterminado","defaultModelDescription":"Este modelo se usará por defecto para nuevas conversaciones","selectModel":"Seleccionar un modelo","updateAll":"Actualizar todos los modelos","updateAllDescription":"Buscar actualizaciones y descargar las últimas versiones de todos los modelos instalados","updateAllButton":"Actualizar todos","updating":"Actualizando modelos...","currentModelInfo":"Info del modelo actual","name":"Nombre","size":"Tamaño","family":"Familia","format":"Formato","status":"Estado","statusStarting":"Iniciando...","statusComplete":"Completado","statusError":"Error","bulkOperations":"Operaciones masivas","autoTitle":{"title":"Generación automática de títulos","enable":"Habilitar título automático","enableDescription":"Generar automáticamente títulos para nuevas conversaciones","taskModel":"Modelo de tarea","selectTaskModel":"Seleccionar modelo de tarea","taskModelDescription":"Modelo usado para generar títulos de conversación"},"persona":"Persona","updatingModel":"Actualizando {{name}} ({{current}}/{{total}})","modelsProgress":"{{current}} de {{total}} modelos","specializedModels":"Modelos especializados","visionModel":"Modelo de visión","selectVisionModel":"Usar el modelo de chat actual","visionModelDescription":"Se utiliza automáticamente siempre que el contexto del chat saliente contenga imágenes. Elige un modelo que admita la entrada de imágenes.","visionModelUpdateFailed":"Error al actualizar el modelo de visión: {{error}}","visionModelNoProvider":"Este modelo de visión no tiene identidad de proveedor. Selecciona un modelo disponible."},"systemMessage":{"title":"Mensaje del sistema","description":"Establece un mensaje de sistema personalizado que se usará para todas las nuevas conversaciones.","placeholder":"Ingresa un mensaje del sistema...","saved":"Mensaje del sistema guardado","saveFailed":"Error al guardar mensaje del sistema"},"plugins":{"title":"Plugins","description":"Gestiona tus plugins instalados","addNew":"Agregar nuevo plugin","upload":"Subir plugin","addJson":"Agregar JSON","uploading":"Subiendo...","jsonPlaceholder":"Pega la configuración JSON del plugin...","install":"Instalar plugin","noPlugins":"No hay plugins instalados","noPluginsDescription":"Agrega un plugin para extender funcionalidades","loading":"Cargando plugins...","installed":"Plugins instalados","active":"Plugins activos","activeLabel":"Activo","inactive":"Inactivo","activate":"Activar","deactivate":"Desactivar","models":"modelos","apiKeySet":"Clave API establecida","apiKeyConfiguration":"Configuración de clave API","apiKeyEnvAlternative":"Alternativamente, establece la","environmentVariable":"variable de entorno","apiKeyConfigured":"Clave API configurada","apiKeyPlaceholder":"Ingresa tu clave API...","saveApiKey":"Guardar clave API","apiKey":{"title":"Clave API","placeholder":"Ingresa clave API","save":"Guardar clave","remove":"Eliminar clave","configured":"Clave API configurada","notConfigured":"Clave API requerida","saved":"Clave API guardada exitosamente","removed":"Clave API eliminada","saveFailed":"Error al guardar clave API","removeFailed":"Error al eliminar clave API","enterKey":"Por favor ingresa una clave API"},"variables":"Variables","providerConnections":"Conexiones de proveedores","providerConnectionsDescription":"Conecta, configura e inspecciona proveedores de modelos a través de plugins.","providers":"Proveedores","searchProviders":"Buscar proveedores","noProvidersFound":"Ningún proveedor coincide con tu búsqueda.","selectProvider":"Selecciona un proveedor","selectProviderDescription":"Elige un proveedor para inspeccionar su conexión y catálogo de modelos.","apiKeyDescription":"Almacena una clave API personal para {{name}}.","showApiKey":"Mostrar clave API","hideApiKey":"Ocultar clave API","configure":"Configurar","providerSettings":"Ajustes del proveedor","status":"Estado","defaultEndpoint":"Endpoint predeterminado","modelCatalog":"Catálogo de modelos","modelCatalogDescription":"Modelos descubiertos y configurados para este proveedor y sus capacidades.","refreshModels":"Actualizar modelos","noModelsConfigured":"No hay modelos configurados para este proveedor.","modelId":"ID del modelo","capabilities":"Capacidades","modelCatalogUpdated":"Catálogo de modelos actualizado: {{count}} modelos.","modelCatalogUnchanged":"El catálogo de modelos ya está actualizado.","modelCatalogNeedsApiKey":"Añade una clave de API válida para este proveedor para cargar su lista de modelos en vivo.","modelCatalogUnavailable":"No se pudo cargar la lista de modelos del proveedor.","modelCatalogRefreshFailed":"Error al actualizar el catálogo de modelos","capability":{"chat":"Chat","embedding":"Embedding","image":"Imagen","speech":"Voz","transcription":"Transcripción"},"exportPlugin":"Exportar plugin","deletePlugin":"Eliminar plugin"},"generation":{"title":"Opciones de generación","description":"Configura cómo la IA genera respuestas","scopeLabel":"Se aplica a","scopeAll":"Todos los modelos","scopeModel":"Solo {{model}}","scopeAllHint":"Los valores que usa cada modelo salvo que tenga los suyos.","scopeModelHint":"Se guarda solo para este modelo y prevalece sobre los valores generales.","coreParameters":"Parámetros principales","temperature":"Temperatura","temperatureDescription":"Controla la aleatoriedad. Valores más bajos son más enfocados, más altos más creativos.","topP":"Top P","topPDescription":"Controla la diversidad mediante muestreo de núcleo. Valores más bajos se enfocan en tokens probables.","topK":"Top K","topKDescription":"Limita la selección de tokens a los K más probables. Establece en 0 para deshabilitar.","minP":"Min P","minPDescription":"Umbral mínimo de probabilidad para selección de tokens.","generationControl":"Control de generación","maxTokens":"Tokens máximos","maxTokensDescription":"Número máximo de tokens a generar en la respuesta.","repeatPenalty":"Penalización de repetición","repeatPenaltyDescription":"Penaliza tokens repetidos. Valores más altos reducen la repetición.","contextLength":"Longitud de contexto","contextLengthDescription":"Tamaño máximo de ventana de contexto para conversaciones.","seed":"Semilla","optional":"opcional","random":"Aleatorio","seedDescription":"Establece una semilla específica para salidas reproducibles.","advancedOptions":"Opciones avanzadas","presencePenalty":"Penalización de presencia","presencePenaltyDescription":"Penaliza tokens que aparecen en el contexto.","frequencyPenalty":"Penalización de frecuencia","frequencyPenaltyDescription":"Penaliza tokens usados frecuentemente.","stopSequences":"Secuencias de parada","commaSeparated":"separadas por comas","stopSequencesDescription":"Tokens personalizados que detendrán la generación cuando se encuentren.","resetDefaults":"Restablecer predeterminados","saveOptions":"Guardar opciones","embeddingSettings":"Configuración de embeddings","enableEmbeddings":"Habilitar embeddings de documentos","advancedSettings":"Ajustes avanzados de generación","advancedSettingsDescription":"Muestreo, límites de tokens, contexto, penalizaciones y secuencias de parada"},"documents":{"title":"Configuración de documentos","embeddings":{"title":"Embeddings","enable":"Habilitar embeddings de documentos","model":"Modelo de embedding","modelDescription":"Selecciona el modelo usado para embedding de documentos","chunkSize":"Tamaño de chunk","chunkSizeInTokens":"(en tokens)","chunkSizeDescription":"Tamaño de los chunks de texto para embedding","chunkOverlap":"Superposición de chunks","chunkOverlapInTokens":"(en tokens)","chunkOverlapDescription":"Superposición entre chunks consecutivos","similarityThreshold":"Umbral de similitud","similarityDescription":"Puntuación mínima de similitud para incluir resultados","status":"Estado de embedding","statusLabel":"Estado","available":"Disponible","unavailable":"No disponible","chunksWithEmbeddings":"Chunks con embeddings","coverage":"Cobertura","regenerate":"Regenerar embeddings","regenerating":"Regenerando..."},"collections":{"title":"Colecciones de conocimiento","description":"Agrupa documentos en colecciones y adjúntalas a cualquier chat.","namePlaceholder":"Nombre de la colección","create":"Crear","none":"Sin colección","deleteConfirm":"¿Eliminar esta colección? Los documentos se conservan.","createFailed":"No se pudo crear la colección","deleteFailed":"No se pudo eliminar la colección","assignFailed":"No se pudo mover el documento"},"library":{"title":"Documentos subidos","description":"Documentos disponibles como contexto del chat. Un documento subido en un chat permanece en su conversación; un documento sin chat ni colección se suma a todas las conversaciones.","empty":"Aún no hay documentos subidos.","chatScope":"Un chat","everyChatScope":"Todos los chats","deleteConfirm":"¿Eliminar \\"{{name}}\\"? Desaparecerá de todos los chats.","deleteFailed":"No se pudo eliminar el documento"}},"tts":{"title":"Texto a voz","description":"Configura ajustes de texto a voz para leer mensajes en voz alta","loadingProviders":"Cargando proveedores TTS...","noProviders":"Sin proveedores TTS","noProvidersDescription":"Configura un plugin con soporte TTS para habilitar texto a voz","enable":"Habilitar TTS","enableDescription":"Permitir texto a voz para mensajes del asistente","autoPlay":"Reproducción automática","autoPlayDescription":"Leer automáticamente nuevos mensajes del asistente en voz alta","streamSentences":"Transmitir oraciones","streamSentencesDescription":"Reproducir audio oración por oración en lugar de esperar el mensaje completo. Recomendado para TTS local para evitar tiempos de espera en mensajes largos.","voiceConfiguration":"Configuración de voz","model":"Modelo TTS","modelDescription":"Selecciona el modelo para generación de texto a voz","voice":"Voz","selectVoice":"Selecciona una voz","voiceDescription":"Elige la voz para texto a voz","speed":"Velocidad","speedSlow":"0,5x","speedNormal":"1,0x","speedFast":"2,0x","availableProviders":"Proveedores disponibles","models":"modelos","test":"Probar","testing":"Probando...","stop":"Detener"},"imageGen":{"title":"Generación de imágenes","description":"Configura ajustes y proveedores de generación de imágenes","loadingProviders":"Cargando proveedores de generación de imágenes...","noProviders":"Sin proveedores de generación de imágenes","noProvidersDescription":"Configura un plugin con soporte de generación de imágenes","enable":"Habilitar generación de imágenes","enableDescription":"Permitir generación de imágenes con IA en conversaciones","configuration":"Configuración","model":"Modelo","modelDescription":"Selecciona el modelo para generación de imágenes","size":"Tamaño","sizeDescription":"Resolución de imágenes generadas","quality":"Calidad","qualityDescription":"Nivel de calidad de imágenes generadas","style":"Estilo","styleDescription":"Preajuste de estilo para imágenes generadas","availableProviders":"Proveedores disponibles","models":"modelos"},"data":{"title":"Gestión de datos","export":"Exportar datos","exportDescription":"Descarga todos tus datos incluyendo preferencias, sesiones y documentos.","exportAll":"Exportar todos los datos","import":"Importar datos","importDescription":"Importa datos de una exportación anterior.","importData":"Importar datos","importing":"Importando...","clearSessions":"Limpiar sesiones","clearSessionsDescription":"Eliminar todas las sesiones de chat. Esta acción no se puede deshacer.","clearAll":"Limpiar todo","clearing":"Limpiando...","importOptions":"Opciones de importación","importOptionsDescription":"Elige cómo manejar datos existentes","skipDuplicates":"Omitir duplicados","overwrite":"Sobrescribir existentes","importResults":"Resultados de importación","preferences":"Preferencias","imported":"Importado","failed":"Fallido","sessions":"Sesiones","importedLabel":"importado","skipped":"omitido","documents":"Documentos","errors":"Errores","archivedChats":{"title":"Chats archivados","empty":"No hay chats archivados","unarchive":"Desarchivar"}},"about":{"title":"Acerca de","versionLabel":"Versión","ollama":{"title":"Estado de Ollama","version":"Versión","healthy":"Saludable","unhealthy":"No saludable"},"stats":{"models":"Modelos","sessions":"Sesiones"},"features":{"privacy":{"title":"Privacidad primero","description":"Tus datos permanecen en tu dispositivo"},"openSource":{"title":"Código abierto","description":"Software libre y de código abierto"},"localInference":{"title":"Inferencia local","description":"Ejecuta modelos de IA localmente con Ollama"}},"openSourceBy":"Código abierto por {{company}}","links":{"title":"Enlaces","github":"GitHub","githubDescription":"Ver código fuente y contribuir","website":"Sitio web","websiteDescription":"Visita nuestro sitio web","ollama":"Ollama","ollamaDescription":"Aprende más sobre Ollama","documentation":"Documentación","reportIssue":"Reportar problemas","reportIssueDescription":"Reportes de bugs y solicitudes de funciones","gitlab":"Espejo GitLab","gitlabDescription":"Repositorio GitLab auto-alojado","documentationDescription":"Guías, tutoriales y referencia de API"},"version":"Versión {{version}}"},"groups":{"general":"General","chat":"Chat","media":"Voz e imágenes","connections":"Conexiones"},"search":{"title":"Búsqueda web","description":"Busca en la web mediante una instancia autoalojada de SearXNG. Al activarla, el chat ofrece un interruptor de búsqueda y las tareas de Work con acceso a red pueden buscar.","enableLabel":"Activar búsqueda web","enableDescription":"Ofrecer búsqueda web en chats y tareas de Work. Las búsquedas se ejecutan en el servidor contra la instancia configurada.","urlLabel":"URL de SearXNG","urlDescription":"URL base de la instancia de SearXNG accesible desde el servidor. La pila de despliegue privado incluida ofrece http://searxng:8080.","maxResultsLabel":"Resultados por búsqueda","maxResultsDescription":"Cuántos resultados alimentan una respuesta o llamada de herramienta, 1-10.","maxResultsInvalid":"Los resultados por búsqueda deben estar entre 1 y 10.","safeSearchLabel":"Búsqueda segura","safeSearchDescription":"Pedir al motor que filtre resultados explícitos.","test":"Probar conexión","testing":"Probando…","testOk":"La búsqueda funciona — se devolvieron {{results}} resultados","testFailed":"La prueba de búsqueda falló","save":"Guardar","saved":"Configuración de búsqueda guardada","saveFailed":"No se pudo guardar la configuración de búsqueda"}}`),models:{title:`Modelos`,subtitle:`Descarga, gestiona y monitorea tus modelos de Ollama`,installed:`Modelos instalados`,available:`Modelos disponibles`,pull:`Descargar modelo`,pulling:`Descargando...`,delete:`Eliminar modelo`,deleting:`Eliminando...`,size:`Tamaño`,modified:`Modificado`,family:`Familia`,parameters:`Parámetros`,quantization:`Cuantización`,noModels:`No hay modelos instalados`,pullFirst:`Descarga un modelo para comenzar`,noModelsFound:`No se encontraron modelos`},personas:{title:`Personas`,create:`Crear persona`,edit:`Editar persona`,delete:`Eliminar persona`,name:`Nombre`,description:`Descripción`,systemPrompt:`Prompt del sistema`,model:`Modelo`,avatar:`Avatar`,background:`Fondo`,noPersonas:`No hay personas creadas`,createFirst:`Crea tu primera persona para personalizar tu experiencia de chat`},gallery:{title:`Galería`,subtitle:`Tu galería de imágenes generadas por IA`,imageCount:`{{count}} imágenes`,generate:`Generar imagen`,generateDescription:`Crea imágenes con IA`,generating:`Generando...`,prompt:`Prompt`,promptPlaceholder:`Describe la imagen que quieres generar...`,noImages:`Aún no hay imágenes generadas`,download:`Descargar`,delete:`Eliminar`,regenerate:`Regenerar`,model:`Modelo`,size:`Tamaño`,quality:`Calidad`,created:`Creado`},errors:{generic:`Ocurrió un error`,network:`Error de red. Por favor verifica tu conexión.`,unauthorized:`No estás autorizado para realizar esta acción.`,notFound:`El recurso solicitado no fue encontrado.`,serverError:`Error del servidor. Por favor intenta más tarde.`,validation:`Por favor verifica tu entrada e intenta de nuevo.`},keyboard:{title:`Atajos de teclado`,toggleSidebar:`Alternar barra lateral`,openSettings:`Abrir configuración`,toggleDarkMode:`Alternar modo oscuro`,showShortcuts:`Mostrar atajos de teclado`,closeModals:`Cerrar modales`,groups:{navigation:`Navegación`,general:`General`,chat:`Chat`,workspace:`Espacio de trabajo`},actions:{sendMessage:`Enviar mensaje`,newLine:`Nueva línea en mensaje`,saveEdit:`Guardar el mensaje editado`,cancelEdit:`Cancelar la edición`,saveFile:`Guardar archivo`,formatCode:`Formatear código`},description:`Todos los atajos de teclado disponibles en Libre WebUI.`,newChat:`Nuevo chat`,newWork:`Nueva sesión de Work`,openPalette:`Abrir la paleta de comandos`},modelManager:{title:`Modelos`,loading:`Cargando modelos...`,systemStatus:{online:`Ollama en línea`,offline:`Ollama sin conexión`,models:`modelo`,models_plural:`modelos`,running:`ejecutándose`,vram:`VRAM`},sections:{pull:`Descargar nuevo modelo`,library:`Explorar biblioteca`,running:`Modelos en ejecución`,local:`Modelos locales`,advanced:`Acciones avanzadas`,huggingface:`HuggingFace Hub`},pull:{placeholder:`Ingresa nombre del modelo (ej. llama3.2:3b, deepseek-r1:14b)`,button:`Descargar`,cancel:`Cancelar`,popular:`Modelos populares:`,browseAll:`Explorar todos los modelos en ollama.com`,success:`Modelo {{name}} descargado exitosamente`,cancelled:`Descarga de modelo cancelada`,failed:`Error al descargar modelo`,enterName:`Por favor ingresa un nombre de modelo`,restricted:`La instalación de modelos está restringida a administradores en esta instancia.`},progress:{starting:`Inicializando...`,pulling:`Descargando modelo...`,pullingLayer:`descargando`,verifying:`Verificando integridad...`,verifyingDigest:`verificando digest sha256`,writing:`Escribiendo manifiesto...`,cleaning:`Limpiando...`},library:{available:`disponible`,search:`Buscar modelos...`,noResults:`No se encontraron modelos que coincidan con tu criterio`,installed:`Instalado`,more:`+{{count}} más`,refresh:`Actualizar biblioteca`},local:{noModels:`Aún no hay modelos instalados`,pullToStart:`Descarga un modelo arriba para comenzar`,installed:`instalado`,running:`Ejecutándose`,info:`Info`,copy:`Copiar`,delete:`Eliminar`,deleteConfirm:`¿Estás seguro de que deseas eliminar el modelo "{{name}}"?`,deleteSuccess:`Modelo {{name}} eliminado exitosamente`,deleteFailed:`Error al eliminar modelo`},advanced:{createModel:`Crear modelo`,fromModelfile:`Desde Modelfile`,copyModel:`Copiar modelo`,duplicateExisting:`Duplicar existente`,testEmbeddings:`Probar embeddings`,generateVectors:`Generar vectores`,healthCheck:`Verificación de salud`,testConnection:`Probar conexión`,healthy:`¡Ollama está saludable!`},modals:{details:{title:`Detalles del modelo`,info:`Información del modelo`,family:`Familia`,parameters:`Parámetros`,quantization:`Cuantización`,format:`Formato`,systemPrompt:`Prompt del sistema`,template:`Plantilla`,license:`Licencia`,modelfile:`Modelfile`,noDetails:`Sin detalles disponibles`},copy:{title:`Copiar modelo`,source:`Modelo origen`,selectModel:`Selecciona un modelo...`,newName:`Nuevo nombre de modelo`,placeholder:`ej. mi-modelo-personalizado`,copying:`Copiando...`,button:`Copiar modelo`,success:`Modelo copiado a {{name}}`,failed:`Error al copiar modelo`,enterBoth:`Por favor ingresa nombres de origen y destino`},create:{title:`Crear modelo personalizado`,name:`Nombre del modelo`,namePlaceholder:`ej. mi-asistente`,modelfile:`Modelfile`,modelfilePlaceholder:`FROM llama3.2
2
+ SYSTEM Eres un asistente útil.`,see:`Ver`,docs:`Documentación de Modelfile`,docsLink:`para referencia de sintaxis`,creating:`Creando...`,button:`Crear modelo`,success:`Modelo {{name}} creado exitosamente`,failed:`Error al crear modelo`,enterBoth:`Por favor ingresa nombre del modelo y contenido del Modelfile`},embeddings:{title:`Probar embeddings`,model:`Modelo de embedding`,selectModel:`Selecciona un modelo...`,recommended:`Recomendados: nomic-embed-text, mxbai-embed-large`,input:`Texto de entrada`,placeholder:`Ingresa texto para generar embeddings...`,generating:`Generando...`,button:`Generar embeddings`,result:`Resultado ({{count}} dimensiones)`,success:`Vector de embedding de {{count}} dimensiones generado`,failed:`Error al generar embeddings`,enterBoth:`Por favor selecciona un modelo e ingresa texto`}},huggingface:{browseAll:`Ver todo en HuggingFace`,checkingGguf:`Buscando archivos GGUF...`,noGgufAvailable:`No hay archivos GGUF disponibles para Ollama`,ggufFilesCount:`Archivos GGUF ({{count}}) - Descargar a Ollama`,noModelsFound:`No se encontraron modelos`,noResults:`No se encontraron modelos. Intenta ajustar tu búsqueda o filtros.`,browseAllLink:`Ver todo`,search:`Buscar modelos en HuggingFace...`,by:`por`,gated:`Acceso restringido`,viewOnHF:`Ver en HuggingFace`,sortDownloads:`Descargas`,sortLikes:`Me gusta`,sortRecent:`Reciente`,taskTextGeneration:`Generación de texto`,taskTextToSpeech:`Texto a voz`,taskTextToImage:`Texto a imagen`,taskSpeechRecognition:`Reconocimiento de voz`,tasks:{textGen:`Generación de texto`,tts:`Texto a voz`,image:`Texto a imagen`,stt:`Reconocimiento de voz`},sort:{downloads:`Más descargados`,likes:`Más gustados`,recent:`Actualizados recientemente`}}},personaManager:{title:`Personas`,subtitle:`Crea y gestiona personas de IA con personalidades, memorias y comportamientos personalizados`,loading:`Cargando personas...`,createButton:`Crear persona`,importExport:`Importar/Exportar`,stats:{title:`Tus personas`,count:`{{count}} persona creada`,count_plural:`{{count}} personas creadas`},empty:{title:`Aún no hay personas`,description:`Crea tu primera persona para comenzar con interacciones de IA personalizadas`,button:`Crear tu primera persona`},deleteConfirm:`¿Estás seguro de que deseas eliminar "{{name}}"?`,deleteSuccess:`Persona "{{name}}" eliminada exitosamente`,downloadSuccess:`Persona "{{name}}" descargada exitosamente`,failed:`Error al {{action}} persona`},personaForm:{title:{create:`Crear nueva persona`,edit:`Editar persona`},subtitle:{create:`Crea una nueva persona de IA con personalidad personalizada, sistemas de memoria y capacidades de aprendizaje adaptativo`,edit:`Personaliza tu persona de IA con memoria avanzada, aprendizaje adaptativo y parámetros inteligentes`},loading:`Cargando formulario...`,saved:`Guardado`,tabs:{basic:`Básico`,parameters:`Parámetros`,memory:`Memoria y aprendizaje`,advanced:`Avanzado`},basic:{name:`Nombre`,namePlaceholder:`Ingresa nombre de persona`,model:`Modelo`,selectModel:`Selecciona un modelo`,description:`Descripción`,descriptionPlaceholder:`Describe tu persona...`,systemPrompt:`Prompt del sistema`,systemPromptPlaceholder:`Ingresa el prompt del sistema que define el comportamiento de tu persona...`,systemPromptHint:`El prompt del sistema define cómo se comportará y responderá tu persona.`},parameters:{temperature:`Temperatura`,temperatureHint:`Controla creatividad vs consistencia`,topP:`Top-P`,topPHint:`Controla diversidad de respuesta`,topK:`Top-K`,topKHint:`Limita vocabulario a los top-k tokens`,contextWindow:`Ventana de contexto`,contextWindowHint:`Longitud máxima del historial de conversación`,maxTokens:`Tokens máximos`,maxTokensHint:`Longitud máxima de respuesta`,repeatPenalty:`Penalización de repetición`,repeatPenaltyHint:`Reduce respuestas repetitivas`},memory:{title:`Sistema de memoria`,subtitle:`La persona recuerda conversaciones a lo largo del tiempo`,enableHint:`Habilita el sistema de memoria para que tu persona recuerde conversaciones y construya contexto a lo largo del tiempo.`,loading:`Cargando estado de memoria...`,noData:`Aún no hay datos de memoria`,memories:`Memorias`,mbUsed:`MB usados`,lastBackup:`Última copia de seguridad`,never:`Nunca`,maxMemories:`Memorias máximas`,maxMemoriesHint:`Cuántas memorias puede almacenar esta persona`,retention:`Retención de memoria`,retentionHint:`Días para mantener memorias antes de limpiar`,autoCleanup:`Limpieza automática de memorias antiguas`,wipeAll:`Borrar todas las memorias`,wipeCannot:`Esto no se puede deshacer`,wipeButton:`Borrar`,wiping:`Borrando...`,wipeConfirm:`¿Estás seguro de que deseas borrar todas las memorias? Esto no se puede deshacer.`,wipeSuccess:`Se borraron {{count}} memorias`},learning:{title:`Aprendizaje adaptativo`,subtitle:`La persona evoluciona basándose en interacciones`,enableHint:`Habilita el aprendizaje adaptativo para que tu persona evolucione y personalice respuestas basándose en tus interacciones.`,speed:`Velocidad de aprendizaje`,slow:`Lento`,slowDesc:`Cambios graduales`,balanced:`Equilibrado`,balancedDesc:`Ritmo moderado`,fast:`Rápido`,fastDesc:`Adaptación rápida`,autoAdapt:`Auto-adaptar a preferencias del usuario`,whatLearns:`Lo que aprende la persona:`,conversationTone:`Tono de conversación`,responseStyle:`Estilo de respuesta`,userPreferences:`Preferencias del usuario`,topicInterests:`Intereses en temas`},advanced:{embeddingModel:`Modelo de embedding`,embeddingHint:`Selecciona el modelo usado para codificación de memoria y búsqueda semántica. Los modelos de embedding se muestran primero, seguidos de otros modelos disponibles.`,noModels:`No se encontraron modelos`,embeddingModels:`Modelos de embedding`,otherModels:`Otros modelos`,installHint:`Instala un modelo de embedding:`,recommended:`Recomendados: nomic-embed-text, mxbai-embed-large, bge-m3, snowflake-arctic-embed`,aboutTitle:`Acerca de configuración avanzada`,aboutDescription:`El modelo de embedding es usado por el sistema de memoria para entender significado semántico y encontrar memorias relevantes durante conversaciones. Elige un modelo que coincida con tu caso de uso y recursos disponibles.`},actions:{cancel:`Cancelar`,save:`Guardar`,saving:`Guardando...`,saveClose:`Guardar y cerrar`,create:`Crear`},success:{created:`Persona creada`,updated:`Persona actualizada`},error:{saveFailed:`Error al guardar`}},personaCard:{enhanced:`Mejorado`,systemPrompt:`Prompt del sistema`,memories:`memorias`,use:`Usar`,editTooltip:`Editar persona`,downloadTooltip:`Descargar persona`,backup:`Copia de seguridad`,exportDNA:`Exportar ADN`,wipeMemories:`Borrar memorias`,wipeConfirm:`¿Estás seguro de que deseas borrar todas las memorias de esta persona? Esta acción no se puede deshacer.`,wipeSuccess:`Se borraron {{count}} memorias`,backupSuccess:`Copia de seguridad de persona descargada exitosamente`,dnaSuccess:`ADN de persona exportado exitosamente`,failed:`Error al {{action}}`},userManager:{title:`Gestión de usuarios`,subtitle:`Gestiona cuentas de usuario y permisos`,pageDescription:`Gestiona cuentas de usuario, permisos y controles de acceso para tu instancia de Libre WebUI.`,loading:`Cargando usuarios...`,createUser:`Crear usuario`,search:`Buscar usuarios...`,noUsers:`No se encontraron usuarios`,noUsersMatching:`No hay usuarios que coincidan con tu búsqueda`,columns:{user:`Usuario`,email:`Correo electrónico`,role:`Rol`,created:`Creado`,actions:`Acciones`},roles:{admin:`Admin`,user:`Usuario`},noEmail:`Sin correo`,deleteConfirm:`¿Estás seguro de que deseas eliminar el usuario "{{name}}"?`,deleteSuccess:`Usuario eliminado exitosamente`,deleteFailed:`Error al eliminar usuario`,cannotDeleteSelf:`No puedes eliminar tu propia cuenta`,form:{title:{create:`Crear usuario`,edit:`Editar usuario`},username:`Nombre de usuario`,usernamePlaceholder:`Ingresa nombre de usuario`,email:`Correo electrónico`,emailPlaceholder:`Ingresa correo (opcional)`,password:`Contraseña`,passwordPlaceholder:`Ingresa contraseña`,passwordHint:`Deja en blanco para mantener contraseña actual`,role:`Rol`,creating:`Creando...`,updating:`Actualizando...`,createButton:`Crear usuario`,updateButton:`Actualizar usuario`,createSuccess:`Usuario creado exitosamente`,updateSuccess:`Usuario actualizado exitosamente`,createFailed:`Error al crear usuario`,updateFailed:`Error al actualizar usuario`},approval:{title:`Aprobaciones pendientes`,description:`Revisa los nuevos registros antes de permitirles acceso a esta instancia.`,registered:`Registrado`,activate:`Activar cuenta`,reject:`Rechazar registro`,approved:`{{name}} ya puede iniciar sesión.`,failed:`No se pudo aprobar la cuenta.`,notification:`{{count}} registro(s) esperando tu aprobación.`,notificationBadge:`{{count}} aprobaciones de usuario pendientes`},workAccess:{title:`Acceso a Work`,description:`Permitir que todos los usuarios activos creen y ejecuten tareas de Work en sandboxes aislados. Los administradores siempre tienen acceso; los espacios de trabajo en carpetas del host siguen siendo solo para administradores.`,saved:`Acceso a Work actualizado`,saveFailed:`No se pudo actualizar el acceso a Work`},workPolicies:{title:`Políticas de Work`,description:`Preajustes de ejecución con nombre (imagen, límites, parada por inactividad) bajo los que crear tareas. Los campos vacíos heredan los valores globales.`,add:`Añadir política`,name:`Nombre`,image:`Imagen`,memory:`Memoria`,cpu:`CPU`,pids:`Límite de PID`,workspaceSize:`Tamaño del espacio de trabajo`,idleMinutes:`Parada por inactividad (minutos)`,networkDefault:`Red predeterminada`,networkInherit:`Heredar predeterminado`,networkOn:`Activada`,networkOff:`Desactivada`,save:`Guardar`,cancel:`Cancelar`,edit:`Editar política`,delete:`Eliminar política`,deleteConfirm:`¿Eliminar esta política? Las tareas que la usan vuelven a los valores globales.`,empty:`Aún no hay políticas. Las tareas usan los valores de ejecución globales.`,saved:`Política de Work guardada`,deleted:`Política de Work eliminada`,failed:`No se pudo guardar la política de Work`,invalidNumber:`El límite de PID y la parada por inactividad deben ser números.`},modelAccess:{title:`Descarga de modelos`,description:`Permitir que todos los usuarios activos descarguen modelos desde Ollama y el navegador de Hugging Face. Los administradores siempre pueden descargar modelos.`,saved:`Acceso a descarga de modelos actualizado`,saveFailed:`No se pudo actualizar el acceso a descarga de modelos`},webSearchAccess:{title:`Búsqueda web`,description:`Permitir que todos los usuarios activos usen la búsqueda web en chats y tareas de Work. Los administradores siempre pueden usarla. El motor se configura en Configuración > Búsqueda.`,saved:`Acceso a búsqueda web actualizado`,saveFailed:`No se pudo actualizar el acceso a búsqueda web`},agentAccess:{title:`Agentes`,description:`Ofrecer la sección Agentes (Libre Claw) a los administradores. Las CLI de agentes se ejecutan en el host como el usuario del servidor, fuera del sandbox de Work.`,saved:`Acceso a agentes actualizado`,saveFailed:`No se pudo actualizar el acceso a agentes`,lockedByEnv:`Fijado por la variable de entorno AGENT_CLI_MODELS_ENABLED.`}},chatHistory:{label:`Historial de la conversación`,jumpToTurn:`Ir al turno {{index}} de {{total}}`},chatMessage:{you:`Tú`,assistant:`Asistente`,system:`Sistema`,copy:`Copiar`,copyMessage:`Copiar mensaje`,copied:`¡Copiado!`,regenerate:`Regenerar`,regenerateResponse:`Regenerar respuesta`,edit:`Editar`,editSystemMessage:`Editar mensaje del sistema`,saveChanges:`Guardar cambios`,cancelEditing:`Cancelar edición`,saveAndSubmit:`Guardar y enviar`,goodResponse:`Buena respuesta`,badResponse:`Mala respuesta`,delete:`Eliminar`,deleteConfirm:`¿Eliminar este mensaje?`,branch:`Ramificar`,speaking:`Hablando...`,speakMessage:`Leer mensaje`,stopSpeaking:`Detener lectura`,showMore:`Mostrar más`,showLess:`Mostrar menos`,thinking:`Pensando`,thoughtFor:`Pensó durante {{duration}}`,hiddenLines:`{{count}} líneas ocultas`,systemMessagePlaceholder:`Ingresa tu mensaje del sistema...`,fullSizeImage:`Imagen a tamaño completo`,startConversation:`Iniciar una conversación`,startConversationDescription:`Envía un mensaje para comenzar a chatear con tu asistente de IA. Haz preguntas, obtén ayuda con código o mantén una conversación natural.`,scrollToBottom:`Desplazar al final`,newMessages:`Nuevos mensajes`},imageGallery:{title:`Galería de imágenes`,noImages:`Aún no hay imágenes`,noImagesHint:`Genera tu primera imagen usando el panel de la derecha`,delete:`Eliminar`,download:`Descargar`,deleteConfirm:`¿Estás seguro de que deseas eliminar esta imagen?`,deleteSuccess:`Imagen eliminada`,deleteFailed:`Error al eliminar imagen`,downloadFailed:`Error al descargar imagen`,loadMore:`Cargar más ({{current}} de {{total}})`,loadFailed:`Error al cargar galería`},imageGeneration:{title:`Generar imagen`,prompt:`Prompt`,promptPlaceholder:`Describe la imagen que quieres crear...`,model:`Modelo`,selectModel:`Seleccionar modelo`,noModels:`No hay modelos de generación de imágenes disponibles`,configurePlugin:`Configura un plugin con soporte de generación de imágenes`,size:`Tamaño`,quality:`Calidad`,style:`Estilo`,generate:`Generar`,generating:`Generando...`,success:`Imagen generada exitosamente`,failed:`Error al generar imagen`,enterPrompt:`Por favor ingresa un prompt`,promptTooLong:`El prompt excede la longitud máxima de {{max}} caracteres`},errorBoundary:{title:`Algo salió mal`,description:`Encontramos un error inesperado. Por favor intenta actualizar la página.`,tryAgain:`Actualizar página`,goHome:`Ir al inicio`,errorDetails:`Detalles del error (desarrollo)`},documents:{title:`Documentos`,upload:`Subir documento`,uploading:`Subiendo...`,noDocuments:`No hay documentos subidos`,uploadHint:`Sube documentos para usar en tus conversaciones`,delete:`Eliminar`,deleteConfirm:`¿Estás seguro de que deseas eliminar este documento?`,deleteSuccess:`Documento eliminado`,deleteFailed:`Error al eliminar documento`,uploadSuccess:`Documento subido exitosamente`,uploadFailed:`Error al subir documento`,types:`Soportados: PDF, TXT, MD, DOCX`,unsupportedFileType:`Solo se soportan archivos PDF y TXT`,fileSizeTooLarge:`El tamaño del archivo debe ser menor a 10 MB`,uploadSuccessWithName:`Documento "{{name}}" subido exitosamente`,removeSuccess:`Documento eliminado exitosamente`,removeFailed:`Error al eliminar documento`,removeError:`Ocurrió un error al eliminar el documento`,clickToUpload:`Haz clic para subir`,orDragAndDrop:`o arrastra y suelta`,fileTypesAndSize:`Archivos PDF o TXT hasta 10 MB`,uploadedDocuments:`Documentos subidos`,removeDocument:`Eliminar documento`},ttsButton:{speak:`Hablar`,stop:`Detener`,speaking:`Hablando...`,generateFailed:`Error al generar voz`,playbackFailed:`Error en reproducción de audio`,stopSpeaking:`Detener lectura`,generatingSpeech:`Generando voz...`,readAloud:`Leer en voz alta`},artifacts:{title:`Artefactos`,code:`Código`,preview:`Vista previa`,copy:`Copiar código`,copied:`¡Copiado!`,download:`Descargar`,expand:`Expandir`,collapse:`Contraer`,openInNewTab:`Abrir en nueva pestaña`,invalidSvg:`Contenido SVG inválido`,invalidJson:`Contenido JSON inválido`,previewMode:`Modo vista previa`,codeMode:`Modo código`,copyContent:`Copiar contenido`,openInPanel:`Abrir en panel`,openInNewWindow:`Abrir en nueva ventana`,created:`Creado`,closePanelEsc:`Cerrar panel (Esc)`,copyButton:`Copiar`,open:`Abrir`,dragEdgeToResize:`Arrastra el borde para redimensionar`,previewUnavailable:`Preview unavailable`,previewUnavailableDescription:`This artifact does not contain renderable preview content. Switch to code view to inspect the source.`,versionOf:`Versión {{current}} de {{total}}`,previousVersion:`Versión anterior`,nextVersion:`Versión siguiente`},personaImportExport:{title:`Importar y exportar personas`,description:`Exporta tus personas para compartirlas o importa personas de otros`,exportPersonas:`Exportar personas`,importPersonas:`Importar personas`,noPersonasToExport:`No hay personas para exportar`,personasAvailable:`{{count}} persona disponible`,personasAvailable_plural:`{{count}} personas disponibles`,exportAll:`Exportar todo`,uploadJsonFile:`Subir archivo JSON`,pasteJsonLabel:`Pegar datos JSON`,pasteJsonPlaceholder:`Pega los datos JSON de la persona aquí...`,importing:`Importando...`,importButton:`Importar persona(s)`,expectedFormat:`Formato JSON esperado:`,exportSuccess:`Persona "{{name}}" exportada exitosamente`,exportFailed:`Error al exportar persona`,exportAllSuccess:`Todas las {{count}} personas exportadas exitosamente`,exportAllFailed:`Error al exportar personas`,pasteJsonData:`Por favor pega los datos JSON de la persona`,importMultipleSuccess:`Se importaron {{count}} personas exitosamente`,importMultipleFailed:`Error al importar {{count}} personas`,importNoneFailed:`Error al importar cualquier persona`,importSuccess:`Persona importada exitosamente`,importFailed:`Error al importar persona`},generationStats:{details:`Detalles`,promptTokens:`Tokens del prompt:`,generatedTokens:`Tokens generados:`,totalTokens:`Tokens totales:`,speed:`Velocidad:`,promptEval:`Evaluación del prompt:`,generation:`Generación:`,modelLoad:`Carga del modelo:`,totalTime:`Tiempo total:`,generatedAt:`Generado a las:`},userMenu:{loggedOut:`Sesión cerrada correctamente`,pictureUpdated:`Foto de perfil actualizada`,failedUpdateAvatar:`Error al actualizar el avatar`,failedUpdatePicture:`Error al actualizar la foto de perfil`,noEmail:`Sin correo electrónico`,changePicture:`Cambiar imagen`,settings:`Configuración`,userManagement:`Gestión de usuarios`,signOut:`Cerrar sesión`,changeProfilePicture:`Cambiar foto de perfil`},pluginManager:{title:`Gestor de plugins`,upload:`Subir`,addJson:`Añadir JSON`,browseHF:`Explorar HF Hub`,confirmDelete:`¿Estás seguro de que quieres eliminar este plugin?`,uploading:`Subiendo plugin...`,pasteJson:`Pega el JSON del plugin aquí...`,installPlugin:`Instalar plugin`,loading:`Cargando plugins...`,noPlugins:`No hay plugins instalados`,noPluginsDescription:`Sube un archivo de plugin o añade uno desde JSON para comenzar.`,active:`Activo`,id:`ID`,endpoint:`Endpoint`,activate:`Activar`,deactivate:`Desactivar`,activePlugin:`Plugin activo`,activePluginDescription:`Todas las solicitudes de chat se enrutarán a través de este plugin`,variables:{title:`Variables`,save:`Guardar`,saving:`Guardando...`,saved:`Variables guardadas`,saveFailed:`Error al guardar variables`,resetDefaults:`Restablecer valores`,reset:`Variables restablecidas`,sensitiveSet:`Valor establecido (ingrese nuevo valor para cambiar)`,resetFailed:`Error al restablecer las variables`,showValue:`Mostrar valor de {{label}}`,hideValue:`Ocultar valor de {{label}}`,connection:`Conexión`,advanced:`Parámetros avanzados`,inherited:`Usar predeterminado del proveedor`,inheritedValue:`Usar predeterminado del proveedor ({{value}})`,enabled:`Habilitado`,disabled:`Deshabilitado`,required:`Se requiere un valor`,fullApiEndpoint:`URL completa del endpoint de API`,endpointHelp:`Introduce la URL de solicitud completa, incluyendo su ruta de operación (por ejemplo, /v1/chat/completions), no solo la URL base del proveedor.`,invalidUrl:`Introduce una URL de endpoint de API completa válida, por ejemplo https://provider.example/v1/chat/completions`,insecureUrl:`Los endpoints de API deben usar HTTP o HTTPS.`,httpWarning:`HTTP no cifra las credenciales ni el tráfico. Úsalo solo en una red de confianza.`,invalidBaseUrl:`Las URLs base no pueden contener una cadena de consulta ni un fragmento.`,invalidApiPath:`Debe empezar con / y no contener URL, consulta, fragmento ni el segmento ..`,tooLong:`El valor es demasiado largo`}},huggingface:{title:`Explorador de modelos HuggingFace`,subtitle:`Explora y selecciona modelos del Hub`,searchPlaceholder:`Buscar modelos...`,filters:`Filtros`,task:`Tarea`,sortBy:`Ordenar por`,noModels:`No se encontraron modelos`,adjustSearch:`Intenta ajustar tu búsqueda o filtros`,gated:`Restringido`,selected:`Seleccionado`,select:`Seleccionar`,refresh:`Actualizar`,modelsFound:`modelos encontrados`},demoMode:{title:`Modo demo`,github:`GitHub`},personaBackground:{label:`Imagen de fondo`,uploadBackgroundImage:`Subir imagen de fondo`,dragAndDrop:`Arrastra y suelta una imagen o haz clic para explorar`,chooseImage:`Elegir imagen`,uploading:`Subiendo...`,enterImageUrl:`O ingresa la URL de la imagen`,supportedFormats:`Soporta: JPG, PNG, GIF, WebP (máx 5MB). Las imágenes horizontales anchas funcionan mejor.`,customBackground:`Imagen de fondo personalizada`,clickToChange:`Haz clic para cambiar o eliminar`,removed:`Fondo eliminado`,uploaded:`Fondo subido exitosamente`,invalidFile:`Por favor selecciona un archivo de imagen válido`,fileTooLarge:`El tamaño de la imagen de fondo debe ser menor a 5MB`,readFailed:`Error al leer el archivo de imagen`,uploadFailed:`Error al subir la imagen de fondo`},modelSelector:{searchInstalled:`Buscar modelos instalados...`,searchOllama:`Buscar en la biblioteca de Ollama...`,searchHuggingFace:`Buscar en HuggingFace...`,selectModel:`Seleccionar modelo`,personas:`Personas`,ollamaModels:`Modelos Ollama`,pluginModels:`Modelos de plugins`,actions:`Acciones`,installed:`Instalado`,use:`Usar`,pull:`Descargar`,pullRestricted:`La instalación de modelos está restringida a administradores en esta instancia.`,adminOnlyPull:`Solo administradores`,legacyProvider:`proveedor no registrado`,providerNotRecorded:`Proveedor no registrado`,providerUnavailable:`proveedor no disponible`,reselectProvider:`vuelve a seleccionar un proveedor para fijar este modelo`,unavailable:`no disponible`,unavailableSelections:`Selecciones no disponibles`,agentModels:`Agentes`},libreClaw:{title:`Agentes`,subtitle:`Ejecuciones, aprobaciones, programaciones, memoria, herramientas y uso del agente local.`,dashboard:`Panel de control`,connection:{disconnectedTitle:`El demonio de Libre Claw no está conectado`,disconnectedDescription:`Inícielo localmente con <command>libre-claw start</command> o configure <env>LIBRE_CLAW_BASE_URL</env> en el entorno backend.`},status:{connected:`Conectado`,disconnected:`desconectado`,activeRuns:`{{count}} activo`,activeRuns_plural:`{{count}} activo`},states:{queued:`En cola`,running:`En ejecución`,blocked:`Bloqueado`,done:`hecho`,failed:`Fallido`,cancelled:`Cancelado`},startRun:{title:`Iniciar ejecución del agente`,placeholder:`Pídale a Libre Claw que inspeccione un repositorio, corrija un error, ejecute una revisión, programe un informe...`,chatRun:`Ejecutar chat`,goalMode:`Modo objetivo`,providerOverride:`Anulación del proveedor`,modelOverride:`Anulación de modelo`,run:`Ejecutar`},modelRoute:{title:`Ruta Modelo`,providerPlaceholder:`proveedor`,modelPlaceholder:`modelo`,persistGlobal:`Persistir en la configuración global Libre Claw`,saveModel:`Guardar modelo`,theme:`Tema de Libre Claw`,saveTheme:`Guardar tema`},runs:{title:`Ejecuciones`,empty:`Aún no hay ejecuciones de Libre Claw.`},timeline:{title:`Cronología de la ejecución`,empty:`Seleccione una ejecución para inspeccionar sus eventos.`,streaming:`Transmitiendo...`,assistantResponse:`Respuesta del asistente`,resultOk:`bien`,resultError:`error`,labels:{userMessage:`Mensaje de usuario`,toolCall:`llamada de herramienta`,toolResult:`Resultado de la herramienta`,approvalRequest:`Solicitud de aprobación`,approvalResponse:`Respuesta de aprobación`,runStarted:`Ejecución iniciada`,runFinished:`Ejecución finalizada`,usage:`Uso`,error:`error`}},approvals:{needed:`Aprobación necesaria`,allowOnce:`permitir una vez`,alwaysAllowTool:`Permitir siempre la herramienta`,deny:`Rechazar`,toolApprovalRequested:`Se solicita aprobación de herramienta`},automations:{title:`Automatizaciones`,namePlaceholder:`Nombre`,schedulePlaceholder:`daily 09:00`,promptPlaceholder:`Aviso de automatización`,create:`crear`,empty:`No hay automatizaciones programadas Libre Claw.`,runNow:`Ejecutar ahora`,pause:`Pausa`,resume:`Reanudar`,routes:{report:`Informe`,telegram:`Telegram`},status:{active:`Activo`,paused:`En pausa`}},usageFallback:{title:`Uso y respaldo`,usage:`Uso`,fallbackRoute:`Ruta alternativa`,noUsage:`Aún no hay registros de uso.`},metrics:{provider:`Proveedor`,model:`modelo`,input:`Entrada`,output:`Salida`,cached:`En caché`,reasoning:`Razonamiento`,cost:`Costo`,tool:`Herramienta`,resolution:`Resolución`,state:`Estado`,stopReason:`Motivo de detención`,tokens:`{{formatted}} ficha`,tokens_plural:`{{formatted}} fichas`},fallbacks:{tool:`herramienta`,unknown:`desconocido`,resolved:`resuelto`,unknownError:`Error desconocido`},toasts:{loadStatusFailed:`No se pudo cargar el estado Libre Claw`,enterTask:`Ingrese una tarea para Libre Claw`,runStarted:`Ejecución de Libre Claw iniciada`,startRunFailed:`No se pudo iniciar la ejecución de Libre Claw`,runCancelled:`Ejecución cancelada`,cancelRunFailed:`No se pudo cancelar la ejecución`,approved:`Aprobado`,denied:`denegado`,resolvePermissionFailed:`No se pudo resolver el permiso`,providerModelRequired:`Se requiere proveedor y modelo.`,modelUpdated:`Modelo de Libre Claw actualizado`,updateModelFailed:`No se pudo actualizar el modelo`,themeUpdated:`Tema de Libre Claw actualizado`,updateThemeFailed:`No se pudo actualizar el tema`,automationRequired:`Se requieren el nombre, el cronograma y el aviso de la automatización`,automationCreated:`Automatización creada`,createAutomationFailed:`No se pudo crear la automatización`,automationUpdated:`Automatización actualizada`,updateAutomationFailed:`No se pudo actualizar la automatización`}},work:{title:`Trabajo`,subtitle:`Espacios de trabajo aislados para modelos`,tasks:{title:`Tareas de trabajo`,subtitle:`Espacios de trabajo locales persistentes`,new:`Nueva tarea`,emptyTitle:`Aún no hay tareas de trabajo`,empty:`Tus tareas de trabajo aparecerán aquí después de enviar el primer mensaje.`,untitled:`Tarea sin título`,actions:`Acciones de la tarea`,delete:`Eliminar tarea`,deleteNamed:`Eliminar {{title}}`,deleteConfirm:`¿Eliminar «{{title}}» y su espacio de trabajo de forma permanente?`,close:`Cerrar tareas de trabajo`,open:`Abrir tareas de trabajo`,rename:`Título de la tarea`,loading:`Cargando tarea…`,notFound:`Esta tarea de trabajo no está disponible`,back:`Iniciar una nueva tarea`,status:`Estado: {{status}}`},landing:{title:`Iniciar una nueva tarea de trabajo`,description:`Asigna a un modelo local o de un proveedor configurado un espacio de trabajo aislado y persistente. Puede inspeccionar archivos, ejecutar herramientas y continuar donde lo dejó cuando vuelvas.`,isolated:`Aislado`,isolatedBody:`Cada tarea tiene su propio contenedor y archivos.`,durable:`Persistente`,durableBody:`Vuelve más tarde a su conversación y espacio de trabajo.`,controlled:`Controlado`,controlledBody:`El entorno de ejecución y los archivos de la tarea permanecen aislados del host.`},composer:{placeholder:`Describe lo que quieres crear o cambiar…`,model:`Modelo de trabajo`,noModels:`No hay modelos compatibles con el modo Trabajo`,cancel:`Detener`,send:`Ejecutar`,hint:`Cada tarea conserva sus propios archivos e historial. Revisa la salida del modelo antes de usarla.`,remoteTitle:`Proveedor remoto`,remoteHint:`La conversación y la salida de las herramientas se envían al servicio configurado. Una ejecución autónoma puede realizar varias llamadas al proveedor y generar cargos. Los archivos del espacio de trabajo permanecen locales, salvo que una herramienta devuelva su contenido.`,remoteDismiss:`Ocultar`,remoteDismissLabel:`Ocultar aviso del proveedor remoto`,remoteDismissFailed:`No se pudo guardar la preferencia del proveedor remoto.`,noModelSelected:`No hay ningún modelo compatible con el modo Trabajo seleccionado.`},conversation:{ready:`Espacio de trabajo listo`,empty:`Continúa la tarea abajo. Esta conversación y sus archivos permanecen asociados a este espacio de trabajo.`,loadOlder:`Cargar mensajes anteriores`},status:{preparing:`Preparando el espacio de trabajo aislado…`,running:`Trabajando en el espacio de trabajo local…`},statusLabels:{idle:`Inactivo`,thinking:`Pensando`,complete:`Completado`,needsInput:`Requiere información`,error:`Error`},live:{connecting:`Conectando con las actualizaciones en vivo…`,reconnecting:`Reconectando con las actualizaciones en vivo…`,unavailable:`Actualizaciones en vivo no disponibles`,newActivity:`Nueva actividad`,skillsLoaded:`Habilidades del espacio de trabajo · {{count}}`},runtime:{unavailable:`Entorno de ejecución no disponible`,ready:`Entorno de ejecución listo`,readyOllama:`Docker listo`,readyPlugin:`Docker + plugin listos`,readyHybrid:`Docker + modelos listos`,reason:`Se requieren Docker y un proveedor de modelos disponible mediante Ollama o un plugin.`},workspace:{label:`Vistas del espacio de trabajo`,files:`Archivos`,activity:`Actividad`,preview:`Vista previa`,resize:`Cambiar el tamaño de la conversación y el espacio de trabajo`,resizeHint:`Arrastra para cambiar el tamaño. Usa las teclas de flecha para un control preciso. Haz doble clic o pulsa Intro para restablecer.`,splitSize:`Conversación {{conversation}} %, espacio de trabajo {{workspace}} %`,terminal:`Terminal`,git:`Git`},files:{discard:`¿Descartar los cambios no guardados del archivo?`,leaveWithDraft:`¿Salir de este archivo? La edición sin guardar se conservará como borrador en el navegador.`,up:`Carpeta principal`,back:`Volver a los archivos`,empty:`Aún no hay archivos en esta carpeta.`,select:`Selecciona un archivo para inspeccionarlo y editarlo.`,editorLabel:`Editor de archivos: {{path}}`,format:`Formatear`,formatted:`Código formateado.`,formatFailed:`No se pudo formatear este archivo.`,formatShortcut:`Formatear (Mayús+Alt+F)`,formatTooLarge:`El formateo está limitado a archivos de menos de 100.000 caracteres y 4.000 líneas.`,formatUnsupported:`El formato no está disponible para este tipo de archivo.`,saveShortcut:`Guardar (⌘/Ctrl+S)`,highlightPaused:`El resaltado en tiempo real está pausado para archivos grandes, a fin de mantener una edición fluida.`,plainTextLarge:`Texto sin formato · archivo grande`,changes:`Cambios`,changesSince:`Qué cambió desde el último turno`,diffLabel:`Cambios desde el último turno: {{path}}`,diffFolded:`{{count}} líneas sin cambios`},activity:{empty:`Los comandos, las operaciones de archivos y los resultados de las herramientas aparecerán aquí.`,toolActivity:`Actividad de herramientas`,details:`Detalles`,kinds:{message:`Mensaje`,toolCall:`Llamada a herramienta`,toolResult:`Resultado de herramienta`,error:`Error`}},preview:{command:`Comando de inicio opcional`,start:`Iniciar vista previa`,stop:`Detener vista previa`,open:`Abrir`,starting:`Iniciando vista previa…`,frameTitle:`Vista previa del espacio de trabajo`,failed:`No se pudo iniciar la vista previa. Revisa Actividad e inténtalo con otro comando.`,empty:`Inicia la aplicación dentro de este espacio de trabajo para inspeccionarla aquí.`},mobile:{surface:`Vista de la tarea`,conversation:`Conversación`,workspace:`Espacio de trabajo`},toasts:{runFailed:`No se pudo iniciar la tarea de trabajo.`,updateFailed:`No se pudo actualizar esta tarea.`,renameFailed:`No se pudo cambiar el nombre de esta tarea.`,cancelled:`Ejecución de trabajo detenida.`,cancelFailed:`No se pudo detener la ejecución de trabajo.`,deleteFailed:`No se pudo eliminar esta tarea de trabajo.`,saveFailed:`No se pudo guardar este archivo.`,saved:`Archivo guardado.`,previewFailed:`No se pudo iniciar la vista previa.`,previewStopFailed:`No se pudo detener la vista previa.`},terminal:{connecting:`Abriendo un shell en el entorno aislado…`,closed:`La sesión de terminal ha terminado.`,failed:`No se pudo iniciar la sesión de terminal.`,reconnect:`Reconectar`,unavailable:`La terminal interactiva no está disponible en esta instalación.`,blockedByRun:`El modelo está usando este contenedor. La terminal se abrirá al terminar el turno.`,taskRunning:`Turno del modelo en curso`},policy:{label:`Política de ejecución`,default:`Predeterminada (límites globales)`},git:{actionFailed:`La acción de Git falló.`,blockedByPreview:`Detén la vista previa antes de cambiar el estado de Git.`,blockedByRun:`Las acciones de escritura de Git se desbloquean al terminar el turno del modelo.`,branchCreated:`{{name}} creada.`,branchSwitched:`Cambiado a {{name}}.`,clean:`El árbol de trabajo está limpio.`,commit:`Confirmar cambios preparados`,commitMessage:`Mensaje del commit`,committed:`Commit creado.`,detached:`HEAD separado`,diff:`Vista previa del diff`,diffFailed:`No se pudo cargar este diff.`,history:`Historial local`,initialize:`Inicializar Git`,initializeDescription:`Crea un repositorio local para estado, diffs, ramas y commits. No se conectan credenciales remotas.`,initialized:`Repositorio Git inicializado.`,loadFailed:`No se pudo cargar el estado de Git.`,localOnly:`Solo Git local. Push, pull y pull requests requieren un intermediario de credenciales de confianza aparte.`,newBranch:`Nueva rama local`,noCommits:`Aún no hay commits.`,noDiff:`Aún no hay diff textual. Los archivos sin seguimiento aparecen tras prepararlos.`,notInitialized:`Git no está inicializado`,selectChange:`Selecciona un archivo modificado para inspeccionar su diff.`,selectPath:`Seleccionar {{path}}`,stageAll:`Preparar todo`,stageSelected:`Preparar {{count}}`,staged:`Cambios preparados.`,switchBranch:`Cambiar de rama local`,changes:`Cambios`,createBranch:`Crear`,filterFiles:`Filtrar archivos modificados`,noFilterMatches:`Ningún archivo modificado coincide con este filtro.`,allChanges:`Todos los cambios`,diffTruncated:`Este diff está truncado.`,binaryFile:`Archivo binario, sin diff de texto.`},hostWorkspace:{hint:`Déjalo en blanco para un espacio aislado, o apunta la tarea a una carpeta de esta máquina.`,label:`Carpeta del espacio de trabajo (opcional)`,warning:`La tarea puede leer y escribir esta carpeta directamente. Déjalo en blanco para usar un espacio aislado.`}},usageAnalytics:{eyebrow:`Administración`,title:`Uso del proveedor`,description:`Sigue las llamadas de API salientes y el consumo de modelos en los plugins habilitados en esta instancia.`,days:`{{count}} días`,refresh:`Actualizar uso`,loadFailed:`No se pudo cargar el uso del proveedor.`,metrics:{calls:`Llamadas`,tokens:`Tokens`},cards:{calls:`Llamadas de API`,callsDetail:`Entre {{count}} usuario(s) activo(s)`,tokens:`Tokens reportados`,tokensDetail:`Uso reportado en {{count}} llamada(s)`,success:`Tasa de éxito`,successDetail:`{{count}} llamada(s) fallida(s)`,latency:`Latencia media`,latencyDetail:`Tiempo de extremo a extremo del proveedor`},activity:{title:`Consumo a lo largo del tiempo`,callsDescription:`Solicitudes salientes diarias a los complementos habilitados`,tokensDescription:`Totales diarios de tokens reportados por los proveedores`,chartLabel:`Gráfico diario de {{metric}} del proveedor`},models:{title:`Consumo por modelo`,description:`Los modelos con mayor tráfico en este período.`,model:`Modelo`,success:`Éxito`,latency:`Latencia`},providers:{title:`Tráfico de complementos habilitados`},capabilities:{title:`Mezcla de capacidades`,characters:`{{count}} caracteres`,images:`{{count}} imágenes`,jobs:`{{count}} trabajos de video`,inputs:`{{count}} entradas`,reportedTokens:`{{count}} tokens reportados`},empty:{title:`Aún no hay llamadas al proveedor`,description:`Las llamadas aparecerán aquí después de que un complemento habilitado gestione solicitudes de chat, Work, incrustación, imagen, voz, sonido o video.`},privacyNote:`El uso se mide en el servidor en el límite del complemento saliente. Libre WebUI almacena proveedor, modelo, tiempo, estado y contadores reportados, nunca prompts, respuestas, endpoints, credenciales ni cuerpos de error del proveedor. Los totales de tokens incluyen solo las llamadas en las que el proveedor devolvió metadatos de uso.`,heatmap:{title:`Un año de actividad`,description:`Llamadas diarias a proveedores durante el último año, coloreadas según el modelo más usado cada día.`,calls:`llamadas`,noCalls:`Sin llamadas`,other:`Otros modelos`,less:`Menos`,more:`Más`,yearTotal:`{{formatted}} llamadas en el último año`}},systemPage:{eyebrow:`Administración`,title:`Sistema`,description:`Monitoree la máquina y el entorno de ejecución que alojan esta instancia de Libre WebUI.`,updated:`Actualizado el {{date}}`,refresh:`Actualizar información del sistema`,loadFailed:`No se pudo cargar la información del sistema.`,cards:{uptime:`Tiempo de actividad del host`,uptimeDetail:`En ejecución desde {{date}}`,memory:`Memoria usada`,memoryDetail:`{{used}} de {{total}}`,freeSpace:`Espacio libre`,freeSpaceDetail:`{{label}} · {{total}} total`,containers:`Contenedores en ejecución`,containersDetail:`{{total}} contenedor(es) conocidos por Docker`,dockerUnavailable:`Docker no disponible`,unavailable:`No disponible`},host:{title:`Host y entorno de ejecución`,description:`Detalles del sistema operativo, procesador y proceso de Libre WebUI.`,container:`Entorno de ejecución de contenedores`,native:`Tiempo de ejecución nativo`,hostname:`Nombre de host`,operatingSystem:`Sistema operativo`,processor:`Procesador`,logicalCpus:`CPU lógicas`,loadAverage:`Carga media · 1 / 5 / 15 min`,libreVersion:`Libre WebUI`,nodeVersion:`Node.js`,process:`Proceso`,workingDirectory:`Directorio de trabajo`},memory:{title:`Memoria`,description:`Memoria del sistema visible en tiempo de ejecución y uso del proceso de la aplicación.`,usedOf:`{{used}} usados de {{total}}`,free:`{{value}} libres`,processRss:`RSS del proceso`,heapUsed:`Heap V8 usado`,heapTotal:`Heap V8 total`,external:`Memoria externa`},storage:{title:`Almacenamiento`,description:`Espacio disponible para el sistema de archivos del tiempo de ejecución y los datos persistentes de la aplicación.`,used:`{{value}} usados`,free:`{{value}} libres`,empty:`La información del sistema de archivos no está disponible en este tiempo de ejecución.`},docker:{title:`Docker`,description:`Estado de solo lectura de Docker Engine y una lista reducida de contenedores.`,connected:`Conectado`,unavailable:`No disponible`,unavailableDetail:`Los diagnósticos de Docker Engine no están disponibles.`,socketStatus:`Socket local: {{status}}`,mounted:`montado`,notMounted:`no montado`,running:`En ejecución`,stopped:`Detenido`,paused:`En pausa`,total:`Total`,version:`Versión`,host:`Host`,architecture:`Arquitectura`,cpus:`CPU`,memory:`Memoria`,container:`Contenedor`,image:`Imagen`,state:`Estado`,created:`Creado`,empty:`Docker está conectado y actualmente no hay contenedores listados.`},network:{title:`Red`,description:`Interfaces visibles en tiempo de ejecución, direcciones y contadores de tráfico de Linux.`,internal:`interna`,empty:`No hay interfaces de red visibles para el entorno de ejecución de la aplicación.`},securityNote:`Esta página está restringida a administradores. El servidor solo devuelve resúmenes operativos: no expone variables de entorno, credenciales, etiquetas de Docker, montajes, comandos de contenedor ni cargas útiles de inspección. Cuando Libre WebUI se ejecuta en un contenedor, los detalles de CPU y memoria a nivel de host provienen de Docker Engine cuando su socket local está disponible; otros valores describen el entorno de ejecución de la aplicación.`,work:{title:`Work`,description:`Sandboxes de todos los usuarios`,access:`Acceso`,accessAdmins:`Solo administradores`,accessAllUsers:`Todos los usuarios`,runtimeAvailable:`Disponible`,runtimeUnavailable:`No disponible`,activeRuntimes:`Entornos activos`,pendingCleanups:`Limpiezas pendientes`,orphans:`Contenedores huérfanos`,owner:`Propietario`,task:`Tarea`,state:`Estado`,preview:`Vista previa`,terminals:`Terminales`,updated:`Actualizado`,stateRunning:`En ejecución`,stateStopped:`Detenido`,stateStarting:`Iniciando`,stateUnknown:`Desconocido`,noTasks:`Aún no hay tareas de Work.`}},mediaGeneration:{title:`Generar multimedia`,description:`Crea video, sonido, música o voz con un proveedor multimedia activado.`,image:`Imagen`,video:`Video`,audio:`Audio`,sound:`Sonido`,speech:`Voz`,model:`Modelo`,voice:`Voz o ID de voz`,resolution:`Resolución`,aspectRatio:`Relación de aspecto`,duration:`Duración`,providerDefault:`Predeterminado del proveedor`,generateAudio:`Generar audio con el video cuando se admita`,prompt:`Indicación`,text:`Texto a hablar`,videoPlaceholder:`Describe la escena, el movimiento, la cámara y la iluminación...`,audioPlaceholder:`Introduce el texto que quieres que diga la voz...`,soundPlaceholder:`Describe el sonido, la música, la atmósfera o la respuesta hablada que deseas...`,generate:`Generar`,generating:`Generando… esto puede tardar varios minutos`,success:`Multimedia generada y guardada en Imagine`,failed:`Error al generar multimedia`,loadFailed:`Error al cargar los proveedores multimedia`,noModels:`No hay modelos de {{kind}} disponibles. Activa un proveedor compatible y guarda sus credenciales primero.`},mediaGallery:{itemCount:`{{count}} elementos`,empty:`Aún no hay multimedia generada`,emptyHint:`Genera una imagen, video o clip de voz y aparecerá aquí.`,filters:{all:`Todos`,image:`Imágenes`,video:`Vídeos`,audio:`Audio`}},whatsNew:{title:`Novedades`,releaseNotes:`Notas de la versión`,cta:`Vale, vamos`},notes:{title:`Notas`,new:`Nueva nota`,untitled:`Sin título`,empty:`Aún no hay notas`,selectOrCreate:`Selecciona una nota o crea una nueva`,contentPlaceholder:`Escribe en Markdown…`,saved:`Guardado`,saveFailed:`No se pudo guardar la nota`,createFailed:`No se pudo crear la nota`,deleteConfirm:`¿Eliminar esta nota?`,deleteFailed:`No se pudo eliminar la nota`},home:{active:`activo`,continue:`Continuar`,start:`Empezar`,explore:`Explorar`},palette:{empty:`Sin coincidencias.`,placeholder:`Buscar chats, Work, acciones…`,toggleTheme:`Cambiar tema`,actions:`Acciones`,chats:`Chats`,search:`Buscar`,settings:`Configuración`,work:`Trabajo`},tabs:{actions:`Acciones de pestaña`,close:`Cerrar pestaña`,closeAll:`Cerrar todas las pestañas`,closeOthers:`Cerrar las demás pestañas`,closeRight:`Cerrar pestañas a la derecha`,home:`Inicio`,label:`Pestañas abiertas`,new:`Nueva pestaña`,newWork:`Nuevo Work`,chat:`Chat`,newChat:`Nuevo chat`,work:`Trabajo`}};export{e as default};
@@ -1,4 +1,4 @@
1
- import{_ as e,g as t,h as n,m as r,p as i}from"./router-vendor-Ca9zqOqT.js";import{g as a}from"../assets/index-BN-WAt2j.js";var o,s,c,l,u,d,f,p,m=Object.defineProperty,h=(e,t)=>{for(var n in t)m(e,n,{get:t[n],enumerable:!0})},g={};h(g,{languages:()=>dm,options:()=>lm,printers:()=>um});var ee=[{name:`JavaScript`,type:`programming`,aceMode:`javascript`,extensions:`.js,._js,.bones,.cjs,.es,.es6,.gs,.jake,.javascript,.jsb,.jscad,.jsfl,.jslib,.jsm,.jspre,.jss,.mjs,.njs,.pac,.sjs,.ssjs,.xsjs,.xsjslib,.start.frag,.end.frag,.wxs`.split(`,`),filenames:[`Jakefile`,`start.frag`,`end.frag`],tmScope:`source.js`,aliases:[`js`,`node`],codemirrorMode:`javascript`,codemirrorMimeType:`text/javascript`,interpreters:[`bun`,`chakra`,`d8`,`deno`,`gjs`,`js`,`node`,`nodejs`,`qjs`,`rhino`,`v8`,`v8-shell`,`zx`],parsers:[`babel`,`acorn`,`espree`,`meriyah`,`babel-flow`,`babel-ts`,`flow`,`typescript`],vscodeLanguageIds:[`javascript`,`mongo`],linguistLanguageId:183},{name:`Flow`,type:`programming`,aceMode:`javascript`,extensions:[`.js.flow`],filenames:[],tmScope:`source.js`,aliases:[],codemirrorMode:`javascript`,codemirrorMimeType:`text/javascript`,interpreters:[`bun`,`chakra`,`d8`,`deno`,`gjs`,`js`,`node`,`nodejs`,`qjs`,`rhino`,`v8`,`v8-shell`],parsers:[`flow`,`babel-flow`],vscodeLanguageIds:[`javascript`],linguistLanguageId:183},{name:`JSX`,type:`programming`,aceMode:`javascript`,extensions:[`.jsx`],filenames:void 0,tmScope:`source.js.jsx`,aliases:void 0,codemirrorMode:`jsx`,codemirrorMimeType:`text/jsx`,interpreters:void 0,parsers:[`babel`,`babel-flow`,`babel-ts`,`flow`,`typescript`,`espree`,`meriyah`],vscodeLanguageIds:[`javascriptreact`],group:`JavaScript`,linguistLanguageId:183},{name:`TypeScript`,type:`programming`,aceMode:`typescript`,extensions:[`.ts`,`.cts`,`.mts`],tmScope:`source.ts`,aliases:[`ts`],codemirrorMode:`javascript`,codemirrorMimeType:`application/typescript`,interpreters:[`bun`,`deno`,`ts-node`,`tsx`],parsers:[`typescript`,`babel-ts`],vscodeLanguageIds:[`typescript`],linguistLanguageId:378},{name:`TSX`,type:`programming`,aceMode:`tsx`,extensions:[`.tsx`],tmScope:`source.tsx`,aliases:[`typescriptreact`],codemirrorMode:`jsx`,codemirrorMimeType:`text/typescript-jsx`,group:`TypeScript`,parsers:[`typescript`,`babel-ts`],vscodeLanguageIds:[`typescriptreact`],linguistLanguageId:94901924}],_={};h(_,{estree:()=>Zp});function te(e){return Array.isArray(e)&&e.length>0}var v=te,y=()=>{};function b(e){let t=new Set(e);return e=>t.has(e?.type)}var ne=(e,t)=>(n,r,...i)=>n|1&&r==null?void 0:(t.call(r)??r[e]).apply(r,i);function re(e){return this[e<0?this.length+e:e]}var x=ne(`at`,function(){if(Array.isArray(this)||typeof this==`string`)return re});function S(e,t,n){if(!e.has(t)){let r=n(t);e.set(t,r)}return e.get(t)}function ie(e){let t=[];return e.this&&t.push(e.this),t.push(...e.params),e.rest&&t.push(e.rest),t}var ae=new WeakMap;function C(e){return S(ae,e,ie)}function oe(e,t){let{node:n}=e,r=0,i=()=>t(e,r++);n.this&&e.call(i,`this`),e.each(i,`params`),n.rest&&e.call(i,`rest`)}function se(e){return e.rest?!0:x(0,C(e),-1)?.type===`RestElement`}var ce=e=>e?.type===`TSAsExpression`&&e.typeAnnotation.type===`TSTypeReference`&&e.typeAnnotation.typeName.type===`Identifier`&&e.typeAnnotation.typeName.name===`const`;function le({node:e,parent:t}){return e?.type===`EmptyStatement`?t.type===`IfStatement`?t.consequent===e||t.alternate===e:t.type===`DoWhileStatement`||t.type===`ForInStatement`||t.type===`ForOfStatement`||t.type===`ForStatement`||t.type===`LabeledStatement`||t.type===`WithStatement`||t.type===`WhileStatement`?t.body===e:!1:!1}function ue(e){return e.method&&e.kind===`init`||e.kind===`get`||e.kind===`set`}var de=e=>Number.isSafeInteger(e)&&e>=0;function fe(e){return e.range?.[1]??e.end}function w(e){let t=e.range?.[0]??e.start,n=(e.declaration?.decorators??e.decorators)?.[0];return n?Math.min(w(n),t):t}var pe=5,me=8,he=8,ge=e=>t=>t.label?T(t.label):w(t)+e,_e=e=>e.__contentEnd??fe(e),ve=[`ExpressionStatement`,`Directive`,`ImportDeclaration`,`ExportDefaultDeclaration`,`ExportNamedDeclaration`,`ExportAllDeclaration`,`ReturnStatement`,`ThrowStatement`,`DoWhileStatement`],ye=new Map([[`BreakStatement`,ge(pe)],[`ContinueStatement`,ge(me)],[`DebuggerStatement`,e=>w(e)+he],[`VariableDeclaration`,e=>T(x(0,e.declarations,-1))],...ve.map(e=>[e,_e])]),be=b(ve),xe=e=>{if(be(e)&&e.__contentEnd)return!0;let{type:t}=e;return t===`BreakStatement`||t===`ContinueStatement`||t===`DebuggerStatement`||t===`VariableDeclaration`?!0:t===`IfStatement`?xe(e.alternate??e.consequent):t===`ForInStatement`||t===`ForOfStatement`||t===`ForStatement`||t===`LabeledStatement`||t===`WithStatement`||t===`WhileStatement`?xe(e.body):!1};function T(e){let{type:t}=e;return t===`IfStatement`?T(e.alternate??e.consequent):t===`ForInStatement`||t===`ForOfStatement`||t===`ForStatement`||t===`LabeledStatement`||t===`WithStatement`||t===`WhileStatement`?T(e.body):ye.get(t)?.(e)??fe(e)}function Se(e,t){let n=w(e);return de(n)&&n===w(t)}function Ce(e,t){let n=T(e);return de(n)&&n===T(t)}function we(e,t){return Se(e,t)&&Ce(e,t)}function Te(e){return e.extra?.raw??e.raw}function Ee(e){return e.type===`BigIntLiteral`||e.type===`Literal`&&!!e.bigint}function De(e){return e.type===`BooleanLiteral`||e.type===`Literal`&&typeof e.value==`boolean`}function Oe(e){return e.type===`NumericLiteral`||e.type===`Literal`&&typeof e.value==`number`}function ke(e){return e.type===`RegExpLiteral`||e.type===`Literal`&&!!e.regex}function E(e){return e?.type===`StringLiteral`||e?.type===`Literal`&&typeof e.value==`string`}var Ae=b([`TSAsExpression`,`TSSatisfiesExpression`,`AsExpression`,`AsConstExpression`,`SatisfiesExpression`]),je=b([`SatisfiesExpression`,`TSSatisfiesExpression`]),Me=b([`TSUnionType`,`UnionTypeAnnotation`]),Ne=b([`TSIntersectionType`,`IntersectionTypeAnnotation`]),Pe=b([`TupleTypeAnnotation`,`TSTupleType`]),Fe=b([`TSConditionalType`,`ConditionalTypeAnnotation`]),Ie=b([`TSTypeAliasDeclaration`,`TypeAlias`]),Le=b([`ReturnStatement`,`ThrowStatement`]),Re=b([`ExportDefaultDeclaration`,`DeclareExportDeclaration`,`ExportNamedDeclaration`,`ExportAllDeclaration`,`DeclareExportAllDeclaration`]),D=b([`ArrayExpression`]),ze=b([`ObjectExpression`]),Be=b([`Literal`,`BooleanLiteral`,`BigIntLiteral`,`DirectiveLiteral`,`NullLiteral`,`NumericLiteral`,`RegExpLiteral`,`StringLiteral`]),Ve=b([`ObjectTypeAnnotation`,`TSTypeLiteral`,`TSMappedType`]),He=b([`FunctionExpression`,`ArrowFunctionExpression`]),O=b([`JSXElement`,`JSXFragment`]),Ue=b([`BinaryExpression`,`LogicalExpression`,`NGPipeExpression`]),k=b([`CallExpression`,`OptionalCallExpression`]),A=b([`MemberExpression`,`OptionalMemberExpression`]),We=b([`CallExpression`,`OptionalCallExpression`,`NewExpression`]),Ge=b([`CallExpression`,`OptionalCallExpression`,`NewExpression`,`ImportExpression`]),Ke=b([`ChainExpression`,`TSNonNullExpression`]),qe=b([`TSArrayType`,`ArrayTypeAnnotation`]),Je=b([`TSTypeParameterInstantiation`,`TypeParameterInstantiation`]);function Ye(e){if(e.type!==`ImportSpecifier`&&e.type!==`ExportSpecifier`)return!1;let{local:t,[e.type===`ImportSpecifier`?`imported`:`exported`]:n}=e;return t.type!==n.type||!we(t,n)?!1:E(t)?t.value===n.value&&Te(t)===Te(n):t.type===`Identifier`&&t.name===n.name}var Xe=b([`File`,`TemplateElement`,`TSEmptyBodyFunctionExpression`,`ChainExpression`]),Ze=(e,[t])=>t?.type===`ComponentParameter`&&t.shorthand&&t.name===e&&t.local!==t.name||t?.type===`MatchObjectPatternProperty`&&t.shorthand&&t.key===e||t?.type===`ObjectProperty`&&t.shorthand&&t.key===e&&t.value!==t.key||t?.type===`Property`&&t.shorthand&&t.key===e&&!ue(t)&&t.value!==t.key||t?.type===`ImportSpecifier`&&Ye(t)&&t.local===e&&t.local!==t.imported||t?.type===`ExportSpecifier`&&Ye(t)&&t.exported===e&&t.local!==t.exported,Qe=(e,[t])=>!!(e.type===`FunctionExpression`&&t.type===`MethodDefinition`&&t.value===e&&C(e).length===0&&!e.returnType&&!v(e.typeParameters)&&e.body),$e=(e,[t])=>t?.typeAnnotation===e&&ce(t),et=(e,[t,...n])=>$e(e,[t])||t?.typeName===e&&$e(t,n);function tt(e,t){return Xe(e)||Ze(e,t)||Qe(e,t)?!1:e.type===`EmptyStatement`?le({node:e,parent:t[0]}):!(et(e,t)||e.type===`TSTypeAnnotation`&&t[0].type===`TSPropertySignature`)}var nt=tt;function rt(e){let t=e.type||e.kind||`(unknown type)`,n=String(e.name||e.id&&(typeof e.id==`object`?e.id.name:e.id)||e.key&&(typeof e.key==`object`?e.key.name:e.key)||e.value&&(typeof e.value==`object`?``:String(e.value))||e.operator||``);return n.length>20&&(n=n.slice(0,19)+`…`),t+(n?` `+n:``)}function it(e,t){(e.comments??(e.comments=[])).push(t),t.printed=!1,t.nodeDescription=rt(e)}function j(e,t){t.leading=!0,t.trailing=!1,it(e,t)}function at(e,t,n){t.leading=!1,t.trailing=!1,n&&(t.marker=n),it(e,t)}function M(e,t){t.leading=!1,t.trailing=!0,it(e,t)}function ot(e){return(t,n,r)=>{if(n===!1)return!1;let i=!!r?.backwards,{length:a}=t,o=n;for(;o>=0&&o<a;){let n=t.charAt(o);if(e instanceof RegExp){if(!e.test(n))return o}else if(!e.includes(n))return o;i?o--:o++}return o===-1||o===a?o:!1}}var st=ot(` `),ct=ot(`,; `),lt=ot(/[^\n\r]/);function ut(e,t){if(t===!1)return!1;if(e.charAt(t)===`/`&&e.charAt(t+1)===`*`){for(let n=t+2;n<e.length;++n)if(e.charAt(n)===`*`&&e.charAt(n+1)===`/`)return n+2}return t}var dt=ut,ft=e=>e===`
1
+ import{_ as e,g as t,h as n,m as r,p as i}from"./router-vendor-Ca9zqOqT.js";import{g as a}from"../assets/index-BBpNbfKW.js";var o,s,c,l,u,d,f,p,m=Object.defineProperty,h=(e,t)=>{for(var n in t)m(e,n,{get:t[n],enumerable:!0})},g={};h(g,{languages:()=>dm,options:()=>lm,printers:()=>um});var ee=[{name:`JavaScript`,type:`programming`,aceMode:`javascript`,extensions:`.js,._js,.bones,.cjs,.es,.es6,.gs,.jake,.javascript,.jsb,.jscad,.jsfl,.jslib,.jsm,.jspre,.jss,.mjs,.njs,.pac,.sjs,.ssjs,.xsjs,.xsjslib,.start.frag,.end.frag,.wxs`.split(`,`),filenames:[`Jakefile`,`start.frag`,`end.frag`],tmScope:`source.js`,aliases:[`js`,`node`],codemirrorMode:`javascript`,codemirrorMimeType:`text/javascript`,interpreters:[`bun`,`chakra`,`d8`,`deno`,`gjs`,`js`,`node`,`nodejs`,`qjs`,`rhino`,`v8`,`v8-shell`,`zx`],parsers:[`babel`,`acorn`,`espree`,`meriyah`,`babel-flow`,`babel-ts`,`flow`,`typescript`],vscodeLanguageIds:[`javascript`,`mongo`],linguistLanguageId:183},{name:`Flow`,type:`programming`,aceMode:`javascript`,extensions:[`.js.flow`],filenames:[],tmScope:`source.js`,aliases:[],codemirrorMode:`javascript`,codemirrorMimeType:`text/javascript`,interpreters:[`bun`,`chakra`,`d8`,`deno`,`gjs`,`js`,`node`,`nodejs`,`qjs`,`rhino`,`v8`,`v8-shell`],parsers:[`flow`,`babel-flow`],vscodeLanguageIds:[`javascript`],linguistLanguageId:183},{name:`JSX`,type:`programming`,aceMode:`javascript`,extensions:[`.jsx`],filenames:void 0,tmScope:`source.js.jsx`,aliases:void 0,codemirrorMode:`jsx`,codemirrorMimeType:`text/jsx`,interpreters:void 0,parsers:[`babel`,`babel-flow`,`babel-ts`,`flow`,`typescript`,`espree`,`meriyah`],vscodeLanguageIds:[`javascriptreact`],group:`JavaScript`,linguistLanguageId:183},{name:`TypeScript`,type:`programming`,aceMode:`typescript`,extensions:[`.ts`,`.cts`,`.mts`],tmScope:`source.ts`,aliases:[`ts`],codemirrorMode:`javascript`,codemirrorMimeType:`application/typescript`,interpreters:[`bun`,`deno`,`ts-node`,`tsx`],parsers:[`typescript`,`babel-ts`],vscodeLanguageIds:[`typescript`],linguistLanguageId:378},{name:`TSX`,type:`programming`,aceMode:`tsx`,extensions:[`.tsx`],tmScope:`source.tsx`,aliases:[`typescriptreact`],codemirrorMode:`jsx`,codemirrorMimeType:`text/typescript-jsx`,group:`TypeScript`,parsers:[`typescript`,`babel-ts`],vscodeLanguageIds:[`typescriptreact`],linguistLanguageId:94901924}],_={};h(_,{estree:()=>Zp});function te(e){return Array.isArray(e)&&e.length>0}var v=te,y=()=>{};function b(e){let t=new Set(e);return e=>t.has(e?.type)}var ne=(e,t)=>(n,r,...i)=>n|1&&r==null?void 0:(t.call(r)??r[e]).apply(r,i);function re(e){return this[e<0?this.length+e:e]}var x=ne(`at`,function(){if(Array.isArray(this)||typeof this==`string`)return re});function S(e,t,n){if(!e.has(t)){let r=n(t);e.set(t,r)}return e.get(t)}function ie(e){let t=[];return e.this&&t.push(e.this),t.push(...e.params),e.rest&&t.push(e.rest),t}var ae=new WeakMap;function C(e){return S(ae,e,ie)}function oe(e,t){let{node:n}=e,r=0,i=()=>t(e,r++);n.this&&e.call(i,`this`),e.each(i,`params`),n.rest&&e.call(i,`rest`)}function se(e){return e.rest?!0:x(0,C(e),-1)?.type===`RestElement`}var ce=e=>e?.type===`TSAsExpression`&&e.typeAnnotation.type===`TSTypeReference`&&e.typeAnnotation.typeName.type===`Identifier`&&e.typeAnnotation.typeName.name===`const`;function le({node:e,parent:t}){return e?.type===`EmptyStatement`?t.type===`IfStatement`?t.consequent===e||t.alternate===e:t.type===`DoWhileStatement`||t.type===`ForInStatement`||t.type===`ForOfStatement`||t.type===`ForStatement`||t.type===`LabeledStatement`||t.type===`WithStatement`||t.type===`WhileStatement`?t.body===e:!1:!1}function ue(e){return e.method&&e.kind===`init`||e.kind===`get`||e.kind===`set`}var de=e=>Number.isSafeInteger(e)&&e>=0;function fe(e){return e.range?.[1]??e.end}function w(e){let t=e.range?.[0]??e.start,n=(e.declaration?.decorators??e.decorators)?.[0];return n?Math.min(w(n),t):t}var pe=5,me=8,he=8,ge=e=>t=>t.label?T(t.label):w(t)+e,_e=e=>e.__contentEnd??fe(e),ve=[`ExpressionStatement`,`Directive`,`ImportDeclaration`,`ExportDefaultDeclaration`,`ExportNamedDeclaration`,`ExportAllDeclaration`,`ReturnStatement`,`ThrowStatement`,`DoWhileStatement`],ye=new Map([[`BreakStatement`,ge(pe)],[`ContinueStatement`,ge(me)],[`DebuggerStatement`,e=>w(e)+he],[`VariableDeclaration`,e=>T(x(0,e.declarations,-1))],...ve.map(e=>[e,_e])]),be=b(ve),xe=e=>{if(be(e)&&e.__contentEnd)return!0;let{type:t}=e;return t===`BreakStatement`||t===`ContinueStatement`||t===`DebuggerStatement`||t===`VariableDeclaration`?!0:t===`IfStatement`?xe(e.alternate??e.consequent):t===`ForInStatement`||t===`ForOfStatement`||t===`ForStatement`||t===`LabeledStatement`||t===`WithStatement`||t===`WhileStatement`?xe(e.body):!1};function T(e){let{type:t}=e;return t===`IfStatement`?T(e.alternate??e.consequent):t===`ForInStatement`||t===`ForOfStatement`||t===`ForStatement`||t===`LabeledStatement`||t===`WithStatement`||t===`WhileStatement`?T(e.body):ye.get(t)?.(e)??fe(e)}function Se(e,t){let n=w(e);return de(n)&&n===w(t)}function Ce(e,t){let n=T(e);return de(n)&&n===T(t)}function we(e,t){return Se(e,t)&&Ce(e,t)}function Te(e){return e.extra?.raw??e.raw}function Ee(e){return e.type===`BigIntLiteral`||e.type===`Literal`&&!!e.bigint}function De(e){return e.type===`BooleanLiteral`||e.type===`Literal`&&typeof e.value==`boolean`}function Oe(e){return e.type===`NumericLiteral`||e.type===`Literal`&&typeof e.value==`number`}function ke(e){return e.type===`RegExpLiteral`||e.type===`Literal`&&!!e.regex}function E(e){return e?.type===`StringLiteral`||e?.type===`Literal`&&typeof e.value==`string`}var Ae=b([`TSAsExpression`,`TSSatisfiesExpression`,`AsExpression`,`AsConstExpression`,`SatisfiesExpression`]),je=b([`SatisfiesExpression`,`TSSatisfiesExpression`]),Me=b([`TSUnionType`,`UnionTypeAnnotation`]),Ne=b([`TSIntersectionType`,`IntersectionTypeAnnotation`]),Pe=b([`TupleTypeAnnotation`,`TSTupleType`]),Fe=b([`TSConditionalType`,`ConditionalTypeAnnotation`]),Ie=b([`TSTypeAliasDeclaration`,`TypeAlias`]),Le=b([`ReturnStatement`,`ThrowStatement`]),Re=b([`ExportDefaultDeclaration`,`DeclareExportDeclaration`,`ExportNamedDeclaration`,`ExportAllDeclaration`,`DeclareExportAllDeclaration`]),D=b([`ArrayExpression`]),ze=b([`ObjectExpression`]),Be=b([`Literal`,`BooleanLiteral`,`BigIntLiteral`,`DirectiveLiteral`,`NullLiteral`,`NumericLiteral`,`RegExpLiteral`,`StringLiteral`]),Ve=b([`ObjectTypeAnnotation`,`TSTypeLiteral`,`TSMappedType`]),He=b([`FunctionExpression`,`ArrowFunctionExpression`]),O=b([`JSXElement`,`JSXFragment`]),Ue=b([`BinaryExpression`,`LogicalExpression`,`NGPipeExpression`]),k=b([`CallExpression`,`OptionalCallExpression`]),A=b([`MemberExpression`,`OptionalMemberExpression`]),We=b([`CallExpression`,`OptionalCallExpression`,`NewExpression`]),Ge=b([`CallExpression`,`OptionalCallExpression`,`NewExpression`,`ImportExpression`]),Ke=b([`ChainExpression`,`TSNonNullExpression`]),qe=b([`TSArrayType`,`ArrayTypeAnnotation`]),Je=b([`TSTypeParameterInstantiation`,`TypeParameterInstantiation`]);function Ye(e){if(e.type!==`ImportSpecifier`&&e.type!==`ExportSpecifier`)return!1;let{local:t,[e.type===`ImportSpecifier`?`imported`:`exported`]:n}=e;return t.type!==n.type||!we(t,n)?!1:E(t)?t.value===n.value&&Te(t)===Te(n):t.type===`Identifier`&&t.name===n.name}var Xe=b([`File`,`TemplateElement`,`TSEmptyBodyFunctionExpression`,`ChainExpression`]),Ze=(e,[t])=>t?.type===`ComponentParameter`&&t.shorthand&&t.name===e&&t.local!==t.name||t?.type===`MatchObjectPatternProperty`&&t.shorthand&&t.key===e||t?.type===`ObjectProperty`&&t.shorthand&&t.key===e&&t.value!==t.key||t?.type===`Property`&&t.shorthand&&t.key===e&&!ue(t)&&t.value!==t.key||t?.type===`ImportSpecifier`&&Ye(t)&&t.local===e&&t.local!==t.imported||t?.type===`ExportSpecifier`&&Ye(t)&&t.exported===e&&t.local!==t.exported,Qe=(e,[t])=>!!(e.type===`FunctionExpression`&&t.type===`MethodDefinition`&&t.value===e&&C(e).length===0&&!e.returnType&&!v(e.typeParameters)&&e.body),$e=(e,[t])=>t?.typeAnnotation===e&&ce(t),et=(e,[t,...n])=>$e(e,[t])||t?.typeName===e&&$e(t,n);function tt(e,t){return Xe(e)||Ze(e,t)||Qe(e,t)?!1:e.type===`EmptyStatement`?le({node:e,parent:t[0]}):!(et(e,t)||e.type===`TSTypeAnnotation`&&t[0].type===`TSPropertySignature`)}var nt=tt;function rt(e){let t=e.type||e.kind||`(unknown type)`,n=String(e.name||e.id&&(typeof e.id==`object`?e.id.name:e.id)||e.key&&(typeof e.key==`object`?e.key.name:e.key)||e.value&&(typeof e.value==`object`?``:String(e.value))||e.operator||``);return n.length>20&&(n=n.slice(0,19)+`…`),t+(n?` `+n:``)}function it(e,t){(e.comments??(e.comments=[])).push(t),t.printed=!1,t.nodeDescription=rt(e)}function j(e,t){t.leading=!0,t.trailing=!1,it(e,t)}function at(e,t,n){t.leading=!1,t.trailing=!1,n&&(t.marker=n),it(e,t)}function M(e,t){t.leading=!1,t.trailing=!0,it(e,t)}function ot(e){return(t,n,r)=>{if(n===!1)return!1;let i=!!r?.backwards,{length:a}=t,o=n;for(;o>=0&&o<a;){let n=t.charAt(o);if(e instanceof RegExp){if(!e.test(n))return o}else if(!e.includes(n))return o;i?o--:o++}return o===-1||o===a?o:!1}}var st=ot(` `),ct=ot(`,; `),lt=ot(/[^\n\r]/);function ut(e,t){if(t===!1)return!1;if(e.charAt(t)===`/`&&e.charAt(t+1)===`*`){for(let n=t+2;n<e.length;++n)if(e.charAt(n)===`*`&&e.charAt(n+1)===`/`)return n+2}return t}var dt=ut,ft=e=>e===`
2
2
  `||e===`\r`||e===`\u2028`||e===`\u2029`;function pt(e,t,n){if(t===!1)return!1;let r=!!n?.backwards,i=e.charAt(t);if(r){if(e.charAt(t-1)===`\r`&&i===`
3
3
  `)return t-2;if(ft(i))return t-1}else{if(i===`\r`&&e.charAt(t+1)===`
4
4
  `)return t+2;if(ft(i))return t+1}return t}var mt=pt;function ht(e,t){return t===!1?!1:e.charAt(t)===`/`&&e.charAt(t+1)===`/`?lt(e,t):t}var gt=ht;function _t(e,t){let n=null,r=t;for(;r!==n;)n=r,r=st(e,r),r=dt(e,r),r=gt(e,r),r=mt(e,r);return r}var vt=_t;function yt(e,t){let n=vt(e,t);return n===!1?``:e.charAt(n)}var bt=yt;function xt(e,t,n={}){let r=st(e,n.backwards?t-1:t,n);return r!==mt(e,r,n)}var N=xt;function St(e,t,n){for(let r=t;r<n;++r)if(e.charAt(r)===`