Add i18n, branding, user management, health checks, and cleanup for deployment
- Multi-language support (EN/DE) with i18n engine and language files - Configurable branding (name, subtitle, logo) in Settings - Global default language and per-user language preference - User management router with CRUD endpoints - Customer status sync on start/stop/restart - Health check fixes: derive status from container state, remove broken wget healthcheck - Caddy reverse proxy and dashboard env templates for customer stacks - Updated README with real hardware specs, prerequisites, and new features - Removed .claude settings (JWT tokens) and build artifacts from tracking - Updated .gitignore for .claude/ and Windows artifacts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
285
static/lang/de.json
Normal file
285
static/lang/de.json
Normal file
@@ -0,0 +1,285 @@
|
||||
{
|
||||
"login": {
|
||||
"subtitle": "Multi-Tenant Management Plattform",
|
||||
"username": "Benutzername",
|
||||
"password": "Passwort",
|
||||
"signIn": "Anmelden",
|
||||
"signInWithMicrosoft": "Mit Microsoft anmelden"
|
||||
},
|
||||
"nav": {
|
||||
"newCustomer": "Neuer Kunde",
|
||||
"settings": "Einstellungen",
|
||||
"monitoring": "Monitoring",
|
||||
"logout": "Abmelden"
|
||||
},
|
||||
"dashboard": {
|
||||
"totalCustomers": "Kunden gesamt",
|
||||
"active": "Aktiv",
|
||||
"inactive": "Inaktiv",
|
||||
"errors": "Fehler",
|
||||
"searchPlaceholder": "Suche nach Name, Subdomain, E-Mail...",
|
||||
"allStatuses": "Alle Status",
|
||||
"statusActive": "Aktiv",
|
||||
"statusInactive": "Inaktiv",
|
||||
"statusDeploying": "Wird bereitgestellt",
|
||||
"statusError": "Fehler",
|
||||
"refresh": "Aktualisieren",
|
||||
"thId": "ID",
|
||||
"thName": "Name",
|
||||
"thSubdomain": "Subdomain",
|
||||
"thStatus": "Status",
|
||||
"thDashboard": "Dashboard",
|
||||
"thDevices": "Geraete",
|
||||
"thCreated": "Erstellt",
|
||||
"thActions": "Aktionen",
|
||||
"noCustomers": "Keine Kunden gefunden. Klicken Sie auf \"Neuer Kunde\" um einen anzulegen.",
|
||||
"showing": "Zeige {start}-{end} von {total}",
|
||||
"showingEmpty": "Zeige 0 von 0"
|
||||
},
|
||||
"customer": {
|
||||
"back": "Zurueck",
|
||||
"customer": "Kunde",
|
||||
"edit": "Bearbeiten",
|
||||
"delete": "Loeschen",
|
||||
"tabInfo": "Info",
|
||||
"tabDeployment": "Deployment",
|
||||
"tabLogs": "Logs",
|
||||
"tabHealth": "Zustand",
|
||||
"name": "Name:",
|
||||
"company": "Firma:",
|
||||
"subdomain": "Subdomain:",
|
||||
"email": "E-Mail:",
|
||||
"maxDevices": "Max. Geraete:",
|
||||
"status": "Status:",
|
||||
"created": "Erstellt:",
|
||||
"updated": "Aktualisiert:",
|
||||
"notes": "Notizen:",
|
||||
"deploymentStatus": "Status:",
|
||||
"relayUdpPort": "Relay UDP Port:",
|
||||
"dashboardPort": "Dashboard Port:",
|
||||
"containerPrefix": "Container-Praefix:",
|
||||
"deployed": "Bereitgestellt:",
|
||||
"setupUrl": "Setup URL:",
|
||||
"copy": "Kopieren",
|
||||
"open": "Oeffnen",
|
||||
"netbirdLogin": "NetBird Login",
|
||||
"notAvailable": "Nicht verfuegbar",
|
||||
"showCredentials": "Zugangsdaten anzeigen",
|
||||
"credEmail": "E-Mail",
|
||||
"credPassword": "Passwort",
|
||||
"showHide": "Anzeigen/Verbergen",
|
||||
"credentialsNotAvailable": "Zugangsdaten nicht verfuegbar. Der Admin muss das Setup manuell ueber die Setup URL abschliessen.",
|
||||
"start": "Starten",
|
||||
"stop": "Stoppen",
|
||||
"restart": "Neustarten",
|
||||
"reDeploy": "Neu bereitstellen",
|
||||
"noDeployment": "Kein Deployment gefunden.",
|
||||
"deployNow": "Jetzt bereitstellen",
|
||||
"containerLogs": "Container Logs",
|
||||
"noContainerLogs": "Keine Container-Logs verfuegbar.",
|
||||
"noLogsLoaded": "Keine Logs geladen.",
|
||||
"healthCheck": "Zustandspruefung",
|
||||
"check": "Pruefen",
|
||||
"clickCheck": "Klicken Sie auf \"Pruefen\" um eine Zustandspruefung durchzufuehren.",
|
||||
"healthy": "Gesund",
|
||||
"unhealthy": "Fehlerhaft",
|
||||
"overall": "Gesamt:",
|
||||
"thContainer": "Container",
|
||||
"thContainerStatus": "Status",
|
||||
"thHealth": "Zustand",
|
||||
"thImage": "Image",
|
||||
"lastCheck": "Letzte Pruefung: {time}",
|
||||
"openDashboard": "Dashboard oeffnen"
|
||||
},
|
||||
"customerModal": {
|
||||
"newCustomer": "Neuer Kunde",
|
||||
"editCustomer": "Kunde bearbeiten",
|
||||
"nameLabel": "Name *",
|
||||
"companyLabel": "Firma",
|
||||
"subdomainLabel": "Subdomain *",
|
||||
"subdomainHint": "Kleinbuchstaben, alphanumerisch + Bindestriche",
|
||||
"emailLabel": "E-Mail *",
|
||||
"maxDevicesLabel": "Max. Geraete",
|
||||
"notesLabel": "Notizen",
|
||||
"cancel": "Abbrechen",
|
||||
"saveAndDeploy": "Speichern & Bereitstellen",
|
||||
"saveChanges": "Aenderungen speichern"
|
||||
},
|
||||
"deleteModal": {
|
||||
"title": "Loeschung bestaetigen",
|
||||
"confirmText": "Sind Sie sicher, dass Sie den Kunden loeschen moechten",
|
||||
"warning": "Alle Container, NPM-Eintraege und Daten werden entfernt. Diese Aktion kann nicht rueckgaengig gemacht werden.",
|
||||
"cancel": "Abbrechen",
|
||||
"delete": "Loeschen"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Systemeinstellungen",
|
||||
"tabSystem": "Systemkonfiguration",
|
||||
"tabNpm": "NPM Integration",
|
||||
"tabImages": "Docker Images",
|
||||
"tabBranding": "Branding",
|
||||
"tabUsers": "Benutzer",
|
||||
"tabAzure": "Azure AD",
|
||||
"tabSecurity": "Sicherheit",
|
||||
"baseDomain": "Basis-Domain",
|
||||
"baseDomainPlaceholder": "ihredomain.com",
|
||||
"baseDomainHint": "Kunden erhalten Subdomains: kunde.ihredomain.com",
|
||||
"adminEmail": "Admin E-Mail",
|
||||
"adminEmailPlaceholder": "admin@ihredomain.com",
|
||||
"dataDir": "Datenverzeichnis",
|
||||
"dataDirPlaceholder": "/opt/netbird-instances",
|
||||
"dockerNetwork": "Docker Netzwerk",
|
||||
"dockerNetworkPlaceholder": "npm-network",
|
||||
"relayBasePort": "Relay Basis-Port",
|
||||
"relayBasePortHint": "Erster UDP-Port fuer Relay. Bereich: Basis bis Basis+99",
|
||||
"dashboardBasePort": "Dashboard Basis-Port",
|
||||
"dashboardBasePortHint": "Basis-Port fuer Kunden-Dashboards. Kunde N erhaelt Basis+N",
|
||||
"saveSystemSettings": "Systemeinstellungen speichern",
|
||||
"npmDescription": "NPM verwendet JWT-Authentifizierung. Geben Sie Ihre NPM-Anmeldedaten (E-Mail + Passwort) ein. Das System meldet sich automatisch an und bezieht Tokens fuer API-Aufrufe.",
|
||||
"npmApiUrl": "NPM API URL",
|
||||
"npmApiUrlPlaceholder": "http://nginx-proxy-manager:81/api",
|
||||
"npmApiUrlHint": "http:// oder https:// - muss /api am Ende enthalten",
|
||||
"npmLoginEmail": "NPM Login E-Mail",
|
||||
"npmLoginEmailPlaceholder": "Leer lassen um aktuelle beizubehalten",
|
||||
"npmLoginPassword": "NPM Login Passwort",
|
||||
"npmLoginPasswordPlaceholder": "Leer lassen um aktuelles beizubehalten",
|
||||
"credentialsSet": "Zugangsdaten sind gesetzt (leer lassen um aktuelle beizubehalten)",
|
||||
"noCredentials": "Keine NPM-Zugangsdaten konfiguriert",
|
||||
"saveNpmSettings": "NPM Einstellungen speichern",
|
||||
"testConnection": "Verbindung testen",
|
||||
"managementImage": "Management Image",
|
||||
"managementImagePlaceholder": "netbirdio/management:latest",
|
||||
"signalImage": "Signal Image",
|
||||
"signalImagePlaceholder": "netbirdio/signal:latest",
|
||||
"relayImage": "Relay Image",
|
||||
"relayImagePlaceholder": "netbirdio/relay:latest",
|
||||
"dashboardImage": "Dashboard Image",
|
||||
"dashboardImagePlaceholder": "netbirdio/dashboard:latest",
|
||||
"saveImageSettings": "Image Einstellungen speichern",
|
||||
"brandingTitle": "Branding Einstellungen",
|
||||
"companyName": "Firmen- / Anwendungsname",
|
||||
"companyNamePlaceholder": "NetBird MSP Appliance",
|
||||
"companyNameHint": "Wird auf der Login-Seite und in der Navbar angezeigt",
|
||||
"logoPreview": "Logo-Vorschau",
|
||||
"defaultIcon": "Standard-Icon (kein Logo hochgeladen)",
|
||||
"uploadLogo": "Logo hochladen (PNG, JPG, SVG, max 500KB)",
|
||||
"uploadBtn": "Hochladen",
|
||||
"removeLogo": "Logo entfernen",
|
||||
"brandingSubtitle": "Untertitel",
|
||||
"brandingSubtitlePlaceholder": "Multi-Tenant Management Plattform",
|
||||
"brandingSubtitleHint": "Wird unter dem Titel auf der Login-Seite angezeigt",
|
||||
"defaultLanguage": "Standardsprache",
|
||||
"defaultLanguageHint": "Standardsprache fuer Benutzer ohne eigene Einstellung",
|
||||
"systemDefault": "Systemstandard",
|
||||
"saveBranding": "Branding speichern",
|
||||
"userManagement": "Benutzerverwaltung",
|
||||
"newUser": "Neuer Benutzer",
|
||||
"thId": "ID",
|
||||
"thUsername": "Benutzername",
|
||||
"thEmail": "E-Mail",
|
||||
"thRole": "Rolle",
|
||||
"thAuth": "Auth",
|
||||
"thLanguage": "Sprache",
|
||||
"thStatus": "Status",
|
||||
"thActions": "Aktionen",
|
||||
"azureTitle": "Azure AD / Entra ID Integration",
|
||||
"enableAzureSso": "Azure AD SSO aktivieren",
|
||||
"tenantId": "Tenant ID",
|
||||
"clientId": "Client ID (Anwendungs-ID)",
|
||||
"clientSecret": "Client Secret",
|
||||
"clientSecretPlaceholder": "Leer lassen um aktuelles beizubehalten",
|
||||
"secretSet": "Secret ist gesetzt (leer lassen um aktuelles beizubehalten)",
|
||||
"noSecret": "Kein Client Secret konfiguriert",
|
||||
"saveAzureSettings": "Azure AD Einstellungen speichern",
|
||||
"securityTitle": "Admin-Passwort aendern",
|
||||
"currentPassword": "Aktuelles Passwort",
|
||||
"newPassword": "Neues Passwort (min. 12 Zeichen)",
|
||||
"confirmPassword": "Neues Passwort bestaetigen",
|
||||
"changePassword": "Passwort aendern"
|
||||
},
|
||||
"monitoring": {
|
||||
"title": "System Monitoring",
|
||||
"refresh": "Aktualisieren",
|
||||
"hostResources": "Host-Ressourcen",
|
||||
"hostname": "Hostname",
|
||||
"cpu": "CPU ({count} Kerne)",
|
||||
"memory": "Speicher ({used}/{total} GB)",
|
||||
"disk": "Festplatte ({used}/{total} GB)",
|
||||
"allCustomerDeployments": "Alle Kunden-Deployments",
|
||||
"thId": "ID",
|
||||
"thName": "Name",
|
||||
"thSubdomain": "Subdomain",
|
||||
"thStatus": "Status",
|
||||
"thDeployment": "Deployment",
|
||||
"thDashboard": "Dashboard",
|
||||
"thRelayPort": "Relay Port",
|
||||
"thContainers": "Container",
|
||||
"noCustomers": "Keine Kunden."
|
||||
},
|
||||
"userModal": {
|
||||
"title": "Neuer Benutzer",
|
||||
"usernameLabel": "Benutzername *",
|
||||
"passwordLabel": "Passwort * (min. 8 Zeichen)",
|
||||
"emailLabel": "E-Mail",
|
||||
"languageLabel": "Standardsprache",
|
||||
"cancel": "Abbrechen",
|
||||
"createUser": "Benutzer erstellen"
|
||||
},
|
||||
"common": {
|
||||
"loading": "Laden...",
|
||||
"back": "Zurueck",
|
||||
"save": "Speichern",
|
||||
"cancel": "Abbrechen",
|
||||
"delete": "Loeschen",
|
||||
"edit": "Bearbeiten",
|
||||
"view": "Anzeigen",
|
||||
"start": "Starten",
|
||||
"stop": "Stoppen",
|
||||
"restart": "Neustarten",
|
||||
"disable": "Deaktivieren",
|
||||
"enable": "Aktivieren",
|
||||
"resetPassword": "Passwort zuruecksetzen",
|
||||
"open": "Oeffnen",
|
||||
"active": "Aktiv",
|
||||
"disabled": "Deaktiviert"
|
||||
},
|
||||
"errors": {
|
||||
"networkError": "Netzwerkfehler \u2014 Server nicht erreichbar.",
|
||||
"sessionExpired": "Sitzung abgelaufen.",
|
||||
"requestFailed": "Anfrage fehlgeschlagen.",
|
||||
"serverError": "Serverfehler (HTTP {status}).",
|
||||
"unknownError": "Ein unbekannter Fehler ist aufgetreten.",
|
||||
"uploadFailed": "Upload fehlgeschlagen.",
|
||||
"deleteFailed": "Loeschen fehlgeschlagen: {error}",
|
||||
"failedToLoadSettings": "Einstellungen konnten nicht geladen werden: {error}",
|
||||
"failed": "Fehlgeschlagen: {error}",
|
||||
"logoUploadFailed": "Logo-Upload fehlgeschlagen: {error}",
|
||||
"failedToRemoveLogo": "Logo konnte nicht entfernt werden: {error}",
|
||||
"updateFailed": "Aktualisierung fehlgeschlagen: {error}",
|
||||
"passwordResetFailed": "Passwort-Zuruecksetzung fehlgeschlagen: {error}",
|
||||
"selectFileFirst": "Bitte waehlen Sie zuerst eine Datei aus.",
|
||||
"passwordsDoNotMatch": "Passwoerter stimmen nicht ueberein.",
|
||||
"failedToLoadCredentials": "Zugangsdaten konnten nicht geladen werden: {error}",
|
||||
"azureNotConfigured": "Azure AD ist nicht konfiguriert.",
|
||||
"azureLoginFailed": "Azure AD Anmeldung fehlgeschlagen: {error}",
|
||||
"actionFailed": "{action} fehlgeschlagen: {error}"
|
||||
},
|
||||
"messages": {
|
||||
"systemSettingsSaved": "Systemeinstellungen gespeichert.",
|
||||
"npmSettingsSaved": "NPM Einstellungen gespeichert.",
|
||||
"imageSettingsSaved": "Image Einstellungen gespeichert.",
|
||||
"brandingNameSaved": "Branding-Einstellungen gespeichert.",
|
||||
"logoUploaded": "Logo erfolgreich hochgeladen.",
|
||||
"logoRemoved": "Logo entfernt.",
|
||||
"azureSettingsSaved": "Azure AD Einstellungen gespeichert.",
|
||||
"passwordChanged": "Passwort erfolgreich geaendert.",
|
||||
"setupUrlCopied": "Setup URL in die Zwischenablage kopiert.",
|
||||
"copiedToClipboard": "In die Zwischenablage kopiert.",
|
||||
"userCreated": "Benutzer '{username}' erstellt.",
|
||||
"userDeleted": "Benutzer '{username}' geloescht.",
|
||||
"passwordResetFor": "Passwort fuer '{username}' zurueckgesetzt.",
|
||||
"newPasswordAlert": "Neues Passwort fuer '{username}':\n\n{password}\n\nBitte speichern Sie dieses Passwort jetzt. Es wird nicht erneut angezeigt.",
|
||||
"confirmDeleteUser": "Benutzer '{username}' loeschen? Dies kann nicht rueckgaengig gemacht werden.",
|
||||
"confirmResetPassword": "Passwort fuer '{username}' zuruecksetzen? Ein neues zufaelliges Passwort wird generiert."
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user