Fix language setting not being saved to database on admin settings page

- Added default_language field to general settings state in SettingsPage
- Replaced LanguageSelector component with simple select dropdown on settings page
- Fixed public settings endpoint to read general_default_language from database
- Language setting now properly saved when clicking Save Settings button
- Setting is correctly used by gallery login page and legal pages

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-07-08 09:49:45 +02:00
parent cfa0b0da69
commit 2012b0bab9
91 changed files with 6183 additions and 577 deletions
+36
View File
@@ -0,0 +1,36 @@
import i18n from 'i18next';
import { initReactI18next } from 'react-i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import HttpBackend from 'i18next-http-backend';
import enTranslations from './locales/en.json';
import deTranslations from './locales/de.json';
i18n
.use(HttpBackend)
.use(LanguageDetector)
.use(initReactI18next)
.init({
fallbackLng: 'en',
debug: false,
resources: {
en: {
translation: enTranslations,
},
de: {
translation: deTranslations,
},
},
interpolation: {
escapeValue: false,
},
detection: {
order: ['localStorage', 'cookie', 'navigator', 'htmlTag'],
caches: ['localStorage', 'cookie'],
},
});
export default i18n;
+284
View File
@@ -0,0 +1,284 @@
{
"common": {
"loading": "Wird geladen...",
"error": "Fehler",
"save": "Speichern",
"cancel": "Abbrechen",
"delete": "Löschen",
"edit": "Bearbeiten",
"add": "Hinzufügen",
"search": "Suchen",
"filter": "Filtern",
"sortBy": "Sortieren nach",
"yes": "Ja",
"no": "Nein",
"back": "Zurück",
"next": "Weiter",
"previous": "Zurück",
"close": "Schließen",
"logout": "Abmelden",
"download": "Herunterladen",
"downloadAll": "Alle herunterladen",
"uploading": "Wird hochgeladen...",
"uploaded": "Hochgeladen",
"photo": "Foto",
"photos": "Fotos"
},
"navigation": {
"dashboard": "Dashboard",
"events": "Veranstaltungen",
"archives": "Archive",
"settings": "Einstellungen",
"branding": "Branding",
"analytics": "Analytik",
"emailSettings": "E-Mail-Einstellungen",
"cmsPages": "CMS-Seiten"
},
"auth": {
"login": "Anmelden",
"password": "Passwort",
"enterPassword": "Galerie-Passwort eingeben",
"passwordPlaceholder": "Geben Sie das Galerie-Passwort ein",
"invalidPassword": "Ungültiges Passwort",
"sessionExpired": "Sitzung abgelaufen",
"pleaseEnterPassword": "Bitte geben Sie ein Passwort ein",
"passwordHint": "Das Passwort wurde vom Veranstalter bereitgestellt. Kontaktieren Sie ihn, wenn Sie es nicht haben."
},
"gallery": {
"title": "Fotogalerie",
"welcomeMessage": "Willkommensnachricht",
"expiresOn": "Läuft ab am",
"expires": "Läuft ab",
"expired": "Abgelaufen",
"daysRemaining": "{{days}} Tage verbleibend",
"dayRemaining": "1 Tag verbleibend",
"hoursRemaining": "{{hours}} Stunden verbleibend",
"expiredMessage": "Diese Galerie ist am {{date}} abgelaufen",
"contactOrganizer": "Bitte kontaktieren Sie den Veranstalter, wenn Sie Zugriff auf diese Fotos benötigen",
"searchPhotos": "Fotos nach Dateiname suchen...",
"sortByDate": "Nach Datum sortieren",
"sortByName": "Nach Name sortieren",
"sortBySize": "Nach Größe sortieren",
"allPhotos": "Alle Fotos",
"downloadSelected": "Ausgewählte herunterladen",
"shareGallery": "Galerie teilen",
"needHelp": "Hilfe benötigt? Kontaktieren Sie uns unter",
"noPhotosFound": "Keine Fotos gefunden",
"failedToLoad": "Fotos konnten nicht geladen werden",
"tryAgain": "Erneut versuchen",
"loading": "Galerie wird geladen...",
"expiredOn": "Diese Galerie ist am {{date}} abgelaufen.",
"contactOrganizer": "Bitte kontaktieren Sie den Veranstalter, wenn Sie Zugriff auf diese Fotos benötigen.",
"expiresIn": "Galerie läuft in {{count}} Tag ab",
"expiresIn_plural": "Galerie läuft in {{count}} Tagen ab",
"downloadBefore": "Laden Sie Ihre Fotos herunter, bevor sie nicht mehr verfügbar sind.",
"viewGallery": "Galerie anzeigen",
"downloadAll": "Alle herunterladen",
"downloading": "Lade {{count}} Foto herunter...",
"downloading_plural": "Lade {{count}} Fotos herunter...",
"downloadedPhotos": "{{count}} Foto heruntergeladen!",
"downloadedPhotos_plural": "{{count}} Fotos heruntergeladen!",
"downloadError": "Einige Fotos konnten nicht heruntergeladen werden",
"selectPhotos": "Fotos auswählen",
"cancelSelection": "Auswahl abbrechen",
"photosSelected": "{{count}} ausgewählt",
"selectAll": "Alle auswählen",
"deselectAll": "Auswahl aufheben",
"downloadSelected": "{{count}} ausgewählte herunterladen",
"remaining": "verbleibend",
"selectPhotosHint": "Tipp: Verwenden Sie Strg+Klick (Cmd+Klick auf Mac), um schnell mehrere Fotos auszuwählen"
},
"categories": {
"title": "Fotokategorien",
"global": "Globale Kategorien",
"eventSpecific": "Veranstaltungsspezifische Kategorien",
"addCategory": "Kategorie hinzufügen",
"categoryName": "Kategoriename",
"noCategory": "Keine Kategorie",
"noCategoriesYet": "Noch keine Kategorien. Erstellen Sie Ihre erste Kategorie, um Fotos zu organisieren.",
"deleteConfirm": "Sind Sie sicher, dass Sie \"{{name}}\" löschen möchten?",
"cannotDelete": "Kategorie mit Fotos kann nicht gelöscht werden. Bitte weisen Sie die Fotos zuerst neu zu."
},
"events": {
"title": "Veranstaltungen",
"createEvent": "Veranstaltung erstellen",
"eventDetails": "Veranstaltungsdetails",
"eventName": "Veranstaltungsname",
"eventType": "Veranstaltungstyp",
"eventDate": "Veranstaltungsdatum",
"hostEmail": "Gastgeber-E-Mail",
"adminEmail": "Admin-E-Mail",
"expirationDate": "Ablaufdatum",
"active": "Aktiv",
"archived": "Archiviert",
"photoCount": "{{count}} Fotos",
"totalSize": "Gesamtgröße",
"shareLink": "Freigabelink",
"copyLink": "Link kopieren",
"linkCopied": "Link kopiert!",
"viewGallery": "Galerie ansehen",
"uploadPhotos": "Fotos hochladen",
"archiveEvent": "Veranstaltung archivieren",
"archiveConfirm": "Sind Sie sicher, dass Sie diese Veranstaltung archivieren möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
"extendExpiration": "Um {{days}} Tage verlängern"
},
"settings": {
"title": "Systemeinstellungen",
"general": {
"title": "Allgemein",
"siteConfiguration": "Website-Konfiguration",
"siteUrl": "Website-URL",
"siteUrlHelp": "Wird für die Generierung von Galerielinks in E-Mails verwendet",
"defaultExpiration": "Standardablauf (Tage)",
"maxFileSize": "Max. Dateigröße (MB)",
"allowedFileTypes": "Erlaubte Dateitypen",
"allowedFileTypesHelp": "Kommagetrennte Liste von Dateierweiterungen",
"featureToggles": "Funktionsschalter",
"enableWatermark": "Wasserzeichen auf Fotos aktivieren",
"enableAnalytics": "Analytics-Tracking aktivieren",
"enableRegistration": "Selbstregistrierung für Admins erlauben",
"maintenanceMode": "Wartungsmodus aktivieren",
"language": "Sprache",
"saveSettings": "Allgemeine Einstellungen speichern"
},
"storage": {
"title": "Speicher",
"overview": "Speicherübersicht",
"totalUsed": "Gesamt verwendet",
"archiveStorage": "Archivspeicher",
"storageLimit": "Speicherlimit",
"storageUsage": "Speichernutzung",
"storageByEvent": "Speicher nach Veranstaltung",
"storageManagement": "Speicherverwaltung",
"storageManagementHelp": "Erwägen Sie, alte Veranstaltungen zu archivieren oder zu löschen, um Speicherplatz freizugeben. Archivierte Veranstaltungen sind komprimiert und benötigen weniger Speicher als aktive Galerien."
},
"security": {
"title": "Sicherheit",
"passwordSettings": "Passworteinstellungen",
"requirePassword": "Passwort für alle Galerien erforderlich",
"minPasswordLength": "Minimale Passwortlänge",
"sessionAuth": "Sitzung & Authentifizierung",
"sessionTimeout": "Sitzungs-Timeout (Minuten)",
"maxLoginAttempts": "Max. Anmeldeversuche",
"enable2FA": "Zwei-Faktor-Authentifizierung für Admins aktivieren",
"recaptchaSettings": "reCAPTCHA-Einstellungen",
"enableRecaptcha": "reCAPTCHA für Anmeldeformulare aktivieren",
"siteKey": "Site-Schlüssel",
"secretKey": "Geheimer Schlüssel",
"recaptchaHelp": "Holen Sie sich Ihre reCAPTCHA-Schlüssel von",
"saveSettings": "Sicherheitseinstellungen speichern"
},
"categories": {
"title": "Kategorien",
"about": "Über Fotokategorien",
"aboutText": "Globale Kategorien sind für alle Veranstaltungen verfügbar. Sie können auch veranstaltungsspezifische Kategorien erstellen, wenn Sie einzelne Veranstaltungen bearbeiten. Kategorien helfen beim Organisieren von Fotos und ermöglichen es Gästen, Fotos nach Typ in der Galerieansicht zu filtern."
}
},
"branding": {
"title": "Branding & Anpassung",
"companyInfo": "Unternehmensinformationen",
"companyName": "Unternehmensname",
"companyTagline": "Unternehmens-Slogan",
"supportEmail": "Support-E-Mail",
"footerText": "Fußzeilentext",
"logo": "Logo",
"uploadLogo": "Logo hochladen",
"removeLogo": "Logo entfernen",
"favicon": "Favicon",
"uploadFavicon": "Favicon hochladen",
"removeFavicon": "Favicon entfernen",
"watermark": "Wasserzeichen",
"enableWatermark": "Wasserzeichen auf Fotos aktivieren",
"theme": "Theme",
"themeCustomization": "Theme-Anpassung",
"selectPreset": "Vorgefertigtes Theme auswählen",
"colors": "Farben",
"primaryColor": "Primärfarbe",
"secondaryColor": "Sekundärfarbe",
"accentColor": "Akzentfarbe",
"customCSS": "Benutzerdefiniertes CSS",
"preview": "Vorschau",
"previewInNewTab": "Vorschau in neuem Tab",
"reset": "Zurücksetzen",
"saveChanges": "Änderungen speichern"
},
"admin": {
"title": "Admin-Panel",
"welcome": "Willkommen zurück, {{name}}",
"recentActivity": "Letzte Aktivitäten",
"systemStatus": "Systemstatus",
"totalEvents": "Gesamte Veranstaltungen",
"activeGalleries": "Aktive Galerien",
"storageUsed": "Speicher verwendet",
"totalPhotos": "Gesamte Fotos",
"storagePercent": "{{percent}}% von {{limit}}",
"notifications": "Benachrichtigungen",
"viewAllNotifications": "Alle Benachrichtigungen anzeigen",
"changePassword": "Passwort ändern",
"loadingDashboard": "Dashboard wird geladen...",
"activeEvents": "Aktive Veranstaltungen",
"expiringSoon": "Demnächst ablaufend",
"next7Days": "Nächste 7 Tage",
"totalViews": "Gesamtaufrufe",
"downloads": "Downloads",
"percentFromLastWeek": "{{percent}}% gegenüber letzter Woche",
"dashboardSubtitle": "Willkommen zurück! Hier ist, was mit Ihren Galerien passiert.",
"eventsExpiringSoon": "Demnächst ablaufende Veranstaltungen",
"noEventsExpiring": "Keine Veranstaltungen laufen in den nächsten 7 Tagen ab",
"daysLeft": "{{count}} Tag verbleibend",
"daysLeft_plural": "{{count}} Tage verbleibend",
"viewAllExpiringEvents": "Alle {{count}} ablaufenden Veranstaltungen anzeigen",
"noRecentActivity": "Keine aktuellen Aktivitäten",
"viewAllActivity": "Alle Aktivitäten anzeigen",
"quickActions": "Schnellaktionen",
"viewArchives": "Archive anzeigen",
"analytics": "Analytik"
},
"errors": {
"notFound": "Nicht gefunden",
"galleryNotFound": "Galerie nicht gefunden",
"galleryNotFoundMessage": "Diese Galerie existiert nicht oder wurde entfernt.",
"unauthorized": "Nicht autorisiert",
"forbidden": "Verboten",
"serverError": "Serverfehler",
"somethingWentWrong": "Etwas ist schiefgelaufen",
"tryAgainLater": "Bitte versuchen Sie es später erneut",
"refreshPage": "Seite neu laden",
"oopsSomethingWentWrong": "Ups! Etwas ist schiefgelaufen",
"unexpectedError": "Es ist ein unerwarteter Fehler aufgetreten. Keine Sorge, Ihre Daten sind sicher.",
"goToHomepage": "Zur Startseite",
"errorDetails": "Fehlerdetails"
},
"legal": {
"impressum": "Impressum",
"datenschutz": "Datenschutzerklärung",
"termsOfService": "Nutzungsbedingungen",
"cookiePolicy": "Cookie-Richtlinie"
},
"toast": {
"saveSuccess": "Änderungen erfolgreich gespeichert",
"saveError": "Fehler beim Speichern der Änderungen",
"deleteSuccess": "Erfolgreich gelöscht",
"deleteError": "Fehler beim Löschen",
"uploadSuccess": "Upload erfolgreich abgeschlossen",
"uploadError": "Upload fehlgeschlagen",
"loginSuccess": "Anmeldung erfolgreich",
"loginError": "Anmeldung fehlgeschlagen",
"passwordChanged": "Passwort erfolgreich geändert",
"linkCopied": "Link in Zwischenablage kopiert",
"eventCreated": "Veranstaltung erfolgreich erstellt",
"eventUpdated": "Veranstaltung erfolgreich aktualisiert",
"eventArchived": "Veranstaltung erfolgreich archiviert",
"settingsSaved": "Einstellungen erfolgreich gespeichert",
"themeUpdated": "Theme erfolgreich aktualisiert",
"brandingUpdated": "Branding erfolgreich aktualisiert",
"categoryAdded": "Kategorie erfolgreich hinzugefügt",
"categoryDeleted": "Kategorie erfolgreich gelöscht",
"categoryUpdated": "Kategorie erfolgreich aktualisiert",
"emailConfigSaved": "E-Mail-Konfiguration erfolgreich gespeichert",
"testEmailSent": "Test-E-Mail erfolgreich gesendet",
"pageUpdated": "Seite erfolgreich aktualisiert",
"archiveRestored": "Archiv erfolgreich wiederhergestellt",
"archiveDeleted": "Archiv dauerhaft gelöscht"
}
}
+284
View File
@@ -0,0 +1,284 @@
{
"common": {
"loading": "Loading...",
"error": "Error",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"edit": "Edit",
"add": "Add",
"search": "Search",
"filter": "Filter",
"sortBy": "Sort by",
"yes": "Yes",
"no": "No",
"back": "Back",
"next": "Next",
"previous": "Previous",
"close": "Close",
"logout": "Logout",
"download": "Download",
"downloadAll": "Download All",
"uploading": "Uploading...",
"uploaded": "Uploaded",
"photo": "photo",
"photos": "photos"
},
"navigation": {
"dashboard": "Dashboard",
"events": "Events",
"archives": "Archives",
"settings": "Settings",
"branding": "Branding",
"analytics": "Analytics",
"emailSettings": "Email Settings",
"cmsPages": "CMS Pages"
},
"auth": {
"login": "Login",
"password": "Password",
"enterPassword": "Enter Gallery Password",
"passwordPlaceholder": "Enter the gallery password",
"invalidPassword": "Invalid password",
"sessionExpired": "Session expired",
"pleaseEnterPassword": "Please enter a password",
"passwordHint": "The password was provided by the event organizer. Contact them if you don't have it."
},
"gallery": {
"title": "Photo Gallery",
"welcomeMessage": "Welcome Message",
"expiresOn": "Expires on",
"expires": "Expires",
"expired": "Expired",
"daysRemaining": "{{days}} days remaining",
"dayRemaining": "1 day remaining",
"hoursRemaining": "{{hours}} hours remaining",
"expiredMessage": "This gallery expired on {{date}}",
"contactOrganizer": "Please contact the event organizer if you need access to these photos",
"searchPhotos": "Search photos by filename...",
"sortByDate": "Sort by Date",
"sortByName": "Sort by Name",
"sortBySize": "Sort by Size",
"allPhotos": "All Photos",
"downloadSelected": "Download Selected",
"shareGallery": "Share Gallery",
"needHelp": "Need help? Contact us at",
"noPhotosFound": "No photos found",
"failedToLoad": "Failed to load photos",
"tryAgain": "Try Again",
"loading": "Loading gallery...",
"expiredOn": "This gallery expired on {{date}}.",
"contactOrganizer": "Please contact the event organizer if you need access to these photos.",
"expiresIn": "Gallery expires in {{count}} day",
"expiresIn_plural": "Gallery expires in {{count}} days",
"downloadBefore": "Download your photos before they're no longer available.",
"viewGallery": "View Gallery",
"downloadAll": "Download All",
"downloading": "Downloading {{count}} photo...",
"downloading_plural": "Downloading {{count}} photos...",
"downloadedPhotos": "Downloaded {{count}} photo!",
"downloadedPhotos_plural": "Downloaded {{count}} photos!",
"downloadError": "Some photos failed to download",
"selectPhotos": "Select Photos",
"cancelSelection": "Cancel Selection",
"photosSelected": "{{count}} selected",
"selectAll": "Select All",
"deselectAll": "Deselect All",
"downloadSelected": "Download {{count}} Selected",
"remaining": "remaining",
"selectPhotosHint": "Tip: Use Ctrl+Click (Cmd+Click on Mac) to quickly select multiple photos"
},
"categories": {
"title": "Photo Categories",
"global": "Global Categories",
"eventSpecific": "Event-Specific Categories",
"addCategory": "Add Category",
"categoryName": "Category name",
"noCategory": "No category",
"noCategoriesYet": "No categories yet. Create your first category to organize photos.",
"deleteConfirm": "Are you sure you want to delete \"{{name}}\"?",
"cannotDelete": "Cannot delete category with photos. Please reassign photos first."
},
"events": {
"title": "Events",
"createEvent": "Create Event",
"eventDetails": "Event Details",
"eventName": "Event Name",
"eventType": "Event Type",
"eventDate": "Event Date",
"hostEmail": "Host Email",
"adminEmail": "Admin Email",
"expirationDate": "Expiration Date",
"active": "Active",
"archived": "Archived",
"photoCount": "{{count}} photos",
"totalSize": "Total Size",
"shareLink": "Share Link",
"copyLink": "Copy Link",
"linkCopied": "Link copied!",
"viewGallery": "View Gallery",
"uploadPhotos": "Upload Photos",
"archiveEvent": "Archive Event",
"archiveConfirm": "Are you sure you want to archive this event? This action cannot be undone.",
"extendExpiration": "Extend {{days}} Days"
},
"settings": {
"title": "System Settings",
"general": {
"title": "General",
"siteConfiguration": "Site Configuration",
"siteUrl": "Site URL",
"siteUrlHelp": "Used for generating gallery links in emails",
"defaultExpiration": "Default Expiration (days)",
"maxFileSize": "Max File Size (MB)",
"allowedFileTypes": "Allowed File Types",
"allowedFileTypesHelp": "Comma-separated list of file extensions",
"featureToggles": "Feature Toggles",
"enableWatermark": "Enable watermark on photos",
"enableAnalytics": "Enable analytics tracking",
"enableRegistration": "Allow self-registration for admins",
"maintenanceMode": "Enable maintenance mode",
"language": "Language",
"saveSettings": "Save General Settings"
},
"storage": {
"title": "Storage",
"overview": "Storage Overview",
"totalUsed": "Total Used",
"archiveStorage": "Archive Storage",
"storageLimit": "Storage Limit",
"storageUsage": "Storage Usage",
"storageByEvent": "Storage by Event",
"storageManagement": "Storage Management",
"storageManagementHelp": "Consider archiving or deleting old events to free up storage space. Archived events are compressed and use less storage than active galleries."
},
"security": {
"title": "Security",
"passwordSettings": "Password Settings",
"requirePassword": "Require password for all galleries",
"minPasswordLength": "Minimum Password Length",
"sessionAuth": "Session & Authentication",
"sessionTimeout": "Session Timeout (minutes)",
"maxLoginAttempts": "Max Login Attempts",
"enable2FA": "Enable two-factor authentication for admins",
"recaptchaSettings": "reCAPTCHA Settings",
"enableRecaptcha": "Enable reCAPTCHA for login forms",
"siteKey": "Site Key",
"secretKey": "Secret Key",
"recaptchaHelp": "Get your reCAPTCHA keys from",
"saveSettings": "Save Security Settings"
},
"categories": {
"title": "Categories",
"about": "About Photo Categories",
"aboutText": "Global categories are available for all events. You can also create event-specific categories when editing individual events. Categories help organize photos and allow guests to filter photos by type in the gallery view."
}
},
"branding": {
"title": "Branding & Customization",
"companyInfo": "Company Information",
"companyName": "Company Name",
"companyTagline": "Company Tagline",
"supportEmail": "Support Email",
"footerText": "Footer Text",
"logo": "Logo",
"uploadLogo": "Upload Logo",
"removeLogo": "Remove Logo",
"favicon": "Favicon",
"uploadFavicon": "Upload Favicon",
"removeFavicon": "Remove Favicon",
"watermark": "Watermark",
"enableWatermark": "Enable watermark on photos",
"theme": "Theme",
"themeCustomization": "Theme Customization",
"selectPreset": "Select a preset theme",
"colors": "Colors",
"primaryColor": "Primary Color",
"secondaryColor": "Secondary Color",
"accentColor": "Accent Color",
"customCSS": "Custom CSS",
"preview": "Preview",
"previewInNewTab": "Preview in New Tab",
"reset": "Reset",
"saveChanges": "Save Changes"
},
"admin": {
"title": "Admin Panel",
"welcome": "Welcome back, {{name}}",
"recentActivity": "Recent Activity",
"systemStatus": "System Status",
"totalEvents": "Total Events",
"activeGalleries": "Active Galleries",
"storageUsed": "Storage Used",
"totalPhotos": "Total Photos",
"storagePercent": "{{percent}}% of {{limit}}",
"notifications": "Notifications",
"viewAllNotifications": "View all notifications",
"changePassword": "Change Password",
"loadingDashboard": "Loading dashboard...",
"activeEvents": "Active Events",
"expiringSoon": "Expiring Soon",
"next7Days": "Next 7 days",
"totalViews": "Total Views",
"downloads": "Downloads",
"percentFromLastWeek": "{{percent}}% from last week",
"dashboardSubtitle": "Welcome back! Here's what's happening with your galleries.",
"eventsExpiringSoon": "Events Expiring Soon",
"noEventsExpiring": "No events expiring in the next 7 days",
"daysLeft": "{{count}} day left",
"daysLeft_plural": "{{count}} days left",
"viewAllExpiringEvents": "View all {{count}} expiring events",
"noRecentActivity": "No recent activity",
"viewAllActivity": "View all activity",
"quickActions": "Quick Actions",
"viewArchives": "View Archives",
"analytics": "Analytics"
},
"errors": {
"notFound": "Not Found",
"galleryNotFound": "Gallery Not Found",
"galleryNotFoundMessage": "This gallery does not exist or has been removed.",
"unauthorized": "Unauthorized",
"forbidden": "Forbidden",
"serverError": "Server Error",
"somethingWentWrong": "Something went wrong",
"tryAgainLater": "Please try again later",
"refreshPage": "Refresh Page",
"oopsSomethingWentWrong": "Oops! Something went wrong",
"unexpectedError": "We encountered an unexpected error. Don't worry, your data is safe.",
"goToHomepage": "Go to Homepage",
"errorDetails": "Error Details"
},
"legal": {
"impressum": "Legal Notice",
"datenschutz": "Privacy Policy",
"termsOfService": "Terms of Service",
"cookiePolicy": "Cookie Policy"
},
"toast": {
"saveSuccess": "Changes saved successfully",
"saveError": "Failed to save changes",
"deleteSuccess": "Deleted successfully",
"deleteError": "Failed to delete",
"uploadSuccess": "Upload completed successfully",
"uploadError": "Upload failed",
"loginSuccess": "Login successful",
"loginError": "Login failed",
"passwordChanged": "Password changed successfully",
"linkCopied": "Link copied to clipboard",
"eventCreated": "Event created successfully",
"eventUpdated": "Event updated successfully",
"eventArchived": "Event archived successfully",
"settingsSaved": "Settings saved successfully",
"themeUpdated": "Theme updated successfully",
"brandingUpdated": "Branding updated successfully",
"categoryAdded": "Category added successfully",
"categoryDeleted": "Category deleted successfully",
"categoryUpdated": "Category updated successfully",
"emailConfigSaved": "Email configuration saved successfully",
"testEmailSent": "Test email sent successfully",
"pageUpdated": "Page updated successfully",
"archiveRestored": "Archive restored successfully",
"archiveDeleted": "Archive deleted permanently"
}
}