dorfteich/packages/shared/i18n/de/system.json
Claude Fable 5 394d1c811d
All checks were successful
CI / Lint, typecheck, test (pull_request) Successful in 4m52s
CI / Build container images (pull_request) Successful in 3m54s
CI / Auth e2e pack (pull_request) Successful in 8m4s
CI / Import/export fidelity gate (pull_request) Successful in 56s
CD / Build and push images (push) Successful in 19s
CD / Deploy to Test (push) Successful in 13s
CD / Smoke tests against Test (push) Successful in 1m14s
CD / Promote to Int (push) Successful in 11s
CI / Lint, typecheck, test (push) Successful in 5m0s
CI / Build container images (push) Has been skipped
CI / Auth e2e pack (push) Successful in 7m41s
CI / Import/export fidelity gate (push) Successful in 56s
#192: deploy-level backup target allowlist
BACKUP_ALLOWED_TARGETS (comma-separated destination hosts) constrains
where backups may go, enforced twice: the api rejects settings writes
and connection tests towards non-allowlisted hosts with admin-visible
error codes and resolves a non-allowlisted configured target to null,
and the sidecar enforces the same policy at the point of egress for the
WebDAV upload and the rsync mirror alike (shared policy helpers in
packages/shared/src/backup-target-policy.ts).

BREAKING: the empty default disables every remote target - backups stay
local only, the VS-NfD reference configuration (ADR 0026). Existing
deployments with a remote target must list its host or uploads and
mirror stop. The admin UI distinguishes unavailable-by-policy from
unconfigured (i18n de+en) and shows the permitted hosts.

Refs #192 (ADR 0026)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0168Ph5uBmHm8X28CSVpbpnJ
2026-07-30 12:17:14 +02:00

203 lines
8.1 KiB
JSON

{
"title": "System",
"backLink": "Zurück zu den Einstellungen",
"settingsLink": "System-Panel",
"jobs": {
"title": "Wartungsjobs",
"columns": {
"job": "Job",
"cadence": "Rhythmus",
"lastRun": "Letzter Lauf",
"duration": "Dauer",
"outcome": "Ergebnis",
"actions": "Aktionen"
},
"names": {
"trash-purge": "Papierkorb-Bereinigung",
"version-thinning": "Versions-Ausdünnung",
"page-compaction": "Seiten-Kompaktierung",
"data-export-purge": "Datenexport-Bereinigung"
},
"outcome": {
"ok": "OK",
"running": "Läuft",
"failed": "Fehlgeschlagen",
"never": "Noch nie gelaufen"
},
"unregistered": "In diesem Build nicht mehr registriert",
"run": "Jetzt ausführen",
"runPending": "Läuft…",
"triggered": {
"succeeded": "Lauf erfolgreich abgeschlossen.",
"failed": "Lauf fehlgeschlagen — Fehler steht in der Zeile.",
"already_running": "Läuft bereits — gleich noch einmal versuchen."
},
"cadence": {
"days_one": "täglich",
"days_other": "alle {{count}} Tage",
"hours_one": "stündlich",
"hours_other": "alle {{count}} Stunden",
"minutes_one": "jede Minute",
"minutes_other": "alle {{count}} Minuten",
"seconds_other": "alle {{count}} Sekunden"
}
},
"backup": {
"title": "Backups",
"fresh": "Aktuell",
"stale": "Veraltet — älter als {{hours}} h",
"unavailable": "Kein Backup-Status gefunden. Der Backup-Sidecar ist noch nicht gelaufen (oder nicht eingerichtet) — siehe deploy/monitoring.md.",
"lastSuccess": "Letztes erfolgreiches Backup",
"lastRun": "Letzter Lauf",
"outcome": {
"succeeded": "erfolgreich",
"failed": "fehlgeschlagen"
},
"never": "noch keines",
"sizes": "Dump {{dump}}, Dateien {{archive}}",
"retention": "Aufbewahrung: {{days}} Tage",
"error": "Letzter Fehler",
"runNow": "Jetzt sichern",
"runPending": "Wird angefordert…",
"runRequested": "Backup angefordert — der Sidecar führt es im Hintergrund aus. Diese Karte aktualisiert sich automatisch.",
"remote": {
"title": "Nextcloud-Ziel",
"notConfigured": "Kein Nextcloud-Ziel konfiguriert — Backups bleiben nur auf diesem Host.",
"lastUpload": "Letzter Upload",
"lastSuccessfulUpload": "Letzter erfolgreicher Upload",
"bundleSize": "Bundle {{size}}"
},
"settings": {
"title": "Backup-Einstellungen",
"localRetention": "Lokale Aufbewahrung (Tage)",
"localRetentionHint": "Leer = Container-Standard behalten (BACKUP_RETENTION_DAYS).",
"remoteRetention": "Nextcloud-Aufbewahrung (Tage)",
"enabled": "Backups zu Nextcloud hochladen",
"baseUrl": "Nextcloud-Adresse (URL)",
"baseUrlHint": "Die einfache Server-Adresse, z. B. https://cloud.example.com — der WebDAV-Pfad wird abgeleitet.",
"username": "Benutzername",
"password": "App-Passwort",
"passwordStored": "Gespeichert — leer lassen, um es zu behalten",
"passwordHint": "In Nextcloud anlegen unter Einstellungen → Sicherheit → Geräte & Sitzungen.",
"folder": "Ordner",
"schedule": "Upload-Zeitplan",
"scheduleOptions": {
"off": "Nur manuell",
"daily": "Nach jedem Backup (täglich)",
"weekly": "Wöchentlich"
},
"test": "Verbindung testen",
"testPending": "Teste…",
"testOk": "Verbindung ok — der Ordner ist erreichbar.",
"save": "Backup-Einstellungen speichern",
"savePending": "Speichere…",
"saved": "Backup-Einstellungen gespeichert.",
"remoteDisabledByPolicy": "Entfernte Backup-Ziele sind durch die Deployment-Richtlinie deaktiviert (BACKUP_ALLOWED_TARGETS ist leer) — Backups bleiben lokal. Das ist eine bewusste Einstellung des Betreibers, keine fehlende Konfiguration.",
"allowedTargets": "Zulässige Ziel-Hosts laut Deployment-Richtlinie: {{hosts}}"
},
"restore": {
"title": "Wiederherstellung",
"open": "Ein Backup wiederherstellen…",
"warning": "Die Wiederherstellung ersetzt ALLE aktuellen Inhalte, Dateien und Einstellungen dieser Instanz durch den Stand des gewählten Backups. Während der Wiederherstellung ist die Instanz im Wartungsmodus.",
"loading": "Lade Backup-Sets…",
"localTitle": "Auf diesem Host",
"remoteTitle": "Auf Nextcloud",
"empty": "Keine wiederherstellbaren Sets gefunden.",
"remoteError": "Die Nextcloud-Sets konnten nicht aufgelistet werden: {{error}}",
"confirmLabel": "Zur Bestätigung die Backup-ID eintippen: {{id}}",
"button": "Dieses Backup wiederherstellen",
"pending": "Wiederherstellung wird angefordert…",
"requested": "Wiederherstellung angefordert — die Instanz geht in den Wartungsmodus.",
"status": {
"running": "Wiederherstellung von {{id}} läuft (gestartet {{startedAt}})…",
"succeeded": "Wiederherstellung von {{id}} war erfolgreich ({{finishedAt}}).",
"failed": "Wiederherstellung von {{id}} ist fehlgeschlagen: {{error}}"
}
},
"mirror": {
"title": "Privater Spiegel",
"lastSuccess": "Letzte erfolgreiche Spiegelung",
"failed": "letzter Lauf fehlgeschlagen"
}
},
"audit": {
"title": "Audit-Log",
"filters": {
"actor": "Akteur (Benutzername)",
"action": "Aktion",
"actionAny": "Alle Aktionen",
"from": "Von",
"to": "Bis",
"apply": "Filtern"
},
"columns": {
"time": "Zeit",
"actor": "Akteur",
"action": "Aktion",
"target": "Ziel",
"details": "Details"
},
"systemActor": "System",
"empty": "Keine Einträge für diesen Filter.",
"pager": "Seite {{page}} von {{pageCount}} ({{total}} Einträge)",
"previous": "Zurück",
"next": "Weiter",
"actions": {
"grant.created": "Zugriffsregel angelegt",
"grant.deleted": "Zugriffsregel gelöscht",
"member.added": "Mitglied hinzugefügt",
"member.role_changed": "Mitgliedsrolle geändert",
"member.removed": "Mitglied entfernt",
"user.disabled_set": "Nutzer gesperrt/entsperrt",
"user.verification_resent": "Bestätigungsmail erneut gesendet",
"user.deleted": "Nutzer gelöscht",
"user.site_admin_set": "Site-Admin-Rolle geändert",
"user.pseudonymized": "Nutzer pseudonymisiert",
"quota.override_set": "Quota-Ausnahme gesetzt",
"quota.override_cleared": "Quota-Ausnahme entfernt",
"plugin.installed": "Plugin installiert",
"plugin.mode_set": "Plugin-Modus geändert",
"plugin.uninstalled": "Plugin deinstalliert",
"plugin.pond_toggled": "Teich-Plugin umgeschaltet",
"settings.changed": "Instanz-Einstellung geändert",
"setup.preseeded": "Setup vorbefüllt",
"setup.admin_created": "Setup: Admin angelegt",
"setup.smtp_stored": "Setup: SMTP gespeichert",
"setup.completed": "Setup abgeschlossen",
"auth.signup": "Registrierung",
"auth.email_verified": "E-Mail bestätigt",
"auth.login_failed": "Anmeldung fehlgeschlagen",
"auth.login_succeeded": "Anmeldung",
"auth.password_reset": "Passwort zurückgesetzt",
"job.triggered": "Job manuell gestartet",
"backup.settings_changed": "Backup-Einstellungen geändert",
"backup.run_triggered": "Manuelles Backup ausgelöst",
"backup.restore_requested": "Backup-Wiederherstellung angefordert",
"api.token_created": "API-Token erstellt",
"api.token_revoked": "API-Token widerrufen",
"api.write": "Schreibzugriff über öffentliche API"
}
},
"storage": {
"title": "Speicher",
"total": "Gesamtbelegung: {{total}}",
"columns": {
"pond": "Teich",
"type": "Typ",
"used": "Belegt"
},
"types": {
"personal": "persönlich",
"shared": "geteilt"
},
"empty": "Noch keine Belegung erfasst."
},
"maintenance": {
"title": "Wartungsmodus",
"body": "Ein Backup wird wiederhergestellt. Die Instanz ist vorübergehend nicht erreichbar.",
"waiting": "Warte darauf, dass die Instanz zurückkommt…",
"failed": "Die Wiederherstellung ist fehlgeschlagen: {{error}}",
"reload": "Neu laden"
}
}