From bb14d2ac6cb439920154d35126083a6745b665df Mon Sep 17 00:00:00 2001 From: Debian Date: Sun, 24 May 2026 12:47:28 +0200 Subject: [PATCH] fix(i18n): hardkodierte Strings in Cluster/Users/Backups/Alerts bereinigen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Cluster: statusTag() bekommt t-Parameter; Status-Labels (online/offline/ joining/leaving/unknown) → cluster.status.* Keys - Users: 'You'-Tag → t('users.you') / de: 'Ich' - Backups: 'OK'-Status-Tag → t('backups.okTag') - Alerts: Kanal-Kind-Labels + alle SMTP-Formular-Labels in t() überführt - en/de: cluster.status.*, users.you, backups.okTag, alerts.smtp.*, alerts.kindWebhook/kindEmail 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 | 21 ++++++++++++++++++- management-ui/src/i18n/locales/en/common.json | 21 ++++++++++++++++++- management-ui/src/pages/Alerts/index.tsx | 16 +++++++------- management-ui/src/pages/Backups/History.tsx | 2 +- management-ui/src/pages/Cluster/index.tsx | 16 +++++++------- management-ui/src/pages/Users/index.tsx | 2 +- 10 files changed, 62 insertions(+), 24 deletions(-) diff --git a/VERSION b/VERSION index ccc213c..4a3a6e6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.1.84 +1.1.85 diff --git a/cmd/edgeguard-api/main.go b/cmd/edgeguard-api/main.go index 90182aa..8d6c8ec 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.84" +var version = "1.1.85" func main() { addr := os.Getenv("EDGEGUARD_API_ADDR") diff --git a/cmd/edgeguard-ctl/main.go b/cmd/edgeguard-ctl/main.go index be83705..44f2965 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.84" +var version = "1.1.85" const usage = `edgeguard-ctl — EdgeGuard CLI diff --git a/cmd/edgeguard-scheduler/main.go b/cmd/edgeguard-scheduler/main.go index c8800bf..7b49a30 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.84" +var version = "1.1.85" 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 42f8443..1230520 100644 --- a/management-ui/src/i18n/locales/de/common.json +++ b/management-ui/src/i18n/locales/de/common.json @@ -454,7 +454,14 @@ "joinTokenOneShot": "Einmalig anzeigen, einmalig nutzbar", "joinTokenOneShotDesc": "Token jetzt sicher übertragen — er erscheint nie wieder. Gültig bis {{expires}}. Beim Einlösen via cluster-join wird er server-seitig als verbraucht markiert.", "joinTokenFailed": "Token-Generierung fehlgeschlagen", - "joinCmdLabel": "Auf dem neuen Node ausführen:" + "joinCmdLabel": "Auf dem neuen Node ausführen:", + "status": { + "online": "online", + "offline": "offline", + "joining": "joining", + "leaving": "leaving", + "unknown": "unbekannt" + } }, "ssl": { "title": "SSL-Zertifikate", @@ -1048,6 +1055,16 @@ "emptyEventsDesc": "Triggers (Cert-Expiry, Backup-Fail, Cluster-Drift, License-Invalid, etc.) haben noch keinen Event gefeuert. Wenn sie feuern, landen sie hier und werden an die konfigurierten Channels zugestellt.", "noChannels": "kein Channel aktiv", "confirmDelete": "Channel {{name}} wirklich löschen?", + "kindWebhook": "Webhook (Slack/Discord/Teams/HTTP-Endpoint)", + "kindEmail": "E-Mail (SMTP)", + "smtp": { + "host": "SMTP-Host", + "port": "SMTP-Port", + "from": "Absender (From)", + "username": "Benutzername", + "password": "Passwort", + "starttls": "STARTTLS" + }, "col": { "name": "Name", "kind": "Typ", @@ -1132,6 +1149,7 @@ "confirmDelete": "Backup {{file}} wirklich löschen?", "empty": "Noch keine Backups. Klicke „Backup jetzt erstellen\" oder warte den nächsten Auto-Tick ab.", "failedTag": "FEHLER", + "okTag": "OK", "col": { "time": "Zeit", "file": "Datei", @@ -1226,6 +1244,7 @@ "emptyDesc": "Oben den ersten zusätzlichen Benutzer anlegen.", "errorEmailTaken": "Diese E-Mail-Adresse wird bereits verwendet.", "cannotDeleteSelf": "Das eigene Konto kann nicht gelöscht werden.", + "you": "Ich" "never": "Nie" }, "audit": { diff --git a/management-ui/src/i18n/locales/en/common.json b/management-ui/src/i18n/locales/en/common.json index 903c43d..c848722 100644 --- a/management-ui/src/i18n/locales/en/common.json +++ b/management-ui/src/i18n/locales/en/common.json @@ -454,7 +454,14 @@ "joinTokenOneShot": "Shown once, usable once", "joinTokenOneShotDesc": "Transfer the token securely now — it won't be shown again. Valid until {{expires}}. Server marks it as consumed when redeemed via cluster-join.", "joinTokenFailed": "Token generation failed", - "joinCmdLabel": "Run on the new node:" + "joinCmdLabel": "Run on the new node:", + "status": { + "online": "online", + "offline": "offline", + "joining": "joining", + "leaving": "leaving", + "unknown": "unknown" + } }, "ssl": { "title": "SSL certificates", @@ -1048,6 +1055,16 @@ "emptyEventsDesc": "Triggers (cert expiry, backup failure, cluster drift, license invalid, etc.) haven't fired any events yet. When they do, they land here and get delivered to the configured channels.", "noChannels": "no active channel", "confirmDelete": "Really delete channel {{name}}?", + "kindWebhook": "Webhook (Slack/Discord/Teams/HTTP endpoint)", + "kindEmail": "Email (SMTP)", + "smtp": { + "host": "SMTP host", + "port": "SMTP port", + "from": "From", + "username": "Username", + "password": "Password", + "starttls": "STARTTLS" + }, "col": { "name": "Name", "kind": "Kind", @@ -1132,6 +1149,7 @@ "confirmDelete": "Really delete backup {{file}}?", "empty": "No backups yet. Click “Run backup now” or wait for the next scheduled tick.", "failedTag": "FAILED", + "okTag": "OK", "col": { "time": "Time", "file": "File", @@ -1226,6 +1244,7 @@ "emptyDesc": "Add the first additional user above.", "errorEmailTaken": "This email address is already in use.", "cannotDeleteSelf": "You cannot delete your own account.", + "you": "You", "never": "Never" }, "audit": { diff --git a/management-ui/src/pages/Alerts/index.tsx b/management-ui/src/pages/Alerts/index.tsx index dbc3a02..dd55ac2 100644 --- a/management-ui/src/pages/Alerts/index.tsx +++ b/management-ui/src/pages/Alerts/index.tsx @@ -342,8 +342,8 @@ export default function AlertsPage() { - + - + - + - + - + diff --git a/management-ui/src/pages/Backups/History.tsx b/management-ui/src/pages/Backups/History.tsx index b639c7c..b07d2e1 100644 --- a/management-ui/src/pages/Backups/History.tsx +++ b/management-ui/src/pages/Backups/History.tsx @@ -187,7 +187,7 @@ export default function HistoryTab() { title: t('backups.col.status'), dataIndex: 'status', width: 110, render: (s: Backup['status'], row) => s === 'success' - ? OK + ? {t('backups.okTag')} : ( {t('backups.failedTag')} diff --git a/management-ui/src/pages/Cluster/index.tsx b/management-ui/src/pages/Cluster/index.tsx index a482c17..82a0f8e 100644 --- a/management-ui/src/pages/Cluster/index.tsx +++ b/management-ui/src/pages/Cluster/index.tsx @@ -82,13 +82,13 @@ interface CertStatus { peer?: CertInfo } -function statusTag(s: HANode['status']) { +function statusTag(s: HANode['status'], t: (k: string) => string) { switch (s) { - case 'online': return online - case 'offline': return offline - case 'joining': return joining - case 'leaving': return leaving - default: return unknown + case 'online': return {t('cluster.status.online')} + case 'offline': return {t('cluster.status.offline')} + case 'joining': return {t('cluster.status.joining')} + case 'leaving': return {t('cluster.status.leaving')} + default: return {t('cluster.status.unknown')} } } @@ -208,7 +208,7 @@ export default function ClusterPage() { }, { title: t('cluster.col.status'), dataIndex: 'status', width: 110, - render: (s: HANode['status']) => statusTag(s), + render: (s: HANode['status']) => statusTag(s, t), }, { title: t('cluster.col.role'), dataIndex: 'role', width: 110, render: (v: string) => {v} }, @@ -324,7 +324,7 @@ export default function ClusterPage() { - {statusTag(data.local_node.status)} + {statusTag(data.local_node.status, t)} diff --git a/management-ui/src/pages/Users/index.tsx b/management-ui/src/pages/Users/index.tsx index 5667e16..ecae161 100644 --- a/management-ui/src/pages/Users/index.tsx +++ b/management-ui/src/pages/Users/index.tsx @@ -91,7 +91,7 @@ export default function UsersPage() { render: (s: string) => ( {s} - {me?.actor === s && You} + {me?.actor === s && {t('users.you')}} ), },