feat(15-06): phase-wide i18n keys + sixth admin nav entry for groups

- de.json/en.json: admin.groups.* (incl. ldapBind, members, deleteConfirm,
  grants sub-namespaces), admin.users.grants.*, adminModules.grantsLink +
  grants.* + activationDialog.*, modules.accessDenied.*, marketplace
  statusNoAccess/toastNoAccess, header.admin.groups -- covers this plan's
  /admin/groups surface plus the Wave 4 surfaces (permission matrix,
  user-detail grants, activation dialog, 403 page, marketplace badge) so
  15-07/15-08 can run in parallel without touching the translation files
- admin-sidebar.tsx: sixth nav entry "Gruppen" -> /admin/groups with a
  roster/list icon (Lucide list glyph, distinct from the users icon)
This commit is contained in:
2026-08-04 18:50:28 +02:00
parent 09abb2b323
commit 90dc3981d5
3 changed files with 195 additions and 10 deletions
+90 -5
View File
@@ -75,7 +75,8 @@
"tenants": "Mandanten",
"modules": "Module",
"ldap": "LDAP",
"smtp": "SMTP"
"smtp": "SMTP",
"groups": "Gruppen"
},
"role": {
"SUPER_ADMIN": "Super-Admin",
@@ -264,7 +265,21 @@
"status": "Status",
"actions": "Aktionen",
"password": "Passwort",
"noUsers": "Keine Benutzer gefunden"
"noUsers": "Keine Benutzer gefunden",
"grants": {
"detailsButton": "Details",
"modalTitle": "{username} — Zugriff",
"groupsSection": "Gruppenmitgliedschaften",
"noGroups": "Dieser Benutzer ist keiner Gruppe zugeordnet.",
"accessSection": "Modul-Zugriff",
"moduleColumn": "Modul",
"viaGroupsColumn": "Über Gruppe(n)",
"directColumn": "Direkt",
"noInheritance": "–",
"noActiveModules": "Für diesen Mandanten sind keine Module aktiviert.",
"directCheckboxLabel": "{module} direkt für {user} {granted, select, true {freigeben} other {entziehen}}",
"saveError": "Freigabe konnte nicht gespeichert werden. Bitte erneut versuchen."
}
},
"tenants": {
"title": "Mandantenverwaltung",
@@ -353,6 +368,52 @@
"skipped": "uebersprungen",
"errors": "Fehler"
}
},
"groups": {
"title": "Gruppen",
"create": "Gruppe erstellen",
"edit": "Gruppe bearbeiten",
"delete": "Gruppe löschen",
"noGroups": "Keine Gruppen vorhanden",
"noGroupsBody": "Lege deine erste Gruppe an, um Modulzugriff gezielt zu vergeben.",
"name": "Name",
"ldapBinding": "AD-Bindung",
"boundBadge": "AD-gebunden",
"manualBadge": "Manuell",
"defaultGroup": "Standardgruppe",
"setDefault": "Als Standardgruppe festlegen",
"isDefault": "Standardgruppe",
"memberCount": "Mitglieder",
"actions": "Aktionen",
"membersButton": "Mitglieder",
"saveError": "Gruppe konnte nicht gespeichert werden. Bitte erneut versuchen.",
"deleteError": "Gruppe konnte nicht gelöscht werden. Bitte erneut versuchen.",
"ldapBind": {
"hint": "Wähle eine AD-Gruppe aus der Liste, um die Mitgliedschaft automatisch zu synchronisieren.",
"bound": "Gebunden an: {ldapDn}",
"unbind": "Bindung entfernen",
"searchPlaceholder": "AD-Gruppen durchsuchen...",
"discoverError": "AD-Gruppen konnten nicht geladen werden. Bitte erneut versuchen.",
"noResults": "Keine AD-Gruppen gefunden."
},
"members": {
"title": "Mitglieder",
"remove": "Mitglied entfernen",
"ldapManaged": "Wird über AD-Sync verwaltet",
"sourceManual": "Manuell",
"sourceLdap": "LDAP",
"addTitle": "Mitglied hinzufügen",
"searchPlaceholder": "Benutzer suchen...",
"noMembers": "Keine Mitglieder vorhanden.",
"addError": "Mitglied konnte nicht hinzugefügt werden. Bitte erneut versuchen."
},
"deleteConfirm": {
"title": "Gruppe löschen",
"body": "Diese Gruppe hat {memberCount} Mitglieder und {grantCount} Modul-Freigaben. Betroffene Benutzer verlieren den Zugriff, sofern sie ihn nicht anderweitig haben. Diese Aktion kann nicht rückgängig gemacht werden."
},
"grants": {
"matrixCheckboxLabel": "{module} für Gruppe {group} {granted, select, true {freigeben} other {entziehen}}"
}
}
},
"adminModules": {
@@ -367,7 +428,24 @@
"noModules": "Keine Module verfuegbar",
"activateSuccess": "Modul erfolgreich aktiviert",
"deactivateSuccess": "Modul erfolgreich deaktiviert",
"error": "Fehler bei der Modulverwaltung"
"error": "Fehler bei der Modulverwaltung",
"grantsLink": "Freigaben-Matrix",
"grants": {
"title": "Freigaben-Matrix",
"searchPlaceholder": "Module oder Gruppen durchsuchen...",
"emptyModules": "Es sind noch keine Module für diesen Mandanten aktiviert. Aktiviere zuerst ein Modul unter Module.",
"emptyModulesLink": "Zu Module",
"adminNote": "ADMIN und SUPER_ADMIN haben immer Zugriff auf alle aktiven Module — diese Matrix betrifft nur die Rolle USER.",
"saveError": "Freigabe konnte nicht gespeichert werden. Bitte erneut versuchen."
},
"activationDialog": {
"title": "Modul aktivieren: {module}",
"body": "Soll die Standardgruppe sofort Zugriff auf dieses Modul erhalten, oder möchtest du die Freigaben separat konfigurieren?",
"grantNow": "Sofort freigeben",
"configureLater": "Später konfigurieren",
"cancel": "Abbrechen",
"noDefaultGroupHint": "Keine Standardgruppe markiert — lege zuerst eine unter Gruppen fest oder konfiguriere die Freigabe manuell."
}
},
"theme": {
"light": "Hell",
@@ -387,7 +465,12 @@
"backToCategory": "Zurueck zur Kategorie",
"allModules": "Module",
"allModulesDescription": "Verfuegbare Module fuer Ihren Mandanten",
"noActiveModules": "Keine Module aktiviert. Bitten Sie Ihren Administrator, Module zu aktivieren."
"noActiveModules": "Keine Module aktiviert. Bitten Sie Ihren Administrator, Module zu aktivieren.",
"accessDenied": {
"title": "Kein Zugriff auf dieses Modul",
"body": "Du hast für dieses Modul keine Freigabe. Wende dich an deinen Administrator.",
"backToDashboard": "Zur Startseite"
}
},
"domaincheck": {
"title": "Domaincheck",
@@ -521,7 +604,9 @@
"detailVersion": "Version {version}",
"detailStatusActive": "Aktiviert fuer diesen Mandanten",
"detailStatusInactive": "Nicht aktiviert",
"accessDenied": "Zugriff verweigert"
"accessDenied": "Zugriff verweigert",
"statusNoAccess": "Kein Zugriff",
"toastNoAccess": "Kein Zugriff auf dieses Modul — wende dich an deinen Administrator."
},
"certManager": {
"title": "Zertifikat-Manager",