home-hosted 0.7.21 → 0.8.1
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 +130 -157
- package/README.md +14 -5
- package/dist/cli.js +281 -417
- package/dist/cli.js.map +1 -1
- package/package.json +2 -1
- package/uis/stock/dist/assets/de-DRY6VVqP.js +1 -0
- package/uis/stock/dist/assets/es-CKPLbx5t.js +1 -0
- package/uis/stock/dist/assets/fr-CQ7_4vtN.js +1 -0
- package/uis/stock/dist/assets/index-DwE9bYyS.css +2 -0
- package/uis/stock/dist/assets/index-HT6jUD-L.js +46 -0
- package/uis/stock/dist/assets/ja-bRUylgOt.js +1 -0
- package/uis/stock/dist/assets/ko-DWqbA99M.js +1 -0
- package/uis/stock/dist/assets/plex-sans-cyrillic-BAAhND-U.woff2 +0 -0
- package/uis/stock/dist/assets/plex-sans-cyrillic-ext-d45eAU9y.woff2 +0 -0
- package/uis/stock/dist/assets/ru-DUFxhVp3.js +1 -0
- package/uis/stock/dist/assets/vi-B0-81iVf.js +1 -0
- package/uis/stock/dist/assets/zh-CN-CeoyD9BM.js +1 -0
- package/uis/stock/dist/index.html +7 -3
- package/uis/stock/dist/ui.json +3 -3
- package/uis/stock/dist/assets/index-3hQv8lsr.js +0 -46
- package/uis/stock/dist/assets/index-Dp4rjHQQ.css +0 -2
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "home-hosted",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.1",
|
|
5
5
|
"packageManager": "pnpm@12.5.1",
|
|
6
6
|
"description": "Self-hosted control panel that keeps your home-server processes alive: supervision, restarts, port conflicts, logs — and a UI you can replace.",
|
|
7
7
|
"author": "NamesMT <dangquoctrung123@gmail.com>",
|
|
@@ -107,6 +107,7 @@
|
|
|
107
107
|
},
|
|
108
108
|
"devDependencies": {
|
|
109
109
|
"@antfu/eslint-config": "^9.5.1",
|
|
110
|
+
"@i18n-micro/vue": "^1.4.9",
|
|
110
111
|
"@standard-schema/spec": "^1.1.0",
|
|
111
112
|
"@tailwindcss/vite": "^4.3.3",
|
|
112
113
|
"@types/node": "^24.13.3",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={"app.name":`home-hosted`,"app.tagline":`Kontrollpanel der Prozessüberwachung`,"common.cancel":`Abbrechen`,"common.confirm":`Bestätigen`,"common.reset":`Zurücksetzen`,"common.keepIt":`Beibehalten`,"common.remove":`Entfernen`,"common.close":`Schließen`,"common.save":`Speichern`,"common.saving":`Wird gespeichert…`,"common.discard":`Verwerfen`,"common.delete":`Löschen`,"common.edit":`Bearbeiten`,"common.add":`Hinzufügen`,"common.retry":`Wiederholen`,"common.copy":`Kopieren`,"common.copied":`Kopiert`,"common.enabled":`Aktiviert`,"common.disabled":`Deaktiviert`,"common.none":`Keine`,"common.unknown":`unbekannt`,"common.loading":`Wird geladen…`,"common.selectAll":`Alle auswählen`,"common.selectNone":`Nichts auswählen`,"common.name":`Name`,"common.label":`Bezeichnung`,"common.hostname":`Hostname`,"common.port":`Port`,"common.command":`Befehl`,"common.environment":`Umgebung`,"common.memory":`Speicher`,"common.cpu":`CPU`,"common.disk":`Speicherplatz`,"common.uptime":`Laufzeit`,"common.status":`Status`,"common.actions":`Aktionen`,"common.details":`Details`,"common.overview":`Übersicht`,"common.warning":`Warnung`,"common.error":`Fehler`,"common.confirmQuestion":`{label}?`,"common.unset":`nicht gesetzt`,"common.never":`nie`,"common.now":`gerade eben`,"nav.global":`Global`,"nav.workspace":`Arbeitsbereich`,"nav.others":`Sonstiges`,"nav.overview":`Übersicht`,"nav.servers":`Server`,"nav.logs":`Protokolle`,"nav.workspaceSettings":`Arbeitsbereich-Einstellungen`,"nav.globalOverview":`Globale Übersicht`,"nav.globalSettings":`Globale Einstellungen`,"nav.reverseProxy":`Reverse-Proxy`,"connection.live":`Live`,"connection.connecting":`Verbinden`,"connection.reconnecting":`Neu verbinden`,"connection.liveUpdates":`Live-Aktualisierungen`,"theme.label":`Design: {theme}`,"theme.light":`hell`,"theme.dark":`dunkel`,"theme.system":`System`,"language.label":`Sprache`,"language.select":`Sprache wählen`,"topbar.search":`Suchen oder Befehl ausführen`,"topbar.openNavigation":`Navigation öffnen`,"topbar.commandPalette":`Befehlspalette`,"topbar.account":`Konto`,"topbar.signedIn":`Angemeldet`,"topbar.signOut":`Abmelden`,"status.stopped":`Gestoppt`,"status.starting":`Startet`,"status.running":`Läuft`,"status.stopping":`Stoppt`,"status.backoff":`Neustart`,"status.crashed":`Abgestürzt`,"status.conflict":`Portkonflikt`,"health.disabled":`Nicht geprüft`,"health.unknown":`Nicht getestet`,"health.healthy":`Gesund`,"health.unhealthy":`Ungesund`,"history.start":`Gestartet`,"history.exit":`Beendet`,"history.crash":`Abgestürzt`,"history.forcedRestart":`Erzwungener Neustart`,"history.unhealthy":`Ungesund`,"history.recovered":`Wiederhergestellt`,"servers.total":{one:`{count} Server`,other:`{count} Server`},"servers.running":{one:`{count} läuft`,other:`{count} laufen`},"logs.lines":{one:`{count} Zeile`,other:`{count} Zeilen`},"days.remaining":{one:`{count} Tag`,other:`{count} Tage`},"login.title":`Anmelden, um fortzufahren`,"login.firstRunTitle":`Dieses Panel hat noch kein Passwort`,"login.firstRunSubtitle":`Alles auf dieser Maschine kann darauf zugreifen. Setzen Sie direkt nach der Anmeldung ein Passwort.`,"login.authOffTitle":`Die Authentifizierung ist ausgeschaltet`,"login.authOffSubtitle":`Das Panel lauscht nur auf Loopback — das ist derzeit der einzige Schutz.`,"login.subtitle":`Das Kontrollpanel ist geschützt. Geben Sie das Passwort ein, um fortzufahren.`,"login.password":`Passwort`,"login.showPassword":`Passwort anzeigen`,"login.hidePassword":`Passwort verbergen`,"login.signIn":`Anmelden`,"login.openDashboard":`Dashboard öffnen`,"login.exposed":`Exponiert`,"login.defaultPasswordWarning":`Noch das Standardpasswort {password} aktiv. Ändern Sie es in den Einstellungen — ein Lauschen jenseits von 127.0.0.1 wird bis dahin abgelehnt.`,"login.noPasswordWarning":`Es ist kein Passwort gesetzt. Öffnen Sie die Einstellungen auf dieser Maschine, um eines hinzuzufügen, oder führen Sie {command} aus.`,"login.sessionNote":`Sitzungen bleiben {days} Tage nach dem letzten Besuch angemeldet — jede Anfrage verlängert dieses Fenster. Abmelden betrifft nur diesen Browser.`,"login.servedFromThisMachine":`von dieser Maschine ausgeliefert`,"nav.navigation":`Navigation`,"nav.closeNavigation":`Navigation schließen`,"nav.hostVitals":`Host-Werte`,"common.dismiss":`Ausblenden`,"topbar.workspaceLabel":`Arbeitsbereich: {name}`,"palette.placeholder":`Zu einem Server springen, Aktion ausführen, Einstellung öffnen…`,"palette.openServer":`{label} öffnen`,"palette.serverLogs":`Protokolle von {label}`,"palette.startServer":`{label} starten`,"palette.stopServer":`{label} stoppen`,"palette.restartServer":`{label} neu starten`,"palette.goOverview":`Zur Übersicht`,"palette.goGlobalOverview":`Zur globalen Übersicht`,"palette.goGlobalSettings":`Zu den globalen Einstellungen`,"palette.goProxy":`Zum Reverse-Proxy`,"palette.goServers":`Zu den Servern`,"palette.goLogs":`Zu den Protokollen`,"palette.goWorkspaceSettings":`Zu den Arbeitsbereich-Einstellungen`,"palette.startAll":`Alle aktivierten Server hier starten`,"palette.stopAll":`Alle Server hier stoppen`,"palette.switchWorkspace":`Zu {label} wechseln`,"palette.globalSetting":`Globale Einstellung: {label}`,"palette.workspaceSetting":`Arbeitsbereich-Einstellung: {label}`,"palette.theme":`Design {theme}`,"palette.groupServers":`Server`,"palette.groupActions":`Aktionen`,"palette.groupNavigate":`Navigation`,"palette.groupWorkspaces":`Arbeitsbereiche`,"palette.groupAppearance":`Erscheinungsbild`,"palette.navigate":`navigieren`,"palette.run":`ausführen`,"palette.noMatches":`Nichts passt zu „{query}“.`,"palette.results":{one:`{count} Ergebnis`,other:`{count} Ergebnisse`},"workspace.new":`Neuer Arbeitsbereich`,"workspace.rename":`Arbeitsbereich umbenennen`,"workspace.create":`Arbeitsbereich erstellen`,"workspace.renameAction":`Umbenennen`,"workspace.createHint":`Eigene Einstellungen, Server, Protokolle, Geheimnisse und Sicherungseintrag — von diesem selben Panel ausgeliefert.`,"workspace.renameHint":`Nur der Name ändert sich; die Arbeitsbereich-ID bleibt, also funktionieren URLs und Pfade weiter.`,"workspace.nameHint":`Wird in der oberen Leiste angezeigt.`,"workspace.nameHintId":`Wird in der oberen Leiste angezeigt. Id: {id}`,"workspace.none":`Kein Arbeitsbereich`,"workspace.delete":`Arbeitsbereich löschen`,"notice.configError":`Die Konfiguration konnte nicht gelesen werden: {error}`,"notice.configErrorHint":`Das Panel läuft weiter mit der bisherigen Konfiguration; korrigieren Sie {path}, dann lädt es sie selbst neu.`,"notice.defaultPassword":`Dieses Panel nutzt noch sein Standardpasswort.`,"notice.defaultPasswordHint":`Ändern Sie es in den globalen Einstellungen — ein Lauschen jenseits von 127.0.0.1 wird bis dahin abgelehnt.`,"notice.noPassword":`Die Authentifizierung ist an, aber es ist kein Passwort gesetzt, also wird nichts verlangt.`,"notice.noPasswordHint":`Setzen Sie eines in den globalen Einstellungen, um das Panel wirklich zu sperren.`,"notice.exposed":`Dieses Panel ist über 127.0.0.1 hinaus erreichbar.`,"notice.exposedHint":`Halten Sie das Passwort stark, oder setzen Sie einen TLS-terminierenden Proxy davor.`,"notice.authOff":`Die Authentifizierung ist deaktiviert — das Panel ist nur durch seine Loopback-Bindung geschützt.`,"host.loadPerCpu":`Last / cpu`,"host.cpuTemp":`CPU-Temp.`,"activity.emptyTitle":`Keine Ereignisse in den letzten 24 Stunden`,"activity.emptyDescription":`Starts, Beendigungen, Abstürze und Wiederherstellungen erscheinen hier, sobald sie passieren.`,"activity.ran":`lief {duration}`,"serverCard.open":`{url} öffnen`,"serverCard.adoptedHint":`Dieser Prozess hat sich selbst ersetzt: Das Panel hat den Nachfolger übernommen, statt eine zweite Kopie zu starten. Stopp funktioniert weiterhin, seine Ausgabe bleibt dort, wohin der Nachfolger sie geschickt hat.`,"serverCard.detached":`abgekoppelt`,"serverCard.persistentHint":"Dieser Eintrag läuft unter seiner eigenen Nanny und läuft deshalb weiter, wenn das Panel stoppt, neu startet oder beendet wird. `home-hosted down` meldet ihn, statt ihn zu stoppen; nur ein ausdrücklicher Stopp tut das.","serverCard.persistent":`persistent`,"serverCard.disabled":`deaktiviert`,"serverCard.autostart":`Autostart`,"serverCard.healthProbe":`Gesundheitsprüfung`,"serverCard.notProbed":`nicht geprüft`,"serverCard.restarts":`Neustarts`,"serverCard.pid":`PID`,"serverCard.rss":`RSS`,"serverCard.procs":`Prozesse`,"serverCard.portFree":`frei`,"serverCard.portInUse":`belegt`,"serverCard.uptime24h":`24 h Laufzeit`,"serverCard.probe":`Prüfung`,"serverCard.crashes24h":`Abstürze 24 h`,"serverCard.lastCrash":`Letzter Absturz`,"serverCard.unhealthyFor":`Seit {duration} ungesund`,"serverCard.nextAttempt":`Nächster Versuch {when}`,"serverCard.start":`Starten`,"serverCard.stop":`Stoppen`,"serverCard.restart":`Neu starten`,"serverCard.detailsHint":`Live-Protokolle und vollständige Telemetrie`,"serverCard.moreActions":`Weitere Aktionen für {label}`,"serverCard.disable":`Server deaktivieren`,"serverCard.enable":`Server aktivieren`,"serverCard.removeFromAutostart":`Aus dem Autostart entfernen`,"serverCard.autostartWithPanel":`Autostart mit dem Panel`,"serverCard.clearLogBuffer":`Protokollpuffer leeren`,"serverCard.removeServer":`Server entfernen`,"serverCard.removeTitle":`Diesen Server entfernen?`,"serverCard.removeDescription":`{label} wird aus servers.config.json entfernt: sein Prozess wird gestoppt, und seine Protokolle und Absturzhistorie werden mit ihm gelöscht.`,"serverCard.statusField":`Status`,"addServer.title":`Server hinzufügen`,"addServer.description":`Hängt einen Eintrag an servers.config.json von {workspace} an; jede ausgelassene Richtlinie wird von den Standardwerten geerbt.`,"addServer.thisWorkspace":`diesem Arbeitsbereich`,"addServer.identity":`Identität`,"addServer.id":`Id`,"addServer.idHint":`Kleinbuchstaben, Ziffern, Bindestriche und Unterstriche; wird in URLs und Protokollen verwendet.`,"addServer.labelHint":`Wird im Panel angezeigt; standardmäßig die Id.`,"addServer.process":`Prozess`,"addServer.commandHint":`Wird ohne Shell gestartet.`,"addServer.argumentsHint":`Ein Argument pro Zeile; Leerzeichen innerhalb einer Zeile bleiben erhalten.`,"addServer.portLifecycle":`Port & Lebenszyklus`,"addServer.bindHint":`lan macht ihn im Netzwerk erreichbar; nur hinter einer Authentifizierung tun.`,"addServer.advanced":`Erweiterte Einstellungen`,"addServer.advancedHint":`Umgebung, Sicherungen, Richtlinie, Lebenszyklus, Bootstrap`,"addServer.backups":`Sicherungen`,"addServer.backupIgnore":`Bekannte generierte Dateien ignorieren`,"addServer.bootstrapDescription":`Ein einmaliger Befehl, der vor dem ersten Start ausgeführt wird.`,"addServer.bootstrapHint":`Installationen, Migrationen, Downloads — vor dem ersten Start, nicht bei jedem.`,"addServer.policyResources":`Richtlinie & Ressourcen`,"addServer.logBufferHint":`Leer behält den Standardwert.`,"addServer.inheritNote":`Neustart, Gesundheit und Stopp entsprechen zunächst {settings}; ändern Sie hier einen Wert, wird er in diesen Eintrag geschrieben, statt geerbt zu bleiben.`,"addServer.serverDefaults":`Einstellungen → Server-Standardwerte`,"addServer.placeholdersTitle":`Verfügbare Argument-Platzhalter`,"addServer.submit":`Zu servers.config.json hinzufügen`,"serverForm.workingDirectory":`Arbeitsverzeichnis`,"serverForm.cwdHint":`Relative Pfade werden unter projectDir aufgelöst.`,"serverForm.arguments":`Argumente`,"serverForm.portHint":`Leer bedeutet, dass der Server keinen Port zum Prüfen oder für den Vorab-Check hat.`,"serverForm.bindAddress":`Bind-Adresse`,"serverForm.autostart":`Autostart mit up`,"serverForm.autostartHint":`Starten, sobald die Steuerungsebene hochkommt.`,"serverForm.persistent":`Persistent`,"serverForm.persistentHint":"Läuft weiter, wenn das Panel stoppt; `down` meldet ihn, statt ihn zu stoppen.","serverForm.envHint":`KEY=value pro Zeile, an den Prozess exportiert.`,"serverForm.dataEnvs":`Daten-Envs`,"serverForm.dataEnvsHint":`ENV=pfad pro Zeile — an den Prozess exportiert und automatisch gesichert.`,"serverForm.envFile":`Env-Datei`,"serverForm.envFilePlaceholder":`optionale KEY=value-Datei`,"serverForm.envFileHint":`Wird beim Start geladen; ihre Werte überschreiben env.`,"serverForm.dependsOn":`Hängt ab von`,"serverForm.dependsOnHint":`Kommagetrennt; zuerst gestartet und auf Gesundheit gewartet, zuletzt gestoppt.`,"serverForm.backupPaths":`Zusätzliche Sicherungspfade`,"serverForm.backupPathsHint":`Einer pro Zeile, Platzhalter erlaubt; Daten-Envs werden bereits erfasst.`,"serverForm.backupIgnore":`Bekannte generierte Dateien beim Sichern ignorieren`,"serverForm.backupIgnoreHint":`Überspringt node_modules, dist, .next und die übrigen Caches, aus denen nichts wiederhergestellt wird.`,"serverForm.bootstrap":`Bootstrap`,"serverForm.bootstrapDescription":`Ein einmaliger Befehl vor dem ersten Start — Installationen, Migrationen, Downloads.`,"serverForm.runBootstrap":`Bootstrap ausführen`,"serverForm.bootstrapHint":`Aus bedeutet, der Eintrag hat keinen, und der Schlüssel wird als null gesendet.`,"serverForm.timeoutMs":`Timeout (ms)`,"serverForm.runOnce":`Nur einmal pro Sitzung`,"serverForm.runOnceHint":`Aus bedeutet, dass er bei jedem Start erneut läuft.`,"serverForm.bootstrapArgs":`Bootstrap-Argumente`,"serverForm.bootstrapArgsHint":`Eines pro Zeile; dieselben Platzhalter wie die Hauptargumente.`,"serverForm.bootstrapEnv":`Bootstrap-Umgebung`,"serverForm.bootstrapEnvHint":`KEY=value pro Zeile, nur an den Bootstrap-Prozess exportiert.`,"serverForm.onPortConflict":`Bei Portkonflikt`,"serverForm.logBufferLines":`Protokollpuffer-Zeilen`,"serverForm.maxRssMb":`Max. RSS (MB)`,"serverForm.maxRssHint":`Neustart oberhalb davon; leer oder 0 deaktiviert es.`,"serverForm.enabledHint":`Aus behält den Eintrag in der Konfiguration, startet ihn aber nicht.`,"bind.local":`local — 127.0.0.1`,"bind.lan":`lan — 0.0.0.0`,"bind.explicit":`{bind} — explizit`,"onPortConflict.block":`block — Start verweigern`,"onPortConflict.warn":`warn — trotzdem starten`,"onPortConflict.follow":`follow — einen abgekoppelten Neustart seiner selbst übernehmen`,"onPortConflict.reclaim":`reclaim — durch eine überwachte Kopie ersetzen`,"onPortConflict.kill":`kill — beenden, was den Port belegt`,"editor.title":`Konfiguration bearbeiten`,"editor.description":`Schreibt Überschreibungen nach {file}; alles Unberührte erbt weiter die Standardwerte.`,"editor.unsaved":{one:`ungespeicherte Änderung`,other:`ungespeicherte Änderungen`},"editor.inSync":`synchron`,"editor.process":`Prozess`,"editor.processDescription":`Was gestartet wird, wo und mit welcher Umgebung.`,"editor.labelPlaceholder":`fällt auf die Id zurück`,"editor.argumentsHint":`Eines pro Zeile; {port} {host} {home} {projectDir} {dataRoot} {id} {label} {cwd} {bind} {lanIp} werden ersetzt.`,"editor.portTitle":`Port & Bindung`,"editor.portDescription":`Wie der Port vorab geprüft wird und wo der Prozess erreichbar ist.`,"editor.bindHint":`Eine eigene IPv4, die die Konfiguration bereits setzt, bleibt auswählbar.`,"editor.lifecycle":`Lebenszyklus`,"editor.lifecycleDescription":`Ob der Supervisor diesen Eintrag überhaupt besitzt.`,"editor.save":`In servers.config.json speichern`,"editor.changesTitle":`Ungespeicherte Änderungen`,"editor.changesDescription":`Was Speichern in servers.config.json schreiben würde.`,"editor.nothingToSave":`Nichts zu speichern.`,"editor.saveChanges":{one:`{count} Änderung speichern`,other:`{count} Änderungen speichern`},"lifecycle.restartTitle":`Neustartrichtlinie`,"lifecycle.restartDescription":`Backoff zwischen den Versuchen nach einem Absturz.`,"lifecycle.restartOnCrash":`Neustart nach Absturz`,"lifecycle.maxRetries":`Max. Wiederholungen`,"lifecycle.maxRetriesHint":`Versuche, bevor der Server abgestürzt belassen wird.`,"lifecycle.baseDelay":`Basisverzögerung (ms)`,"lifecycle.factor":`Backoff-Faktor`,"lifecycle.maxDelay":`Max. Verzögerung (ms)`,"lifecycle.resetAfter":`Zurücksetzen nach (ms)`,"lifecycle.resetAfterHint":`Ein Lauf dieser Länge setzt den Wiederholungszähler zurück.`,"lifecycle.healthTitle":`Gesundheitsprüfung`,"lifecycle.healthDescription":`Wie die Bereitschaft geprüft wird, sobald der Prozess läuft.`,"lifecycle.probe":`Diesen Server prüfen`,"lifecycle.probeType":`Prüftyp`,"lifecycle.probePort":`TCP-Port — nur Verbindung`,"lifecycle.probeHttp":`HTTP-Anfrage — Antwort prüfen`,"lifecycle.interval":`Intervall (ms)`,"lifecycle.timeout":`Timeout (ms)`,"lifecycle.unhealthyAfter":`Ungesund nach`,"lifecycle.unhealthyAfterHint":`Aufeinanderfolgende fehlgeschlagene Prüfungen.`,"lifecycle.forceRestartAfter":`Erzwungener Neustart nach (ms)`,"lifecycle.forceRestartAfterHint":`0 deaktiviert es.`,"lifecycle.startTimeout":`Start-Timeout (ms)`,"lifecycle.httpPath":`HTTP-Pfad`,"lifecycle.httpMethod":`HTTP-Methode`,"lifecycle.expectStatus":`Status erwarten`,"lifecycle.expectStatusHint":`Leer akzeptiert alles darunter.`,"lifecycle.expectStatusBelow":`Gesund unter Status`,"lifecycle.expectBody":`Body muss enthalten`,"lifecycle.expectBodyPlaceholder":`optionaler Teilstring`,"lifecycle.headBodyHint":`HEAD hat keinen Antwort-Body, daher wird diese Prüfung ignoriert — verwenden Sie GET oder leeren Sie sie.`,"lifecycle.stopTitle":`Stoppverhalten`,"lifecycle.stopDescription":`Wie der Prozessbaum zum Beenden aufgefordert wird.`,"lifecycle.signal":`Signal`,"lifecycle.signalTerm":`SIGTERM — zum Stoppen auffordern`,"lifecycle.signalInt":`SIGINT — unterbrechen (Strg-C)`,"lifecycle.signalKill":`SIGKILL — sofort beenden`,"lifecycle.grace":`Karenzzeit (ms)`,"lifecycle.killGroup":`Die ganze Prozessgruppe beenden`,"lifecycle.killPortHolders":`Auch beenden, was den Port belegt`,"killPort.trigger":`Beenden, was Port {port} belegt`,"killPort.title":`Den Prozess auf Port {port} beenden?`,"killPort.body":`Er wird zuerst zum Stoppen aufgefordert und nur beendet, wenn er das ignoriert. Alles, was dieses Panel überwacht, wird abgelehnt, ein verwalteter Server kann so nicht verloren gehen.`,"killPort.confirm":`Beenden`,"logs.emptyHint":`Noch keine Ausgabe.`,"logs.noMatches":`Nichts passt zu dieser Suche oder diesem Stream-Filter.`,"logs.searchPlaceholder":`Diese Ausgabe durchsuchen`,"logs.searchLabel":`Die Protokollausgabe durchsuchen`,"logs.clearSearch":`Die Suche leeren`,"logs.prevMatch":`Vorheriger Treffer`,"logs.nextMatch":`Nächster Treffer`,"logs.showTimestamps":`Zeitstempel anzeigen`,"logs.hideTimestamps":`Zeitstempel ausblenden`,"logs.timestampsShort":`ts`,"logs.pause":`Pause`,"logs.follow":`Folgen`,"logs.clearHint":`Den Puffer im Speicher leeren`,"logs.clearLabel":`Den Protokollpuffer leeren`,"logs.downloadHint":`Die gespeicherte Datei herunterladen`,"logs.downloadLabel":`Die Protokolldatei herunterladen`,"logs.outputLabel":`Protokollausgabe`,"logs.jumpToLatest":`Zum Neuesten springen`,"logs.streaming":`Streaming`,"logs.paused":`pausiert`,"logs.snapshot":`Momentaufnahme`,"logs.linesOf":`{count} von {total} Zeilen`,"logs.matches":`{count} Treffer`,"logs.rowHeight":`Zeilenhöhe {height}px · gefenstert`,"logs.streamAll":`Alle`,"logs.streamOut":`out`,"logs.streamErr":`err`,"logs.streamSys":`sys`,"metric.emptyHint":`sammle…`,"host.samplingOff":`Host-Sampling ist aus`,"host.samplingOffDescription":`Aktivieren Sie es in den Einstellungen, um Last, Speicher, Speicherplatz und Temperatur zu erfassen.`,"host.swap":`Swap`,"host.cpus":`CPUs`,"host.loadAverage":`Last 1 / 5 / 15`,"host.memoryUsed":`Speicher belegt`,"host.sampled":`Erfasst`,"host.filesystems":`Dateisysteme`,"host.thresholdsBreached":`Schwellenwerte überschritten`,"validation.port":`Der Port muss eine ganze Zahl zwischen 1 und 65535 sein.`,"validation.idRequired":`Eine Id ist erforderlich — sie ist der Schlüssel, unter dem dieser Server läuft.`,"validation.idPattern":`Die Id muss mit einem Kleinbuchstaben oder einer Ziffer beginnen und darf nur Kleinbuchstaben, Ziffern, Bindestriche und Unterstriche enthalten.`,"validation.commandRequired":`Ein Befehl ist erforderlich — die ausführbare Datei, die der Supervisor startet.`,"validation.bootstrapCommand":`Ein Bootstrap braucht einen auszuführenden Befehl.`,"settings.shell.fieldsChanged":{one:`Feld geändert`,other:`Felder geändert`},"settings.shell.noUnsavedChanges":`Keine ungespeicherten Änderungen`,"settings.shell.discard":`Änderungen verwerfen`,"settings.shell.save":`Einstellungen speichern`,"settings.shell.unsavedTitle":`Ungespeicherte Änderungen`,"settings.shell.nothingToSave":`Nichts zu speichern.`,"settings.shell.saveChanges":{one:`{count} Änderung speichern`,other:`{count} Änderungen speichern`},"settings.auth.policyTitle":`Zugriffsrichtlinie`,"settings.auth.policyDescription":`Die Authentifizierung gilt unabhängig davon, ob das Panel auf Loopback läuft oder im Netzwerk exponiert ist.`,"settings.auth.requirePassword":`Passwort verlangen`,"settings.auth.requirePasswordHint":`Jede Anfrage braucht eine angemeldete Sitzung.`,"settings.auth.sessionLifetime":`Sitzungsdauer (ms)`,"settings.auth.sessionLifetimeHint":`Leerlauf-Timeout: 604800000 ist eine Woche ohne Aktivität. Jede Anfrage startet sie neu.`,"settings.auth.cookieSecure":`Cookie Secure`,"settings.auth.cookieSecureAuto":`Auto — nur über HTTPS`,"settings.auth.cookieSecureAlways":`Immer`,"settings.auth.cookieSecureNever":`Nie — reines HTTP`,"settings.auth.trustProxy":`Hinter einem Reverse-Proxy`,"settings.auth.trustProxyOff":`Nein — x-forwarded-* ignorieren`,"settings.auth.trustProxyLoopback":`Ja, nur von dieser Maschine`,"settings.auth.trustProxyAny":`Ja, von jedem Aufrufer`,"settings.auth.trustProxyHint":`x-forwarded-* für Client-Adresse und Protokoll vertrauen. „Nur von dieser Maschine“ ist die sichere Wahl für einen Proxy auf demselben Host. „Von jedem Aufrufer“ glaubt dem eigenen Header des Aufrufers, daher zählt die Login-Sperre pro gefälschter Adresse und lässt sich umgehen.`,"settings.auth.maxLoginAttempts":`Max. Anmeldeversuche`,"settings.auth.maxLoginAttemptsHint":`Fehlversuche vor einer vorübergehenden Sperre.`,"settings.auth.lockout":`Sperre (ms)`,"settings.auth.apiTokenSet":`Ein API-Token ist gesetzt`,"settings.auth.apiTokenMissing":`Kein API-Token`,"settings.auth.apiTokenNote":`Skripte können die API mit {code} aufrufen, statt sich anzumelden.`,"settings.auth.noTokenNote":`Für Shell-Skripte und Agenten erzeugen Sie eines mit {command}.`,"settings.auth.defaultPasswordTitle":`Das Standardpasswort ist noch in Verwendung`,"settings.auth.defaultPasswordText":`Setzen Sie unten ein eigenes Passwort. Ein Lauschen jenseits von {address} wird bis dahin abgelehnt.`,"settings.auth.blockedTitle":`Dieser Listener wird abgelehnt`,"settings.auth.noPasswordTitle":`Authentifizierung ist an, aber kein Passwort gesetzt`,"settings.auth.noPasswordText":`Es wird noch nichts verlangt, und ein Lauschen jenseits von {address} bleibt abgelehnt, bis ein Passwort existiert.`,"settings.auth.exposedTitle":`Über 127.0.0.1 hinaus erreichbar`,"settings.auth.exposedText":`Halten Sie das Passwort stark, oder setzen Sie einen TLS-terminierenden Proxy vor das Panel.`,"settings.auth.changePassword":`Passwort ändern`,"settings.auth.setPassword":`Passwort setzen`,"settings.auth.passwordDescription":`Wird als scrypt-Hash in der Geheimnisdatei gespeichert, nie in der Konfiguration.`,"settings.auth.currentPassword":`Aktuelles Passwort`,"settings.auth.newPassword":`Neues Passwort`,"settings.auth.repeatPassword":`Neues Passwort wiederholen`,"settings.auth.passwordMismatch":`Die beiden Passwörter stimmen nicht überein.`,"settings.auth.updatePassword":`Passwort aktualisieren`,"settings.auth.setPasswordAndEnable":`Passwort setzen und Authentifizierung aktivieren`,"settings.auth.clearPassword":`Passwort löschen`,"settings.auth.clearPasswordConfirm":`Löschen bestätigen`,"settings.auth.clearPasswordTitle":`Das Passwort löschen?`,"settings.auth.clearPasswordHint":`Damit wird die Authentifizierung abgeschaltet, und jeder, der das Panel erreicht, kommt direkt hinein.`,"settings.auth.shortPasswordTitle":`Das ist ein kurzes Passwort`,"settings.auth.shortPasswordText":`Es ist erlaubt, aber Länge ist das Einzige, was zwischen dem Netzwerk und diesem Panel steht.`,"settings.auth.passwordUpdated":`Passwort aktualisiert. Andere Sitzungen wurden abgemeldet.`,"settings.auth.passwordCleared":`Passwort gelöscht und Authentifizierung deaktiviert.`,"settings.backup.createTitle":`Sicherung erstellen`,"settings.backup.createDescription":`Wählen Sie, was dieses Archiv erfasst. Nichts wird geschrieben, bis Sie es erstellen.`,"settings.backup.entriesCount":{one:`{count} Eintrag`,other:`{count} Einträge`},"settings.backup.itemsSelected":{one:`{count} Element ausgewählt`,other:`{count} Elemente ausgewählt`},"settings.backup.chooseItems":`Elemente wählen`,"settings.backup.partialCapture":`Nur die gewählten Elemente werden erfasst.`,"settings.backup.withoutGlobalSettings":`Ohne die globalen Einstellungen kann eine Wiederherstellung einen Arbeitsbereich nur dort platzieren, wo das Zielpanel ihn bereits kennt.`,"settings.backup.password":`Passwort (optional)`,"settings.backup.passwordHint":`Verschlüsselt das Archiv; beim Wiederherstellen wird dasselbe Passwort verlangt.`,"settings.backup.create":`Sicherung erstellen`,"settings.backup.chooseItemsFor":`{label} — Elemente wählen`,"settings.backup.subDescription":`Ein Arbeitsbereich kann ganz erfasst werden oder nur mit seinen Einstellungen, Servern, Geheimnissen und deklarierten Datenpfaden.`,"settings.backup.selectedOf":`{selected} von {total} ausgewählt`,"settings.backup.nothingSelectable":`Dieser Arbeitsbereich deklariert noch nichts Auswählbares.`,"settings.backup.apply":`Übernehmen`,"settings.backup.created":`Sicherung erstellt.`,"settings.backup.leafSettingsHint":`Server-Standardwerte, Protokollaufbewahrung und Benachrichtigungen`,"settings.backup.leafServersHint":`Jeder Eintrag in servers.config.json`,"settings.backup.leafSecretsHint":`Telegram-Bot-Token und DDNS-Zugangsdaten`,"settings.backup.leafDataHint":`Ein deklarierter Datenpfad`,"settings.backup.pathFromOrigin":`{path} — von {origin}`,"settings.backup.entrySettingsHint":`Listener, Authentifizierung, Host-Werte und die Sicherungsrichtlinie`,"settings.backup.entrySecretsHint":`Passwort-Hash und API-Token-Hash`,"settings.backup.entryTlsHint":`Das eigene Zertifikatspaar des Panels`,"settings.backup.entryWorkspaceHint":`Seine Einstellungen, Server, Geheimnisse und deklarierten Datenpfade`,"settings.backups.policyTitle":`Richtlinie`,"settings.backups.policyDescription":`Wie viele Archive das Panel behält und welche zusätzlichen Pfade jedes davon erfasst.`,"settings.backups.allow":`Sicherungen erlauben`,"settings.backups.allowHint":`Aus stoppt neue Archive; was bereits auf der Platte liegt, bleibt herunterladbar und wiederherstellbar.`,"settings.backups.offTitle":`Sicherungen sind aus`,"settings.backups.offText":`Nichts Neues wird archiviert, bis dies wieder an ist. Die Archive unten können weiterhin heruntergeladen, wiederhergestellt und gelöscht werden.`,"settings.backups.keep":`Behalten`,"settings.backups.keepHint":`Ältere Archive werden nach jeder Sicherung entfernt.`,"settings.backups.extraPaths":`Zusätzliche Pfade`,"settings.backups.extraPathsHint":`Kommagetrennt, in jedem Archiv zusätzlich zu dem erfasst, was jeder Arbeitsbereich deklariert.`,"settings.backups.extraPathsPlaceholder":`{home}/myapp-data`,"settings.backups.archiveDirectory":`Archivverzeichnis`,"settings.backups.copyArchiveDirectory":`Das Archivverzeichnis kopieren`,"settings.backups.changeDirectory":`Eine Änderung ist eine Entscheidung auf Dateiebene: bearbeiten Sie {path}.`,"settings.backups.theSettingsFile":`die Einstellungsdatei`,"settings.backups.capturesTitle":`Was eine Sicherung erfasst`,"settings.backups.capturesDescription":`Wählen Sie diese im Erstellen-Dialog. Ein Arbeitsbereich kann ganz genommen werden oder nur mit seinen Einstellungen, Servern, Geheimnissen und deklarierten Datenpfaden.`,"settings.backups.nothingSelectable":`Noch ist nichts auswählbar.`,"settings.backups.fromOrigin":`von {origin}`,"settings.backups.notCaptured":`nicht erfasst`,"settings.backups.generatedSkipped":`generierte Verzeichnisse übersprungen`,"settings.backups.included":`enthalten`,"settings.backups.skipped":`übersprungen`,"settings.backups.workspacesNote":`Dieses Panel bedient {count} Arbeitsbereiche; jeder ist ein eigener auswählbarer Eintrag.`,"settings.backups.archivesTitle":`Archive`,"settings.backups.archivesDescription":`Im Sicherungsverzeichnis gespeichert und jederzeit herunterladbar.`,"settings.backups.create":`Sicherung erstellen…`,"settings.backups.restore":`Wiederherstellen…`,"settings.backups.noArchives":`Noch keine Archive`,"settings.backups.noArchivesEnabled":`Erstellen Sie jetzt eine, um das Panel und die gewählten Arbeitsbereiche zu erfassen.`,"settings.backups.noArchivesDisabled":`Es wurde noch nichts archiviert, und Sicherungen sind aus.`,"settings.backups.encrypted":`verschlüsselt`,"settings.backups.download":`Herunterladen`,"settings.backups.restoreAction":`Wiederherstellen`,"settings.backups.confirmDelete":`Löschen bestätigen`,"settings.backups.deleted":`{name} gelöscht.`,"settings.backups.kindSettings":`Einstellungen`,"settings.backups.kindServers":`Server`,"settings.backups.kindSecrets":`Geheimnisse`,"settings.backups.kindTls":`tls`,"settings.backups.kindData":`Daten`,"settings.ddns.statePending":`Wartet`,"settings.ddns.stateOk":`Aktualisiert`,"settings.ddns.stateUnchanged":`Aktuell`,"settings.ddns.stateSkipped":`Übersprungen`,"settings.ddns.stateError":`Fehlgeschlagen`,"settings.ddns.passFinished":`Dynamic-DNS-Durchlauf beendet`,"settings.ddns.credentialsSaved":`Zugangsdaten für {account} gespeichert`,"settings.ddns.credentialsRemoved":`Zugangsdaten für {account} entfernt`,"settings.ddns.loadErrorTitle":`Dynamic-DNS-Einstellungen konnten nicht geladen werden`,"settings.ddns.title":`Dynamic DNS`,"settings.ddns.description":`Halten Sie diese Hostnamen auf die öffentliche Adresse dieser Maschine gerichtet. Zugangsdaten liegen in der Geheimnisdatei, nie in servers.config.json.`,"settings.ddns.checking":`wird geprüft`,"settings.ddns.needsAttention":`braucht Aufmerksamkeit`,"settings.ddns.watching":`überwacht`,"settings.ddns.updateNow":`Jetzt aktualisieren`,"settings.ddns.enabled":`Dynamic DNS aktuell halten`,"settings.ddns.enabledHint":`Ein Durchlauf erfolgt im untenstehenden Intervall; ein Anbieter wird nur aufgerufen, wenn sich die Adresse tatsächlich geändert hat.`,"settings.ddns.interval":`Prüfen alle (ms)`,"settings.ddns.intervalHint":`60000 ist eine Minute; der Standardwert sind fünf.`,"settings.ddns.ttl":`TTL (s)`,"settings.ddns.ttlHint":`1 bedeutet automatisch, wo der Anbieter das unterstützt.`,"settings.ddns.detectIpv4":`IPv4 ermitteln`,"settings.ddns.detectIpv4Hint":`Nötig für A-Einträge.`,"settings.ddns.detectIpv6":`IPv6 ermitteln`,"settings.ddns.detectIpv6Hint":`Nötig für AAAA-Einträge.`,"settings.ddns.accountsTitle":`Anbieterkonten`,"settings.ddns.accountsDescription":`Ein Eintrag pro API-Token. Zugangsdaten werden auf dem Server gespeichert und kommen nie zurück.`,"settings.ddns.hostnameCount":{one:`{count} Hostname`,other:`{count} Hostnamen`},"settings.ddns.credentialsSet":`Zugangsdaten gespeichert`,"settings.ddns.noCredentials":`keine Zugangsdaten`,"settings.ddns.credentials":`Zugangsdaten`,"settings.ddns.removeAccountBlocked":`Entfernen Sie zuerst die Hostnamen, die dieses Konto verwenden`,"settings.ddns.noAccounts":`Noch keine Konten. Wählen Sie einen Anbieter und fügen Sie eines hinzu.`,"settings.ddns.provider":`Anbieter`,"settings.ddns.accountId":`Konto-Id`,"settings.ddns.accountIdPlaceholder":`cloudflare-home`,"settings.ddns.accountIdHint":"Die Konto-Id benennt das Konto und verschlüsselt seine gespeicherten Zugangsdaten; Kleinbuchstaben, Ziffern, `-` und `_`.","settings.ddns.hostnamesTitle":`Hostnamen`,"settings.ddns.hostnamesDescription":`Die ganze Liste, die aktuell gehalten wird — suba.domain.com, domain.xyz und so weiter.`,"settings.ddns.account":`Konto`,"settings.ddns.recordA":`A (IPv4)`,"settings.ddns.recordAaaa":`AAAA (IPv6)`,"settings.ddns.aaaaUnsupported":`Dieser Anbieter kann keine AAAA-Einträge verwalten.`,"settings.ddns.proxied":`Proxied`,"settings.ddns.proxiedHint":`Cloudflare liefert diesen Eintrag über sein eigenes Netzwerk aus.`,"settings.ddns.ipv6Off":`IPv6-Erkennung ist aus`,"settings.ddns.advanced":`Erweitert`,"settings.ddns.advancedHint":`registrierte Domain und TTL-Überschreibung`,"settings.ddns.registeredDomain":`Registrierte Domain`,"settings.ddns.registeredDomainPlaceholder":`example.co.uk`,"settings.ddns.registeredDomainHint":`Nur wenn dem Anbieter die Apex mitgeteilt werden muss, z. B. bei Domains mit drei Labels.`,"settings.ddns.ttlOverride":`TTL-Überschreibung (s)`,"settings.ddns.ttlOverrideHint":`Leer verwendet den Wert oben.`,"settings.ddns.noHostnames":`Noch keine Hostnamen.`,"settings.ddns.hostnamePlaceholder":`home.example.com`,"settings.ddns.lastPass":`Letzter Durchlauf`,"settings.ddns.ipv4Value":`IPv4 {address}`,"settings.ddns.ipv6Value":`IPv6 {address}`,"settings.ddns.type":`Typ`,"settings.ddns.state":`Zustand`,"settings.ddns.address":`Adresse`,"settings.ddns.detail":`Detail`,"settings.ddns.credentialsTitle":`Anbieter-Zugangsdaten`,"settings.ddns.credentialsDescription":`Gespeicherte Felder werden nie zurückgesendet. Speichern ersetzt jedes Feld für dieses Konto und führt sofort einen Durchlauf aus.`,"settings.ddns.optional":`Optional.`,"settings.ddns.whereToGet":`Woher Sie diese bekommen`,"settings.ddns.forget":`Verwerfen`,"settings.ddns.forgetConfirm":`Verwerfen`,"settings.ddns.forgetTitle":`Die gespeicherten Zugangsdaten verwerfen?`,"settings.ddns.forgetHint":`Sie werden von der Platte entfernt und lassen sich nicht zurücklesen; Sie müssten sie erneut einfügen.`,"settings.ddns.saveCredentials":`Zugangsdaten speichern`,"settings.defaults.title":`Server-Standardwerte`,"settings.defaults.description":`Gelten für jeden Eintrag, der keinen eigenen Wert setzt.`,"settings.defaults.enabledHint":`Neue Einträge starten aktiviert.`,"settings.defaults.autostart":`Autostart mit dem Panel`,"settings.defaults.bind":`Bindung`,"settings.defaults.bindLocal":`Lokal — 127.0.0.1`,"settings.defaults.bindLan":`LAN — 0.0.0.0`,"settings.defaults.onPortConflict":`Bei Portkonflikt`,"settings.defaults.conflictBlock":`Den Start blockieren`,"settings.defaults.conflictWarn":`Warnen und trotzdem starten`,"settings.defaults.conflictFollow":`Einem abgekoppelten Neustart seiner selbst folgen`,"settings.defaults.conflictReclaim":`Einen abgekoppelten Neustart durch eine überwachte Kopie ersetzen`,"settings.defaults.conflictKill":`Beenden, was den Port belegt`,"settings.defaults.logBufferLines":`Protokollpuffer-Zeilen`,"settings.defaults.logBufferLinesHint":`Pro Server im Speicher gehalten.`,"settings.host.title":`Schwellenwerte`,"settings.host.description":`Ein Schwellenwert von 0 deaktiviert diesen Alarm. Überschreitungen melden einmal und bei Erholung noch einmal.`,"settings.host.enabled":`Diese Maschine erfassen`,"settings.host.enabledHint":`Last, Speicher, Swap, Speicherplatz und CPU-Temperatur, im untenstehenden Intervall.`,"settings.host.interval":`Intervall (ms)`,"settings.host.intervalHint":`Wie oft der Host erfasst und Alarme geprüft werden.`,"settings.host.diskPaths":`Speicherplatz-Pfade`,"settings.host.diskPathsHint":`Kommagetrennt; Vorlagen wie {home} werden erweitert.`,"settings.host.diskUsed":`Speicherplatz belegt (%)`,"settings.host.memoryUsed":`Speicher belegt (%)`,"settings.host.swapUsed":`Swap belegt (%)`,"settings.host.zeroDisables":`0 deaktiviert den Alarm.`,"settings.host.loadPerCpu":`Last pro CPU`,"settings.host.loadPerCpuHint":`1-Minuten-Lastdurchschnitt geteilt durch die Kernzahl.`,"settings.host.tempCelsius":`CPU-Temperatur (°C)`,"settings.host.tempCelsiusHint":`Nur Linux; wird ignoriert, wo das Betriebssystem sie nicht bereitstellt.`,"settings.host.breachingNow":`Aktuell überschritten:`,"settings.host.nothingBreaching":`Derzeit wird nichts überschritten.`,"settings.interface.title":`Oberfläche`,"settings.interface.description":`Das Panel ist eine statische Seite: Behalten Sie die mitgelieferte, oder liefern Sie Ihren eigenen Build aus dem Statusverzeichnis aus.`,"settings.interface.currentlyServing":`Wird derzeit ausgeliefert`,"settings.interface.copyDirectory":`Das UI-Verzeichnis kopieren`,"settings.interface.fileCount":`{count} Dateien`,"settings.interface.sourceStock":`mitgeliefert`,"settings.interface.sourceCustom":`eigene`,"settings.interface.unnamed":`unbenannt`,"settings.interface.panelVersion":`Panel-Version`,"settings.interface.copyPanelVersion":`Die Panel-Version kopieren`,"settings.interface.panelVersionHint":`Die Version, die dieser Panel-Prozess ausführt — {command} gibt dieselbe Nummer aus.`,"settings.interface.panelName":`Panel-Name`,"settings.interface.panelNameHint":`Wird von der mitgelieferten UI in der Seitenleiste angezeigt. Eine eigene UI kann stattdessen ihren eigenen Namen zeigen.`,"settings.interface.uploadLabel":`Einen UI-Build hochladen (.zip mit einer index.html)`,"settings.interface.docsHint":`Siehe {docs} für den API-Vertrag. Wenn eine eigene UI das Panel lahmlegt, setzt {command} vom Terminal aus die mitgelieferte wieder ein.`,"settings.interface.resetName":`Namen zurücksetzen`,"settings.interface.confirmRevert":`Zurücksetzen bestätigen`,"settings.interface.revertToStock":`Auf mitgelieferte zurücksetzen`,"settings.interface.install":`UI installieren`,"settings.interface.installed":`UI durch {name} ersetzt — laden Sie die Seite neu`,"settings.interface.yourBuild":`Ihr Build`,"settings.interface.restored":`mitgelieferte UI wiederhergestellt — laden Sie die Seite neu`,"settings.interface.nothingInstalled":`es war keine eigene UI installiert`,"settings.listener.title":`Listener`,"settings.listener.description":`Wo das Panel antwortet. Eine Änderung startet das Panel neu und schickt diese Seite an die neue Adresse.`,"settings.listener.port":`Steuerport`,"settings.listener.portHint":`Standard 3999.`,"settings.listener.bind":`Bindung`,"settings.listener.bindLocal":`Lokal`,"settings.listener.bindLan":`LAN`,"settings.listener.bindCustom":`Benutzerdefiniert`,"settings.listener.bindLanHint":`0.0.0.0 — aus dem ganzen Netzwerk erreichbar.`,"settings.listener.bindLocalHint":`127.0.0.1 — nur diese Maschine.`,"settings.listener.bindCustomHint":`Eine bestimmte Schnittstellenadresse, die Sie unten eingeben.`,"settings.listener.ipv4":`IPv4-Adresse`,"settings.listener.ipv4Placeholder":`192.168.1.20`,"settings.listener.ipv4Error":`Geben Sie eine IPv4-Adresse ein, zum Beispiel 192.168.1.20.`,"settings.listener.ipv4Hint":`Ein Lauschen jenseits von 127.0.0.1 braucht ein echtes Passwort.`,"settings.listener.openBrowser":`Einen Browser öffnen, wenn das Panel hochkommt`,"settings.listener.liveAddress":`Live-Adresse`,"settings.listener.restartRequired":`Neustart erforderlich`,"settings.listener.copyLiveAddress":`Die Live-Adresse kopieren`,"settings.listener.liveAddressHint":`Woran der Listener gerade gebunden ist; gespeicherte Änderungen wirken, sobald das Panel neu bindet.`,"settings.logs.title":`Aufbewahrung`,"settings.logs.description":`Die Live-Ansicht kommt immer aus dem Speicher; diese Dateien überleben einen Neustart und speisen die Protokollseite.`,"settings.logs.persist":`Protokolle auf der Platte behalten`,"settings.logs.persistHint":`Ausschalten, um alles nur im Speicher zu halten.`,"settings.logs.maxBytes":`Rotieren bei (Bytes)`,"settings.logs.maxBytesHint":`Pro Server, bevor auf .1, .2, … gerollt wird`,"settings.logs.keep":`Rotierte Dateien behalten`,"settings.logs.directory":`Protokollverzeichnis`,"settings.logs.copyDirectory":`Das Protokollverzeichnis kopieren`,"settings.logs.browseHint":`Diese Dateien auf der Seite {logs} durchsuchen und herunterladen.`,"settings.telegram.title":`Telegram`,"settings.telegram.description":`Die Richtlinie liegt in der Konfiguration; das Bot-Token ist ein Geheimnis und kommt nie vom Server zurück.`,"settings.telegram.enabled":`Benachrichtigungen senden`,"settings.telegram.enabledHint":`Eine Nachricht pro Ereignis, gedrosselt durch die untenstehende Abklingzeit.`,"settings.telegram.chatId":`Chat-Id`,"settings.telegram.chatIdPlaceholder":`123456789 oder @channel`,"settings.telegram.chatIdHint":`Nutzen Sie Chats erkennen, um dies aus den Updates des Bots zu füllen.`,"settings.telegram.cooldown":`Abklingzeit pro Ereignis (ms)`,"settings.telegram.cooldownHint":`Pro Server und Grund, damit ein flatternder Server nicht spammen kann.`,"settings.telegram.onCrash":`Wiederholungen erschöpft`,"settings.telegram.onUnhealthy":`Port ungesund`,"settings.telegram.onForcedRestart":`Erzwungener Neustart`,"settings.telegram.onRecovered":`Wiederhergestellt`,"settings.telegram.onHost":`Host-Werte überschritten`,"settings.telegram.onHostHint":`Speicherplatz, Speicher, Swap, Last und CPU-Temperatur, gemäß den Schwellenwerten unter Host-Werte.`,"settings.telegram.onDdns":`Dynamic DNS geändert oder fehlgeschlagen`,"settings.telegram.onDdnsHint":`Eine Nachricht pro Durchlauf, der einen Eintrag geändert hat, und eine für einen fehlgeschlagenen Durchlauf.`,"settings.telegram.botToken":`Bot-Token`,"settings.telegram.tokenSet":`Token gesetzt`,"settings.telegram.noToken":`kein Token`,"settings.telegram.tokenNote":`Von @BotFather — ein Geheimnis, nie in servers.config.json.`,"settings.telegram.tokenPlaceholder":`123456789:AA…`,"settings.telegram.tokenSavedPlaceholder":`Gespeichert — geben Sie ein neues Token ein, um es zu ersetzen`,"settings.telegram.saveToken":`Token speichern`,"settings.telegram.detectChats":`Chats erkennen`,"settings.telegram.sendTest":`Test senden`,"settings.telegram.removeToken":`Token entfernen`,"settings.telegram.removeTokenConfirm":`Entfernen bestätigen`,"settings.telegram.removeTokenTitle":`Das Bot-Token entfernen?`,"settings.telegram.removeTokenHint":`Benachrichtigungen hören auf, bis Sie wieder ein Token einfügen.`,"settings.telegram.tokenSaved":`Token gespeichert.`,"settings.telegram.tokenSavedFor":`Token für @{username} gespeichert.`,"settings.telegram.tokenRemoved":`Token entfernt.`,"settings.telegram.noChats":`Keine Chats gefunden. Senden Sie zuerst /start an den Bot und erkennen Sie dann erneut.`,"settings.telegram.testSent":`Testnachricht gesendet.`,"settings.telegram.testFailed":`Die Testnachricht ist fehlgeschlagen.`,"settings.telegram.chatsSeen":`Chats, die der Bot gesehen hat:`,"settings.telegram.lastSend":`Letzter Versand: {result}`,"settings.tls.title":`HTTPS`,"settings.tls.description":`Laden Sie ein PEM-Paar hoch, und das Panel liefert TLS auf seinem eigenen Listener. Ein selbstsigniertes Zertifikat ist im Heimnetz in Ordnung.`,"settings.tls.serve":`Das Panel über HTTPS ausliefern`,"settings.tls.serveHint":`Wird mit Einstellungen speichern gespeichert; das Panel bindet neu und diese Seite folgt ihm.`,"settings.tls.certificateTitle":`Zertifikat`,"settings.tls.certificateDescription":`PEM-kodiertes Zertifikat und sein privater Schlüssel. Beide bleiben in der Geheimnisdatei.`,"settings.tls.unusableTitle":`Das gespeicherte Zertifikat ist nicht verwendbar`,"settings.tls.subject":`Subjekt`,"settings.tls.issuer":`Aussteller`,"settings.tls.validUntil":`Gültig bis`,"settings.tls.days":`{count} Tage`,"settings.tls.privateKey":`Privater Schlüssel`,"settings.tls.keyMatches":`passt zum Zertifikat`,"settings.tls.keyMismatch":`passt nicht`,"settings.tls.fingerprint":`Fingerabdruck`,"settings.tls.copyFingerprint":`Den Fingerabdruck kopieren`,"settings.tls.noCertificateTitle":`Kein Zertifikat hochgeladen`,"settings.tls.noCertificateText":`Laden Sie unten ein PEM-Zertifikat und einen Schlüssel hoch und speichern Sie dann. HTTPS wird erst ausgeliefert, wenn ein Zertifikat vorhanden ist.`,"settings.tls.certFile":`Zertifikatsdatei (.pem, .crt)`,"settings.tls.keyFile":`Datei mit privatem Schlüssel (.pem, .key)`,"settings.tls.pasteCertificate":`Oder das Zertifikat einfügen`,"settings.tls.pasteKey":`Oder den privaten Schlüssel einfügen`,"settings.tls.saveCertificate":`Zertifikat speichern`,"settings.tls.removeCertificate":`Zertifikat entfernen`,"settings.tls.confirmRemove":`Entfernen bestätigen`,"settings.tls.removeTitle":`Das Zertifikat entfernen?`,"settings.tls.removeHint":`TLS bleibt an, hat aber nichts auszuliefern, daher fällt das Panel auf http zurück, sobald der Listener neu bindet.`,"settings.tls.stored":`Zertifikat gespeichert.`,"settings.tls.removed":`Zertifikat entfernt.`,"settings.paths.dataRoot":`Datenwurzel`,"settings.paths.dataRootHint":`HHOSTED_HOME — globale Einstellungen, Arbeitsbereiche, TLS, Sicherungen und die UI.`,"settings.paths.globalSettings":`Globale Einstellungen`,"settings.paths.globalSettingsHint":`settings.json — Listener, Authentifizierung, TLS-Richtlinie, Host-Werte, Sicherungen.`,"settings.paths.projectDir":`Projektverzeichnis`,"settings.paths.projectDirHint":`Basis für relative Eintragspfade.`,"settings.paths.panelAddress":`Panel-Adresse`,"settings.paths.panelAddressHint":`Wo dieses Kontrollpanel gerade live ist.`,"settings.paths.serversConfig":`Server-Konfiguration`,"settings.paths.serversConfigHint":`servers.config.json von {label}.`,"settings.paths.workspaceSettings":`Arbeitsbereich-Einstellungen`,"settings.paths.workspaceSettingsHint":`Server-Standardwerte, Protokollaufbewahrung, Benachrichtigungen, DDNS.`,"settings.paths.logs":`Protokolle`,"settings.paths.logsHint":`Gespeicherte Ausgabe für diesen Arbeitsbereich.`,"settings.paths.copyPath":`{label} kopieren`,"settings.paths.whereThingsLive":`Wo was liegt`,"settings.paths.whereThingsLiveDescription":`Schreibgeschützt. Kopieren Sie einen Pfad direkt in eine Shell oder einen Editor.`,"settings.paths.workspaceFiles":`Arbeitsbereich-Dateien`,"settings.paths.workspaceFilesDescription":`Jeder Arbeitsbereich besitzt seine Konfiguration, Einstellungen und sein Protokollverzeichnis; nichts wird zwischen ihnen geteilt.`,"settings.restore.title":`Eine Sicherung wiederherstellen`,"settings.restore.description":`Nichts wird geschrieben, bis der Plan angewendet wird.`,"settings.restore.archive":`Archiv`,"settings.restore.archiveHint":`Ein gespeichertes Archiv oder eine .zip von dieser Maschine.`,"settings.restore.encryptedName":`{name} — verschlüsselt`,"settings.restore.uploadOption":`Eine Datei hochladen…`,"settings.restore.archiveFile":`Archivdatei (.zip)`,"settings.restore.unchangedTitle":`Es hat sich noch nichts geändert`,"settings.restore.archiveLine":`Archiv {name}.`,"settings.restore.uploadedArchive":`Das hochgeladene Archiv.`,"settings.restore.passwordProtected":`Diese Sicherung ist passwortgeschützt.`,"settings.restore.password":`Passwort`,"settings.restore.checkAgain":`Mit dem Passwort erneut prüfen`,"settings.restore.choosePrompt":`Wählen Sie, was wiederhergestellt wird — {selected} von {total} ausgewählt.`,"settings.restore.willRestore":`Wird wiederhergestellt: {items}.`,"settings.restore.skipped":`Übersprungen: {items}.`,"settings.restore.nothing":`nichts`,"settings.restore.restartNote":`Die eigenen Einstellungen des Panels weichen ab, starten Sie das Panel danach neu.`,"settings.restore.reloadedNote":`Wiederhergestellte Arbeitsbereiche werden sofort neu geladen; als Autostart markierte Einträge starten von selbst.`,"settings.restore.applyStored":`Diese Wiederherstellung anwenden`,"settings.restore.applyUpload":`Den Upload wiederherstellen`,"settings.restore.restored":`{count} Element(e) wiederhergestellt.`,"settings.restore.restoredWithNotes":`{count} Element(e) wiederhergestellt — {notes}.`,"settings.restore.noteReloaded":`die wiederhergestellten Server sind live, Autostart-Einträge starten`,"settings.restore.noteRestart":`das Panel neu starten, um seine eigenen Einstellungen anzuwenden`,"settings.rebind.failed":`Das Kontrollpanel hat auf {target} nicht geantwortet. Prüfen Sie die Konsole auf den neuen Listener.`,"proxy.status.certified":`Zertifikat bereit`,"proxy.status.localCa":`Engine-CA`,"proxy.status.uploaded":`hochgeladenes Paar`,"proxy.status.awaitingCa":`wartet auf die CA`,"proxy.status.failed":`Zertifikat fehlgeschlagen`,"proxy.status.fellBack":`Auf lokale CA zurückgefallen`,"proxy.status.serving":`Wird ausgeliefert`,"proxy.status.disabled":`Deaktiviert`,"proxy.status.noUpstream":`Kein Upstream`,"proxy.status.error":`Fehler`,"proxy.status.unapplied":`Noch nicht angewendet`,"proxy.status.off":`Aus`,"proxy.status.stopped":`Gestoppt`,"proxy.status.starting":`Startet`,"proxy.status.running":`Läuft`,"proxy.status.unsupported":`Nicht unterstützt`,"proxy.target.server":`Ein überwachter Server`,"proxy.target.panel":`Dieses Kontrollpanel`,"proxy.target.external":`Ein wörtlicher Upstream`,"proxy.target.controlPanel":`Kontrollpanel`,"proxy.target.noServer":`kein Server gewählt`,"proxy.target.noUpstream":`kein Upstream`,"proxy.tls.auto":`Automatisch — die Engine entscheidet`,"proxy.tls.off":`Aus — reines HTTP`,"proxy.tls.manual":`Hochgeladenes Zertifikat`,"proxy.tls.plain":`reines HTTP`,"proxy.tls.uploaded":`hochgeladenes Zertifikat`,"proxy.tls.letsEncrypt":`Let’s Encrypt`,"proxy.tls.engineCa":`Engine-CA (lokal)`,"proxy.tls.hintOff":`Reines HTTP: Für diesen Hostnamen wird kein Zertifikat ausgeliefert.`,"proxy.tls.hintManual":`Liefert das unten hochgeladene Zertifikatspaar aus.`,"proxy.tls.hintEmpty":`Ein öffentlicher Hostname bekommt ein ACME-Zertifikat; ein rein lokaler Name bekommt die eigene CA der Engine.`,"proxy.tls.hintPublic":`Ein öffentlicher Hostname, also fragt die Engine eine CA nach einem Zertifikat — eine E-Mail für das ACME-Konto ist nötig.`,"proxy.tls.hintLocal":`Ein rein lokaler Name, also signiert die Engine ihn mit ihrer eigenen, lokal vertrauenswürdigen CA.`,"proxy.retry.inFallback":`~8 Stunden`,"proxy.retry.inMinutes":{one:`~{count} Minute`,other:`~{count} Minuten`},"proxy.retry.inHours":{one:`~{count} Stunde`,other:`~{count} Stunden`},"proxy.engine.title":`Engine`,"proxy.engine.description":`Der Reverse-Proxy selbst. Das Panel lädt den aktuellen Build herunter, überwacht ihn und wendet seine Konfiguration über die eigene Admin-API der Engine an.`,"proxy.engine.notInFrame":`Der Proxy-Zustand liegt noch nicht im Frame dieses Panels.`,"proxy.engine.readFailed":`Die Engine konnte nicht gelesen werden`,"proxy.engine.notInstalled":`Keine Engine installiert`,"proxy.engine.installNote":`Die Installation lädt die aktuelle {engine}-Version herunter, die das Panel überwacht — etwa 46 MB, einmalig. Nichts wird exponiert, bis eine Route hinzugefügt und der Proxy eingeschaltet wird.`,"proxy.engine.version":`Version`,"proxy.engine.notProbed":`noch nicht geprüft`,"proxy.engine.source":`Quelle`,"proxy.engine.sourceCustom":`ein von Hand konfigurierter Pfad`,"proxy.engine.sourceDownloaded":`vom Panel heruntergeladen`,"proxy.engine.size":`Größe`,"proxy.engine.binary":`Binärdatei`,"proxy.engine.copyPath":`Den Pfad der Binärdatei kopieren`,"proxy.engine.address":`Live-Adresse`,"proxy.engine.process":`Prozess`,"proxy.engine.certificates":`Zertifikate`,"proxy.engine.noCert":`noch kein öffentliches Zertifikat`,"proxy.engine.expiresSoon":`das früheste läuft in {days} Tagen ab`,"proxy.engine.acme":`ACME-Zertifikate`,"proxy.engine.localCa":`Lokale CA`,"proxy.engine.dns01":`DNS-01`,"proxy.engine.tcpUdp":`TCP/UDP`,"proxy.engine.documentation":`{engine}-Dokumentation`,"proxy.engine.failed":`Die Engine hat einen Fehler gemeldet`,"proxy.engine.setcapHint":`Ein privilegierter Port (unter 1024) braucht das unter Linux einmalig:`,"proxy.engine.copyCommand":`Den Befehl kopieren`,"proxy.engine.install":`Engine installieren`,"proxy.engine.start":`Starten`,"proxy.engine.stop":`Stoppen`,"proxy.engine.apply":`Konfiguration anwenden`,"proxy.engine.revert":`Zurücknehmen`,"proxy.engine.revertHint":`Zur Konfiguration zurückkehren, die vor der letzten galt`,"proxy.engine.update":`Engine aktualisieren`,"proxy.listener.title":`Listener & Zertifikate`,"proxy.listener.description":`Wo der Proxy lauscht. 80 und 443 sind das, was ein Router weiterleitet und was eine ACME-Challenge erwartet; ein Port unter 1024 braucht eine privilegierte Bindung.`,"proxy.listener.unprivilegedPorts":`unprivilegierte Ports`,"proxy.listener.run":`Den Reverse-Proxy ausführen`,"proxy.listener.runHint":`Wird mit Einstellungen speichern gespeichert; das Panel startet oder stoppt die Engine entsprechend.`,"proxy.listener.httpPort":`HTTP-Port`,"proxy.listener.httpPortHint":`ACME-HTTP-01-Challenges und die Umleitung auf HTTPS.`,"proxy.listener.httpsPort":`HTTPS-Port`,"proxy.listener.httpsPortHint":`Wo Zertifikate ausgeliefert werden.`,"proxy.listener.useFallback":`{http} / {https} verwenden`,"proxy.listener.useStandard":`80 / 443 verwenden`,"proxy.listener.forwardHint":`Läuft unprivilegiert — leiten Sie 80 und 443 auf dem Router auf diese Ports weiter.`,"proxy.listener.privilegedTitle":`Ein Port unter 1024 braucht eine privilegierte Bindung`,"proxy.listener.privilegedBody":`Wenn das Panel als Ihr eigener Benutzer läuft, kann es 80 oder 443 nicht ohne Berechtigung binden. Erteilen Sie sie einmalig {how} und starten Sie die Engine neu, oder behalten Sie {http}/{https} und leiten Sie 80/443 vom Router weiter. Unter Windows ist der Port frei bindbar, aber etwas anderes könnte ihn belegen.`,"proxy.listener.privilegedWithSetcap":`mit {command} für die Engine-Binärdatei`,"proxy.listener.email":`E-Mail des ACME-Kontos`,"proxy.listener.emailPlaceholder":`you@example.com`,"proxy.listener.emailHint":`Let's Encrypt nutzt sie, um Sie vor einem ablaufenden Zertifikat zu warnen. Ein rein lokaler Name bekommt die eigene CA der Engine und braucht keine.`,"proxy.listener.emailNeededTitle":`Für automatisches HTTPS ist eine E-Mail nötig`,"proxy.listener.emailNeededBody":`„{host}“ ist ein öffentlicher Hostname, also fragt die Engine eine CA nach einem Zertifikat, und die Kontoadresse ist erforderlich. Tragen Sie sie ein, schalten Sie TLS für die Route aus, oder aktivieren Sie den Staging-Endpunkt, während Sie Dinge ausprobieren.`,"proxy.listener.staging":`Den ACME-Staging-Endpunkt verwenden`,"proxy.listener.stagingHint":`Nicht vertrauenswürdige Zertifikate und kein Aufbrauchen des Ratenlimits, während Sie Dinge ausprobieren.`,"proxy.listener.dns01":`Challenges mit DNS-01 beantworten`,"proxy.listener.dns01Hint":`Das Panel schreibt den Challenge-Eintrag über das DNS-Konto einer Route, daher ist kein eingehender Port nötig, um ein Zertifikat zu bekommen.`,"proxy.listener.resolvers":`Den Eintrag abgleichen gegen`,"proxy.listener.resolversPlaceholder":`1.1.1.1, 8.8.8.8`,"proxy.listener.resolversHint":`Nameserver, von denen die Engine den Eintrag liest; leer nutzt ihre eigenen. Nötig, wo Split-Horizon-DNS ihr eine andere Sicht zeigt.`,"proxy.listener.noAccountTitle":`Kein DNS-Konto kann eine Challenge beantworten`,"proxy.listener.noAccountBody":`DNS-01 ist an, aber kein Konto hat dafür nutzbare Zugangsdaten. Fügen Sie eines unter Arbeitsbereich-Einstellungen → Dynamic DNS hinzu, sonst bleiben öffentliche Namen auf den Port-Challenges und warten auf eine CA, die sie nicht erreichen kann.`,"proxy.listener.manyAccountsTitle":`Jede öffentliche Route muss ein Konto wählen`,"proxy.listener.manyAccountsBody":`Mehr als ein Konto kann antworten, also kann „Automatisch“ nicht wählen. Wählen Sie eines pro Route, sonst bleiben diese Namen auf den Port-Challenges.`,"proxy.listener.accountNote":`Jede Route wählt ihr eigenes Konto, daher bekommt jeder Name in einer anderen Zone das richtige. Eine Route auf „Automatisch“ nutzt das einzige Konto, das die Tabelle nennt. Ein Name, den kein Konto beantwortet, bleibt auf den Port-Challenges.`,"proxy.listener.pendingNote":`Ein öffentlicher Name, dessen Zertifikat noch ausgestellt wird, ist in der Zwischenzeit erreichbar — über HTTPS mit einem vorübergehend nicht vertrauenswürdigen Zertifikat oder über reines HTTP mit einer Seite, die die weiterzuleitenden Ports nennt.`,"proxy.routes.title":`Routen`,"proxy.routes.description":`Ein öffentlicher Hostname pro Dienst. Eine Route kann auf einen überwachten Server in einem beliebigen Arbeitsbereich zeigen, auf dieses Panel oder auf einen wörtlichen Upstream.`,"proxy.routes.add":`Route hinzufügen`,"proxy.routes.cannotSaveTitle":`Diese Routen können so nicht gespeichert werden`,"proxy.routes.cannotRoute":`{host} kann nicht geroutet werden`,"proxy.routes.emptyTitle":`Noch keine Routen`,"proxy.routes.emptyDescription":`Fügen Sie eine hinzu, um einen Server über eine Domain zu exponieren — die Engine holt das Zertifikat von selbst.`,"proxy.routes.addFirst":`Die erste Route hinzufügen`,"proxy.routes.columnHostname":`Hostname`,"proxy.routes.columnTarget":`Ziel`,"proxy.routes.columnUpstream":`Upstream`,"proxy.routes.columnTls":`TLS`,"proxy.routes.columnState":`Zustand`,"proxy.routes.columnOn":`An`,"proxy.routes.openInTab":`{url} in einem neuen Tab öffnen`,"proxy.routes.noHostname":`noch kein Hostname`,"proxy.routes.toggle":`Route {name}`,"proxy.routes.edit":`{name} bearbeiten`,"proxy.routes.remove":`{name} entfernen`,"proxy.routeDialog.titleEdit":`Route bearbeiten`,"proxy.routeDialog.titleAdd":`Route hinzufügen`,"proxy.routeDialog.description":`Ein Hostname, wohin er weiterleitet und wie er über TLS ausgeliefert wird.`,"proxy.routeDialog.hostname":`Hostname`,"proxy.routeDialog.hostnamePlaceholder":`gitea.example.com`,"proxy.routeDialog.path":`Pfadpräfix`,"proxy.routeDialog.pathPlaceholder":`/optional`,"proxy.routeDialog.pathHint":`Leer bedient den ganzen Host.`,"proxy.routeDialog.target":`Ziel`,"proxy.routeDialog.tls":`TLS`,"proxy.routeDialog.dnsAccount":`DNS-Konto`,"proxy.routeDialog.localNote":`Ein rein lokaler Name wird von der eigenen CA der Engine signiert, daher ist kein DNS-Konto beteiligt.`,"proxy.routeDialog.workspace":`Arbeitsbereich`,"proxy.routeDialog.server":`Server`,"proxy.routeDialog.noServers":`dieser Arbeitsbereich hat keine Server`,"proxy.routeDialog.stoppedNote":`Ein gestoppter Server wird nicht geroutet: Die Zeile zeigt „Kein Upstream“, bis er wieder läuft.`,"proxy.routeDialog.upstream":`Upstream`,"proxy.routeDialog.upstreamPlaceholder":`http://10.0.0.5:8080`,"proxy.routeDialog.upstreamHint":`Eine wörtliche Adresse, einschließlich Port. Ein Schema ist optional.`,"proxy.routeDialog.panelNote":`Das Kontrollpanel auszuliefern braucht eingeschaltete Authentifizierung und ein Passwort, das nicht das Standardpasswort ist — sonst verweigert das Panel das Speichern.`,"proxy.routeDialog.save":`Route speichern`,"proxy.account.automatic":`Automatisch (das einzige Konto, das antworten kann)`,"proxy.account.noTxt":`keine TXT-Unterstützung`,"proxy.account.noCredentials":`keine Zugangsdaten`,"proxy.account.gone":`Dieses Konto ist nicht mehr konfiguriert.`,"proxy.account.emptyHint":`DNS-01 schreibt den Challenge-Eintrag hierher. Leer nutzt das einzige Konto, das eine Challenge beantworten kann, sofern es eines gibt.`,"proxy.account.cannotWrite":`Ein {provider}-Konto kann keine TXT-Einträge schreiben, kann also keine DNS-01-Challenge beantworten.`,"proxy.account.noCredentialsYet":`Für dieses {provider}-Konto sind noch keine Zugangsdaten gespeichert.`,"proxy.account.through":`Die Challenge wird über dieses {provider}-Konto geschrieben.`,"proxy.certificate.title":`Hochgeladene Zertifikate`,"proxy.certificate.description":`Ausgeliefert von Routen, die auf „Hochgeladenes Zertifikat“ stehen. Alles andere — öffentlich oder lokal — wird von der Engine selbst zertifiziert.`,"proxy.certificate.add":`Zertifikat hinzufügen`,"proxy.certificate.emptyTitle":`Kein Zertifikat hochgeladen`,"proxy.certificate.emptyDescription":`Eine Route auf „Hochgeladenes Zertifikat“ braucht ein Paar, das ihren Hostnamen abdeckt, sonst hat die Engine nichts, was sie dafür ausliefern könnte.`,"proxy.certificate.daysLeft":`{days} Tage übrig`,"proxy.certificate.subject":`Subjekt`,"proxy.certificate.issuer":`Aussteller`,"proxy.certificate.validUntil":`Gültig bis`,"proxy.certificate.covers":`Deckt ab`,"proxy.certificate.noSans":`keine Hostnamen in ihren SANs`,"proxy.certificate.removeAria":`{name} entfernen`,"proxy.certificate.removeQuestion":`„{name}“ entfernen?`,"proxy.certificate.removeBody":`Das Paar wird von der Platte gelöscht. Eine Route, die weiter auf „Hochgeladenes Zertifikat“ steht, liefert weiter das eigene Zertifikat der Engine aus, bis Sie das ändern, und das Panel verweigert dies, solange eine sie noch nutzt.`,"proxy.certificate.removeIt":`Entfernen`,"proxy.certificate.stored":`„{label}“ gespeichert.`,"proxy.certificate.removed":`„{name}“ entfernt.`,"proxy.certificateDialog.title":`Ein Zertifikat hinzufügen`,"proxy.certificateDialog.description":`Das Paar wird unter seiner Id auf der Platte gespeichert, und eine Route auf „Hochgeladenes Zertifikat“ kann es ausliefern.`,"proxy.certificateDialog.label":`Bezeichnung`,"proxy.certificateDialog.labelPlaceholder":`Heim-Wildcard`,"proxy.certificateDialog.id":`Id`,"proxy.certificateDialog.idHint":`benennt die Dateien auf der Platte`,"proxy.certificateDialog.certFile":`Zertifikatsdatei (.pem, .crt)`,"proxy.certificateDialog.keyFile":`Datei mit privatem Schlüssel (.pem, .key)`,"proxy.certificateDialog.pasteCert":`Oder das Zertifikat einfügen`,"proxy.certificateDialog.pasteKey":`Oder den privaten Schlüssel einfügen`,"proxy.certificateDialog.certPlaceholder":`-----BEGIN CERTIFICATE-----`,"proxy.certificateDialog.keyPlaceholder":`-----BEGIN PRIVATE KEY-----`,"proxy.certificateDialog.store":`Das Zertifikat speichern`,"proxy.certificateDialog.errorLabel":`eine Bezeichnung ist erforderlich`,"proxy.certificateDialog.errorId":`die Id muss mit einem Buchstaben oder einer Ziffer beginnen, danach Buchstaben, Ziffern, Bindestrich oder Unterstrich`,"proxy.certificateDialog.errorTaken":`„{id}“ wird bereits von einem anderen Zertifikat verwendet`,"proxy.certificateDialog.errorCertificate":`das Zertifikat einfügen oder wählen`,"proxy.certificateDialog.errorPrivateKey":`den privaten Schlüssel einfügen oder wählen`,"proxy.retryButton.force":`Zertifikat erneut erzwingen`,"proxy.retryButton.question":`Die CA erneut für {host} fragen?`,"proxy.retryButton.body":`Die Engine konnte zuvor kein CA-Zertifikat für diesen Hostnamen erhalten und nutzt ihre lokale CA. Sie versucht es automatisch alle {retryIn} erneut.`,"proxy.retryButton.warning":`Ein erneuter Versuch beendet diese Route und macht sie eine Weile unerreichbar — sind Sie sicher, dass Sie fortfahren möchten?`,"proxy.retryButton.leave":`Lassen`,"proxy.retryButton.now":`Jetzt erneut versuchen`,"proxy.view.title":`Reverse-Proxy`,"proxy.view.description":`Exponieren Sie Ihre Server über Domains, mit automatischem HTTPS über 80/443 oder eine DNS-Challenge.`,"proxy.view.dnsNote":`Für DNS-01 fügen Sie den DNS-Anbieter der Domain in einem beliebigen Arbeitsbereich unter Arbeitsbereich-Einstellungen → Dynamic DNS hinzu; eine Route kann dieses Konto dann wählen, aus jedem Arbeitsbereich.`,"proxy.view.readFailed":`Der Reverse-Proxy konnte nicht gelesen werden`,"proxy.view.reading":`Reverse-Proxy wird gelesen…`,"proxy.view.engineInstalled":`Engine installiert`,"proxy.view.engineStarting":`Engine startet`,"proxy.view.engineStopping":`Engine stoppt`,"proxy.view.configApplied":`Konfiguration angewendet`,"proxy.view.configReverted":`Konfiguration zurückgenommen`,"proxy.view.settingsSaved":`Einstellungen gespeichert.`,"proxy.view.settingsSavedToast":`Einstellungen gespeichert`,"proxy.view.retryFailed":`der erneute Versuch ist fehlgeschlagen`,"proxy.view.retryAsked":`die CA wird erneut für {host} gefragt`,"proxy.view.fieldChanged":`Feld geändert`,"proxy.view.fieldsChanged":`Felder geändert`,"proxy.view.noChanges":`Keine ungespeicherten Änderungen`,"proxy.view.discard":`Änderungen verwerfen`,"proxy.view.save":`Einstellungen speichern`,"proxy.validation.labelRequired":`eine Bezeichnung ist erforderlich`,"proxy.validation.idPattern":`die Id muss mit einem Buchstaben oder einer Ziffer beginnen, danach Buchstaben, Ziffern, Bindestrich oder Unterstrich`,"proxy.validation.hostRequired":`ein Hostname ist erforderlich`,"proxy.validation.hostPattern":`ein Hostname aus Buchstaben, Ziffern, Punkten und Bindestrichen, z. B. home.example.com`,"proxy.validation.hostTaken":`„{host}“ ist für diesen Pfad bereits geroutet`,"proxy.validation.pathSlash":`ein Pfadpräfix beginnt mit /`,"proxy.validation.pathSpace":`ein Pfadpräfix darf kein Leerzeichen enthalten`,"proxy.validation.idTaken":`Routen-Id „{id}“ wird zweimal verwendet`,"proxy.validation.workspaceRequired":`wählen Sie den Arbeitsbereich, dem der Server gehört`,"proxy.validation.serverRequired":`wählen Sie einen Server in diesem Arbeitsbereich`,"proxy.validation.url":`ein Upstream wie http://10.0.0.5:8080`,"views.actions.addAServer":`Einen Server hinzufügen`,"views.actions.addServer":`Server hinzufügen`,"views.actions.startAll":`Alle starten`,"views.actions.stopAll":`Alle stoppen`,"views.common.thisWorkspace":`dieser Arbeitsbereich`,"views.globalOverview.configError":`Die Konfiguration konnte nicht gelesen werden: {error}`,"views.globalOverview.degraded":`beeinträchtigt`,"views.globalOverview.description":`Host-Werte und jeder Server aus jedem Arbeitsbereich, gruppiert nach seinem Ort.`,"views.globalOverview.emptyDescription":`Wählen Sie oben einen Arbeitsbereich und fügen Sie den ersten Prozess hinzu, den er am Leben halten soll.`,"views.globalOverview.emptyTitle":`Noch nirgends Server`,"views.globalOverview.groupEmptyDescription":`Fügen Sie einen hinzu, und er erscheint hier und auf der Arbeitsbereichsseite.`,"views.globalOverview.groupRunning":`{running}/{total} laufen`,"views.globalOverview.hostUptime":`Host-Laufzeit`,"views.globalOverview.hostVitals":`Host-Werte`,"views.globalOverview.hostVitalsNote":`Diese Maschine, von jedem Arbeitsbereich geteilt.`,"views.globalOverview.needLook":{one:`{count} Server braucht einen Blick`,other:`{count} Server brauchen einen Blick`},"views.globalOverview.openWorkspace":`Arbeitsbereich öffnen`,"views.globalOverview.panelUptime":`Panel-Laufzeit`,"views.globalOverview.samplingOff":`Sampling aus`,"views.globalOverview.samplingOn":`Sampling an`,"views.globalOverview.serversTotal":`{count} Server insgesamt`,"views.globalOverview.serving":`wird ausgeliefert`,"views.globalOverview.workspaces":`Arbeitsbereiche`,"views.globalSettings.authenticationDescription":`Wer sich bei diesem Panel anmelden darf und wie einer Sitzung vertraut wird.`,"views.globalSettings.backupsDescription":`Ein Archiv pro Erfassung, das das Panel und jeden gewählten Arbeitsbereich abdeckt.`,"views.globalSettings.changesDescription":`Was Speichern in die Einstellungsdatei des Panels schreiben würde.`,"views.globalSettings.description":`Listener, Zugriff, Host-Werte, Sicherungen, TLS und Pfade für dieses Panel — von jedem Arbeitsbereich geteilt.`,"views.globalSettings.hostDescription":`Alarmschwellen für die eigenen Ressourcen dieser Maschine.`,"views.globalSettings.interfaceDescription":`Liefern Sie Ihre eigene Panel-UI statt der mitgelieferten aus.`,"views.globalSettings.languageDescription":`Die Sprache, in der dieses Panel angezeigt wird, für diesen Browser.`,"views.globalSettings.languageNote":`Ihre Wahl wird in diesem Browser gespeichert und gilt auch für die Anmeldeseite. Sie ändert weder die eigene Protokollausgabe des Panels noch seine API-Meldungen.`,"views.globalSettings.listenerDescription":`Wo das Kontrollpanel lauscht und wie es sich ankündigt.`,"views.globalSettings.loadErrorTitle":`Einige reine Dateiwerte konnten nicht geladen werden`,"views.globalSettings.navLabel":`Abschnitte der globalen Einstellungen`,"views.globalSettings.pathsDescription":`Wo home-hosted seine Dateien ablegt, global und pro Arbeitsbereich.`,"views.globalSettings.saveFailed":`Die Einstellungen konnten nicht gespeichert werden.`,"views.globalSettings.saved":`Einstellungen gespeichert.`,"views.globalSettings.savedRebinding":`Einstellungen gespeichert — das Panel wechselt zu einer neuen Adresse.`,"views.globalSettings.savedToast":`Einstellungen gespeichert`,"views.globalSettings.sectionAuthentication":`Authentifizierung`,"views.globalSettings.sectionBackups":`Sicherungen`,"views.globalSettings.sectionHost":`Host-Werte`,"views.globalSettings.sectionInterface":`Oberfläche`,"views.globalSettings.sectionListener":`Listener`,"views.globalSettings.sectionPaths":`Pfade`,"views.globalSettings.sectionTls":`TLS`,"views.globalSettings.title":`Globale Einstellungen`,"views.globalSettings.tlsDescription":`Liefern Sie das Panel über HTTPS mit Ihrem eigenen Zertifikat aus.`,"views.logs.allStreams":`Alle Streams`,"views.logs.clear":`Leeren`,"views.logs.clearDescription":`{server} — die Datei auf der Platte wird abgeschnitten. Der Prozess läuft weiter, und neue Zeilen werden ab hier geschrieben.`,"views.logs.clearFile":`Datei leeren`,"views.logs.clearNote":`Laden Sie sie zuerst herunter, falls die Ausgabe noch gebraucht wird — das lässt sich vom Panel aus nicht rückgängig machen.`,"views.logs.clearTitle":`Die gespeicherte Protokolldatei leeren?`,"views.logs.fileEmpty":`Die gespeicherte Datei ist leer.`,"views.logs.filesOnDisk":{one:`{count} Datei`,other:`{count} Dateien`},"views.logs.loadedLines":`{count} Zeilen geladen`,"views.logs.modeLive":`Live-Stream`,"views.logs.modePersisted":`Gespeichert`,"views.logs.noServersDescription":`Fügen Sie einen hinzu, und seine Ausgabe wird hier gespeichert.`,"views.logs.noServersTitle":`Keine Server`,"views.logs.nothingOnDisk":`Nichts auf der Platte für diesen Server — die Persistenz ist aus, oder er hat noch nichts geschrieben.`,"views.logs.nothingPersisted":`nichts gespeichert`,"views.logs.persistedSummary":`{workspace} · {persisted} von {total} Servern auf der Platte · {size}`,"views.logs.persistedTitle":`Gespeicherte Protokolle`,"views.logs.pickServerDescription":`Gespeicherte Ausgabe und Live-Streams gibt es pro Server. Wählen Sie einen aus der Liste.`,"views.logs.pickServerTitle":`Einen Server wählen`,"views.logs.reload":`Neu laden`,"views.logs.retentionNote":`Rotation und Aufbewahrung werden unter Arbeitsbereich-Einstellungen → Protokolle festgelegt.`,"views.logs.searchAria":`Das Protokoll durchsuchen`,"views.logs.searchPlaceholder":`das Tail-Fenster durchsuchen`,"views.logs.searchedLines":`{count} Zeilen durchsucht`,"views.logs.streamAria":`Stream`,"views.logs.tailAria":`Tail-Größe`,"views.logs.waitingOutput":`Verbunden — warte auf Ausgabe.`,"views.overview.acrossTree":`über den ganzen Baum`,"views.overview.cpuNow":`{value}% CPU jetzt`,"views.overview.crashedOrUnhealthy":`abgestürzt oder ungesund`,"views.overview.description":`Live-Zustand jedes Servers in diesem Arbeitsbereich, aktualisiert über einen einzigen Ereignisstrom.`,"views.overview.emptyDescription":`Fügen Sie den ersten Prozess hinzu, den dieser Arbeitsbereich am Leben halten soll.`,"views.overview.emptyTitle":`Keine Server in diesem Arbeitsbereich`,"views.overview.enabled":`{count} aktiviert`,"views.overview.longestUptime":`Längste Laufzeit`,"views.overview.needLook":{one:`{count} Server braucht einen Blick`,other:`{count} Server brauchen einen Blick`},"views.overview.needsAttention":`Braucht Aufmerksamkeit`,"views.overview.notUp":`{count} nicht gestartet`,"views.overview.nothingBroken":`nichts ist kaputt`,"views.overview.nothingRunning":`nichts läuft`,"views.overview.openFullList":`Die vollständige Liste öffnen`,"views.overview.peak":`Spitze {value}`,"views.overview.processMemory":`Prozessspeicher`,"views.overview.recentActivity":`Letzte Aktivität`,"views.overview.running":`Läuft`,"views.overview.sampling":`der Ressourcenverlauf wird alle 5 s erfasst und für diese Sitzung behalten`,"views.overview.stopped":`Gestoppt`,"views.overview.workspaceLabel":`Arbeitsbereich {id}`,"views.route.server":`Server`,"views.serverDetail.allServers":`Alle Server`,"views.serverDetail.autostart":`Autostart mit dem Panel`,"views.serverDetail.backToServers":`Zurück zu den Servern`,"views.serverDetail.bind":`Bindung`,"views.serverDetail.bindCustom":`{bind} — benutzerdefiniert`,"views.serverDetail.bindLan":`0.0.0.0 — jede Schnittstelle`,"views.serverDetail.bindLocal":`127.0.0.1 — nur diese Maschine`,"views.serverDetail.closeEditor":`Editor schließen`,"views.serverDetail.copyJson":`Die JSON-Konfiguration kopieren`,"views.serverDetail.crashes24":`Abstürze 24 h`,"views.serverDetail.dependencies":`Abhängigkeiten`,"views.serverDetail.detached":`abgekoppelt`,"views.serverDetail.detachedHint":`Dieser Prozess hat sich selbst ersetzt: Das Panel hat den Nachfolger übernommen, statt eine zweite Kopie zu starten. Stopp funktioniert weiterhin, seine Ausgabe bleibt dort, wohin der Nachfolger sie geschickt hat.`,"views.serverDetail.disableServer":`Server deaktivieren`,"views.serverDetail.editHint":`Jedes Feld dieses Eintrags bearbeiten`,"views.serverDetail.effectiveConfig":`Wirksame Konfiguration`,"views.serverDetail.effectiveConfigNote":`Standardwerte aus den Einstellungen sind bereits in diese Werte eingemischt.`,"views.serverDetail.enableServer":`Server aktivieren`,"views.serverDetail.eventHistory":`Ereignisverlauf`,"views.serverDetail.eventHistoryNote":`Vom Panel 24 Stunden lang behalten.`,"views.serverDetail.fieldArgs":`args`,"views.serverDetail.fieldBackupPaths":`Sicherungspfade`,"views.serverDetail.fieldBootstrap":`bootstrap`,"views.serverDetail.fieldCommand":`command`,"views.serverDetail.fieldCwd":`cwd`,"views.serverDetail.fieldDataEnvs":`Daten-Envs`,"views.serverDetail.fieldDependsOn":`hängt ab von`,"views.serverDetail.fieldEnv":`env`,"views.serverDetail.fieldEnvFile":`Env-Datei`,"views.serverDetail.fieldHealth":`Gesundheit`,"views.serverDetail.fieldLogBuffer":`Protokollpuffer`,"views.serverDetail.fieldOnPortConflict":`bei Portkonflikt`,"views.serverDetail.fieldPortBind":`Port · Bind`,"views.serverDetail.fieldRestart":`Neustart`,"views.serverDetail.fieldRssLimit":`RSS-Limit`,"views.serverDetail.fieldStop":`Stopp`,"views.serverDetail.fields":`Felder`,"views.serverDetail.goneDescription":`{id} ist nicht mehr in servers.config.json. Vielleicht wurde er in einem anderen Tab entfernt.`,"views.serverDetail.goneTitle":`Dieser Server ist weg`,"views.serverDetail.health":`Gesundheit`,"views.serverDetail.healthProbe":`Gesundheitsprüfung`,"views.serverDetail.lastCrash":`Letzter Absturz`,"views.serverDetail.lastProbe":`Letzte Prüfung`,"views.serverDetail.logBufferLines":`{count} Zeilen`,"views.serverDetail.memoryRss":`Speicher (RSS)`,"views.serverDetail.moreActions":`Weitere Aktionen für {label}`,"views.serverDetail.neverWritten":`Dieser Server hat noch nichts geschrieben.`,"views.serverDetail.nextAttempt":`Nächster Versuch`,"views.serverDetail.none":`keine`,"views.serverDetail.off":`aus`,"views.serverDetail.persistent":`persistent`,"views.serverDetail.persistentHint":"Dieser Eintrag läuft unter seiner eigenen Nanny und läuft deshalb weiter, wenn das Panel stoppt, neu startet oder beendet wird. `home-hosted down` meldet ihn, statt ihn zu stoppen; nur Stopp tut das.","views.serverDetail.pid":`PID`,"views.serverDetail.portFree":`frei`,"views.serverDetail.portInUse":`belegt`,"views.serverDetail.portState":`Portzustand`,"views.serverDetail.probeFailed":`Die Gesundheitsprüfung ist noch nicht durchgelaufen.`,"views.serverDetail.probeFailedFor":`Die Gesundheitsprüfung ist seit {duration} nicht durchgelaufen.`,"views.serverDetail.processes":`Prozesse`,"views.serverDetail.rawJson":`Rohes JSON`,"views.serverDetail.removeAutostart":`Aus dem Autostart entfernen`,"views.serverDetail.removeDescription":`{label} wird aus servers.config.json entfernt: sein Prozess wird gestoppt, und seine Protokolle und Absturzhistorie werden mit ihm gelöscht.`,"views.serverDetail.removeNote":`Das lässt sich vom Panel aus nicht rückgängig machen — der Eintrag muss von Hand oder aus einer Sicherung wieder hinzugefügt werden.`,"views.serverDetail.removeServer":`Server entfernen`,"views.serverDetail.removeTitle":`Diesen Server entfernen?`,"views.serverDetail.restart":`Neu starten`,"views.serverDetail.restarts":`Neustarts`,"views.serverDetail.sectionConfig":`Konfiguration`,"views.serverDetail.sectionHistory":`Verlauf`,"views.serverDetail.sectionOutput":`Live-Ausgabe`,"views.serverDetail.start":`Starten`,"views.serverDetail.startsOnItsOwn":`Startet von selbst. Fügen Sie Ids unter {code} hinzu, um ihn nach anderen Servern einzuordnen.`,"views.serverDetail.stop":`Stoppen`,"views.serverDetail.telemetry":`Telemetrie`,"views.serverDetail.telemetryNote":`Wird alle 5 s erfasst, solange diese Seite offen ist.`,"views.serverDetail.unhealthyFor":`Ungesund seit`,"views.serverDetail.uptime24":`24 h Laufzeit`,"views.serverDetail.waitingFirstLine":`Warte auf die erste Zeile…`,"views.servers.clearFilter":`Den Filter leeren`,"views.servers.clearFilters":`Filter leeren`,"views.servers.description":`Jeder Eintrag in servers.config.json von {workspace}, mit Live-Ressourcen, Gesundheit und Verlauf.`,"views.servers.emptyDescription":`Fügen Sie den ersten Prozess hinzu, den dieses Panel überwachen soll. Befehl, Argumente, Env und Arbeitsverzeichnis liegen alle in der Konfigurationsdatei.`,"views.servers.emptyTitle":`Keine Server konfiguriert`,"views.servers.filterAll":`Alle`,"views.servers.filterAria":`Server filtern`,"views.servers.filterAttention":`Aufmerksamkeit`,"views.servers.filterDisabled":`Deaktiviert`,"views.servers.filterPlaceholder":`Nach Id, Bezeichnung, Befehl oder Port filtern`,"views.servers.filterRunning":`Läuft`,"views.servers.filterStopped":`Gestoppt`,"views.servers.noMatchDescription":`Versuchen Sie einen anderen Status oder leeren Sie die Suche.`,"views.servers.noMatchTitle":`Nichts passt zu diesem Filter`,"views.settings.changesDescription":`Was Speichern in die Einstellungen von {workspace} schreiben würde.`,"views.settings.configErrorNote":`Das Panel überwacht weiter mit der bisherigen Konfiguration; eine Korrektur der Datei lädt sie von selbst neu.`,"views.settings.configErrorTitle":`Die Arbeitsbereich-Konfiguration konnte nicht gelesen werden`,"views.settings.configWarningTitle":`Die Konfiguration dieses Arbeitsbereichs hat eine Warnung`,"views.settings.ddnsDescription":`Halten Sie Hostnamen auf die öffentliche Adresse dieser Maschine gerichtet, egal welcher Registrar sie hält.`,"views.settings.defaultsDescription":`Gelten für jeden Eintrag in diesem Arbeitsbereich, der keinen eigenen Wert setzt.`,"views.settings.description":`Server-Standardwerte, Protokollaufbewahrung, Benachrichtigungen und Dynamic DNS für {workspace}.`,"views.settings.logsDescription":`Wie viel Ausgabe dieser Arbeitsbereich auf der Platte behält und wie lange.`,"views.settings.navLabel":`Abschnitte der Arbeitsbereich-Einstellungen`,"views.settings.notificationsDescription":`Absturz- und Gesundheitsalarme für diesen Arbeitsbereich, an einen Telegram-Chat gesendet.`,"views.settings.saveFailed":`Die Einstellungen konnten nicht gespeichert werden.`,"views.settings.saved":`Arbeitsbereich-Einstellungen gespeichert.`,"views.settings.savedToast":`Arbeitsbereich-Einstellungen gespeichert`,"views.settings.sectionDdns":`Dynamic DNS`,"views.settings.sectionDefaults":`Server-Standardwerte`,"views.settings.sectionLogs":`Protokolle`,"views.settings.sectionNotifications":`Benachrichtigungen`};export{e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={"app.name":`home-hosted`,"app.tagline":`Panel de control del supervisor de procesos`,"common.cancel":`Cancelar`,"common.confirm":`Confirmar`,"common.reset":`Restablecer`,"common.keepIt":`Mantenerlo`,"common.remove":`Quitar`,"common.close":`Cerrar`,"common.save":`Guardar`,"common.saving":`Guardando…`,"common.discard":`Descartar`,"common.delete":`Eliminar`,"common.edit":`Editar`,"common.add":`Añadir`,"common.retry":`Reintentar`,"common.copy":`Copiar`,"common.copied":`Copiado`,"common.enabled":`Activado`,"common.disabled":`Desactivado`,"common.none":`Ninguno`,"common.unknown":`desconocido`,"common.loading":`Cargando…`,"common.selectAll":`Seleccionar todo`,"common.selectNone":`No seleccionar nada`,"common.name":`Nombre`,"common.label":`Etiqueta`,"common.hostname":`Nombre de host`,"common.port":`Puerto`,"common.command":`Comando`,"common.environment":`Entorno`,"common.memory":`Memoria`,"common.cpu":`CPU`,"common.disk":`Disco`,"common.uptime":`Tiempo activo`,"common.status":`Estado`,"common.actions":`Acciones`,"common.details":`Detalles`,"common.overview":`Resumen`,"common.warning":`Advertencia`,"common.error":`Error`,"common.confirmQuestion":`¿{label}?`,"common.unset":`sin definir`,"common.never":`nunca`,"common.now":`ahora`,"common.dismiss":`Descartar`,"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`,"connection.live":`En vivo`,"connection.connecting":`Conectando`,"connection.reconnecting":`Reconectando`,"connection.liveUpdates":`Actualizaciones en vivo`,"theme.label":`Tema: {theme}`,"theme.light":`claro`,"theme.dark":`oscuro`,"theme.system":`sistema`,"language.label":`Idioma`,"language.select":`Elegir un idioma`,"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}`,"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`,"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`,"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`,"servers.total":{one:`{count} servidor`,other:`{count} servidores`},"servers.running":{one:`{count} en ejecución`,other:`{count} en ejecución`},"logs.lines":{one:`{count} línea`,other:`{count} líneas`},"days.remaining":{one:`{count} día`,other:`{count} días`},"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}».`,"palette.results":{one:`{count} resultado`,other:`{count} resultados`},"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`,"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.`,"host.loadPerCpu":`Carga / cpu`,"host.cpuTemp":`Temp. de la CPU`,"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}`,"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`,"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.serverDefaults":`Ajustes → Valores predeterminados del servidor`,"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.placeholdersTitle":`Marcadores disponibles para los argumentos`,"addServer.submit":`Añadir a servers.config.json`,"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.`,"bind.local":`local — 127.0.0.1`,"bind.lan":`lan — 0.0.0.0`,"bind.explicit":`{bind} — explícito`,"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`,"editor.title":`Editar la configuración`,"editor.description":`Escribe los cambios en {file}; lo que no toques sigue heredando los valores predeterminados.`,"editor.unsaved":{one:`cambio sin guardar`,other:`cambios sin guardar`},"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.`,"editor.saveChanges":{one:`Guardar {count} cambio`,other:`Guardar {count} cambios`},"lifecycle.restartTitle":`Política de reinicio`,"lifecycle.restartDescription":`Espera entre intentos tras un bloqueo.`,"lifecycle.restartOnCrash":`Reiniciar tras un bloqueo`,"lifecycle.maxRetries":`Intentos máximos`,"lifecycle.maxRetriesHint":`Intentos antes de dejar el servidor bloqueado.`,"lifecycle.baseDelay":`Espera base (ms)`,"lifecycle.factor":`Factor de espera`,"lifecycle.maxDelay":`Espera máxima (ms)`,"lifecycle.resetAfter":`Reiniciar el contador tras (ms)`,"lifecycle.resetAfterHint":`Una ejecución de esta duración borra el contador de intentos.`,"lifecycle.healthTitle":`Comprobación de salud`,"lifecycle.healthDescription":`Cómo se sondea la disponibilidad una vez arrancado el proceso.`,"lifecycle.probe":`Sondear este servidor`,"lifecycle.probeType":`Tipo de sonda`,"lifecycle.probePort":`Puerto TCP — solo la conexión`,"lifecycle.probeHttp":`Petición HTTP — comprobar una respuesta`,"lifecycle.interval":`Intervalo (ms)`,"lifecycle.timeout":`Tiempo de espera (ms)`,"lifecycle.unhealthyAfter":`Con fallos tras`,"lifecycle.unhealthyAfterHint":`Sondas fallidas consecutivas.`,"lifecycle.forceRestartAfter":`Reinicio forzado tras (ms)`,"lifecycle.forceRestartAfterHint":`0 lo desactiva.`,"lifecycle.startTimeout":`Tiempo de espera de inicio (ms)`,"lifecycle.httpPath":`Ruta HTTP`,"lifecycle.httpMethod":`Método HTTP`,"lifecycle.expectStatus":`Estado esperado`,"lifecycle.expectStatusHint":`En blanco se acepta cualquier valor por debajo.`,"lifecycle.expectStatusBelow":`Sano por debajo del estado`,"lifecycle.expectBody":`El cuerpo debe contener`,"lifecycle.expectBodyPlaceholder":`subcadena opcional`,"lifecycle.headBodyHint":`HEAD no tiene cuerpo de respuesta, así que esta comprobación se ignora — usa GET o déjala vacía.`,"lifecycle.stopTitle":`Comportamiento al detener`,"lifecycle.stopDescription":`Cómo se pide al árbol de procesos que termine.`,"lifecycle.signal":`Señal`,"lifecycle.signalTerm":`SIGTERM — pedirle que se detenga`,"lifecycle.signalInt":`SIGINT — interrumpir (Ctrl-C)`,"lifecycle.signalKill":`SIGKILL — matar de inmediato`,"lifecycle.grace":`Periodo de gracia (ms)`,"lifecycle.killGroup":`Matar todo el grupo de procesos`,"lifecycle.killPortHolders":`Matar también lo que ocupe el puerto`,"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`,"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…`,"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`,"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.`,"settings.shell.fieldsChanged":{one:`campo modificado`,other:`campos modificados`},"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.shell.saveChanges":{one:`Guardar {count} cambio`,other:`Guardar {count} cambios`},"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.entriesCount":{one:`{count} entrada`,other:`{count} entradas`},"settings.backup.itemsSelected":{one:`{count} elemento seleccionado`,other:`{count} elementos seleccionados`},"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.backups.policyTitle":`Política`,"settings.backups.policyDescription":`Cuántos archivos conserva el panel y qué rutas adicionales captura cada uno de ellos.`,"settings.backups.allow":`Permitir copias de seguridad`,"settings.backups.allowHint":`Desactivado detiene los archivos nuevos; lo que ya está en disco sigue pudiendo descargarse y restaurarse.`,"settings.backups.offTitle":`Las copias de seguridad están desactivadas`,"settings.backups.offText":`No se archivará nada nuevo hasta volver a activarlo. Los archivos de abajo aún pueden descargarse, restaurarse y eliminarse.`,"settings.backups.keep":`Conservar`,"settings.backups.keepHint":`Los archivos más antiguos se eliminan después de cada copia.`,"settings.backups.extraPaths":`Rutas adicionales`,"settings.backups.extraPathsHint":`Separadas por comas, se capturan en todos los archivos además de lo que declare cada espacio de trabajo.`,"settings.backups.extraPathsPlaceholder":`{home}/myapp-data`,"settings.backups.archiveDirectory":`Directorio de archivos`,"settings.backups.copyArchiveDirectory":`Copiar el directorio de archivos`,"settings.backups.changeDirectory":`Cambiarlo es una decisión a nivel de archivo: edita {path}.`,"settings.backups.theSettingsFile":`el archivo de ajustes`,"settings.backups.capturesTitle":`Qué captura una copia de seguridad`,"settings.backups.capturesDescription":`Elige esto en el diálogo de creación. Un espacio de trabajo puede tomarse entero o solo sus ajustes, servidores, secretos y rutas de datos declaradas.`,"settings.backups.nothingSelectable":`Aún no hay nada seleccionable.`,"settings.backups.fromOrigin":`desde {origin}`,"settings.backups.notCaptured":`no capturado`,"settings.backups.generatedSkipped":`directorios generados omitidos`,"settings.backups.included":`incluido`,"settings.backups.skipped":`omitido`,"settings.backups.workspacesNote":`Este panel sirve {count} espacios de trabajo; cada uno es su propia entrada seleccionable.`,"settings.backups.archivesTitle":`Archivos`,"settings.backups.archivesDescription":`Guardados en el directorio de copias y descargables en cualquier momento.`,"settings.backups.create":`Crear una copia…`,"settings.backups.restore":`Restaurar…`,"settings.backups.noArchives":`Aún no hay archivos`,"settings.backups.noArchivesEnabled":`Crea uno ahora para capturar el panel y los espacios de trabajo que elijas.`,"settings.backups.noArchivesDisabled":`Todavía no se ha archivado nada, y las copias están desactivadas.`,"settings.backups.encrypted":`cifrado`,"settings.backups.download":`Descargar`,"settings.backups.restoreAction":`Restaurar`,"settings.backups.confirmDelete":`Confirmar la eliminación`,"settings.backups.deleted":`Se eliminó {name}.`,"settings.backups.kindSettings":`ajustes`,"settings.backups.kindServers":`servidores`,"settings.backups.kindSecrets":`secretos`,"settings.backups.kindTls":`tls`,"settings.backups.kindData":`datos`,"settings.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.hostnameCount":{one:`{count} nombre de host`,other:`{count} nombres de host`},"settings.ddns.credentialsSet":`credenciales guardadas`,"settings.ddns.noCredentials":`sin credenciales`,"settings.ddns.credentials":`Credenciales`,"settings.ddns.removeAccountBlocked":`Quita primero los nombres de host que usan esta cuenta`,"settings.ddns.noAccounts":`Aún no hay cuentas. Elige un proveedor y añade una.`,"settings.ddns.provider":`Proveedor`,"settings.ddns.accountId":`Id de la cuenta`,"settings.ddns.accountIdPlaceholder":`cloudflare-home`,"settings.ddns.accountIdHint":"El id de la cuenta nombra la cuenta y es la clave de sus credenciales guardadas; letras minúsculas, dígitos, `-` y `_`.","settings.ddns.hostnamesTitle":`Nombres de host`,"settings.ddns.hostnamesDescription":`La lista completa que hay que mantener actualizada — suba.dominio.com, dominio.xyz, etc.`,"settings.ddns.account":`Cuenta`,"settings.ddns.recordA":`A (IPv4)`,"settings.ddns.recordAaaa":`AAAA (IPv6)`,"settings.ddns.aaaaUnsupported":`Este proveedor no puede gestionar registros AAAA.`,"settings.ddns.proxied":`Con proxy`,"settings.ddns.proxiedHint":`Cloudflare sirve este registro a través de su propia red.`,"settings.ddns.ipv6Off":`La detección de IPv6 está desactivada`,"settings.ddns.advanced":`Avanzado`,"settings.ddns.advancedHint":`dominio registrado y anulación del TTL`,"settings.ddns.registeredDomain":`Dominio registrado`,"settings.ddns.registeredDomainPlaceholder":`example.co.uk`,"settings.ddns.registeredDomainHint":`Solo cuando haya que indicar el ápice al proveedor, p. ej. dominios con tres etiquetas.`,"settings.ddns.ttlOverride":`Anulación del TTL (s)`,"settings.ddns.ttlOverrideHint":`En blanco usa el valor de arriba.`,"settings.ddns.noHostnames":`Aún no hay nombres de host.`,"settings.ddns.hostnamePlaceholder":`home.example.com`,"settings.ddns.lastPass":`Última ronda`,"settings.ddns.ipv4Value":`IPv4 {address}`,"settings.ddns.ipv6Value":`IPv6 {address}`,"settings.ddns.type":`Tipo`,"settings.ddns.state":`Estado`,"settings.ddns.address":`Dirección`,"settings.ddns.detail":`Detalle`,"settings.ddns.credentialsTitle":`Credenciales del proveedor`,"settings.ddns.credentialsDescription":`Los campos guardados nunca se devuelven. Guardar reemplaza todos los campos de esta cuenta y ejecuta una ronda de inmediato.`,"settings.ddns.optional":`Opcional.`,"settings.ddns.whereToGet":`Dónde conseguirlas`,"settings.ddns.forget":`Olvidar`,"settings.ddns.forgetConfirm":`Olvidarlas`,"settings.ddns.forgetTitle":`¿Olvidar las credenciales guardadas?`,"settings.ddns.forgetHint":`Se eliminan del disco y no se pueden volver a leer; tendrías que pegarlas otra vez.`,"settings.ddns.saveCredentials":`Guardar las credenciales`,"settings.defaults.title":`Valores predeterminados del servidor`,"settings.defaults.description":`Se aplican a todas las entradas que no definan su propio valor.`,"settings.defaults.enabledHint":`Las entradas nuevas empiezan activadas.`,"settings.defaults.autostart":`Iniciar con el panel`,"settings.defaults.bind":`Enlace`,"settings.defaults.bindLocal":`Local — 127.0.0.1`,"settings.defaults.bindLan":`LAN — 0.0.0.0`,"settings.defaults.onPortConflict":`Si el puerto está ocupado`,"settings.defaults.conflictBlock":`Bloquear el inicio`,"settings.defaults.conflictWarn":`Avisar e iniciar de todos modos`,"settings.defaults.conflictFollow":`Adoptar un reinicio independiente de sí mismo`,"settings.defaults.conflictReclaim":`Sustituir un reinicio independiente por una copia supervisada`,"settings.defaults.conflictKill":`Matar lo que ocupe el puerto`,"settings.defaults.logBufferLines":`Líneas del búfer de registro`,"settings.defaults.logBufferLinesHint":`Se conservan en memoria por servidor.`,"settings.host.title":`Umbrales`,"settings.host.description":`Un umbral de 0 desactiva esa alerta. Las superaciones notifican una vez, y otra más al recuperarse.`,"settings.host.enabled":`Muestrear esta máquina`,"settings.host.enabledHint":`Carga, memoria, swap, disco y temperatura de la CPU, con el intervalo de abajo.`,"settings.host.interval":`Intervalo (ms)`,"settings.host.intervalHint":`Con qué frecuencia se muestrea el host y se comprueban las alertas.`,"settings.host.diskPaths":`Rutas de disco`,"settings.host.diskPathsHint":`Separadas por comas; las plantillas como {home} se expanden.`,"settings.host.diskUsed":`Disco usado (%)`,"settings.host.memoryUsed":`Memoria usada (%)`,"settings.host.swapUsed":`Swap usado (%)`,"settings.host.zeroDisables":`0 desactiva la alerta.`,"settings.host.loadPerCpu":`Carga por CPU`,"settings.host.loadPerCpuHint":`La carga media de 1 minuto dividida por el número de núcleos.`,"settings.host.tempCelsius":`Temperatura de la CPU (°C)`,"settings.host.tempCelsiusHint":`Solo Linux; se ignora donde el sistema operativo no la expone.`,"settings.host.breachingNow":`Superándose ahora:`,"settings.host.nothingBreaching":`Ahora mismo no se supera nada.`,"settings.interface.title":`Interfaz`,"settings.interface.description":`El panel es un sitio estático: conserva el de serie o sirve tu propia compilación desde el directorio de estado.`,"settings.interface.currentlyServing":`Sirviendo actualmente`,"settings.interface.copyDirectory":`Copiar el directorio de la UI`,"settings.interface.fileCount":`{count} archivos`,"settings.interface.sourceStock":`de serie`,"settings.interface.sourceCustom":`personalizada`,"settings.interface.unnamed":`sin nombre`,"settings.interface.panelVersion":`Versión del panel`,"settings.interface.copyPanelVersion":`Copiar la versión del panel`,"settings.interface.panelVersionHint":`La versión que ejecuta este proceso del panel — {command} imprime el mismo número.`,"settings.interface.panelName":`Nombre del panel`,"settings.interface.panelNameHint":`La UI de serie lo muestra en la barra lateral. Una UI personalizada puede mostrar su propio nombre.`,"settings.interface.uploadLabel":`Subir una compilación de UI (.zip con un index.html)`,"settings.interface.docsHint":`Consulta {docs} para el contrato de la API. Si una UI personalizada rompe el panel, {command} restaura la de serie desde el terminal.`,"settings.interface.resetName":`Restablecer el nombre`,"settings.interface.confirmRevert":`Confirmar la reversión`,"settings.interface.revertToStock":`Volver a la de serie`,"settings.interface.install":`Instalar la UI`,"settings.interface.installed":`UI sustituida por {name} — actualiza la página`,"settings.interface.yourBuild":`tu compilación`,"settings.interface.restored":`UI de serie restaurada — actualiza la página`,"settings.interface.nothingInstalled":`no había ninguna UI personalizada instalada`,"settings.listener.title":`Punto de escucha`,"settings.listener.description":`Dónde responde el panel. Cambiarlo reinicia el panel y envía esta página a la nueva dirección.`,"settings.listener.port":`Puerto de control`,"settings.listener.portHint":`Predeterminado 3999.`,"settings.listener.bind":`Enlace`,"settings.listener.bindLocal":`Local`,"settings.listener.bindLan":`LAN`,"settings.listener.bindCustom":`Personalizado`,"settings.listener.bindLanHint":`0.0.0.0 — accesible desde toda la red.`,"settings.listener.bindLocalHint":`127.0.0.1 — solo esta máquina.`,"settings.listener.bindCustomHint":`Una dirección de interfaz concreta que escribas abajo.`,"settings.listener.ipv4":`Dirección IPv4`,"settings.listener.ipv4Placeholder":`192.168.1.20`,"settings.listener.ipv4Error":`Introduce una dirección IPv4, por ejemplo 192.168.1.20.`,"settings.listener.ipv4Hint":`Escuchar más allá de 127.0.0.1 exige una contraseña real.`,"settings.listener.openBrowser":`Abrir un navegador cuando arranque el panel`,"settings.listener.liveAddress":`Dirección activa`,"settings.listener.restartRequired":`requiere reinicio`,"settings.listener.copyLiveAddress":`Copiar la dirección activa`,"settings.listener.liveAddressHint":`A qué está enlazado el punto de escucha ahora mismo; los cambios guardados surten efecto cuando el panel se vuelve a enlazar.`,"settings.logs.title":`Retención`,"settings.logs.description":`La vista en vivo siempre viene de la memoria; estos archivos sobreviven a un reinicio y alimentan la página Registros.`,"settings.logs.persist":`Conservar los registros en disco`,"settings.logs.persistHint":`Desactívalo para mantenerlo todo solo en memoria.`,"settings.logs.maxBytes":`Rotar a los (bytes)`,"settings.logs.maxBytesHint":`Por servidor, antes de pasar a .1, .2, …`,"settings.logs.keep":`Conservar los archivos rotados`,"settings.logs.directory":`Directorio de registros`,"settings.logs.copyDirectory":`Copiar el directorio de registros`,"settings.logs.browseHint":`Explora y descarga estos archivos en la página {logs}.`,"settings.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.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.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.rebind.failed":`El panel de control no respondió en {target}. Consulta la consola para ver el nuevo punto de escucha.`,"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.retry.inFallback":`~8 horas`,"proxy.retry.inMinutes":{one:`~{count} minuto`,other:`~{count} minutos`},"proxy.retry.inHours":{one:`~{count} hora`,other:`~{count} horas`},"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.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.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.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.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.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`,"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`,"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.needLook":{one:`{count} servidor necesita revisión`,other:`{count} servidores necesitan revisión`},"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.filesOnDisk":{one:`{count} archivo`,other:`{count} archivos`},"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.needLook":{one:`{count} servidor necesita revisión`,other:`{count} servidores necesitan revisión`},"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`};export{e as default};
|