home-hosted 0.8.3 → 0.9.0
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/AGENTS.md +9 -5
- package/README.md +16 -5
- package/dist/cli.js +888 -232
- package/dist/cli.js.map +1 -1
- package/docs/DDNS.md +2 -1
- package/docs/NOTIFICATIONS.md +72 -20
- package/docs/SERVERS.md +1 -0
- package/docs/UI_CREATION.md +16 -6
- package/package.json +24 -24
- package/uis/stock/dist/assets/de-DL4xkOYj.js +1 -0
- package/uis/stock/dist/assets/es-CKj-v3FY.js +1 -0
- package/uis/stock/dist/assets/fr-72WremqT.js +1 -0
- package/uis/stock/dist/assets/index-BNSSU69y.js +47 -0
- package/uis/stock/dist/assets/index-GxTN2fYn.css +2 -0
- package/uis/stock/dist/assets/ja-BU4XyMbC.js +1 -0
- package/uis/stock/dist/assets/ko-Db8xtJ0N.js +1 -0
- package/uis/stock/dist/assets/ru-Bs8KXP2O.js +1 -0
- package/uis/stock/dist/assets/vi-DdQD4h7B.js +1 -0
- package/uis/stock/dist/assets/zh-CN-DIrw2Ubv.js +1 -0
- package/uis/stock/dist/index.html +2 -2
- package/uis/stock/dist/ui.json +3 -3
- package/uis/stock/dist/assets/de-CiT_tMnf.js +0 -1
- package/uis/stock/dist/assets/es-JJDGEbt0.js +0 -1
- package/uis/stock/dist/assets/fr-CYIAuJgb.js +0 -1
- package/uis/stock/dist/assets/index-BCPp9MUj.js +0 -46
- package/uis/stock/dist/assets/index-Skf2FzpK.css +0 -2
- package/uis/stock/dist/assets/ja-DmykOijW.js +0 -1
- package/uis/stock/dist/assets/ko-C4EcOJB0.js +0 -1
- package/uis/stock/dist/assets/ru-Dlbre_Q1.js +0 -1
- package/uis/stock/dist/assets/vi-DhBWYY9I.js +0 -1
- package/uis/stock/dist/assets/zh-CN-BI0ZDO_Y.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.sending":`Enviando…`,"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.httpScheme":`Esquema`,"lifecycle.allowInvalidCert":`Aceptar cualquier certificado`,"lifecycle.allowInvalidCertHint":`Para un backend autofirmado. Solo tiene sentido con https.`,"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.schedule":`Copias automáticas`,"settings.backups.scheduleHint":`El panel crea un archivo por su cuenta con este intervalo.`,"settings.backups.scheduleHours":`Cada (horas)`,"settings.backups.scheduleHoursHint":`24 es un archivo diario.`,"settings.backups.scheduleKeep":`Conservar automáticas`,"settings.backups.scheduleKeepHint":`Los archivos manuales se cuentan aparte, con Conservar.`,"settings.backups.scheduleLast":`Última automática: {when}`,"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.destination.title":`Destinos`,"settings.destination.generalTitle":`General`,"settings.destination.generalDescription":`Lo que siguen todos los destinos salvo que tengan lo suyo.`,"settings.destination.description":`A dónde van los eventos. Cada uno puede seguir los ajustes generales de arriba o tener los suyos.`,"settings.destination.addTelegram":`Añadir Telegram`,"settings.destination.addWebhook":`Añadir webhook`,"settings.destination.empty":`Aún no hay destinos. Añade un chat de Telegram o un webhook para recibir alertas.`,"settings.destination.chatId":`Id del chat`,"settings.destination.chatIdHint":`Usa Detectar chats para rellenarlo desde las novedades del bot.`,"settings.destination.botToken":`Token del bot`,"settings.destination.saveToken":`Guardar token`,"settings.destination.tokenSet":`token definido`,"settings.destination.noToken":`sin token`,"settings.destination.detectChats":`Detectar chats`,"settings.destination.sendTest":`Enviar una prueba`,"settings.destination.remove":`Quitar`,"settings.destination.removeQuestion":`¿Quitar {name}?`,"settings.destination.removeBody":`Dejarán de enviarse eventos y se elimina el token del bot guardado para él.`,"settings.destination.ownSettings":`Ajustes propios`,"settings.destination.ownSettingsHint":`Desactivado sigue los ajustes generales de arriba.`,"settings.destination.lastSend":`Último envío: {result} {when}`,"settings.destination.testSent":`Prueba enviada.`,"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.`,"settings.webhook.title":`Webhooks`,"settings.webhook.description":`Envía los mismos eventos a donde acepte una petición HTTP.`,"settings.webhook.empty":`Aún no hay webhooks. Añade uno para enviar eventos a otro sitio.`,"settings.webhook.add":`Añadir un webhook`,"settings.webhook.newTarget":`hook`,"settings.webhook.url":`URL`,"settings.webhook.urlPlaceholder":`https://ntfy.sh/my-topic`,"settings.webhook.method":`Método`,"settings.webhook.format":`Cuerpo`,"settings.webhook.formatJson":`JSON`,"settings.webhook.formatText":`Texto plano`,"settings.webhook.formatHint":`JSON para Discord, Slack o tu propio endpoint; texto plano para ntfy.`,"settings.webhook.headers":`Cabeceras`,"settings.webhook.headersHint":`Un Name: value por línea, enviado con cada petición. ntfy lee Title y Priority aquí; el token bearer va en Authorization.`,"settings.webhook.presets":`Ajustes rápidos`,"settings.webhook.presetNtfy":`ntfy`,"settings.webhook.presetDiscord":`Discord`,"settings.webhook.presetSlack":`Slack`,"settings.webhook.sendTest":`Enviar una prueba`,"settings.webhook.testSent":`Prueba enviada.`,"settings.webhook.cooldown":`Espera (ms)`,"settings.webhook.cooldownHint":`Por servidor y motivo, solo para este destino. 0 lo desactiva.`,"settings.webhook.lastSend":`Último envío: {result} {when}`,"settings.webhook.removeQuestion":`¿Quitar {name}?`,"settings.webhook.removeBody":`Dejarán de enviarse eventos. La URL y las cabeceras se quitan de la configuración de este espacio de trabajo.`,"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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={"activity.emptyTitle":`Aucun événement depuis 24 heures`,"activity.emptyDescription":`Démarrages, arrêts, plantages et rétablissements apparaissent ici au fur et à mesure.`,"activity.ran":`a tourné {duration}`,"addServer.title":`Ajouter un serveur`,"addServer.description":`Ajoute une entrée au servers.config.json de {workspace} ; toute politique omise est héritée de ses valeurs par défaut.`,"addServer.thisWorkspace":`cet espace de travail`,"addServer.identity":`Identité`,"addServer.id":`Id`,"addServer.idHint":`Lettres minuscules, chiffres, tirets et traits de soulignement ; utilisé dans les URL et les journaux.`,"addServer.labelHint":`Affiché dans le panneau ; par défaut, l'id.`,"addServer.process":`Processus`,"addServer.commandHint":`Lancé sans shell.`,"addServer.argumentsHint":`Un argument par ligne ; les espaces à l'intérieur d'une ligne sont conservés.`,"addServer.portLifecycle":`Port et cycle de vie`,"addServer.bindHint":`lan l'expose au réseau ; à ne faire que derrière une authentification.`,"addServer.advanced":`Paramètres avancés`,"addServer.advancedHint":`environnement, sauvegardes, politique, cycle de vie, bootstrap`,"addServer.backups":`Sauvegardes`,"addServer.backupIgnore":`Ignorer les fichiers générés connus`,"addServer.bootstrapDescription":`Une commande ponctuelle exécutée avant le premier démarrage.`,"addServer.bootstrapHint":`Installations, migrations, téléchargements — avant le premier démarrage, pas à chaque fois.`,"addServer.policyResources":`Politique et ressources`,"addServer.logBufferHint":`Vide conserve la valeur par défaut.`,"addServer.inheritNote":`Redémarrage, santé et arrêt commencent comme dans {settings} ; si vous en modifiez un ici, il est écrit dans cette entrée au lieu de rester hérité.`,"addServer.serverDefaults":`Paramètres → Valeurs par défaut des serveurs`,"addServer.placeholdersTitle":`Espaces réservés disponibles pour les arguments`,"addServer.submit":`Ajouter à servers.config.json`,"app.name":`home-hosted`,"app.tagline":`Panneau de contrôle du superviseur de processus`,"bind.local":`local — 127.0.0.1`,"bind.lan":`lan — 0.0.0.0`,"bind.explicit":`{bind} — explicite`,"common.cancel":`Annuler`,"common.confirm":`Confirmer`,"common.reset":`Réinitialiser`,"common.sending":`Envoi…`,"common.keepIt":`Conserver`,"common.remove":`Retirer`,"common.close":`Fermer`,"common.save":`Enregistrer`,"common.saving":`Enregistrement…`,"common.discard":`Abandonner`,"common.delete":`Supprimer`,"common.edit":`Modifier`,"common.add":`Ajouter`,"common.retry":`Réessayer`,"common.copy":`Copier`,"common.copied":`Copié`,"common.enabled":`Activé`,"common.disabled":`Désactivé`,"common.none":`Aucun`,"common.unknown":`inconnu`,"common.loading":`Chargement…`,"common.selectAll":`Tout sélectionner`,"common.selectNone":`Ne rien sélectionner`,"common.name":`Nom`,"common.label":`Libellé`,"common.hostname":`Nom d'hôte`,"common.port":`Port`,"common.command":`Commande`,"common.environment":`Environnement`,"common.memory":`Mémoire`,"common.cpu":`CPU`,"common.disk":`Disque`,"common.uptime":`Durée de fonctionnement`,"common.status":`État`,"common.actions":`Actions`,"common.details":`Détails`,"common.overview":`Vue d'ensemble`,"common.warning":`Avertissement`,"common.error":`Erreur`,"common.confirmQuestion":`{label} ?`,"common.unset":`non défini`,"common.never":`jamais`,"common.now":`à l'instant`,"common.dismiss":`Ignorer`,"connection.live":`En direct`,"connection.connecting":`Connexion`,"connection.reconnecting":`Reconnexion`,"connection.liveUpdates":`Mises à jour en direct`,"editor.title":`Modifier la configuration`,"editor.description":`Écrit les remplacements dans {file} ; tout ce qui n'est pas touché continue d'hériter des valeurs par défaut.`,"editor.inSync":`synchronisé`,"editor.process":`Processus`,"editor.processDescription":`Ce qui est lancé, où, et avec quel environnement.`,"editor.labelPlaceholder":`revient à l'id si vide`,"editor.argumentsHint":`Un par ligne ; {port} {host} {home} {projectDir} {dataRoot} {id} {label} {cwd} {bind} {lanIp} sont substitués.`,"editor.portTitle":`Port et liaison`,"editor.portDescription":`Comment le port est précontrôlé et où le processus est joignable.`,"editor.bindHint":`Une IPv4 personnalisée déjà définie dans la configuration reste sélectionnable.`,"editor.lifecycle":`Cycle de vie`,"editor.lifecycleDescription":`Si le superviseur gère ou non cette entrée.`,"editor.save":`Enregistrer dans servers.config.json`,"editor.changesTitle":`Modifications non enregistrées`,"editor.changesDescription":`Ce qu'Enregistrer écrirait dans servers.config.json.`,"editor.nothingToSave":`Rien à enregistrer.`,"health.disabled":`Non vérifié`,"health.unknown":`Non sondé`,"health.healthy":`Sain`,"health.unhealthy":`En panne`,"history.start":`Démarré`,"history.exit":`Arrêté`,"history.crash":`Planté`,"history.forcedRestart":`Redémarrage forcé`,"history.unhealthy":`En panne`,"history.recovered":`Rétabli`,"host.loadPerCpu":`Charge / cpu`,"host.cpuTemp":`Temp. CPU`,"host.samplingOff":`L'échantillonnage de l'hôte est désactivé`,"host.samplingOffDescription":`Activez-le dans les paramètres pour collecter charge, mémoire, disque et température.`,"host.swap":`Swap`,"host.cpus":`CPU`,"host.loadAverage":`Charge 1 / 5 / 15`,"host.memoryUsed":`Mémoire utilisée`,"host.sampled":`Échantillonné`,"host.filesystems":`Systèmes de fichiers`,"host.thresholdsBreached":`Seuils dépassés`,"killPort.trigger":`Tuer ce qui occupe le port {port}`,"killPort.title":`Tuer le processus sur le port {port} ?`,"killPort.body":`On lui demande d'abord de s'arrêter, et il n'est tué que s'il l'ignore. Tout ce que ce panneau supervise est refusé : un serveur géré ne peut donc pas être perdu ainsi.`,"killPort.confirm":`Le tuer`,"language.label":`Langue`,"language.select":`Choisir une langue`,"lifecycle.restartTitle":`Politique de redémarrage`,"lifecycle.restartDescription":`Attente entre les tentatives après un plantage.`,"lifecycle.restartOnCrash":`Redémarrer après un plantage`,"lifecycle.maxRetries":`Tentatives max`,"lifecycle.maxRetriesHint":`Tentatives avant de laisser le serveur planté.`,"lifecycle.baseDelay":`Délai de base (ms)`,"lifecycle.factor":`Facteur d'attente`,"lifecycle.maxDelay":`Délai max (ms)`,"lifecycle.resetAfter":`Réinitialiser après (ms)`,"lifecycle.resetAfterHint":`Une exécution de cette durée remet le compteur de tentatives à zéro.`,"lifecycle.healthTitle":`Vérification de santé`,"lifecycle.healthDescription":`Comment la disponibilité est sondée une fois le processus lancé.`,"lifecycle.probe":`Sonder ce serveur`,"lifecycle.probeType":`Type de sonde`,"lifecycle.probePort":`Port TCP — connexion seulement`,"lifecycle.probeHttp":`Requête HTTP — vérifier une réponse`,"lifecycle.interval":`Intervalle (ms)`,"lifecycle.timeout":`Délai (ms)`,"lifecycle.unhealthyAfter":`En panne après`,"lifecycle.unhealthyAfterHint":`Sondes échouées consécutives.`,"lifecycle.forceRestartAfter":`Redémarrage forcé après (ms)`,"lifecycle.forceRestartAfterHint":`0 le désactive.`,"lifecycle.startTimeout":`Délai de démarrage (ms)`,"lifecycle.httpScheme":`Schéma`,"lifecycle.allowInvalidCert":`Accepter tout certificat`,"lifecycle.allowInvalidCertHint":`Pour un backend auto-signé. N'a de sens qu'en https.`,"lifecycle.httpPath":`Chemin HTTP`,"lifecycle.httpMethod":`Méthode HTTP`,"lifecycle.expectStatus":`Statut attendu`,"lifecycle.expectStatusHint":`Vide accepte tout ce qui est en dessous.`,"lifecycle.expectStatusBelow":`Sain en dessous du statut`,"lifecycle.expectBody":`Le corps doit contenir`,"lifecycle.expectBodyPlaceholder":`sous-chaîne facultative`,"lifecycle.headBodyHint":`HEAD n'a pas de corps de réponse, donc cette vérification est ignorée — utilisez GET, ou videz-la.`,"lifecycle.stopTitle":`Comportement à l'arrêt`,"lifecycle.stopDescription":`Comment on demande à l'arbre de processus de partir.`,"lifecycle.signal":`Signal`,"lifecycle.signalTerm":`SIGTERM — lui demander de s'arrêter`,"lifecycle.signalInt":`SIGINT — interrompre (Ctrl-C)`,"lifecycle.signalKill":`SIGKILL — tuer immédiatement`,"lifecycle.grace":`Délai de grâce (ms)`,"lifecycle.killGroup":`Tuer tout le groupe de processus`,"lifecycle.killPortHolders":`Tuer aussi ce qui occupe le port`,"login.title":`Connectez-vous pour continuer`,"login.firstRunTitle":`Ce panneau n'a pas encore de mot de passe`,"login.firstRunSubtitle":`Tout ce qui tourne sur cette machine peut y accéder. Définissez un mot de passe dès votre entrée.`,"login.authOffTitle":`L'authentification est désactivée`,"login.authOffSubtitle":`Le panneau n'écoute que sur la boucle locale, seule protection pour l'instant.`,"login.subtitle":`Le panneau de contrôle est protégé. Saisissez le mot de passe pour continuer.`,"login.password":`Mot de passe`,"login.showPassword":`Afficher le mot de passe`,"login.hidePassword":`Masquer le mot de passe`,"login.signIn":`Se connecter`,"login.openDashboard":`Ouvrir le tableau de bord`,"login.exposed":`Exposé`,"login.defaultPasswordWarning":`Le mot de passe par défaut {password} est toujours en place. Changez-le dans les paramètres — l'écoute au-delà de 127.0.0.1 reste refusée tant que ce n'est pas fait.`,"login.noPasswordWarning":`Aucun mot de passe n'est défini. Ouvrez les paramètres depuis cette machine pour en ajouter un, ou lancez {command}.`,"login.sessionNote":`Les sessions restent connectées {days} jours après la dernière visite — chaque requête prolonge ce délai. La déconnexion ne nettoie que ce navigateur.`,"login.servedFromThisMachine":`servi depuis cette machine`,"logs.emptyHint":`Aucune sortie pour l'instant.`,"logs.noMatches":`Rien ne correspond à cette recherche ni à ce filtre de flux.`,"logs.searchPlaceholder":`Rechercher dans cette sortie`,"logs.searchLabel":`Rechercher dans la sortie du journal`,"logs.clearSearch":`Effacer la recherche`,"logs.prevMatch":`Correspondance précédente`,"logs.nextMatch":`Correspondance suivante`,"logs.showTimestamps":`Afficher les horodatages`,"logs.hideTimestamps":`Masquer les horodatages`,"logs.timestampsShort":`horod.`,"logs.pause":`Pause`,"logs.follow":`Suivre`,"logs.clearHint":`Vider le tampon en mémoire`,"logs.clearLabel":`Vider le tampon de journal`,"logs.downloadHint":`Télécharger le fichier conservé`,"logs.downloadLabel":`Télécharger le fichier de journal`,"logs.outputLabel":`Sortie du journal`,"logs.jumpToLatest":`Aller au plus récent`,"logs.streaming":`en direct`,"logs.paused":`en pause`,"logs.snapshot":`instantané`,"logs.linesOf":`{count} lignes sur {total}`,"logs.matches":`{count} correspondances`,"logs.rowHeight":`hauteur de ligne {height}px · virtualisée`,"logs.streamAll":`Tout`,"logs.streamOut":`sortie`,"logs.streamErr":`err`,"logs.streamSys":`sys`,"metric.emptyHint":`collecte…`,"nav.global":`Global`,"nav.workspace":`Espace de travail`,"nav.others":`Autres`,"nav.overview":`Vue d'ensemble`,"nav.servers":`Serveurs`,"nav.logs":`Journaux`,"nav.workspaceSettings":`Paramètres de l'espace de travail`,"nav.globalOverview":`Vue d'ensemble globale`,"nav.globalSettings":`Paramètres globaux`,"nav.reverseProxy":`Proxy inverse`,"nav.navigation":`Navigation`,"nav.closeNavigation":`Fermer la navigation`,"nav.hostVitals":`Santé de l'hôte`,"notice.configError":`La configuration est illisible : {error}`,"notice.configErrorHint":`Le panneau continue avec la configuration qu'il avait ; corrigez {path} et il se recharge tout seul.`,"notice.defaultPassword":`Ce panneau utilise encore son mot de passe par défaut.`,"notice.defaultPasswordHint":`Changez-le dans les paramètres globaux — l'écoute au-delà de 127.0.0.1 reste refusée tant que ce n'est pas fait.`,"notice.noPassword":`L'authentification est active mais aucun mot de passe n'est défini, donc rien n'est demandé.`,"notice.noPasswordHint":`Définissez-en un dans les paramètres globaux pour vraiment verrouiller le panneau.`,"notice.exposed":`Ce panneau est joignable au-delà de 127.0.0.1.`,"notice.exposedHint":`Gardez un mot de passe solide, ou placez devant un proxy qui termine le TLS.`,"notice.authOff":`L'authentification est désactivée — le panneau n'est protégé que par son écoute en boucle locale.`,"onPortConflict.block":`block — refuser de démarrer`,"onPortConflict.warn":`warn — démarrer quand même`,"onPortConflict.follow":`follow — adopter un redémarrage détaché de lui-même`,"onPortConflict.reclaim":`reclaim — le remplacer par une copie supervisée`,"onPortConflict.kill":`kill — arrêter ce qui occupe le port`,"palette.placeholder":`Aller à un serveur, lancer une action, ouvrir un paramètre…`,"palette.openServer":`Ouvrir {label}`,"palette.serverLogs":`Journaux de {label}`,"palette.startServer":`Démarrer {label}`,"palette.stopServer":`Arrêter {label}`,"palette.restartServer":`Redémarrer {label}`,"palette.goOverview":`Aller à la vue d'ensemble`,"palette.goGlobalOverview":`Aller à la vue d'ensemble globale`,"palette.goGlobalSettings":`Aller aux paramètres globaux`,"palette.goProxy":`Aller au proxy inverse`,"palette.goServers":`Aller aux serveurs`,"palette.goLogs":`Aller aux journaux`,"palette.goWorkspaceSettings":`Aller aux paramètres de l'espace de travail`,"palette.startAll":`Démarrer tous les serveurs activés ici`,"palette.stopAll":`Arrêter tous les serveurs ici`,"palette.switchWorkspace":`Basculer vers {label}`,"palette.globalSetting":`Paramètre global : {label}`,"palette.workspaceSetting":`Paramètre de l'espace de travail : {label}`,"palette.theme":`Thème {theme}`,"palette.groupServers":`Serveurs`,"palette.groupActions":`Actions`,"palette.groupNavigate":`Navigation`,"palette.groupWorkspaces":`Espaces de travail`,"palette.groupAppearance":`Apparence`,"palette.navigate":`naviguer`,"palette.run":`exécuter`,"palette.noMatches":`Rien ne correspond à « {query} ».`,"proxy.account.automatic":`Automatique (le seul compte qui peut répondre)`,"proxy.account.noTxt":`pas de prise en charge TXT`,"proxy.account.noCredentials":`aucun identifiant`,"proxy.account.gone":`Ce compte n'est plus configuré.`,"proxy.account.emptyHint":`DNS-01 écrit ici l'enregistrement de défi. Vide utilise le seul compte qui peut répondre à un défi, quand il y en a un.`,"proxy.account.cannotWrite":`Un compte {provider} ne peut pas écrire d'enregistrements TXT : il ne peut donc pas répondre à un défi DNS-01.`,"proxy.account.noCredentialsYet":`Aucun identifiant n'est encore stocké pour ce compte {provider}.`,"proxy.account.through":`Le défi est écrit via ce compte {provider}.`,"proxy.certificate.title":`Certificats téléversés`,"proxy.certificate.description":`Servis par les routes réglées sur « Certificat téléversé ». Tout le reste — public ou local — est certifié par le moteur lui-même.`,"proxy.certificate.add":`Ajouter un certificat`,"proxy.certificate.emptyTitle":`Aucun certificat téléversé`,"proxy.certificate.emptyDescription":`Une route réglée sur « Certificat téléversé » a besoin d'une paire couvrant son nom d'hôte, sinon le moteur n'a rien à servir pour elle.`,"proxy.certificate.daysLeft":`{days} jours restants`,"proxy.certificate.subject":`Sujet`,"proxy.certificate.issuer":`Émetteur`,"proxy.certificate.validUntil":`Valide jusqu'au`,"proxy.certificate.covers":`Couvre`,"proxy.certificate.noSans":`aucun nom d'hôte dans ses SAN`,"proxy.certificate.removeAria":`Retirer {name}`,"proxy.certificate.removeQuestion":`Retirer « {name} » ?`,"proxy.certificate.removeBody":`La paire est supprimée du disque. Une route encore réglée sur « Certificat téléversé » continue de servir le certificat propre du moteur jusqu'à ce que vous changiez cela, et le panneau refuse cette action tant qu'une route le sert encore.`,"proxy.certificate.removeIt":`Le retirer`,"proxy.certificate.stored":`« {label} » stocké.`,"proxy.certificate.removed":`« {name} » retiré.`,"proxy.certificateDialog.title":`Ajouter un certificat`,"proxy.certificateDialog.description":`La paire est stockée sur le disque sous son id, et une route réglée sur « Certificat téléversé » peut la servir.`,"proxy.certificateDialog.label":`Libellé`,"proxy.certificateDialog.labelPlaceholder":`Joker maison`,"proxy.certificateDialog.id":`Id`,"proxy.certificateDialog.idHint":`nomme les fichiers sur le disque`,"proxy.certificateDialog.certFile":`Fichier de certificat (.pem, .crt)`,"proxy.certificateDialog.keyFile":`Fichier de clé privée (.pem, .key)`,"proxy.certificateDialog.pasteCert":`Ou collez le certificat`,"proxy.certificateDialog.pasteKey":`Ou collez la clé privée`,"proxy.certificateDialog.certPlaceholder":`-----BEGIN CERTIFICATE-----`,"proxy.certificateDialog.keyPlaceholder":`-----BEGIN PRIVATE KEY-----`,"proxy.certificateDialog.store":`Stocker le certificat`,"proxy.certificateDialog.errorLabel":`un libellé est requis`,"proxy.certificateDialog.errorId":`l'id doit commencer par une lettre ou un chiffre, puis des lettres, des chiffres, un tiret ou un trait de soulignement`,"proxy.certificateDialog.errorTaken":`« {id} » est déjà utilisé par un autre certificat`,"proxy.certificateDialog.errorCertificate":`collez ou choisissez le certificat`,"proxy.certificateDialog.errorPrivateKey":`collez ou choisissez la clé privée`,"proxy.engine.title":`Moteur`,"proxy.engine.description":`Le proxy inverse lui-même. Le panneau télécharge la version courante, la supervise et applique sa configuration via l'API d'administration du moteur.`,"proxy.engine.notInFrame":`L'état du proxy n'est pas encore dans le cadre de ce panneau.`,"proxy.engine.readFailed":`Le moteur n'a pas pu être lu`,"proxy.engine.notInstalled":`Aucun moteur installé`,"proxy.engine.installNote":`L'installation télécharge la version courante de {engine} que le panneau supervise — environ 46 Mo, une seule fois. Rien n'est exposé tant qu'une route n'est pas ajoutée et le proxy activé.`,"proxy.engine.version":`Version`,"proxy.engine.notProbed":`pas encore sondé`,"proxy.engine.source":`Source`,"proxy.engine.sourceCustom":`un chemin configuré à la main`,"proxy.engine.sourceDownloaded":`téléchargé par le panneau`,"proxy.engine.size":`Taille`,"proxy.engine.binary":`Binaire`,"proxy.engine.copyPath":`Copier le chemin du binaire`,"proxy.engine.address":`Adresse active`,"proxy.engine.process":`Processus`,"proxy.engine.certificates":`Certificats`,"proxy.engine.noCert":`aucun certificat public pour l'instant`,"proxy.engine.expiresSoon":`le plus proche expire dans {days} jours`,"proxy.engine.acme":`Certificats ACME`,"proxy.engine.localCa":`CA locale`,"proxy.engine.dns01":`DNS-01`,"proxy.engine.tcpUdp":`TCP/UDP`,"proxy.engine.documentation":`Documentation de {engine}`,"proxy.engine.failed":`Le moteur a signalé un échec`,"proxy.engine.setcapHint":`Un port privilégié (sous 1024) nécessite ceci une fois sous Linux :`,"proxy.engine.copyCommand":`Copier la commande`,"proxy.engine.install":`Installer le moteur`,"proxy.engine.start":`Démarrer`,"proxy.engine.stop":`Arrêter`,"proxy.engine.apply":`Appliquer la configuration`,"proxy.engine.revert":`Revenir en arrière`,"proxy.engine.revertHint":`Revenir à la configuration appliquée avant la dernière`,"proxy.engine.update":`Mettre à jour le moteur`,"proxy.listener.title":`Écoute et certificats`,"proxy.listener.description":`Où le proxy écoute. 80 et 443 sont ce qu'un routeur redirige et ce qu'attend un défi ACME ; un port sous 1024 exige une liaison privilégiée.`,"proxy.listener.unprivilegedPorts":`ports non privilégiés`,"proxy.listener.run":`Exécuter le proxy inverse`,"proxy.listener.runHint":`Enregistré avec Enregistrer les paramètres ; le panneau démarre ou arrête le moteur en conséquence.`,"proxy.listener.httpPort":`Port HTTP`,"proxy.listener.httpPortHint":`Défis HTTP-01 d'ACME et redirection vers HTTPS.`,"proxy.listener.httpsPort":`Port HTTPS`,"proxy.listener.httpsPortHint":`Où les certificats sont servis.`,"proxy.listener.useFallback":`Utiliser {http} / {https}`,"proxy.listener.useStandard":`Utiliser 80 / 443`,"proxy.listener.forwardHint":`Exécution non privilégiée — redirigez 80 et 443 vers ces ports sur votre routeur.`,"proxy.listener.privilegedTitle":`Un port sous 1024 exige une liaison privilégiée`,"proxy.listener.privilegedBody":`Exécuter le panneau avec votre propre utilisateur ne permet pas de lier 80 ou 443 sans autorisation. Soit vous l'accordez une fois {how} et redémarrez le moteur, soit vous gardez {http}/{https} et redirigez 80/443 depuis votre routeur. Sous Windows, le port est libre à lier, mais autre chose peut l'occuper.`,"proxy.listener.privilegedWithSetcap":`avec {command} sur le binaire du moteur`,"proxy.listener.email":`E-mail du compte ACME`,"proxy.listener.emailPlaceholder":`you@example.com`,"proxy.listener.emailHint":`Let's Encrypt l'utilise pour vous avertir d'un certificat qui expire. Un nom purement local obtient la CA propre du moteur et n'en a pas besoin.`,"proxy.listener.emailNeededTitle":`Un e-mail est nécessaire pour le HTTPS automatique`,"proxy.listener.emailNeededBody":`« {host} » est un nom d'hôte public : le moteur demande donc un certificat à une CA et l'adresse du compte est obligatoire. Renseignez-la, désactivez le TLS de la route, ou activez le point de terminaison de préproduction pendant vos essais.`,"proxy.listener.staging":`Utiliser le point de terminaison de préproduction ACME`,"proxy.listener.stagingHint":`Certificats non fiables et aucune consommation du quota pendant vos essais.`,"proxy.listener.dns01":`Répondre aux défis par DNS-01`,"proxy.listener.dns01Hint":`Le panneau écrit l'enregistrement de défi via le compte DNS d'une route : aucun port entrant n'est donc nécessaire pour obtenir un certificat.`,"proxy.listener.resolvers":`Vérifier l'enregistrement auprès de`,"proxy.listener.resolversPlaceholder":`1.1.1.1, 8.8.8.8`,"proxy.listener.resolversHint":`Serveurs de noms auprès desquels le moteur lit l'enregistrement ; vide utilise les siens. Nécessaire quand un DNS à horizon scindé lui montre une autre vue.`,"proxy.listener.noAccountTitle":`Aucun compte DNS ne peut répondre à un défi`,"proxy.listener.noAccountBody":`DNS-01 est actif, mais aucun compte n'a d'identifiants utilisables. Ajoutez-en un dans Paramètres de l'espace de travail → DNS dynamique, sinon les noms publics restent sur les défis par port et attendent une CA qui ne peut pas les joindre.`,"proxy.listener.manyAccountsTitle":`Chaque route publique doit choisir un compte`,"proxy.listener.manyAccountsBody":`Plus d'un compte peut répondre, donc « Automatique » ne peut pas choisir. Choisissez-en un par route, sinon ces noms restent sur les défis par port.`,"proxy.listener.accountNote":`Chaque route choisit son propre compte : les noms de zones différentes obtiennent donc le bon. Une route laissée sur « Automatique » utilise le seul compte que le tableau nomme. Un nom auquel aucun compte ne répond reste sur les défis par port.`,"proxy.listener.pendingNote":`Un nom public dont le certificat est encore en cours d'émission reste joignable entre-temps — en HTTPS avec un certificat temporaire non fiable, ou en HTTP simple avec une page indiquant les ports à rediriger.`,"proxy.retry.inFallback":`~8 heures`,"proxy.retryButton.force":`Forcer une nouvelle tentative de certificat`,"proxy.retryButton.question":`Redemander la CA pour {host} ?`,"proxy.retryButton.body":`Le moteur n'a pas réussi à obtenir auparavant un certificat de CA pour ce nom d'hôte et utilise sa CA locale. Il réessaie automatiquement toutes les {retryIn}.`,"proxy.retryButton.warning":`Réessayer maintenant va tuer cette route et la rendre indisponible un moment ; êtes-vous sûr de vouloir continuer ?`,"proxy.retryButton.leave":`Laisser`,"proxy.retryButton.now":`Réessayer maintenant`,"proxy.routeDialog.titleEdit":`Modifier la route`,"proxy.routeDialog.titleAdd":`Ajouter une route`,"proxy.routeDialog.description":`Un nom d'hôte, ce vers quoi il redirige, et comment il est servi en TLS.`,"proxy.routeDialog.hostname":`Nom d'hôte`,"proxy.routeDialog.hostnamePlaceholder":`gitea.example.com`,"proxy.routeDialog.path":`Préfixe de chemin`,"proxy.routeDialog.pathPlaceholder":`/facultatif`,"proxy.routeDialog.pathHint":`Vide sert tout l'hôte.`,"proxy.routeDialog.target":`Cible`,"proxy.routeDialog.tls":`TLS`,"proxy.routeDialog.dnsAccount":`Compte DNS`,"proxy.routeDialog.localNote":`Un nom purement local est signé par la CA propre du moteur : aucun compte DNS n'intervient.`,"proxy.routeDialog.workspace":`Espace de travail`,"proxy.routeDialog.server":`Serveur`,"proxy.routeDialog.noServers":`cet espace de travail n'a aucun serveur`,"proxy.routeDialog.stoppedNote":`Un serveur arrêté n'est pas routé : la ligne affiche « Aucun amont » jusqu'à ce qu'il tourne à nouveau.`,"proxy.routeDialog.upstream":`Amont`,"proxy.routeDialog.upstreamPlaceholder":`http://10.0.0.5:8080`,"proxy.routeDialog.upstreamHint":`Une adresse littérale, port compris. Le schéma est facultatif.`,"proxy.routeDialog.panelNote":`Servir le panneau de contrôle exige l'authentification active et un mot de passe qui n'est pas celui par défaut — sinon le panneau refuse l'enregistrement.`,"proxy.routeDialog.save":`Enregistrer la route`,"proxy.routes.title":`Routes`,"proxy.routes.description":`Un nom d'hôte public par service. Une route peut pointer vers un serveur supervisé de n'importe quel espace de travail, vers ce panneau, ou vers un amont littéral.`,"proxy.routes.add":`Ajouter une route`,"proxy.routes.cannotSaveTitle":`Ces routes ne peuvent pas être enregistrées en l'état`,"proxy.routes.cannotRoute":`{host} ne peut pas être routé`,"proxy.routes.emptyTitle":`Aucune route pour l'instant`,"proxy.routes.emptyDescription":`Ajoutez-en une pour exposer un serveur via un domaine — le moteur obtient le certificat tout seul.`,"proxy.routes.addFirst":`Ajouter la première route`,"proxy.routes.columnHostname":`Nom d'hôte`,"proxy.routes.columnTarget":`Cible`,"proxy.routes.columnUpstream":`Amont`,"proxy.routes.columnTls":`TLS`,"proxy.routes.columnState":`État`,"proxy.routes.columnOn":`Active`,"proxy.routes.openInTab":`Ouvrir {url} dans un nouvel onglet`,"proxy.routes.noHostname":`aucun nom d'hôte pour l'instant`,"proxy.routes.toggle":`Route {name}`,"proxy.routes.edit":`Modifier {name}`,"proxy.routes.remove":`Retirer {name}`,"proxy.status.certified":`certificat prêt`,"proxy.status.localCa":`CA du moteur`,"proxy.status.uploaded":`paire téléversée`,"proxy.status.awaitingCa":`en attente de la CA`,"proxy.status.failed":`échec du certificat`,"proxy.status.fellBack":`Retour à la CA locale`,"proxy.status.serving":`En service`,"proxy.status.disabled":`Désactivé`,"proxy.status.noUpstream":`Aucun amont`,"proxy.status.error":`Erreur`,"proxy.status.unapplied":`Pas encore appliqué`,"proxy.status.off":`Inactif`,"proxy.status.stopped":`Arrêté`,"proxy.status.starting":`Démarrage`,"proxy.status.running":`En cours`,"proxy.status.unsupported":`Non pris en charge`,"proxy.target.server":`Un serveur supervisé`,"proxy.target.panel":`Ce panneau de contrôle`,"proxy.target.external":`Un amont littéral`,"proxy.target.controlPanel":`panneau de contrôle`,"proxy.target.noServer":`aucun serveur choisi`,"proxy.target.noUpstream":`aucun amont`,"proxy.tls.auto":`Automatique — le moteur décide`,"proxy.tls.off":`Arrêté — HTTP simple`,"proxy.tls.manual":`Certificat téléversé`,"proxy.tls.plain":`HTTP simple`,"proxy.tls.uploaded":`certificat téléversé`,"proxy.tls.letsEncrypt":`Let's Encrypt`,"proxy.tls.engineCa":`CA du moteur (locale)`,"proxy.tls.hintOff":`HTTP simple : aucun certificat n'est servi pour ce nom d'hôte.`,"proxy.tls.hintManual":`Sert la paire de certificats téléversée ci-dessous.`,"proxy.tls.hintEmpty":`Un nom d'hôte public obtient un certificat ACME ; un nom purement local obtient la CA propre du moteur.`,"proxy.tls.hintPublic":`Nom d'hôte public : le moteur demande donc un certificat à une CA — une adresse e-mail de compte ACME est nécessaire.`,"proxy.tls.hintLocal":`Nom purement local : le moteur le signe donc avec sa propre CA de confiance locale.`,"proxy.validation.labelRequired":`un libellé est requis`,"proxy.validation.idPattern":`l'id doit commencer par une lettre ou un chiffre, puis des lettres, des chiffres, un tiret ou un trait de soulignement`,"proxy.validation.hostRequired":`un nom d'hôte est requis`,"proxy.validation.hostPattern":`un nom d'hôte fait de lettres, de chiffres, de points et de tirets, par ex. home.example.com`,"proxy.validation.hostTaken":`"{host}" est déjà routé pour ce chemin`,"proxy.validation.pathSlash":`un préfixe de chemin commence par /`,"proxy.validation.pathSpace":`un préfixe de chemin ne peut pas contenir d'espace`,"proxy.validation.idTaken":`l'id de route "{id}" est utilisé deux fois`,"proxy.validation.workspaceRequired":`choisissez l'espace de travail propriétaire du serveur`,"proxy.validation.serverRequired":`choisissez un serveur dans cet espace de travail`,"proxy.validation.url":`un amont comme http://10.0.0.5:8080`,"proxy.view.title":`Proxy inverse`,"proxy.view.description":`Exposez vos serveurs via des domaines, avec HTTPS automatique par 80/443 ou un défi DNS.`,"proxy.view.dnsNote":`Pour DNS-01, ajoutez le fournisseur DNS du domaine à n'importe quel espace de travail sous Paramètres de l'espace de travail → DNS dynamique ; une route peut alors choisir ce compte, depuis n'importe quel espace de travail.`,"proxy.view.readFailed":`Le proxy inverse n'a pas pu être lu`,"proxy.view.reading":`Lecture du proxy inverse…`,"proxy.view.engineInstalled":`Moteur installé`,"proxy.view.engineStarting":`Démarrage du moteur`,"proxy.view.engineStopping":`Arrêt du moteur`,"proxy.view.configApplied":`Configuration appliquée`,"proxy.view.configReverted":`Configuration rétablie`,"proxy.view.settingsSaved":`Paramètres enregistrés.`,"proxy.view.settingsSavedToast":`Paramètres enregistrés`,"proxy.view.retryFailed":`la nouvelle tentative a échoué`,"proxy.view.retryAsked":`nouvelle demande de la CA pour {host}`,"proxy.view.fieldChanged":`champ modifié`,"proxy.view.fieldsChanged":`champs modifiés`,"proxy.view.noChanges":`Aucune modification non enregistrée`,"proxy.view.discard":`Abandonner les modifications`,"proxy.view.save":`Enregistrer les paramètres`,"serverCard.open":`Ouvrir {url}`,"serverCard.adoptedHint":`Ce processus s'est remplacé lui-même : le panneau a adopté le successeur au lieu de démarrer un second exemplaire. L'arrêt fonctionne toujours et sa sortie reste là où le successeur l'a envoyée.`,"serverCard.detached":`détaché`,"serverCard.persistentHint":"Cette entrée tourne sous sa propre nounou : elle continue quand le panneau s'arrête, redémarre ou est tué. `home-hosted down` la signale au lieu de l'arrêter ; seul un arrêt explicite le fait.","serverCard.persistent":`persistant`,"serverCard.disabled":`désactivé`,"serverCard.autostart":`démarrage auto`,"serverCard.healthProbe":`Sonde de santé`,"serverCard.notProbed":`non sondé`,"serverCard.restarts":`Redémarrages`,"serverCard.pid":`PID`,"serverCard.rss":`RSS`,"serverCard.procs":`Processus`,"serverCard.portFree":`libre`,"serverCard.portInUse":`occupé`,"serverCard.uptime24h":`24 h actif`,"serverCard.probe":`Sonde`,"serverCard.crashes24h":`plantages sur 24 h`,"serverCard.lastCrash":`Dernier plantage`,"serverCard.unhealthyFor":`En panne depuis {duration}`,"serverCard.nextAttempt":`Prochaine tentative {when}`,"serverCard.start":`Démarrer`,"serverCard.stop":`Arrêter`,"serverCard.restart":`Redémarrer`,"serverCard.detailsHint":`Journaux en direct et télémétrie complète`,"serverCard.moreActions":`Autres actions pour {label}`,"serverCard.disable":`Désactiver le serveur`,"serverCard.enable":`Activer le serveur`,"serverCard.removeFromAutostart":`Retirer du démarrage auto`,"serverCard.autostartWithPanel":`Démarrer avec le panneau`,"serverCard.clearLogBuffer":`Vider le tampon de journal`,"serverCard.removeServer":`Supprimer le serveur`,"serverCard.removeTitle":`Supprimer ce serveur ?`,"serverCard.removeDescription":`{label} est retiré de servers.config.json : son processus est arrêté, et ses journaux et son historique de plantages sont supprimés avec lui.`,"serverCard.statusField":`état`,"serverForm.workingDirectory":`Répertoire de travail`,"serverForm.cwdHint":`Les chemins relatifs se résolvent sous projectDir.`,"serverForm.arguments":`Arguments`,"serverForm.portHint":`Vide signifie que le serveur n'a aucun port à sonder ni à précontrôler.`,"serverForm.bindAddress":`Adresse d'écoute`,"serverForm.autostart":`Démarrer avec up`,"serverForm.autostartHint":`Le démarrer chaque fois que le plan de contrôle démarre.`,"serverForm.persistent":`Persistant`,"serverForm.persistentHint":"Continue de tourner quand le panneau s'arrête ; `down` le signale au lieu de l'arrêter.","serverForm.envHint":`KEY=valeur par ligne, exporté vers le processus.`,"serverForm.dataEnvs":`Envs de données`,"serverForm.dataEnvsHint":`ENV=chemin par ligne — exporté vers le processus et sauvegardé automatiquement.`,"serverForm.envFile":`Fichier d'env`,"serverForm.envFilePlaceholder":`fichier KEY=valeur facultatif`,"serverForm.envFileHint":`Chargé au lancement ; ses valeurs remplacent celles d'env.`,"serverForm.dependsOn":`Dépend de`,"serverForm.dependsOnHint":`Séparés par des virgules ; démarrés en premier et attendus jusqu'à ce qu'ils soient sains, arrêtés en dernier.`,"serverForm.backupPaths":`Chemins de sauvegarde supplémentaires`,"serverForm.backupPathsHint":`Un par ligne, espaces réservés autorisés ; les envs de données sont déjà inclus.`,"serverForm.backupIgnore":`Ignorer les fichiers générés connus lors de la sauvegarde`,"serverForm.backupIgnoreHint":`Ignore node_modules, dist, .next et les autres caches dont rien ne se restaure.`,"serverForm.bootstrap":`Bootstrap`,"serverForm.bootstrapDescription":`Une commande ponctuelle exécutée avant le premier démarrage — installations, migrations, téléchargements.`,"serverForm.runBootstrap":`Exécuter un bootstrap`,"serverForm.bootstrapHint":`Désactivé signifie que l'entrée n'en a aucun et que la clé est envoyée à null.`,"serverForm.timeoutMs":`Délai (ms)`,"serverForm.runOnce":`Une seule fois par session`,"serverForm.runOnceHint":`Désactivé signifie qu'il est réexécuté à chaque démarrage.`,"serverForm.bootstrapArgs":`Arguments du bootstrap`,"serverForm.bootstrapArgsHint":`Un par ligne ; les mêmes espaces réservés que les arguments principaux.`,"serverForm.bootstrapEnv":`Environnement du bootstrap`,"serverForm.bootstrapEnvHint":`KEY=valeur par ligne, exporté uniquement vers le processus de bootstrap.`,"serverForm.onPortConflict":`En cas de conflit de port`,"serverForm.logBufferLines":`Lignes du tampon de journal`,"serverForm.maxRssMb":`RSS max (MB)`,"serverForm.maxRssHint":`Redémarrer au-delà ; vide ou 0 le désactive.`,"serverForm.enabledHint":`Désactivé garde l'entrée dans la configuration mais refuse de la démarrer.`,"settings.auth.policyTitle":`Politique d'accès`,"settings.auth.policyDescription":`L'authentification s'applique que le panneau soit sur la boucle locale ou exposé au réseau.`,"settings.auth.requirePassword":`Exiger un mot de passe`,"settings.auth.requirePasswordHint":`Chaque requête exige une session connectée.`,"settings.auth.sessionLifetime":`Durée de session (ms)`,"settings.auth.sessionLifetimeHint":`Délai d'inactivité : 604800000 correspond à une semaine sans activité. Chaque requête le relance.`,"settings.auth.cookieSecure":`Cookie Secure`,"settings.auth.cookieSecureAuto":`Auto — uniquement en HTTPS`,"settings.auth.cookieSecureAlways":`Toujours`,"settings.auth.cookieSecureNever":`Jamais — HTTP simple`,"settings.auth.trustProxy":`Derrière un proxy inverse`,"settings.auth.trustProxyOff":`Non — ignorer x-forwarded-*`,"settings.auth.trustProxyLoopback":`Oui, depuis cette machine uniquement`,"settings.auth.trustProxyAny":`Oui, depuis n'importe quel appelant`,"settings.auth.trustProxyHint":`Faire confiance à x-forwarded-* pour l'adresse et le protocole du client. « Depuis cette machine uniquement » est le choix sûr pour un proxy sur le même hôte. « Depuis n'importe quel appelant » croit l'en-tête de l'appelant lui-même : le verrouillage après échecs compte donc par adresse falsifiée et peut être contourné.`,"settings.auth.maxLoginAttempts":`Tentatives de connexion max`,"settings.auth.maxLoginAttemptsHint":`Échecs avant un verrouillage temporaire.`,"settings.auth.lockout":`Verrouillage (ms)`,"settings.auth.apiTokenSet":`Un token d'API est défini`,"settings.auth.apiTokenMissing":`Aucun token d'API`,"settings.auth.apiTokenNote":`Les scripts peuvent appeler l'API avec {code} au lieu de se connecter.`,"settings.auth.noTokenNote":`Pour les scripts shell et les agents, générez-en un avec {command}.`,"settings.auth.defaultPasswordTitle":`Le mot de passe par défaut est toujours utilisé`,"settings.auth.defaultPasswordText":`Définissez votre propre mot de passe ci-dessous. L'écoute au-delà de {address} reste refusée tant que ce n'est pas fait.`,"settings.auth.blockedTitle":`Cette écoute est refusée`,"settings.auth.noPasswordTitle":`L'authentification est active mais aucun mot de passe n'est défini`,"settings.auth.noPasswordText":`Rien n'est encore réellement exigé, et l'écoute au-delà de {address} reste refusée tant qu'aucun mot de passe n'existe.`,"settings.auth.exposedTitle":`Joignable au-delà de 127.0.0.1`,"settings.auth.exposedText":`Gardez un mot de passe solide, ou placez devant le panneau un proxy qui termine le TLS.`,"settings.auth.changePassword":`Changer le mot de passe`,"settings.auth.setPassword":`Définir un mot de passe`,"settings.auth.passwordDescription":`Stocké sous forme de hachage scrypt dans le fichier de secrets, jamais dans la configuration.`,"settings.auth.currentPassword":`Mot de passe actuel`,"settings.auth.newPassword":`Nouveau mot de passe`,"settings.auth.repeatPassword":`Répéter le nouveau mot de passe`,"settings.auth.passwordMismatch":`Les deux mots de passe ne correspondent pas.`,"settings.auth.updatePassword":`Mettre à jour le mot de passe`,"settings.auth.setPasswordAndEnable":`Définir le mot de passe et activer l'authentification`,"settings.auth.clearPassword":`Effacer le mot de passe`,"settings.auth.clearPasswordConfirm":`Confirmer l'effacement`,"settings.auth.clearPasswordTitle":`Effacer le mot de passe ?`,"settings.auth.clearPasswordHint":`L'authentification est désactivée avec lui, et quiconque atteint le panneau entre directement.`,"settings.auth.shortPasswordTitle":`Ce mot de passe est court`,"settings.auth.shortPasswordText":`Il est autorisé, mais plus long est la seule chose qui sépare le réseau de ce panneau.`,"settings.auth.passwordUpdated":`Mot de passe mis à jour. Les autres sessions ont été déconnectées.`,"settings.auth.passwordCleared":`Mot de passe effacé et authentification désactivée.`,"settings.backup.createTitle":`Créer une sauvegarde`,"settings.backup.createDescription":`Choisissez ce que cette archive capture. Rien n'est écrit tant que vous ne la créez pas.`,"settings.backup.chooseItems":`Choisir les éléments`,"settings.backup.partialCapture":`Seuls les éléments choisis sont capturés.`,"settings.backup.withoutGlobalSettings":`Sans les paramètres globaux, une restauration ne peut placer un espace de travail que là où le panneau cible le déclare déjà.`,"settings.backup.password":`Mot de passe (facultatif)`,"settings.backup.passwordHint":`Chiffre l'archive ; sa restauration demande le même mot de passe.`,"settings.backup.create":`Créer la sauvegarde`,"settings.backup.chooseItemsFor":`{label} — choisir les éléments`,"settings.backup.subDescription":`Un espace de travail peut être capturé en entier ou seulement ses paramètres, serveurs, secrets et chemins de données déclarés.`,"settings.backup.selectedOf":`{selected} sur {total} sélectionnés`,"settings.backup.nothingSelectable":`Cet espace de travail ne déclare encore rien de sélectionnable.`,"settings.backup.apply":`Appliquer`,"settings.backup.created":`Sauvegarde créée.`,"settings.backup.leafSettingsHint":`Valeurs par défaut des serveurs, rétention des journaux et notifications`,"settings.backup.leafServersHint":`Chaque entrée de servers.config.json`,"settings.backup.leafSecretsHint":`Token du bot Telegram et identifiants DDNS`,"settings.backup.leafDataHint":`Un chemin de données déclaré`,"settings.backup.pathFromOrigin":`{path} — depuis {origin}`,"settings.backup.entrySettingsHint":`Écoute, authentification, santé de l'hôte et politique de sauvegarde`,"settings.backup.entrySecretsHint":`Hachage du mot de passe et hachage du token d'API`,"settings.backup.entryTlsHint":`La paire de certificats du panneau lui-même`,"settings.backup.entryWorkspaceHint":`Ses paramètres, serveurs, secrets et chemins de données déclarés`,"settings.backup.entryGlobalSettings":`Paramètres globaux`,"settings.backup.entryGlobalSecrets":`Secrets globaux (mot de passe, jeton d'API)`,"settings.backup.entryTlsCertificate":`Certificat TLS`,"settings.backup.leafSettings":`Paramètres`,"settings.backup.leafServers":`Serveurs`,"settings.backup.leafSecrets":`Secrets`,"settings.backup.secretPassword":`Mot de passe`,"settings.backup.secretPasswordHint":`Le hachage du mot de passe du panneau ; le restaurer rétablit l'ancien mot de passe`,"settings.backup.secretApiToken":`Jeton d'API`,"settings.backup.secretApiTokenHint":`Le jeton de longue durée qu'utilisent les scripts et les agents`,"settings.backup.secretTelegram":`Token du bot Telegram`,"settings.backup.secretTelegramHint":`Utilisé pour les notifications`,"settings.backup.secretDdns":`Identifiants DDNS`,"settings.backup.secretDdnsHint":`Identifiants du fournisseur, conservés scellés avec leur clé`,"settings.backup.restoreItemLabel":`{workspace} : {item}`,"settings.backup.noteMissing":`n'existe pas encore`,"settings.backup.noteCovered":`couvert par {path}`,"settings.backup.noteAlreadyDeclared":`déjà déclaré par {origin}`,"settings.backup.noteContainsBackupDir":`contient le répertoire de sauvegarde`,"settings.backup.noteUnknownWorkspace":`espace de travail inconnu`,"settings.backup.noteMissingFromArchive":`absent de l'archive`,"settings.backup.noteDeclaredByBackup":`déclaré par la configuration de la sauvegarde, qui n'est pas restaurée`,"settings.backup.noteNotDeclared":`déclaré ni par cette configuration ni par la sauvegarde`,"settings.backup.noteRestoredFrom":`restauré depuis {path}`,"settings.backups.policyTitle":`Politique`,"settings.backups.policyDescription":`Combien d'archives le panneau conserve, et les chemins supplémentaires que chacune capture.`,"settings.backups.allow":`Autoriser les sauvegardes`,"settings.backups.allowHint":`Désactivé arrête les nouvelles archives ; ce qui est déjà sur le disque reste téléchargeable et restaurable.`,"settings.backups.offTitle":`Les sauvegardes sont désactivées`,"settings.backups.offText":`Rien de nouveau n'est archivé tant que ce n'est pas réactivé. Les archives ci-dessous peuvent toujours être téléchargées, restaurées et supprimées.`,"settings.backups.keep":`Conserver`,"settings.backups.keepHint":`Les archives plus anciennes sont élaguées après chaque sauvegarde.`,"settings.backups.schedule":`Sauvegardes automatiques`,"settings.backups.scheduleHint":`Le panneau écrit une archive de lui-même à cet intervalle.`,"settings.backups.scheduleHours":`Toutes les (heures)`,"settings.backups.scheduleHoursHint":`24 correspond à une archive par jour.`,"settings.backups.scheduleKeep":`Conserver les automatiques`,"settings.backups.scheduleKeepHint":`Les archives manuelles sont comptées à part, par Conserver.`,"settings.backups.scheduleLast":`Dernière automatique : {when}`,"settings.backups.extraPaths":`Chemins supplémentaires`,"settings.backups.extraPathsHint":`Séparés par des virgules, capturés dans chaque archive en plus de ce que déclare chaque espace de travail.`,"settings.backups.extraPathsPlaceholder":`{home}/myapp-data`,"settings.backups.archiveDirectory":`Répertoire des archives`,"settings.backups.copyArchiveDirectory":`Copier le répertoire des archives`,"settings.backups.changeDirectory":`Le changer est une décision au niveau fichier : modifiez {path}.`,"settings.backups.theSettingsFile":`le fichier de paramètres`,"settings.backups.capturesTitle":`Ce qu'une sauvegarde capture`,"settings.backups.capturesDescription":`Choisissez-les dans la boîte de création. Un espace de travail peut être pris en entier ou seulement ses paramètres, serveurs, secrets et chemins de données déclarés.`,"settings.backups.nothingSelectable":`Rien n'est encore sélectionnable.`,"settings.backups.fromOrigin":`depuis {origin}`,"settings.backups.notCaptured":`non capturé`,"settings.backups.generatedSkipped":`répertoires générés ignorés`,"settings.backups.included":`inclus`,"settings.backups.skipped":`ignoré`,"settings.backups.workspacesNote":`Ce panneau sert {count} espaces de travail ; chacun est sa propre entrée sélectionnable.`,"settings.backups.archivesTitle":`Archives`,"settings.backups.archivesDescription":`Stockées dans le répertoire de sauvegarde et téléchargeables à tout moment.`,"settings.backups.create":`Créer une sauvegarde…`,"settings.backups.restore":`Restaurer…`,"settings.backups.noArchives":`Aucune archive pour l'instant`,"settings.backups.noArchivesEnabled":`Créez-en une maintenant pour capturer le panneau et les espaces de travail de votre choix.`,"settings.backups.noArchivesDisabled":`Rien n'a encore été archivé, et les sauvegardes sont désactivées.`,"settings.backups.encrypted":`chiffrée`,"settings.backups.download":`Télécharger`,"settings.backups.restoreAction":`Restaurer`,"settings.backups.confirmDelete":`Confirmer la suppression`,"settings.backups.deleted":`{name} supprimé.`,"settings.backups.kindSettings":`paramètres`,"settings.backups.kindServers":`serveurs`,"settings.backups.kindSecrets":`secrets`,"settings.backups.kindTls":`tls`,"settings.backups.kindData":`données`,"settings.backups.kindWorkspace":`espace de travail`,"settings.ddns.statePending":`En attente`,"settings.ddns.stateOk":`Mis à jour`,"settings.ddns.stateUnchanged":`À jour`,"settings.ddns.stateSkipped":`Ignoré`,"settings.ddns.stateError":`Échec`,"settings.ddns.passFinished":`Passe de DNS dynamique terminée`,"settings.ddns.credentialsSaved":`Identifiants enregistrés pour {account}`,"settings.ddns.credentialsRemoved":`Identifiants supprimés pour {account}`,"settings.ddns.loadErrorTitle":`Les paramètres de DNS dynamique n'ont pas pu être chargés`,"settings.ddns.title":`DNS dynamique`,"settings.ddns.description":`Gardez ces noms d'hôte pointés vers l'adresse publique de cette machine. Les identifiants vivent dans le fichier de secrets, jamais dans servers.config.json.`,"settings.ddns.checking":`vérification`,"settings.ddns.needsAttention":`demande attention`,"settings.ddns.watching":`surveillance`,"settings.ddns.updateNow":`Mettre à jour maintenant`,"settings.ddns.enabled":`Maintenir le DNS dynamique à jour`,"settings.ddns.enabledHint":`Une passe s'exécute à l'intervalle ci-dessous ; un fournisseur n'est appelé que si l'adresse a réellement changé.`,"settings.ddns.interval":`Vérifier toutes les (ms)`,"settings.ddns.intervalHint":`60000 correspond à une minute ; la valeur par défaut est cinq.`,"settings.ddns.ttl":`TTL (s)`,"settings.ddns.ttlHint":`1 signifie automatique là où le fournisseur le prend en charge.`,"settings.ddns.detectIpv4":`Détecter l'IPv4`,"settings.ddns.detectIpv4Hint":`Nécessaire pour les enregistrements A.`,"settings.ddns.detectIpv6":`Détecter l'IPv6`,"settings.ddns.detectIpv6Hint":`Nécessaire pour les enregistrements AAAA.`,"settings.ddns.accountsTitle":`Comptes fournisseurs`,"settings.ddns.accountsDescription":`Une entrée par token d'API. Les identifiants sont stockés sur le serveur et ne reviennent jamais.`,"settings.ddns.credentialsSet":`identifiants enregistrés`,"settings.ddns.noCredentials":`aucun identifiant`,"settings.ddns.credentials":`Identifiants`,"settings.ddns.removeAccountBlocked":`Retirez d'abord les noms d'hôte qui utilisent ce compte`,"settings.ddns.noAccounts":`Aucun compte pour l'instant. Choisissez un fournisseur et ajoutez-en un.`,"settings.ddns.provider":`Fournisseur`,"settings.ddns.accountId":`Id du compte`,"settings.ddns.accountIdPlaceholder":`cloudflare-home`,"settings.ddns.accountIdHint":"L'id du compte nomme le compte et sert de clé à ses identifiants stockés ; lettres minuscules, chiffres, `-` et `_`.","settings.ddns.hostnamesTitle":`Noms d'hôte`,"settings.ddns.hostnamesDescription":`La liste complète à maintenir à jour — suba.domaine.com, domaine.xyz, etc.`,"settings.ddns.account":`Compte`,"settings.ddns.recordA":`A (IPv4)`,"settings.ddns.recordAaaa":`AAAA (IPv6)`,"settings.ddns.aaaaUnsupported":`Ce fournisseur ne peut pas gérer les enregistrements AAAA.`,"settings.ddns.proxied":`Via proxy`,"settings.ddns.proxiedHint":`Cloudflare sert cet enregistrement via son propre réseau.`,"settings.ddns.ipv6Off":`La détection IPv6 est désactivée`,"settings.ddns.advanced":`Avancé`,"settings.ddns.advancedHint":`domaine enregistré et remplacement du TTL`,"settings.ddns.registeredDomain":`Domaine enregistré`,"settings.ddns.registeredDomainPlaceholder":`example.co.uk`,"settings.ddns.registeredDomainHint":`Uniquement quand le fournisseur doit connaître l'apex, par ex. les domaines à trois libellés.`,"settings.ddns.ttlOverride":`Remplacement du TTL (s)`,"settings.ddns.ttlOverrideHint":`Vide utilise la valeur ci-dessus.`,"settings.ddns.noHostnames":`Aucun nom d'hôte pour l'instant.`,"settings.ddns.hostnamePlaceholder":`home.example.com`,"settings.ddns.lastPass":`Dernière passe`,"settings.ddns.ipv4Value":`IPv4 {address}`,"settings.ddns.ipv6Value":`IPv6 {address}`,"settings.ddns.type":`Type`,"settings.ddns.state":`État`,"settings.ddns.address":`Adresse`,"settings.ddns.detail":`Détail`,"settings.ddns.credentialsTitle":`Identifiants du fournisseur`,"settings.ddns.credentialsDescription":`Les champs enregistrés ne sont jamais renvoyés. Enregistrer remplace tous les champs de ce compte et lance une passe immédiatement.`,"settings.ddns.optional":`Facultatif.`,"settings.ddns.whereToGet":`Où les obtenir`,"settings.ddns.forget":`Oublier`,"settings.ddns.forgetConfirm":`Les oublier`,"settings.ddns.forgetTitle":`Oublier les identifiants stockés ?`,"settings.ddns.forgetHint":`Ils sont supprimés du disque et ne peuvent plus être relus ; il faudrait les recoller.`,"settings.ddns.saveCredentials":`Enregistrer les identifiants`,"settings.defaults.title":`Valeurs par défaut des serveurs`,"settings.defaults.description":`Appliquées à chaque entrée qui ne définit pas sa propre valeur.`,"settings.defaults.enabledHint":`Les nouvelles entrées démarrent activées.`,"settings.defaults.autostart":`Démarrer avec le panneau`,"settings.defaults.bind":`Liaison`,"settings.defaults.bindLocal":`Local — 127.0.0.1`,"settings.defaults.bindLan":`LAN — 0.0.0.0`,"settings.defaults.onPortConflict":`En cas de conflit de port`,"settings.defaults.conflictBlock":`Bloquer le démarrage`,"settings.defaults.conflictWarn":`Avertir et démarrer quand même`,"settings.defaults.conflictFollow":`Suivre un redémarrage détaché de lui-même`,"settings.defaults.conflictReclaim":`Remplacer un redémarrage détaché par une copie supervisée`,"settings.defaults.conflictKill":`Tuer ce qui occupe le port`,"settings.defaults.logBufferLines":`Lignes du tampon de journal`,"settings.defaults.logBufferLinesHint":`Conservées en mémoire par serveur.`,"settings.destination.title":`Destinataires`,"settings.destination.generalTitle":`Général`,"settings.destination.generalDescription":`Ce que suivent tous les destinataires sauf s'ils ont leurs propres réglages.`,"settings.destination.description":`Où vont les événements. Chacun peut suivre les réglages généraux ci-dessus ou avoir les siens.`,"settings.destination.addTelegram":`Ajouter Telegram`,"settings.destination.addWebhook":`Ajouter un webhook`,"settings.destination.empty":`Aucun destinataire. Ajoutez un chat Telegram ou un webhook pour recevoir les alertes.`,"settings.destination.chatId":`Id du chat`,"settings.destination.chatIdHint":`Utilisez Détecter les chats pour le remplir depuis les mises à jour du bot.`,"settings.destination.botToken":`Jeton du bot`,"settings.destination.saveToken":`Enregistrer le jeton`,"settings.destination.tokenSet":`jeton défini`,"settings.destination.noToken":`aucun jeton`,"settings.destination.detectChats":`Détecter les chats`,"settings.destination.sendTest":`Envoyer un test`,"settings.destination.remove":`Supprimer`,"settings.destination.removeQuestion":`Supprimer {name} ?`,"settings.destination.removeBody":`Les événements cessent d'être envoyés et son jeton de bot est supprimé.`,"settings.destination.ownSettings":`Réglages propres`,"settings.destination.ownSettingsHint":`Désactivé suit les réglages généraux ci-dessus.`,"settings.destination.lastSend":`Dernier envoi : {result} {when}`,"settings.destination.testSent":`Test envoyé.`,"settings.host.title":`Seuils`,"settings.host.description":`Un seuil de 0 désactive cette alerte. Les dépassements notifient une fois, puis une fois de plus au rétablissement.`,"settings.host.enabled":`Échantillonner cette machine`,"settings.host.enabledHint":`Charge, mémoire, swap, disque et température du CPU, à l'intervalle ci-dessous.`,"settings.host.interval":`Intervalle (ms)`,"settings.host.intervalHint":`Fréquence d'échantillonnage de l'hôte et de vérification des alertes.`,"settings.host.diskPaths":`Chemins de disque`,"settings.host.diskPathsHint":`Séparés par des virgules ; les gabarits comme {home} sont développés.`,"settings.host.diskUsed":`Disque utilisé (%)`,"settings.host.memoryUsed":`Mémoire utilisée (%)`,"settings.host.swapUsed":`Swap utilisé (%)`,"settings.host.zeroDisables":`0 désactive l'alerte.`,"settings.host.loadPerCpu":`Charge par CPU`,"settings.host.loadPerCpuHint":`La charge moyenne sur 1 minute divisée par le nombre de cœurs.`,"settings.host.tempCelsius":`Température du CPU (°C)`,"settings.host.tempCelsiusHint":`Linux uniquement ; ignoré là où le système ne l'expose pas.`,"settings.host.breachingNow":`Dépassés maintenant :`,"settings.host.nothingBreaching":`Rien n'est dépassé pour l'instant.`,"settings.interface.title":`Interface`,"settings.interface.description":`Le panneau est un site statique : gardez celui fourni, ou servez votre propre build depuis le répertoire d'état.`,"settings.interface.currentlyServing":`Actuellement servi`,"settings.interface.copyDirectory":`Copier le répertoire de l'UI`,"settings.interface.fileCount":`{count} fichiers`,"settings.interface.sourceStock":`fournie`,"settings.interface.sourceCustom":`personnalisée`,"settings.interface.unnamed":`sans nom`,"settings.interface.panelVersion":`Version du panneau`,"settings.interface.copyPanelVersion":`Copier la version du panneau`,"settings.interface.panelVersionHint":`La version qu'exécute ce processus du panneau — {command} affiche le même numéro.`,"settings.interface.panelName":`Nom du panneau`,"settings.interface.panelNameHint":`Affiché dans la barre latérale par l'UI fournie. Une UI personnalisée peut afficher son propre nom.`,"settings.interface.uploadLabel":`Téléverser un build d'UI (.zip avec un index.html)`,"settings.interface.docsHint":`Voir {docs} pour le contrat d'API. Si une UI personnalisée casse le panneau, {command} remet celle fournie depuis le terminal.`,"settings.interface.resetName":`Réinitialiser le nom`,"settings.interface.confirmRevert":`Confirmer le retour`,"settings.interface.revertToStock":`Revenir à l'UI fournie`,"settings.interface.install":`Installer l'UI`,"settings.interface.installed":`UI remplacée par {name} — rechargez la page`,"settings.interface.yourBuild":`votre build`,"settings.interface.restored":`UI fournie restaurée — rechargez la page`,"settings.interface.nothingInstalled":`aucune UI personnalisée n'était installée`,"settings.listener.title":`Écoute`,"settings.listener.description":`Où le panneau répond. Le déplacer redémarre le panneau et envoie cette page à la nouvelle adresse.`,"settings.listener.port":`Port de contrôle`,"settings.listener.portHint":`3999 par défaut.`,"settings.listener.bind":`Liaison`,"settings.listener.bindLocal":`Local`,"settings.listener.bindLan":`LAN`,"settings.listener.bindCustom":`Personnalisé`,"settings.listener.bindLanHint":`0.0.0.0 — joignable depuis tout le réseau.`,"settings.listener.bindLocalHint":`127.0.0.1 — cette machine uniquement.`,"settings.listener.bindCustomHint":`Une adresse d'interface précise que vous saisissez ci-dessous.`,"settings.listener.ipv4":`Adresse IPv4`,"settings.listener.ipv4Placeholder":`192.168.1.20`,"settings.listener.ipv4Error":`Saisissez une adresse IPv4, par exemple 192.168.1.20.`,"settings.listener.ipv4Hint":`Écouter au-delà de 127.0.0.1 exige un vrai mot de passe.`,"settings.listener.openBrowser":`Ouvrir un navigateur au démarrage du panneau`,"settings.listener.liveAddress":`Adresse active`,"settings.listener.restartRequired":`redémarrage requis`,"settings.listener.copyLiveAddress":`Copier l'adresse active`,"settings.listener.liveAddressHint":`Ce à quoi l'écoute est liée en ce moment ; les modifications enregistrées prennent effet quand le panneau se relie.`,"settings.logs.title":`Rétention`,"settings.logs.description":`La vue en direct vient toujours de la mémoire ; ces fichiers survivent à un redémarrage et alimentent la page Journaux.`,"settings.logs.persist":`Conserver les journaux sur disque`,"settings.logs.persistHint":`Désactivez pour tout garder en mémoire uniquement.`,"settings.logs.maxBytes":`Rotation à (octets)`,"settings.logs.maxBytesHint":`Par serveur, avant de passer à .1, .2, …`,"settings.logs.keep":`Conserver les fichiers archivés`,"settings.logs.directory":`Répertoire des journaux`,"settings.logs.copyDirectory":`Copier le répertoire des journaux`,"settings.logs.browseHint":`Parcourez et téléchargez ces fichiers sur la page {logs}.`,"settings.paths.dataRoot":`Racine des données`,"settings.paths.dataRootHint":`HHOSTED_HOME — paramètres globaux, espaces de travail, TLS, sauvegardes et l'UI.`,"settings.paths.globalSettings":`Paramètres globaux`,"settings.paths.globalSettingsHint":`settings.json — écoute, authentification, politique TLS, santé de l'hôte, sauvegardes.`,"settings.paths.projectDir":`Répertoire du projet`,"settings.paths.projectDirHint":`Base des chemins relatifs des entrées.`,"settings.paths.panelAddress":`Adresse du panneau`,"settings.paths.panelAddressHint":`Où ce panneau de contrôle est actif en ce moment.`,"settings.paths.serversConfig":`Configuration des serveurs`,"settings.paths.serversConfigHint":`servers.config.json de {label}.`,"settings.paths.workspaceSettings":`Paramètres de l'espace de travail`,"settings.paths.workspaceSettingsHint":`Valeurs par défaut des serveurs, rétention des journaux, notifications, DDNS.`,"settings.paths.logs":`Journaux`,"settings.paths.logsHint":`Sortie conservée pour cet espace de travail.`,"settings.paths.copyPath":`Copier {label}`,"settings.paths.whereThingsLive":`Où vivent les choses`,"settings.paths.whereThingsLiveDescription":`Lecture seule. Copiez un chemin directement dans un shell ou un éditeur.`,"settings.paths.workspaceFiles":`Fichiers de l'espace de travail`,"settings.paths.workspaceFilesDescription":`Chaque espace de travail possède sa configuration, ses paramètres et son répertoire de journaux ; rien n'est partagé entre eux.`,"settings.rebind.failed":`Le panneau de contrôle n'a pas répondu sur {target}. Consultez la console pour la nouvelle écoute.`,"settings.restore.title":`Restaurer une sauvegarde`,"settings.restore.description":`Rien n'est écrit tant que le plan n'est pas appliqué.`,"settings.restore.archive":`Archive`,"settings.restore.archiveHint":`Une archive stockée, ou un .zip de cette machine.`,"settings.restore.encryptedName":`{name} — chiffrée`,"settings.restore.uploadOption":`Téléverser un fichier…`,"settings.restore.archiveFile":`Fichier d'archive (.zip)`,"settings.restore.unchangedTitle":`Rien n'a encore changé`,"settings.restore.archiveLine":`Archive {name}.`,"settings.restore.uploadedArchive":`L'archive téléversée.`,"settings.restore.passwordProtected":`Cette sauvegarde est protégée par mot de passe.`,"settings.restore.password":`Mot de passe`,"settings.restore.checkAgain":`Vérifier à nouveau avec le mot de passe`,"settings.restore.choosePrompt":`Choisissez quoi restaurer — {selected} sur {total} sélectionnés.`,"settings.restore.willRestore":`Sera restauré : {items}.`,"settings.restore.skipped":`Ignoré : {items}.`,"settings.restore.nothing":`rien`,"settings.restore.restartNote":`Les paramètres du panneau lui-même diffèrent : redémarrez le panneau ensuite.`,"settings.restore.reloadedNote":`Les espaces de travail restaurés sont rechargés immédiatement ; les entrées marquées en démarrage auto démarrent d'elles-mêmes.`,"settings.restore.applyStored":`Appliquer cette restauration`,"settings.restore.applyUpload":`Restaurer le fichier téléversé`,"settings.restore.restored":`{count} élément(s) restauré(s).`,"settings.restore.restoredWithNotes":`{count} élément(s) restauré(s) — {notes}.`,"settings.restore.noteReloaded":`les serveurs restaurés sont actifs, les entrées en démarrage auto démarrent`,"settings.restore.noteRestart":`redémarrez le panneau pour appliquer ses propres paramètres`,"settings.restore.reasonSymbolicLink":`lien symbolique, ignoré`,"settings.restore.reasonNotSelected":`non sélectionné`,"settings.restore.reasonUnrestorable":`ne peut pas être restauré ici`,"settings.restore.reasonInvalidSettings":`les paramètres de l'archive ne sont pas valides`,"settings.restore.reasonInvalidServers":`les serveurs de l'archive ne sont pas valides`,"settings.shell.noUnsavedChanges":`Aucune modification non enregistrée`,"settings.shell.discard":`Abandonner les modifications`,"settings.shell.save":`Enregistrer les paramètres`,"settings.shell.unsavedTitle":`Modifications non enregistrées`,"settings.shell.nothingToSave":`Rien à enregistrer.`,"settings.telegram.title":`Telegram`,"settings.telegram.description":`La politique vit dans la configuration ; le token du bot est un secret et ne revient jamais du serveur.`,"settings.telegram.enabled":`Envoyer des notifications`,"settings.telegram.enabledHint":`Un message par événement, limité par le délai ci-dessous.`,"settings.telegram.chatId":`Id du chat`,"settings.telegram.chatIdPlaceholder":`123456789 ou @channel`,"settings.telegram.chatIdHint":`Utilisez Détecter les chats pour le remplir depuis les mises à jour du bot.`,"settings.telegram.cooldown":`Délai par événement (ms)`,"settings.telegram.cooldownHint":`Par serveur et par motif, pour qu'un serveur instable ne puisse pas inonder.`,"settings.telegram.onCrash":`Tentatives épuisées`,"settings.telegram.onUnhealthy":`Port en panne`,"settings.telegram.onForcedRestart":`Redémarrage forcé`,"settings.telegram.onRecovered":`Rétabli`,"settings.telegram.onHost":`Seuils de l'hôte dépassés`,"settings.telegram.onHostHint":`Disque, mémoire, swap, charge et température du CPU, selon les seuils de Santé de l'hôte.`,"settings.telegram.onDdns":`DNS dynamique modifié ou en échec`,"settings.telegram.onDdnsHint":`Un message par passe ayant modifié un enregistrement, et un pour une passe en échec.`,"settings.telegram.botToken":`Token du bot`,"settings.telegram.tokenSet":`token défini`,"settings.telegram.noToken":`aucun token`,"settings.telegram.tokenNote":`Depuis @BotFather — un secret, jamais dans servers.config.json.`,"settings.telegram.tokenPlaceholder":`123456789:AA…`,"settings.telegram.tokenSavedPlaceholder":`Enregistré — saisissez un nouveau token pour le remplacer`,"settings.telegram.saveToken":`Enregistrer le token`,"settings.telegram.detectChats":`Détecter les chats`,"settings.telegram.sendTest":`Envoyer un test`,"settings.telegram.removeToken":`Retirer le token`,"settings.telegram.removeTokenConfirm":`Confirmer le retrait`,"settings.telegram.removeTokenTitle":`Retirer le token du bot ?`,"settings.telegram.removeTokenHint":`Les notifications s'arrêtent jusqu'à ce que vous recolliez un token.`,"settings.telegram.tokenSaved":`Token enregistré.`,"settings.telegram.tokenSavedFor":`Token enregistré pour @{username}.`,"settings.telegram.tokenRemoved":`Token retiré.`,"settings.telegram.noChats":`Aucun chat trouvé. Envoyez d'abord /start au bot, puis détectez à nouveau.`,"settings.telegram.testSent":`Message de test envoyé.`,"settings.telegram.testFailed":`Le message de test a échoué.`,"settings.telegram.chatsSeen":`Chats vus par le bot :`,"settings.telegram.lastSend":`Dernier envoi : {result}`,"settings.tls.title":`HTTPS`,"settings.tls.description":`Téléversez une paire PEM et le panneau sert TLS sur sa propre écoute. Un certificat auto-signé suffit sur un réseau domestique.`,"settings.tls.serve":`Servir le panneau en HTTPS`,"settings.tls.serveHint":`Enregistré avec Enregistrer les paramètres ; le panneau se relie à nouveau et cette page le suit.`,"settings.tls.certificateTitle":`Certificat`,"settings.tls.certificateDescription":`Certificat encodé PEM et sa clé privée. Les deux restent dans le fichier de secrets.`,"settings.tls.unusableTitle":`Le certificat stocké est inutilisable`,"settings.tls.subject":`Sujet`,"settings.tls.issuer":`Émetteur`,"settings.tls.validUntil":`Valide jusqu'au`,"settings.tls.days":`{count} jours`,"settings.tls.privateKey":`Clé privée`,"settings.tls.keyMatches":`correspond au certificat`,"settings.tls.keyMismatch":`ne correspond pas`,"settings.tls.fingerprint":`Empreinte`,"settings.tls.copyFingerprint":`Copier l'empreinte`,"settings.tls.noCertificateTitle":`Aucun certificat téléversé`,"settings.tls.noCertificateText":`Téléversez ci-dessous un certificat PEM et sa clé, puis enregistrez. HTTPS n'est pas servi tant qu'aucun certificat n'est présent.`,"settings.tls.certFile":`Fichier de certificat (.pem, .crt)`,"settings.tls.keyFile":`Fichier de clé privée (.pem, .key)`,"settings.tls.pasteCertificate":`Ou collez le certificat`,"settings.tls.pasteKey":`Ou collez la clé privée`,"settings.tls.saveCertificate":`Enregistrer le certificat`,"settings.tls.removeCertificate":`Retirer le certificat`,"settings.tls.confirmRemove":`Confirmer le retrait`,"settings.tls.removeTitle":`Retirer le certificat ?`,"settings.tls.removeHint":`TLS reste actif mais n'a plus rien à servir : le panneau repasse en http dès que l'écoute se relie à nouveau.`,"settings.tls.stored":`Certificat stocké.`,"settings.tls.removed":`Certificat retiré.`,"settings.webhook.title":`Webhooks`,"settings.webhook.description":`Envoie les mêmes événements partout où une requête HTTP est acceptée.`,"settings.webhook.empty":`Aucun webhook. Ajoutez-en un pour envoyer les événements ailleurs.`,"settings.webhook.add":`Ajouter un webhook`,"settings.webhook.newTarget":`hook`,"settings.webhook.url":`URL`,"settings.webhook.urlPlaceholder":`https://ntfy.sh/my-topic`,"settings.webhook.method":`Méthode`,"settings.webhook.format":`Corps`,"settings.webhook.formatJson":`JSON`,"settings.webhook.formatText":`Texte brut`,"settings.webhook.formatHint":`JSON pour Discord, Slack ou votre endpoint ; texte brut pour ntfy.`,"settings.webhook.headers":`En-têtes`,"settings.webhook.headersHint":`Un Name: value par ligne, envoyé à chaque requête. ntfy lit Title et Priority ici ; le jeton bearer va dans Authorization.`,"settings.webhook.presets":`Préréglages`,"settings.webhook.presetNtfy":`ntfy`,"settings.webhook.presetDiscord":`Discord`,"settings.webhook.presetSlack":`Slack`,"settings.webhook.sendTest":`Envoyer un test`,"settings.webhook.testSent":`Test envoyé.`,"settings.webhook.cooldown":`Attente (ms)`,"settings.webhook.cooldownHint":`Par serveur et motif, pour ce destinataire seul. 0 le désactive.`,"settings.webhook.lastSend":`Dernier envoi : {result} {when}`,"settings.webhook.removeQuestion":`Supprimer {name} ?`,"settings.webhook.removeBody":`Les événements cessent d'être envoyés. L'URL et les en-têtes sont retirés de la configuration de cet espace.`,"status.stopped":`Arrêté`,"status.starting":`Démarrage`,"status.running":`En cours`,"status.stopping":`Arrêt`,"status.backoff":`Redémarrage`,"status.crashed":`Planté`,"status.conflict":`Conflit de port`,"theme.label":`Thème : {theme}`,"theme.light":`clair`,"theme.dark":`sombre`,"theme.system":`système`,"topbar.search":`Rechercher ou exécuter une commande`,"topbar.openNavigation":`Ouvrir la navigation`,"topbar.commandPalette":`Palette de commandes`,"topbar.account":`Compte`,"topbar.signedIn":`Connecté`,"topbar.signOut":`Se déconnecter`,"topbar.workspaceLabel":`Espace de travail : {name}`,"validation.port":`Le port doit être un nombre entier compris entre 1 et 65535.`,"validation.idRequired":`Un id est requis — c'est la clé sous laquelle vit ce serveur.`,"validation.idPattern":`L'id doit commencer par une lettre minuscule ou un chiffre et ne contenir que des lettres minuscules, des chiffres, des tirets et des traits de soulignement.`,"validation.commandRequired":`Une commande est requise — l'exécutable que le superviseur lance.`,"validation.bootstrapCommand":`Un bootstrap a besoin d'une commande à exécuter.`,"views.actions.addAServer":`Ajouter un serveur`,"views.actions.addServer":`Ajouter un serveur`,"views.actions.startAll":`Tout démarrer`,"views.actions.stopAll":`Tout arrêter`,"views.common.thisWorkspace":`cet espace de travail`,"views.globalOverview.configError":`La configuration est illisible : {error}`,"views.globalOverview.degraded":`dégradé`,"views.globalOverview.description":`Santé de l'hôte et tous les serveurs de tous les espaces de travail, groupés par lieu de vie.`,"views.globalOverview.emptyDescription":`Choisissez un espace de travail dans l'en-tête et ajoutez le premier processus qu'il doit maintenir en vie.`,"views.globalOverview.emptyTitle":`Aucun serveur nulle part pour l'instant`,"views.globalOverview.groupEmptyDescription":`Ajoutez-en un et il apparaîtra ici et sur la page de l'espace de travail.`,"views.globalOverview.groupRunning":`{running}/{total} en cours`,"views.globalOverview.hostUptime":`Durée de fonctionnement de l'hôte`,"views.globalOverview.hostVitals":`Santé de l'hôte`,"views.globalOverview.hostVitalsNote":`Cette machine, partagée par tous les espaces de travail.`,"views.globalOverview.openWorkspace":`Ouvrir l'espace de travail`,"views.globalOverview.panelUptime":`Durée de fonctionnement du panneau`,"views.globalOverview.samplingOff":`échantillonnage arrêté`,"views.globalOverview.samplingOn":`échantillonnage actif`,"views.globalOverview.serversTotal":`{count} serveurs au total`,"views.globalOverview.serving":`en service`,"views.globalOverview.workspaces":`Espaces de travail`,"views.globalSettings.authenticationDescription":`Qui peut se connecter à ce panneau, et comment une session est considérée comme fiable.`,"views.globalSettings.backupsDescription":`Une archive par capture, couvrant le panneau et tout espace de travail de votre choix.`,"views.globalSettings.changesDescription":`Ce qu'Enregistrer écrirait dans le fichier de paramètres du panneau.`,"views.globalSettings.description":`Écoute, accès, santé de l'hôte, sauvegardes, TLS et chemins de ce panneau — partagés par tous les espaces de travail.`,"views.globalSettings.hostDescription":`Seuils d'alerte pour les ressources de cette machine.`,"views.globalSettings.interfaceDescription":`Servez votre propre UI de panneau au lieu de celle fournie.`,"views.globalSettings.languageDescription":`La langue d'affichage de ce panneau, pour ce navigateur.`,"views.globalSettings.languageNote":`Votre choix est conservé dans ce navigateur et s'applique aussi à la page de connexion. Il ne change ni la sortie de journal du panneau ni ses messages d'API.`,"views.globalSettings.listenerDescription":`Où le panneau de contrôle écoute et comment il s'annonce.`,"views.globalSettings.loadErrorTitle":`Certaines valeurs propres aux fichiers n'ont pas pu être chargées`,"views.globalSettings.navLabel":`Sections des paramètres globaux`,"views.globalSettings.pathsDescription":`Où home-hosted garde ses fichiers, globalement et par espace de travail.`,"views.globalSettings.saveFailed":`Les paramètres n'ont pas pu être enregistrés.`,"views.globalSettings.saved":`Paramètres enregistrés.`,"views.globalSettings.savedRebinding":`Paramètres enregistrés — le panneau passe à une nouvelle adresse.`,"views.globalSettings.savedToast":`Paramètres enregistrés`,"views.globalSettings.sectionAuthentication":`Authentification`,"views.globalSettings.sectionBackups":`Sauvegardes`,"views.globalSettings.sectionHost":`Santé de l'hôte`,"views.globalSettings.sectionInterface":`Interface`,"views.globalSettings.sectionListener":`Écoute`,"views.globalSettings.sectionPaths":`Chemins`,"views.globalSettings.sectionTls":`TLS`,"views.globalSettings.title":`Paramètres globaux`,"views.globalSettings.tlsDescription":`Servez le panneau en HTTPS avec votre propre certificat.`,"views.logs.allStreams":`Tous les flux`,"views.logs.clear":`Vider`,"views.logs.clearDescription":`{server} — le fichier sur disque est tronqué. Le processus continue de tourner et de nouvelles lignes sont écrites à partir de là.`,"views.logs.clearFile":`Vider le fichier`,"views.logs.clearNote":`Téléchargez-le d'abord si la sortie est encore nécessaire — cette action est irréversible depuis le panneau.`,"views.logs.clearTitle":`Vider le fichier de journal conservé ?`,"views.logs.fileEmpty":`Le fichier conservé est vide.`,"views.logs.loadedLines":`{count} lignes chargées`,"views.logs.modeLive":`Flux en direct`,"views.logs.modePersisted":`Conservé`,"views.logs.noServersDescription":`Ajoutez-en un et sa sortie sera conservée ici.`,"views.logs.noServersTitle":`Aucun serveur`,"views.logs.nothingOnDisk":`Rien sur le disque pour ce serveur — la persistance est désactivée, ou il n'a encore rien écrit.`,"views.logs.nothingPersisted":`rien de conservé`,"views.logs.persistedSummary":`{workspace} · {persisted} serveurs sur {total} sur disque · {size}`,"views.logs.persistedTitle":`Journaux conservés`,"views.logs.pickServerDescription":`La sortie conservée et les flux en direct sont par serveur. Choisissez-en un dans la liste.`,"views.logs.pickServerTitle":`Choisir un serveur`,"views.logs.reload":`Recharger`,"views.logs.retentionNote":`La rotation et la rétention se règlent dans Paramètres de l'espace de travail → Journaux.`,"views.logs.searchAria":`Rechercher dans le journal`,"views.logs.searchPlaceholder":`rechercher dans la fenêtre de fin`,"views.logs.searchedLines":`{count} lignes parcourues`,"views.logs.streamAria":`Flux`,"views.logs.tailAria":`Taille de fin`,"views.logs.waitingOutput":`Connecté — en attente de sortie.`,"views.overview.acrossTree":`dans tout l'arbre`,"views.overview.cpuNow":`{value} % de CPU maintenant`,"views.overview.crashedOrUnhealthy":`plantés ou en panne`,"views.overview.description":`État en direct de chaque serveur de cet espace de travail, rafraîchi par un seul flux d'événements.`,"views.overview.emptyDescription":`Ajoutez le premier processus que cet espace de travail doit maintenir en vie.`,"views.overview.emptyTitle":`Aucun serveur dans cet espace de travail`,"views.overview.enabled":`{count} activés`,"views.overview.longestUptime":`Plus longue durée de fonctionnement`,"views.overview.needsAttention":`Demande attention`,"views.overview.notUp":`{count} non démarrés`,"views.overview.nothingBroken":`rien n'est cassé`,"views.overview.nothingRunning":`rien ne tourne`,"views.overview.openFullList":`Ouvrir la liste complète`,"views.overview.peak":`pic {value}`,"views.overview.processMemory":`Mémoire des processus`,"views.overview.recentActivity":`Activité récente`,"views.overview.running":`En cours`,"views.overview.sampling":`l'historique des ressources est échantillonné toutes les 5 s et conservé pour cette session`,"views.overview.stopped":`Arrêté`,"views.overview.workspaceLabel":`espace de travail {id}`,"views.route.server":`Serveur`,"views.serverDetail.allServers":`Tous les serveurs`,"views.serverDetail.autostart":`Démarrer avec le panneau`,"views.serverDetail.backToServers":`Retour aux serveurs`,"views.serverDetail.bind":`Liaison`,"views.serverDetail.bindCustom":`{bind} — personnalisé`,"views.serverDetail.bindLan":`0.0.0.0 — toutes les interfaces`,"views.serverDetail.bindLocal":`127.0.0.1 — cette machine uniquement`,"views.serverDetail.closeEditor":`Fermer l'éditeur`,"views.serverDetail.copyJson":`Copier la configuration JSON`,"views.serverDetail.crashes24":`plantages sur 24 h`,"views.serverDetail.dependencies":`Dépendances`,"views.serverDetail.detached":`détaché`,"views.serverDetail.detachedHint":`Ce processus s'est remplacé lui-même : le panneau a adopté le successeur au lieu de démarrer un second exemplaire. L'arrêt fonctionne toujours et sa sortie reste là où le successeur l'a envoyée.`,"views.serverDetail.disableServer":`Désactiver le serveur`,"views.serverDetail.editHint":`Modifier chaque champ de cette entrée`,"views.serverDetail.effectiveConfig":`Configuration effective`,"views.serverDetail.effectiveConfigNote":`Les valeurs par défaut des paramètres sont déjà fusionnées dans ces valeurs.`,"views.serverDetail.enableServer":`Activer le serveur`,"views.serverDetail.eventHistory":`Historique des événements`,"views.serverDetail.eventHistoryNote":`Conservé par le panneau pendant 24 heures.`,"views.serverDetail.fieldArgs":`args`,"views.serverDetail.fieldBackupPaths":`chemins de sauvegarde`,"views.serverDetail.fieldBootstrap":`bootstrap`,"views.serverDetail.fieldCommand":`commande`,"views.serverDetail.fieldCwd":`cwd`,"views.serverDetail.fieldDataEnvs":`envs de données`,"views.serverDetail.fieldDependsOn":`dépend de`,"views.serverDetail.fieldEnv":`env`,"views.serverDetail.fieldEnvFile":`fichier d'env`,"views.serverDetail.fieldHealth":`santé`,"views.serverDetail.fieldLogBuffer":`tampon de journal`,"views.serverDetail.fieldOnPortConflict":`en cas de conflit de port`,"views.serverDetail.fieldPortBind":`port · liaison`,"views.serverDetail.fieldRestart":`redémarrage`,"views.serverDetail.fieldRssLimit":`limite RSS`,"views.serverDetail.fieldStop":`arrêt`,"views.serverDetail.fields":`Champs`,"views.serverDetail.goneDescription":`{id} n'est plus dans servers.config.json. Il a peut-être été retiré depuis un autre onglet.`,"views.serverDetail.goneTitle":`Ce serveur a disparu`,"views.serverDetail.health":`Santé`,"views.serverDetail.healthProbe":`Sonde de santé`,"views.serverDetail.lastCrash":`Dernier plantage`,"views.serverDetail.lastProbe":`Dernière sonde`,"views.serverDetail.logBufferLines":`{count} lignes`,"views.serverDetail.memoryRss":`Mémoire (RSS)`,"views.serverDetail.moreActions":`Autres actions pour {label}`,"views.serverDetail.neverWritten":`Ce serveur n'a encore rien écrit.`,"views.serverDetail.nextAttempt":`Prochaine tentative`,"views.serverDetail.none":`aucun`,"views.serverDetail.off":`arrêté`,"views.serverDetail.persistent":`persistant`,"views.serverDetail.persistentHint":"Cette entrée tourne sous sa propre nounou : elle continue quand le panneau s'arrête, redémarre ou est tué. `home-hosted down` la signale au lieu de l'arrêter ; seul Arrêter le fait.","views.serverDetail.pid":`PID`,"views.serverDetail.portFree":`libre`,"views.serverDetail.portInUse":`occupé`,"views.serverDetail.portState":`État du port`,"views.serverDetail.probeFailed":`La sonde de santé n'a pas réussi.`,"views.serverDetail.probeFailedFor":`La sonde de santé n'a pas réussi depuis {duration}.`,"views.serverDetail.processes":`Processus`,"views.serverDetail.rawJson":`JSON brut`,"views.serverDetail.removeAutostart":`Retirer du démarrage auto`,"views.serverDetail.removeDescription":`{label} est retiré de servers.config.json : son processus est arrêté, et ses journaux et son historique de plantages sont supprimés avec lui.`,"views.serverDetail.removeNote":`Cette action est irréversible depuis le panneau — l'entrée doit être rajoutée à la main ou depuis une sauvegarde.`,"views.serverDetail.removeServer":`Supprimer le serveur`,"views.serverDetail.removeTitle":`Supprimer ce serveur ?`,"views.serverDetail.restart":`Redémarrer`,"views.serverDetail.restarts":`Redémarrages`,"views.serverDetail.sectionConfig":`Configuration`,"views.serverDetail.sectionHistory":`Historique`,"views.serverDetail.sectionOutput":`Sortie en direct`,"views.serverDetail.start":`Démarrer`,"views.serverDetail.startsOnItsOwn":`Démarre tout seul. Ajoutez des ids sous {code} pour le placer après d'autres serveurs.`,"views.serverDetail.stop":`Arrêter`,"views.serverDetail.telemetry":`Télémétrie`,"views.serverDetail.telemetryNote":`Échantillonnée toutes les 5 s tant que cette page est ouverte.`,"views.serverDetail.unhealthyFor":`En panne depuis`,"views.serverDetail.uptime24":`activité sur 24 h`,"views.serverDetail.waitingFirstLine":`En attente de la première ligne…`,"views.servers.clearFilter":`Effacer le filtre`,"views.servers.clearFilters":`Effacer les filtres`,"views.servers.description":`Chaque entrée du servers.config.json de {workspace}, avec ressources en direct, santé et historique.`,"views.servers.emptyDescription":`Ajoutez le premier processus que ce panneau doit superviser. Sa commande, ses arguments, son env et son répertoire de travail vivent tous dans le fichier de configuration.`,"views.servers.emptyTitle":`Aucun serveur configuré`,"views.servers.filterAll":`Tous`,"views.servers.filterAria":`Filtrer les serveurs`,"views.servers.filterAttention":`Attention`,"views.servers.filterDisabled":`Désactivés`,"views.servers.filterPlaceholder":`Filtrer par id, libellé, commande ou port`,"views.servers.filterRunning":`En cours`,"views.servers.filterStopped":`Arrêtés`,"views.servers.noMatchDescription":`Essayez un autre état ou effacez la recherche.`,"views.servers.noMatchTitle":`Rien ne correspond à ce filtre`,"views.settings.changesDescription":`Ce qu'Enregistrer écrirait dans les paramètres de {workspace}.`,"views.settings.configErrorNote":`Le panneau continue de superviser avec la configuration qu'il avait ; corriger le fichier le recharge tout seul.`,"views.settings.configErrorTitle":`La configuration de l'espace de travail est illisible`,"views.settings.configWarningTitle":`La configuration de cet espace de travail comporte un avertissement`,"views.settings.ddnsDescription":`Gardez les noms d'hôte pointés vers l'adresse publique de cette machine, quel que soit le registrar qui les détient.`,"views.settings.defaultsDescription":`Appliquées à chaque entrée de cet espace de travail qui ne définit pas sa propre valeur.`,"views.settings.description":`Valeurs par défaut des serveurs, rétention des journaux, notifications et DNS dynamique pour {workspace}.`,"views.settings.logsDescription":`Combien de sortie cet espace de travail garde sur disque et pendant combien de temps.`,"views.settings.navLabel":`Sections des paramètres de l'espace de travail`,"views.settings.notificationsDescription":`Alertes de plantage et de santé pour cet espace de travail, envoyées à un chat Telegram.`,"views.settings.saveFailed":`Les paramètres n'ont pas pu être enregistrés.`,"views.settings.saved":`Paramètres de l'espace de travail enregistrés.`,"views.settings.savedToast":`Paramètres de l'espace de travail enregistrés`,"views.settings.sectionDdns":`DNS dynamique`,"views.settings.sectionDefaults":`Valeurs par défaut des serveurs`,"views.settings.sectionLogs":`Journaux`,"views.settings.sectionNotifications":`Notifications`,"workspace.new":`Nouvel espace de travail`,"workspace.rename":`Renommer l'espace de travail`,"workspace.create":`Créer l'espace de travail`,"workspace.renameAction":`Renommer`,"workspace.createHint":`Ses propres paramètres, serveurs, journaux, secrets et entrée de sauvegarde — servis par ce même panneau.`,"workspace.renameHint":`Seul le nom change ; l'id de l'espace de travail reste, donc les URL et les chemins continuent de fonctionner.`,"workspace.nameHint":`Affiché dans la barre supérieure.`,"workspace.nameHintId":`Affiché dans la barre supérieure. Id : {id}`,"workspace.none":`Aucun espace de travail`,"workspace.delete":`Supprimer l'espace de travail`,"days.remaining":{one:`{count} jour`,other:`{count} jours`},"editor.unsaved":{one:`modification non enregistrée`,other:`modifications non enregistrées`},"editor.saveChanges":{one:`Enregistrer {count} modification`,other:`Enregistrer {count} modifications`},"logs.lines":{one:`{count} ligne`,other:`{count} lignes`},"palette.results":{one:`{count} résultat`,other:`{count} résultats`},"proxy.retry.inMinutes":{one:`~{count} minute`,other:`~{count} minutes`},"proxy.retry.inHours":{one:`~{count} heure`,other:`~{count} heures`},"servers.total":{one:`{count} serveur`,other:`{count} serveurs`},"servers.running":{one:`{count} en cours`,other:`{count} en cours`},"settings.backup.entriesCount":{one:`{count} entrée`,other:`{count} entrées`},"settings.backup.itemsSelected":{one:`{count} élément sélectionné`,other:`{count} éléments sélectionnés`},"settings.ddns.hostnameCount":{one:`{count} nom d'hôte`,other:`{count} noms d'hôte`},"settings.shell.fieldsChanged":{one:`champ modifié`,other:`champs modifiés`},"settings.shell.saveChanges":{one:`Enregistrer {count} modification`,other:`Enregistrer {count} modifications`},"views.globalOverview.needLook":{one:`{count} serveur à surveiller`,other:`{count} serveurs à surveiller`},"views.logs.filesOnDisk":{one:`{count} fichier`,other:`{count} fichiers`},"views.overview.needLook":{one:`{count} serveur à surveiller`,other:`{count} serveurs à surveiller`}};export{e as default};
|