From 49e3e39ea63eceaeeddbe17b53f8d624b9bddf6e Mon Sep 17 00:00:00 2001 From: Debian Date: Sun, 24 May 2026 12:52:13 +0200 Subject: [PATCH] =?UTF-8?q?fix(i18n):=20RemoteTargets=20S3/SFTP-Labels=20+?= =?UTF-8?q?=20NTP-Interface-Labels=20vollst=C3=A4ndig=20lokalisieren?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RemoteTargets: alle 20+ hardkodierten Form-Labels und deutschen Hilfetexte (S3: Endpoint/Region/Bucket/AccessKey/SecretKey/PathPrefix/HTTPS; SFTP: Host/Port/Username/Password/PrivateKey/RemoteDir/HostKeyFp) sind jetzt in t()-Aufrufen mit remotes.s3.*/remotes.sftp.*-Keys. NTP: Listen-Address-Dropdown-Labels (alle IPv4/IPv6-Interfaces, Loopback) verwenden jetzt dns.settings.allIPv4/allIPv6/loopback (identisch zu DNS-Settings). NTP-Pool-Adresse-Placeholder → t('ntp.pool.addressPlaceholder'). en/de: alle neuen Keys ergänzt. Co-Authored-By: Claude Sonnet 4.6 --- VERSION | 2 +- cmd/edgeguard-api/main.go | 2 +- cmd/edgeguard-ctl/main.go | 2 +- cmd/edgeguard-scheduler/main.go | 2 +- management-ui/src/i18n/locales/de/common.json | 29 +++++++++++ management-ui/src/i18n/locales/en/common.json | 29 +++++++++++ .../src/pages/Backups/RemoteTargets.tsx | 48 +++++++++---------- management-ui/src/pages/NTP/index.tsx | 10 ++-- 8 files changed, 91 insertions(+), 33 deletions(-) diff --git a/VERSION b/VERSION index 4a3a6e6..f6adb66 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.85 +1.1.86 diff --git a/cmd/edgeguard-api/main.go b/cmd/edgeguard-api/main.go index 8d6c8ec..2a79cd1 100644 --- a/cmd/edgeguard-api/main.go +++ b/cmd/edgeguard-api/main.go @@ -60,7 +60,7 @@ import ( usersvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/users" ) -var version = "1.1.85" +var version = "1.1.86" func main() { addr := os.Getenv("EDGEGUARD_API_ADDR") diff --git a/cmd/edgeguard-ctl/main.go b/cmd/edgeguard-ctl/main.go index 44f2965..4276399 100644 --- a/cmd/edgeguard-ctl/main.go +++ b/cmd/edgeguard-ctl/main.go @@ -11,7 +11,7 @@ import ( "git.netcell-it.de/projekte/edgeguard-native/internal/services/setup" ) -var version = "1.1.85" +var version = "1.1.86" const usage = `edgeguard-ctl — EdgeGuard CLI diff --git a/cmd/edgeguard-scheduler/main.go b/cmd/edgeguard-scheduler/main.go index 7b49a30..c6340a2 100644 --- a/cmd/edgeguard-scheduler/main.go +++ b/cmd/edgeguard-scheduler/main.go @@ -35,7 +35,7 @@ import ( "git.netcell-it.de/projekte/edgeguard-native/internal/services/tlscerts" ) -var version = "1.1.85" +var version = "1.1.86" const ( // renewTickInterval — how often we re-evaluate expiring certs. diff --git a/management-ui/src/i18n/locales/de/common.json b/management-ui/src/i18n/locales/de/common.json index 903a591..6541de6 100644 --- a/management-ui/src/i18n/locales/de/common.json +++ b/management-ui/src/i18n/locales/de/common.json @@ -806,6 +806,7 @@ "kindServer": "server — einzelner Host", "address": "Adresse / Host", "addressExtra": "FQDN (für pool: 0.de.pool.ntp.org) oder IP.", + "addressPlaceholder": "0.de.pool.ntp.org oder 10.0.0.10", "iburst": "iburst", "prefer": "prefer", "minpoll": "min-poll", @@ -1090,6 +1091,34 @@ "testFailed": "Test fehlgeschlagen", "confirmDelete": "Ziel {{name}} wirklich löschen?", "targetExtra": "Frei-Text-Label für die Übersicht. Setze hier den Bucket/Path-Hinweis (s3://my-bucket oder sftp://backup@host).", + "namePlaceholder": "z.B. MinIO offsite / Hetzner Storage Box", + "kindS3": "S3 (AWS / MinIO / R2 / B2 / Hetzner Object)", + "kindSftp": "SFTP (SSH)", + "s3": { + "endpoint": "Endpoint", + "endpointExtra": "s3.amazonaws.com / minio.example.com:9000 / fsn1.your-objectstorage.com", + "region": "Region", + "regionPlaceholder": "eu-central-1 / auto (R2)", + "bucket": "Bucket", + "accessKey": "Access Key", + "secretKey": "Secret Key", + "pathPrefix": "Path Prefix", + "pathPrefixExtra": "z.B. edgeguard/utm-1 — wird vor jedem Dateinamen gesetzt", + "useSsl": "HTTPS (use_ssl)" + }, + "sftp": { + "host": "Host", + "port": "Port", + "username": "Benutzername", + "password": "Passwort", + "passwordExtra": "Entweder Passwort ODER Private Key.", + "privateKey": "Private Key (OpenSSH, base64)", + "privateKeyPlaceholder": "base64-kodierter OpenSSH Private Key", + "remoteDir": "Remote-Verzeichnis", + "remoteDirExtra": "z.B. /backups/edgeguard", + "hostKeyFp": "Host-Key-Fingerprint", + "hostKeyFpExtra": "Optional. SHA256:... — leer lassen für TOFU (unsicher gegen MitM)" + }, "col": { "name": "Name", "kind": "Typ", diff --git a/management-ui/src/i18n/locales/en/common.json b/management-ui/src/i18n/locales/en/common.json index c848722..ab89418 100644 --- a/management-ui/src/i18n/locales/en/common.json +++ b/management-ui/src/i18n/locales/en/common.json @@ -806,6 +806,7 @@ "kindServer": "server — single host", "address": "Address / host", "addressExtra": "FQDN (for pool: 0.de.pool.ntp.org) or IP.", + "addressPlaceholder": "0.de.pool.ntp.org or 10.0.0.10", "iburst": "iburst", "prefer": "prefer", "minpoll": "min-poll", @@ -1090,6 +1091,34 @@ "testFailed": "Test failed", "confirmDelete": "Really delete target {{name}}?", "targetExtra": "Free-text label for the overview. Use bucket/path hint (s3://my-bucket or sftp://backup@host).", + "namePlaceholder": "e.g. MinIO offsite / Hetzner Storage Box", + "kindS3": "S3 (AWS / MinIO / R2 / B2 / Hetzner Object)", + "kindSftp": "SFTP (SSH)", + "s3": { + "endpoint": "Endpoint", + "endpointExtra": "s3.amazonaws.com / minio.example.com:9000 / fsn1.your-objectstorage.com", + "region": "Region", + "regionPlaceholder": "eu-central-1 / auto (R2)", + "bucket": "Bucket", + "accessKey": "Access Key", + "secretKey": "Secret Key", + "pathPrefix": "Path Prefix", + "pathPrefixExtra": "e.g. edgeguard/utm-1 — prepended to every filename", + "useSsl": "HTTPS (use_ssl)" + }, + "sftp": { + "host": "Host", + "port": "Port", + "username": "Username", + "password": "Password", + "passwordExtra": "Either password OR private key.", + "privateKey": "Private Key (OpenSSH, base64)", + "privateKeyPlaceholder": "base64-encoded OpenSSH private key", + "remoteDir": "Remote Dir", + "remoteDirExtra": "e.g. /backups/edgeguard", + "hostKeyFp": "Host Key Fingerprint", + "hostKeyFpExtra": "Optional. SHA256:... — leave empty for TOFU (insecure against MitM)" + }, "col": { "name": "Name", "kind": "Kind", diff --git a/management-ui/src/pages/Backups/RemoteTargets.tsx b/management-ui/src/pages/Backups/RemoteTargets.tsx index 10c8a6c..2a9d40f 100644 --- a/management-ui/src/pages/Backups/RemoteTargets.tsx +++ b/management-ui/src/pages/Backups/RemoteTargets.tsx @@ -250,12 +250,12 @@ export default function RemoteTargetsTab() {
edit ? update.mutate({ id: edit.id, v }) : create.mutate(v)}> - + - - + + - + - + - + - + - + @@ -293,29 +293,29 @@ export default function RemoteTargetsTab() { {kind === 'sftp' && ( <> - + - + - + - + - + + placeholder={t('remotes.sftp.privateKeyPlaceholder')} /> - + - + diff --git a/management-ui/src/pages/NTP/index.tsx b/management-ui/src/pages/NTP/index.tsx index 3fa290d..27f45ee 100644 --- a/management-ui/src/pages/NTP/index.tsx +++ b/management-ui/src/pages/NTP/index.tsx @@ -303,7 +303,7 @@ function PoolsTab() { - + @@ -341,10 +341,10 @@ function SettingsTab() { const [form] = Form.useForm() const ipOptions: { value: string; label: string }[] = [ - { value: '0.0.0.0', label: '0.0.0.0 — alle IPv4-Interfaces' }, - { value: '::', label: ':: — alle IPv6-Interfaces' }, - { value: '127.0.0.1', label: '127.0.0.1 — Loopback IPv4' }, - { value: '::1', label: '::1 — Loopback IPv6' }, + { value: '0.0.0.0', label: `0.0.0.0 — ${t('dns.settings.allIPv4')}` }, + { value: '::', label: `:: — ${t('dns.settings.allIPv6')}` }, + { value: '127.0.0.1', label: `127.0.0.1 — ${t('dns.settings.loopback')} IPv4` }, + { value: '::1', label: `::1 — ${t('dns.settings.loopback')} IPv6` }, ] for (const i of sys ?? []) { if (i.ifname === 'lo') continue