Enhance email templates with clickable links, branding, and improved styling

- Add clickable gallery links in all email templates
- Include application logo in email header and footer (custom or PicPeak default)
- Redesign emails with professional styling matching gallery login page
  - Gray background with white content box
  - PicPeak green header with centered logo
  - Clean typography and proper spacing
  - Responsive design for mobile devices
  - Styled call-to-action buttons
  - Footer with branding and copyright
- Update email processor to fetch branding settings dynamically
- Use proper API URLs for logo images in emails

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-07-10 22:19:15 +02:00
parent 6438374258
commit 5328b4f73a
52 changed files with 3237 additions and 683 deletions
+158 -3
View File
@@ -17,6 +17,9 @@
"previous": "Zurück",
"close": "Schließen",
"logout": "Abmelden",
"menu": "Menü",
"change": "Ändern",
"remove": "Entfernen",
"download": "Herunterladen",
"downloadAll": "Alle herunterladen",
"uploading": "Wird hochgeladen...",
@@ -150,12 +153,30 @@
"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"
"selectPhotosHint": "Tipp: Verwenden Sie Strg+Klick (Cmd+Klick auf Mac), um schnell mehrere Fotos auszuwählen",
"filters": "Filter",
"openFilters": "Filter öffnen",
"toggleSidebar": "Seitenleiste umschalten",
"toggleMenu": "Menü umschalten",
"allCategories": "Alle Kategorien",
"categories": "Kategorien",
"download": "Herunterladen",
"searchPlaceholder": "Fotos suchen...",
"sortBy": "Sortieren nach"
},
"categories": {
"title": "Fotokategorien",
"global": "Globale Kategorien",
"eventSpecific": "Veranstaltungsspezifische Kategorien",
"eventSpecificCategories": "Veranstaltungsspezifische Kategorien",
"organizationInfo": "Organisieren Sie Ihre Fotos in Kategorien. Kategorien helfen Gästen, bestimmte Fototypen zu navigieren und zu finden.",
"noEventSpecificCategories": "Keine veranstaltungsspezifischen Kategorien. Globale Kategorien sind standardmäßig verfügbar.",
"globalCategoriesAlwaysAvailable": "Globale Kategorien (immer verfügbar):",
"deleteCategoryTitle": "Kategorie löschen",
"categoryCreatedSuccess": "Kategorie erfolgreich erstellt",
"categoryDeletedSuccess": "Kategorie erfolgreich gelöscht",
"failedToCreateCategory": "Fehler beim Erstellen der Kategorie",
"failedToDeleteCategory": "Fehler beim Löschen der Kategorie",
"addCategory": "Kategorie hinzufügen",
"categoryName": "Kategoriename",
"noCategory": "Keine Kategorie",
@@ -164,6 +185,17 @@
"cannotDelete": "Kategorie mit Fotos kann nicht gelöscht werden. Bitte weisen Sie die Fotos zuerst neu zu."
},
"events": {
"noStatisticsAvailableYet": "Noch keine Statistiken verfügbar",
"totalPhotos": "Gesamtfotos",
"totalViews": "Gesamtaufrufe",
"totalDownloads": "Gesamte Downloads",
"uniqueVisitors": "Eindeutige Besucher",
"addPlus": "Hinzufügen+",
"galleryTheme": "Galerie-Design",
"customizeTheme": "Design anpassen",
"noThemeSet": "Kein Design konfiguriert",
"customizingTheme": "Galerie-Design anpassen",
"customizingThemeFor": "Design für {{event}} anpassen",
"title": "Veranstaltungen",
"create": "Veranstaltung erstellen",
"createEvent": "Veranstaltung erstellen",
@@ -172,6 +204,8 @@
"eventType": "Veranstaltungstyp",
"eventDate": "Veranstaltungsdatum",
"hostEmail": "Gastgeber-E-Mail",
"hostName": "Name des Gastgebers",
"hostNamePlaceholder": "Max Mustermann",
"adminEmail": "Admin-E-Mail",
"expirationDate": "Ablaufdatum",
"active": "Aktiv",
@@ -199,6 +233,7 @@
"eventInformation": "Veranstaltungsinformationen",
"welcomeMessage": "Willkommensnachricht",
"noWelcomeMessage": "Keine Willkommensnachricht festgelegt",
"noWelcomeMessageSet": "Keine Willkommensnachricht festgelegt",
"created": "Erstellt",
"expires": "Läuft ab",
"shareWithGuests": "Teilen Sie diesen Link mit Gästen. Sie benötigen das Passwort, um auf die Galerie zuzugreifen.",
@@ -232,6 +267,7 @@
"galleryExpiration": "Galerie-Ablauf",
"galleryExpiresIn": "Galerie läuft ab in",
"daysAfterEvent": "Tage nach der Veranstaltung",
"expiresOn": "Läuft ab am",
"themeAndStyle": "Design & Stil",
"galleryWillExpireOn": "Galerie läuft ab am {{date}}",
"expirationWarning": "Gäste erhalten 7 Tage vor Ablauf eine Warn-E-Mail.",
@@ -340,7 +376,10 @@
"defaultLanguage": "Standardsprache",
"defaultLanguageHelp": "Sprache, die Gästen vor der Anmeldung angezeigt wird",
"saveSettings": "Allgemeine Einstellungen speichern",
"saveGeneralSettings": "Allgemeine Einstellungen speichern"
"saveGeneralSettings": "Allgemeine Einstellungen speichern",
"dateTimeFormat": "Datums- & Zeitformat",
"dateFormat": "Datumsformat",
"dateFormatHelp": "Wie Daten in E-Mails und in der gesamten Anwendung angezeigt werden"
},
"storage": {
"title": "Speicher",
@@ -467,7 +506,80 @@
"saveChanges": "Änderungen speichern",
"applyLivePreview": "Änderungen sofort anwenden (Live-Vorschau)",
"eventSpecificThemes": "Veranstaltungsspezifische Themen",
"eventThemesInfo": "Sie können diese globalen Theme-Einstellungen für einzelne Veranstaltungen beim Erstellen oder Bearbeiten überschreiben."
"eventThemesInfo": "Sie können diese globalen Theme-Einstellungen für einzelne Veranstaltungen beim Erstellen oder Bearbeiten überschreiben.",
"themePresets": "Theme-Vorlagen",
"galleryLayout": "Galerie-Layout",
"layoutDescriptions": {
"grid": "Klassisches Rasterlayout mit einheitlichen Fotogrößen",
"masonry": "Pinterest-ähnliches Layout mit variablen Höhen",
"carousel": "Vollbild-Diashow mit Navigation",
"timeline": "Nach Datum organisierte Fotos",
"hero": "Hervorgehobenes Bild mit Raster darunter",
"mosaic": "Künstlerisches Layout mit gemischten Größen"
},
"layoutSettings": "Layout-Einstellungen",
"photoSpacing": "Foto-Abstand",
"spacing": {
"tight": "Eng",
"normal": "Normal",
"relaxed": "Locker"
},
"photoAnimation": "Foto-Animation",
"animation": {
"none": "Keine",
"fade": "Einblenden",
"scale": "Skalieren",
"slide": "Gleiten"
},
"columns": "Spalten",
"mobile": "Mobil",
"tablet": "Tablet",
"desktop": "Desktop",
"enableAutoplay": "Autoplay aktivieren",
"autoplayInterval": "Autoplay-Intervall (Sekunden)",
"groupPhotosBy": "Fotos gruppieren nach",
"grouping": {
"day": "Tag",
"week": "Woche",
"month": "Monat"
},
"typographyAndStyle": "Typografie & Stil",
"bodyFont": "Fließtext-Schriftart",
"headingFont": "Überschriften-Schriftart",
"sameAsBody": "Wie Fließtext",
"fontSize": "Schriftgröße",
"fontSizes": {
"small": "Klein",
"normal": "Normal",
"large": "Groß"
},
"borderRadius": "Eckenradius",
"borderRadiusOptions": {
"none": "Keine",
"small": "Klein",
"medium": "Mittel",
"large": "Groß"
},
"shadowStyle": "Schattenstil",
"shadowOptions": {
"none": "Kein",
"subtle": "Dezent",
"normal": "Normal",
"dramatic": "Dramatisch"
},
"backgroundPattern": "Hintergrund",
"backgroundOptions": {
"none": "Keiner",
"dots": "Punkte",
"grid": "Raster",
"waves": "Wellen"
},
"customCSSHelp": "Erweitert: Fügen Sie benutzerdefiniertes CSS hinzu, um das Erscheinungsbild weiter anzupassen",
"resetToDefault": "Auf Standard zurücksetzen",
"applyTheme": "Theme anwenden",
"customTheme": "Benutzerdefiniertes Design",
"customizeTheme": "Design anpassen",
"saveTheme": "Design speichern"
},
"admin": {
"title": "Admin-Panel",
@@ -483,6 +595,48 @@
"notifications": "Benachrichtigungen",
"viewAllNotifications": "Alle Benachrichtigungen anzeigen",
"noNotifications": "Keine neuen Benachrichtigungen",
"markAllRead": "Alle als gelesen markieren",
"clearOld": "Alte löschen",
"close": "Schließen",
"noNotificationsMessage": "Keine Benachrichtigungen",
"notificationMessages": {
"eventCreated": "Neues Event \"{{eventName}}\" wurde erstellt",
"eventArchived": "Event \"{{eventName}}\" wurde archiviert",
"eventUpdated": "Event \"{{eventName}}\" wurde aktualisiert",
"eventDeleted": "Event \"{{eventName}}\" wurde gelöscht",
"photosUploaded": "{{count}} Fotos zu \"{{eventName}}\" hochgeladen",
"photoDeleted": "Foto aus \"{{eventName}}\" gelöscht",
"photosBulkDeleted": "{{count}} Fotos aus \"{{eventName}}\" gelöscht",
"eventExpiring": "Event \"{{eventName}}\" läuft in {{days}} Tagen ab",
"eventExpired": "Event \"{{eventName}}\" ist abgelaufen",
"passwordChanged": "Passwort geändert von {{actorName}}",
"passwordReset": "Passwort zurückgesetzt für \"{{eventName}}\"",
"settingsUpdated": "{{type}}-Einstellungen aktualisiert",
"emailTemplateUpdated": "E-Mail-Vorlage \"{{template}}\" aktualisiert",
"bulkDownload": "{{count}} Fotos von \"{{eventName}}\" heruntergeladen",
"storageWarning": "Speichernutzung bei {{percentage}}%",
"adminLogout": "Admin {{actorName}} hat sich abgemeldet",
"categoryCreated": "Kategorie \"{{name}}\" für \"{{eventName}}\" erstellt",
"categoryUpdated": "Kategorie \"{{name}}\" für \"{{eventName}}\" aktualisiert",
"categoryDeleted": "Kategorie \"{{name}}\" aus \"{{eventName}}\" gelöscht",
"cmsPageUpdated": "CMS-Seite \"{{slug}}\" aktualisiert",
"emailConfigUpdated": "E-Mail-Konfiguration aktualisiert",
"faviconUploaded": "Favicon hochgeladen",
"brandingUpdated": "Branding-Einstellungen aktualisiert",
"generalSettingsUpdated": "Allgemeine Einstellungen aktualisiert",
"securitySettingsUpdated": "Sicherheitseinstellungen aktualisiert",
"themeUpdated": "Theme-Einstellungen aktualisiert",
"archiveDownloaded": "Archiv für \"{{eventName}}\" heruntergeladen",
"archiveDeleted": "Archiv für \"{{eventName}}\" gelöscht",
"archiveRestored": "Archiv für \"{{eventName}}\" wiederhergestellt",
"systemActivity": "Systemaktivität: {{type}}"
},
"notificationToasts": {
"markedAllRead": "Alle Benachrichtigungen als gelesen markiert",
"clearedOld": "{{count}} alte Benachrichtigungen gelöscht"
},
"viewAllNotifications": "Alle Benachrichtigungen anzeigen",
"noNotifications": "Keine neuen Benachrichtigungen",
"markAsRead": "Als gelesen markieren",
"markAllAsRead": "Alle als gelesen markieren",
"notificationSettings": "Benachrichtigungseinstellungen",
@@ -663,6 +817,7 @@
"validation": {
"eventNameRequired": "Veranstaltungsname ist erforderlich",
"hostEmailRequired": "Gastgeber-E-Mail ist erforderlich",
"hostNameRequired": "Der Name des Gastgebers ist erforderlich",
"adminEmailRequired": "Admin-E-Mail ist erforderlich",
"invalidEmailFormat": "Ungültiges E-Mail-Format",
"passwordRequired": "Passwort ist erforderlich",