home-hosted 0.8.2 → 0.8.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.
- package/README.md +34 -9
- package/dist/cli.js +456 -63
- package/dist/cli.js.map +1 -1
- package/docs/SERVERS.md +19 -1
- package/docs/UI_CREATION.md +6 -1
- package/docs/branding/logo.svg +33 -0
- package/docs/branding/social-preview.png +0 -0
- package/package.json +4 -1
- package/uis/stock/dist/assets/{de-DQxDtYp2.js → de-CiT_tMnf.js} +1 -1
- package/uis/stock/dist/assets/es-JJDGEbt0.js +1 -0
- package/uis/stock/dist/assets/{fr-DHCvxiys.js → fr-CYIAuJgb.js} +1 -1
- package/uis/stock/dist/assets/{index-C02FUAwz.js → index-BCPp9MUj.js} +4 -4
- package/uis/stock/dist/assets/{ja-DseIeS1D.js → ja-DmykOijW.js} +1 -1
- package/uis/stock/dist/assets/{ko-Dcu2b6c2.js → ko-C4EcOJB0.js} +1 -1
- package/uis/stock/dist/assets/{ru-DaAAVw09.js → ru-Dlbre_Q1.js} +1 -1
- package/uis/stock/dist/assets/{vi-D780h-t9.js → vi-DhBWYY9I.js} +1 -1
- package/uis/stock/dist/assets/{zh-CN-C8OC-N1b.js → zh-CN-BI0ZDO_Y.js} +1 -1
- package/uis/stock/dist/favicon.ico +0 -0
- package/uis/stock/dist/favicon.svg +14 -0
- package/uis/stock/dist/index.html +5 -1
- package/uis/stock/dist/ui.json +3 -3
- package/uis/stock/dist/assets/es-BP0qzCTU.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={"activity.emptyTitle":`No hay eventos en las últimas 24 horas`,"activity.emptyDescription":`Los inicios, las salidas, los bloqueos y las recuperaciones aparecen aquí según van ocurriendo.`,"activity.ran":`duró {duration}`,"addServer.title":`Añadir un servidor`,"addServer.description":`Añade una entrada a servers.config.json de {workspace}; toda política que omitas se hereda de sus valores predeterminados.`,"addServer.thisWorkspace":`este espacio de trabajo`,"addServer.identity":`Identidad`,"addServer.id":`Id`,"addServer.idHint":`Letras minúsculas, dígitos, guiones y guiones bajos; se usa en las URL y en los registros.`,"addServer.labelHint":`Se muestra en el panel; por defecto, el id.`,"addServer.process":`Proceso`,"addServer.commandHint":`Se lanza sin shell.`,"addServer.argumentsHint":`Un argumento por línea; los espacios dentro de una línea se conservan.`,"addServer.portLifecycle":`Puerto y ciclo de vida`,"addServer.bindHint":`lan lo expone a la red; hazlo solo detrás de autenticación.`,"addServer.advanced":`Ajustes avanzados`,"addServer.advancedHint":`entorno, copias de seguridad, política, ciclo de vida, bootstrap`,"addServer.backups":`Copias de seguridad`,"addServer.backupIgnore":`Omitir los archivos generados conocidos`,"addServer.bootstrapDescription":`Un comando puntual que se ejecuta antes del primer inicio.`,"addServer.bootstrapHint":`Instalaciones, migraciones, descargas — antes del primer inicio, no en todos.`,"addServer.policyResources":`Política y recursos`,"addServer.logBufferHint":`En blanco mantiene el valor predeterminado.`,"addServer.inheritNote":`El reinicio, la salud y la detención empiezan igual que en {settings}; si cambias uno aquí, se escribirá en esta entrada en lugar de seguir heredado.`,"addServer.serverDefaults":`Ajustes → Valores predeterminados del servidor`,"addServer.placeholdersTitle":`Marcadores disponibles para los argumentos`,"addServer.submit":`Añadir a servers.config.json`,"app.name":`home-hosted`,"app.tagline":`Panel de control del supervisor de procesos`,"bind.local":`local — 127.0.0.1`,"bind.lan":`lan — 0.0.0.0`,"bind.explicit":`{bind} — explícito`,"common.cancel":`Cancelar`,"common.confirm":`Confirmar`,"common.reset":`Restablecer`,"common.keepIt":`Mantenerlo`,"common.remove":`Quitar`,"common.close":`Cerrar`,"common.save":`Guardar`,"common.saving":`Guardando…`,"common.discard":`Descartar`,"common.delete":`Eliminar`,"common.edit":`Editar`,"common.add":`Añadir`,"common.retry":`Reintentar`,"common.copy":`Copiar`,"common.copied":`Copiado`,"common.enabled":`Activado`,"common.disabled":`Desactivado`,"common.none":`Ninguno`,"common.unknown":`desconocido`,"common.loading":`Cargando…`,"common.selectAll":`Seleccionar todo`,"common.selectNone":`No seleccionar nada`,"common.name":`Nombre`,"common.label":`Etiqueta`,"common.hostname":`Nombre de host`,"common.port":`Puerto`,"common.command":`Comando`,"common.environment":`Entorno`,"common.memory":`Memoria`,"common.cpu":`CPU`,"common.disk":`Disco`,"common.uptime":`Tiempo activo`,"common.status":`Estado`,"common.actions":`Acciones`,"common.details":`Detalles`,"common.overview":`Resumen`,"common.warning":`Advertencia`,"common.error":`Error`,"common.confirmQuestion":`¿{label}?`,"common.unset":`sin definir`,"common.never":`nunca`,"common.now":`ahora`,"common.dismiss":`Descartar`,"connection.live":`En vivo`,"connection.connecting":`Conectando`,"connection.reconnecting":`Reconectando`,"connection.liveUpdates":`Actualizaciones en vivo`,"editor.title":`Editar la configuración`,"editor.description":`Escribe los cambios en {file}; lo que no toques sigue heredando los valores predeterminados.`,"editor.inSync":`sincronizado`,"editor.process":`Proceso`,"editor.processDescription":`Qué se lanza, dónde y con qué entorno.`,"editor.labelPlaceholder":`se usa el id si se deja vacío`,"editor.argumentsHint":`Uno por línea; se sustituyen {port} {host} {home} {projectDir} {dataRoot} {id} {label} {cwd} {bind} {lanIp}.`,"editor.portTitle":`Puerto y enlace`,"editor.portDescription":`Cómo se comprueba el puerto y dónde queda accesible el proceso.`,"editor.bindHint":`Una IPv4 personalizada que la configuración ya define sigue pudiendo elegirse.`,"editor.lifecycle":`Ciclo de vida`,"editor.lifecycleDescription":`Si el supervisor controla o no esta entrada.`,"editor.save":`Guardar en servers.config.json`,"editor.changesTitle":`Cambios sin guardar`,"editor.changesDescription":`Lo que Guardar escribiría en servers.config.json.`,"editor.nothingToSave":`No hay nada que guardar.`,"health.disabled":`Sin comprobar`,"health.unknown":`Sin sondear`,"health.healthy":`Correcto`,"health.unhealthy":`Con fallos`,"history.start":`Iniciado`,"history.exit":`Salido`,"history.crash":`Bloqueado`,"history.forcedRestart":`Reinicio forzado`,"history.unhealthy":`Con fallos`,"history.recovered":`Recuperado`,"host.loadPerCpu":`Carga / cpu`,"host.cpuTemp":`Temp. de la CPU`,"host.samplingOff":`El muestreo del host está desactivado`,"host.samplingOffDescription":`Actívalo en Ajustes para recopilar carga, memoria, disco y temperatura.`,"host.swap":`Swap`,"host.cpus":`CPU`,"host.loadAverage":`Carga 1 / 5 / 15`,"host.memoryUsed":`Memoria usada`,"host.sampled":`Muestreado`,"host.filesystems":`Sistemas de archivos`,"host.thresholdsBreached":`Umbrales superados`,"killPort.trigger":`Matar lo que ocupa el puerto {port}`,"killPort.title":`¿Matar el proceso del puerto {port}?`,"killPort.body":`Primero se le pide que se detenga y solo se mata si lo ignora. Se rechaza todo lo que este panel supervisa, así que ningún servidor gestionado se pierde por esta vía.`,"killPort.confirm":`Matarlo`,"language.label":`Idioma`,"language.select":`Elegir un idioma`,"lifecycle.restartTitle":`Política de reinicio`,"lifecycle.restartDescription":`Espera entre intentos tras un bloqueo.`,"lifecycle.restartOnCrash":`Reiniciar tras un bloqueo`,"lifecycle.maxRetries":`Intentos máximos`,"lifecycle.maxRetriesHint":`Intentos antes de dejar el servidor bloqueado.`,"lifecycle.baseDelay":`Espera base (ms)`,"lifecycle.factor":`Factor de espera`,"lifecycle.maxDelay":`Espera máxima (ms)`,"lifecycle.resetAfter":`Reiniciar el contador tras (ms)`,"lifecycle.resetAfterHint":`Una ejecución de esta duración borra el contador de intentos.`,"lifecycle.healthTitle":`Comprobación de salud`,"lifecycle.healthDescription":`Cómo se sondea la disponibilidad una vez arrancado el proceso.`,"lifecycle.probe":`Sondear este servidor`,"lifecycle.probeType":`Tipo de sonda`,"lifecycle.probePort":`Puerto TCP — solo la conexión`,"lifecycle.probeHttp":`Petición HTTP — comprobar una respuesta`,"lifecycle.interval":`Intervalo (ms)`,"lifecycle.timeout":`Tiempo de espera (ms)`,"lifecycle.unhealthyAfter":`Con fallos tras`,"lifecycle.unhealthyAfterHint":`Sondas fallidas consecutivas.`,"lifecycle.forceRestartAfter":`Reinicio forzado tras (ms)`,"lifecycle.forceRestartAfterHint":`0 lo desactiva.`,"lifecycle.startTimeout":`Tiempo de espera de inicio (ms)`,"lifecycle.httpPath":`Ruta HTTP`,"lifecycle.httpMethod":`Método HTTP`,"lifecycle.expectStatus":`Estado esperado`,"lifecycle.expectStatusHint":`En blanco se acepta cualquier valor por debajo.`,"lifecycle.expectStatusBelow":`Sano por debajo del estado`,"lifecycle.expectBody":`El cuerpo debe contener`,"lifecycle.expectBodyPlaceholder":`subcadena opcional`,"lifecycle.headBodyHint":`HEAD no tiene cuerpo de respuesta, así que esta comprobación se ignora — usa GET o déjala vacía.`,"lifecycle.stopTitle":`Comportamiento al detener`,"lifecycle.stopDescription":`Cómo se pide al árbol de procesos que termine.`,"lifecycle.signal":`Señal`,"lifecycle.signalTerm":`SIGTERM — pedirle que se detenga`,"lifecycle.signalInt":`SIGINT — interrumpir (Ctrl-C)`,"lifecycle.signalKill":`SIGKILL — matar de inmediato`,"lifecycle.grace":`Periodo de gracia (ms)`,"lifecycle.killGroup":`Matar todo el grupo de procesos`,"lifecycle.killPortHolders":`Matar también lo que ocupe el puerto`,"login.title":`Inicia sesión para continuar`,"login.firstRunTitle":`Este panel aún no tiene contraseña`,"login.firstRunSubtitle":`Cualquier cosa en esta máquina puede acceder a él. Define una contraseña justo después de entrar.`,"login.authOffTitle":`La autenticación está desactivada`,"login.authOffSubtitle":`El panel solo escucha en loopback, que es lo único que lo protege ahora mismo.`,"login.subtitle":`El panel de control está protegido. Introduce la contraseña para continuar.`,"login.password":`Contraseña`,"login.showPassword":`Mostrar la contraseña`,"login.hidePassword":`Ocultar la contraseña`,"login.signIn":`Iniciar sesión`,"login.openDashboard":`Abrir el panel`,"login.exposed":`Expuesto`,"login.defaultPasswordWarning":`Sigue con la contraseña predeterminada {password}. Cámbiala en Ajustes: hasta entonces se sigue rechazando escuchar más allá de 127.0.0.1.`,"login.noPasswordWarning":`No hay contraseña definida. Abre Ajustes desde esta máquina para añadir una, o ejecuta {command}.`,"login.sessionNote":`Las sesiones siguen iniciadas durante {days} días tras la última visita; cada petición amplía ese plazo. Cerrar sesión solo limpia este navegador.`,"login.servedFromThisMachine":`servido desde esta máquina`,"logs.emptyHint":`Aún no hay salida.`,"logs.noMatches":`Nada coincide con esa búsqueda ni con ese filtro de flujo.`,"logs.searchPlaceholder":`Buscar en esta salida`,"logs.searchLabel":`Buscar en la salida del registro`,"logs.clearSearch":`Borrar la búsqueda`,"logs.prevMatch":`Coincidencia anterior`,"logs.nextMatch":`Coincidencia siguiente`,"logs.showTimestamps":`Mostrar las marcas de tiempo`,"logs.hideTimestamps":`Ocultar las marcas de tiempo`,"logs.timestampsShort":`marca`,"logs.pause":`Pausar`,"logs.follow":`Seguir`,"logs.clearHint":`Vaciar el búfer en memoria`,"logs.clearLabel":`Vaciar el búfer de registro`,"logs.downloadHint":`Descargar el archivo persistido`,"logs.downloadLabel":`Descargar el archivo de registro`,"logs.outputLabel":`Salida del registro`,"logs.jumpToLatest":`Ir a lo más reciente`,"logs.streaming":`en directo`,"logs.paused":`en pausa`,"logs.snapshot":`instantánea`,"logs.linesOf":`{count} de {total} líneas`,"logs.matches":`{count} coincidencias`,"logs.rowHeight":`altura de fila {height}px · virtualizada`,"logs.streamAll":`Todo`,"logs.streamOut":`sal`,"logs.streamErr":`err`,"logs.streamSys":`sis`,"metric.emptyHint":`recopilando…`,"nav.global":`Global`,"nav.workspace":`Espacio de trabajo`,"nav.others":`Otros`,"nav.overview":`Resumen`,"nav.servers":`Servidores`,"nav.logs":`Registros`,"nav.workspaceSettings":`Ajustes del espacio de trabajo`,"nav.globalOverview":`Resumen global`,"nav.globalSettings":`Ajustes globales`,"nav.reverseProxy":`Proxy inverso`,"nav.navigation":`Navegación`,"nav.closeNavigation":`Cerrar la navegación`,"nav.hostVitals":`Estado del host`,"notice.configError":`No se pudo leer la configuración: {error}`,"notice.configErrorHint":`El panel sigue ejecutando la configuración que ya tenía; corrige {path} y se recargará solo.`,"notice.defaultPassword":`Este panel sigue con su contraseña predeterminada.`,"notice.defaultPasswordHint":`Cámbiala en los ajustes globales: hasta entonces se sigue rechazando escuchar más allá de 127.0.0.1.`,"notice.noPassword":`La autenticación está activada pero no hay contraseña, así que no se pide nada.`,"notice.noPasswordHint":`Define una en los ajustes globales para bloquear el panel de verdad.`,"notice.exposed":`Se puede acceder a este panel más allá de 127.0.0.1.`,"notice.exposedHint":`Mantén una contraseña fuerte o pon delante un proxy que termine el TLS.`,"notice.authOff":`La autenticación está desactivada: el panel solo está protegido por su enlace de loopback.`,"onPortConflict.block":`block — negarse a iniciar`,"onPortConflict.warn":`warn — iniciar de todos modos`,"onPortConflict.follow":`follow — adoptar un reinicio independiente de sí mismo`,"onPortConflict.reclaim":`reclaim — sustituirlo por una copia supervisada`,"onPortConflict.kill":`kill — detener lo que ocupe el puerto`,"palette.placeholder":`Ir a un servidor, ejecutar una acción, abrir un ajuste…`,"palette.openServer":`Abrir {label}`,"palette.serverLogs":`Registros de {label}`,"palette.startServer":`Iniciar {label}`,"palette.stopServer":`Detener {label}`,"palette.restartServer":`Reiniciar {label}`,"palette.goOverview":`Ir al resumen`,"palette.goGlobalOverview":`Ir al resumen global`,"palette.goGlobalSettings":`Ir a los ajustes globales`,"palette.goProxy":`Ir al proxy inverso`,"palette.goServers":`Ir a los servidores`,"palette.goLogs":`Ir a los registros`,"palette.goWorkspaceSettings":`Ir a los ajustes del espacio de trabajo`,"palette.startAll":`Iniciar todos los servidores habilitados aquí`,"palette.stopAll":`Detener todos los servidores aquí`,"palette.switchWorkspace":`Cambiar a {label}`,"palette.globalSetting":`Ajuste global: {label}`,"palette.workspaceSetting":`Ajuste del espacio de trabajo: {label}`,"palette.theme":`Tema {theme}`,"palette.groupServers":`Servidores`,"palette.groupActions":`Acciones`,"palette.groupNavigate":`Navegar`,"palette.groupWorkspaces":`Espacios de trabajo`,"palette.groupAppearance":`Apariencia`,"palette.navigate":`navegar`,"palette.run":`ejecutar`,"palette.noMatches":`Nada coincide con «{query}».`,"proxy.account.automatic":`Automático (la única cuenta que puede responder)`,"proxy.account.noTxt":`sin soporte de TXT`,"proxy.account.noCredentials":`sin credenciales`,"proxy.account.gone":`Esa cuenta ya no está configurada.`,"proxy.account.emptyHint":`DNS-01 escribe aquí el registro del desafío. Vacío usa la única cuenta que puede responder a un desafío, cuando la hay.`,"proxy.account.cannotWrite":`Una cuenta de {provider} no puede escribir registros TXT, así que no puede responder a un desafío DNS-01.`,"proxy.account.noCredentialsYet":`Aún no hay credenciales guardadas para esta cuenta de {provider}.`,"proxy.account.through":`El desafío se escribe a través de esta cuenta de {provider}.`,"proxy.certificate.title":`Certificados subidos`,"proxy.certificate.description":`Los sirven las rutas configuradas como «Certificado subido». Todo lo demás —público o local— lo certifica el motor por su cuenta.`,"proxy.certificate.add":`Añadir un certificado`,"proxy.certificate.emptyTitle":`No se ha subido ningún certificado`,"proxy.certificate.emptyDescription":`Una ruta configurada como «Certificado subido» necesita un par que cubra su nombre de host, o el motor no tendrá nada que servir para ella.`,"proxy.certificate.daysLeft":`{days} días restantes`,"proxy.certificate.subject":`Sujeto`,"proxy.certificate.issuer":`Emisor`,"proxy.certificate.validUntil":`Válido hasta`,"proxy.certificate.covers":`Cubre`,"proxy.certificate.noSans":`ningún nombre de host en sus SAN`,"proxy.certificate.removeAria":`Quitar {name}`,"proxy.certificate.removeQuestion":`¿Quitar «{name}»?`,"proxy.certificate.removeBody":`El par se elimina del disco. Una ruta que siga configurada como «Certificado subido» seguirá sirviendo el certificado propio del motor hasta que lo cambies, y el panel rechaza esto mientras alguna lo siga sirviendo.`,"proxy.certificate.removeIt":`Quitarlo`,"proxy.certificate.stored":`«{label}» guardado.`,"proxy.certificate.removed":`«{name}» quitado.`,"proxy.certificateDialog.title":`Añadir un certificado`,"proxy.certificateDialog.description":`El par se guarda en disco bajo su id, y una ruta configurada como «Certificado subido» puede servirlo.`,"proxy.certificateDialog.label":`Etiqueta`,"proxy.certificateDialog.labelPlaceholder":`Comodín doméstico`,"proxy.certificateDialog.id":`Id`,"proxy.certificateDialog.idHint":`da nombre a los archivos en disco`,"proxy.certificateDialog.certFile":`Archivo del certificado (.pem, .crt)`,"proxy.certificateDialog.keyFile":`Archivo de la clave privada (.pem, .key)`,"proxy.certificateDialog.pasteCert":`O pega el certificado`,"proxy.certificateDialog.pasteKey":`O pega la clave privada`,"proxy.certificateDialog.certPlaceholder":`-----BEGIN CERTIFICATE-----`,"proxy.certificateDialog.keyPlaceholder":`-----BEGIN PRIVATE KEY-----`,"proxy.certificateDialog.store":`Guardar el certificado`,"proxy.certificateDialog.errorLabel":`se requiere una etiqueta`,"proxy.certificateDialog.errorId":`el id debe empezar por una letra o un dígito, y luego letras, dígitos, guion o guion bajo`,"proxy.certificateDialog.errorTaken":`«{id}» ya lo usa otro certificado`,"proxy.certificateDialog.errorCertificate":`pega o elige el certificado`,"proxy.certificateDialog.errorPrivateKey":`pega o elige la clave privada`,"proxy.engine.title":`Motor`,"proxy.engine.description":`El propio proxy inverso. El panel descarga la compilación actual, la supervisa y aplica su configuración a través de la API de administración del propio motor.`,"proxy.engine.notInFrame":`El estado del proxy aún no está en el marco de este panel.`,"proxy.engine.readFailed":`No se pudo leer el motor`,"proxy.engine.notInstalled":`Ningún motor instalado`,"proxy.engine.installNote":`Instalar descarga la versión actual de {engine} que el panel supervisa — unos 46 MB, una sola vez. No se expone nada hasta que se añada una ruta y se active el proxy.`,"proxy.engine.version":`Versión`,"proxy.engine.notProbed":`aún sin sondear`,"proxy.engine.source":`Origen`,"proxy.engine.sourceCustom":`una ruta configurada a mano`,"proxy.engine.sourceDownloaded":`descargado por el panel`,"proxy.engine.size":`Tamaño`,"proxy.engine.binary":`Binario`,"proxy.engine.copyPath":`Copiar la ruta del binario`,"proxy.engine.address":`Dirección activa`,"proxy.engine.process":`Proceso`,"proxy.engine.certificates":`Certificados`,"proxy.engine.noCert":`aún no hay certificado público`,"proxy.engine.expiresSoon":`el que antes caduca lo hace en {days} días`,"proxy.engine.acme":`Certificados ACME`,"proxy.engine.localCa":`CA local`,"proxy.engine.dns01":`DNS-01`,"proxy.engine.tcpUdp":`TCP/UDP`,"proxy.engine.documentation":`Documentación de {engine}`,"proxy.engine.failed":`El motor informó de un fallo`,"proxy.engine.setcapHint":`Un puerto privilegiado (por debajo de 1024) necesita esto una vez en Linux:`,"proxy.engine.copyCommand":`Copiar el comando`,"proxy.engine.install":`Instalar el motor`,"proxy.engine.start":`Iniciar`,"proxy.engine.stop":`Detener`,"proxy.engine.apply":`Aplicar la configuración`,"proxy.engine.revert":`Revertir`,"proxy.engine.revertHint":`Volver a la configuración que se aplicó antes de la última`,"proxy.engine.update":`Actualizar el motor`,"proxy.listener.title":`Escucha y certificados`,"proxy.listener.description":`Dónde escucha el proxy. 80 y 443 son los que redirige un router y los que espera un desafío ACME; un puerto por debajo de 1024 necesita un enlace privilegiado.`,"proxy.listener.unprivilegedPorts":`puertos sin privilegios`,"proxy.listener.run":`Ejecutar el proxy inverso`,"proxy.listener.runHint":`Se guarda con Guardar los ajustes; el panel inicia o detiene el motor en consecuencia.`,"proxy.listener.httpPort":`Puerto HTTP`,"proxy.listener.httpPortHint":`Desafíos HTTP-01 de ACME y la redirección a HTTPS.`,"proxy.listener.httpsPort":`Puerto HTTPS`,"proxy.listener.httpsPortHint":`Donde se sirven los certificados.`,"proxy.listener.useFallback":`Usar {http} / {https}`,"proxy.listener.useStandard":`Usar 80 / 443`,"proxy.listener.forwardHint":`Ejecutándose sin privilegios — redirige 80 y 443 a estos puertos en tu router.`,"proxy.listener.privilegedTitle":`Un puerto por debajo de 1024 necesita un enlace privilegiado`,"proxy.listener.privilegedBody":`Ejecutar el panel con tu propio usuario no puede enlazar 80 ni 443 sin permiso. O lo concedes una vez {how} y reinicias el motor, o mantienes {http}/{https} y rediriges 80/443 desde tu router. En Windows el puerto se puede enlazar libremente, pero otra cosa podría ocuparlo.`,"proxy.listener.privilegedWithSetcap":`con {command} en el binario del motor`,"proxy.listener.email":`Correo de la cuenta ACME`,"proxy.listener.emailPlaceholder":`you@example.com`,"proxy.listener.emailHint":`Let's Encrypt lo usa para avisarte de un certificado que caduca. Un nombre solo local obtiene la CA propia del motor y no necesita ninguno.`,"proxy.listener.emailNeededTitle":`Se necesita un correo para el HTTPS automático`,"proxy.listener.emailNeededBody":`«{host}» es un nombre de host público, así que el motor pide un certificado a una CA y la dirección de la cuenta es obligatoria. Rellénala, desactiva el TLS de la ruta o activa el endpoint de pruebas mientras haces pruebas.`,"proxy.listener.staging":`Usar el endpoint de pruebas de ACME`,"proxy.listener.stagingHint":`Certificados no confiables y sin agotar el límite de peticiones mientras haces pruebas.`,"proxy.listener.dns01":`Responder a los desafíos con DNS-01`,"proxy.listener.dns01Hint":`El panel escribe el registro del desafío a través de la cuenta DNS de una ruta, así que no hace falta ningún puerto entrante para obtener un certificado.`,"proxy.listener.resolvers":`Comprobar el registro contra`,"proxy.listener.resolversPlaceholder":`1.1.1.1, 8.8.8.8`,"proxy.listener.resolversHint":`Servidores de nombres desde los que el motor lee el registro; vacío usa el suyo. Necesario donde un DNS de horizonte partido le muestra una vista distinta.`,"proxy.listener.noAccountTitle":`Ninguna cuenta DNS puede responder a un desafío`,"proxy.listener.noAccountBody":`DNS-01 está activado, pero ninguna cuenta tiene credenciales que pueda usar. Añade una en Ajustes del espacio de trabajo → DNS dinámico, o los nombres públicos se quedarán en los desafíos por puerto esperando a una CA que no puede alcanzarlos.`,"proxy.listener.manyAccountsTitle":`Cada ruta pública tiene que elegir una cuenta`,"proxy.listener.manyAccountsBody":`Hay más de una cuenta que puede responder, así que «Automático» no puede elegir. Elige una por ruta, o esos nombres se quedarán en los desafíos por puerto.`,"proxy.listener.accountNote":`Cada ruta elige su propia cuenta, así que los nombres de zonas distintas reciben la correcta. Una ruta que se deje en «Automático» usa la única cuenta que indique la tabla. Un nombre que ninguna cuenta responda se queda en los desafíos por puerto.`,"proxy.listener.pendingNote":`Un nombre público cuyo certificado aún se está emitiendo es accesible mientras tanto — por HTTPS con un certificado temporal no confiable, o por HTTP simple con una página que indica los puertos que hay que redirigir.`,"proxy.retry.inFallback":`~8 horas`,"proxy.retryButton.force":`Forzar el reintento del certificado`,"proxy.retryButton.question":`¿Volver a pedirle la CA para {host}?`,"proxy.retryButton.body":`El motor no pudo obtener antes un certificado de la CA para este nombre de host y está usando su CA local. Reintenta automáticamente cada {retryIn}.`,"proxy.retryButton.warning":`Reintentar ahora eliminará esta ruta y la dejará no disponible un rato, ¿seguro que quieres continuar?`,"proxy.retryButton.leave":`Dejarlo`,"proxy.retryButton.now":`Reintentar ahora`,"proxy.routeDialog.titleEdit":`Editar la ruta`,"proxy.routeDialog.titleAdd":`Añadir una ruta`,"proxy.routeDialog.description":`Un nombre de host, a qué reenvía y cómo se sirve por TLS.`,"proxy.routeDialog.hostname":`Nombre de host`,"proxy.routeDialog.hostnamePlaceholder":`gitea.example.com`,"proxy.routeDialog.path":`Prefijo de ruta`,"proxy.routeDialog.pathPlaceholder":`/opcional`,"proxy.routeDialog.pathHint":`Vacío sirve todo el host.`,"proxy.routeDialog.target":`Objetivo`,"proxy.routeDialog.tls":`TLS`,"proxy.routeDialog.dnsAccount":`Cuenta DNS`,"proxy.routeDialog.localNote":`Un nombre solo local lo firma la CA propia del motor, así que no interviene ninguna cuenta DNS.`,"proxy.routeDialog.workspace":`Espacio de trabajo`,"proxy.routeDialog.server":`Servidor`,"proxy.routeDialog.noServers":`este espacio de trabajo no tiene servidores`,"proxy.routeDialog.stoppedNote":`Un servidor detenido no se enruta: la fila muestra «Sin destino» hasta que vuelva a ejecutarse.`,"proxy.routeDialog.upstream":`Destino`,"proxy.routeDialog.upstreamPlaceholder":`http://10.0.0.5:8080`,"proxy.routeDialog.upstreamHint":`Una dirección literal, incluido el puerto. El esquema es opcional.`,"proxy.routeDialog.panelNote":`Servir el panel de control exige la autenticación activada y una contraseña que no sea la predeterminada — de lo contrario el panel rechaza el guardado.`,"proxy.routeDialog.save":`Guardar la ruta`,"proxy.routes.title":`Rutas`,"proxy.routes.description":`Un nombre de host público por servicio. Una ruta puede apuntar a un servidor supervisado de cualquier espacio de trabajo, a este panel o a un destino literal.`,"proxy.routes.add":`Añadir una ruta`,"proxy.routes.cannotSaveTitle":`Estas rutas no se pueden guardar tal como están`,"proxy.routes.cannotRoute":`{host} no se puede enrutar`,"proxy.routes.emptyTitle":`Aún no hay rutas`,"proxy.routes.emptyDescription":`Añade una para exponer un servidor a través de un dominio — el motor obtiene el certificado por su cuenta.`,"proxy.routes.addFirst":`Añadir la primera ruta`,"proxy.routes.columnHostname":`Nombre de host`,"proxy.routes.columnTarget":`Objetivo`,"proxy.routes.columnUpstream":`Destino`,"proxy.routes.columnTls":`TLS`,"proxy.routes.columnState":`Estado`,"proxy.routes.columnOn":`Activa`,"proxy.routes.openInTab":`Abrir {url} en una pestaña nueva`,"proxy.routes.noHostname":`aún sin nombre de host`,"proxy.routes.toggle":`Ruta {name}`,"proxy.routes.edit":`Editar {name}`,"proxy.routes.remove":`Quitar {name}`,"proxy.status.certified":`certificado listo`,"proxy.status.localCa":`CA del motor`,"proxy.status.uploaded":`par subido`,"proxy.status.awaitingCa":`esperando la CA`,"proxy.status.failed":`el certificado falló`,"proxy.status.fellBack":`Se volvió a la CA local`,"proxy.status.serving":`Sirviendo`,"proxy.status.disabled":`Desactivado`,"proxy.status.noUpstream":`Sin destino`,"proxy.status.error":`Error`,"proxy.status.unapplied":`Aún sin aplicar`,"proxy.status.off":`Apagado`,"proxy.status.stopped":`Detenido`,"proxy.status.starting":`Iniciando`,"proxy.status.running":`En ejecución`,"proxy.status.unsupported":`No compatible`,"proxy.target.server":`Un servidor supervisado`,"proxy.target.panel":`Este panel de control`,"proxy.target.external":`Un destino literal`,"proxy.target.controlPanel":`panel de control`,"proxy.target.noServer":`ningún servidor elegido`,"proxy.target.noUpstream":`sin destino`,"proxy.tls.auto":`Automático — lo decide el motor`,"proxy.tls.off":`Apagado — HTTP simple`,"proxy.tls.manual":`Certificado subido`,"proxy.tls.plain":`HTTP simple`,"proxy.tls.uploaded":`certificado subido`,"proxy.tls.letsEncrypt":`Let's Encrypt`,"proxy.tls.engineCa":`CA del motor (local)`,"proxy.tls.hintOff":`HTTP simple: no se sirve ningún certificado para este nombre de host.`,"proxy.tls.hintManual":`Sirve el par de certificados subido abajo.`,"proxy.tls.hintEmpty":`Un nombre de host público obtiene un certificado ACME; un nombre solo local obtiene la CA propia del motor.`,"proxy.tls.hintPublic":`Es un nombre de host público, así que el motor pide un certificado a una CA — se necesita un correo de cuenta ACME.`,"proxy.tls.hintLocal":`Es un nombre solo local, así que el motor lo firma con su propia CA de confianza local.`,"proxy.validation.labelRequired":`se requiere una etiqueta`,"proxy.validation.idPattern":`el id debe empezar por una letra o un dígito, y luego letras, dígitos, guion o guion bajo`,"proxy.validation.hostRequired":`se requiere un nombre de host`,"proxy.validation.hostPattern":`un nombre de host de letras, dígitos, puntos y guiones, p. ej. home.example.com`,"proxy.validation.hostTaken":`"{host}" ya está enrutado para esta ruta`,"proxy.validation.pathSlash":`un prefijo de ruta empieza por /`,"proxy.validation.pathSpace":`un prefijo de ruta no puede contener un espacio`,"proxy.validation.idTaken":`el id de ruta "{id}" se usa dos veces`,"proxy.validation.workspaceRequired":`elige el espacio de trabajo al que pertenece el servidor`,"proxy.validation.serverRequired":`elige un servidor en ese espacio de trabajo`,"proxy.validation.url":`un destino como http://10.0.0.5:8080`,"proxy.view.title":`Proxy inverso`,"proxy.view.description":`Expón tus servidores a través de dominios, con HTTPS automático por 80/443 o un desafío DNS.`,"proxy.view.dnsNote":`Para DNS-01, añade el proveedor DNS del dominio a cualquier espacio de trabajo en Ajustes del espacio de trabajo → DNS dinámico; una ruta podrá entonces elegir esa cuenta, desde cualquier espacio de trabajo.`,"proxy.view.readFailed":`No se pudo leer el proxy inverso`,"proxy.view.reading":`Leyendo el proxy inverso…`,"proxy.view.engineInstalled":`Motor instalado`,"proxy.view.engineStarting":`Iniciando el motor`,"proxy.view.engineStopping":`Deteniendo el motor`,"proxy.view.configApplied":`Configuración aplicada`,"proxy.view.configReverted":`Configuración revertida`,"proxy.view.settingsSaved":`Ajustes guardados.`,"proxy.view.settingsSavedToast":`Ajustes guardados`,"proxy.view.retryFailed":`el reintento falló`,"proxy.view.retryAsked":`volviendo a pedir la CA para {host}`,"proxy.view.fieldChanged":`campo modificado`,"proxy.view.fieldsChanged":`campos modificados`,"proxy.view.noChanges":`No hay cambios sin guardar`,"proxy.view.discard":`Descartar los cambios`,"proxy.view.save":`Guardar los ajustes`,"serverCard.open":`Abrir {url}`,"serverCard.adoptedHint":`Este proceso se sustituyó a sí mismo: el panel adoptó al sucesor en lugar de iniciar una segunda copia. Detener sigue funcionando y su salida permanece donde la envió el sucesor.`,"serverCard.detached":`independiente`,"serverCard.persistentHint":"Esta entrada se ejecuta bajo su propia nanny, así que sigue en marcha cuando el panel se detiene, se reinicia o lo matan. `home-hosted down` lo informa en lugar de detenerlo; solo una orden explícita de detención lo hace.","serverCard.persistent":`persistente`,"serverCard.disabled":`desactivado`,"serverCard.autostart":`inicio automático`,"serverCard.healthProbe":`Sonda de salud`,"serverCard.notProbed":`sin sondear`,"serverCard.restarts":`Reinicios`,"serverCard.pid":`PID`,"serverCard.rss":`RSS`,"serverCard.procs":`Procesos`,"serverCard.portFree":`libre`,"serverCard.portInUse":`en uso`,"serverCard.uptime24h":`24 h activo`,"serverCard.probe":`Sonda`,"serverCard.crashes24h":`bloqueos en 24 h`,"serverCard.lastCrash":`Último bloqueo`,"serverCard.unhealthyFor":`Con fallos desde hace {duration}`,"serverCard.nextAttempt":`Siguiente intento {when}`,"serverCard.start":`Iniciar`,"serverCard.stop":`Detener`,"serverCard.restart":`Reiniciar`,"serverCard.detailsHint":`Registros en vivo y telemetría completa`,"serverCard.moreActions":`Más acciones para {label}`,"serverCard.disable":`Desactivar el servidor`,"serverCard.enable":`Activar el servidor`,"serverCard.removeFromAutostart":`Quitar del inicio automático`,"serverCard.autostartWithPanel":`Iniciar con el panel`,"serverCard.clearLogBuffer":`Vaciar el búfer de registro`,"serverCard.removeServer":`Eliminar el servidor`,"serverCard.removeTitle":`¿Eliminar este servidor?`,"serverCard.removeDescription":`{label} se elimina de servers.config.json: su proceso se detiene y sus registros y su historial de bloqueos se borran con él.`,"serverCard.statusField":`estado`,"serverForm.workingDirectory":`Directorio de trabajo`,"serverForm.cwdHint":`Las rutas relativas se resuelven bajo projectDir.`,"serverForm.arguments":`Argumentos`,"serverForm.portHint":`En blanco significa que el servidor no tiene ningún puerto que sondear ni comprobar.`,"serverForm.bindAddress":`Dirección de escucha`,"serverForm.autostart":`Iniciar con up`,"serverForm.autostartHint":`Iniciarlo cada vez que arranque el plano de control.`,"serverForm.persistent":`Persistente`,"serverForm.persistentHint":"Sigue en marcha cuando el panel se detiene; `down` lo informa en lugar de detenerlo.","serverForm.envHint":`KEY=valor por línea, exportado al proceso.`,"serverForm.dataEnvs":`Entornos de datos`,"serverForm.dataEnvsHint":`ENV=ruta por línea — se exporta al proceso y se copia automáticamente.`,"serverForm.envFile":`Archivo de entorno`,"serverForm.envFilePlaceholder":`archivo KEY=valor opcional`,"serverForm.envFileHint":`Se carga al lanzar; sus valores anulan los de env.`,"serverForm.dependsOn":`Depende de`,"serverForm.dependsOnHint":`Separados por comas; se inician antes y se esperan hasta que estén sanos, y se detienen al final.`,"serverForm.backupPaths":`Rutas de copia adicionales`,"serverForm.backupPathsHint":`Una por línea, se admiten marcadores; los entornos de datos ya se incluyen.`,"serverForm.backupIgnore":`Omitir los archivos generados conocidos al copiar esto`,"serverForm.backupIgnoreHint":`Omite node_modules, dist, .next y las demás cachés de las que nada se restaura.`,"serverForm.bootstrap":`Bootstrap`,"serverForm.bootstrapDescription":`Un comando puntual que se ejecuta antes del primer inicio — instalaciones, migraciones, descargas.`,"serverForm.runBootstrap":`Ejecutar un bootstrap`,"serverForm.bootstrapHint":`Desactivado significa que la entrada no tiene ninguno y la clave se envía como null.`,"serverForm.timeoutMs":`Tiempo de espera (ms)`,"serverForm.runOnce":`Solo una vez por sesión`,"serverForm.runOnceHint":`Desactivado significa que se vuelve a ejecutar en cada inicio.`,"serverForm.bootstrapArgs":`Argumentos del bootstrap`,"serverForm.bootstrapArgsHint":`Uno por línea; los mismos marcadores que los argumentos principales.`,"serverForm.bootstrapEnv":`Entorno del bootstrap`,"serverForm.bootstrapEnvHint":`KEY=valor por línea, exportado solo al proceso de bootstrap.`,"serverForm.onPortConflict":`Si el puerto está ocupado`,"serverForm.logBufferLines":`Líneas del búfer de registro`,"serverForm.maxRssMb":`RSS máximo (MB)`,"serverForm.maxRssHint":`Reiniciar por encima de este valor; en blanco o 0 lo desactiva.`,"serverForm.enabledHint":`Desactivado mantiene la entrada en la configuración, pero se niega a iniciarla.`,"settings.auth.policyTitle":`Política de acceso`,"settings.auth.policyDescription":`La autenticación se aplica tanto si el panel está en loopback como si está expuesto a la red.`,"settings.auth.requirePassword":`Exigir una contraseña`,"settings.auth.requirePasswordHint":`Todas las peticiones necesitan una sesión iniciada.`,"settings.auth.sessionLifetime":`Duración de la sesión (ms)`,"settings.auth.sessionLifetimeHint":`Tiempo de inactividad: 604800000 es una semana sin actividad. Cada petición lo reinicia.`,"settings.auth.cookieSecure":`Cookie Secure`,"settings.auth.cookieSecureAuto":`Auto — solo por HTTPS`,"settings.auth.cookieSecureAlways":`Siempre`,"settings.auth.cookieSecureNever":`Nunca — HTTP simple`,"settings.auth.trustProxy":`Detrás de un proxy inverso`,"settings.auth.trustProxyOff":`No — ignorar x-forwarded-*`,"settings.auth.trustProxyLoopback":`Sí, solo desde esta máquina`,"settings.auth.trustProxyAny":`Sí, desde cualquier origen`,"settings.auth.trustProxyHint":`Confiar en x-forwarded-* para la dirección y el protocolo del cliente. «Solo desde esta máquina» es la opción segura para un proxy en el mismo host. «Desde cualquier origen» cree la cabecera del propio llamante, así que el bloqueo por intentos de inicio de sesión cuenta por dirección falsificada y se puede eludir.`,"settings.auth.maxLoginAttempts":`Intentos de inicio de sesión máximos`,"settings.auth.maxLoginAttemptsHint":`Fallos antes de un bloqueo temporal.`,"settings.auth.lockout":`Bloqueo (ms)`,"settings.auth.apiTokenSet":`Hay un token de API definido`,"settings.auth.apiTokenMissing":`Sin token de API`,"settings.auth.apiTokenNote":`Los scripts pueden llamar a la API con {code} en lugar de iniciar sesión.`,"settings.auth.noTokenNote":`Para scripts de shell y agentes, genera uno con {command}.`,"settings.auth.defaultPasswordTitle":`La contraseña predeterminada sigue en uso`,"settings.auth.defaultPasswordText":`Define tu propia contraseña abajo. Hasta entonces se sigue rechazando escuchar más allá de {address}.`,"settings.auth.blockedTitle":`Se está rechazando este punto de escucha`,"settings.auth.noPasswordTitle":`La autenticación está activada pero no hay contraseña`,"settings.auth.noPasswordText":`En realidad aún no se exige nada, y se sigue rechazando escuchar más allá de {address} hasta que exista una contraseña.`,"settings.auth.exposedTitle":`Accesible más allá de 127.0.0.1`,"settings.auth.exposedText":`Mantén una contraseña fuerte o pon delante un proxy que termine el TLS.`,"settings.auth.changePassword":`Cambiar la contraseña`,"settings.auth.setPassword":`Definir una contraseña`,"settings.auth.passwordDescription":`Se guarda como hash scrypt en el archivo de secretos, nunca en la configuración.`,"settings.auth.currentPassword":`Contraseña actual`,"settings.auth.newPassword":`Contraseña nueva`,"settings.auth.repeatPassword":`Repetir la contraseña nueva`,"settings.auth.passwordMismatch":`Las dos contraseñas no coinciden.`,"settings.auth.updatePassword":`Actualizar la contraseña`,"settings.auth.setPasswordAndEnable":`Definir la contraseña y activar la autenticación`,"settings.auth.clearPassword":`Borrar la contraseña`,"settings.auth.clearPasswordConfirm":`Confirmar el borrado`,"settings.auth.clearPasswordTitle":`¿Borrar la contraseña?`,"settings.auth.clearPasswordHint":`Con ella se desactiva la autenticación, y quien llegue al panel entra directamente.`,"settings.auth.shortPasswordTitle":`Esa contraseña es corta`,"settings.auth.shortPasswordText":`Está permitida, pero una más larga es lo único que separa la red de este panel.`,"settings.auth.passwordUpdated":`Contraseña actualizada. Se cerraron las demás sesiones.`,"settings.auth.passwordCleared":`Contraseña borrada y autenticación desactivada.`,"settings.backup.createTitle":`Crear una copia de seguridad`,"settings.backup.createDescription":`Elige qué captura este archivo. No se escribe nada hasta que la crees.`,"settings.backup.chooseItems":`Elegir elementos`,"settings.backup.partialCapture":`Solo se capturan los elementos elegidos.`,"settings.backup.withoutGlobalSettings":`Sin los ajustes globales, una restauración solo puede colocar un espacio de trabajo donde el panel de destino ya lo declare.`,"settings.backup.password":`Contraseña (opcional)`,"settings.backup.passwordHint":`Cifra el archivo; restaurarlo pide la misma contraseña.`,"settings.backup.create":`Crear la copia`,"settings.backup.chooseItemsFor":`{label} — elegir elementos`,"settings.backup.subDescription":`Un espacio de trabajo puede capturarse entero o solo sus ajustes, servidores, secretos y rutas de datos declaradas.`,"settings.backup.selectedOf":`{selected} de {total} seleccionados`,"settings.backup.nothingSelectable":`Este espacio de trabajo aún no declara nada seleccionable.`,"settings.backup.apply":`Aplicar`,"settings.backup.created":`Copia de seguridad creada.`,"settings.backup.leafSettingsHint":`Valores predeterminados del servidor, retención de registros y notificaciones`,"settings.backup.leafServersHint":`Todas las entradas de servers.config.json`,"settings.backup.leafSecretsHint":`Token del bot de Telegram y credenciales de DDNS`,"settings.backup.leafDataHint":`Una ruta de datos declarada`,"settings.backup.pathFromOrigin":`{path} — desde {origin}`,"settings.backup.entrySettingsHint":`Punto de escucha, autenticación, estado del host y la política de copias`,"settings.backup.entrySecretsHint":`Hash de la contraseña y hash del token de API`,"settings.backup.entryTlsHint":`El par de certificados del propio panel`,"settings.backup.entryWorkspaceHint":`Sus ajustes, servidores, secretos y rutas de datos declaradas`,"settings.backup.entryGlobalSettings":`Ajustes globales`,"settings.backup.entryGlobalSecrets":`Secretos globales (contraseña, token de API)`,"settings.backup.entryTlsCertificate":`Certificado TLS`,"settings.backup.leafSettings":`Ajustes`,"settings.backup.leafServers":`Servidores`,"settings.backup.leafSecrets":`Secretos`,"settings.backup.secretPassword":`Contraseña`,"settings.backup.secretPasswordHint":`El hash de la contraseña del propio panel; restaurarlo reinstaura la contraseña anterior`,"settings.backup.secretApiToken":`Token de API`,"settings.backup.secretApiTokenHint":`El token de larga duración que usan los scripts y los agentes`,"settings.backup.secretTelegram":`Token del bot de Telegram`,"settings.backup.secretTelegramHint":`Se usa para las notificaciones`,"settings.backup.secretDdns":`Credenciales de DDNS`,"settings.backup.secretDdnsHint":`Credenciales del proveedor, guardadas selladas con su clave`,"settings.backup.restoreItemLabel":`{workspace}: {item}`,"settings.backup.noteMissing":`aún no existe`,"settings.backup.noteCovered":`cubierto por {path}`,"settings.backup.noteAlreadyDeclared":`ya declarado por {origin}`,"settings.backup.noteContainsBackupDir":`contiene el directorio de copias`,"settings.backup.noteUnknownWorkspace":`espacio de trabajo desconocido`,"settings.backup.noteMissingFromArchive":`falta en el archivo`,"settings.backup.noteDeclaredByBackup":`declarado por la configuración de la copia, que no se está restaurando`,"settings.backup.noteNotDeclared":`no lo declara esta configuración ni la copia`,"settings.backup.noteRestoredFrom":`restaurado desde {path}`,"settings.backups.policyTitle":`Política`,"settings.backups.policyDescription":`Cuántos archivos conserva el panel y qué rutas adicionales captura cada uno de ellos.`,"settings.backups.allow":`Permitir copias de seguridad`,"settings.backups.allowHint":`Desactivado detiene los archivos nuevos; lo que ya está en disco sigue pudiendo descargarse y restaurarse.`,"settings.backups.offTitle":`Las copias de seguridad están desactivadas`,"settings.backups.offText":`No se archivará nada nuevo hasta volver a activarlo. Los archivos de abajo aún pueden descargarse, restaurarse y eliminarse.`,"settings.backups.keep":`Conservar`,"settings.backups.keepHint":`Los archivos más antiguos se eliminan después de cada copia.`,"settings.backups.extraPaths":`Rutas adicionales`,"settings.backups.extraPathsHint":`Separadas por comas, se capturan en todos los archivos además de lo que declare cada espacio de trabajo.`,"settings.backups.extraPathsPlaceholder":`{home}/myapp-data`,"settings.backups.archiveDirectory":`Directorio de archivos`,"settings.backups.copyArchiveDirectory":`Copiar el directorio de archivos`,"settings.backups.changeDirectory":`Cambiarlo es una decisión a nivel de archivo: edita {path}.`,"settings.backups.theSettingsFile":`el archivo de ajustes`,"settings.backups.capturesTitle":`Qué captura una copia de seguridad`,"settings.backups.capturesDescription":`Elige esto en el diálogo de creación. Un espacio de trabajo puede tomarse entero o solo sus ajustes, servidores, secretos y rutas de datos declaradas.`,"settings.backups.nothingSelectable":`Aún no hay nada seleccionable.`,"settings.backups.fromOrigin":`desde {origin}`,"settings.backups.notCaptured":`no capturado`,"settings.backups.generatedSkipped":`directorios generados omitidos`,"settings.backups.included":`incluido`,"settings.backups.skipped":`omitido`,"settings.backups.workspacesNote":`Este panel sirve {count} espacios de trabajo; cada uno es su propia entrada seleccionable.`,"settings.backups.archivesTitle":`Archivos`,"settings.backups.archivesDescription":`Guardados en el directorio de copias y descargables en cualquier momento.`,"settings.backups.create":`Crear una copia…`,"settings.backups.restore":`Restaurar…`,"settings.backups.noArchives":`Aún no hay archivos`,"settings.backups.noArchivesEnabled":`Crea uno ahora para capturar el panel y los espacios de trabajo que elijas.`,"settings.backups.noArchivesDisabled":`Todavía no se ha archivado nada, y las copias están desactivadas.`,"settings.backups.encrypted":`cifrado`,"settings.backups.download":`Descargar`,"settings.backups.restoreAction":`Restaurar`,"settings.backups.confirmDelete":`Confirmar la eliminación`,"settings.backups.deleted":`Se eliminó {name}.`,"settings.backups.kindSettings":`ajustes`,"settings.backups.kindServers":`servidores`,"settings.backups.kindSecrets":`secretos`,"settings.backups.kindTls":`tls`,"settings.backups.kindData":`datos`,"settings.backups.kindWorkspace":`espacio de trabajo`,"settings.ddns.statePending":`Esperando`,"settings.ddns.stateOk":`Actualizado`,"settings.ddns.stateUnchanged":`Al día`,"settings.ddns.stateSkipped":`Omitido`,"settings.ddns.stateError":`Falló`,"settings.ddns.passFinished":`Ronda de DNS dinámico terminada`,"settings.ddns.credentialsSaved":`Credenciales guardadas para {account}`,"settings.ddns.credentialsRemoved":`Credenciales eliminadas para {account}`,"settings.ddns.loadErrorTitle":`No se pudo cargar la configuración de DNS dinámico`,"settings.ddns.title":`DNS dinámico`,"settings.ddns.description":`Mantén estos nombres de host apuntando a la dirección pública de esta máquina. Las credenciales viven en el archivo de secretos, nunca en servers.config.json.`,"settings.ddns.checking":`comprobando`,"settings.ddns.needsAttention":`necesita atención`,"settings.ddns.watching":`vigilando`,"settings.ddns.updateNow":`Actualizar ahora`,"settings.ddns.enabled":`Mantener actualizado el DNS dinámico`,"settings.ddns.enabledHint":`Se ejecuta una ronda con el intervalo de abajo; solo se llama a un proveedor cuando la dirección ha cambiado de verdad.`,"settings.ddns.interval":`Comprobar cada (ms)`,"settings.ddns.intervalHint":`60000 es un minuto; el valor predeterminado son cinco.`,"settings.ddns.ttl":`TTL (s)`,"settings.ddns.ttlHint":`1 significa automático donde el proveedor lo admita.`,"settings.ddns.detectIpv4":`Detectar IPv4`,"settings.ddns.detectIpv4Hint":`Necesario para los registros A.`,"settings.ddns.detectIpv6":`Detectar IPv6`,"settings.ddns.detectIpv6Hint":`Necesario para los registros AAAA.`,"settings.ddns.accountsTitle":`Cuentas de proveedor`,"settings.ddns.accountsDescription":`Una entrada por token de API. Las credenciales se guardan en el servidor y nunca vuelven.`,"settings.ddns.credentialsSet":`credenciales guardadas`,"settings.ddns.noCredentials":`sin credenciales`,"settings.ddns.credentials":`Credenciales`,"settings.ddns.removeAccountBlocked":`Quita primero los nombres de host que usan esta cuenta`,"settings.ddns.noAccounts":`Aún no hay cuentas. Elige un proveedor y añade una.`,"settings.ddns.provider":`Proveedor`,"settings.ddns.accountId":`Id de la cuenta`,"settings.ddns.accountIdPlaceholder":`cloudflare-home`,"settings.ddns.accountIdHint":"El id de la cuenta nombra la cuenta y es la clave de sus credenciales guardadas; letras minúsculas, dígitos, `-` y `_`.","settings.ddns.hostnamesTitle":`Nombres de host`,"settings.ddns.hostnamesDescription":`La lista completa que hay que mantener actualizada — suba.dominio.com, dominio.xyz, etc.`,"settings.ddns.account":`Cuenta`,"settings.ddns.recordA":`A (IPv4)`,"settings.ddns.recordAaaa":`AAAA (IPv6)`,"settings.ddns.aaaaUnsupported":`Este proveedor no puede gestionar registros AAAA.`,"settings.ddns.proxied":`Con proxy`,"settings.ddns.proxiedHint":`Cloudflare sirve este registro a través de su propia red.`,"settings.ddns.ipv6Off":`La detección de IPv6 está desactivada`,"settings.ddns.advanced":`Avanzado`,"settings.ddns.advancedHint":`dominio registrado y anulación del TTL`,"settings.ddns.registeredDomain":`Dominio registrado`,"settings.ddns.registeredDomainPlaceholder":`example.co.uk`,"settings.ddns.registeredDomainHint":`Solo cuando haya que indicar el ápice al proveedor, p. ej. dominios con tres etiquetas.`,"settings.ddns.ttlOverride":`Anulación del TTL (s)`,"settings.ddns.ttlOverrideHint":`En blanco usa el valor de arriba.`,"settings.ddns.noHostnames":`Aún no hay nombres de host.`,"settings.ddns.hostnamePlaceholder":`home.example.com`,"settings.ddns.lastPass":`Última ronda`,"settings.ddns.ipv4Value":`IPv4 {address}`,"settings.ddns.ipv6Value":`IPv6 {address}`,"settings.ddns.type":`Tipo`,"settings.ddns.state":`Estado`,"settings.ddns.address":`Dirección`,"settings.ddns.detail":`Detalle`,"settings.ddns.credentialsTitle":`Credenciales del proveedor`,"settings.ddns.credentialsDescription":`Los campos guardados nunca se devuelven. Guardar reemplaza todos los campos de esta cuenta y ejecuta una ronda de inmediato.`,"settings.ddns.optional":`Opcional.`,"settings.ddns.whereToGet":`Dónde conseguirlas`,"settings.ddns.forget":`Olvidar`,"settings.ddns.forgetConfirm":`Olvidarlas`,"settings.ddns.forgetTitle":`¿Olvidar las credenciales guardadas?`,"settings.ddns.forgetHint":`Se eliminan del disco y no se pueden volver a leer; tendrías que pegarlas otra vez.`,"settings.ddns.saveCredentials":`Guardar las credenciales`,"settings.defaults.title":`Valores predeterminados del servidor`,"settings.defaults.description":`Se aplican a todas las entradas que no definan su propio valor.`,"settings.defaults.enabledHint":`Las entradas nuevas empiezan activadas.`,"settings.defaults.autostart":`Iniciar con el panel`,"settings.defaults.bind":`Enlace`,"settings.defaults.bindLocal":`Local — 127.0.0.1`,"settings.defaults.bindLan":`LAN — 0.0.0.0`,"settings.defaults.onPortConflict":`Si el puerto está ocupado`,"settings.defaults.conflictBlock":`Bloquear el inicio`,"settings.defaults.conflictWarn":`Avisar e iniciar de todos modos`,"settings.defaults.conflictFollow":`Adoptar un reinicio independiente de sí mismo`,"settings.defaults.conflictReclaim":`Sustituir un reinicio independiente por una copia supervisada`,"settings.defaults.conflictKill":`Matar lo que ocupe el puerto`,"settings.defaults.logBufferLines":`Líneas del búfer de registro`,"settings.defaults.logBufferLinesHint":`Se conservan en memoria por servidor.`,"settings.host.title":`Umbrales`,"settings.host.description":`Un umbral de 0 desactiva esa alerta. Las superaciones notifican una vez, y otra más al recuperarse.`,"settings.host.enabled":`Muestrear esta máquina`,"settings.host.enabledHint":`Carga, memoria, swap, disco y temperatura de la CPU, con el intervalo de abajo.`,"settings.host.interval":`Intervalo (ms)`,"settings.host.intervalHint":`Con qué frecuencia se muestrea el host y se comprueban las alertas.`,"settings.host.diskPaths":`Rutas de disco`,"settings.host.diskPathsHint":`Separadas por comas; las plantillas como {home} se expanden.`,"settings.host.diskUsed":`Disco usado (%)`,"settings.host.memoryUsed":`Memoria usada (%)`,"settings.host.swapUsed":`Swap usado (%)`,"settings.host.zeroDisables":`0 desactiva la alerta.`,"settings.host.loadPerCpu":`Carga por CPU`,"settings.host.loadPerCpuHint":`La carga media de 1 minuto dividida por el número de núcleos.`,"settings.host.tempCelsius":`Temperatura de la CPU (°C)`,"settings.host.tempCelsiusHint":`Solo Linux; se ignora donde el sistema operativo no la expone.`,"settings.host.breachingNow":`Superándose ahora:`,"settings.host.nothingBreaching":`Ahora mismo no se supera nada.`,"settings.interface.title":`Interfaz`,"settings.interface.description":`El panel es un sitio estático: conserva el de serie o sirve tu propia compilación desde el directorio de estado.`,"settings.interface.currentlyServing":`Sirviendo actualmente`,"settings.interface.copyDirectory":`Copiar el directorio de la UI`,"settings.interface.fileCount":`{count} archivos`,"settings.interface.sourceStock":`de serie`,"settings.interface.sourceCustom":`personalizada`,"settings.interface.unnamed":`sin nombre`,"settings.interface.panelVersion":`Versión del panel`,"settings.interface.copyPanelVersion":`Copiar la versión del panel`,"settings.interface.panelVersionHint":`La versión que ejecuta este proceso del panel — {command} imprime el mismo número.`,"settings.interface.panelName":`Nombre del panel`,"settings.interface.panelNameHint":`La UI de serie lo muestra en la barra lateral. Una UI personalizada puede mostrar su propio nombre.`,"settings.interface.uploadLabel":`Subir una compilación de UI (.zip con un index.html)`,"settings.interface.docsHint":`Consulta {docs} para el contrato de la API. Si una UI personalizada rompe el panel, {command} restaura la de serie desde el terminal.`,"settings.interface.resetName":`Restablecer el nombre`,"settings.interface.confirmRevert":`Confirmar la reversión`,"settings.interface.revertToStock":`Volver a la de serie`,"settings.interface.install":`Instalar la UI`,"settings.interface.installed":`UI sustituida por {name} — actualiza la página`,"settings.interface.yourBuild":`tu compilación`,"settings.interface.restored":`UI de serie restaurada — actualiza la página`,"settings.interface.nothingInstalled":`no había ninguna UI personalizada instalada`,"settings.listener.title":`Punto de escucha`,"settings.listener.description":`Dónde responde el panel. Cambiarlo reinicia el panel y envía esta página a la nueva dirección.`,"settings.listener.port":`Puerto de control`,"settings.listener.portHint":`Predeterminado 3999.`,"settings.listener.bind":`Enlace`,"settings.listener.bindLocal":`Local`,"settings.listener.bindLan":`LAN`,"settings.listener.bindCustom":`Personalizado`,"settings.listener.bindLanHint":`0.0.0.0 — accesible desde toda la red.`,"settings.listener.bindLocalHint":`127.0.0.1 — solo esta máquina.`,"settings.listener.bindCustomHint":`Una dirección de interfaz concreta que escribas abajo.`,"settings.listener.ipv4":`Dirección IPv4`,"settings.listener.ipv4Placeholder":`192.168.1.20`,"settings.listener.ipv4Error":`Introduce una dirección IPv4, por ejemplo 192.168.1.20.`,"settings.listener.ipv4Hint":`Escuchar más allá de 127.0.0.1 exige una contraseña real.`,"settings.listener.openBrowser":`Abrir un navegador cuando arranque el panel`,"settings.listener.liveAddress":`Dirección activa`,"settings.listener.restartRequired":`requiere reinicio`,"settings.listener.copyLiveAddress":`Copiar la dirección activa`,"settings.listener.liveAddressHint":`A qué está enlazado el punto de escucha ahora mismo; los cambios guardados surten efecto cuando el panel se vuelve a enlazar.`,"settings.logs.title":`Retención`,"settings.logs.description":`La vista en vivo siempre viene de la memoria; estos archivos sobreviven a un reinicio y alimentan la página Registros.`,"settings.logs.persist":`Conservar los registros en disco`,"settings.logs.persistHint":`Desactívalo para mantenerlo todo solo en memoria.`,"settings.logs.maxBytes":`Rotar a los (bytes)`,"settings.logs.maxBytesHint":`Por servidor, antes de pasar a .1, .2, …`,"settings.logs.keep":`Conservar los archivos rotados`,"settings.logs.directory":`Directorio de registros`,"settings.logs.copyDirectory":`Copiar el directorio de registros`,"settings.logs.browseHint":`Explora y descarga estos archivos en la página {logs}.`,"settings.paths.dataRoot":`Raíz de datos`,"settings.paths.dataRootHint":`HHOSTED_HOME — ajustes globales, espacios de trabajo, TLS, copias de seguridad y la UI.`,"settings.paths.globalSettings":`Ajustes globales`,"settings.paths.globalSettingsHint":`settings.json — punto de escucha, autenticación, política TLS, estado del host, copias de seguridad.`,"settings.paths.projectDir":`Directorio del proyecto`,"settings.paths.projectDirHint":`Base para las rutas relativas de las entradas.`,"settings.paths.panelAddress":`Dirección del panel`,"settings.paths.panelAddressHint":`Dónde está activo ahora mismo este panel de control.`,"settings.paths.serversConfig":`Configuración de servidores`,"settings.paths.serversConfigHint":`servers.config.json de {label}.`,"settings.paths.workspaceSettings":`Ajustes del espacio de trabajo`,"settings.paths.workspaceSettingsHint":`Valores predeterminados del servidor, retención de registros, notificaciones, DDNS.`,"settings.paths.logs":`Registros`,"settings.paths.logsHint":`Salida persistida de este espacio de trabajo.`,"settings.paths.copyPath":`Copiar {label}`,"settings.paths.whereThingsLive":`Dónde vive cada cosa`,"settings.paths.whereThingsLiveDescription":`Solo lectura. Copia una ruta directamente en un shell o un editor.`,"settings.paths.workspaceFiles":`Archivos del espacio de trabajo`,"settings.paths.workspaceFilesDescription":`Cada espacio de trabajo tiene su propia configuración, ajustes y directorio de registros; no se comparte nada entre ellos.`,"settings.rebind.failed":`El panel de control no respondió en {target}. Consulta la consola para ver el nuevo punto de escucha.`,"settings.restore.title":`Restaurar una copia de seguridad`,"settings.restore.description":`No se escribe nada hasta que se aplique el plan.`,"settings.restore.archive":`Archivo`,"settings.restore.archiveHint":`Un archivo guardado, o un .zip de esta máquina.`,"settings.restore.encryptedName":`{name} — cifrado`,"settings.restore.uploadOption":`Subir un archivo…`,"settings.restore.archiveFile":`Archivo de copia (.zip)`,"settings.restore.unchangedTitle":`Todavía no ha cambiado nada`,"settings.restore.archiveLine":`Archivo {name}.`,"settings.restore.uploadedArchive":`El archivo subido.`,"settings.restore.passwordProtected":`Esta copia está protegida con contraseña.`,"settings.restore.password":`Contraseña`,"settings.restore.checkAgain":`Volver a comprobar con la contraseña`,"settings.restore.choosePrompt":`Elige qué restaurar — {selected} de {total} seleccionados.`,"settings.restore.willRestore":`Se restaurará: {items}.`,"settings.restore.skipped":`Omitido: {items}.`,"settings.restore.nothing":`nada`,"settings.restore.restartNote":`Los ajustes del propio panel son distintos, así que reinicia el panel después.`,"settings.restore.reloadedNote":`Los espacios de trabajo restaurados se recargan de inmediato; las entradas marcadas con inicio automático arrancan solas.`,"settings.restore.applyStored":`Aplicar esta restauración`,"settings.restore.applyUpload":`Restaurar lo subido`,"settings.restore.restored":`Se restauraron {count} elemento(s).`,"settings.restore.restoredWithNotes":`Se restauraron {count} elemento(s) — {notes}.`,"settings.restore.noteReloaded":`los servidores restaurados están activos y las entradas de inicio automático arrancando`,"settings.restore.noteRestart":`reinicia el panel para aplicar sus propios ajustes`,"settings.restore.reasonSymbolicLink":`enlace simbólico, omitido`,"settings.restore.reasonNotSelected":`no seleccionado`,"settings.restore.reasonUnrestorable":`no se puede restaurar aquí`,"settings.restore.reasonInvalidSettings":`los ajustes del archivo no son válidos`,"settings.restore.reasonInvalidServers":`los servidores del archivo no son válidos`,"settings.shell.noUnsavedChanges":`No hay cambios sin guardar`,"settings.shell.discard":`Descartar los cambios`,"settings.shell.save":`Guardar los ajustes`,"settings.shell.unsavedTitle":`Cambios sin guardar`,"settings.shell.nothingToSave":`No hay nada que guardar.`,"settings.telegram.title":`Telegram`,"settings.telegram.description":`La política vive en la configuración; el token del bot es un secreto y nunca vuelve del servidor.`,"settings.telegram.enabled":`Enviar notificaciones`,"settings.telegram.enabledHint":`Un mensaje por evento, limitado por el tiempo de espera de abajo.`,"settings.telegram.chatId":`Id del chat`,"settings.telegram.chatIdPlaceholder":`123456789 o @channel`,"settings.telegram.chatIdHint":`Usa Detectar chats para rellenarlo a partir de las novedades del bot.`,"settings.telegram.cooldown":`Espera por evento (ms)`,"settings.telegram.cooldownHint":`Por servidor y motivo, para que un servidor inestable no pueda inundar.`,"settings.telegram.onCrash":`Intentos agotados`,"settings.telegram.onUnhealthy":`Puerto con fallos`,"settings.telegram.onForcedRestart":`Reinicio forzado`,"settings.telegram.onRecovered":`Recuperado`,"settings.telegram.onHost":`Umbrales del host superados`,"settings.telegram.onHostHint":`Disco, memoria, swap, carga y temperatura de la CPU, según los umbrales de Estado del host.`,"settings.telegram.onDdns":`DNS dinámico cambiado o fallido`,"settings.telegram.onDdnsHint":`Un mensaje por ronda que cambió un registro, y otro por ronda fallida.`,"settings.telegram.botToken":`Token del bot`,"settings.telegram.tokenSet":`token definido`,"settings.telegram.noToken":`sin token`,"settings.telegram.tokenNote":`De @BotFather — un secreto, nunca en servers.config.json.`,"settings.telegram.tokenPlaceholder":`123456789:AA…`,"settings.telegram.tokenSavedPlaceholder":`Guardado — escribe un token nuevo para reemplazarlo`,"settings.telegram.saveToken":`Guardar el token`,"settings.telegram.detectChats":`Detectar chats`,"settings.telegram.sendTest":`Enviar una prueba`,"settings.telegram.removeToken":`Quitar el token`,"settings.telegram.removeTokenConfirm":`Confirmar el borrado`,"settings.telegram.removeTokenTitle":`¿Quitar el token del bot?`,"settings.telegram.removeTokenHint":`Las notificaciones se detienen hasta que vuelvas a pegar un token.`,"settings.telegram.tokenSaved":`Token guardado.`,"settings.telegram.tokenSavedFor":`Token guardado para @{username}.`,"settings.telegram.tokenRemoved":`Token eliminado.`,"settings.telegram.noChats":`No se encontró ningún chat. Envía /start al bot primero y vuelve a detectar.`,"settings.telegram.testSent":`Mensaje de prueba enviado.`,"settings.telegram.testFailed":`El mensaje de prueba falló.`,"settings.telegram.chatsSeen":`Chats que ha visto el bot:`,"settings.telegram.lastSend":`Último envío: {result}`,"settings.tls.title":`HTTPS`,"settings.tls.description":`Sube un par PEM y el panel servirá TLS en su propio punto de escucha. Un certificado autofirmado basta en una red doméstica.`,"settings.tls.serve":`Servir el panel por HTTPS`,"settings.tls.serveHint":`Se guarda con Guardar los ajustes; el panel se vuelve a enlazar y esta página lo sigue.`,"settings.tls.certificateTitle":`Certificado`,"settings.tls.certificateDescription":`Certificado con codificación PEM y su clave privada. Ambos permanecen en el archivo de secretos.`,"settings.tls.unusableTitle":`El certificado guardado no se puede usar`,"settings.tls.subject":`Sujeto`,"settings.tls.issuer":`Emisor`,"settings.tls.validUntil":`Válido hasta`,"settings.tls.days":`{count} días`,"settings.tls.privateKey":`Clave privada`,"settings.tls.keyMatches":`coincide con el certificado`,"settings.tls.keyMismatch":`no coincide`,"settings.tls.fingerprint":`Huella`,"settings.tls.copyFingerprint":`Copiar la huella`,"settings.tls.noCertificateTitle":`No se ha subido ningún certificado`,"settings.tls.noCertificateText":`Sube abajo un certificado PEM y su clave, y guarda. El HTTPS no se sirve hasta que haya un certificado.`,"settings.tls.certFile":`Archivo del certificado (.pem, .crt)`,"settings.tls.keyFile":`Archivo de la clave privada (.pem, .key)`,"settings.tls.pasteCertificate":`O pega el certificado`,"settings.tls.pasteKey":`O pega la clave privada`,"settings.tls.saveCertificate":`Guardar el certificado`,"settings.tls.removeCertificate":`Quitar el certificado`,"settings.tls.confirmRemove":`Confirmar el borrado`,"settings.tls.removeTitle":`¿Quitar el certificado?`,"settings.tls.removeHint":`El TLS sigue activado pero no tiene nada que servir, así que el panel vuelve a http cuando el punto de escucha se vuelve a enlazar.`,"settings.tls.stored":`Certificado guardado.`,"settings.tls.removed":`Certificado quitado.`,"status.stopped":`Detenido`,"status.starting":`Iniciando`,"status.running":`En ejecución`,"status.stopping":`Deteniendo`,"status.backoff":`Reiniciando`,"status.crashed":`Bloqueado`,"status.conflict":`Conflicto de puerto`,"theme.label":`Tema: {theme}`,"theme.light":`claro`,"theme.dark":`oscuro`,"theme.system":`sistema`,"topbar.search":`Buscar o ejecutar un comando`,"topbar.openNavigation":`Abrir la navegación`,"topbar.commandPalette":`Paleta de comandos`,"topbar.account":`Cuenta`,"topbar.signedIn":`Sesión iniciada`,"topbar.signOut":`Cerrar sesión`,"topbar.workspaceLabel":`Espacio de trabajo: {name}`,"validation.port":`El puerto debe ser un número entero entre 1 y 65535.`,"validation.idRequired":`Se requiere un id — es la clave bajo la que vive este servidor.`,"validation.idPattern":`El id debe empezar por una letra minúscula o un dígito y contener solo letras minúsculas, dígitos, guiones y guiones bajos.`,"validation.commandRequired":`Se requiere un comando — el ejecutable que lanza el supervisor.`,"validation.bootstrapCommand":`Un bootstrap necesita un comando que ejecutar.`,"views.actions.addAServer":`Añadir un servidor`,"views.actions.addServer":`Añadir servidor`,"views.actions.startAll":`Iniciar todos`,"views.actions.stopAll":`Detener todos`,"views.common.thisWorkspace":`este espacio de trabajo`,"views.globalOverview.configError":`No se pudo leer la configuración: {error}`,"views.globalOverview.degraded":`degradado`,"views.globalOverview.description":`Estado del host y todos los servidores de todos los espacios de trabajo, agrupados por dónde viven.`,"views.globalOverview.emptyDescription":`Elige un espacio de trabajo en la cabecera y añade el primer proceso que deba mantener vivo.`,"views.globalOverview.emptyTitle":`Todavía no hay servidores en ningún sitio`,"views.globalOverview.groupEmptyDescription":`Añade uno y aparecerá aquí y en la página del espacio de trabajo.`,"views.globalOverview.groupRunning":`{running}/{total} en ejecución`,"views.globalOverview.hostUptime":`Tiempo activo del host`,"views.globalOverview.hostVitals":`Estado del host`,"views.globalOverview.hostVitalsNote":`Esta máquina, compartida por todos los espacios de trabajo.`,"views.globalOverview.openWorkspace":`Abrir el espacio de trabajo`,"views.globalOverview.panelUptime":`Tiempo activo del panel`,"views.globalOverview.samplingOff":`muestreo desactivado`,"views.globalOverview.samplingOn":`muestreo activado`,"views.globalOverview.serversTotal":`{count} servidores en total`,"views.globalOverview.serving":`sirviendo`,"views.globalOverview.workspaces":`Espacios de trabajo`,"views.globalSettings.authenticationDescription":`Quién puede iniciar sesión en este panel y cómo se confía en una sesión.`,"views.globalSettings.backupsDescription":`Un archivo por captura, que cubre el panel y cualquier espacio de trabajo que elijas.`,"views.globalSettings.changesDescription":`Lo que Guardar escribiría en el archivo de ajustes del panel.`,"views.globalSettings.description":`Escucha, acceso, estado del host, copias de seguridad, TLS y rutas de este panel — compartidos por todos los espacios de trabajo.`,"views.globalSettings.hostDescription":`Umbrales de alerta para los recursos de esta propia máquina.`,"views.globalSettings.interfaceDescription":`Sirve tu propia UI del panel en lugar de la de serie.`,"views.globalSettings.languageDescription":`El idioma en que se muestra este panel, para este navegador.`,"views.globalSettings.languageNote":`Tu elección se guarda en este navegador y también se aplica a la página de inicio de sesión. No cambia la salida de registro propia del panel ni sus mensajes de API.`,"views.globalSettings.listenerDescription":`Dónde escucha el panel de control y cómo se anuncia.`,"views.globalSettings.loadErrorTitle":`Algunos valores que solo están en archivos no se pudieron cargar`,"views.globalSettings.navLabel":`Secciones de los ajustes globales`,"views.globalSettings.pathsDescription":`Dónde guarda home-hosted sus archivos, globalmente y por espacio de trabajo.`,"views.globalSettings.saveFailed":`No se pudieron guardar los ajustes.`,"views.globalSettings.saved":`Ajustes guardados.`,"views.globalSettings.savedRebinding":`Ajustes guardados — el panel se está mudando a una dirección nueva.`,"views.globalSettings.savedToast":`Ajustes guardados`,"views.globalSettings.sectionAuthentication":`Autenticación`,"views.globalSettings.sectionBackups":`Copias de seguridad`,"views.globalSettings.sectionHost":`Estado del host`,"views.globalSettings.sectionInterface":`Interfaz`,"views.globalSettings.sectionListener":`Escucha`,"views.globalSettings.sectionPaths":`Rutas`,"views.globalSettings.sectionTls":`TLS`,"views.globalSettings.title":`Ajustes globales`,"views.globalSettings.tlsDescription":`Sirve el panel por HTTPS con tu propio certificado.`,"views.logs.allStreams":`Todos los flujos`,"views.logs.clear":`Vaciar`,"views.logs.clearDescription":`{server} — el archivo en disco se trunca. El proceso sigue en marcha y a partir de aquí se escriben líneas nuevas.`,"views.logs.clearFile":`Vaciar el archivo`,"views.logs.clearNote":`Descárgalo primero si aún necesitas la salida — esto no se puede deshacer desde el panel.`,"views.logs.clearTitle":`¿Vaciar el archivo de registro persistido?`,"views.logs.fileEmpty":`El archivo persistido está vacío.`,"views.logs.loadedLines":`{count} líneas cargadas`,"views.logs.modeLive":`Flujo en vivo`,"views.logs.modePersisted":`Persistido`,"views.logs.noServersDescription":`Añade uno y su salida se conservará aquí.`,"views.logs.noServersTitle":`No hay servidores`,"views.logs.nothingOnDisk":`No hay nada en disco para este servidor — la persistencia está desactivada o aún no ha escrito nada.`,"views.logs.nothingPersisted":`nada persistido`,"views.logs.persistedSummary":`{workspace} · {persisted} de {total} servidores en disco · {size}`,"views.logs.persistedTitle":`Registros persistidos`,"views.logs.pickServerDescription":`La salida persistida y los flujos en vivo son por servidor. Elige uno de la lista.`,"views.logs.pickServerTitle":`Elige un servidor`,"views.logs.reload":`Recargar`,"views.logs.retentionNote":`La rotación y la retención se configuran en Ajustes del espacio de trabajo → Registros.`,"views.logs.searchAria":`Buscar en el registro`,"views.logs.searchPlaceholder":`buscar en la ventana de la cola`,"views.logs.searchedLines":`{count} líneas buscadas`,"views.logs.streamAria":`Flujo`,"views.logs.tailAria":`Tamaño de la cola`,"views.logs.waitingOutput":`Conectado — esperando salida.`,"views.overview.acrossTree":`en todo el árbol`,"views.overview.cpuNow":`{value}% de CPU ahora`,"views.overview.crashedOrUnhealthy":`bloqueados o con fallos`,"views.overview.description":`Estado en vivo de todos los servidores de este espacio de trabajo, actualizado por un único flujo de eventos.`,"views.overview.emptyDescription":`Añade el primer proceso que este espacio de trabajo deba mantener vivo.`,"views.overview.emptyTitle":`No hay servidores en este espacio de trabajo`,"views.overview.enabled":`{count} activados`,"views.overview.longestUptime":`Mayor tiempo activo`,"views.overview.needsAttention":`Necesita atención`,"views.overview.notUp":`{count} sin arrancar`,"views.overview.nothingBroken":`no hay nada roto`,"views.overview.nothingRunning":`nada en ejecución`,"views.overview.openFullList":`Abrir la lista completa`,"views.overview.peak":`pico {value}`,"views.overview.processMemory":`Memoria de los procesos`,"views.overview.recentActivity":`Actividad reciente`,"views.overview.running":`En ejecución`,"views.overview.sampling":`el historial de recursos se muestrea cada 5 s y se conserva durante esta sesión`,"views.overview.stopped":`Detenido`,"views.overview.workspaceLabel":`espacio de trabajo {id}`,"views.route.server":`Servidor`,"views.serverDetail.allServers":`Todos los servidores`,"views.serverDetail.autostart":`Iniciar con el panel`,"views.serverDetail.backToServers":`Volver a los servidores`,"views.serverDetail.bind":`Enlace`,"views.serverDetail.bindCustom":`{bind} — personalizado`,"views.serverDetail.bindLan":`0.0.0.0 — todas las interfaces`,"views.serverDetail.bindLocal":`127.0.0.1 — solo esta máquina`,"views.serverDetail.closeEditor":`Cerrar el editor`,"views.serverDetail.copyJson":`Copiar la configuración JSON`,"views.serverDetail.crashes24":`bloqueos en 24 h`,"views.serverDetail.dependencies":`Dependencias`,"views.serverDetail.detached":`independiente`,"views.serverDetail.detachedHint":`Este proceso se sustituyó a sí mismo: el panel adoptó al sucesor en lugar de iniciar una segunda copia. Detener sigue funcionando y su salida permanece donde la envió el sucesor.`,"views.serverDetail.disableServer":`Desactivar el servidor`,"views.serverDetail.editHint":`Editar todos los campos de esta entrada`,"views.serverDetail.effectiveConfig":`Configuración efectiva`,"views.serverDetail.effectiveConfigNote":`Los valores predeterminados de Ajustes ya están combinados en estos valores.`,"views.serverDetail.enableServer":`Activar el servidor`,"views.serverDetail.eventHistory":`Historial de eventos`,"views.serverDetail.eventHistoryNote":`El panel lo conserva durante 24 horas.`,"views.serverDetail.fieldArgs":`args`,"views.serverDetail.fieldBackupPaths":`rutas de copia`,"views.serverDetail.fieldBootstrap":`bootstrap`,"views.serverDetail.fieldCommand":`comando`,"views.serverDetail.fieldCwd":`cwd`,"views.serverDetail.fieldDataEnvs":`entornos de datos`,"views.serverDetail.fieldDependsOn":`depende de`,"views.serverDetail.fieldEnv":`entorno`,"views.serverDetail.fieldEnvFile":`archivo de entorno`,"views.serverDetail.fieldHealth":`salud`,"views.serverDetail.fieldLogBuffer":`búfer de registro`,"views.serverDetail.fieldOnPortConflict":`si el puerto está ocupado`,"views.serverDetail.fieldPortBind":`puerto · enlace`,"views.serverDetail.fieldRestart":`reinicio`,"views.serverDetail.fieldRssLimit":`límite de RSS`,"views.serverDetail.fieldStop":`detención`,"views.serverDetail.fields":`Campos`,"views.serverDetail.goneDescription":`{id} ya no está en servers.config.json. Puede que se haya quitado desde otra pestaña.`,"views.serverDetail.goneTitle":`Ese servidor ya no existe`,"views.serverDetail.health":`Salud`,"views.serverDetail.healthProbe":`Sonda de salud`,"views.serverDetail.lastCrash":`Último bloqueo`,"views.serverDetail.lastProbe":`Última sonda`,"views.serverDetail.logBufferLines":`{count} líneas`,"views.serverDetail.memoryRss":`Memoria (RSS)`,"views.serverDetail.moreActions":`Más acciones para {label}`,"views.serverDetail.neverWritten":`Este servidor aún no ha escrito nada.`,"views.serverDetail.nextAttempt":`Siguiente intento`,"views.serverDetail.none":`ninguno`,"views.serverDetail.off":`desactivado`,"views.serverDetail.persistent":`persistente`,"views.serverDetail.persistentHint":"Esta entrada se ejecuta bajo su propia nanny, así que sigue en marcha cuando el panel se detiene, se reinicia o lo matan. `home-hosted down` lo informa en lugar de detenerlo; solo lo hace Detener.","views.serverDetail.pid":`PID`,"views.serverDetail.portFree":`libre`,"views.serverDetail.portInUse":`en uso`,"views.serverDetail.portState":`Estado del puerto`,"views.serverDetail.probeFailed":`La sonda de salud no ha pasado.`,"views.serverDetail.probeFailedFor":`La sonda de salud no ha pasado desde hace {duration}.`,"views.serverDetail.processes":`Procesos`,"views.serverDetail.rawJson":`JSON sin procesar`,"views.serverDetail.removeAutostart":`Quitar del inicio automático`,"views.serverDetail.removeDescription":`{label} se elimina de servers.config.json: su proceso se detiene y sus registros y su historial de bloqueos se borran con él.`,"views.serverDetail.removeNote":`Esto no se puede deshacer desde el panel — la entrada hay que volver a añadirla a mano o desde una copia de seguridad.`,"views.serverDetail.removeServer":`Eliminar el servidor`,"views.serverDetail.removeTitle":`¿Eliminar este servidor?`,"views.serverDetail.restart":`Reiniciar`,"views.serverDetail.restarts":`Reinicios`,"views.serverDetail.sectionConfig":`Configuración`,"views.serverDetail.sectionHistory":`Historial`,"views.serverDetail.sectionOutput":`Salida en vivo`,"views.serverDetail.start":`Iniciar`,"views.serverDetail.startsOnItsOwn":`Arranca solo. Añade ids en {code} para ordenarlo después de otros servidores.`,"views.serverDetail.stop":`Detener`,"views.serverDetail.telemetry":`Telemetría`,"views.serverDetail.telemetryNote":`Se muestrea cada 5 s mientras esta página está abierta.`,"views.serverDetail.unhealthyFor":`Con fallos desde hace`,"views.serverDetail.uptime24":`tiempo activo en 24 h`,"views.serverDetail.waitingFirstLine":`Esperando la primera línea…`,"views.servers.clearFilter":`Borrar el filtro`,"views.servers.clearFilters":`Borrar los filtros`,"views.servers.description":`Todas las entradas de servers.config.json de {workspace}, con recursos en vivo, salud e historial.`,"views.servers.emptyDescription":`Añade el primer proceso que este panel deba supervisar. Su comando, argumentos, entorno y directorio de trabajo viven todos en el archivo de configuración.`,"views.servers.emptyTitle":`No hay servidores configurados`,"views.servers.filterAll":`Todos`,"views.servers.filterAria":`Filtrar servidores`,"views.servers.filterAttention":`Atención`,"views.servers.filterDisabled":`Desactivados`,"views.servers.filterPlaceholder":`Filtrar por id, etiqueta, comando o puerto`,"views.servers.filterRunning":`En ejecución`,"views.servers.filterStopped":`Detenidos`,"views.servers.noMatchDescription":`Prueba con otro estado o borra la búsqueda.`,"views.servers.noMatchTitle":`Nada coincide con ese filtro`,"views.settings.changesDescription":`Lo que Guardar escribiría en los ajustes de {workspace}.`,"views.settings.configErrorNote":`El panel sigue supervisando con la configuración que ya tenía; corregir el archivo lo recargará solo.`,"views.settings.configErrorTitle":`No se pudo leer la configuración del espacio de trabajo`,"views.settings.configWarningTitle":`La configuración de este espacio de trabajo tiene un aviso`,"views.settings.ddnsDescription":`Mantén los nombres de host apuntando a la dirección pública de esta máquina, sea cual sea el registrador que los tenga.`,"views.settings.defaultsDescription":`Se aplican a todas las entradas de este espacio de trabajo que no definan su propio valor.`,"views.settings.description":`Valores predeterminados del servidor, retención de registros, notificaciones y DNS dinámico para {workspace}.`,"views.settings.logsDescription":`Cuánta salida conserva este espacio de trabajo en disco y durante cuánto tiempo.`,"views.settings.navLabel":`Secciones de los ajustes del espacio de trabajo`,"views.settings.notificationsDescription":`Alertas de bloqueo y de salud de este espacio de trabajo, enviadas a un chat de Telegram.`,"views.settings.saveFailed":`No se pudieron guardar los ajustes.`,"views.settings.saved":`Ajustes del espacio de trabajo guardados.`,"views.settings.savedToast":`Ajustes del espacio de trabajo guardados`,"views.settings.sectionDdns":`DNS dinámico`,"views.settings.sectionDefaults":`Valores predeterminados del servidor`,"views.settings.sectionLogs":`Registros`,"views.settings.sectionNotifications":`Notificaciones`,"workspace.new":`Nuevo espacio de trabajo`,"workspace.rename":`Renombrar el espacio de trabajo`,"workspace.create":`Crear el espacio de trabajo`,"workspace.renameAction":`Renombrar`,"workspace.createHint":`Tiene sus propios ajustes, servidores, registros, secretos y entrada de copia de seguridad: servidos por este mismo panel.`,"workspace.renameHint":`Solo cambia el nombre; el id del espacio de trabajo se mantiene, así que las URL y las rutas siguen funcionando.`,"workspace.nameHint":`Se muestra en la barra superior.`,"workspace.nameHintId":`Se muestra en la barra superior. Id: {id}`,"workspace.none":`Sin espacio de trabajo`,"workspace.delete":`Eliminar el espacio de trabajo`,"days.remaining":{one:`{count} día`,other:`{count} días`},"editor.unsaved":{one:`cambio sin guardar`,other:`cambios sin guardar`},"editor.saveChanges":{one:`Guardar {count} cambio`,other:`Guardar {count} cambios`},"logs.lines":{one:`{count} línea`,other:`{count} líneas`},"palette.results":{one:`{count} resultado`,other:`{count} resultados`},"proxy.retry.inMinutes":{one:`~{count} minuto`,other:`~{count} minutos`},"proxy.retry.inHours":{one:`~{count} hora`,other:`~{count} horas`},"servers.total":{one:`{count} servidor`,other:`{count} servidores`},"servers.running":{one:`{count} en ejecución`,other:`{count} en ejecución`},"settings.backup.entriesCount":{one:`{count} entrada`,other:`{count} entradas`},"settings.backup.itemsSelected":{one:`{count} elemento seleccionado`,other:`{count} elementos seleccionados`},"settings.ddns.hostnameCount":{one:`{count} nombre de host`,other:`{count} nombres de host`},"settings.shell.fieldsChanged":{one:`campo modificado`,other:`campos modificados`},"settings.shell.saveChanges":{one:`Guardar {count} cambio`,other:`Guardar {count} cambios`},"views.globalOverview.needLook":{one:`{count} servidor necesita revisión`,other:`{count} servidores necesitan revisión`},"views.logs.filesOnDisk":{one:`{count} archivo`,other:`{count} archivos`},"views.overview.needLook":{one:`{count} servidor necesita revisión`,other:`{count} servidores necesitan revisión`}};export{e as default};
|