[ 'title' => 'SSH-Schlüssel hinzufügen', 'subtitle_before' => 'Öffentlichen Schlüssel einfügen — er wird in', 'subtitle_after' => 'ergänzt.', 'public_key_label' => 'Öffentlicher Schlüssel', 'generate' => 'Neues Paar generieren', 'generating' => 'generiere…', 'public_key_placeholder' => 'ssh-ed25519 AAAA… kommentar — oder oben generieren', 'private_key_warning' => 'Privater Schlüssel — erscheint nur jetzt, sicher speichern.', 'notify_added' => 'SSH-Schlüssel hinzugefügt.', ], // ── Create server ───────────────────────────────────────────────────── 'create_server' => [ 'title' => 'Server hinzufügen', 'subtitle' => 'Neuen Host in die Flotte aufnehmen und den SSH-Zugang im verschlüsselten Tresor hinterlegen.', 'name_label' => 'Name', 'name_placeholder' => 'z. B. Prod-Web-01', 'ip_host_label' => 'IP/Host', 'ip_host_placeholder' => '10.10.90.10 oder host.example.com', 'ssh_port_label' => 'SSH-Port', 'user_label' => 'Benutzer', 'auth_label' => 'Authentifizierung', 'auth_password' => 'Passwort', 'auth_key' => 'Privater Schlüssel', 'secret_key_label' => 'Privater Schlüssel (PEM)', 'secret_password_label' => 'Passwort', 'key_placeholder' => '-----BEGIN OPENSSH PRIVATE KEY-----', 'passphrase_label' => 'Passphrase (optional)', 'passphrase_placeholder' => 'leer = keine', 'credential_name_label' => 'Zugangs-Name (optional)', 'credential_name_placeholder' => 'z. B. Root-Login · Deploy-User', 'validation_ip_or_host' => 'Bitte eine gültige IP-Adresse oder einen Hostnamen angeben.', 'attr_name' => 'Name', 'attr_ip' => 'IP/Host', 'attr_ssh_port' => 'SSH-Port', 'attr_user' => 'Benutzer', 'attr_auth' => 'Authentifizierung', 'attr_secret_key' => 'Privater Schlüssel', 'attr_secret_password' => 'Passwort', 'attr_credential_name' => 'Zugangs-Name', 'notify_added' => 'Server hinzugefügt.', ], // ── Edit credential ─────────────────────────────────────────────────── 'edit_credential' => [ 'title' => 'SSH-Zugang', 'subtitle_before' => 'Hier den Zugang hinterlegen — z. B.', 'subtitle_after' => 'für volle Steuerung (systemctl, Journal).', 'name_label' => 'Name (optional)', 'name_placeholder' => 'z. B. Prod-Server X · Backup-User', 'user_label' => 'Benutzer', 'auth_label' => 'Authentifizierung', 'auth_password' => 'Passwort', 'auth_key' => 'Privater Schlüssel', 'secret_key_label' => 'Privater Schlüssel (PEM)', 'secret_password_label' => 'Passwort', 'key_placeholder' => '-----BEGIN OPENSSH PRIVATE KEY-----', 'passphrase_label' => 'Passphrase (optional)', 'passphrase_placeholder' => 'leer = keine', 'error_required' => 'Benutzer und Passwort/Schlüssel sind erforderlich.', 'error_name_too_long' => 'Name darf höchstens 120 Zeichen lang sein.', 'notify_saved' => 'Zugangsdaten gespeichert.', ], // ── fail2ban: ban IP ────────────────────────────────────────────────── 'fail2ban_ban' => [ 'title' => 'IP manuell sperren', 'subtitle' => 'Sperrt eine IP-Adresse sofort im gewählten Jail. Loopback und der Clusev-Zugang können nicht gesperrt werden.', 'jail_label' => 'Jail', 'ip_label' => 'IP-Adresse', 'ip_placeholder' => 'z. B. 203.0.113.10', 'submit' => 'IP sperren', 'error_ban_failed' => 'Sperren fehlgeschlagen.', 'notify_banned' => 'IP :ip gesperrt.', ], // ── fail2ban: config ────────────────────────────────────────────────── 'fail2ban_config' => [ 'title' => 'fail2ban konfigurieren', 'subtitle' => 'Legt fest, wann fail2ban auf :server eine IP sperrt und wie lange. Wiederholte fehlgeschlagene Anmeldungen innerhalb des Zeitfensters führen zur Sperre.', 'this_server' => 'diesem Server', 'bantime_label' => 'Sperrdauer', 'bantime_placeholder' => 'z. B. 600, 10m, 1h, -1 = dauerhaft', 'maxretry_label' => 'Max. Fehlversuche', 'findtime_label' => 'Zeitfenster', 'findtime_placeholder' => 'z. B. 600, 10m, 1h', 'error_read_locked' => 'Aktuelle Konfiguration konnte nicht gelesen werden — Speichern ist gesperrt.', 'error_bantime_invalid' => 'Ungültige Dauer (z. B. 600, 10m, 1h, -1 für dauerhaft).', 'error_findtime_invalid' => 'Ungültige Dauer (z. B. 600, 10m, 1h).', 'error_save_failed' => 'Speichern fehlgeschlagen. :output', 'attr_bantime' => 'Sperrdauer', 'attr_maxretry' => 'Max. Fehlversuche', 'attr_findtime' => 'Zeitfenster', 'notify_saved' => 'fail2ban konfiguriert.', ], // ── File editor ─────────────────────────────────────────────────────── 'file_editor' => [ 'too_big' => 'Datei zu groß zum Bearbeiten (über 256 KB) — bitte herunterladen.', 'binary' => 'Binärdatei — kann nicht im Editor angezeigt werden.', 'notify_saved' => '„:name“ gespeichert.', ], // ── Firewall rule ───────────────────────────────────────────────────── 'firewall_rule' => [ 'title' => 'Firewall-Regel hinzufügen', 'subtitle_firewalld' => 'Öffnet einen Port in der Standard-Zone von firewalld.', 'subtitle_ufw' => 'Neue UFW-Regel. Quelle leer lassen = von überall.', 'action_label' => 'Aktion', 'action_allow' => 'Erlauben (allow)', 'action_deny' => 'Verwerfen (deny)', 'action_reject' => 'Ablehnen (reject)', 'action_limit' => 'Begrenzen (limit)', 'port_label' => 'Port', 'port_optional' => '(optional)', 'port_placeholder' => 'z. B. 8080', 'proto_label' => 'Protokoll', 'proto_both' => 'Beide', 'source_label' => 'Quelle (optional)', 'source_placeholder' => 'IP oder CIDR, z. B. 10.0.0.0/8', 'error_add_failed' => 'Regel konnte nicht hinzugefügt werden.', 'summary_port_opened' => 'Port :port/:proto geöffnet', 'summary_from' => 'von :source', 'notify_added' => 'Firewall-Regel hinzugefügt.', ], // ── Hardening action ────────────────────────────────────────────────── 'hardening_action' => [ 'title_fallback' => 'Härtung anwenden', 'result_ok' => 'Erfolgreich angewendet.', 'result_failed' => 'Fehlgeschlagen.', 'error_unknown' => 'Unbekannter Fehler.', 'audit_failed_suffix' => '(fehlgeschlagen)', 'notify_applied' => ':action angewendet.', 'notify_failed' => ':action fehlgeschlagen.', ], // ── System update ───────────────────────────────────────────────────── 'system_update' => [ 'title' => 'System-Updates', 'subtitle' => 'Aktualisiert die installierten Pakete auf :server über die Paketverwaltung. Es werden keine neuen Versionssprünge erzwungen — nur verfügbare Updates eingespielt.', 'this_server' => 'diesem Server', 'unsupported_fallback' => 'Auf diesem System nicht verfügbar.', 'count_unknown' => 'Update-Anzahl unbekannt', 'count_one' => '1 Paket-Update verfügbar', 'count_many' => ':count Paket-Updates verfügbar', 'hint_unknown' => 'Konnte nicht ermittelt werden — Aktualisierung trotzdem möglich.', 'hint_recommended' => 'Aktualisierung empfohlen.', 'hint_up_to_date' => 'Das System ist auf dem aktuellen Stand.', 'result_ok' => 'System aktualisiert.', 'result_failed' => 'Aktualisierung fehlgeschlagen.', 'submit' => 'Jetzt aktualisieren', 'audit_failed_suffix' => '(fehlgeschlagen)', 'notify_updated' => 'System aktualisiert.', 'notify_failed' => 'Aktualisierung fehlgeschlagen.', ], // ── Generic confirm dialog defaults (ConfirmAction) ─────────────────── 'confirm_action' => [ 'default_heading' => 'Aktion bestätigen', 'default_notify' => 'Aktion ausgeführt.', ], ];