Files
picpeak/frontend/src/i18n/locales/de.json
T
Luca 07b450a954 feat(setup): per-feature config step after feature selection
When the chosen features need config the wizard can collect, 'Finish' on
the usage step now advances to a lean config step instead of jumping to
the dashboard:
- Invoicing (if Invoices): company/legal name, address, VAT-ID or tax
  number, IBAN, currency → saved to business-profile + a default bank
  account. Carries the bank/VAT legal disclaimer.
- Email (if reminders/incoming-mail/whatsapp/invoices): SMTP host/port/
  user/pass/from → saved to email_configs.
Each section persists only if started, and 'Skip for now' is always
available — soft settings keep their seeded defaults. en + de strings.
2026-07-02 22:10:54 +02:00

5467 lines
278 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"userManagement": {
"title": "Benutzerverwaltung",
"subtitle": "Admin-Benutzer und Einladungen verwalten",
"loading": "Lade Benutzer...",
"loadError": "Fehler beim Laden der Benutzer. Bitte versuchen Sie es erneut.",
"inviteUser": "Benutzer einladen",
"createInvitation": "Einladung erstellen",
"email": "E-Mail-Adresse",
"emailPlaceholder": "[email protected]",
"role": "Rolle",
"selectRole": "Rolle auswählen",
"sendInvitation": "Einladung senden",
"editUser": "Benutzer bearbeiten",
"editingUser": "Bearbeite Benutzer",
"saveChanges": "Änderungen speichern",
"deactivateUser": "Benutzer deaktivieren",
"cancelInvitation": "Einladung abbrechen",
"invitationSent": "Einladung erfolgreich gesendet",
"invitationError": "Fehler beim Senden der Einladung",
"invitationCancelled": "Einladung abgebrochen",
"cancelInvitationError": "Fehler beim Abbrechen der Einladung",
"userUpdated": "Benutzer erfolgreich aktualisiert",
"updateUserError": "Fehler beim Aktualisieren des Benutzers",
"userDeactivated": "Benutzer erfolgreich deaktiviert",
"deactivateUserError": "Fehler beim Deaktivieren des Benutzers",
"noRole": "Keine Rolle",
"neverLoggedIn": "Nie angemeldet",
"expired": "Abgelaufen",
"deactivate": "Deaktivieren",
"cancel": "Abbrechen",
"tabs": {
"users": "Benutzer",
"invitations": "Einladungen"
},
"stats": {
"totalUsers": "Benutzer gesamt",
"activeUsers": "Aktive Benutzer",
"pendingInvitations": "Ausstehende Einladungen",
"inactiveUsers": "Inaktive Benutzer"
},
"status": {
"active": "Aktiv",
"inactive": "Inaktiv"
},
"table": {
"user": "Benutzer",
"email": "E-Mail",
"role": "Rolle",
"status": "Status",
"lastLogin": "Letzte Anmeldung",
"actions": "Aktionen",
"invitedBy": "Eingeladen von",
"expires": "Läuft ab"
},
"validation": {
"emailRequired": "E-Mail ist erforderlich",
"emailInvalid": "Ungültiges E-Mail-Format",
"roleRequired": "Rolle ist erforderlich"
},
"searchUsersPlaceholder": "Benutzer suchen...",
"searchInvitationsPlaceholder": "Einladungen suchen...",
"noUsers": "Keine Benutzer gefunden",
"noUsersFound": "Keine Benutzer entsprechen Ihrer Suche",
"noInvitations": "Keine ausstehenden Einladungen",
"noInvitationsFound": "Keine Einladungen entsprechen Ihrer Suche",
"confirmDeactivate": {
"title": "Benutzer deaktivieren",
"message": "Sind Sie sicher, dass Sie {{name}} deaktivieren möchten? Sie können sich dann nicht mehr anmelden."
},
"confirmCancelInvitation": {
"title": "Einladung abbrechen",
"message": "Sind Sie sicher, dass Sie die Einladung für {{email}} abbrechen möchten?"
}
},
"systemHealth": {
"title": "Systemzustand",
"subtitle": "Hintergrundfehler, die Aufmerksamkeit erfordern.",
"retry": "Erneut versuchen",
"dismiss": "Verwerfen",
"retriedToast": "E-Mail erneut eingereiht.",
"dismissedToast": "Verworfen.",
"stuckEmails": {
"title": "Hängende / fehlgeschlagene E-Mails",
"empty": "Keine hängenden oder fehlgeschlagenen E-Mails — alles in Ordnung.",
"noError": "Versuche aufgebraucht",
"col": {
"recipient": "Empfänger",
"type": "Typ",
"error": "Fehler",
"queued": "Eingereiht",
"actions": "Aktionen"
}
}
},
"common": {
"loading": "Wird geladen...",
"error": "Fehler",
"configureInSettings": "Standards in den Einstellungen anpassen ↗",
"save": "Speichern",
"saving": "Speichern…",
"cancel": "Abbrechen",
"delete": "Löschen",
"edit": "Bearbeiten",
"add": "Hinzufügen",
"sortBy": "Sortieren nach",
"selectCountry": "Land auswählen…",
"yes": "Ja",
"no": "Nein",
"back": "Zurück",
"next": "Weiter",
"previous": "Zurück",
"close": "Schließen",
"logout": "Abmelden",
"change": "Ändern",
"remove": "Entfernen",
"download": "Herunterladen",
"downloadAll": "Alle herunterladen",
"photo": "Foto",
"photos": "Fotos",
"video": "Video",
"media": "Medien",
"upload": "Hochladen",
"customize": "Anpassen",
"hide": "Ausblenden",
"unknown": "Unbekannt",
"notSet": "Nicht festgelegt",
"of": "von",
"selected": "Ausgewählt",
"chunk": "Teil",
"optional": "optional",
"tryAgain": "Erneut versuchen",
"active": "Aktiv",
"inactive": "Inaktiv",
"create": "Erstellen",
"unknownDate": "Unbekanntes Datum",
"pageOf": "Seite {{current}} von {{total}}",
"collapse": "Einklappen",
"expand": "Ausklappen",
"submitting": "Wird übermittelt...",
"copy": "Kopieren",
"copied": "Kopiert!",
"applying": "Wird angewendet...",
"done": "Fertig",
"retry": "Wiederholen",
"characters": "Zeichen",
"saveChanges": "Änderungen speichern",
"resetChanges": "Änderungen zurücksetzen",
"dismiss": "Schließen",
"discard": "Verwerfen",
"preview": "Vorschau",
"duplicate": "Duplizieren",
"showAll": "Alle anzeigen",
"confirm": "Bestätigen",
"show": "Einblenden"
},
"upload": {
"photoCategory": "Fotokategorie",
"noCategory": "Keine Kategorie",
"eventSpecific": "(Veranstaltungsspezifisch)",
"clickToUpload": "Klicken zum Hochladen oder per Drag & Drop",
"fileRequirements": "JPEG, PNG oder WebP (max. 50MB pro Datei, {{limit}} Dateien pro Upload)",
"selectedFiles": "Ausgewählte Dateien",
"uploading": "Wird hochgeladen...",
"transferring": "Übertragung",
"processing": "Fotos werden verarbeitet...",
"processingHint": "Dateien sind hochgeladen. PicPeak erstellt jetzt Thumbnails und liest Metadaten. Sie können diese Seite verlassen — die Verarbeitung läuft im Hintergrund weiter.",
"processingProgress": "{{complete}} von {{total}} fertig",
"retryFailed": "Fehlgeschlagene erneut versuchen",
"uploadComplete": "Upload abgeschlossen!",
"someFilesFailed": "Einige Dateien konnten nicht hochgeladen werden",
"failures": {
"title": "{{count}} Datei(en) konnten nicht hochgeladen werden",
"toast": "{{count}} Datei(en) konnten nicht hochgeladen werden siehe Liste unten.",
"kindRejected": "Abgelehnt",
"kindTransfer": "Übertragung fehlgeschlagen",
"kindProcessing": "Verarbeitung fehlgeschlagen",
"transferReason": "Übertragung fehlgeschlagen",
"unknownReason": "Unbekannter Fehler",
"unknownFile": "Unbekannte Datei"
},
"replaceByName": "Vorhandene Fotos mit gleichem Namen ersetzen",
"uploadPhotos": "Fotos hochladen",
"uploadMedia": "Fotos & Videos hochladen",
"maxFilesReached": "Maximal {{limit}} Dateien erlaubt",
"someFilesSkipped": "Nur {{allowed}} weitere Dateien erlaubt (Limit {{limit}})",
"tooManyFiles": "Maximal {{limit}} Dateien können gleichzeitig hochgeladen werden",
"limitInfo": "{{selected}} von {{limit}} Dateien ausgewählt ({{remaining}} verbleibend)",
"limitReached": "Upload-Limit erreicht ({{limit}} Dateien pro Vorgang)",
"replacedFiles_one": "{{count}} Foto ersetzt",
"replacedFiles_other": "{{count}} Fotos ersetzt",
"processingFailed_one": "{{count}} Foto konnte nicht verarbeitet werden",
"processingFailed_other": "{{count}} Fotos konnten nicht verarbeitet werden",
"uploadingChunks_one": "{{count}} Teil wird hochgeladen",
"uploadingChunks_other": "{{count}} Teile werden hochgeladen"
},
"navigation": {
"dashboard": "Dashboard",
"events": "Veranstaltungen",
"settings": "Einstellungen",
"systemHealth": "Systemzustand",
"archives": "Archive",
"emailSettings": "E-Mail-Einstellungen",
"branding": "Markenidentität",
"eventTypes": "Veranstaltungstypen",
"backup": "Backup & Wiederherstellung",
"cmsPages": "CMS-Seiten",
"users": "Benutzer",
"calendar": "Kalender",
"clients": "CRM",
"accounting": "Buchhaltung",
"workflows": "Workflows",
"betaTag": "Beta"
},
"workflows": {
"title": "Workflows",
"subtitle": "Visuelle Automatisierungen Auslöser, Bedingungen, Freigaben und Aktionen.",
"new": "Neuer Workflow",
"empty": "Noch keine Workflows. Erstelle einen, um Rechnungsstellung und Buchungsschritte zu automatisieren.",
"builtin": "integriert",
"triggerLabel": "Auslöser",
"enabled": "Aktiv",
"disabled": "Inaktiv",
"confirmDelete": "Diesen Workflow löschen?",
"toggle": {
"confirmDisableBuiltin": "Das Deaktivieren dieses eingebauten Ablaufs stellt das vorherige Standardverhalten wieder her die Automatisierung wird dadurch nicht abgeschaltet. Fortfahren?"
},
"test": {
"title": "Testlauf",
"hint": "Probelauf: durchläuft den ganzen Ablauf sofort (Wartezeiten übersprungen, Gates automatisch bestätigt), Nebeneffekte werden nur simuliert keine echten E-Mails. Optional eine Entitäts-ID (z. B. eine Rechnung) angeben, damit Bedingungen sie lesen können.",
"entityId": "Entitäts-ID (optional, z. B. Rechnungs-ID)",
"run": "Probelauf starten",
"result": "Ergebnis",
"failed": "Testlauf fehlgeschlagen"
},
"toast": {
"createFailed": "Workflow konnte nicht erstellt werden",
"deleted": "Workflow gelöscht",
"deleteFailed": "Workflow konnte nicht gelöscht werden"
},
"approvals": {
"title": "Freigaben",
"subtitle": "Workflow-Durchläufe, die auf deine Bestätigung warten.",
"empty": "Aktuell wartet nichts auf dich.",
"confirm": "Bestätigen",
"deny": "Ablehnen",
"recorded": "Antwort gespeichert",
"defaultPrompt": "Ein Workflow benötigt deine Bestätigung.",
"pendingTitle": "Offene Freigaben",
"viewAll": "Alle Freigaben ansehen",
"openEntity": "{{type}} #{{id}} öffnen",
"acted": "Erledigt"
},
"editor": {
"namePlaceholder": "Workflow-Name",
"when": "Wenn",
"cleanUp": "Layout aufräumen",
"textView": "Text",
"canvasView": "Canvas",
"loadText": "In Editor laden",
"textLoaded": "Geladen prüfen und speichern",
"textNeedsArrays": "Benötigt „nodes“- und „edges“-Arrays",
"textNeedsTrigger": "Benötigt genau einen Trigger-Knoten",
"textHint": "Der gesamte Ablauf als JSON zum Teilen kopieren oder an ein LLM geben, oder einen Ablauf einfügen und in den Editor laden. Nach dem Import „Layout aufräumen“ klicken.",
"saved": "Workflow gespeichert",
"saveFailed": "Speichern fehlgeschlagen",
"badJson": "Konfiguration ist kein gültiges JSON",
"daysBefore": "Tage vor dem Anlass",
"templateGroup": "Vorlagengruppe für Erinnerungen",
"templateGroupHint": "Die genaue Vorlage wird je Anlasstyp innerhalb dieser Gruppe automatisch gewählt: «Gruppe»_«Anlasstyp», falls vorhanden, sonst «Gruppe»_default. Leer = event_reminder.",
"showAdvanced": "Erweitert (JSON)",
"hideAdvanced": "Erweitert ausblenden (JSON)",
"triggerHint": "Der Auslöser wird oben in der Leiste gesetzt (Wenn …).",
"actionLabel": "Aktion",
"recipient": "Empfänger",
"recipientCustomer": "Kunde (berücksichtigt Geschäftszeiten)",
"recipientAdmin": "Admin (sofort gesendet)",
"emailTemplate": "E-Mail-Vorlagenschlüssel",
"webhookUrl": "Webhook-URL",
"webhookTarget": "Webhook",
"webhookNone": "— Konfigurierten Webhook wählen —",
"webhookInactive": "(inaktiv)",
"webhookHint": "Wird über die Webhook-Pipeline zugestellt (Signatur, Wiederholungen, SSRF-Prüfungen). Endpunkte unter Einstellungen → Webhooks verwalten.",
"condition": "Bedingung",
"exprField": "Feld",
"exprOp": "Operator",
"exprValue": "Wert",
"conditionHint": "Führt bei „wahr“ zur „yes“-Kante, sonst zur „no“-Kante.",
"waitType": "Warten",
"waitUntil": "Bis zu einem Datum",
"waitDelay": "Feste Verzögerung",
"waitAnchor": "Warten bis",
"days": "Tage",
"hours": "Stunden",
"minutes": "Min",
"maxIterations": "Höchstens wiederholen (mal)",
"gatePrompt": "Frage an den Admin",
"gatePromptPh": "z. B. Keine Zahlung erhalten Mahnung senden?",
"gateTimeout": "Automatisch ablaufen nach (Tagen, optional)",
"gateHint": "Sendet dem Admin einen Bestätigen/Ablehnen-Link; führt zur „confirm“- oder „deny“-Kante."
}
},
"eventTypes": {
"title": "Veranstaltungsarten",
"subtitle": "Veranstaltungsarten und deren Standard-Themes anpassen",
"loading": "Lade Veranstaltungsarten...",
"loadError": "Fehler beim Laden der Veranstaltungsarten",
"createNew": "Neue Veranstaltungsart",
"edit": "Veranstaltungsart bearbeiten",
"created": "Veranstaltungsart erfolgreich erstellt",
"updated": "Veranstaltungsart erfolgreich aktualisiert",
"deleted": "Veranstaltungsart erfolgreich gelöscht",
"createError": "Fehler beim Erstellen der Veranstaltungsart",
"updateError": "Fehler beim Aktualisieren der Veranstaltungsart",
"deleteError": "Fehler beim Löschen der Veranstaltungsart",
"searchPlaceholder": "Veranstaltungsarten suchen...",
"showInactive": "Inaktive anzeigen",
"noResults": "Keine Veranstaltungsarten gefunden",
"empty": "Noch keine Veranstaltungsarten",
"system": "System",
"table": {
"type": "Typ",
"slugPrefix": "URL-Präfix",
"theme": "Standard-Theme",
"status": "Status",
"actions": "Aktionen"
},
"form": {
"name": "Anzeigename",
"namePlaceholder": "z.B. Familienshooting",
"slugPrefix": "URL-Präfix",
"slugPrefixPlaceholder": "z.B. familie",
"slugPreview": "Beispiel-URL:",
"emoji": "Symbol",
"themePreset": "Standard-Theme",
"slideshowPreset": "Diashow-Voreinstellung",
"slideshowPresetHint": "Standard-Diashow-Stil für neue Events dieses Typs.",
"isActive": "Aktiv (sichtbar bei Veranstaltungserstellung)"
},
"validation": {
"slugFormat": "Nur Buchstaben, Zahlen und Bindestriche erlaubt"
},
"slugInfo": {
"title": "URL-Präfix Info:",
"description": "Das URL-Präfix wird zur Generierung von Galerie-URLs verwendet. Zum Beispiel erstellt eine Veranstaltungsart mit Präfix \"familie\" URLs wie: familie-mueller-familie-2025-01-22"
},
"deleteConfirm": {
"title": "Veranstaltungsart löschen",
"message": "Sind Sie sicher, dass Sie löschen möchten",
"warning": "Diese Aktion kann nicht rückgängig gemacht werden. Stellen Sie sicher, dass keine Veranstaltungen diesen Typ verwenden."
}
},
"backup": {
"title": "Backup-Verwaltung",
"subtitle": "Verwalten Sie System-Backups, konfigurieren Sie automatisierte Backups und stellen Sie vorherige Backups wieder her.",
"tabs": {
"dashboard": "Dashboard",
"configuration": "Konfiguration",
"history": "Backup-Verlauf",
"restore": "Wiederherstellung",
"integrity": "Integrität",
"coverage": "Abdeckung"
},
"integrity": {
"title": "Dokumentintegrität",
"description": "Prüft, ob jedes in der Datenbank referenzierte CRM-Dokument (Angebot / Vertrag / Rechnung / Unterschrift) tatsächlich auf der Festplatte existiert und — sofern ein Hash gespeichert ist — die Datei-Bytes weiterhin übereinstimmen. Nur lesend, auf Abruf.",
"runNow": "Prüfung starten",
"running": "Prüfe…",
"error": "Prüfung fehlgeschlagen: {{message}}",
"scannedAt": "Zuletzt geprüft: {{when}}",
"emptyState": "In dieser Sitzung wurde noch keine Prüfung ausgeführt. Klicke auf \"Prüfung starten\", um den Dokumentbestand zu durchsuchen.",
"summary": {
"total": "Gesamt",
"verifiedOk": "Hash-verifiziert",
"existsButNoHash": "Nur Existenz",
"existsButNoHashHint": "Datei gefunden, aber kein SHA-256 gespeichert (Angebots-/Rechnungs-PDFs, Unterschrifts-Zeichnungen). Nur-Existenz ist im Streitfall schwächeres Beweismaterial.",
"missingFiles": "Fehlend",
"hashMismatches": "Hash-Abweichungen"
},
"missing": {
"heading": "Fehlende Dateien",
"caption": "Diese Zeilen verweisen auf einen Pfad, der nicht auf der Festplatte existiert. Nach einer Wiederherstellung bedeutet das, dass das Artefakt aus der Sicherungskette verloren ging; bei frischen Installationen wurde die Datei meist manuell gelöscht."
},
"hashMismatches": {
"heading": "Hash-Abweichungen",
"caption": "Die Datei existiert, aber ihre aktuellen Bytes stimmen nicht mit dem zum Ausstellungs-/Signierzeitpunkt erfassten SHA-256 überein. Deutet auf Manipulation, Bit-Rot oder eine Wiederherstellung mit einer abweichenden Kopie hin."
},
"results": {
"table": "Tabelle",
"rowId": "Zeilen-ID",
"column": "Spalte",
"detail": "Detail"
}
},
"coverage": {
"title": "Backup-Abdeckung",
"description": "Zeigt, was das nächste Backup einschließt, überspringt oder stillschweigend verfehlt. Der Datenbank-Block bestätigt die Dump-Strategie. Der \"Drift\"-Abschnitt markiert Unterverzeichnisse, die auf der Festplatte existieren, aber nicht in der Backup-Konfiguration stehen — meist ein Hinweis darauf, dass eine neue Funktion ohne passende backup_paths-Zeile ausgeliefert wurde.",
"refresh": "Aktualisieren",
"error": "Abdeckungs-Bericht konnte nicht geladen werden: {{message}}",
"generatedAt": "Abdeckung erstellt: {{when}}",
"fallbackInUse": "Die Tabelle backup_paths fehlt. Der Walker nutzt seine fest verdrahtete Legacy-Fallback-Liste. Migration 108 wurde möglicherweise nicht ausgeführt — prüfen Sie die Server-Logs und führen Sie die Migrationen erneut aus.",
"database": {
"title": "Datenbank",
"mode": "Modus",
"modeInline": "Inline-Dump bei jedem Backup",
"modeScheduled": "Nur geplant (Inline abgewählt)",
"lastDump": "Letzter Dump",
"lastDumpSize": "Größe",
"noDump": "Noch kein Dump vorhanden",
"staleLabel": "Status",
"stale": "Veraltet — älter als 26 Std."
},
"summary": {
"title": "Zusammenfassung",
"willScan": "Wird gescannt",
"skippedByToggle": "Übersprungen (Schalter aus)",
"skippedByFlag": "Übersprungen (Feature-Flag)",
"missingOnDisk": "Auf Festplatte fehlend",
"drift": "Nicht konfiguriert auf Festplatte (Drift)"
},
"paths": {
"heading": "Konfigurierte Pfade",
"path": "Pfad",
"coverage": "Abdeckung",
"featureFlag": "Feature-Flag",
"description": "Beschreibung"
},
"coverage": {
"willScan": "Wird gescannt",
"skippedByToggle": "Aus",
"skippedByFlag": "Per Flag aus",
"missingOnDisk": "Auf Festplatte fehlend"
},
"drift": {
"heading": "Drift erkannt: Unterverzeichnisse ohne backup_paths-Zeile",
"caption": "Diese Verzeichnisse existieren auf der Festplatte, werden vom Walker aber übersprungen. Entweder eine backup_paths-Zeile hinzufügen, die Dateien in ein abgedecktes Verzeichnis verschieben, oder — wenn es sich um Laufzeit-Caches handelt — bestätigen, dass der Ausschluss sicher ist.",
"none": "Kein Drift erkannt — jedes Top-Level-Unterverzeichnis unter STORAGE_PATH steht entweder in backup_paths oder in der erwarteten Nicht-Backup-Allow-List."
}
},
"status": {
"inProgress": "Backup läuft...",
"lastBackup": "Letztes Backup",
"noBackups": "Keine Backups gefunden",
"nextBackup": "Nächstes Backup",
"notScheduled": "Nicht geplant",
"enabled": "Aktiviert",
"disabled": "Deaktiviert"
},
"actions": {
"runBackupNow": "Backup jetzt starten",
"starting": "Starte...",
"testConnection": "Verbindung testen",
"delete": "Löschen",
"view": "Details anzeigen",
"download": "Herunterladen"
},
"dashboard": {
"healthMessages": {
"noBackups": "Keine Backups gefunden",
"upToDate": "Backup ist aktuell",
"recent": "Backup ist aktuell",
"outdated": "Backup ist veraltet",
"lastBackupFailed": "Letztes Backup fehlgeschlagen",
"gettingOld": "Backup wird alt"
},
"stats": {
"totalBackups": "Gesamt-Backups",
"backupSize": "Backup-Größe",
"lastDuration": "Letzte Dauer",
"backupStatus": "Backup-Status",
"last": "Letztes",
"files": "Dateien",
"active": "Aktiv",
"inactive": "Inaktiv",
"noBackupsYet": "Noch keine Backups"
},
"recentActivity": {
"title": "Letzte Backup-Aktivitäten"
},
"notConfigured": {
"title": "Backup nicht konfiguriert",
"message": "Bitte konfigurieren Sie die Backup-Einstellungen im Konfiguration-Tab, bevor Sie Backups ausführen."
},
"coverage": {
"included": "Enthalten",
"excluded": "Ausgeschlossen",
"title": "Backup-Abdeckung"
},
"storageDestination": "Speicherziel",
"backupType": "{{type}} Backup",
"noDestinationSet": "Kein Ziel festgelegt",
"health": {
"title": "Backup-Gesundheit"
},
"actions": {
"runBackupNow": "Backup jetzt ausführen",
"running": "Wird ausgeführt..."
},
"healthStatus": {
"warning": "Warnung",
"excellent": "Ausgezeichnet",
"good": "Gut",
"critical": "Kritisch"
}
},
"configuration": {
"enableBackup": "Automatisierte Backups aktivieren",
"destinationType": "Backup-Ziel",
"destinationTypes": {
"local": {
"name": "Lokaler Speicher",
"description": "Backups auf dem lokalen Server-Dateisystem speichern"
},
"rsync": {
"name": "Remote-Server (Rsync)",
"description": "Backups über SSH/Rsync auf einen Remote-Server synchronisieren"
},
"s3": {
"name": "S3-kompatibler Speicher",
"description": "Backups in Amazon S3 oder kompatiblem Objektspeicher speichern"
}
},
"fields": {
"destinationPath": "Zielpfad",
"destinationPathHelp": "Lokaler Verzeichnispfad für Backup-Speicherung",
"destinationPathPlaceholder": "/pfad/zum/backup/verzeichnis",
"rsyncHost": "Remote-Host",
"rsyncHostPlaceholder": "backup.beispiel.de",
"rsyncUser": "SSH-Benutzer",
"rsyncUserPlaceholder": "backup-benutzer",
"rsyncPath": "Remote-Pfad",
"rsyncPathPlaceholder": "/home/backup/foto-sharing",
"rsyncSshKey": "SSH Private Key",
"rsyncSshKeyHelp": "SSH Private Key für Authentifizierung (optional)",
"rsyncSshKeyPlaceholder": "-----BEGIN RSA PRIVATE KEY-----",
"s3Endpoint": "S3-Endpunkt",
"s3EndpointHelp": "S3 API-Endpunkt (z.B. s3.amazonaws.com)",
"s3Bucket": "Bucket-Name",
"s3AccessKey": "Zugriffsschlüssel-ID",
"s3SecretKey": "Geheimer Zugriffsschlüssel",
"s3Region": "Region"
},
"schedule": {
"title": "Backup-Zeitplan",
"scheduleType": "Zeitplan-Typ",
"options": {
"hourly": "Jede Stunde",
"daily": "Täglich",
"weekly": "Wöchentlich",
"custom": "Benutzerdefinierter Cron-Ausdruck"
},
"customCron": "Cron-Ausdruck",
"customCronHelp": "Geben Sie einen gültigen Cron-Ausdruck ein (z.B. 0 3 * * *)",
"retention": "Aufbewahrungszeitraum",
"retentionDays": "Backups aufbewahren für",
"retentionHelp": "Tage (ältere Backups werden automatisch gelöscht)"
},
"whatToBackup": {
"title": "Was soll gesichert werden",
"database": "Datenbank",
"databaseHelp": "Alle Veranstaltungsdaten, Einstellungen und Konfigurationen",
"photos": "Fotos",
"photosHelp": "Alle hochgeladenen Fotos in aktiven Galerien",
"archives": "Archive",
"archivesHelp": "Archivierte Veranstaltungs-ZIP-Dateien",
"thumbnails": "Miniaturbilder",
"thumbnailsHelp": "Generierte Miniaturbilder (können neu erstellt werden)"
},
"advancedOptions": {
"title": "Erweiterte Optionen",
"compression": "Komprimierung aktivieren",
"compressionHelp": "Backup-Dateien komprimieren, um Speicherplatz zu sparen",
"encryption": "Verschlüsselung aktivieren",
"encryptionHelp": "Backups für zusätzliche Sicherheit verschlüsseln",
"encryptionPassphrase": "Verschlüsselungs-Passphrase",
"encryptionPassphraseHelp": "Starke Passphrase für Backup-Verschlüsselung"
},
"messages": {
"requiredFields": "Bitte füllen Sie alle erforderlichen Felder aus",
"connectionSuccess": "Verbindungstest erfolgreich!",
"connectionFailed": "Verbindungstest fehlgeschlagen"
},
"testingConnection": "Teste Verbindung...",
"saveSettings": "Konfiguration speichern",
"savingSettings": "Speichern...",
"enableBackupHelp": "Automatisch Backups nach dem konfigurierten Zeitplan erstellen"
},
"history": {
"searchPlaceholder": "Backups suchen...",
"columns": {
"status": "Status",
"dateTime": "Datum & Zeit",
"type": "Typ",
"size": "Größe",
"duration": "Dauer",
"actions": "Aktionen"
},
"details": {
"backupDetails": "Backup-Details",
"destination": "Ziel",
"started": "Gestartet",
"completed": "Abgeschlossen",
"contentBackedUp": "Gesicherter Inhalt",
"errorDetails": "Fehlerdetails",
"manifest": "Manifest",
"otherFiles": "Geschäftsdokumente & sonstige",
"totalFiles": "Gesamtdateien"
},
"pagination": {
"showing": "Zeige {{from}}-{{to}} von {{total}} Backups",
"previous": "Zurück",
"next": "Weiter"
}
},
"restore": {
"steps": {
"selectSource": "Quelle auswählen",
"chooseBackup": "Backup auswählen",
"restoreOptions": "Wiederherstellungsoptionen",
"reviewConfirm": "Überprüfen & Bestätigen",
"progress": "Wiederherstellungsfortschritt"
},
"source": {
"title": "Backup-Quelle auswählen",
"subtitle": "Wählen Sie, woher das Backup wiederhergestellt werden soll",
"local": {
"name": "Lokales Backup",
"description": "Vom lokalen Dateisystem wiederherstellen"
},
"s3": {
"name": "S3-Speicher",
"description": "Aus S3-Bucket wiederherstellen"
},
"upload": {
"name": "Backup hochladen",
"description": "Eine Backup-Datei hochladen",
"comingSoon": "Upload-Funktion kommt bald",
"manifestComingSoon": "Manifest-Upload-Funktion kommt bald",
"picpeak": {
"name": ".picpeak-Backup",
"description": "Portables Voll-Backup — stellt alles wieder her (vollständige Überschreibung, Ihr aktuelles Konto bleibt erhalten)."
},
"manifest": {
"name": "Manifest + Dateien",
"description": "Ein Manifest und die zugehörigen Backup-Dateien hochladen (Legacy-Format)."
}
},
"configuration": {
"s3": "S3-Konfiguration",
"endpoint": "S3-Endpunkt-URL",
"bucket": "Bucket-Name",
"accessKey": "Zugriffsschlüssel-ID",
"secretKey": "Geheimer Zugriffsschlüssel"
}
},
"backup": {
"title": "Backup für Wiederherstellung auswählen",
"subtitle": "Aus verfügbaren Backups auswählen",
"noBackupsFound": "Keine Backups in ausgewählter Quelle gefunden",
"encrypted": "Verschlüsseltes Backup",
"encryptedMessage": "Sie müssen die Verschlüsselungs-Passphrase angeben, um dieses Backup wiederherzustellen.",
"enterPassphrase": "Verschlüsselungs-Passphrase eingeben",
"at": "um"
},
"restoreTypes": {
"full": {
"name": "Vollständige Wiederherstellung",
"description": "Alles wiederherstellen, einschließlich Datenbank, Fotos und Archive",
"warning": "Dies ersetzt alle aktuellen Daten"
},
"database": {
"name": "Nur Datenbank",
"description": "Nur die Datenbank wiederherstellen (Einstellungen, Veranstaltungen, Benutzer)",
"warning": "Aktuelle Datenbank wird ersetzt"
},
"files": {
"name": "Nur Dateien",
"description": "Nur Fotos und Archive wiederherstellen",
"warning": "Vorhandene Dateien können überschrieben werden"
},
"selective": {
"name": "Selektive Wiederherstellung",
"description": "Bestimmte Elemente zur Wiederherstellung auswählen",
"warning": "Nur ausgewählte Elemente werden wiederhergestellt"
}
},
"options": {
"title": "Wiederherstellungsoptionen",
"subtitle": "Wählen Sie, was wiederhergestellt werden soll",
"additionalOptions": {
"title": "Zusätzliche Optionen",
"skipPreBackup": "Vor-Wiederherstellungs-Backup überspringen",
"skipPreBackupHelp": "Standardmäßig wird vor der Wiederherstellung ein Backup erstellt. Aktivieren Sie dies, um es zu überspringen.",
"force": "Wiederherstellung erzwingen",
"forceHelp": "Sicherheitsprüfungen und Warnungen überschreiben (mit Vorsicht verwenden)"
}
},
"confirmation": {
"title": "Überprüfen & Bestätigen",
"subtitle": "Bitte überprüfen Sie Ihre Wiederherstellungskonfiguration",
"validation": {
"passed": "Validierung bestanden",
"failed": "Validierung fehlgeschlagen",
"checking": "Validiere Wiederherstellungskonfiguration..."
},
"spaceCheck": {
"title": "Speicherplatz",
"required": "Erforderlich",
"available": "Verfügbar",
"insufficient": "Unzureichender Speicherplatz"
},
"summary": {
"title": "Wiederherstellungszusammenfassung",
"source": "Quelle",
"backupDate": "Backup-Datum",
"restoreType": "Wiederherstellungstyp",
"preBackup": "Vor-Backup",
"enabled": "Aktiviert",
"skipped": "Übersprungen"
},
"warning": {
"title": "Wichtiger Hinweis",
"message": "Diese Wiederherstellungsoperation ersetzt vorhandene Daten. Stellen Sie sicher, dass Sie ein aktuelles Backup haben, bevor Sie fortfahren. Diese Aktion kann nicht rückgängig gemacht werden."
}
},
"progress": {
"title": "Wiederherstellungsfortschritt",
"inProgress": "Wiederherstellung läuft...",
"completed": "Wiederherstellung abgeschlossen",
"overallProgress": "Gesamtfortschritt",
"current": "Aktuell",
"statusDetails": "Status-Details",
"restoreLogs": "Wiederherstellungsprotokolle",
"success": {
"title": "Wiederherstellung erfolgreich abgeschlossen",
"message": "Ihre Daten wurden wiederhergestellt. Bitte überprüfen Sie, ob alles korrekt funktioniert.",
"verifyIntegrity": "Dokumentintegrität jetzt prüfen"
}
},
"actions": {
"back": "Zurück",
"next": "Weiter",
"startRestore": "Wiederherstellung starten",
"starting": "Starte...",
"validating": "Validiere...",
"startNewRestore": "Neue Wiederherstellung starten"
}
},
"messages": {
"backupStarted": "Backup erfolgreich gestartet",
"backupFailed": "Backup konnte nicht gestartet werden",
"configUpdated": "Backup-Konfiguration aktualisiert",
"configUpdateFailed": "Konfiguration konnte nicht aktualisiert werden"
}
},
"archives": {
"title": "Archive",
"subtitle": "Archivierte Fotogalerien verwalten",
"loadingArchives": "Archive werden geladen...",
"totalArchives": "Gesamtarchive",
"storageUsed": "Genutzter Speicher",
"totalPhotos": "Gesamtfotos",
"avgArchiveSize": "Durchschn. Archivgröße",
"searchPlaceholder": "Archive durchsuchen...",
"allTypes": "Alle Typen",
"wedding": "Hochzeit",
"birthday": "Geburtstag",
"corporate": "Geschäftlich",
"other": "Andere",
"sortByDate": "Nach Datum sortieren",
"sortByName": "Nach Name sortieren",
"sortBySize": "Nach Größe sortieren",
"tableHeaders": {
"event": "Veranstaltung",
"type": "Typ",
"archivedDate": "Archivierungsdatum",
"size": "Größe",
"photos": "Fotos",
"actions": "Aktionen"
},
"noArchivesFound": "Keine Archive gefunden",
"eventDateNA": "Veranstaltungsdatum: N/A",
"processing": "Wird verarbeitet...",
"download": "Herunterladen",
"restore": "Wiederherstellen",
"delete": "Löschen",
"showing": "Zeige {{from}} bis {{to}} von {{total}} Archiven",
"page": "Seite {{current}} von {{total}}",
"storageManagement": "Speicherverwaltung",
"storageInfo": "Archive werden dauerhaft gespeichert, es sei denn, sie werden manuell gelöscht. Erwägen Sie die Implementierung einer Aufbewahrungsrichtlinie zur Verwaltung der Speicherkosten.",
"confirmRestore": "Sind Sie sicher, dass Sie dieses Archiv wiederherstellen möchten? Die Veranstaltung wird wieder aktiv.",
"confirmDelete": "Sind Sie sicher, dass Sie dieses Archiv dauerhaft löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
"restoreSuccess": "Archiv erfolgreich wiederhergestellt",
"deleteSuccess": "Archiv dauerhaft gelöscht"
},
"auth": {
"password": "Passwort",
"enterPassword": "Galerie-Passwort eingeben",
"passwordPlaceholder": "Geben Sie das Galerie-Passwort ein",
"invalidPassword": "Ungültiges Passwort",
"wrongPassword": "Falsches Passwort. Bitte überprüfen Sie Ihr Passwort und versuchen Sie es erneut.",
"tooManyAttempts": "Zu viele fehlgeschlagene Anmeldeversuche. Bitte versuchen Sie es später erneut.",
"pleaseEnterPassword": "Bitte geben Sie ein Passwort ein",
"passwordHint": "Das Passwort wurde vom Veranstalter bereitgestellt. Kontaktieren Sie ihn, wenn Sie es nicht haben.",
"iab": {
"instagram": {
"title": "Diesen Link im Browser öffnen",
"ios": "Der eingebaute Browser von Instagram blockiert das Passwort-Login manchmal. Oben rechts auf das ⋯-Menü tippen und „Im externen Browser öffnen“ wählen (oder den Link kopieren und in Safari einfügen).",
"android": "Der eingebaute Browser von Instagram blockiert das Passwort-Login manchmal. Oben rechts auf das ⋮-Menü tippen und „Im externen Browser öffnen“ wählen (oder den Link kopieren und in Chrome einfügen)."
}
}
},
"gallery": {
"expires": "Läuft ab",
"expired": "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",
"feedbackFilter": "Feedback-Filter",
"all": "Alle",
"liked": "Gefallen",
"favorited": "Favorisiert",
"rated": "Bewertet",
"commented": "Kommentiert",
"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.",
"downloadBefore": "Laden Sie Ihre Fotos herunter, bevor sie nicht mehr verfügbar sind.",
"viewGallery": "Galerie anzeigen",
"downloadAll": "Alle herunterladen",
"downloadError": "Einige Fotos konnten nicht heruntergeladen werden",
"selectPhotos": "Fotos auswählen",
"cancelSelection": "Auswahl abbrechen",
"selectAll": "Alle auswählen",
"deselectAll": "Auswahl aufheben",
"deleteSelected": "Ausgewählte löschen",
"searchByFilename": "Nach Dateinamen suchen...",
"uncategorized": "Ohne Kategorie",
"sortAscending": "Aufsteigend sortieren",
"sortDescending": "Absteigend sortieren",
"remaining": "verbleibend",
"selectPhotosHint": "Tipp: Verwenden Sie Strg+Klick (Cmd+Klick auf Mac), um schnell mehrere Fotos auszuwählen",
"filters": "Filter",
"toggleMenu": "Menü umschalten",
"allCategories": "Alle Kategorien",
"categories": "Kategorien",
"mediaType": "Medien",
"allMedia": "Alle Medien",
"photosOnly": "Fotos",
"videosOnly": "Videos",
"download": "Herunterladen",
"noMedia": "Noch keine Medien hochgeladen",
"searchPlaceholder": "Fotos suchen...",
"sortBy": "Sortieren nach",
"sortByCaptureDate": "Nach Aufnahmedatum sortieren",
"sortByRating": "Nach Bewertung sortieren",
"photoGallery": "Fotogalerie",
"photos": "Fotos",
"allRightsReserved": "Alle Rechte vorbehalten",
"searchMemories": "Erinnerungen suchen...",
"thankYou": "Vielen Dank",
"thankYouMessage": "Dass Sie Teil unserer Geschichte waren und unseren besonderen Tag unvergesslich gemacht haben.",
"feedback": {
"title": "Feedback",
"shareThoughts": "Teilen Sie Ihre Gedanken zu \"{{name}}\"",
"rateThisMoment": "Bewerten Sie diesen Moment",
"comments": "Kommentare",
"noComments": "Noch keine Kommentare. Seien Sie der Erste!",
"yourName": "Ihr Name",
"yourEmail": "Ihre E-Mail",
"writeLovelyNote": "Schreiben Sie eine nette Nachricht...",
"postComment": "Kommentar posten",
"anonymous": "Anonym"
},
"favorites": "Favoriten",
"expiresIn_one": "Galerie läuft in {{count}} Tag ab",
"expiresIn_other": "Galerie läuft in {{count}} Tagen ab",
"downloading_one": "1 Foto wird heruntergeladen…",
"downloading_other": "{{count}} Fotos werden heruntergeladen…",
"photosSelected_one": "{{count}} Foto ausgewählt",
"photosSelected_other": "{{count}} Fotos ausgewählt",
"downloadSelected_one": "{{count}} Foto herunterladen",
"downloadSelected_other": "{{count}} Fotos herunterladen",
"guestRecovery": {
"invalidEmail": "Gültige E-Mail-Adresse eingeben",
"codeSent": "Prüfen Sie Ihren Posteingang auf einen Bestätigungscode.",
"requestError": "Code konnte nicht gesendet werden. Bitte erneut versuchen.",
"invalidCode": "6-stelligen Code eingeben",
"verifyError": "Ungültiger oder abgelaufener Code.",
"back": "Zurück",
"title": "Ihre Auswahl wiederherstellen",
"emailStepDescription": "Geben Sie die E-Mail-Adresse ein, die Sie zuvor verwendet haben. Wir senden Ihnen einen 6-stelligen Bestätigungscode.",
"codeStepDescription": "Geben Sie den 6-stelligen Code ein, den wir an Ihre E-Mail-Adresse gesendet haben.",
"emailLabel": "E-Mail",
"sendCode": "Code senden",
"codeLabel": "Bestätigungscode",
"verifyCode": "Verifizieren und fortfahren"
},
"guestPrompt": {
"nameRequired": "Name ist erforderlich",
"invalidEmail": "Ungültige E-Mail-Adresse",
"emailRequired": "E-Mail ist erforderlich",
"error": "Registrierung fehlgeschlagen",
"title": "Willkommen — wie heißen Sie?",
"description": "Ihre Auswahl wird unter diesem Namen gespeichert, damit der Fotograf weiß, welche Fotos Ihnen gefallen.",
"nameLabel": "Ihr Name",
"namePlaceholder": "Name eingeben",
"emailLabelRequired": "E-Mail",
"emailLabel": "E-Mail (optional)",
"emailPlaceholder": "[email protected]",
"submit": "Weiter",
"alreadyHere": "Ich war schon einmal hier"
},
"footer": {
"forgetMeConfirm": "Ihr Name und Ihre Auswahl werden aus dieser Galerie entfernt.",
"forgetMe": "Vergiss mich ({{name}})",
"socials": "Soziale Netzwerke"
},
"photosCount_one": "{{count}} Foto",
"photosCount_other": "{{count}} Fotos",
"poweredBy": "Bereitgestellt von PicPeak"
},
"categories": {
"title": "Fotokategorien",
"eventSpecificCategories": "Veranstaltungsspezifische Kategorien",
"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",
"noCategoriesYet": "Noch keine Kategorien. Erstellen Sie Ihre erste Kategorie, um Fotos zu organisieren.",
"deleteConfirm": "Sind Sie sicher, dass Sie \"{{name}}\" löschen möchten?",
"setCoverPhoto": "Titelbild festlegen",
"removeCoverPhoto": "Titelbild entfernen",
"coverPhotoSet": "Titelbild erfolgreich festgelegt",
"coverPhotoRemoved": "Titelbild entfernt",
"failedToSetCoverPhoto": "Titelbild konnte nicht festgelegt werden",
"categoryHeroHint": "Wenn kein Titelbild für eine Kategorie festgelegt ist, wird das Standard-Hero-Foto verwendet.",
"downloadsEnabled": "Downloads für diese Kategorie aktiviert",
"downloadsDisabled": "Downloads für diese Kategorie deaktiviert",
"enableDownloadsTitle": "Klicken zum Aktivieren der Downloads für diese Kategorie",
"disableDownloadsTitle": "Klicken zum Deaktivieren der Downloads für diese Kategorie",
"failedToToggleDownloads": "Aktualisierung der Download-Berechtigung fehlgeschlagen"
},
"events": {
"totalPhotos": "Gesamtfotos",
"totalViews": "Gesamtaufrufe",
"totalDownloads": "Gesamte Downloads",
"uniqueVisitors": "Eindeutige Besucher",
"galleryTheme": "Galerie-Design",
"noThemeSet": "Kein Design konfiguriert",
"customizingThemeFor": "Design für {{event}} anpassen",
"customCssTemplate": "Benutzerdefinierte CSS-Vorlage",
"customCssTemplateDesc": "Verwenden Sie eine CSS-Vorlage, um die Galerie mit einzigartigen visuellen Effekten zu gestalten.",
"noTemplate": "Keine Vorlage",
"useThemeOnly": "Nur Design-Vorlage verwenden",
"customTemplate": "Benutzerdefinierte Vorlage",
"createInvoice": "Rechnung erstellen",
"title": "Veranstaltungen",
"create": "Veranstaltung erstellen",
"createEvent": "Veranstaltung erstellen",
"eventDetails": "Veranstaltungsdetails",
"eventName": "Veranstaltungsname",
"eventType": "Veranstaltungstyp",
"eventDate": "Veranstaltungsdatum",
"fullDay": "Ganztägig",
"eventTimeStart": "Startzeit",
"eventTimeEnd": "Endzeit",
"hostEmail": "E-Mail des Kunden",
"hostName": "Name des Kunden",
"hostNamePlaceholder": "Max Mustermann",
"adminEmail": "Admin-E-Mail",
"expirationDate": "Ablaufdatum",
"active": "Aktiv",
"archived": "Archiviert",
"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",
"backToEvents": "Zurück zu Veranstaltungen",
"loadingEventDetails": "Veranstaltungsdetails werden geladen...",
"saveChanges": "Änderungen speichern",
"eventExpiresIn": "Diese Veranstaltung läuft in {{days}} Tagen ab",
"warningEmailsHaveBeenSent": "Warn-E-Mails wurden an den Kunden gesendet.",
"extendSevenDays": "Um 7 Tage verlängern",
"overview": "Übersicht",
"photos": "Fotos",
"categories": "Kategorien",
"eventInformation": "Veranstaltungsinformationen",
"sourceMode": "Quellenmodus",
"sourceModeManaged": "Verwaltet (Upload nach PicPeak)",
"sourceModeReference": "Externen Ordner referenzieren",
"sourceModeHelp": "Nutzen Sie den verwalteten Modus für direkte Uploads oder verweisen Sie auf einen gemounteten /external-media Ordner.",
"externalFolder": "Externer Ordner",
"externalFolderHint": "Diese Ordner stammen aus dem /external-media Mount innerhalb des Containers oder Hosts.",
"externalFolderRequired": "Bitte wählen Sie vor dem Speichern einen externen Ordner aus.",
"externalFolderEmpty": "Keine Unterordner",
"clearSelection": "Löschen",
"welcomeMessage": "Willkommensnachricht",
"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.",
"shareWithGuestsPublic": "Teilen Sie diesen Link mit Gästen. Für diese Galerie ist kein Passwort erforderlich.",
"shortUrls": {
"title": "Gebrandete Kurz-URLs",
"description": "Erstelle einprägsame Links wie /s/sofia-abschluss, die zu dieser Galerie führen. Die Kurz-URL zeigt selbst die reiche Social-Vorschau — iMessage, Facebook, WhatsApp etc. sehen das Galerie-Foto + den Namen auch beim Einfügen des kurzen Links.",
"slugPlaceholder": "sofia-abschluss (optional)",
"slugHelp": "Leer lassen für automatische Generierung aus dem Galerienamen. Erlaubte Zeichen: Kleinbuchstaben, Ziffern, Bindestriche.",
"create": "Erstellen",
"created": "Kurz-URL erstellt",
"deleted": "Kurz-URL gelöscht",
"empty": "Noch keine Kurz-URLs. Erstelle oben eine, um diese Galerie mit einem einprägsamen Link zu teilen.",
"hits": "{{count}} Aufrufe",
"lastHit": "zuletzt {{when}}",
"createdAt": "erstellt {{when}}",
"useSuggested": "Stattdessen „{{suggested}}\" verwenden",
"confirmDelete": "Kurz-URL /s/{{slug}} löschen? Der Link funktioniert sofort nicht mehr.",
"errors": {
"slugTaken": "Diese Kurz-URL ist bereits vergeben — versuche stattdessen {{suggested}}.",
"invalidSlug": "Kurz-URLs müssen aus Kleinbuchstaben, Ziffern und Bindestrichen bestehen (164 Zeichen)."
}
},
"resetGalleryPassword": "Galerie-Passwort zurücksetzen",
"resendCreationEmail": "Erstellungs-E-Mail erneut senden",
"creationEmailResent": "Die Erstellungs-E-Mail wurde zur Warteschlange hinzugefügt",
"failedToResendEmail": "Fehler beim erneuten Senden der Erstellungs-E-Mail",
"photoStatistics": "Fotostatistiken",
"managePhotos": "Fotos verwalten",
"actions": "Aktionen",
"archivingInfo": "Beim Archivieren wird eine ZIP-Datei aller Fotos erstellt und die Galerie aus dem öffentlichen Zugriff entfernt.",
"archivedOn": "Archiviert am",
"downloadArchive": "Archiv herunterladen",
"loadingPhotos": "Fotos werden geladen...",
"photoCategories": "Fotokategorien",
"organizeCategoriesInfo": "Organisieren Sie Ihre Fotos in Kategorien. Kategorien helfen Gästen, bestimmte Fototypen zu navigieren und zu finden.",
"categoriesTip": "Tipp: Kategorien sind spezifisch für jede Veranstaltung. Sie können auch globale Kategorien in den Einstellungen erstellen.",
"galleryPassword": "Galerie-Passwort",
"requirePasswordToggle": "Galerie mit Passwort schützen",
"requirePasswordToggleHelp": "Deaktivieren Sie diese Option, wenn die Galerie ohne Passwort geteilt werden soll. Jeder mit dem Link kann die Fotos ansehen.",
"publicGalleryWarning": "Öffentliche Galerien sind für jeden mit dem Link zugänglich. Aktivieren Sie gegebenenfalls Wasserzeichen und behalten Sie die Aktivität im Blick.",
"passwordHelperText": "Sie können Datumsangaben wie \"04.07.2025\" oder beliebigen Text mit mindestens 6 Zeichen verwenden",
"passwordPlaceholder": "Sicheres Passwort eingeben",
"confirmPassword": "Passwort bestätigen",
"newPasswordLabel": "Neues Galerie-Passwort",
"passwordReset": {
"title": "Galerie-Passwort zurücksetzen",
"newTitle": "Neues Passwort",
"description": "Lege ein neues Passwort für {{eventName}} fest oder lasse beide Felder leer, um eines automatisch zu erzeugen.",
"newPasswordLabel": "Neues Passwort",
"placeholder": "Leer lassen für automatische Erzeugung",
"helperText": "Mindestens 6 Zeichen verwenden oder leer lassen für automatische Erzeugung",
"confirmLabel": "Passwort bestätigen",
"sendEmail": "E-Mail-Benachrichtigung senden",
"sendEmailHelp": "Den Host über die Passwortänderung informieren",
"warning": "Hinweis: Das alte Passwort funktioniert nicht mehr. Stelle sicher, dass du das neue Passwort an den Host weitergibst.",
"submit": "Passwort zurücksetzen",
"successHeading": "Passwort erfolgreich zurückgesetzt!",
"emailSentNote": "Eine E-Mail-Benachrichtigung wurde an den Host gesendet.",
"generatedLabel": "Automatisch generiertes Galerie-Passwort",
"saveSecurelyNote": "Wichtig: Speichere dieses Passwort sicher. Es kann nicht wiederhergestellt werden, sobald du dieses Fenster schließt.",
"done": "Fertig",
"toastSuccess": "Passwort erfolgreich zurückgesetzt",
"toastError": "Passwort zurücksetzen fehlgeschlagen",
"toastCopied": "Passwort in Zwischenablage kopiert",
"errorMinLength": "Das Passwort muss mindestens 6 Zeichen lang sein",
"errorMismatch": "Passwörter stimmen nicht überein"
},
"galleryExpiration": "Galerie-Ablauf",
"daysAfterEvent": "Tage nach dem Veranstaltungsdatum",
"expiresOn": "Läuft ab am",
"themeAndStyle": "Design & Stil",
"noExpiration": "Kein Ablaufdatum",
"noExpirationHelp": "Diese Galerie bleibt aktiv, bis sie manuell archiviert wird.",
"photoCap": "Fotolimit",
"photoCapHelp": "Maximale Anzahl erlaubter Fotos. 0 = unbegrenzt",
"userUploads": "Benutzer-Upload-Einstellungen",
"allowUserUploads": "Gästen erlauben, Fotos hochzuladen",
"allowUserUploadsHelp": "Ermöglichen Sie Gästen, ihre eigenen Fotos in diese Galerie hochzuladen",
"allowUserUploadsDescription": "Ermöglichen Sie Gästen, ihre eigenen Fotos in diese Galerie hochzuladen",
"uploadCategory": "Upload-Kategorie",
"selectCategory": "Wählen Sie eine Kategorie für Benutzer-Uploads",
"uploadCategoryHelp": "Alle von Benutzern hochgeladenen Fotos werden dieser Kategorie hinzugefügt",
"allowDownloads": "Foto-Downloads erlauben",
"downloadsDisabled": "Downloads deaktiviert",
"downloadProtection": "Download-Schutz",
"disableRightClick": "Rechtsklick-Menü blockieren",
"watermarkDownloads": "Wasserzeichen bei Downloads hinzufügen",
"enableDevtoolsProtection": "Entwicklertools erkennen",
"useCanvasRendering": "Canvas-Rendering (erweiterter Schutz)",
"protectionInfo": "Schutzfunktionen helfen, unerlaubte Downloads zu verhindern, können jedoch nicht alle Methoden blockieren.",
"protectionLevelBasic": "Einfach - Nur Rechtsklick-Sperre",
"protectionLevelStandard": "Standard - Tastenkombinationen blockiert",
"protectionLevelEnhanced": "Erweitert - Bildschirmfoto-Erkennung",
"protectionLevelMaximum": "Maximum - DevTools-Erkennung & Canvas-Rendering",
"heroLogoSettings": "Hero-Logo-Einstellungen",
"heroLogoVisible": "Logo im Hero-Bereich anzeigen",
"heroLogoSize": "Logo-Größe",
"heroLogoSizeSmall": "Klein",
"heroLogoSizeMedium": "Mittel",
"heroLogoSizeLarge": "Groß",
"heroLogoSizeXLarge": "Extra Groß",
"heroLogoPosition": "Logo-Position",
"heroLogoPositionTop": "Oben (über dem Titel)",
"heroLogoPositionCenter": "Mitte (zwischen Titel und Datum)",
"heroLogoPositionBottom": "Unten (unter dem Datum)",
"heroLogoInfo": "Diese Einstellungen gelten für das Hero-Layout der Galerie. Sie können das Logo ausblenden oder Größe und Position anpassen.",
"eventCustomLogo": "Individuelles Event-Logo",
"eventCustomLogoDescription": "Laden Sie ein individuelles Logo für dieses Event hoch. Dies überschreibt das globale Branding-Logo nur für diese Galerie.",
"uploadEventLogo": "Logo hochladen",
"replaceLogo": "Ersetzen",
"removeLogo": "Entfernen",
"eventLogoUploaded": "Event-Logo erfolgreich hochgeladen",
"eventLogoUploadFailed": "Event-Logo konnte nicht hochgeladen werden",
"eventLogoRemoved": "Event-Logo erfolgreich entfernt",
"eventLogoRemoveFailed": "Event-Logo konnte nicht entfernt werden",
"heroLogoVisibleLabel": "Logo sichtbar",
"heroLogoSizeLabel": "Größe",
"heroLogoPositionLabel": "Position",
"heroLogoHidden": "Logo ausgeblendet",
"heroPhoto": "Hero-Foto",
"heroPhotoHelp": "Wählen Sie ein Standard-Hero-Foto für die Galerie. Sie können dies pro Kategorie überschreiben.",
"selectHeroPhoto": "Hero-Foto auswählen",
"noHeroPhotoSelected": "Kein Hero-Foto ausgewählt",
"heroPhotoSelected": "Hero-Foto ausgewählt",
"heroImageAnchor": "Hero-Bild Zuschneideposition",
"heroImageAnchorDescription": "Klicken Sie auf das Bild, um den Fokuspunkt für den Zuschnitt festzulegen.",
"heroImageAnchorTop": "Oben",
"heroImageAnchorCenter": "Mitte",
"heroImageAnchorBottom": "Unten",
"heroPreview": "Hero-Vorschau",
"noPhotosAvailable": "Keine Fotos verfügbar",
"eventNamePlaceholder": "z.B. Max & Maria's Hochzeit",
"welcomeMessagePlaceholder": "Willkommen zu unserem besonderen Tag! Laden Sie diese Erinnerungen gerne herunter und teilen Sie sie...",
"hostEmailPlaceholder": "[email protected]",
"adminEmailPlaceholder": "[email protected]",
"adminEmailPickFromAdmins": "Aus Admins wählen:",
"adminEmailCustom": "Eigene E-Mail",
"accessAndSecurity": "Zugriff & Sicherheit",
"enterPassword": "Passwort eingeben",
"confirmPasswordPlaceholder": "Passwort bestätigen",
"inactive": "Inaktiv",
"expired": "Abgelaufen",
"draft": "Entwurf",
"publishAndNotify": "Veröffentlichen & Kunden benachrichtigen",
"publishConfirm": "Dadurch wird die Galerie zugänglich und die Benachrichtigungs-E-Mail an den Kunden gesendet. Fortfahren?",
"publishSuccess": "Galerie veröffentlicht und Kunde benachrichtigt!",
"publishDialog": {
"title": "Galerie veröffentlichen",
"descriptionWithEmail": "Die Galerie \"{{eventName}}\" wird zugänglich gemacht und die Benachrichtigungs-E-Mail an {{customerEmail}} gesendet.",
"descriptionNoEmail": "Die Galerie \"{{eventName}}\" wird zugänglich gemacht. Es ist keine Kunden-E-Mail hinterlegt es wird keine Benachrichtigung gesendet.",
"descriptionAssignedAccount": "Die Galerie \"{{eventName}}\" wird zugänglich gemacht. Die zugewiesenen Kundenkonten werden per E-Mail (in ihrer Sprache) benachrichtigt, dass sie verfügbar ist.",
"justPublish": "Veröffentlichen",
"passwordLabel": "Galerie-Passwort",
"passwordPlaceholder": "Galerie-Passwort eingeben",
"passwordHelp": "Gib das bei der Erstellung gesetzte Passwort erneut ein (oder wähle ein neues). Die E-Mail enthält genau diesen Text; das Backend hasht es erneut, sodass die Galerie-Anmeldung weiterhin funktioniert.",
"errorMinLength": "Das Passwort muss mindestens 6 Zeichen lang sein."
},
"duplicateEvent": "Galerie duplizieren",
"duplicateDialog": {
"title": "Galerie duplizieren",
"description": "Erstellt eine neue Entwurfsgalerie, die Branding, Verhalten, Feedback und Kategorien aus \"{{sourceEventName}}\" übernimmt. Fotos, Passwort und Share-Tokens werden NICHT übernommen.",
"eventNameLabel": "Neuer Veranstaltungsname *",
"eventNamePlaceholder": "z. B. Hochzeit Müller 2026",
"eventDateLabel": "Veranstaltungsdatum",
"eventDateHelp": "Leer lassen, um eine zufällige Endung in der Galerie-URL zu verwenden. Das Ablaufdatum wird aus diesem Datum zuzüglich des Ablauffensters der Quellgalerie berechnet.",
"customerNameLabel": "Kundenname",
"customerNamePlaceholder": "Optional kann später ausgefüllt werden",
"customerEmailLabel": "Kunden-E-Mail",
"customerEmailPlaceholder": "Optional",
"confirm": "Duplikat erstellen",
"errorNameRequired": "Veranstaltungsname ist erforderlich.",
"successToast": "Galerie dupliziert."
},
"draftBanner": "Diese Galerie befindet sich im Entwurfsmodus. Laden Sie Ihre Fotos hoch und veröffentlichen Sie, wenn Sie bereit sind.",
"subtitle": "Verwalten Sie Ihre Fotogalerien und Veranstaltungen",
"failedToLoadEvents": "Veranstaltungen konnten nicht geladen werden",
"tryAgain": "Erneut versuchen",
"eventExpiredMessage": "Diese Veranstaltung ist abgelaufen",
"guestsCannotAccessGallery": "Gäste können nicht mehr auf die Galerie zugreifen. Erwägen Sie, diese Veranstaltung zu archivieren.",
"bulkArchivePartial": "{{success}} Veranstaltungen archiviert, {{failed}} fehlgeschlagen",
"deleteSelected": "Ausgewählte löschen",
"bulkDelete": {
"warning": "Die ausgewählten Veranstaltungen, alle ihre Fotos, Archive und Audit-Logs werden endgültig gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.",
"confirmLabel": "Geben Sie {{literal}} ein, um zu bestätigen",
"confirmHelp": "Eine getippte Bestätigung verhindert versehentliche Löschungen und ist nicht von Browser-Autofill oder Passkey-Verknüpfungen betroffen.",
"successPartial": "{{success}} Veranstaltungen gelöscht, {{failed}} fehlgeschlagen",
"errorGeneric": "Veranstaltungen konnten nicht gelöscht werden",
"successAll_one": "{{count}} Veranstaltung dauerhaft gelöscht",
"successAll_other": "{{count}} Veranstaltungen dauerhaft gelöscht",
"title_one": "{{count}} Veranstaltung dauerhaft löschen?",
"title_other": "{{count}} Veranstaltungen dauerhaft löschen?",
"processing_one": "{{count}} Veranstaltung wird gelöscht. Dies kann einige Minuten dauern — bitte schließen Sie dieses Fenster nicht.",
"processing_other": "{{count}} Veranstaltungen werden gelöscht. Dies kann einige Minuten dauern — bitte schließen Sie dieses Fenster nicht.",
"submit_one": "{{count}} Veranstaltung löschen",
"submit_other": "{{count}} Veranstaltungen löschen"
},
"searchEventsPlaceholder": "Veranstaltungen suchen...",
"all": "Alle",
"expiring": "Läuft ab",
"event": "Veranstaltung",
"type": "Typ",
"date": "Datum",
"status": "Status",
"publicAccess": "Öffentlicher Zugriff",
"passwordProtected": "Passwortgeschützt",
"newPasswordRequired": "Bitte legen Sie vor dem Aktivieren des Passwortschutzes ein Passwort fest.",
"viewDetails": "Details anzeigen",
"archiveEventAction": "Veranstaltung archivieren",
"downloadArchiveAction": "Archiv herunterladen",
"deleteEvent": "Veranstaltung löschen",
"deleteEventConfirm": "Sind Sie sicher, dass Sie diese Veranstaltung löschen möchten?",
"copy": "Kopieren",
"copied": "Kopiert!",
"rename": {
"button": "Umbenennen",
"title": "Veranstaltung umbenennen",
"validating": "Neuer Name wird überprüft...",
"renamingFiles": "Dateien werden umbenannt...",
"complete": "Fertig!",
"failed": "Umbenennung fehlgeschlagen",
"confirm": "Veranstaltung umbenennen",
"success": "Veranstaltung erfolgreich umbenannt!",
"filesRenamed_one": "{{count}} Datei aktualisiert",
"filesRenamed_other": "{{count}} Dateien aktualisiert",
"newLink": "Neuer Galerie-Link",
"currentName": "Aktueller Name:",
"newName": "Neuer Veranstaltungsname",
"enterNewName": "Neuen Veranstaltungsnamen eingeben",
"newUrl": "Neue URL:",
"checkingAvailability": "Verfügbarkeit wird geprüft...",
"resendEmail": "Einladungs-E-Mail mit neuem Galerie-Link erneut senden",
"emailTo": "Aktualisierte Galerie-Zugangsemail senden an",
"warningTitle": "Bitte beachten:",
"warning1": "Die Galerie-URL wird sich ändern",
"warning2": "Alte URLs werden automatisch zur neuen URL weitergeleitet",
"warning3": "Fotodateien können umbenannt werden"
},
"stats": {
"totalEvents": "Gesamtveranstaltungen",
"activeEvents": "Aktive Veranstaltungen",
"totalPhotos": "Gesamtfotos",
"expiringEvents": "Bald ablaufend"
},
"clear": "Zurücksetzen",
"archiveSelected": "Auswahl archivieren",
"noEventsFound": "Keine Veranstaltungen gefunden",
"downloadArchiveSoon": "Archiv-Download bald verfügbar",
"welcomeMessageLabel": "Willkommensnachricht",
"archiveStatusTitle": "Archivstatus",
"downloadingArchive": "{{name}}-Archiv wird heruntergeladen...",
"downloadStarted": "Download gestartet",
"failedToDownloadArchive": "Archiv-Download fehlgeschlagen",
"bulkArchiveSuccess_one": "{{count}} Veranstaltung erfolgreich archiviert",
"bulkArchiveSuccess_other": "{{count}} Veranstaltungen erfolgreich archiviert",
"daysLeft_one": "({{count}} Tag verbleibend)",
"daysLeft_other": "({{count}} Tage verbleibend)",
"eventsSelected_one": "{{count}} Veranstaltung ausgewählt",
"eventsSelected_other": "{{count}} Veranstaltungen ausgewählt",
"paginationLabel": "{{from}}{{to}} von {{total}}",
"filtered": "gefiltert",
"pageOf": "Seite {{page}} von {{totalPages}}",
"notFound": "Veranstaltung nicht gefunden",
"customerPhone": "Kundentelefon",
"customerPhonePlaceholder": "+49 555 555 1234",
"allowPresignedDownload": "Direkten S3-Download erlauben (kein Wasserzeichen, nur S3-Modus)",
"neverExpires": "Nie",
"rightClickBlocked": "Rechtsklick gesperrt",
"devtoolsDetection": "DevTools-Erkennung",
"watermarked": "Mit Wasserzeichen",
"importExternal": "Aus externem Ordner importieren",
"externalImportInfo": "Alle Bilder aus dem ausgewählten Ordner werden importiert.",
"selectExternalFolder": "Externen Ordner unter /external-media auswählen",
"importFromSelectedFolder": "Aus ausgewähltem Ordner importieren",
"promoBanner": {
"title": "Werbebanner",
"help": "Lege fest, wie diese Galerie das Werbebanner behandelt. „Übernehmen\" nutzt die globale Vorgabe; „Eigene\" überschreibt sie für dieses Event; „Aus\" blendet das Banner für dieses Event aus.",
"mode_inherit": "Globale Vorgabe übernehmen",
"mode_custom": "Eigene Inhalte für dieses Event",
"mode_off": "Aus (für dieses Event ausblenden)",
"placeholder": "Markdown-Inhalt (z. B. **Aktion:** [jetzt Termin buchen](https://example.com))",
"preview": "Vorschau"
},
"ogShare": {
"title": "Heldenbild als Vorschau für geteilte Links verwenden",
"help": "Beim Teilen der Galerie-URL auf WhatsApp, Facebook, Slack usw. wird das oben gewählte Heldenbild als Link-Vorschau angezeigt. Das Thumbnail wird von Link-Preview-Crawlern ohne Authentifizierung abgerufen — wer die URL teilt, macht damit faktisch dieses Bild öffentlich. Standardmäßig aus; wähle erst ein Heldenbild, das du bewusst öffentlich zeigen möchtest, bevor du diese Option aktivierst.",
"heroRequired": "Wähle zuerst oben ein Heldenbild — diese Option verwendet es als WhatsApp- / Facebook- / Slack-Vorschaubild."
}
},
"settings": {
"title": "Systemeinstellungen",
"subtitle": "Systemweite Einstellungen und Präferenzen konfigurieren",
"loadingSettings": "Einstellungen werden geladen...",
"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)",
"maxFilesPerUpload": "Max. Dateien pro Upload",
"maxFilesPerUploadHelp": "Maximale Anzahl an Fotos pro Upload-Vorgang (1-{{max}}).",
"maxUploadBatchSize": "Max. Upload-Paketgröße (MB)",
"maxUploadBatchSizeHelp": "Maximale Größe pro Upload-Anfrage. Reduzieren Sie diesen Wert bei Nutzung eines Reverse-Proxys mit Größenbeschränkung (z.B. Cloudflare: 100MB).",
"allowedFileTypes": "Erlaubte Dateitypen",
"allowedFileTypesHelp": "Kommagetrennte Liste von Dateierweiterungen",
"featureToggles": "Funktionsschalter",
"enableAnalytics": "Analytics-Tracking aktivieren",
"enableRegistration": "Selbstregistrierung für Admins erlauben",
"enableShortGalleryUrls": "Kurze Galerie-Links verwenden",
"enableShortGalleryUrlsHelp": "Entfernt den Veranstaltungs-Slug aus neuen Freigabelinks und lässt bestehende Links weiterhin funktionieren.",
"useOriginalFilenames": "Originale Dateinamen beim Download verwenden",
"useOriginalFilenamesHelp": "Wenn aktiviert, verwenden Einzel- und ZIP-Downloads den Original-Dateinamen der Kamera (z. B. DSC_1234.jpg) statt des umbenannten Namens. Der Speicher bleibt unverändert; Duplikate innerhalb einer Veranstaltung erhalten ein numerisches Suffix.",
"maintenanceMode": "Wartungsmodus aktivieren",
"language": "Sprache",
"defaultLanguageHelp": "Sprache, die Gästen vor der Anmeldung angezeigt wird",
"saveGeneralSettings": "Allgemeine Einstellungen speichern",
"dateTimeFormat": "Datums- & Zeitformat",
"dateFormat": "Datumsformat",
"dateFormatHelp": "Wie Daten in E-Mails und in der gesamten Anwendung angezeigt werden",
"accountSection": "Admin-Konto",
"accountUsername": "Admin-Benutzername",
"accountUsernameHelp": "Wird im Admin-Bereich angezeigt und in Aktivitätsprotokollen verwendet.",
"accountUsernameRequired": "Benutzername ist erforderlich",
"accountUsernameLength": "Benutzername muss mindestens 3 Zeichen lang sein",
"accountEmail": "Admin-E-Mail",
"accountEmailHelp": "Wird für die Anmeldung und für Sicherheitsbenachrichtigungen verwendet.",
"accountEmailRequired": "E-Mail-Adresse ist erforderlich",
"accountEmailInvalid": "Bitte eine gültige E-Mail-Adresse eingeben",
"accountSaveButton": "Kontodaten speichern",
"accountSaveSuccess": "Kontodaten aktualisiert"
},
"publicSite": {
"badge": "Öffentliche Landingpage",
"title": "Öffentliche Landingpage",
"subtitle": "Veröffentlichen Sie eine anpassbare Landingpage für Gäste, die Ihre Domain besuchen.",
"loading": "Öffentliche Seite wird geladen...",
"enabled": "Aktiv",
"disabled": "Inaktiv",
"htmlLabel": "Landingpage-HTML",
"htmlPlaceholder": "HTML-Markup für Hero, Abschnitte und Handlungsaufrufe einfügen.",
"htmlHelp": "Rohes HTML wird beim Speichern bereinigt. Unsichere Skripte und Attribute werden automatisch entfernt. Platzhalter wie {{company_name}}, {{company_tagline}} und {{support_email}} werden mit den Werten aus den Branding-Einstellungen ersetzt.",
"cssLabel": "Benutzerdefiniertes CSS",
"cssPlaceholder": "Optionale CSS-Anpassungen für Layout, Farben oder Typografie.",
"cssHelp": "Import-Anweisungen und JavaScript-URLs werden entfernt. Verwenden Sie Standard-CSS-Selektoren.",
"saveCta": "Öffentliche Seite speichern",
"saving": "Speichern...",
"saveSuccess": "Öffentliche Seite gespeichert.",
"saveError": "Öffentliche Seite konnte nicht gespeichert werden.",
"resetCta": "Auf Standard zurücksetzen",
"resetting": "Setze zurück...",
"resetSuccess": "Landingpage wurde auf die Standardvorlage zurückgesetzt.",
"resetError": "Zurücksetzen auf Standard fehlgeschlagen.",
"previewTitle": "Live-Vorschau",
"previewSandboxed": "Sandbox-Vorschau",
"previewDisabled": "Aktivieren Sie die öffentliche Seite, um die Live-Vorschau zu sehen.",
"sanitizationNotice": "Skripte, iframes und unsichere Attribute werden vor der Veröffentlichung entfernt. Erlaubt sind sichere HTML-Elemente, Links und Bilder.",
"htmlRequired": "Legen Sie HTML-Inhalt fest, bevor die öffentliche Seite aktiviert wird."
},
"storage": {
"totalUsed": "Gesamt verwendet",
"archiveStorage": "Archivspeicher",
"storageLimit": "Speicherlimit",
"storageLimitHelper": "Definieren Sie ein Limit für die Speichernutzung. Dieses Limit dient als Hinweis und wird hervorgehoben, sobald es erreicht ist.",
"softLimitInputLabel": "Limit (GB)",
"softLimitHelper": "Geben Sie das gewünschte maximale Speicherlimit in Gigabyte ein.",
"recommendedSoftLimit": "Empfohlenes Limit",
"diskCapacity": "Festplattenkapazität",
"diskCapacityReported": "Festplattenkapazität (gemeldet)",
"diskAvailable": "Verfügbar",
"diskAvailableReported": "Verfügbar (gemeldet)",
"diskFreeReported": "Frei (gemeldet)",
"diskMetricsUnavailable": "Speicherinformationen sind in Docker Desktop oder virtuellen Umgebungen nicht verfügbar.",
"applyRecommended": "Empfehlung nutzen",
"applyAvailable": "An verfügbaren Speicher anpassen",
"invalidSoftLimit": "Bitte geben Sie eine gültige Zahl für das Limit ein.",
"saveSoftLimit": "Limit speichern",
"limitNotEnforced": "Dieses Limit dient nur als Hinweis und wird nicht automatisch durchgesetzt.",
"overrideTitle": "Manuelle Kapazitätsüberschreibung",
"diskOverrideEnvNote": "Die Speicherkapazität wird über Umgebungsvariablen gesteuert und kann hier nicht geändert werden.",
"diskOverrideSettingsHelp": "Setzen Sie eigene Werte, wenn Docker unrealistische Zahlen meldet.",
"overrideCapacityLabel": "Gesamtkapazität (GB)",
"overrideCapacityHelper": "Leer lassen, um die automatische Erkennung zu verwenden.",
"overrideAvailableLabel": "Verfügbarer Speicher (GB)",
"overrideAvailableHelper": "Optional. Leer lassen, um aus Gesamtkapazität minus belegtem Speicher zu berechnen.",
"saveOverride": "Kapazität speichern",
"capacityRequiredForAvailable": "Geben Sie zuerst eine Gesamtkapazität an, bevor Sie verfügbaren Speicher setzen.",
"availableExceedsCapacity": "Der verfügbare Speicher darf die Gesamtkapazität nicht überschreiten.",
"storageUsage": "Speichernutzung",
"unlimited": "Unbegrenzt"
},
"security": {
"title": "Sicherheit",
"passwordSettings": "Passworteinstellungen",
"minPasswordLength": "Minimale Passwortlänge",
"passwordComplexity": "Passwort-Komplexität",
"passwordComplexityHelp": "Sicherheitsstufe für Galerie-Passwörter",
"complexitySimple": "Einfach (6+ Zeichen, beliebiger Text)",
"complexityModerate": "Moderat (8+ Zeichen, Groß-/Kleinschreibung/Zahlen)",
"complexityStrong": "Stark (12+ Zeichen, Groß-/Kleinschreibung/Zahlen)",
"complexityVeryStrong": "Sehr stark (12+ Zeichen, alle Zeichentypen)",
"sessionAuth": "Sitzung & Authentifizierung",
"sessionTimeout": "Sitzungs-Timeout (Minuten)",
"maxLoginAttempts": "Max. Anmeldeversuche",
"maxLoginAttemptsHelp": "Maximale fehlgeschlagene Anmeldeversuche pro IP vor Sperrung",
"attemptWindowMinutes": "Versuchsfenster (Minuten)",
"attemptWindowMinutesHelp": "Zeitraum, in dem fehlgeschlagene Anmeldeversuche gezählt werden",
"lockoutDurationMinutes": "Sperrdauer (Minuten)",
"lockoutDurationMinutesHelp": "Wie lange Galerie oder Konto nach zu vielen Fehlern gesperrt bleiben",
"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",
"saveSecuritySettings": "Sicherheitseinstellungen speichern"
},
"events": {
"title": "Veranstaltungserstellung",
"requiredFields": "Pflichtfelder",
"requiredFieldsDescription": "Konfigurieren Sie, welche Kontaktfelder beim Erstellen neuer Veranstaltungen erforderlich sind.",
"requireCustomerName": "Kundenname erforderlich",
"requireCustomerNameHelp": "Kundenname muss für neue Veranstaltungen angegeben werden",
"requireCustomerEmail": "Kunden-E-Mail erforderlich",
"requireCustomerEmailHelp": "Kunden-E-Mail muss für neue Veranstaltungen angegeben werden",
"customerEmailWarning": "Erforderlich für das Versenden von Galerie-Einladungen",
"requireAdminEmail": "Admin-E-Mail erforderlich",
"requireAdminEmailHelp": "Admin-E-Mail muss für neue Veranstaltungen angegeben werden",
"adminEmailWarning": "Erforderlich für den Erhalt von Veranstaltungsbenachrichtigungen",
"requireEventDate": "Veranstaltungsdatum erforderlich",
"requireEventDateHelp": "Veranstaltungsdatum muss beim Erstellen angegeben werden",
"eventDateWarning": "Galerie-URLs verwenden zufällige Kennungen anstelle von Daten",
"requireExpiration": "Ablaufdatum erforderlich",
"requireExpirationHelp": "Galerien müssen ein Ablaufdatum haben",
"expirationWarning": "Galerien ohne Ablaufdatum bleiben aktiv, bis sie manuell archiviert werden",
"saveSettings": "Veranstaltungseinstellungen speichern",
"noteTitle": "Hinweis",
"noteText": "Diese Einstellungen betreffen nur die Erstellung neuer Veranstaltungen. Bestehende Veranstaltungen sind nicht betroffen. Standardmäßig sind alle Felder erforderlich.",
"defaultRequirePassword": "Standardmäßig Passwort erforderlich",
"defaultRequirePasswordHelp": "\"Passwort erforderlich\" beim Erstellen neuer Veranstaltungen vorausgewählt. Deaktivieren für schnellere Erstellung öffentlicher Galerien.",
"showGalleryFilterBar": "Filterleiste in Galerien anzeigen",
"showGalleryFilterBarHelp": "Dateiname-Suche und Sortiersteuerungen über Raster-Galerien anzeigen. Deaktivieren für ein übersichtlicheres Layout.",
"enablePhoneField": "Telefonnummer-Feld aktivieren",
"enablePhoneFieldHelp": "Fügt ein optionales Telefonnummer-Eingabefeld zum Veranstaltungsformular hinzu. Nützlich für Folgeautomatisierungen wie WhatsApp-Zustellung via n8n. Immer optional, auch wenn aktiviert.",
"defaultFeedbackEnabled": "Gäste-Feedback standardmäßig aktivieren",
"defaultFeedbackEnabledHelp": "Vorbelegt \"Gäste-Feedback\" beim Erstellen neuer Events. Einzelne Feedback-Optionen (Likes, Bewertungen, Kommentare) bleiben pro Event anpassbar."
},
"imageSecurity": {
"title": "Bildschutz",
"saveSuccess": "Bildschutz-Einstellungen gespeichert",
"saveError": "Fehler beim Speichern der Einstellungen",
"loadError": "Fehler beim Laden der Bildschutz-Einstellungen",
"defaultProtection": "Standard-Schutzeinstellungen",
"defaultProtectionHelp": "Diese Einstellungen gelten für alle neuen Veranstaltungen. Einzelne Veranstaltungen können diese Standardwerte überschreiben.",
"protectionLevel": "Standard-Schutzstufe",
"imageQuality": "Standard-Bildqualität",
"fragmentationLevel": "Fragmentierungsstufe",
"enableDevtools": "DevTools-Erkennung standardmäßig aktivieren",
"enableCanvas": "Canvas-Rendering standardmäßig aktivieren (erweiterter Schutz)",
"rateLimiting": "Ratenbegrenzung",
"rateLimitingHelp": "Begrenzen Sie, wie viele Bilder angefordert werden können, um Scraping zu verhindern.",
"requestsPerMinute": "Anfragen pro Minute",
"requestsPer5Minutes": "Anfragen pro 5 Min.",
"requestsPerHour": "Anfragen pro Stunde",
"securityMonitoring": "Sicherheitsüberwachung",
"suspiciousThreshold": "Schwellenwert für verdächtige Aktivitäten",
"autoBlockThreshold": "Automatische Sperrschwelle",
"enableMonitoring": "Sicherheitsüberwachung aktivieren",
"blockSuspiciousIps": "Verdächtige IPs automatisch blockieren",
"logEvents": "Sicherheitsereignisse in Datenbank protokollieren",
"infoTitle": "Über Bildschutz",
"infoText": "Diese Schutzfunktionen helfen, gelegentliches Herunterladen und Kopieren zu verhindern, können aber nicht alle Methoden blockieren. Entschlossene Benutzer finden möglicherweise trotzdem Wege, Bilder zu erfassen. Erwägen Sie die Verwendung von Wasserzeichen und rechtlichen Vereinbarungen für umfassenden Schutz."
},
"seo": {
"title": "SEO & Robots",
"indexingTitle": "Suchmaschinen-Indexierung",
"allowIndexing": "Suchmaschinen-Indexierung erlauben",
"allowIndexingHelp": "Wenn deaktiviert, werden alle Crawler über robots.txt blockiert. Für private Foto-Plattformen empfohlen auszuschalten.",
"sitemapUrl": "Sitemap-URL",
"sitemapUrlHelp": "Optional. Wird zur robots.txt hinzugefügt, falls angegeben.",
"aiBlockingTitle": "KI- & Bot-Blockierung",
"blockAiCrawlers": "KI-/LLM-Crawler blockieren",
"blockAiCrawlersHelp": "Verhindert, dass KI-Trainings-Bots auf Ihre Inhalte zugreifen.",
"blockedAgents": "Blockierte KI-Agenten",
"addAgentPlaceholder": "Agentenname eingeben...",
"blockSocialBots": "Social-Media-Vorschau-Bots blockieren",
"blockSocialBotsHelp": "Verhindert Link-Vorschauen auf Twitter, Facebook, LinkedIn usw.",
"metaTagsTitle": "Meta-Tags & Benutzerdefinierte Regeln",
"metaNoindex": "noindex-Meta-Tag hinzufügen",
"metaNoindexHelp": "Teilt Suchmaschinen mit, Seiten nicht zu indexieren (HTML-Ebene, ergänzt robots.txt).",
"metaNofollow": "nofollow-Meta-Tag hinzufügen",
"metaNofollowHelp": "Teilt Suchmaschinen mit, Links auf Seiten nicht zu folgen.",
"metaNoai": "noai/noimageai-Meta-Tag hinzufügen",
"metaNoaiHelp": "Signalisiert, dass Inhalte nicht für KI-Training verwendet werden sollen.",
"customRules": "Benutzerdefinierte robots.txt-Regeln",
"ruleAgentPlaceholder": "User-Agent",
"rulePathPlaceholder": "Disallow-Pfad",
"showPreview": "robots.txt-Vorschau anzeigen",
"hidePreview": "robots.txt-Vorschau ausblenden",
"saveSettings": "SEO-Einstellungen speichern"
},
"thumbnails": {
"title": "Vorschaubilder",
"dimensionsTitle": "Abmessungen & Qualität der Vorschaubilder",
"dimensionsHelp": "Konfigurieren Sie Größe und Qualität der automatisch generierten Vorschaubilder. Höhere Werte erzeugen bessere Vorschauen, erhöhen aber den Speicherbedarf und die Ladezeiten.",
"width": "Breite (px)",
"widthHelp": "50-1000 Pixel",
"height": "Höhe (px)",
"heightHelp": "50-1000 Pixel",
"quality": "Qualität",
"qualityHelp": "1-100, höher = bessere Qualität, aber größere Dateien",
"format": "Format",
"fit": "Anpassungsmodus",
"fitHelp": "Wie Bilder an die Vorschaubildgröße angepasst werden. \"Füllen\" beschneidet das Bild, \"Einpassen\" passt es innerhalb der Grenzen an.",
"regenerateTitle": "Vorschaubilder neu generieren",
"regenerateHelp": "Nach dem Ändern der Einstellungen können Sie alle vorhandenen Vorschaubilder neu generieren. Dies läuft im Hintergrund und kann bei großen Galerien eine Weile dauern.",
"regenerateButton": "Alle Vorschaubilder neu generieren",
"regenerateStarted": "Neugenerierung der Vorschaubilder gestartet",
"regenerateError": "Neugenerierung der Vorschaubilder konnte nicht gestartet werden",
"lightboxTitle": "Lightbox-Vorschau-Stufe",
"lightboxHelp": "Wenn aktiviert, lädt die Lightbox ein seitenverhältnis-erhaltendes JPEG mit ~1920 px (typischerweise 200500 KB) statt des vollen Originals (oft 512 MB). Beim Download durch Gäste wird weiterhin das Original ausgeliefert. Kostet pro Foto eine zusätzliche Vorschaudatei auf der Festplatte; Vorschauen werden beim ersten Öffnen erzeugt und unter /previews gespeichert.",
"lightboxToggle": "Mittelauflösende Vorschauen in der Lightbox verwenden",
"lightboxToggleHelp": "Standardmäßig deaktiviert. Aktivieren, sobald der gefühlte Geschwindigkeitsgewinn den zusätzlichen Speicherbedarf rechtfertigt.",
"regeneratePreviewsButton": "Alle Vorschauen neu generieren",
"previewsRegenerateStarted": "Neugenerierung der Lightbox-Vorschauen gestartet",
"previewsRegenerateError": "Neugenerierung der Vorschauen konnte nicht gestartet werden",
"saveSuccess": "Vorschaubild-Einstellungen gespeichert",
"saveError": "Vorschaubild-Einstellungen konnten nicht gespeichert werden",
"loadError": "Vorschaubild-Einstellungen konnten nicht geladen werden",
"infoTitle": "Über Vorschaubilder",
"infoText": "Vorschaubilder sind kleinere Vorschauversionen Ihrer Originalbilder. Das Erhöhen der Größe oder Qualität verbessert die Darstellung in der Galerieübersicht, benötigt aber mehr Speicherplatz und Bandbreite. Nach dem Ändern der Einstellungen verwenden Sie \"Alle Vorschaubilder neu generieren\", um bestehende Fotos zu aktualisieren.",
"fit_cover": "Füllen (zuschneiden)",
"fit_contain": "Einpassen (innerhalb)",
"fit_fill": "Strecken",
"fit_inside": "Innen (verkleinern)",
"fit_outside": "Außen (vergrößern)",
"fitRecommendation": "Empfehlung: „Inside\" für Masonry-/Mosaic-/Justified-Layouts (bewahrt das Seitenverhältnis), „Cover\" für gleichförmige 1:1-Kacheln."
},
"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."
},
"systemStatus": {
"title": "Systemstatus",
"storageOverview": "Speicherübersicht",
"systemInfo": "Systeminformationen",
"databaseInfo": "Datenbankinformationen",
"platform": "Plattform",
"nodeVersion": "Node-Version",
"uptime": "Betriebszeit",
"cpuCores": "CPU-Kerne",
"memoryUsage": "Speichernutzung",
"memoryUsed": "Speicher verwendet",
"photos": "Fotos",
"admins": "Administratoren",
"dbSize": "Datenbankgröße",
"services": "Hintergrunddienste",
"fileWatcher": "Dateiüberwachung",
"fileWatcherDesc": "Überwacht neue Fotos",
"expirationChecker": "Ablaufprüfung",
"expirationCheckerDesc": "Archiviert abgelaufene Galerien",
"emailProcessor": "E-Mail-Prozessor",
"emailProcessorDesc": "Sendet E-Mails aus der Warteschlange",
"emailQueue": "E-Mail-Warteschlangenstatus",
"pending": "Ausstehend",
"sent": "Gesendet",
"failed": "Fehlgeschlagen",
"lastUpdate": "Letzte Aktualisierung"
},
"photoDimensions": {
"title": "Foto-Abmessungen",
"totalPhotos": "Fotos gesamt",
"withDimensions": "Mit Abmessungen",
"missingDimensions": "Fehlende Abmessungen",
"repairButton": "Abmessungen reparieren",
"repairing": "Repariere...",
"noneToRepair": "Alle Fotos haben bereits Abmessungen",
"resultSuccess": "Letzte Reparatur: {{success}} aktualisiert, {{failed}} fehlgeschlagen",
"description": "Fehlende Breite/Höhe für Fotos ergänzen, die vor der Dimensionsverfolgung hochgeladen wurden. Erforderlich für Masonry- und Mosaik-Layouts."
},
"updateNotifications": {
"title": "Update-Benachrichtigungen",
"description": "Erhalten Sie E-Mail-Benachrichtigungen, wenn neue Versionen von PicPeak verfügbar sind.",
"enableEmails": "E-Mail-Benachrichtigungen aktivieren",
"enableEmailsDesc": "E-Mail an Admins senden, wenn eine neue Version verfügbar ist",
"recipients": "E-Mail-Empfänger",
"recipientsPlaceholder": "[email protected], [email protected]",
"recipientsHelper": "Kommagetrennte E-Mail-Adressen. Leer lassen, um an alle Admin-Benutzer zu senden.",
"lastNotified": "Letzte Benachrichtigung gesendet für Version: {{version}}",
"checkNow": "Prüfen & Benachrichtigen",
"sendTest": "Test-E-Mail senden",
"saved": "Einstellungen gespeichert",
"saveError": "Fehler beim Speichern der Einstellungen",
"emailFailed": "Fehler beim Senden der Benachrichtigung",
"checkSuccess": "Benachrichtigung für neue Version gesendet",
"checkNoAction": "Keine Benachrichtigung erforderlich: {{reason}}",
"checkError": "Fehler beim Prüfen auf Updates",
"emailSent_one": "Benachrichtigungs-E-Mail an {{count}} Empfänger gesendet",
"emailSent_other": "Benachrichtigungs-E-Mail an {{count}} Empfänger gesendet"
},
"moderation": {
"title": "Moderation",
"wordFilters": "Wortfilter",
"description": "Verwalten Sie Wörter, die in Kommentaren gefiltert oder blockiert werden sollen",
"addFilter": "Neuen Filter hinzufügen",
"enterWord": "Wort zum Filtern eingeben",
"searchFilters": "Filter durchsuchen...",
"filterAdded": "Wortfilter erfolgreich hinzugefügt",
"filterExists": "Dieser Wortfilter existiert bereits",
"addError": "Wortfilter konnte nicht hinzugefügt werden",
"filterUpdated": "Wortfilter erfolgreich aktualisiert",
"updateError": "Wortfilter konnte nicht aktualisiert werden",
"filterDeleted": "Wortfilter erfolgreich gelöscht",
"deleteError": "Wortfilter konnte nicht gelöscht werden",
"wordRequired": "Bitte geben Sie ein Wort zum Filtern ein",
"confirmDelete": "Möchten Sie diesen Wortfilter wirklich löschen?",
"loading": "Wortfilter werden geladen...",
"noMatchingFilters": "Keine passenden Filter gefunden",
"noFilters": "Noch keine Wortfilter konfiguriert",
"severityLow": "Niedrig",
"severityModerate": "Mittel",
"severityHigh": "Hoch",
"severityBlock": "Blockieren",
"severityLevels": "Schweregrade",
"lowDescription": "Wort wird zur Überprüfung markiert, aber nicht automatisch blockiert",
"moderateDescription": "Kommentar erfordert manuelle Freigabe, bevor er sichtbar wird",
"highDescription": "Kommentar wird automatisch ausgeblendet und erfordert Admin-Überprüfung",
"blockDescription": "Kommentar wird sofort abgelehnt und kann nicht eingereicht werden"
},
"styling": {
"title": "Benutzerdefiniertes CSS"
},
"analytics": {
"title": "Analyse",
"providerHeading": "Analytics-Anbieter",
"providerDescription": "Tracker für die öffentliche Galerie wählen oder eigenes Skript einfügen. Das Geräte-Diagramm im Admin-Dashboard wird nur bei Umami oder Rybbit angereichert — diese stellen eine Metrics-API bereit. Andere Anbieter (Plausible, Matomo, GA4, …) funktionieren über den Custom-Modus unten.",
"providerLabel": "Anbieter",
"provider": {
"none": "Keiner",
"umami": "Umami",
"rybbit": "Rybbit",
"custom": "Custom (eigenes Skript einfügen)"
},
"providerNoneInfo": "Kein externer Tracker eingebunden. Das Admin-Dashboard zeigt weiterhin Übersichtskarten + den Tagesverlauf aus PicPeaks eigenen access_logs; das Geräte-Diagramm verwendet eine grobe User-Agent-Heuristik.",
"rybbitUrl": "Rybbit-URL",
"rybbitUrlHelp": "URL Ihrer Rybbit-Instanz — `https://app.rybbit.io` für SaaS oder `https://rybbit.ihre-domain.de` für selbst gehostet.",
"rybbitWebsiteId": "Site-ID",
"rybbitWebsiteIdHelp": "Zu finden in Rybbit → Sites → Ihre Site → Tracking-Skript.",
"rybbitApiKey": "API-Schlüssel",
"rybbitApiKeyHelp": "Optional. Nur für das Geräte-Diagramm erforderlich. Erstellen in Rybbit → Account → Settings → API Keys. Beim Abruf maskiert als •••••••• gespeichert.",
"customHeadHtml": "Eigenes <head>-HTML",
"customHeadHtmlHelp": "Tracker-`<head>`-Snippet einfügen (Plausible, Matomo, Pirsch, GA4, GoatCounter, Fathom, Cloudflare Web Analytics, …). Beim Speichern bereinigt: nur `<script>`, `<noscript>`, `<link rel=\"preconnect|dns-prefetch\">` und `<meta>` bleiben erhalten; Event-Handler-Attribute werden entfernt. Das Geräte-Diagramm fällt in diesem Modus auf eine serverseitige User-Agent-Heuristik zurück — für tracker-seitige Zahlen Umami oder Rybbit wählen.",
"customCspWarning": "Hinweis zur Content-Security-Policy",
"customCspWarningText": "PicPeak setzt eine strikte CSP (`script-src 'self'`) ein. Wenn Ihr Tracker von einer anderen Domain lädt, müssen Sie diese Domain in Ihrer Reverse-Proxy- oder nginx-CSP-Konfiguration zulassen — sonst blockiert der Browser das Skript stillschweigend.",
"umamiIntegration": "Umami Analytics Integration",
"enableUmami": "Umami Analytics aktivieren",
"umamiUrl": "Umami URL",
"umamiUrlHelp": "Die URL Ihrer Umami-Instanz (z.B. https://analytics.ihredomain.de)",
"websiteId": "Website-ID",
"websiteIdHelp": "Ihre Umami Website-ID (im Umami-Dashboard zu finden)",
"shareUrl": "Freigabe-URL (Optional)",
"shareUrlHelp": "Öffentliche Freigabe-URL zum Einbetten des vollständigen Dashboards (in Umami erstellen)",
"umamiInfo": "Über Umami Analytics",
"umamiInfoText": "Umami ist eine datenschutzfreundliche, quelloffene Analyseplattform. Sie erfasst Seitenaufrufe, eindeutige Besucher und benutzerdefinierte Ereignisse ohne Cookies.",
"learnMore": "Mehr über Umami erfahren",
"saveAnalyticsSettings": "Analyse-Einstellungen speichern",
"backendAnalytics": "Backend-Analyse",
"backendAnalyticsText": "Das System erfasst auch grundlegende serverseitige Analysen für Sicherheits- und Leistungsüberwachung.",
"tracked": "Erfasste Metriken",
"galleryViews": "Galerie-Seitenaufrufe",
"photoDownloads": "Einzel- und Massendownloads",
"uniqueVisitors": "Eindeutige Besucher nach IP",
"deviceTypes": "Gerätetypen aus User-Agents",
"privacy": "Datenschutz",
"privacyText": "IP-Adressen werden aus Datenschutzgründen gehasht. Es werden keine persönlichen Daten gespeichert. Analysedaten werden 90 Tage aufbewahrt."
},
"groups": {
"general": "Allgemein",
"display": "Anzeige",
"privacySecurity": "Datenschutz & Sicherheit",
"integrations": "Integrationen",
"system": "System",
"appearance": "Inhalt & Erscheinungsbild",
"communication": "Kommunikation",
"crm": "CRM-Einstellungen"
},
"contracts": {
"title": "Verträge"
},
"reminderTemplates": {
"title": "Erinnerungs-E-Mails"
},
"apiTokens": {
"title": "API-Tokens",
"createError": "Token konnte nicht erstellt werden",
"revoked": "Token widerrufen",
"subtitle": "Langlebige Bearer-Tokens für die öffentliche /api/v1-Oberfläche — n8n-Integrationen, eigene Apps, Skripte. Tokens agieren als der Admin-Benutzer, der sie erstellt hat, eingeschränkt auf die gewählten Berechtigungen.",
"copyNow": "Kopieren Sie diesen Token jetzt — er wird nicht erneut angezeigt.",
"copied": "Kopiert",
"copyFailed": "Kopieren fehlgeschlagen",
"name": "Name",
"namePlaceholder": "z.B. n8n Produktion",
"scopes": "Berechtigungen",
"generate": "Token generieren",
"scopeHint": "admin > write > read. Ein reiner Lese-Token kann keine Änderungen vornehmen, auch wenn der Besitzer super_admin ist.",
"existing": "Vorhandene Tokens",
"lastUsed": "Zuletzt verwendet",
"created": "Erstellt",
"status": "Status",
"statusRevoked": "Widerrufen",
"statusExpired": "Abgelaufen",
"statusActive": "Aktiv",
"confirmRevoke": "\"{{name}}\" widerrufen? Bestehende Integrationen, die dieses Token nutzen, erhalten ab sofort 401.",
"revoke": "Widerrufen",
"empty": "Noch keine Tokens. Generieren Sie oben einen, um zu beginnen.",
"preview": "Vorschau"
},
"webhooks": {
"title": "Webhooks",
"subtitle": "Senden Sie POST-Ereignisbenachrichtigungen an Ihre URL, sobald etwas passiert — Galerie veröffentlicht, Foto hochgeladen, Veranstaltung archiviert usw. Signiert mit HMAC-SHA256 im X-PicPeak-Signature-Header.",
"piiNotice": "event.*-Payloads enthalten Kundenkontaktdaten (Name, E-Mail, Telefon) und den Galerie-Share-Token, sofern gespeichert. Richten Sie Webhooks nur auf vertrauenswürdige Empfänger — sie haben alles, um den Kunden zu kontaktieren oder die Galerie zu öffnen.",
"copyNow": "Kopieren Sie dieses Signaturgeheimnis jetzt — es wird nicht erneut angezeigt.",
"name": "Name",
"url": "Empfänger-URL",
"events": "Ereignisse abonnieren",
"filter": "Filter (JSON, optional)",
"template": "Vorlage (optional)",
"create": "Webhook erstellen",
"existing": "Vorhandene Webhooks",
"empty": "Noch keine Webhooks. Erstellen Sie oben einen, um Ereignisbenachrichtigungen zu erhalten.",
"namePlaceholder": "z. B. n8n WhatsApp",
"urlPlaceholder": "https://n8n.example.com/webhook/picpeak",
"showAdvanced": "+ Erweitert (Filter, Vorlage)",
"hideAdvanced": " Erweitert ausblenden (Filter, Vorlage)",
"filterHelp": "Dot-Pfad → erwarteter Wert. Alle Schlüssel müssen übereinstimmen (AND). Array für \"eines aus\".",
"filterError": "Filter muss gültiges JSON sein",
"templatePlaceholder": "Neue Galerie: ${data.event.event_name} → ${data.event.share_url}",
"templateHelp": "Ersetzt den Standard-JSON-Umschlag als Request-Body. Nur ${dot.path}-Substitution aus der Payload — keine Logik, keine Ausdrücke.",
"copyButton": "Kopieren",
"dismiss": "Schließen",
"copied": "Kopiert",
"copyFailed": "Kopieren fehlgeschlagen",
"colName": "Name",
"colUrl": "URL",
"colEvents": "Events",
"colLastDelivery": "Letzte Zustellung",
"colStatus": "Status",
"colActions": "Aktionen",
"eventsSubscribed_one": "{{count}} abonniert",
"eventsSubscribed_other": "{{count}} abonniert",
"statusActive": "Aktiv",
"statusDisabled": "Deaktiviert",
"toggleToDisable": "Klicken zum Deaktivieren",
"toggleToEnable": "Klicken zum Aktivieren",
"deliveriesLink": "Zustellungen",
"delete": "Löschen",
"confirmDelete": "\"{{name}}\" löschen? Ausstehende Zustellungen werden ebenfalls entfernt.",
"createError": "Webhook konnte nicht erstellt werden",
"updateError": "Webhook konnte nicht aktualisiert werden",
"deletedToast": "Webhook gelöscht",
"deleteError": "Webhook konnte nicht gelöscht werden"
},
"sectionLabel": "Einstellungsbereich",
"navAriaLabel": "Einstellungsnavigation",
"eventTypes": {
"title": "Veranstaltungstypen"
},
"cms": {
"title": "CMS-Seiten"
},
"email": {
"title": "E-Mail-Einstellungen"
},
"backup": {
"title": "Backup",
"picpeak": {
"title": "Portables Backup (.picpeak)",
"intro": "Laden Sie eine einzelne, in sich geschlossene Datei herunter und laden Sie sie auf einer anderen Instanz hoch, um diese zu klonen — komplett im Browser.",
"includePhotos": "Original-Galeriefotos einschließen (größere Datei)",
"secretsWarning": "Diese Datei enthält Geheimnisse im Klartext (E-Mail-Passwort, Admin-Zugangsdaten, API-Schlüssel). Bewahren Sie sie sicher auf und übertragen Sie sie nur über vertrauenswürdige Kanäle.",
"download": ".picpeak herunterladen",
"downloadFailed": "Die Backup-Datei konnte nicht erstellt werden.",
"restoreTitle": "Aus einer .picpeak wiederherstellen",
"restoreIntro": "Laden Sie eine .picpeak von dieser oder einer anderen Instanz hoch. Nur dieselbe Datenbank-Engine.",
"chooseFile": ".picpeak-Datei auswählen…",
"restoreDone": "Backup wiederhergestellt.",
"restoreFailed": "Wiederherstellung fehlgeschlagen.",
"restoreSummary": "{{tables}} Tabellen und {{files}} Dateien wiederhergestellt.",
"externalMediaNote": "Dieses Backup verweist auf eine externe Medienbibliothek. Stellen Sie sicher, dass das externe Medien-Routing auf dieser Instanz konfiguriert ist.",
"externalMediaLink": "Einrichtungsanleitung",
"reload": "App neu laden",
"confirmTitle": "Die Wiederherstellung löscht alle aktuellen Daten",
"confirmBody": "Dies ersetzt ALLE Daten auf dieser Instanz dauerhaft durch das hochgeladene Backup, mit Ausnahme Ihres aktuellen Kontos. Dies kann nicht rückgängig gemacht werden.",
"confirmRestore": "Löschen & wiederherstellen"
}
},
"branding": {
"title": "Branding"
},
"features": {
"title": "Funktionen",
"intro": "Schalten Sie Produktbereiche ein oder aus. Aktivierte Funktionen erscheinen in der linken Navigation und werden für Ihr Team verfügbar. Einige Funktionen sind noch im Beta-Status — schalten Sie sie ein, um sie auszuprobieren, oder aus, um sie zu verbergen.",
"notYetAvailable": "Noch nicht verfügbar — dieser Schalter wird aktiv, sobald die Funktion ausgeliefert wird.",
"sidebarHidden": "Kein Sidebar-Eintrag — läuft im Hintergrund",
"unsavedChanges": "Sie haben ungespeicherte Änderungen",
"preview": {
"title": "Sidebar-Vorschau",
"note": "Zeigt ungespeicherte Änderungen",
"legend": "Grün hinterlegte Einträge werden durch die Schalter oben gesteuert."
},
"sections": {
"core": "Kern",
"communication": "Kommunikation",
"scheduling": "Terminplanung",
"sales": "Vertrieb",
"accounting": "Buchhaltung",
"insights": "Auswertungen & Zugriff",
"customers": "Kunden",
"clients": "CRM",
"automation": "Automatisierung"
},
"status": {
"stable": "stabil",
"beta": "beta",
"new": "neu",
"experimental": "experimentell",
"roadmap": "roadmap"
},
"galleries": {
"title": "Galerien",
"description": "Der Kern von PicPeak. Immer verfügbar.",
"locked": "Galerien sind die Grundlage von PicPeak und können nicht deaktiviert werden."
},
"incomingMail": {
"title": "Eingehende E-Mails",
"description": "Ruft ein dediziertes Postfach (IMAP) jede Minute ab und legt Rechnungsanhänge in Buchhaltung → Eingangsrechnungen ab. Postfach unter Einstellungen → E-Mail konfigurieren."
},
"reminderEmails": {
"title": "Erinnerungs-E-Mails",
"description": "Automatische Vor-Event-Erinnerung an Kunden N Tage vor dem Eventdatum. Vorlagen pro Kategorie (Konzert, Firma, Hochzeit, …) unter Einstellungen → Erinnerungsvorlagen; Übersteuerung pro Event auf der Event-Detailseite."
},
"messaging": {
"title": "Nachrichten",
"description": "In-App-Konversationen mit Gästen, an eine Galerie gebunden. E-Mail ist für die meisten Teams völlig ausreichend — das hier ist für Studios, die alles an einem Ort haben möchten.",
"sidebar": "Nachrichten"
},
"calendar": {
"title": "Kalender",
"description": "Admin-Kalender mit Terminen, erfassten Stunden und offenen Angeboten/Verträgen in einer Ansicht. Stunden lassen sich direkt im Kalender per Drag erfassen.",
"sidebar": "Kalender"
},
"calendarBooking": {
"title": "Kundenbuchung",
"description": "Kunden sehen freie Slots auf einem öffentlichen Kalender und können direkt buchen. In Kürze verfügbar.",
"sidebar": "Buchung"
},
"quotes": {
"title": "Angebote",
"description": "Senden Sie Angebote mit Einzelposten an Kunden. Diese können über einen öffentlichen Link angenommen oder abgelehnt werden; Zahlungen werden manuell verfolgt.",
"sidebar": "Angebote"
},
"bills": {
"title": "Rechnungen",
"description": "Generieren Sie eine Rechnung aus jedem angenommenen Angebot. Manuell als bezahlt markieren — keine Integration mit Zahlungsanbietern.",
"sidebar": "Rechnungen"
},
"taxReport": {
"title": "Steuerexport",
"description": "Periodenbezogene Umsatzliste mit Netto- und MwSt-Aufschlüsselung, gruppiert nach MwSt-Satz. Exportieren Sie als PDF (Querformat, Firmenbriefkopf) oder CSV für Ihre Buchhaltung. Stornierte Rechnungen bleiben für die lückenlose Nummernfolge sichtbar, sind aber nicht in den Summen enthalten.",
"sidebar": "Steuer",
"requiresBills": "Bitte zuerst Rechnungen aktivieren — die Steuerliste liest aus Ihren Rechnungen.",
"requiresAccounting": "Bitte zuerst Buchhaltung aktivieren — der Steuerexport liegt im Buchhaltungsbereich."
},
"accounting": {
"title": "Buchhaltung",
"description": "Ein eigener Buchhaltungsbereich, getrennt vom CRM. Hier aktivieren und dann die Unterfunktionen unten einschalten (Steuerexport, Eingangsrechnungen). MwSt-/Steuerbehandlung dient nur als Orientierung — vor dem Verlassen darauf mit Ihrem Treuhänder prüfen.",
"sidebar": "Buchhaltung",
"requiredByBills": "Automatisch an, weil Rechnungen aktiviert ist — die MwSt-Einstellungen der Rechnungen liegen im Buchhaltungsbereich."
},
"incomingInvoices": {
"title": "Eingangsrechnungen",
"description": "Eingehende Lieferantenrechnungen erfassen (Upload oder Handy-/Tablet-Kamera), Aufwände kategorisieren und Kosten dem passenden Event des Kunden mit vertraglich hinterlegtem Zuschlag weiterverrechnen.",
"sidebar": "Eingang",
"requiresAccounting": "Bitte zuerst Buchhaltung aktivieren — Eingangsrechnungen liegen im Buchhaltungsbereich."
},
"expenses": {
"title": "Aufwände",
"description": "Interne Aufwände (Kilometer, Spesenpauschale, Barbelege), gebucht auf ein Event oder die Firma, mit optionalem Beleg. Getrennt von Eingangsrechnungen.",
"sidebar": "Aufwände",
"requiresAccounting": "Bitte zuerst Buchhaltung aktivieren — Aufwände liegen im Buchhaltungsbereich."
},
"analytics": {
"title": "Statistiken",
"description": "Speichernutzung, Galerie-Aufrufe, Download-Zahlen und Statistiken pro Veranstaltung."
},
"userManagement": {
"title": "Benutzerverwaltung",
"description": "Multi-Admin-Unterstützung mit rollenbasierten Berechtigungen. Deaktivieren Sie dies, wenn Sie ein Einzelbetreiber sind.",
"warning": "Bestehende Benutzerkonten bleiben gültig; die Admin-Oberfläche für deren Verwaltung wird ausgeblendet, bis Sie dies wieder aktivieren."
},
"customerPortal": {
"title": "Kundenkonten",
"description": "Persistente Kunden-Logins. Wiederkehrende Kunden sehen alle zugewiesenen Galerien an einem Ort — keine Passwörter pro Event. Kunden melden sich unter /customer/login an, verwaltet werden sie unter CRM → Konten."
},
"clients": {
"title": "CRM",
"description": "Hauptschalter für den CRM-Bereich in der Seitenleiste. Aus blendet den Bereich und alle Unterfunktionen aus, unabhängig von deren individuellen Schaltern beim erneuten Einschalten wird der vorherige Zustand wiederhergestellt."
},
"contracts": {
"title": "Verträge",
"description": "Erstellen Sie Verträge aus einer Bibliothek wiederverwendbarer Bausteine (Bildrechte, Geheimhaltung, Model-Release, Stornierung, Gerichtsstand …) und lassen Sie Kunden im Browser unterschreiben oder eine handsignierte PDF hochladen. Die vorausgefüllten Baustein-Texte sind NUR BEISPIELE — vor dem Versand mit Ihrem Anwalt prüfen.",
"sidebar": "Verträge"
},
"crmDevelopment": {
"title": "CRM-Entwicklerwerkzeuge",
"description": "Interne Helfer zum Prüfen von CRM-Abläufen (z. B. die Admin-Zahlungsprüfungs-E-Mail sofort auslösen, Drosselungen umgehen). Erscheint als Unterreiter „Entwicklung“ unter Kunden. Strikt opt-in — löst echte Seiteneffekte aus, nur mit Testdaten verwenden.",
"sidebar": "Entwicklung"
},
"hoursLogging": {
"title": "Stundenerfassung",
"description": "Zeiterfassung pro Kunde. Admin erfasst Datum + Start-/Endzeit + optionalen Satz-Override + Notiz. Kunden im Monatsmodus akkumulieren Stunden automatisch in den laufenden Monatsentwurf; Kunden pro Anlass sehen eine Schaltfläche „Entwurfsrechnung erstellen“, die eine eigenständige Entwurfsrechnung mit einer Zeile pro Eintrag erzeugt. Unabhängig von Rechnungen — Stunden erfassen, noch bevor die volle Abrechnungsoberfläche aktiviert ist.",
"sidebar": "Stunden"
},
"projects": {
"title": "Projekte",
"description": "Nur-Admin-Gruppierungsebene über Events. Bündle mehrere Events unter einem Projekt und öffne ein 360°-Projektübersichts-Cockpit — Meilenstein-Zeitleiste plus ein datierter Verlauf aller E-Mails (mit der tatsächlich gesendeten Vorschau + Erneut-senden/Abbrechen/Wiederholen-Aktionen), Angebote, Verträge, Rechnungen, Galerien und erfassten Stunden. Fügt beim Erfassen von Stunden eine „Auf Projekt buchen“-Option hinzu. Kunden sehen Projekte nie.",
"sidebar": "Übersicht"
},
"whatsapp": {
"title": "WhatsApp",
"description": "Liefert die Gallerie-Bereit-Benachrichtigung zusätzlich zur E-Mail über die WhatsApp Business API. Voraussetzung: Meta-Business-Konto, genehmigte Nachrichtenvorlage und eine Kunden-Telefonnummer am Event. Zugangsdaten unter Einstellungen → WhatsApp konfigurieren."
},
"slideshow": {
"title": "Live-Diashow",
"description": "Ein separater Vollbild-„Diashow“-Link pro Event für Beamer bei Live-Events übernimmt neue Uploads automatisch, mit Voreinstellungen je Event-Typ und globalen Wasserzeichen-Vorgaben unter Einstellungen → Diashow."
},
"workflows": {
"title": "Workflows",
"description": "Visuelle Automatisierungen auf einer Canvas erstellen Auslöser, Bedingungen, Verzweigungen, Schleifen und Freigabe-Gates für Admins. Deine Mahnstufen und Buchungsschritte werden zu bearbeitbaren Abläufen. Strikt optional.",
"sidebar": "Workflows"
}
},
"customerSurface": {
"brandingTitle": "Kundendashboard-Kopfzeile",
"brandingHint": "Bestimmt, was in der Kopfzeile von /customer/dashboard angezeigt wird. Öffentliche Galerien und Admin-Oberflächen bleiben unverändert.",
"showLogo": "Logo in der Kundenkopfzeile anzeigen",
"showLogoHint": "Verwendet das oben konfigurierte Branding-Logo.",
"showCompanyName": "Firmennamen in der Kundenkopfzeile anzeigen",
"showCompanyNameHint": "Ausblenden, wenn dein Logo den Firmennamen bereits enthält.",
"save": "Änderungen speichern",
"saved": "Branding des Kundendashboards gespeichert",
"error": "Einstellungen konnten nicht gespeichert werden"
},
"businessProfile": {
"title": "Geschäftsprofil"
},
"crm": {
"title": "CRM-Verhalten"
},
"accounting": {
"title": "Buchhaltung",
"subtitle": "Standardsätze, MwSt-Einstellungen und die Belegpflicht.",
"kmRate": "Kilometersatz (CHF / km)",
"kmRateHint": "Standard für Kilometer-Aufwände; pro Eintrag überschreibbar.",
"perDiemRate": "Spesenpauschale (CHF / Tag)",
"perDiemRateHint": "Eine Tagespauschale, die als Aufwand gebucht wird (kein Kunden-Verrechnungssatz); pro Eintrag überschreibbar.",
"requireProof": "Beleg für jeden Aufwand verlangen",
"vat": {
"title": "MwSt.",
"registered": "MwSt-pflichtig (Umsatzsteuer berechnen + Vorsteuer abziehen)",
"registeredHint": "Aus = Kleinunternehmen / unter der Schwelle: keine MwSt berechnet, Vorsteuer ist Aufwand (nicht abziehbar).",
"reclaimCountries": "Länder mit abziehbarer Vorsteuer",
"reclaimCountriesHint": "Üblicherweise Ihr Inland (CH / LI). Kosten aus anderen Ländern gelten als nicht abziehbare ausländische MwSt. Cmd/Ctrl-Klick für Mehrfachauswahl.",
"defaultOutputCode": "Standard-MwSt-Code für neue Rechnungen",
"defaultOutputCodeNone": "— keiner (bei 0% beginnen) —",
"defaultOutputCodeHint": "Neue Rechnungen und Angebote starten mit diesem MwSt-Code. Bestehende Dokumente bleiben unverändert."
},
"disclaimer": "Sätze und MwSt-/Steuerbehandlung dienen nur als Orientierung — mit Ihrem Treuhänder prüfen.",
"savedToast": "Buchhaltungseinstellungen gespeichert.",
"profileFields": {
"vatLabel": "MwSt-Bezeichnung (z. B. MwSt., VAT)",
"vatLabelHint": "Wird als Bezeichnung der MwSt-Zeile auf Rechnungs-/Angebots-PDFs gedruckt. Leer lassen, um die Standardbezeichnung der Dokumentsprache zu verwenden.",
"hourlyRate": "Standard-Stundensatz",
"hourlyRatePlaceholder": "z. B. 120.00",
"hourlyRateHint": "Verrechnungs-Fallback, wenn ein Kunde keinen eigenen Satz hat (Stundenerfassung). In {{currency}}, in Hauptwährungseinheiten. Leer lassen, um einen Satz pro Kunde oder pro Eintrag zu verlangen."
}
},
"slideshow": {
"title": "Diashow",
"subtitle": "Globale Vorgaben für die Live-Diashow. Events und Event-Typen können diese überschreiben."
},
"whatsapp": {
"title": "WhatsApp",
"subtitle": "Meta-Business-Zugangsdaten konfigurieren, um die Gallerie-Bereit-Benachrichtigung zusätzlich zur E-Mail per WhatsApp zu senden.",
"phoneNumberId": "Phone Number ID",
"phoneNumberIdHint": "Aus Meta Business → WhatsApp → API-Einrichtung. Die numerische ID, die Meta der hinterlegten Telefonnummer zuweist.",
"wabaId": "WABA-ID",
"wabaIdHint": "WhatsApp-Business-Konto-ID. Nur als Referenz (der API-Aufruf nutzt die Phone Number ID); nützlich für Audits.",
"accessToken": "Zugriffs-Token",
"accessTokenPlaceholder": "EAAB… (System-User-Token empfohlen)",
"accessTokenHint": "Beim Abruf maskiert als \"********\" gespeichert. Maskierten Wert beibehalten, um das bestehende Token zu behalten; neuen Wert eingeben, um zu ersetzen.",
"templateName": "Vorlagenname",
"templateNameHint": "Name der von Meta genehmigten Nachrichtenvorlage. Die Standardvorlage `gallery_ready` erwartet 5 Body-Parameter: Kundenname, Event-Name, Galerie-Link, Passwortzeile, Ablaufdatum. Die Vorlage vor der Aktivierung im Meta Business Manager genehmigen lassen.",
"templateLanguage": "Vorlagensprache",
"templateLanguagePlaceholder": "z. B. en_US, de_DE, ar, pt_BR",
"templateLanguageHint": "Meta-Sprachcode der Vorlage, exakt wie im Meta Business Manager hinterlegt (`ar`, `en_US`, `de_DE`, `pt_BR` usw.). Leer lassen, um auf die Standardsprache der Installation zurückzufallen. Stimmt der Code nicht mit einer registrierten Vorlage überein, meldet Meta „Vorlage in dieser Sprache nicht gefunden“.",
"templateParams": "Vorlagenparameter",
"templateParamsHint": "Auswählen, welche Werte als Positionsparameter (Slot 1, Slot 2, …) an Meta gesendet werden, und in der Reihenfolge anordnen, in der sie im Vorlagentext stehen. Nicht markierte Slots werden gar nicht gesendet. Standard entspricht der eingebauten `gallery_ready`-Vorlage mit 5 Parametern.",
"templateParamsEmpty": "Keine Slots ausgewählt das Speichern fällt auf die Standardform mit 5 Parametern zurück.",
"templateParamsPreview": "Ihre Vorlage erhält: {{preview}}",
"paramMoveUp": "Nach oben",
"paramMoveDown": "Nach unten",
"params": {
"customer_name": "Kundenname",
"event_name": "Event-Name",
"gallery_link": "Galerie-Link",
"password_line": "Passwort-Zeile (mit 🔒-Präfix, leer ohne Passwort)",
"expiry_date": "Ablaufdatum"
},
"enabled": "WhatsApp-Benachrichtigungen senden",
"savedToast": "WhatsApp-Einstellungen gespeichert.",
"testHeading": "Testnachricht senden",
"testHelp": "Sendet eine statische Vorlagennachricht an die angegebene Telefonnummer, um Meta-Zugangsdaten und Vorlagenfreigabe zu prüfen. Mit Ländervorwahl (z. B. +49…).",
"testSend": "Test senden",
"testSending": "Senden…",
"testSentToast": "Testnachricht gesendet (ID: {{id}})."
}
},
"branding": {
"title": "Branding & Themen",
"subtitle": "Passen Sie das Aussehen Ihrer Galerien an",
"loadingBranding": "Branding-Einstellungen werden geladen...",
"themeAndStyle": "Theme & Stil",
"companyInfo": "Unternehmensinformationen",
"companyName": "Unternehmensname",
"companyNameHelp": "Wird in Galerie-Headern und E-Mails angezeigt",
"companyTagline": "Unternehmens-Slogan",
"companyTaglineHelp": "Eine kurze Beschreibung Ihres Unternehmens",
"supportEmail": "Support-E-Mail",
"supportEmailHelp": "Kontakt-E-Mail für Gäste-Support",
"footerText": "Fußzeilentext",
"logo": "Logo",
"uploadLogo": "Logo hochladen",
"logoHelp": "Empfohlene Größe: 200x60px, PNG oder JPEG",
"logoDark": "Logo für Dunkelmodus",
"logoDarkHelp": "Optional. Wird bei dunklen Designs / im Dunkelmodus angezeigt; fällt auf das Hauptlogo zurück, wenn nicht gesetzt.",
"favicon": "Favicon",
"currentFavicon": "Aktuelles Favicon",
"uploadFavicon": "Favicon hochladen",
"removeFavicon": "Favicon entfernen",
"faviconHelp": "PNG-, ICO- oder SVG-Format. Bitte ein quadratisches Bild verwenden ein SVG (oder ein 512×512px-PNG) liefert die schärfste Darstellung auf hochauflösenden Bildschirmen; kleinere Größen funktionieren ebenfalls.",
"watermarkSettings": "Wasserzeichen-Einstellungen",
"enableWatermarks": "Wasserzeichen aktivieren",
"watermarkHelp": "Fügen Sie Ihren Firmennamen als Wasserzeichen auf heruntergeladenen Fotos hinzu",
"watermarkLogo": "Wasserzeichen-Logo",
"currentWatermark": "Aktuelles Wasserzeichen",
"uploadWatermarkLogo": "Wasserzeichen-Logo hochladen",
"watermarkPosition": "Wasserzeichen-Position",
"topLeft": "Oben Links",
"topRight": "Oben Rechts",
"center": "Mitte",
"bottomLeft": "Unten Links",
"bottomRight": "Unten Rechts",
"watermarkOpacity": "Wasserzeichen-Transparenz",
"watermarkSize": "Wasserzeichen-Größe",
"theme": "Theme",
"galleryTheme": "Galerie-Theme",
"colors": "Farben",
"accentColor": "Akzentfarbe",
"backgroundColor": "Hintergrundfarbe",
"textColor": "Textfarbe",
"colorMode": "Farbmodus",
"colorModeLight": "Hell",
"colorModeDark": "Dunkel",
"colorModeAuto": "Auto",
"colorModeHelp": "Auto folgt der Systemeinstellung des Besuchers.",
"preview": "Vorschau",
"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.",
"themePresets": "Theme-Vorlagen",
"galleryLayout": "Galerie-Layout",
"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"
},
"masonryMode": "Layout-Modus",
"masonryModeOptions": {
"columns": "Spalten (Pinterest-Stil)",
"rows": "Zeilen (Eigenes Layout)",
"flickr": "Flickr (Bewährtes Layout)",
"justified": "Google Fotos (Knuth-Plass Algorithmus)"
},
"masonryModeHint": {
"columns": "Pinterest-ähnliche vertikale Spalten mit variierenden Höhen",
"rows": "Eigenes zeilenbasiertes Layout",
"flickr": "Flickrs Open-Source Justified-Layout Algorithmus",
"justified": "Google Fotos-ähnliche Zeilen mit Knuth-Plass Algorithmus für optimale Umbrüche"
},
"targetRowHeight": "Ziel-Zeilenhöhe",
"targetRowHeightHint": "Höhe in Pixeln (150-400). Fotos werden skaliert, um in Zeilen zu passen.",
"lastRowBehavior": "Letzte Zeile Ausrichtung",
"lastRowOptions": {
"left": "Linksbündig",
"center": "Zentriert",
"justify": "Blocksatz (gestreckt)"
},
"thumbnailScale": "Vorschau-Skalierung",
"thumbnailScaleOptions": {
"xs": "XS — Meiste Fotos",
"sm": "SM — Mehr Fotos",
"md": "MD — Standard",
"lg": "LG — Größere Fotos",
"xl": "XL — Größte Fotos"
},
"thumbnailScaleHint": "Passt die Spaltenanzahl relativ zu den Basis-Rasterspalten an",
"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",
"cssInstructions": {
"title": "Benutzerdefiniertes CSS verwenden",
"variables": "Design CSS-Variablen",
"variablesDesc": "Verwenden Sie diese CSS-Variablen passend zu Ihren Design-Vorlagen:",
"layouts": "Benutzerdefinierte Galerie-Layouts",
"layoutsDesc": "Sprechen Sie Galerie-Elemente mit diesen Selektoren an:",
"glassEffect": "Glasmorphismus-Effekt",
"glassEffectDesc": "Erstellen Sie moderne Glaseffekte:",
"tip": "Tipp",
"tipText": "Verwenden Sie CSS-Vorlagen unter Einstellungen > CSS-Vorlagen für vorgefertigte Designs wie Apple Liquid Glass."
},
"resetToDefault": "Auf Standard zurücksetzen",
"applyTheme": "Theme anwenden",
"saveTheme": "Design speichern",
"previewLayout": "Vorschau-Layout",
"livePreview": "Live-Vorschau",
"pdfTypography": "PDF-Schriftart",
"pdfTypographyHelp": "Wird für Rechnungs- und Angebotsbriefköpfe verwendet. Wähle eine der mitgelieferten Schriftarten aus oder belasse den Standard, um Helvetica zu verwenden.",
"pdfFontFamily": "Fließtext-Schrift",
"pdfFontFamilyDefault": "Helvetica verwenden (Standard)",
"pdfFontFamilyMissing": "nicht verfügbar",
"pdfFontSavedToast": "PDF-Schriftart gespeichert.",
"heroPlaceholderText": "Das Hero-Foto Ihrer Veranstaltung wird hier angezeigt",
"whiteLabel": "White Label",
"hidePoweredBy": "\"Powered by PicPeak\" Branding ausblenden",
"hidePoweredByHelp": "Entfernen Sie die PicPeak-Kennzeichnung aus Galerie-Fußzeilen für ein vollständig personalisiertes Erscheinungsbild",
"logoCustomization": "Logo-Anpassung",
"changeLogo": "Logo ändern",
"logoSizeSmall": "Klein (32px)",
"logoSizeMedium": "Mittel (48px)",
"logoSizeLarge": "Groß (64px)",
"logoSizeXLarge": "Extra Groß (96px)",
"logoSizeCustom": "Benutzerdefiniert",
"logoMaxHeight": "Maximale Höhe (Pixel)",
"logoMaxHeightHelp": "Legen Sie eine benutzerdefinierte maximale Höhe für das Logo fest (20-200 Pixel)",
"logoPosition": "Logo-Position im Header",
"positionLeft": "Links",
"positionCenter": "Zentriert",
"positionRight": "Rechts",
"positionSidepanel": "Seitenleiste",
"positionSidepanelHelp": "Das Logo erscheint statt im Header in der Admin-Seitenleiste. Bei eingeklappter Seitenleiste wird das Favicon angezeigt.",
"logoDisplayMode": "Anzeigemodus",
"logoOnly": "Nur Logo",
"textOnly": "Nur Firmenname",
"logoAndText": "Logo und Firmenname",
"showLogoInHeader": "Logo im Galerie-Header anzeigen",
"showLogoInHeaderHelp": "Logo in der Hauptkopfzeile anzeigen",
"showLogoInHero": "Logo im Hero-Bereich anzeigen",
"showLogoInHeroHelp": "Logo in Hero-Bereichen anzeigen (für Nicht-Raster-Layouts)",
"headerStyle": "Kopfzeilen-Stil",
"headerStyleDescription": "Wählen Sie, wie die Galerie-Kopfzeile aussieht. Der Kopfzeilen-Stil ist unabhängig vom Foto-Layout.",
"heroDividerStyle": "Trennlinie-Stil",
"heroDividerDescription": "Wählen Sie, wie der Übergang zwischen dem Hero-Bild und dem Galerie-Inhalt aussieht.",
"controlsStyle": "Steuerelemente-Stil",
"controlsStyleDescription": "Wählen Sie, wie Galerie-Filter und Steuerelemente angezeigt werden.",
"controlsStyleOptions": {
"classic": "Klassisch",
"sidebar": "Seitenleiste"
},
"controlsStyleDescriptions": {
"classic": "Inline-Filterleiste unter der Kopfzeile",
"sidebar": "Menü-Schaltfläche öffnet Seitenleiste mit Filtern"
},
"controlsStyleHeroWarning": "Für Hero-Kopfzeilen wird die Seitenleiste empfohlen, um zu verhindern, dass Steuerelemente über dem Hero-Bild erscheinen.",
"betaThumbnailWarningTitle": "Niedrige Thumbnail-Auflösung erkannt",
"betaThumbnailWarningText": "Ihre Thumbnails sind derzeit {{width}}×{{height}}px. Beta-Themes zeigen Fotos in größeren Formaten an und benötigen mindestens {{recommended}}×{{recommended}}px für gute Qualität. Erhöhen Sie die Thumbnail-Abmessungen unter Einstellungen > Thumbnails und regenerieren Sie diese.",
"betaThumbnailWarningLink": "Zu den Thumbnail-Einstellungen",
"logoSize": "Logo-Größe",
"surfaceColor": "Oberfläche",
"elevatedColor": "Erhöht",
"borderColor": "Rahmen",
"mutedTextColor": "Gedämpfter Text",
"accentDarkColor": "Akzent (gefüllt)",
"syncFromBranding": "Vom Branding synchronisieren",
"forceColorMode": "Farbmodus erzwingen",
"forceColorModeHelp": "Sperrt die gesamte Admin- und öffentliche Website auf Dunkel- oder Hellmodus. Die Dunkel-/Hell-Umschalttaste wird ausgeblendet, wenn eine Sperre aktiv ist. Veranstaltungsthemen, die den Farbmodus überschreiben möchten, werden ebenfalls gezwungen, diesem zu folgen.",
"forceColorModeNone": "Kein Zwang (Benutzerauswahl)",
"forceColorModeDark": "Dunkelmodus erzwingen",
"forceColorModeLight": "Hellmodus erzwingen",
"forcedModeBrandingHint": "Hell/Dunkel wird site-weit über die Erzwingen-Steuerung unten festgelegt — die themenspezifische Modusauswahl ist ausgeblendet, da sie keine Wirkung hätte.",
"forcedModeGalleryNote": "Eine site-weite Farbsperre ist aktiv, daher folgt diese Galerie dem gesperrten Hell-/Dunkel-Modus. Farb- und Hell/Dunkel-Optionen sind hier ausgeblendet und können nicht pro Galerie überschrieben werden.",
"colorGroupSurfaces": "Oberflächen",
"colorGroupSurfacesHelp": "Die neutralen Ebenen hinter Ihrem Inhalt. Hintergrund liegt am weitesten zurück; Oberfläche und Erhöht stapeln sich darüber.",
"backgroundColorHelp": "Die Seite selbst — Hintergrundfarbe jeder Galerie, Admin-Seite und CMS-Seite.",
"surfaceColorHelp": "Karten, Seitenleiste, Kopfzeile und Navigation. Die erste Ebene über dem Hintergrund.",
"elevatedColorHelp": "Panels, die über Karten schweben: Bild-Platzhalter, Hover-/Aktiv-Zeilen, Modal-Kopfzeilen, Code-Blöcke.",
"borderColorHelp": "Trennlinien, Tabellengitterlinien, Kartenumrisse, Eingabe-Rahmen.",
"colorGroupText": "Text",
"colorGroupTextHelp": "Vordergrund-Textfarben. Primär für alles, worauf Leser sich konzentrieren; Sekundär für unterstützenden Text.",
"textColorHelp": "Überschriften, Fließtext, Tabellenzellen, Formulareingabewerte, Navigationsbezeichnungen — die Haupttextfarbe.",
"mutedTextColorHelp": "Bildunterschriften, Hilfetext unter Eingaben, Tabellen-Spaltenüberschriften, Fußzeilenlinks, Daten und Metadaten.",
"colorGroupAccent": "Akzent",
"colorGroupAccentHelp": "Markenfarben, die interaktive Elemente hervorheben. Verwenden Sie ein starkes Farbpaar — Akzent für Umrisse/Text, Akzent Dunkel für gefüllte Buttons.",
"accentColorHelp": "Links, Symbole, Fokusringe, Hover-Zustände bei Primär-Buttons, aktive Seitenleisten-Unterstreichung. Sollte auf Hintergrund und Oberfläche gut lesbar sein.",
"accentDarkColorHelp": "Gefüllte CTA-Buttons, aktiver Seitenleisten-Eintrag-Hintergrund, Abzeichen und Tags. Muss genug Kontrast für weißen Text bieten.",
"cssTemplate": "CSS-Vorlage",
"cssTemplateDescription": "Wählen Sie eine vorgefertigte CSS-Vorlage, um dieser Galerie ein anwendungsweites Styling zu geben. Vorlagen können unter Einstellungen > CSS-Vorlagen verwaltet werden.",
"noTemplate": "Keine Vorlage",
"noTemplateDescription": "Nur Theme-Einstellungen ohne CSS-Vorlage verwenden",
"templateSlot": "Slot {{slot}}",
"eventCustomCSS": "Veranstaltungsspezifisches benutzerdefiniertes CSS",
"layoutDescriptions": {
"grid": "Klassisches Raster mit einheitlichen Fotogrößen",
"masonry": "Pinterest-Stil mit variablen Höhen",
"carousel": "Vollbild-Diashow mit Navigation",
"timeline": "Nach Datum geordnete Fotos",
"mosaic": "Künstlerisches Layout mit gemischten Größen",
"gallery-premium": "Elegantes helles Thema mit Hero und Masonry (Beta)",
"gallery-story": "Cinematisches dunkles Thema mit Szenenabschnitten (Beta)"
},
"headerStyleOptions": {
"hero": "Hero-Bild",
"standard": "Standard",
"banner": "Banner",
"minimal": "Minimal",
"none": "Kein Header"
},
"headerStyleDescriptions": {
"hero": "Vollhöhenbild mit Veranstaltungsinfo-Overlay",
"standard": "Kompakter Header mit Veranstaltungsdetails",
"banner": "Standard-Header plus farbiges Banner darüber",
"minimal": "Kompakter Header mit wesentlichen Infos",
"none": "Header vollständig ausblenden"
},
"dividerOptions": {
"none": "Keiner",
"wave": "Welle",
"straight": "Gerade",
"angle": "Winkel",
"curve": "Kurve"
},
"loginLogo": {
"title": "Logo auf Login-Seiten",
"subtitle": "Wirkt nur auf /admin/login und /customer/login. Galerie und Admin-Chrome verwenden die Logo-Einstellungen oben.",
"frame": "Hellen Rahmen hinter dem Logo anzeigen",
"frameHelp": "Wenn aus, sitzt das Logo direkt auf dem Seitenhintergrund. Nützlich für Logos, die bereits einen eigenen Hintergrund haben.",
"size": "Logogröße auf den Login-Seiten",
"sizeSmall": "Klein",
"sizeMedium": "Mittel (Standard)",
"sizeLarge": "Groß",
"sizeXLarge": "Sehr groß"
},
"promo": {
"alignment": "Ausrichtung",
"alignLeft": "Links",
"alignCenter": "Zentriert (Standard wie der Footer)",
"alignRight": "Rechts"
}
},
"admin": {
"title": "Admin-Panel",
"recentActivity": "Letzte Aktivitäten",
"storageUsed": "Speicher verwendet",
"totalPhotos": "Gesamte Fotos",
"storagePercent": "{{percent}}% des Limits {{limit}}",
"darkMode": "Zum Dunkelmodus wechseln",
"lightMode": "Zum Hellmodus wechseln",
"storageSoftLimitConfigured": "Konfiguriertes Limit: {{limit}}",
"storageSoftLimitRecommended": "Empfohlenes Limit: {{limit}}",
"version": "Version",
"archivedEvents": "Archivierte Veranstaltungen",
"systemHealth": "Systemstatus",
"health": {
"checking": "Prüfe...",
"healthy": "Gesund",
"warning": "Warnung",
"error": "Fehler"
},
"whatsnew": {
"title": "Neu in {{version}}",
"viewAll": "Was ist neu",
"modalTitle": "Was ist neu",
"fullChangelog": "Vollständiges Änderungsprotokoll",
"gotIt": "Verstanden"
},
"updates": {
"available": "Update verfügbar",
"newVersion": "Version {{version}} ist verfügbar",
"currentVersion": "Aktuell: {{version}}",
"newFeatures": "Neue Funktionen:",
"channel": "Kanal: {{channel}}",
"channelStable": "Stabil",
"channelBeta": "Beta",
"beta": "BETA",
"viewReleaseNotes": "Versionshinweise anzeigen",
"updateAvailableShort": "v{{version}} verfügbar",
"upToDate": "Alles aktuell",
"updateNow": "Jetzt aktualisieren",
"updateDialog": {
"title": "PicPeak aktualisieren",
"detectedEnv": "Erkannte Umgebung",
"beforeUpdating": "Vor dem Update:",
"updateCommands": "Update-Befehle:",
"afterUpdating": "Nach dem Update:",
"copyAllCommands": "Alle Befehle kopieren",
"completeChecklist": "Checkliste vor dem Update ausfüllen",
"error": "Fehler beim Laden der Update-Anweisungen"
}
},
"notifications": "Benachrichtigungen",
"markAllRead": "Alle als gelesen markieren",
"clearAll": "Alle 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",
"photoDeleted": "Foto 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",
"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}}",
"adminProfileUpdated": "Admin-Profil aktualisiert von {{actorName}}",
"photosUploaded_one": "{{count}} Foto in \"{{eventName}}\" hochgeladen",
"photosUploaded_other": "{{count}} Fotos in \"{{eventName}}\" hochgeladen",
"photosBulkDeleted_one": "{{count}} Foto aus \"{{eventName}}\" gelöscht",
"photosBulkDeleted_other": "{{count}} Fotos aus \"{{eventName}}\" gelöscht",
"bulkDownload_one": "{{count}} Foto aus \"{{eventName}}\" heruntergeladen",
"bulkDownload_other": "{{count}} Fotos aus \"{{eventName}}\" heruntergeladen",
"customerLogin": "Kunde angemeldet: {{email}}",
"customerInvitationCreated": "Kunden-Einladung gesendet an {{email}}",
"customerInvitationAccepted": "Kunde hat Einladung angenommen: {{email}}",
"customerInvitationCancelled": "Kunden-Einladung zurückgezogen: {{email}}",
"customerPasswordResetRequested": "Passwort-Reset für Kunde angefordert: {{email}}",
"customerPasswordResetApplied": "Kunden-Passwort durch Admin zurückgesetzt: {{email}}",
"customerPasswordChange": "Kunde hat Passwort geändert: {{email}}",
"customerSelfProfileUpdate": "Kunde hat Profil aktualisiert: {{email}}",
"customerEventAccess": "{{email}} hat {{eventName}} geöffnet",
"customerUpdated": "Kunden-Konto aktualisiert: {{email}}",
"customerDeactivated": "Kunden-Konto deaktiviert: {{email}}",
"customerReactivated": "Kunden-Konto reaktiviert: {{email}}",
"customerErased": "Kunden-Konto gelöscht (DSGVO): {{email}}",
"adminInvitationCreated": "Admin-Einladung gesendet an {{email}}",
"adminInvitationAccepted": "Admin hat Einladung angenommen: {{email}}",
"adminInvitationCancelled": "Admin-Einladung zurückgezogen: {{email}}",
"adminUserUpdated": "Admin-Benutzer aktualisiert: {{username}}",
"adminUserDeactivated": "Admin-Benutzer deaktiviert: {{username}}",
"webhookCreated": "Webhook erstellt: {{name}}",
"webhookUpdated": "Webhook aktualisiert: {{name}}",
"webhookDeleted": "Webhook gelöscht: {{name}}",
"apiTokenCreated": "API-Token erstellt: {{name}}",
"apiTokenRevoked": "API-Token widerrufen: {{name}}",
"eventTypeCreated": "Event-Typ erstellt: {{name}}",
"eventTypeUpdated": "Event-Typ aktualisiert: {{name}}",
"eventTypeDeleted": "Event-Typ gelöscht: {{name}}",
"eventTypesReordered": "Event-Typen neu sortiert",
"eventPublished": "Event veröffentlicht: {{eventName}}",
"eventLogoUploaded": "Event-Logo hochgeladen für {{eventName}}",
"eventLogoRemoved": "Event-Logo entfernt für {{eventName}}",
"bulkDeleteCompleted": "Massen-Löschung abgeschlossen: {{count}} Events entfernt",
"photoReplaced": "Foto ersetzt in {{eventName}}",
"photoUploaded": "Foto hochgeladen in {{eventName}}",
"categoryHeroUpdated": "Kategorie-Titelbild aktualisiert",
"publicSiteResetToDefault": "Öffentliche Seite auf Standard zurückgesetzt",
"cmsPageLogoUploaded": "CMS-Seiten-Logo hochgeladen: {{slug}}",
"adminPasswordResetByAdmin": "Admin-Passwort durch anderen Admin zurückgesetzt: {{username}}",
"contractCreated": "Vertrag erstellt: {{contractNumber}}",
"contractCreatedFromQuote": "Vertrag aus Angebot erstellt: {{contractNumber}}",
"contractUpdated": "Vertrag aktualisiert: {{contractNumber}}",
"contractSent": "Vertrag gesendet: {{contractNumber}}",
"contractResentSigned": "Unterschriebener Vertrag erneut gesendet: {{contractNumber}}",
"contractSignedByCustomer": "Vertrag vom Kunden unterschrieben: {{contractNumber}}",
"contractSignedPdfUploaded": "Unterschriebenes Vertrag-PDF hochgeladen: {{contractNumber}}",
"contractSignaturesRestamped": "Vertragsunterschriften neu gestempelt: {{contractNumber}}",
"contractCancelled": "Vertrag storniert: {{contractNumber}}",
"contractConvertedToEvent": "Vertrag in Event umgewandelt: {{contractNumber}}",
"contractConvertedToEmptyEvent": "Vertrag in leeres Event umgewandelt: {{contractNumber}}",
"contractConvertedToInvoices": "Vertrag in Rechnungen umgewandelt: {{contractNumber}}",
"contractConvertedToEmptyInvoice": "Vertrag in leere Rechnung umgewandelt: {{contractNumber}}",
"quoteCreated": "Angebot erstellt: {{quoteNumber}}",
"quoteSent": "Angebot gesendet: {{quoteNumber}}",
"quoteUpdated": "Angebot aktualisiert: {{quoteNumber}}",
"quoteAcceptedByAdmin": "Angebot angenommen: {{quoteNumber}}",
"quoteDeclinedByAdmin": "Angebot abgelehnt: {{quoteNumber}}",
"quoteConverted": "Angebot umgewandelt: {{quoteNumber}}",
"quoteConvertedInvoicesOnly": "Angebot in Rechnungen umgewandelt: {{quoteNumber}}",
"invoiceCreated": "Rechnung erstellt: {{invoiceNumber}}",
"invoiceSent": "Rechnung gesendet: {{invoiceNumber}}",
"invoiceScheduled": "Rechnung geplant: {{invoiceNumber}}",
"invoiceCancelled": "Rechnung storniert: {{invoiceNumber}}",
"invoiceCancelledViaStorno": "Rechnung per Storno storniert: {{invoiceNumber}}",
"invoiceReissued": "Rechnung neu ausgestellt: {{invoiceNumber}}",
"invoicePaidAdminNotified": "Rechnung als bezahlt markiert: {{invoiceNumber}}",
"invoicePaymentCheckRecorded": "Zahlungsprüfung erfasst für Rechnung: {{invoiceNumber}}",
"invoicePaymentCheckSent": "Zahlungsprüfung gesendet für Rechnung: {{invoiceNumber}}",
"invoiceReleasedForDelivery": "Rechnung zur Lieferung freigegeben: {{invoiceNumber}}",
"invoiceReminderSent": "Rechnungserinnerung gesendet: {{invoiceNumber}}",
"stornoSent": "Storno gesendet: {{invoiceNumber}}",
"monthlyBillIssued": "Monatsrechnung für Kunden ausgestellt",
"monthlyBillSkippedEmpty": "Monatsrechnung übersprungen (keine Einträge)",
"monthlyBillTriggeredManually": "Monatsrechnung manuell ausgelöst",
"monthlyBillingItemsQueued": "Monatsabrechnungsposten in Warteschlange",
"installmentPlanUpdated": "Ratenplan aktualisiert",
"expenseCreated": "Ausgabe erstellt",
"expenseUpdated": "Ausgabe aktualisiert",
"expensePaid": "Ausgabe als bezahlt markiert",
"expenseInvoiced": "Ausgabe in Rechnung gestellt",
"hourEntryLogged": "Stundeneintrag erfasst",
"hourEntryUpdated": "Stundeneintrag aktualisiert",
"hourEntryDeleted": "Stundeneintrag gelöscht",
"hourEntryLoggedToMonthlyDraft": "Stundeneintrag in Monatsentwurf erfasst",
"hourEntriesBilled": "Stundeneinträge an Kunden abgerechnet",
"incomingInvoiceCaptured": "Eingangsrechnung erfasst",
"incomingInvoiceCategorized": "Eingangsrechnung kategorisiert",
"incomingInvoiceUpdated": "Eingangsrechnung aktualisiert",
"incomingInvoiceRebilled": "Eingangsrechnung an Kunden weiterverrechnet",
"incomingInvoiceSupplierPayment": "Lieferantenzahlung erfasst",
"incomingMailConfigUpdated": "Eingangs-Mail-Konfiguration aktualisiert",
"customerCreatedPassive": "Passiver Kunde erstellt: {{email}}",
"adminUserActivated": "Admin-Konto aktiviert: {{username}}",
"adminUserDeleted": "Admin-Konto gelöscht: {{username}}",
"adminPasswordReset": "Admin-Passwort zurückgesetzt: {{username}}",
"bulkArchiveCompleted": "Massen-Archivierung abgeschlossen: {{count}} Events archiviert",
"emailQueueFlushed": "E-Mail-Warteschlange geleert",
"emailResent": "Erstellungs-E-Mail erneut gesendet für {{eventName}}",
"emailTemplateCreated": "E-Mail-Vorlage erstellt: {{template_key}}",
"eventDuplicated": "Event dupliziert aus {{source_event_name}}",
"feedbackDeleted": "Feedback gelöscht",
"feedbackModerated": "Feedback moderiert",
"feedbackSettingsUpdated": "Feedback-Einstellungen aktualisiert für {{eventName}}",
"wordFilterAdded": "Wortfilter hinzugefügt: {{word}}",
"whatsappConfigUpdated": "WhatsApp-Konfiguration aktualisiert"
},
"notificationToasts": {
"markedAllRead": "Alle Benachrichtigungen als gelesen markiert",
"clearedAll_one": "{{count}} Benachrichtigung gelöscht",
"clearedAll_other": "{{count}} Benachrichtigungen gelöscht"
},
"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",
"noRecentActivity": "Keine aktuellen Aktivitäten",
"photos": {
"hidden": "Versteckt",
"hideSelected": "Ausblenden",
"showSelected": "Einblenden",
"hiddenSuccess": "Fotos für Gäste ausgeblendet",
"visibleSuccess": "Fotos jetzt für Gäste sichtbar",
"processingStatus": "Wird verarbeitet…",
"processingFailed": "Fehlgeschlagen",
"retryQueued": "Wiederholung in Warteschlange",
"viewMode": "Ansicht",
"gridView": "Rasteransicht",
"listView": "Listenansicht",
"columns": {
"photo": "Foto",
"category": "Kategorie",
"uploaded": "Hochgeladen",
"engagement": "Aktivität",
"feedback": "Feedback",
"size": "Größe",
"actions": "Aktionen",
"views": "Aufrufe",
"downloads": "Downloads",
"likes": "Likes"
}
},
"events": {
"tabs": {
"guests": "Gäste"
}
},
"daysLeft_one": "{{count}} Tag verbleibend",
"daysLeft_other": "{{count}} Tage verbleibend",
"viewAllExpiringEvents_one": "Alle {{count}} ablaufenden Veranstaltungen anzeigen",
"viewAllExpiringEvents_other": "Alle {{count}} ablaufenden Veranstaltungen anzeigen",
"guests": {
"loading": "Wird geladen...",
"aggregate": {
"empty": "Noch keine Gastauswahl.",
"description": "Fotos sortiert nach der Anzahl der Gäste, die sie geliket oder favorisiert haben."
},
"inviteCreated": "Einladung erstellt",
"inviteCreateError": "Einladung konnte nicht erstellt werden",
"inviteRevoked": "Einladung widerrufen",
"inviteRevokeError": "Einladung konnte nicht widerrufen werden",
"invitesTitle": "Gasteinladungen",
"createInvite": "Einladung erstellen",
"inviteName": "Gastname",
"inviteEmail": "E-Mail (optional)",
"generateInvite": "Einladungslink generieren",
"existingInvites": "Vorhandene Einladungen",
"noInvites": "Noch keine Einladungen",
"copyLink": "Link kopieren",
"revokeInvite": "Widerrufen",
"deletedToast": "Gast entfernt",
"deletedError": "Gast konnte nicht entfernt werden",
"mergedToast": "Gäste zusammengeführt",
"mergedError": "Gäste konnten nicht zusammengeführt werden",
"forgetGuestConfirm": "Diesen Gast entfernen? Ihre Auswahl wird anonymisiert, aber in den Gesamtzahlen behalten.",
"exportError": "Export fehlgeschlagen",
"mergeSelectAtLeastTwo": "Mindestens 2 Gäste zum Zusammenführen auswählen",
"mergeConfirm_one": "{{count}} Gast in {{name}} zusammenführen? Dies kann nicht rückgängig gemacht werden.",
"mergeConfirm_other": "{{count}} Gäste in {{name}} zusammenführen? Dies kann nicht rückgängig gemacht werden.",
"backToList": "Zurück zur Liste",
"title": "Gäste",
"mergeSelected_one": "{{count}} ausgewählt",
"mergeSelected_other": "{{count}} ausgewählt",
"mergeNow": "Auswahl zusammenführen",
"aggregateView": "Nach Beliebtheit",
"mergeMode": "Zusammenführen",
"exportAll": "Alle exportieren",
"empty": "Noch keine Gäste registriert.",
"columns": {
"name": "Name",
"email": "E-Mail",
"likes": "Likes",
"favorites": "Favoriten",
"comments": "Kommentare",
"ratings": "Bewertungen",
"lastSeen": "Zuletzt gesehen"
},
"view": "Details anzeigen",
"export": "Exportieren",
"forgetGuest": "Gast entfernen",
"loadingDetail": "Auswahl wird geladen...",
"detail": {
"noComments": "Keine Kommentare",
"empty": "Keine Auswahl in dieser Kategorie",
"all": "Alle",
"liked": "Gemocht",
"favorited": "Favorisiert",
"rated": "Bewertet",
"commented": "Kommentiert"
},
"inviteStatus": {
"pending": "Ausstehend",
"redeemed": "Eingelöst",
"revoked": "Widerrufen"
}
},
"analytics": "Analytik",
"activities": {
"event_created": "Neues Ereignis erstellt: {{eventName}}",
"photos_uploaded": "{{count}} Fotos hochgeladen in {{eventName}}",
"event_archived": "Ereignis archiviert: {{eventName}}",
"archive_restored": "Archiv wiederhergestellt: {{eventName}}",
"archive_deleted": "Archiv gelöscht: {{eventName}}",
"archive_downloaded": "Archiv heruntergeladen: {{eventName}}",
"email_config_updated": "E-Mail-Konfiguration aktualisiert",
"email_template_updated": "E-Mail-Vorlage aktualisiert: {{template}}",
"branding_updated": "Branding-Einstellungen aktualisiert",
"theme_updated": "Theme-Einstellungen aktualisiert",
"bulk_download": "{{count}} Fotos heruntergeladen von {{eventName}}",
"gallery_password_entry": "Passwort eingegeben für {{eventName}}",
"expiration_warning_viewed": "Ablaufwarnung angesehen für {{eventName}}",
"event_updated": "Ereignis aktualisiert: {{eventName}}",
"event_deleted": "Ereignis gelöscht: {{eventName}}",
"event_activated": "Ereignis aktiviert: {{eventName}}",
"event_deactivated": "Ereignis deaktiviert: {{eventName}}",
"bulk_archive_completed": "Massenarchivierung abgeschlossen",
"photo_deleted": "Foto gelöscht von {{eventName}}",
"photos_bulk_deleted": "{{count}} Fotos gelöscht von {{eventName}}",
"password_changed": "Passwort geändert",
"admin_logout": "Admin {{actorName}} abgemeldet",
"category_created": "Kategorie erstellt: {{categoryName}}",
"category_updated": "Kategorie aktualisiert: {{categoryName}}",
"category_deleted": "Kategorie gelöscht: {{categoryName}}",
"feedback_settings_updated": "Feedback-Einstellungen aktualisiert",
"feedback_moderated": "Feedback moderiert",
"feedback_deleted": "Feedback gelöscht",
"word_filter_added": "Wortfilter hinzugefügt",
"cms_page_updated": "CMS-Seite aktualisiert: {{page}}",
"email_resent": "Erstellungs-E-Mail erneut gesendet für: {{eventName}}",
"settings_updated": "Einstellungen aktualisiert",
"favicon_uploaded": "Favicon hochgeladen",
"password_reset": "Passwort zurückgesetzt für: {{eventName}}",
"external_import_completed": "Externer Medienimport abgeschlossen ({{imported}} importiert, {{skipped}} übersprungen)",
"photo_like": "Foto geliked in {{eventName}}",
"photo_favorite": "Foto als Favorit markiert in {{eventName}}",
"general_settings_updated": "Allgemeine Einstellungen aktualisiert",
"analytics_settings_updated": "Analytik-Einstellungen aktualisiert",
"security_settings_updated": "Sicherheitseinstellungen aktualisiert",
"event_renamed": "Ereignis umbenannt: {{eventName}}",
"photo_rating": "Foto bewertet in {{eventName}}",
"photo_comment": "Foto kommentiert in {{eventName}}",
"guest_feedback_like": "Gast hat ein Foto geliked in {{eventName}}",
"guest_feedback_favorite": "Gast hat ein Foto als Favorit markiert in {{eventName}}",
"guest_feedback_rating": "Gast hat ein Foto bewertet in {{eventName}}",
"guest_feedback_comment": "Gast hat ein Foto kommentiert in {{eventName}}",
"system_activity": "Systemaktivität: {{type}}",
"unknown": "Unbekannte Aktivität",
"feature_enabled": "{{label}} aktiviert",
"feature_disabled": "{{label}} deaktiviert",
"feature_flags_summary": "{{count}} Funktionen aktualisiert: {{summary}}",
"feature_flags_noop": "Funktions-Schalter geprüft (keine Änderungen)",
"customer_login": "Kunde angemeldet: {{email}}",
"customer_invitation_created": "Kunden-Einladung gesendet an {{email}}",
"customer_invitation_accepted": "Kunde hat Einladung angenommen: {{email}}",
"customer_invitation_cancelled": "Kunden-Einladung zurückgezogen: {{email}}",
"customer_password_reset_requested": "Passwort-Reset für Kunde angefordert: {{email}}",
"customer_password_reset_applied": "Kunden-Passwort durch Admin zurückgesetzt: {{email}}",
"customer_password_change": "Kunde hat Passwort geändert: {{email}}",
"customer_self_profile_update": "Kunde hat Profil aktualisiert: {{email}}",
"customer_event_access": "{{email}} hat {{eventName}} geöffnet",
"customer_updated": "Kunden-Konto aktualisiert: {{email}}",
"customer_deactivated": "Kunden-Konto deaktiviert: {{email}}",
"customer_reactivated": "Kunden-Konto reaktiviert: {{email}}",
"customer_erased": "Kunden-Konto gelöscht (DSGVO): {{email}}",
"admin_invitation_created": "Admin-Einladung gesendet an {{email}}",
"admin_invitation_accepted": "Admin hat Einladung angenommen: {{email}}",
"admin_invitation_cancelled": "Admin-Einladung zurückgezogen: {{email}}",
"admin_user_updated": "Admin-Benutzer aktualisiert: {{username}}",
"admin_user_deactivated": "Admin-Benutzer deaktiviert: {{username}}",
"admin_password_reset": "Admin-Passwort durch anderen Admin zurückgesetzt: {{username}}",
"admin_profile_updated": "Admin {{actorName}} hat Profil aktualisiert",
"webhook_created": "Webhook erstellt: {{name}}",
"webhook_updated": "Webhook aktualisiert: {{name}}",
"webhook_deleted": "Webhook gelöscht: {{name}}",
"api_token_created": "API-Token erstellt: {{name}}",
"api_token_revoked": "API-Token widerrufen: {{name}}",
"event_type_created": "Event-Typ erstellt: {{name}}",
"event_type_updated": "Event-Typ aktualisiert: {{name}}",
"event_type_deleted": "Event-Typ gelöscht: {{name}}",
"event_types_reordered": "Event-Typen neu sortiert",
"event_published": "Event veröffentlicht: {{eventName}}",
"event_logo_uploaded": "Event-Logo hochgeladen für {{eventName}}",
"event_logo_removed": "Event-Logo entfernt für {{eventName}}",
"bulk_delete_completed": "Massen-Löschung abgeschlossen: {{count}} Events entfernt",
"photo_replaced": "Foto ersetzt in {{eventName}}",
"photo_uploaded": "Foto hochgeladen in {{eventName}}",
"category_hero_updated": "Kategorie-Titelbild aktualisiert",
"public_site_reset_to_default": "Öffentliche Seite auf Standard zurückgesetzt",
"cms_page_logo_uploaded": "CMS-Seiten-Logo hochgeladen: {{slug}}",
"contract_created": "Vertrag erstellt: {{contractNumber}}",
"contract_created_from_quote": "Vertrag aus Angebot erstellt: {{contractNumber}}",
"contract_updated": "Vertrag aktualisiert: {{contractNumber}}",
"contract_sent": "Vertrag gesendet: {{contractNumber}}",
"contract_resent_signed": "Unterschriebener Vertrag erneut gesendet: {{contractNumber}}",
"contract_signed_by_customer": "Vertrag vom Kunden unterschrieben: {{contractNumber}}",
"contract_signed_pdf_uploaded": "Unterschriebenes Vertrag-PDF hochgeladen: {{contractNumber}}",
"contract_signatures_restamped": "Vertragsunterschriften neu gestempelt: {{contractNumber}}",
"contract_cancelled": "Vertrag storniert: {{contractNumber}}",
"contract_converted_to_event": "Vertrag in Event umgewandelt: {{contractNumber}}",
"contract_converted_to_empty_event": "Vertrag in leeres Event umgewandelt: {{contractNumber}}",
"contract_converted_to_invoices": "Vertrag in Rechnungen umgewandelt: {{contractNumber}}",
"contract_converted_to_empty_invoice": "Vertrag in leere Rechnung umgewandelt: {{contractNumber}}",
"quote_created": "Angebot erstellt: {{quoteNumber}}",
"quote_sent": "Angebot gesendet: {{quoteNumber}}",
"quote_updated": "Angebot aktualisiert: {{quoteNumber}}",
"quote_accepted_by_admin": "Angebot angenommen: {{quoteNumber}}",
"quote_declined_by_admin": "Angebot abgelehnt: {{quoteNumber}}",
"quote_converted": "Angebot umgewandelt: {{quoteNumber}}",
"quote_converted_invoices_only": "Angebot in Rechnungen umgewandelt: {{quoteNumber}}",
"invoice_created": "Rechnung erstellt: {{invoiceNumber}}",
"invoice_sent": "Rechnung gesendet: {{invoiceNumber}}",
"invoice_scheduled": "Rechnung geplant: {{invoiceNumber}}",
"invoice_cancelled": "Rechnung storniert: {{invoiceNumber}}",
"invoice_cancelled_via_storno": "Rechnung per Storno storniert: {{invoiceNumber}}",
"invoice_reissued": "Rechnung neu ausgestellt: {{invoiceNumber}}",
"invoice_paid_admin_notified": "Rechnung als bezahlt markiert: {{invoiceNumber}}",
"invoice_payment_check_recorded": "Zahlungsprüfung erfasst für Rechnung: {{invoiceNumber}}",
"invoice_payment_check_sent": "Zahlungsprüfung gesendet für Rechnung: {{invoiceNumber}}",
"invoice_released_for_delivery": "Rechnung zur Lieferung freigegeben: {{invoiceNumber}}",
"invoice_reminder_sent": "Rechnungserinnerung gesendet: {{invoiceNumber}}",
"storno_sent": "Storno gesendet: {{invoiceNumber}}",
"monthly_bill_issued": "Monatsrechnung für Kunden ausgestellt",
"monthly_bill_skipped_empty": "Monatsrechnung übersprungen (keine Einträge)",
"monthly_bill_triggered_manually": "Monatsrechnung manuell ausgelöst",
"monthly_billing_items_queued": "Monatsabrechnungsposten in Warteschlange",
"installment_plan_updated": "Ratenplan aktualisiert",
"expense_created": "Ausgabe erstellt",
"expense_updated": "Ausgabe aktualisiert",
"expense_paid": "Ausgabe als bezahlt markiert",
"expense_invoiced": "Ausgabe in Rechnung gestellt",
"hour_entry_logged": "Stundeneintrag erfasst",
"hour_entry_updated": "Stundeneintrag aktualisiert",
"hour_entry_deleted": "Stundeneintrag gelöscht",
"hour_entry_logged_to_monthly_draft": "Stundeneintrag in Monatsentwurf erfasst",
"hour_entries_billed": "Stundeneinträge an Kunden abgerechnet",
"incoming_invoice_captured": "Eingangsrechnung erfasst",
"incoming_invoice_categorized": "Eingangsrechnung kategorisiert",
"incoming_invoice_updated": "Eingangsrechnung aktualisiert",
"incoming_invoice_rebilled": "Eingangsrechnung an Kunden weiterverrechnet",
"incoming_invoice_supplier_payment": "Lieferantenzahlung erfasst",
"incoming_mail_config_updated": "Eingangs-Mail-Konfiguration aktualisiert",
"customer_created_passive": "Passiver Kunde erstellt: {{email}}",
"admin_user_activated": "Admin-Konto aktiviert: {{username}}",
"admin_user_deleted": "Admin-Konto gelöscht: {{username}}",
"email_queue_flushed": "E-Mail-Warteschlange geleert",
"email_template_created": "E-Mail-Vorlage erstellt: {{template_key}}",
"event_duplicated": "Event dupliziert aus {{source_event_name}}",
"whatsapp_config_updated": "WhatsApp-Konfiguration aktualisiert"
}
},
"acceptInvitation": {
"title": "Einladung annehmen",
"subtitle": "Erstellen Sie Ihr Administratorkonto",
"validating": "Einladung wird überprüft...",
"invalidToken": "Ungültige Einladung",
"invalidTokenMessage": "Dieser Einladungslink ist ungültig oder abgelaufen. Bitte kontaktieren Sie Ihren Administrator für eine neue Einladung.",
"alreadyUsedMessage": "Diese Einladung wurde bereits verwendet, um ein Konto zu erstellen.",
"invitedAs": "Sie wurden eingeladen als",
"expiresAt": "Einladung läuft ab",
"usernameLabel": "Benutzername",
"usernamePlaceholder": "Wählen Sie einen Benutzernamen",
"usernameHelp": "3-50 Zeichen, nur Buchstaben, Zahlen, Unterstriche und Bindestriche",
"passwordLabel": "Passwort",
"passwordPlaceholder": "Erstellen Sie ein sicheres Passwort",
"confirmPasswordLabel": "Passwort bestätigen",
"confirmPasswordPlaceholder": "Bestätigen Sie Ihr Passwort",
"passwordStrength": "Passwortstärke",
"requirements": {
"title": "Passwortanforderungen:",
"minLength": "Mindestens 12 Zeichen",
"uppercase": "Mindestens ein Großbuchstabe",
"lowercase": "Mindestens ein Kleinbuchstabe",
"number": "Mindestens eine Zahl",
"special": "Mindestens ein Sonderzeichen"
},
"strength": {
"weak": "Schwach",
"fair": "Mittel",
"good": "Gut",
"strong": "Stark"
},
"createAccount": "Konto erstellen",
"success": "Konto erstellt!",
"successMessage": "Ihr Konto wurde erfolgreich erstellt. Sie können sich jetzt mit Ihren Zugangsdaten anmelden.",
"redirecting": "Weiterleitung zur Anmeldung in {{seconds}}...",
"goToLogin": "Zur Anmeldung",
"contactAdminMessage": "Bitte kontaktieren Sie Ihren Administrator, um eine neue Einladung anzufordern.",
"passwordsMatch": "Passwörter stimmen überein",
"alreadyHaveAccount": "Bereits ein Konto?",
"signIn": "Anmelden",
"errors": {
"usernameRequired": "Benutzername ist erforderlich",
"usernameTooShort": "Benutzername muss mindestens 3 Zeichen lang sein",
"usernameTooLong": "Benutzername darf maximal 50 Zeichen lang sein",
"usernameInvalid": "Benutzername darf nur Buchstaben, Zahlen, Unterstriche und Bindestriche enthalten",
"passwordRequired": "Passwort ist erforderlich",
"passwordsDoNotMatch": "Passwörter stimmen nicht überein",
"confirmPasswordRequired": "Bitte bestätigen Sie Ihr Passwort",
"genericError": "Konto konnte nicht erstellt werden. Bitte versuchen Sie es erneut."
}
},
"errors": {
"galleryNotFound": "Galerie nicht gefunden",
"galleryNotFoundMessage": "Diese Galerie existiert nicht oder wurde entfernt.",
"somethingWentWrong": "Etwas ist schiefgelaufen",
"tryAgainLater": "Bitte versuchen Sie es später erneut",
"refreshPage": "Seite aktualisieren",
"oopsSomethingWentWrong": "Hoppla! Etwas ist schiefgelaufen",
"unexpectedError": "Ein unerwarteter Fehler ist aufgetreten. Keine Sorge, Ihre Daten sind sicher.",
"goToHomepage": "Zur Startseite",
"errorDetails": "Fehlerdetails",
"requiredFields": "Bitte füllen Sie alle Pflichtfelder aus",
"enterTestEmail": "Bitte geben Sie eine Test-E-Mail-Adresse ein",
"eventCreationFailed": "Veranstaltung konnte nicht erstellt werden",
"noShareLink": "Kein Freigabe-Link verfügbar",
"copyFailed": "Link konnte nicht kopiert werden"
},
"legal": {
"impressum": "Impressum",
"datenschutz": "Datenschutzerklärung"
},
"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",
"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",
"categoryUpdated": "Kategorie erfolgreich aktualisiert",
"emailConfigSaved": "E-Mail-Konfiguration erfolgreich gespeichert",
"brandingThemeMissing": "Es wurde noch kein Branding-Theme gespeichert.",
"brandingPaletteSynced": "Palette vom Branding synchronisiert."
},
"analytics": {
"title": "Analytics Dashboard",
"subtitle": "Galerie-Performance und Besucherengagement verfolgen",
"detailedSubtitle": "Detaillierte Analysen mit Umami",
"loadingAnalytics": "Analytik wird geladen...",
"showSummaryView": "Zusammenfassungsansicht anzeigen",
"fullDashboard": "Vollständiges Dashboard",
"refresh": "Aktualisieren",
"last7Days": "Letzte 7 Tage",
"last30Days": "Letzte 30 Tage",
"last90Days": "Letzte 90 Tage",
"pageViews": "Seitenaufrufe",
"uniqueVisitors": "Eindeutige Besucher",
"totalDownloads": "Gesamte Downloads",
"topGallery": "Top-Galerie",
"topPages": "Top-Seiten",
"views": "Aufrufe",
"visitors": "eindeutige Besucher",
"topDownloadsByGallery": "Top-Downloads nach Galerie",
"deviceBreakdown": "Geräteaufschlüsselung",
"desktop": "Desktop",
"mobile": "Mobil",
"tablet": "Tablet",
"storageUsage": "Speichernutzung",
"used": "Verwendet",
"of": "von",
"totalPhotos": "Gesamte Fotos",
"activeEvents": "Aktive Veranstaltungen",
"notConfigured": "Umami Analytics nicht konfiguriert",
"configureInstructions": "Um echte Analysedaten zu sehen, konfigurieren Sie Umami in Ihren Umgebungsvariablen und Admin-Panel-Einstellungen."
},
"email": {
"title": "E-Mail-Konfiguration",
"subtitle": "E-Mail-Einstellungen für Benachrichtigungen konfigurieren",
"loadingSettings": "E-Mail-Einstellungen werden geladen...",
"smtpConfiguration": "SMTP-Konfiguration",
"smtpHost": "SMTP-Host",
"fromEmail": "Absender-E-Mail",
"fromName": "Absendername",
"emailTemplates": "E-Mail-Vorlagen",
"smtpSettings": "SMTP-Einstellungen",
"testEmailSuccess": "Test-E-Mail erfolgreich gesendet",
"saveSmtpSettings": "SMTP-Einstellungen speichern",
"testEmailSection": "E-Mail testen",
"beforeTesting": "Vor dem Testen:",
"saveSmtpFirst": "Speichern Sie zuerst Ihre SMTP-Einstellungen",
"ensureFirewall": "Stellen Sie sicher, dass Ihre Firewall ausgehende SMTP-Verbindungen erlaubt",
"gmailAppPassword": "Für Gmail verwenden Sie ein App-spezifisches Passwort",
"testEmailAddressLabel": "Test-E-Mail-Adresse",
"sendTestEmailButton": "Test-E-Mail senden",
"flushQueue": {
"title": "Wartende E-Mails jetzt senden",
"help": "Sendet sofort alle ausstehenden E-Mails, unabhängig von den Geschäftszeiten. Nützlich, um die Warteschlange vor Wartungsarbeiten oder Updates zu leeren.",
"button": "Wartende E-Mails jetzt senden",
"success": "Warteschlange geleert {{sent}} gesendet, {{failed}} fehlgeschlagen",
"empty": "Keine ausstehenden E-Mails zum Senden"
},
"incoming": {
"title": "Eingehende E-Mails (IMAP)",
"subtitle": "Ein dediziertes Postfach, jede Minute abgerufen; Anhänge landen in Buchhaltung → Eingangsrechnungen.",
"host": "IMAP-Host",
"test": "Verbindung testen",
"testOk": "Verbunden mit {{folder}} — {{messages}} Nachrichten, {{unseen}} ungelesen.",
"testFailed": "Verbindung fehlgeschlagen.",
"roundTrip": "Rundlauf-Test",
"roundTripHint": "Sendet über die SMTP-Einstellungen eine Test-E-Mail an dieses Postfach und prüft, ob sie ankommt. Beide vorher speichern.",
"roundTripOk": "Rundlauf OK — an {{recipient}} zugestellt in {{seconds}}s.",
"roundTripFailed": "Rundlauf-Test fehlgeschlagen.",
"poll": "Jetzt prüfen",
"pollHint": "Postfach sofort prüfen, statt auf den 60-Sekunden-Abruf zu warten. Ungelesene Anhänge werden in Eingangsrechnungen übernommen.",
"pollOk": "Postfach geprüft — {{count}} neue E-Mail(s) übernommen.",
"pollDisabled": "Eingehende E-Mails sind deaktiviert — unter Einstellungen → Funktionen aktivieren.",
"pollUnconfigured": "Zuerst die Einstellungen für eingehende E-Mails speichern.",
"pollBusy": "Ein Abruf läuft bereits — bitte gleich erneut versuchen.",
"pollFailed": "Postfach-Abruf fehlgeschlagen.",
"port": "Port",
"security": "Sicherheit",
"ssl": "SSL/TLS",
"plain": "Keine / STARTTLS",
"user": "Benutzername",
"pass": "Passwort",
"folder": "Ordner",
"save": "Eingangs-E-Mail-Einstellungen speichern",
"detectFolders": "Erkennen",
"folderHint": "Host, Benutzername und Passwort eingeben, dann „Erkennen“, um die Postfach-Ordner aufzulisten.",
"foldersDetected": "{{count}} Ordner gefunden.",
"noFolders": "Der Server hat keine Ordner zurückgegeben.",
"detectFailed": "Ordner konnten nicht erkannt werden.",
"requiredFields": "Host, Port und Benutzername sind erforderlich.",
"savedToast": "Einstellungen für eingehende E-Mails gespeichert."
},
"received": {
"tab": "Empfangene E-Mails",
"from": "Von",
"subject": "Betreff",
"received": "Empfangen",
"status": "Status",
"empty": "Noch keine empfangenen E-Mails. Eingehende E-Mails aktivieren und Postfach konfigurieren.",
"inbox": "Eingang",
"statusValue": {
"ingested": "Erfasst",
"no_attachment": "Kein Anhang",
"duplicate": "Duplikat",
"error": "Fehler"
}
},
"sentEmails": {
"tab": "Gesendete E-Mails",
"title": "Gesendete E-Mails",
"subtitle": "Versandstatus aller eingereihten und gesendeten Benachrichtigungen.",
"searchPlaceholder": "Nach Empfänger oder Typ suchen…",
"from": "Von",
"to": "Bis",
"empty": "Keine E-Mails entsprechen diesen Filtern.",
"retries": "{{count}} Versuche",
"pagination": "Seite {{page}} von {{total}} · {{count}} E-Mails",
"status": {
"pending": "Ausstehend",
"sent": "Gesendet",
"failed": "Fehlgeschlagen"
},
"col": {
"recipient": "Empfänger",
"type": "Typ",
"status": "Status",
"created": "Eingereiht",
"sent": "Gesendet",
"event": "Anlass"
}
},
"commonSmtpSettings": "Häufige SMTP-Einstellungen:",
"editTemplate": "Vorlage bearbeiten",
"templateName": "Vorlagenname",
"subjectLine": "Betreffzeile",
"emailBody": "E-Mail-Text",
"preview": "Vorschau",
"save": "Speichern",
"templates": "Vorlagen",
"port": "Port",
"security": "Sicherheit",
"username": "Benutzername",
"password": "Passwort",
"enterPassword": "Passwort eingeben",
"ignoreSslErrors": "SSL/TLS-Zertifikatfehler ignorieren",
"ignoreSslWarning": "Warnung: Das Deaktivieren der Zertifikatüberprüfung macht die Verbindung anfällig für Man-in-the-Middle-Angriffe. Aktivieren Sie dies nur, wenn Sie dem SMTP-Server vertrauen und die Sicherheitsrisiken verstehen.",
"brandingTitle": "E-Mail-Branding",
"brandingDescription": "Passen Sie die Farben in E-Mail-Vorlagen an. Änderungen gelten für Kopfzeile, Schaltflächen, Links und Fußzeilen-Hintergrund.",
"primaryColor": "Primärfarbe",
"secondaryColor": "Fußzeilen-Hintergrund",
"saveEmailColors": "E-Mail-Farben speichern",
"editor": {
"bold": "Fett",
"italic": "Kursiv",
"bulletList": "Aufzählung",
"numberedList": "Nummerierte Liste",
"blockquote": "Zitat",
"link": "Link hinzufügen",
"horizontalRule": "Trennlinie",
"alignLeft": "Linksbündig",
"alignCenter": "Zentriert",
"alignRight": "Rechtsbündig",
"clearFormatting": "Formatierung entfernen",
"undo": "Rückgängig",
"redo": "Wiederholen",
"insertVariable": "Variable einfügen",
"sourceMode": "Quellcode",
"visualMode": "Visuell",
"enterUrl": "URL eingeben...",
"addLink": "Hinzufügen",
"cancel": "Abbrechen"
},
"copiedFromLanguage": "Inhalt von {{language}} kopiert",
"noTranslation": "Noch keine Übersetzung",
"noTranslationYet": "Für diese Sprache existiert noch keine Übersetzung. Kopieren Sie von einer vorhandenen Sprache:",
"copyFrom": "Kopieren von",
"syncedFromBranding": "E-Mail-Farben vom Branding synchronisiert. Klicken Sie auf Speichern, um sie anzuwenden.",
"syncFromBranding": "Vom Branding synchronisieren",
"primaryColorHelp": "Kopfzeile, H2-Überschriften, Button-Hintergrund, Linkfarbe. Entspricht Branding → Akzent (gefüllt).",
"secondaryColorHelp": "Fußzeilen-Hintergrund. Entspricht Branding → Oberfläche.",
"bodyBgColor": "Seitenhintergrund",
"bodyBgColorHelp": "Der Rahmen um die E-Mail-Karte — was der Empfänger hinter der E-Mail sieht. Entspricht Branding → Hintergrund.",
"containerBgColor": "E-Mail-Karte",
"containerBgColorHelp": "Die weiße Karte, die den E-Mail-Inhalt enthält. Entspricht Branding → Oberfläche.",
"listBgColor": "Infopanel",
"listBgColorHelp": "Hintergrund der Aufzählungs-Infopanels im E-Mail-Text. Entspricht Branding → Erhöht.",
"bodyTextColor": "Fließtext",
"bodyTextColorHelp": "Absatz- und Fetttext-Farbe. Entspricht Branding → Primärer Text.",
"mutedTextColor": "Fußzeilentext",
"mutedTextColorHelp": "Fußzeilentext und Copyright-Zeile. Entspricht Branding → Sekundärer Text.",
"buttonTextColor": "Button-Text",
"buttonTextColorHelp": "Textfarbe auf gefüllten Buttons. Sollte klar gegen die Primärfarbe kontrastieren. Kein Branding-Äquivalent — meistens weiß.",
"categories": {
"core": "Kern",
"customers": "Kunden",
"calendar": "Kalender",
"quotes": "Angebote",
"contracts": "Verträge",
"billing": "Rechnungen"
},
"featureOff": "Funktion aus",
"featureOffTooltip": "Die zugehörige Funktion ist derzeit deaktiviert. Du kannst die Vorlage trotzdem bearbeiten — sie wird verwendet, sobald die Funktion wieder aktiviert ist.",
"subcategories": {
"gallery": "Galerien",
"admin": "Admin-Konten",
"backup": "Backup & Wiederherstellung",
"system": "System-Updates",
"other": "Sonstige"
}
},
"cms": {
"title": "CMS-Seiten",
"subtitle": "Rechtliche und informative Seiten verwalten",
"loadingPages": "Seiten werden geladen...",
"pages": "Seiten",
"previewLinks": "Vorschau-Links",
"englishVersion": "Englische Version",
"germanVersion": "Deutsche Version",
"editPage": "{{page}} bearbeiten",
"pageTitle": "Seitentitel",
"pageContent": "Seiteninhalt",
"pageTitlePlaceholder": "Seitentitel eingeben...",
"lastUpdated": "Zuletzt aktualisiert:",
"pageUpdated": "Seite erfolgreich aktualisiert",
"useExternalUrl": "Externe URL verwenden",
"useExternalUrlHelp": "Besucher werden auf eine externe Seite weitergeleitet, anstatt die internen Inhalte anzuzeigen. Titel und Inhalt bleiben als Fallback gespeichert.",
"externalUrl": "Externe URL",
"externalUrlPlaceholder": "https://example.com/impressum",
"externalUrlInvalid": "Muss eine gültige https://-URL sein",
"externalUrlActive": "Externe URL ist aktiv — interne Inhalte bleiben gespeichert, werden Besuchern aber nicht angezeigt.",
"logoUploaded": "Logo hochgeladen",
"logoCleared": "Logo entfernt",
"pageLogo": "Seitenlogo",
"pageLogoHelp": "Optional. Falls gesetzt, wird es anstelle des globalen Branding-Logos auf dieser Seite verwendet.",
"noLogo": "keine Überschreibung",
"replaceLogo": "Logo ersetzen",
"uploadLogo": "Logo hochladen",
"clearLogo": "Seitenstandard verwenden"
},
"validation": {
"eventNameRequired": "Veranstaltungsname ist erforderlich",
"hostEmailRequired": "Die E-Mail des Kunden ist erforderlich",
"hostNameRequired": "Der Name des Kunden ist erforderlich",
"adminEmailRequired": "Admin-E-Mail ist erforderlich",
"invalidEmailFormat": "Ungültiges E-Mail-Format",
"passwordRequired": "Passwort ist erforderlich",
"passwordMinLength": "Passwort muss mindestens 6 Zeichen lang sein",
"passwordsDoNotMatch": "Passwörter stimmen nicht überein",
"expirationRange": "Ablauf muss zwischen 1 und 365 Tagen liegen",
"required": "Dieses Feld ist erforderlich",
"expirationRequired": "Ablaufdatum ist erforderlich.",
"eventDateRequired": "Veranstaltungsdatum ist erforderlich",
"passwordTooSimple": "Das Passwort darf nicht nur aus Zahlen bestehen. Verwenden Sie z.B. ein Datumsformat wie \"04.07.2025\""
},
"maintenance": {
"title": "Systemwartung",
"message": "Wir führen derzeit geplante Wartungsarbeiten durch, um unseren Service zu verbessern. Wir sind in Kürze wieder online.",
"urgentMatters": "Bei dringenden Anliegen kontaktieren Sie bitte"
},
"migrationBanner": {
"title": "Die Image-Registry von PicPeak wurde verschoben",
"body": "Aktualisiere deine docker-compose.yml, um Images von {{newPath}} zu beziehen — der alte Pfad wird nicht mehr aktualisiert.",
"link": "Migrationshinweise ansehen"
},
"passwordChange": {
"title": "Passwort ändern",
"currentPassword": "Aktuelles Passwort",
"newPassword": "Neues Passwort",
"confirmPassword": "Neues Passwort bestätigen",
"currentPasswordPlaceholder": "Aktuelles Passwort eingeben",
"newPasswordPlaceholder": "Neues Passwort eingeben",
"confirmPasswordPlaceholder": "Neues Passwort bestätigen",
"requirements": "Passwort-Anforderungen:",
"minLength": "Mindestens 6 Zeichen lang",
"mustDiffer": "Muss sich vom aktuellen Passwort unterscheiden",
"success": "Passwort erfolgreich geändert",
"failed": "Fehler beim Ändern des Passworts",
"currentRequired": "Aktuelles Passwort ist erforderlich",
"newRequired": "Neues Passwort ist erforderlich",
"minLengthError": "Passwort muss mindestens 6 Zeichen lang sein",
"confirmRequired": "Bitte bestätigen Sie Ihr neues Passwort",
"noMatch": "Passwörter stimmen nicht überein",
"mustBeDifferent": "Neues Passwort muss sich vom aktuellen unterscheiden",
"cancel": "Abbrechen"
},
"mandatoryPasswordChange": {
"title": "Passwort-Änderung erforderlich",
"description": "Aus Sicherheitsgründen müssen Sie Ihr Passwort ändern, bevor Sie auf das Admin-Panel zugreifen können.",
"success": "Passwort erfolgreich geändert! Sie können nun auf das Admin-Panel zugreifen.",
"minLength": "Mindestens 12 Zeichen lang",
"mustContainUpperLower": "Muss Groß- und Kleinbuchstaben enthalten",
"mustContainNumbers": "Muss Zahlen enthalten",
"mustContainSpecial": "Muss Sonderzeichen enthalten (!@#$%^&*)",
"minLengthError": "Passwort muss mindestens 12 Zeichen lang sein",
"mustContainLowercase": "Passwort muss Kleinbuchstaben enthalten",
"mustContainUppercase": "Passwort muss Großbuchstaben enthalten",
"mustContainNumbersError": "Passwort muss Zahlen enthalten",
"mustContainSpecialError": "Passwort muss Sonderzeichen enthalten"
},
"offline": {
"backOnline": "Wieder online",
"noConnection": "Keine Internetverbindung"
},
"download": {
"downloading": "Wird heruntergeladen...",
"percentComplete": "% abgeschlossen"
},
"passwordGenerator": {
"weak": "Schwach",
"fair": "Ausreichend",
"good": "Gut",
"strong": "Stark",
"generating": "Wird generiert...",
"generatePassword": "Passwort generieren",
"showSuggestions": "Passwort-Vorschläge anzeigen",
"moreOptions": "Weitere Optionen",
"suggestions": "Passwort-Vorschläge",
"characters": "Zeichen",
"copyPassword": "Passwort kopieren",
"use": "Verwenden",
"pattern": "Muster:",
"patternDescription": "Passwörter werden mit Ihrem Veranstaltungsnamen und -datum generiert. Beispiel: \"Location2024$August\" für bessere Sicherheit und Merkbarkeit."
},
"feedback": {
"comments": "Kommentare",
"addComment": "Kommentar hinzufügen",
"yourName": "Ihr Name",
"yourEmail": "Ihre E-Mail",
"writeComment": "Kommentar schreiben...",
"submit": "Absenden",
"commentSubmitted": "Kommentar eingereicht",
"commentError": "Fehler beim Einreichen des Kommentars",
"rateLimited": "Bitte warten Sie, bevor Sie erneut kommentieren",
"commentRequired": "Kommentar ist erforderlich",
"nameRequired": "Name ist erforderlich",
"emailRequired": "E-Mail ist erforderlich",
"anonymous": "Anonym",
"pendingApproval": "Genehmigung ausstehend",
"noComments": "Noch keine Kommentare. Seien Sie der Erste!",
"rating": "Bewertung",
"likes": "Gefällt mir",
"settings": {
"title": "Gast-Feedback-Einstellungen",
"enableFeedback": "Feedback aktivieren",
"feedbackTypes": "Feedback-Typen",
"ratings": "Sternebewertungen",
"ratingsDesc": "Gästen erlauben, Fotos zu bewerten (1-5 Sterne)",
"likes": "Gefällt mir",
"likesDesc": "Einfache Gefällt mir-Funktion",
"comments": "Kommentare",
"commentsDesc": "Textkommentare auf Fotos",
"favorites": "Favoriten",
"favoritesDesc": "Fotos als Favoriten markieren",
"perGuestLimits": "Limits pro Gast",
"perGuestLimitsDesc": "Begrenzen, wie viele Fotos jeder Gast favorisieren oder liken kann — praktisch für „Wählen Sie Ihre Top-N fürs Album“-Abläufe. 0 = unbegrenzt. Eine Senkung unter den aktuellen Stand eines Gasts lässt vorhandene Einträge bestehen; nur neue Hinzufügungen werden blockiert, bis er welche entfernt.",
"maxFavoritesPerGuest": "Max. Favoriten pro Gast",
"maxFavoritesPerGuestHint": "0 = unbegrenzt",
"maxLikesPerGuest": "Max. Likes pro Gast",
"maxLikesPerGuestHint": "0 = unbegrenzt",
"identityMode": "Identitätsmodus",
"identityModeSimple": "Einfaches Feedback",
"identityModeSimpleDesc": "Anonym, gerätebasiert. Alle Besucher auf demselben Gerät teilen den Zustand.",
"identityModeGuest": "Gastbezogene Auswahl",
"identityModeGuestDesc": "Jeder Besucher gibt seinen Namen ein. Ermöglicht gastbezogenes Tracking und Admin-Einblicke.",
"privacyModeration": "Datenschutz & Moderation",
"requireInfo": "Name & E-Mail erforderlich",
"requireInfoDesc": "Gäste müssen Name und E-Mail angeben, um Feedback zu hinterlassen",
"moderateComments": "Kommentare moderieren",
"moderateCommentsDesc": "Kommentare benötigen eine Genehmigung, bevor sie sichtbar sind",
"showToGuests": "Feedback für Gäste anzeigen",
"showToGuestsDesc": "Andere Gäste können Bewertungen, Likes und genehmigte Kommentare sehen",
"enableRateLimiting": "Ratenbegrenzung aktivieren",
"rateLimitingDesc": "Spam durch Begrenzung der Feedback-Häufigkeit verhindern",
"timeWindow": "Zeitfenster (Minuten)",
"maxRequests": "Maximale Anfragen"
},
"settingsUpdated": "Feedback-Einstellungen aktualisiert",
"settingsUpdateError": "Einstellungen konnten nicht aktualisiert werden",
"moderated": "Feedback moderiert",
"deleted": "Feedback gelöscht",
"exported": "Feedback exportiert",
"exportError": "Feedback konnte nicht exportiert werden",
"title": "Feedback-Verwaltung",
"exportCSV": "CSV exportieren",
"exportJSON": "JSON exportieren",
"tabs": {
"settings": "Einstellungen",
"feedback": "Feedback",
"analytics": "Analytik",
"moderation": "Moderation"
},
"allTypes": "Alle Typen",
"types": {
"rating": "Bewertungen",
"like": "Likes",
"comment": "Kommentare",
"favorite": "Favoriten"
},
"allStatuses": "Alle Status",
"status": {
"pending": "Ausstehend",
"approved": "Genehmigt",
"hidden": "Versteckt"
},
"noFeedback": "Kein Feedback gefunden",
"approve": "Genehmigen",
"hide": "Ausblenden",
"unhide": "Einblenden",
"confirmDelete": "Dieses Feedback wirklich löschen?",
"avgRating": "Durchschnittsbewertung",
"totalRatings_one": "{{count}} Bewertungen",
"totalRatings_other": "{{count}} Bewertungen",
"totalLikes": "Gesamte Likes",
"totalComments": "Gesamte Kommentare",
"pendingModeration_one": "{{count}} ausstehend",
"pendingModeration_other": "{{count}} ausstehend",
"totalInteractions": "Gesamte Interaktionen",
"topRated": "Bestbewertete Fotos",
"recentComments": "Neueste Kommentare",
"wordFilters": "Wortfilter",
"wordFiltersDesc": "Gesperrte Wörter für die Kommentarmoderation verwalten",
"manageFilters": "Wortfilter verwalten",
"manage": "Feedback verwalten",
"ratingSubmitted": "Bewertung abgegeben",
"ratingError": "Bewertung konnte nicht abgegeben werden",
"rateStar_one": "{{count}} Stern bewerten",
"rateStar_other": "{{count}} Sterne bewerten",
"ratingsCount_one": "{{count}} Bewertungen",
"ratingsCount_other": "{{count}} Bewertungen",
"likeError": "Like konnte nicht aktualisiert werden",
"unlike": "Nicht mehr mögen",
"like": "Gefällt mir",
"favoriteError": "Favorit konnte nicht aktualisiert werden",
"limit": {
"favoriteTitle": "Favoritenlimit erreicht",
"favoriteBody": "Sie können in dieser Galerie bis zu {{limit}} Fotos favorisieren. Entfernen Sie einen, um einen neuen hinzuzufügen.",
"likeTitle": "Like-Limit erreicht",
"likeBody": "Sie können in dieser Galerie bis zu {{limit}} Fotos liken. Entfernen Sie einen, um einen neuen hinzuzufügen.",
"counter": "{{current}} von {{limit}} verwendet",
"ok": "Verstanden"
},
"unfavorite": "Aus Favoriten entfernen",
"favorite": "Zu Favoriten hinzufügen",
"invalidEmail": "Ungültige E-Mail-Adresse",
"identityRequired": "Ihre Informationen erforderlich",
"identityReason": "Bitte geben Sie Ihren Namen und Ihre E-Mail an, um {{type}} zu senden.",
"namePlaceholder": "Ihren Namen eingeben",
"emailPlaceholder": "Ihre E-Mail eingeben",
"submitFeedback": "Feedback senden",
"moderationSuccess": "Feedback moderiert",
"pendingModeration": "Ausstehende Moderation",
"pending": "ausstehend",
"noPendingComments": "Keine Kommentare warten auf Moderation",
"onPhoto": "Auf Foto",
"showAll_one": "Alle {{count}} ausstehenden Kommentare anzeigen",
"showAll_other": "Alle {{count}} ausstehenden Kommentare anzeigen",
"viewAllFeedback": "Gesamtes Feedback & Einstellungen anzeigen",
"exportShapeLabel": "Form",
"exportShapeLong": "Pro Aktion (lang)",
"exportShapePivot": "Pro Gast (pivot)"
},
"filter": {
"feedbackFilters": "Feedback-Filter",
"clear": "Löschen",
"rating": "Bewertung",
"hasLikes": "Hat Gefällt mir",
"hasFavorites": "Hat Favoriten",
"hasComments": "Hat Kommentare",
"showingPhotos": "Fotos gesamt",
"withRatings": "Mit Bewertungen",
"combineWith": "Kombinieren mit",
"allPhotos": "Alle Fotos",
"anyRating": "Jede Bewertung",
"oneStarPlus": "1+ Stern",
"twoStarsPlus": "2+ Sterne",
"threeStarsPlus": "3+ Sterne",
"fourStarsPlus": "4+ Sterne",
"fiveStarsOnly": "Nur 5 Sterne"
},
"export": {
"button": "Exportieren",
"success": "Export erfolgreich heruntergeladen",
"error": "Export fehlgeschlagen: ",
"exportFiltered": "Gefilterte Fotos exportieren",
"hint": "Fotos auswählen oder Filter anwenden zum Exportieren",
"exportSelected_one": "{{count}} ausgewähltes exportieren",
"exportSelected_other": "{{count}} ausgewählte exportieren",
"preview": {
"titleTxt": "Dateinamen-Liste für Lightroom",
"titleCsv": "CSV-Export",
"helpTxt": "In das Lightroom-Dateinamensuchfeld einfügen. Die Liste ist kommagetrennt und ohne Dateiendung, damit sie auch zu einem Katalog mit RAW-Dateien passt.",
"helpCsv": "In eine Tabellenkalkulation einfügen (Google Sheets, Excel, Numbers) die erste Zeile ist die Spaltenüberschrift.",
"copyButton": "In die Zwischenablage kopieren",
"copiedShort": "Kopiert",
"copied": "In die Zwischenablage kopiert.",
"copyFailed": "Zugriff auf die Zwischenablage blockiert. Bitte den Text markieren und manuell kopieren.",
"download": "Als Datei herunterladen"
}
},
"slideshow": {
"adminTitle": "Live-Diashow",
"adminDescription": "Ein separater Vollbild-Link für Beamer bei Live-Events. Zeigt alle veröffentlichten Fotos und übernimmt neue Uploads automatisch, während die Diashow läuft.",
"generateLink": "Diashow-Link erstellen",
"linkLabel": "Diashow-Link",
"linkGenerated": "Diashow-Link erstellt",
"linkDisabled": "Diashow-Link deaktiviert",
"regenerate": "Neu erstellen",
"disable": "Deaktivieren",
"disableConfirm": "Diesen Diashow-Link deaktivieren? Der aktuelle Link funktioniert dann nicht mehr.",
"intervalLabel": "Anzeigedauer (Sek.)",
"transitionLabel": "Übergang",
"transitionSpeedLabel": "Übergangsdauer (ms)",
"transition": {
"crossfade": "Überblenden",
"cut": "Hart schneiden",
"slide": "Schieben",
"kenburns": "Ken Burns",
"dipwhite": "Über Weiß blenden",
"dipblack": "Über Schwarz blenden"
},
"colorfilterLabel": "Farbfilter",
"colorfilter": {
"none": "Keiner",
"bw": "Schwarz-Weiß",
"sepia": "Sepia",
"warm": "Warm",
"cool": "Kühl",
"vignette": "Vignette"
},
"watermarkToggle": "Logo-Wasserzeichen anzeigen",
"watermarkDescription": "Blendet ein weißes, halbtransparentes Logo in einer Ecke ein (wie ein Senderlogo im TV).",
"watermarkSourceLabel": "Logo",
"watermarkSource": {
"logo": "Helles Logo",
"logo_dark": "Dunkelmodus-Logo",
"favicon": "Favicon",
"event": "Event-Logo",
"notSet": "Nicht gesetzt"
},
"watermarkPositionLabel": "Position",
"watermarkPosition": {
"top-left": "Oben links",
"top-right": "Oben rechts",
"bottom-left": "Unten links",
"bottom-right": "Unten rechts"
},
"watermarkOpacityLabel": "Deckkraft (%)",
"watermarkStyleLabel": "Logo-Darstellung",
"watermarkSizeLabel": "Größe (% des Bildschirms)",
"watermarkModeHint": "Logo, Position, Deckkraft, Darstellung und Größe werden unter Einstellungen → Diashow konfiguriert.",
"watermarkStyle": {
"white": "Weiß (einfärben)",
"original": "Originalfarben"
},
"watermarkMode": {
"inherit": "Globale Vorgabe verwenden",
"on": "An",
"off": "Aus"
},
"globalTitle": "Globale Diashow-Einstellungen",
"globalDescription": "Vorgaben für jede Diashow. Events können das Wasserzeichen überschreiben (an/aus).",
"fitLabel": "Bildanpassung",
"fit": {
"cover": "Bildschirm füllen (beschneiden)",
"contain": "Schwarze Balken (kein Beschnitt)"
},
"fitHint": "„Füllen“ beschneidet das Bild zum Ausfüllen; „Schwarze Balken“ zeigt das ganze Foto besser für Hochformat.",
"presetTitle": "Standard-Stil für neue Diashows",
"presetHint": "Gilt für ab jetzt erstellte Events; jedes Event kann ihn weiterhin überschreiben.",
"defaultsSaved": "Diashow-Vorgaben gespeichert",
"liveHint": "Änderungen werden in einer laufenden Diashow innerhalb weniger Sekunden übernommen der Link muss nicht neu erstellt werden.",
"saveSettings": "Diashow-Einstellungen speichern",
"settingsSaved": "Diashow-Einstellungen gespeichert",
"start": "Diashow starten",
"waiting": "Warte auf Fotos …",
"ended": "Diashow beendet.",
"notFound": "Dieser Diashow-Link ist nicht aktiv.",
"startFailed": "Diashow konnte nicht gestartet werden. Bitte erneut versuchen."
},
"clientAccess": {
"title": "Kundenzugang",
"description": "Geben Sie Ihre PIN ein, um Fotos vor der Veröffentlichung zu überprüfen und auszuwählen.",
"pinLabel": "Kunden-PIN",
"pinPlaceholder": "PIN eingeben",
"enterPin": "Geben Sie die PIN ein, die Sie erhalten haben",
"invalidPin": "Ungültige PIN. Bitte versuchen Sie es erneut.",
"loginFailed": "Anmeldung fehlgeschlagen. Bitte versuchen Sie es erneut.",
"loginButton": "Zugang erhalten",
"guestHint": "Nur Fotos ansehen?",
"guestLink": "Zur Gästegalerie",
"banner": "Kundenmodus",
"visibleCount": "{{visible}} von {{total}} Fotos für Gäste sichtbar",
"hideSelected": "Ausgewählte ausblenden",
"showSelected": "Ausgewählte einblenden",
"adminTitle": "Kundenzugang",
"enableToggle": "Kundenzugang aktivieren",
"enableDescription": "Ermöglichen Sie Kunden, Fotos zu überprüfen und auszublenden, bevor die Galerie mit den Gästen geteilt wird.",
"pinHelperText": "Der Kunde verwendet diese PIN, um die Überprüfungsseite aufzurufen.",
"pinUpdated": "Kunden-PIN aktualisiert",
"setPin": "PIN festlegen",
"linkLabel": "Kundenzugangs-Link",
"regenerateToken": "Link neu generieren",
"tokenRegenerated": "Kundenzugangs-Link neu generiert"
},
"setup": {
"title": "Willkommen bei PicPeak",
"subtitle": "Erstellen Sie Ihr Administrator-Konto, um loszulegen",
"tokenStepSubtitle": "Geben Sie zunächst Ihren einmaligen Setup-Token ein",
"accountStepSubtitle": "Erstellen Sie nun Ihr Administrator-Konto",
"usageSubtitle": "Wie möchten Sie PicPeak nutzen?",
"usageAlwaysOn": "Galerien, Analysen und Benutzerverwaltung sind immer enthalten. Wählen Sie unten optionale Funktionen — Sie können dies jederzeit in den Einstellungen ändern.",
"usageGroupCrm": "Kundenverwaltung",
"usageGroupAccounting": "Buchhaltung",
"usageGroupAutomation": "Automatisierung & Versand",
"usageDepsNote": "Rechnungen aktivieren automatisch den Buchhaltungsbereich.",
"usageSkip": "Nur mit Galerien fortfahren",
"finish": "Einrichtung abschließen",
"featuresSaveFailed": "Ihre Funktionsauswahl konnte nicht gespeichert werden — Sie können sie später unter Einstellungen → Funktionen festlegen.",
"restoreStepSubtitle": "Aus einem Backup wiederherstellen",
"restoreEntry": "Wechsel von einer anderen PicPeak-Instanz?",
"restoreEntryHint": "Stellen Sie stattdessen ein .picpeak-Backup wieder her, anstatt neu einzurichten.",
"restoreIntro": "Laden Sie ein .picpeak-Backup hoch, um eine andere Instanz auf diese zu klonen. Dies ersetzt alles außer dem gerade erstellten Konto.",
"config": {
"subtitle": "Richten Sie Ihre Funktionen ein",
"intro": "Einige Angaben zu den gewählten Funktionen. Was Sie überspringen, behält den Standard und kann später in den Einstellungen festgelegt werden.",
"invoicing": "Rechnungsdaten",
"invoicingDisclaimer": "Erscheint auf Ihren Rechnungen. Bank-/IBAN- und Mehrwertsteuerangaben liegen in Ihrer Verantwortung — prüfen Sie sie mit Ihrer Bank und Ihrem Treuhänder/Steuerberater.",
"companyName": "Firma / rechtlicher Name",
"addressLine1": "Strasse und Nummer",
"postalCode": "PLZ",
"city": "Ort",
"countryCode": "Ländercode (z. B. CH)",
"currency": "Währung (z. B. CHF)",
"vatId": "MwSt-Nummer (oder leer lassen)",
"taxId": "Steuernummer (oder MwSt-Nummer)",
"iban": "IBAN (für Rechnungszahlungen)",
"email": "E-Mail-Versand (SMTP)",
"emailHint": "Erforderlich, um Erinnerungen, Rechnungen und Benachrichtigungen zu senden.",
"smtpHost": "SMTP-Host",
"smtpPort": "Port",
"smtpUser": "Benutzername",
"smtpPass": "Passwort",
"fromEmail": "Absenderadresse",
"fromName": "Absendername",
"skip": "Vorerst überspringen",
"finish": "Einrichtung abschließen",
"saveFailed": "Einige Einstellungen konnten nicht gespeichert werden — Sie können sie in den Einstellungen abschließen."
},
"stepOf": "Schritt {{current}} von {{total}}",
"continue": "Weiter",
"back": "Zurück",
"tokenLabel": "Setup-Token",
"tokenPlaceholder": "Einmaligen Setup-Token einfügen",
"tokenHint": "Wird beim ersten Start in den Server-Logs ausgegeben (auch in data/SETUP_TOKEN gespeichert).",
"tokenRequired": "Der Setup-Token ist erforderlich",
"tokenCommandLabel": "Token nicht gefunden? Führen Sie dies im Projektverzeichnis aus:",
"copyCommand": "Befehl kopieren",
"tokenRotatedLink": "Logs bereits rotiert? Zur Einrichtungsanleitung",
"tokenLocationHint": "Nicht gefunden? Führen Sie aus: docker compose logs backend | grep -i \"setup token\"",
"invalidToken": "Dieser Setup-Token ist ungültig.",
"passwordRequirements": "Verwenden Sie mindestens 8 Zeichen mit einem Groß- und einem Kleinbuchstaben sowie einer Ziffer.",
"emailLabel": "E-Mail-Adresse",
"emailPlaceholder": "[email protected]",
"emailRequired": "E-Mail ist erforderlich",
"invalidEmail": "Bitte geben Sie eine gültige E-Mail-Adresse ein",
"passwordLabel": "Passwort",
"passwordPlaceholder": "Wählen Sie ein sicheres Passwort",
"passwordRequired": "Passwort ist erforderlich",
"passwordMinLength": "Das Passwort muss mindestens 8 Zeichen lang sein",
"confirmLabel": "Passwort bestätigen",
"confirmPlaceholder": "Passwort erneut eingeben",
"passwordMismatch": "Die Passwörter stimmen nicht überein",
"submit": "Admin-Konto erstellen",
"success": "Admin-Konto erstellt. Willkommen!",
"genericError": "Einrichtung fehlgeschlagen. Bitte versuchen Sie es erneut.",
"tooManyAttempts": "Zu viele Versuche. Bitte warten Sie einen Moment und versuchen Sie es erneut."
},
"adminLogin": {
"title": "Admin-Anmeldung",
"subtitle": "Melden Sie sich an, um Ihre Fotogalerien zu verwalten",
"sessionExpired": "Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.",
"emailLabel": "E-Mail-Adresse",
"emailPlaceholder": "[email protected]",
"emailRequired": "E-Mail ist erforderlich",
"invalidEmail": "Ungültiges E-Mail-Format",
"passwordLabel": "Passwort",
"passwordPlaceholder": "Passwort eingeben",
"passwordRequired": "Passwort ist erforderlich",
"passwordMinLength": "Passwort muss mindestens 6 Zeichen lang sein",
"rememberMe": "Angemeldet bleiben",
"signIn": "Anmelden",
"loginSuccess": "Anmeldung erfolgreich!",
"networkError": "Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.",
"tooManyAttempts": "Zu viele Anmeldeversuche. Bitte versuchen Sie es später erneut.",
"invalidCredentials": "Ungültige E-Mail oder Passwort",
"generalError": "Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.",
"needHelp": "Hilfe benötigt? Kontakt",
"poweredBy": "Bereitgestellt von PicPeak",
"devModeHint": "Entwicklungsmodus: E-Mail: [email protected], Passwort: admin123"
},
"cssTemplates": {
"title": "Benutzerdefinierte CSS-Vorlagen",
"template": "Vorlage",
"templateName": "Vorlagenname",
"enableTemplate": "Diese Vorlage aktivieren",
"enableHint": "Aktivierte Vorlagen können beim Erstellen von Veranstaltungen ausgewählt werden",
"cssContent": "CSS-Inhalt",
"cssHint": "Verwenden Sie .gallery-page, um Stile auf die Galerie zu beschränken. Verfügbare Variablen: --gallery-bg, --gallery-text, --gallery-accent",
"securityNotice": "Sicherheitshinweis",
"securityText": "CSS wird bereinigt, um schädlichen Code zu verhindern. Externe URLs, @import und JavaScript-Ausdrücke werden blockiert.",
"resetToDefault": "Auf Standard zurücksetzen",
"resetConfirm": "Diese Vorlage auf Standard zurücksetzen? Ihre Änderungen gehen verloren.",
"unsavedChanges": "Ungespeicherte Änderungen",
"saveTemplate": "Vorlage speichern",
"lastUpdated": "Zuletzt aktualisiert",
"saved": "Vorlage erfolgreich gespeichert",
"saveFailed": "Vorlage konnte nicht gespeichert werden",
"sanitizationWarning": "Einige CSS-Muster wurden aus Sicherheitsgründen blockiert",
"reset": "Vorlage auf Standard zurückgesetzt",
"resetFailed": "Vorlage konnte nicht zurückgesetzt werden"
},
"photoSort": {
"defaultSort": "Standard-Fotosortierung",
"uploadDateNewest": "Hochladedatum (Neueste zuerst)",
"uploadDateOldest": "Hochladedatum (Älteste zuerst)",
"captureDateNewest": "Aufnahmedatum (Neueste zuerst)",
"captureDateOldest": "Aufnahmedatum (Älteste zuerst)",
"filenameAZ": "Dateiname (A-Z)",
"filenameZA": "Dateiname (Z-A)",
"dateTaken": "Aufnahmedatum"
},
"photos": {
"moveToCategory_one": "{{count}} Foto in Kategorie verschieben",
"moveToCategory_other": "{{count}} Fotos in Kategorie verschieben",
"selectCategory": "Kategorie auswählen",
"uncategorized": "Ohne Kategorie",
"movePhotos": "Fotos verschieben",
"selectedCategory": "Ausgewählte Kategorie",
"movedToCategory_one": "{{count}} Foto nach {{category}} verschoben",
"movedToCategory_other": "{{count}} Fotos nach {{category}} verschoben",
"moveToCategoryFailed": "Fotos konnten nicht in die Kategorie verschoben werden",
"moveToCategory": "In Kategorie verschieben"
},
"customer": {
"login": {
"title": "Kunden-Login",
"subtitle": "Zugriff auf alle Ihre Fotogalerien an einem Ort.",
"email": "E-Mail",
"password": "Passwort",
"emailRequired": "E-Mail ist erforderlich",
"invalidEmail": "Bitte geben Sie eine gültige E-Mail ein",
"passwordRequired": "Passwort ist erforderlich",
"showPassword": "Passwort anzeigen",
"hidePassword": "Passwort verbergen",
"signIn": "Anmelden",
"loginSuccess": "Willkommen zurück!",
"invalidCredentials": "E-Mail oder Passwort ist falsch",
"tooManyAttempts": "Zu viele Versuche — bitte später erneut versuchen.",
"networkError": "Server nicht erreichbar. Bitte erneut versuchen.",
"generalError": "Anmeldung fehlgeschlagen. Bitte erneut versuchen.",
"acceptedToast": "Konto bereit — bitte anmelden.",
"adminHint": "Sie suchen das Admin-Panel? Besuchen Sie /admin/login.",
"emailPlaceholder": "[email protected]",
"passwordPlaceholder": "Dein Passwort",
"needHelp": "Brauchst du Hilfe?",
"poweredBy": "Bereitgestellt von PicPeak"
},
"acceptInvite": {
"title": "Konto einrichten",
"invalidToken": "Dieser Einladungslink ist ungültig oder abgelaufen. Bitte kontaktieren Sie Ihren Fotografen für eine neue Einladung.",
"emailWillBe": "Ihre Konto-E-Mail wird ",
"invitedBy": ", eingeladen von ",
"name": "Ihr Name",
"nameRequired": "Bitte geben Sie Ihren Namen ein",
"password": "Passwort wählen",
"confirm": "Passwort bestätigen",
"passwordTooShort": "Passwort muss mindestens 8 Zeichen haben",
"passwordsMismatch": "Passwörter stimmen nicht überein",
"passwordHint": "Mindestens 8 Zeichen, mit einem Großbuchstaben und einer Zahl.",
"submit": "Konto erstellen",
"successToast": "Konto erstellt — bitte anmelden.",
"alreadyExists": "Es existiert bereits ein Konto mit dieser E-Mail. Bitte melden Sie sich stattdessen an.",
"invalidSubmission": "Konto konnte nicht erstellt werden.",
"generalError": "Konto konnte nicht erstellt werden. Bitte erneut versuchen.",
"subtitle": "Bestätige oder ergänze deine Daten. Du kannst alles später im Profil bearbeiten.",
"displayName": "Anzeigename",
"section": {
"personal": "Persönlich",
"contact": "Kontakt & Firma (optional)",
"address": "Rechnungsadresse (optional)",
"password": "Passwort wählen"
}
},
"dashboard": {
"title": "Deine Galerien",
"subtitle": "Klicke auf eine Galerie, um sie zu öffnen. Der Download-Button bündelt alle Fotos als ZIP.",
"loadError": "Galerien konnten nicht geladen werden. Bitte erneut versuchen.",
"emptyTitle": "Noch keine Galerien",
"emptyBody": "Sobald Ihr Fotograf Sie einer Galerie zuweist, erscheint sie hier.",
"openAria": "Galerie {{name}} öffnen",
"opening": "Wird geöffnet…",
"expiresOn": "Läuft ab am {{date}}",
"expiredOn": "Abgelaufen am {{date}}",
"eventExpired": "Diese Galerie ist abgelaufen.",
"eventForbidden": "Sie haben keinen Zugriff mehr auf diese Galerie.",
"openError": "Galerie konnte nicht geöffnet werden. Bitte erneut versuchen.",
"download": "Herunterladen",
"preparingDownload": "Wird vorbereitet…",
"quickDownloadAria": "Alle Fotos für {{name}} herunterladen",
"downloadStarted": "Download gestartet für {{name}}",
"downloadError": "Download konnte nicht gestartet werden. Bitte erneut versuchen.",
"sortLabel": "Sortieren nach",
"sortNewest": "Neueste zuerst",
"sortOldest": "Älteste zuerst",
"sortName": "Nach Name",
"open": "Öffnen"
},
"layout": {
"greeting": "Hallo, {{name}}"
},
"nav": {
"galleries": "Galerien",
"calendar": "Kalender",
"quotes": "Angebote",
"bills": "Rechnungen",
"profile": "Profil",
"soon": "Bald",
"new": "Neu"
},
"comingSoon": {
"tag": "Demnächst"
},
"calendar": {
"title": "Kalender",
"body": "Bevorstehende Termine, Liefertermine für Galerien und weitere Shoot-Ereignisse landen hier. Wir geben Bescheid, sobald es soweit ist."
},
"quotes": {
"title": "Angebote",
"subtitle": "Alle Angebote, die dir dein Fotograf gesendet hat. Klicke auf ein offenes Angebot, um es anzunehmen oder abzulehnen.",
"empty": "Noch keine Angebote.",
"disabled": "Diese Funktion ist für dein Konto aktuell deaktiviert. Bitte wende dich an deinen Fotografen, falls du hier Angebote erwartest.",
"loadError": "Angebote konnten nicht geladen werden.",
"noEventName": "—",
"openToRespond": "Öffnen zum Antworten",
"viewPdf": "PDF anzeigen",
"popupBlocked": "Erlaube Pop-ups für diese Seite, um das Angebots-PDF anzuzeigen."
},
"bills": {
"title": "Rechnungen",
"subtitle": "Alle Rechnungen, die dir dein Fotograf gesendet hat. Klicke auf „PDF anzeigen“, um sie herunterzuladen.",
"empty": "Noch keine Rechnungen.",
"disabled": "Diese Funktion ist für dein Konto aktuell deaktiviert. Bitte wende dich an deinen Fotografen, falls du hier Rechnungen erwartest.",
"loadError": "Rechnungen konnten nicht geladen werden.",
"viewPdf": "PDF anzeigen",
"popupBlocked": "Erlaube Pop-ups für diese Seite, um das Rechnungs-PDF anzuzeigen.",
"field": {
"issueDate": "Ausgestellt",
"dueDate": "Fällig",
"paidAt": "Bezahlt",
"outstanding": "Offen",
"lateFee": "Mahngebühr"
},
"filter": {
"outstanding": "Offen (gesendet + überfällig)"
},
"kind": {
"storno": "Stornorechnung"
},
"cancelsLabel": "Hebt Rechnung auf:",
"cancelledByLabel": "Aufgehoben durch Stornorechnung"
},
"sort": {
"label": "Sortieren",
"newest": "Neueste zuerst",
"oldest": "Älteste zuerst",
"priceDesc": "Preis (hoch nach niedrig)",
"priceAsc": "Preis (niedrig nach hoch)"
},
"filter": {
"label": "Filter",
"all": "Alle",
"countAll": "{{count}} insgesamt",
"countFiltered": "{{visible}} von {{total}}"
},
"profile": {
"title": "Kundenprofil",
"subtitle": "Halte Kontakt- und Rechnungsdaten aktuell — sie erscheinen auf Angeboten und Rechnungen, sobald diese Funktionen live sind.",
"savedToast": "Profil gespeichert",
"saveError": "Profil konnte nicht gespeichert werden.",
"loadError": "Profil konnte nicht geladen werden.",
"save": "Änderungen speichern",
"salutation": {
"none": "— Keine Angabe —",
"herr": "Herr",
"frau": "Frau",
"mx": "Mx",
"dr": "Dr."
},
"section": {
"personal": "Persönliche Angaben",
"contact": "Kontakt & Firma",
"address": "Rechnungsadresse",
"password": "Passwort ändern"
},
"field": {
"email": "E-Mail (Login)",
"emailHint": "Wende dich an deinen Fotografen, wenn du deine Login-E-Mail ändern möchtest.",
"salutation": "Anrede",
"firstName": "Vorname",
"lastName": "Nachname",
"displayName": "Anzeigename",
"displayNameHint": "So begrüßen wir dich im Dashboard.",
"phone": "Telefon",
"companyName": "Firmenname",
"vatId": "USt-IdNr.",
"addressLine1": "Adresszeile 1",
"addressLine2": "Adresszeile 2",
"postalCode": "Postleitzahl",
"city": "Stadt",
"state": "Bundesland / Region",
"countryCode": "Land"
},
"password": {
"current": "Aktuelles Passwort",
"next": "Neues Passwort",
"confirm": "Neues Passwort bestätigen",
"submit": "Passwort aktualisieren",
"hint": "Mindestens 8 Zeichen, ein Großbuchstabe und eine Ziffer.",
"currentRequired": "Aktuelles Passwort eingeben",
"tooShort": "Mindestens 8 Zeichen",
"mismatch": "Passwörter stimmen nicht überein",
"wrong": "Aktuelles Passwort ist falsch",
"savedToast": "Passwort aktualisiert",
"error": "Passwort konnte nicht geändert werden"
}
},
"resetPassword": {
"title": "Passwort zurücksetzen",
"invalidToken": "Dieser Link ist ungültig oder abgelaufen. Bitte fordere bei deinem Fotografen einen neuen an.",
"forEmail": "Neues Passwort wird gesetzt für ",
"password": "Neues Passwort",
"confirm": "Neues Passwort bestätigen",
"submit": "Passwort aktualisieren",
"hint": "Mindestens 8 Zeichen, ein Großbuchstabe und eine Ziffer.",
"tooShort": "Passwort muss mindestens 8 Zeichen lang sein",
"mismatch": "Passwörter stimmen nicht überein",
"successToast": "Passwort aktualisiert. Bitte einloggen.",
"invalidSubmission": "Passwort konnte nicht aktualisiert werden.",
"generalError": "Passwort konnte nicht aktualisiert werden. Bitte erneut versuchen."
}
},
"customers": {
"field": {
"featureHoursLogging": "Stundenerfassung",
"hourlyRate": "Standard-Stundensatz",
"hourlyRateHint": "Haupteinheiten (z. B. 150.00 für {{currency}} 150). Leer lassen, um pro Eintrag einen Satz zu verlangen."
},
"hours": {
"section": "Stunden",
"monthlyHint": "Einträge werden automatisch dem aktuellen monatlichen Entwurf angehängt. Bearbeiten/Löschen möglich, bis der Scheduler den Versand auslöst.",
"perEventHint": "Erfasste Einträge bleiben unverrechnet, bis Sie auf „Rechnungsentwurf erstellen“ klicken — dann wird eine geplante Rechnung mit einer Zeile pro Eintrag erzeugt und im Editor geöffnet, sodass Sie vor dem Versand weitere Positionen hinzufügen können.",
"form": {
"title": "Neuen Eintrag erfassen",
"date": "Datum",
"start": "Start",
"end": "Ende",
"duration": "Dauer",
"durationPlaceholder": "1h · 1,5 · 1:30",
"durationHint": "Dauer eingeben, um Ende automatisch zu setzen: 1h, 1.5, 1,5 oder 1:30",
"rateOverride": "Satz-Override",
"note": "Notiz / Beschreibung",
"notePlaceholder": "Was wurde gearbeitet?",
"bookToProject": "Auf Projekt buchen",
"save": "Eintrag hinzufügen",
"needRate": "Satz festlegen oder Override eingeben, um Zeit zu erfassen."
},
"col": {
"date": "Datum",
"range": "Zeit",
"hours": "Stunden",
"rate": "Satz",
"total": "Gesamt",
"note": "Notiz",
"status": "Status"
},
"status": {
"unbilled": "Offen",
"billed": "Verrechnet",
"billedOn": "Verrechnet: {{number}}"
},
"billButton": "Rechnungsentwurf erstellen",
"unbilledCount": "{{count}} offene Einträge, total {{total}}",
"empty": "Noch keine Einträge erfasst.",
"confirmDelete": "Diesen Eintrag löschen? Wenn er auf einem Entwurf verrechnet wurde, wird die zugehörige Rechnungsposition ebenfalls entfernt.",
"locked": "Gesperrt: Rechnung bereits zum Versand vorbereitet",
"toast": {
"created": "Eintrag erfasst",
"deleted": "Eintrag gelöscht",
"billed": "Stunden verrechnet"
},
"noRate": {
"title": "Kein Stundensatz hinterlegt",
"body": "Für die Erfassung wird ein Satz benötigt. Legen Sie einen für diesen Kunden fest, geben Sie unten einen Override pro Eintrag ein oder konfigurieren Sie einen installationsweiten Standardsatz.",
"setForCustomer": "Satz für diesen Kunden festlegen",
"setInstallDefault": "Installationsweiten Standard festlegen"
},
"rateSource": {
"customer": "von diesem Kunden",
"installDefault": "installationsweiter Standard"
},
"error": {
"noRate": "Für diesen Kunden ist kein Stundensatz hinterlegt. Geben Sie einen Satz-Override ein, hinterlegen Sie einen Satz beim Kunden oder konfigurieren Sie in den Einstellungen einen installationsweiten Standardsatz.",
"createFailed": "Eintrag konnte nicht erfasst werden"
}
},
"create": {
"openButton": "Passiven Kunden erstellen",
"openLink": "+ Neuen Kunden erstellen",
"title": "Neuen Kunden erstellen",
"subtitle": "Geben Sie die Daten unten ein. Wählen Sie „Als passiven Kunden speichern“, um einen reinen Admin-Eintrag zu erstellen, oder „Speichern & Portal-Einladung senden“, um dem Kunden zusätzlich eine Einladungs-E-Mail zu schicken.",
"passiveSubtitle": "Erstellt einen reinen Admin-Datensatz. Der Kunde wird nicht benachrichtigt und kann sich erst anmelden, wenn Sie ihm später eine Einladung senden.",
"saveAsPassive": "Als passiven Kunden speichern",
"saveAndInvite": "Speichern & Portal-Einladung senden",
"savedPassiveToast": "Passiver Kunde erstellt.",
"savedActiveToast": "Kunde erstellt und Portal-Einladung gesendet.",
"inviteFailedToast": "Kunde gespeichert (passiv). Einladungs-E-Mail fehlgeschlagen — bitte aus dem Kundendetail erneut versuchen.",
"emailRequired": "Eine gültige E-Mail-Adresse ist erforderlich.",
"nameRequired": "Geben Sie mindestens einen Firmennamen oder einen Ansprechpartner an."
},
"passive": {
"badge": "Passiv — nur Admin",
"activeLabel": "Portalzugang aktiv",
"sendInvite": "Portal-Einladung senden",
"sendInviteToast": "Portal-Einladung gesendet.",
"alreadyActive": "Der Kunde hat bereits Portalzugang — keine Einladung nötig.",
"detailHint": "Dieser Kunde hat keinen Portalzugang (reiner Admin-Eintrag). Klicken Sie unten, um eine Portal-Einladung per E-Mail zu senden. Bestehende Rechnungen, Angebote und Galerie-Zuweisungen bleiben beim Annehmen der Einladung erhalten.",
"deactivatedHint": "Bitte den Kunden zuerst reaktivieren, bevor die Einladung gesendet wird."
},
"hoursLoggingDisabled": {
"badge": "Stundenerfassung deaktiviert"
},
"pageTitle": "Kunden",
"pageSubtitle": "Wiederkehrende Kundenkonten, die sich unter /customer/login anmelden können.",
"unnamed": "Unbenannt",
"empty": "Noch keine Kunden. Klicken Sie auf „Kunden einladen“, um einen hinzuzufügen.",
"loadError": "Kunden konnten nicht geladen werden",
"loadInvitationsError": "Einladungen konnten nicht geladen werden",
"tabs": {
"customers": "Kunden",
"invitations": "Einladungen"
},
"search": {
"placeholder": "Nach E-Mail, Name oder Firma suchen"
},
"table": {
"name": "Name",
"email": "E-Mail",
"company": "Firma",
"eventCount": "Events",
"lastLogin": "Letzte Anmeldung",
"status": "Status"
},
"status": {
"active": "Aktiv",
"inactive": "Deaktiviert"
},
"invite": {
"button": "Kunden einladen",
"title": "Kunden einladen",
"description": "Der Kunde erhält eine E-Mail mit einem Link zum Einrichten des Kontos. Nach Annahme können Sie ihn Events zuordnen.",
"email": "E-Mail",
"submit": "Einladung senden",
"success": "Einladung gesendet",
"error": "Einladung konnte nicht gesendet werden.",
"conflict": "Ein Kunde mit dieser E-Mail existiert bereits oder hat eine offene Einladung.",
"invalidEmail": "Bitte geben Sie eine gültige E-Mail ein",
"showPrefill": "+ Kontaktdaten hinzufügen (optional)",
"hidePrefill": " Kontaktdaten ausblenden",
"prefillHint": "Alles, was du ausfüllst, wird auf der Anmeldeseite des Kunden vorausgefüllt — er kann es weiterhin bearbeiten."
},
"invitations": {
"empty": "Keine offenen Einladungen.",
"email": "E-Mail",
"invitedBy": "Eingeladen von",
"expiresAt": "Läuft ab",
"createdAt": "Erstellt",
"cancel": "Stornieren"
},
"deactivate": {
"button": "Deaktivieren",
"title": "Kunde deaktivieren?",
"body": "Der Kunde kann sich nicht mehr anmelden. Sie können ihn später erneut einladen.",
"success": "Kunde deaktiviert",
"error": "Kunde konnte nicht deaktiviert werden"
},
"cancelInvitation": {
"title": "Einladung stornieren?",
"body": "Der Einladungslink funktioniert sofort nicht mehr.",
"success": "Einladung storniert",
"error": "Einladung konnte nicht storniert werden"
},
"detail": {
"loadError": "Kunde konnte nicht geladen werden",
"saved": "Kunde gespeichert",
"saveError": "Änderungen konnten nicht gespeichert werden.",
"emailConflict": "Diese E-Mail wird bereits von einem anderen Kunden verwendet.",
"save": "Änderungen speichern",
"expires": "läuft ab",
"accountSection": "Konto",
"personalSection": "Persönliche Daten",
"billingSection": "Adresse & Rechnung",
"notesSection": "Interne Notizen",
"eventsSection": "Zugewiesene Events",
"noEvents": "Noch keinem Event zugewiesen. Fügen Sie diesen Kunden über das Event-Formular hinzu.",
"email": "E-Mail",
"preferredLanguage": "Bevorzugte Sprache",
"preferredLanguageHint": "Steuert die Portal-Sprache sowie die Sprache von Angebots- und Rechnungs-PDFs. Neue Kunden erben standardmässig die Sprache aus dem Geschäftsprofil ({{lang}}); hier kann pro Kunde überschrieben werden.",
"salutation": "Anrede",
"salutationNone": "—",
"firstName": "Vorname",
"lastName": "Nachname",
"displayName": "Anzeigename",
"phone": "Telefon",
"company": "Firma",
"billingEmail": "Rechnungs-E-Mail",
"vatId": "USt-IdNr.",
"addressLine1": "Adresse Zeile 1",
"addressLine2": "Adresse Zeile 2",
"postalCode": "Postleitzahl",
"city": "Stadt",
"state": "Bundesland / Region",
"countryCode": "Land (ISO-2)",
"country": "Land",
"countryName": "Land (vollständiger Name)",
"notesHint": "Nur für Administratoren sichtbar. Wird dem Kunden nie gezeigt.",
"featuresSection": "Kundenfunktionen",
"featuresHint": "Pro-Kunde-Überschreibungen für die Kundenoberflächen-Tabs. Die globalen Schalter in Einstellungen → Kundenoberfläche sind der Master-Schalter — wenn global AUS, sieht niemand den Tab, unabhängig von der Einstellung hier. Standard ist AN, schalte einen Eintrag AUS, um diesen Tab für diesen Kunden auszublenden.",
"passwordSection": "Kontoaktionen",
"passwordHint": "Sendet einen einmalig nutzbaren Reset-Link (7 Tage gültig) an die E-Mail-Adresse des Kunden. Das aktuelle Passwort bleibt gültig, bis der Kunde den Link öffnet und ein neues setzt.",
"passwordReset": {
"button": "Passwort-Reset-E-Mail senden",
"success": "Passwort-Reset-E-Mail gesendet",
"error": "Passwort-Reset konnte nicht gesendet werden",
"inactive": "Aktiviere den Kunden, bevor du einen Reset sendest."
},
"manageEvents": "Galerien verwalten",
"quotesSection": "Angebote",
"noQuotes": "Noch keine Angebote für diesen Kunden.",
"contractsSection": "Verträge",
"noContracts": "Noch keine Verträge für diesen Kunden.",
"billsSection": "Rechnungen",
"noBills": "Noch keine Rechnungen für diesen Kunden."
},
"billing": {
"section": "Abrechnungsrhythmus",
"hint": "Per-Event (Standard): jede Rechnung wird einzeln versendet. Monatlich: alle Rechnungen einer Periode werden zu einer Sammelrechnung gebündelt, die am konfigurierten Stichtag ausgelöst wird. Manuell: Positionen sammeln sich genauso, aber die Rechnung wird erst versendet, wenn Sie sie auslösen.",
"cadence": "Abrechnungsrhythmus",
"perEvent": "Per Event",
"monthly": "Monatlich",
"quarterly": "Quartalsweise",
"manual": "Manuell (nur auf Auslösung)",
"cycleDay": "Stichtag",
"cycleDayHint": "1..28 = Tag im Monat. Negativ -1..-15 für „N Tage vor Monatsende“ (so löst -3 in einem 31-Tage-Monat am 28. aus).",
"skontoDisabled": "Kein Skonto für diesen Kunden",
"skontoDisabledHint": "Deaktiviert den Skonto-Abzug auf allen Rechnungen dieses Kunden unabhängig von Vorlage oder globalen Standardwerten.",
"triggerNow": "Rechnung jetzt ausstellen",
"triggerConfirm": "Monatsrechnung für diesen Kunden jetzt ausstellen? Der Kunde erhält die E-Mail sofort.",
"triggerConfirmManual": "Gesammelte Rechnung für diesen Kunden jetzt ausstellen? Der Kunde erhält die E-Mail sofort.",
"triggerHint": "Überspringt den Stichtag und stellt den aktuellen Entwurf sofort aus. Wird abgelehnt, wenn für die aktuelle Periode nichts erfasst wurde.",
"triggerHintManual": "Stellt den aktuellen Entwurf sofort aus. Entwürfe mit manuellem Rhythmus werden nie automatisch versendet dies ist der einzige Weg, sie zu versenden. Wird abgelehnt, wenn nichts erfasst wurde.",
"triggered": "Monatsrechnung ausgestellt: {{number}}",
"triggerError": "Monatsrechnung konnte nicht ausgelöst werden.",
"draftPreview": {
"title": "Offen für die Rechnung dieses Monats",
"titleManual": "Offen wird auf manuelle Auslösung versendet",
"periodRange": "{{number}} · {{from}} {{to}}"
}
},
"reactivate": {
"button": "Reaktivieren",
"success": "Kunde reaktiviert",
"error": "Kunde konnte nicht reaktiviert werden"
},
"erase": {
"button": "Kundendaten löschen",
"title": "Kundendaten löschen?",
"body": "Entfernt Name, E-Mail, Telefon, Adresse, Firma und Login-Daten des Kunden. Der Kontoeintrag bleibt, damit historische Galerie-Zugriffe und Audit-Logs ihn weiter referenzieren können. Dies ist unwiderruflich — die Daten können danach nicht wiederhergestellt werden.",
"confirm": "Endgültig löschen",
"confirmInFlight": "Lösche…",
"success": "Kunde gelöscht",
"error": "Kunde konnte nicht gelöscht werden"
},
"assignedEvents": {
"title": "Zugewiesene Galerien verwalten",
"subtitle": "Wähle jede Galerie aus, auf die dieser Kunde über sein Dashboard zugreifen können soll. Eine hier entfernte Galerie wird beim nächsten Aufruf des Kunden sofort gesperrt.",
"currentLabel": "Zugewiesene Galerien",
"empty": "Noch keine Galerien zugewiesen. Suche unten, um eine hinzuzufügen.",
"searchLabel": "Galerie hinzufügen",
"searchPlaceholder": "Nach Eventname suchen",
"searchHint": "Beginne zu tippen, um Galerien zu finden.",
"noResults": "Keine passenden Galerien.",
"removeAria": "{{name}} entfernen",
"save": "Zuweisungen speichern",
"saved": "Zuweisungen aktualisiert",
"savedDiff": "Zuweisungen aktualisiert: {{parts}}",
"addedN": "{{count}} hinzugefügt",
"removedN": "{{count}} entfernt",
"error": "Zuweisungen konnten nicht aktualisiert werden",
"clearSearchAria": "Suche löschen"
}
},
"clients": {
"title": "CRM",
"subtitle": "Kundenkonten, Termine, Angebote und Rechnungen — alles für wiederkehrende Kunden an einem Ort.",
"navAriaLabel": "CRM-Navigation",
"empty": {
"title": "Keine CRM-Funktionen aktiviert",
"body": "Aktiviere „Konten\" (oder eine andere CRM-Unterfunktion) unter Einstellungen → Funktionen, um loszulegen."
},
"subnav": {
"overview": "Übersicht",
"accounts": "Konten",
"quotes": "Angebote",
"contracts": "Verträge",
"hours": "Stunden",
"calendar": "Kalender",
"bills": "Rechnungen",
"taxReport": "Steuer",
"development": "Entwicklung"
}
},
"accounting": {
"title": "Buchhaltung",
"subtitle": "Eingehende Lieferantenrechnungen, Aufwände und Auswertungen.",
"navAriaLabel": "Buchhaltungs-Navigation",
"empty": {
"title": "Keine Buchhaltungsfunktionen aktiviert",
"body": "Aktiviere die Steuerliste (oder eine andere Buchhaltungs-Unterfunktion) unter Einstellungen → Funktionen, um loszulegen."
},
"subnav": {
"incomingInvoices": "Eingangsrechnungen",
"expenses": "Aufwände",
"taxReport": "Steuer",
"export": "Treuhänder-Export",
"chartOfAccounts": "Kontenplan"
},
"taxTreatment": {
"domestic": "Inland (mit MWST)",
"reverse_charge_service": "Bezugsteuer (Dienstleistungen)",
"foreign_vat_non_reclaimable": "Ausländische MWST (nicht abziehbar)",
"import_goods": "Wareneinfuhr"
},
"disposition": {
"rebill": "An Kunde weiterverrechnen",
"durchlaufend": "Durchlaufender Posten",
"eigener_aufwand": "Eigener Aufwand",
"duplikat": "Duplikat",
"abgelehnt": "Abgelehnt",
"help": {
"rebill": "Eigene Lieferantenkosten, die du an einen Kunden weiterverrechnest — meist mit Zuschlag. Wird als Kosten und als weiterverrechneter Ertrag gebucht.",
"durchlaufend": "Ein Betrag, den du nur im Namen des Kunden vorstreckst und exakt durchreichst — kein Zuschlag, MwSt-neutral (durchlaufender Posten). Kunde zuordnen, um ihn zum Selbstkostenpreis weiterzuverrechnen.",
"eigener_aufwand": "Eigene Kosten, die nicht weiterverrechnet werden. Kategorie wählen, damit der Posten richtig in der Erfolgsrechnung landet.",
"duplikat": "Duplikat einer bereits erfassten Rechnung — wird nicht verbucht.",
"abgelehnt": "Dokument ablehnen — wird nicht verbucht."
}
},
"markup": {
"none": "Keiner / aus Vertrag",
"percent": "Prozent",
"flat": "Pauschal"
},
"inbox": {
"captureTitle": "Lieferantenrechnung erfassen",
"captureBody": "Fotografiere eine Papierrechnung mit der Gerätekamera oder lade ein PDF / Bild hoch.",
"scanCamera": "Mit Kamera scannen",
"uploadFile": "Datei hochladen",
"capturedToast": "Dokument erfasst.",
"categorizedToast": "Dokument kategorisiert.",
"triageTitle": "Dokument kategorisieren",
"saveCategorize": "Speichern",
"saveCategorizePay": "Speichern & als bezahlt markieren",
"categorize": "Kategorisieren",
"recategorize": "Neu kategorisieren",
"view": "Ansehen",
"empty": "Noch keine Dokumente — oben eines erfassen.",
"untitled": "Unbenanntes Dokument",
"noAmount": "Betrag nicht erfasst",
"rebillHint": "Erstellt eine bearbeitbare geplante Rechnung beim Kunden. MwSt-/Steuerbehandlung ist v1 — mit Treuhänder prüfen.",
"previewLoading": "Vorschau wird geladen…",
"previewError": "Vorschau nicht verfügbar — Felder manuell erfassen.",
"qrHint": "Letzte Seite — der Schweizer QR-Einzahlschein sitzt meist unten.",
"prevPage": "Zurück",
"nextPage": "Weiter",
"pageOf": "Seite {{n}} / {{total}}",
"status": {
"label": "Status",
"unsorted": "Neu",
"categorized": "Kategorisiert",
"declined": "Abgelehnt",
"duplicate": "Duplikat"
},
"field": {
"supplier": "Lieferant",
"total": "Total",
"currency": "Währung",
"invoiceDate": "Rechnungsdatum",
"disposition": "Zuordnung",
"category": "Kategorie",
"categoryNone": "— keine —",
"declineReason": "Grund",
"customer": "Kunde",
"eventId": "Event-ID (optional)",
"markup": "Zuschlag",
"reference": "Zahlungsreferenz",
"referenceHint": "QR-/ESR-Referenz oder Mitteilung",
"note": "Notiz",
"noteHint": "Interne Notiz zu dieser Rechnung (optional)",
"passthroughCustomerHint": "Optional — einen Kunden zuordnen, um diese durchlaufende Position weiterzuverrechnen; leer lassen, um sie nur auf das Event zu buchen.",
"supplierCountry": "Lieferantenland",
"supplierCountryNone": "— unbekannt —",
"supplierCountryHint": "Setzt die Steuerbehandlung automatisch: ausserhalb deiner Vorsteuer-Länder → ausländische MwSt (nicht abziehbar)."
}
},
"expenseStatus": {
"open": "Offen",
"parked": "Geparkt",
"billed": "Verrechnet",
"declined": "Abgelehnt"
},
"paymentMethod": {
"bank_transfer": "Überweisung",
"cash": "Bargeld",
"twint": "TWINT",
"paypal": "PayPal",
"card": "Karte",
"other": "Sonstiges"
},
"booking": {
"label": "Buchen auf",
"company": "Firma",
"event": "Event",
"eventId": "Event-ID",
"inboundHint": "Auf welches Event diese Kosten in Auswertungen & Steuerexport entfallen (Firma = allgemeiner Aufwand). Unabhängig davon, an wen du weiterverrechnest."
},
"incoming": {
"triageTitle": "Eingangsrechnung kategorisieren",
"payTitle": "Lieferant als bezahlt markieren",
"outstanding": "Offen",
"markPaid": "Als bezahlt markieren",
"markUnpaid": "Als unbezahlt markieren",
"confirmPaid": "Als bezahlt markieren",
"paid": "Bezahlt",
"paidToast": "Als bezahlt markiert.",
"categorizedToast": "Kategorisiert.",
"categorizedPaidToast": "Kategorisiert und als bezahlt markiert.",
"pendingRebill": "Weiterverrechnung offen",
"pendingTitle": "Offene Weiterverrechnungen",
"pendingBody": "Kategorisierte Rechnungen, die auf die Weiterverrechnung warten. Posten eines Kunden zu einer Rechnung bündeln.",
"pendingCount": "{{count}} Posten",
"pendingCount_other": "{{count}} Posten",
"billPending": "Verrechnen",
"bundledToast": "{{count}} Weiterverrechnung zu einer Rechnung gebündelt.",
"bundledToast_other": "{{count}} Weiterverrechnungen zu einer Rechnung gebündelt."
},
"expense": {
"kind": "Art",
"km": "Kilometer",
"days": "Tage",
"rate": "Satz",
"rateDefault": "Standard {{rate}} — leer lassen, um ihn zu verwenden",
"computed": "Betrag",
"who": "Bezahlt von / Lieferant",
"whoHint": "z. B. Mitarbeitername oder Geschäft",
"proof": "Beleg",
"proofRequired": "Ein Beleg ist erforderlich.",
"proofExisting": "Es ist bereits ein Beleg angehängt — neuen hochladen, um ihn zu ersetzen.",
"viewProof": "Beleg"
},
"expenseKind": {
"amount": "Betrag",
"mileage": "Kilometer (km)",
"per_diem": "Spesenpauschale"
},
"category": {
"infrastructure": "Infrastruktur & Miete",
"equipment": "Equipment & Hardware",
"software": "Software & Lizenzen",
"material": "Material & Verbrauch",
"travel": "Reise & Spesen",
"marketing": "Werbung & Marketing",
"services": "Dienstleistungen/Fremdleistungen",
"insurance": "Versicherungen & Gebühren",
"training": "Weiterbildung",
"other": "Sonstiges"
},
"ledger": {
"allStatuses": "Alle Status",
"allDispositions": "Alle Zuordnungen",
"allKinds": "Alle Arten",
"empty": "Noch keine Aufwände — oben einen hinzufügen.",
"untitled": "Aufwand",
"invoiceLink": "Rechnung",
"paid": "Bezahlt",
"markPaid": "Als bezahlt markieren",
"markPaidTitle": "Lieferant als bezahlt markieren",
"paidDate": "Zahldatum",
"method": "Methode",
"reference": "Referenz (optional)",
"confirmPaid": "Als bezahlt markieren",
"paidToast": "Als bezahlt markiert.",
"unpaidToast": "Als nicht bezahlt markiert.",
"addExpense": "Aufwand hinzufügen",
"addTitle": "Aufwand hinzufügen",
"editTitle": "Aufwand bearbeiten",
"updatedToast": "Aufwand aktualisiert.",
"payTitle": "Aufwand als bezahlt markieren",
"invoiced": "Verrechnet",
"invoicedToast": "Zu einer Kundenrechnung hinzugefügt.",
"invoiceTitle": "Zur Kundenrechnung hinzufügen",
"invoiceHint": "Erstellt eine verrechenbare Position auf der nächsten geplanten Rechnung des Kunden und sperrt den Aufwand für weitere Änderungen.",
"addToInvoice": "Zur Rechnung hinzufügen",
"locked": "Gesperrt",
"lockedHint": "Gesperrt — dieser Aufwand ist auf einer Kundenrechnung.",
"description": "Beschreibung",
"descriptionHint": "z. B. Kilometer, Spesenpauschale, Barbeleg",
"createdToast": "Aufwand hinzugefügt."
}
},
"projects": {
"title": "Projektübersicht",
"subtitle": "Fasse Events zu Projekten zusammen und sieh jede E-Mail, jedes Dokument, jede Galerie und jede Stunde in einem Cockpit.",
"search": "Nach Name oder Kunde suchen…",
"empty": "Noch keine Projekte. Erstelle oben eines, oder vorhandene Events wurden automatisch gruppiert.",
"notFound": "Projekt nicht gefunden",
"backToList": "Alle Projekte",
"noCustomer": "Kein einzelner Kunde",
"rename": "Umbenennen",
"timeline": "Meilensteine",
"eventCount": "{{count}} Events",
"totalHours": "{{hours}} erfasst",
"create": {
"label": "Name des neuen Projekts",
"placeholder": "z. B. Hochzeit Müller 2026",
"button": "Projekt erstellen"
},
"col": {
"name": "Projekt",
"customer": "Kunde",
"events": "Events",
"value": "Wert",
"status": "Status",
"updated": "Aktualisiert"
},
"picker": {
"label": "Projekt",
"none": "Kein Projekt"
},
"value": {
"label": "Projektwert",
"paid": "bezahlt"
},
"events": {
"title": "Events",
"none": "Diesem Projekt sind noch keine Events zugeordnet.",
"searchPlaceholder": "Event zuordnen — nach Name suchen…",
"attached": "Event zugeordnet",
"attachFailed": "Event konnte nicht zugeordnet werden"
},
"feed": {
"title": "Aktivität",
"empty": "Diesem Projekt ist noch nichts zugeordnet.",
"email": "E-Mail",
"quote": "Angebot",
"contract": "Vertrag",
"invoice": "Rechnung",
"gallery": "Galerie",
"hours": "Stunden"
},
"email": {
"preview": "Vorschau",
"resend": "Erneut senden",
"sendNow": "Jetzt senden",
"cancel": "Abbrechen",
"retry": "Wiederholen",
"previewTitle": "E-Mail-Vorschau",
"noPreview": "Keine gespeicherte Vorschau für diese E-Mail — sie wurde gesendet, bevor Vorschauen erfasst wurden.",
"reRendered": "Neu gerendert aus der aktuellen Vorlage — diese E-Mail wurde gesendet, bevor Vorschauen erfasst wurden, und kann daher leicht von der tatsächlich versendeten abweichen.",
"reRenderedTag": "≈ neu gerendert"
},
"toast": {
"created": "Projekt erstellt",
"createFailed": "Projekt konnte nicht erstellt werden",
"saved": "Projekt gespeichert",
"saveFailed": "Speichern fehlgeschlagen",
"emailAction": "Erledigt",
"emailActionFailed": "Aktion fehlgeschlagen",
"previewFailed": "Vorschau konnte nicht geladen werden"
},
"error": {
"customerMismatch": "Das gehört zu einem anderen Kunden als dieses Projekt."
}
},
"calendar": {
"pageTitle": "Kalender",
"subtitle": "Termine, erfasste Stunden und offene Angebote/Verträge in einer Ansicht.",
"viewMonth": "Monat",
"viewWeek": "Woche",
"loading": "Einträge werden geladen…",
"legend": {
"events": "Termine",
"hours": "Stunden",
"pendingQuotes": "Offene Angebote",
"pendingContracts": "Offene Verträge",
"hoursLocked": "Gesperrt (abgerechnet)"
},
"hourEntry": {
"createTitle": "Stunden erfassen",
"customerLabel": "Kunde",
"customerSearch": "Nach E-Mail oder Firma suchen…",
"descriptionLabel": "Beschreibung (optional)",
"descriptionPlaceholder": "Bearbeitung / Shooting / Anreise…",
"startLabel": "Start",
"endLabel": "Ende",
"submit": "Stunden speichern",
"saving": "Speichern…",
"cancel": "Abbrechen",
"close": "Schließen",
"delete": "Löschen",
"confirmDelete": "Diese erfassten Stunden löschen? Das kann nicht rückgängig gemacht werden.",
"created": "Stunden erfasst.",
"createFailed": "Speichern fehlgeschlagen: {{message}}",
"saved": "Stunden aktualisiert.",
"saveFailed": "Speichern fehlgeschlagen: {{message}}",
"movedToast": "Stunden aktualisiert.",
"moveFailed": "Verschieben fehlgeschlagen: {{message}}",
"resizedToast": "Stunden aktualisiert.",
"resizeFailed": "Größe ändern fehlgeschlagen: {{message}}",
"deleted": "Stunden gelöscht.",
"deleteFailed": "Löschen fehlgeschlagen: {{message}}",
"lockedBadge": "Gesperrt",
"featureOffToast": "Stundenerfassung ist deaktiviert.",
"lockedTooltip": "Bereits abgerechnet — Rechnung stornieren, um zu bearbeiten.",
"noDescription": "Keine Beschreibung.",
"untitledCustomer": "Stunden"
}
},
"hoursLogging": {
"title": "Stundenerfassung",
"subtitle": "Kunden wählen und abrechenbare Zeit erfassen. Einträge fließen in die nächste Monatsrechnung oder werden für Per-Event-Kunden auf Knopfdruck abgerechnet.",
"pickCustomer": "Kunde",
"pickPlaceholder": "— Kunde wählen —",
"emptyList": "Noch keine Kunden mit aktivierter Stundenerfassung. Aktivieren Sie „Stundenerfassung“ zuerst auf der Kundendetailseite.",
"searchPlaceholder": "Nach E-Mail oder Firma suchen…",
"customerLoggingDisabled": "Bei diesem Kunden ist die Stundenerfassung deaktiviert. Aktiviere sie auf der Kundendetailseite, um Stunden zu erfassen.",
"openHours": {
"title": "Offene Stunden über alle Kunden",
"subtitle": "Noch nicht abgerechnete Zeitblöcke. Oben einen Kunden wählen oder auf eine Zeile klicken, um Details zu öffnen.",
"empty": "Aktuell keine offenen Stunden alles abgerechnet oder noch keine Zeit erfasst.",
"entryLine_one": "{{count}} Eintrag · {{hours}} Std.",
"entryLine_other": "{{count}} Einträge · {{hours}} Std.",
"passive": "Passiv",
"needsRate": "Kein Satz hinterlegt"
}
},
"crmDev": {
"title": "CRM-Entwicklung",
"subtitle": "Interne Werkzeuge zur Überprüfung von CRM-Abläufen. Standardmäßig ausgeblendet — Aktivierung über Einstellungen → Funktionen → Entwicklung.",
"warning": "Diese Werkzeuge lösen echte Nebeneffekte aus (E-Mails, Statusänderungen). Nur gegen Testdaten verwenden.",
"envDisabled": {
"title": "Entwicklungs-Tools durch Umgebungsschutz blockiert",
"body": "Setze PICPEAK_ENABLE_DEV_TOOLS=1 in der Backend-Env-Datei und starte den Server neu. Der Funktions-Schalter allein reicht nicht — dies ist eine bewusste Produktiv-Schutzschicht.",
"cardHint": "E-Mail-Vorlagen können nicht geladen werden, solange der Entwicklungs-Tools-Umgebungsschutz nicht geöffnet ist."
},
"paymentCheck": {
"title": "Zahlungsprüfung-E-Mail testen (echte Rechnung)",
"help": "Sendet die Admin-Zahlungsprüfung-E-Mail für eine echte gesendete/überfällige Rechnung und umgeht dabei die 24-Stunden-Sperre. Die drei Buttons in der E-Mail enthalten echte signierte Tokens — ein Klick verändert den Rechnungsstatus.",
"selectInvoice": "Gesendete oder überfällige Rechnung",
"selectPlaceholder": "— Rechnung auswählen —",
"noneAvailable": "Keine gesendeten oder überfälligen Rechnungen vorhanden.",
"send": "Test-E-Mail senden",
"sending": "Wird eingereiht …",
"sentToast": "Test-E-Mail eingereiht. Bitte das Postfach des Empfängers prüfen."
},
"templates": {
"title": "Beliebige CRM-E-Mail an mich senden (Mock-Daten)",
"help": "Reiht die gewählte Vorlage mit Platzhalterwerten an die eigene Admin-Adresse ein. Wenn die Installation echte Angebote/Rechnungen enthält, wird das passende PDF angehängt, damit die vollständige Ausgabe geprüft werden kann.",
"notSeeded": "Nicht eingespielt",
"send": "An mich senden",
"sending": "Wird eingereiht …",
"sentToast": "Eingereiht an {{to}}.",
"empty": "Keine CRM-E-Mail-Vorlagen gefunden — bitte Migrationen ausführen.",
"label": {
"quote_sent": {
"title": "Angebot gesendet (an Kunden)",
"description": "Wird beim Versand eines Angebots ausgelöst — enthält das PDF sowie Annehmen-/Ablehnen-Links."
},
"quote_accepted_customer": {
"title": "Angebot angenommen — Kundenbestätigung",
"description": "Wird an den Kunden gesendet, nachdem er (oder der Admin in seinem Namen) das Angebot angenommen hat. Enthält PDF."
},
"quote_accepted_admin": {
"title": "Angebot angenommen — Admin-Benachrichtigung",
"description": "Benachrichtigt den Admin, dass ein Angebot vom Kunden angenommen wurde."
},
"quote_declined_admin": {
"title": "Angebot abgelehnt — Admin-Benachrichtigung",
"description": "Benachrichtigt den Admin, dass ein Angebot vom Kunden abgelehnt wurde."
},
"invoice_sent": {
"title": "Rechnung gesendet (an Kunden)",
"description": "Wird beim Versand einer Rechnung ausgelöst — enthält das PDF."
},
"invoice_reminder_first": {
"title": "Zahlungserinnerung — erste",
"description": "Erste Erinnerung an den Kunden. Noch keine Mahngebühr."
},
"invoice_reminder_second": {
"title": "Zahlungserinnerung — zweite (mit Mahngebühr)",
"description": "Zweite Erinnerung mit zusätzlicher Mahngebühr."
},
"invoice_payment_check_admin": {
"title": "Zahlungsprüfung (Admin)",
"description": "Admin-E-Mail mit drei Buttons, die signierte Tokens enthalten."
},
"contract_sent": {
"title": "Vertrag gesendet (an Kunden)",
"description": "Versand Admin → Kunde mit dem unsignierten Vertrags-PDF im Anhang."
},
"contract_signed_admin_notification": {
"title": "Vertrag unterzeichnet — Admin-Benachrichtigung",
"description": "Rückmeldung an den Admin, nachdem der Kunde unterzeichnet hat. Ohne Anhang."
},
"contract_fully_signed": {
"title": "Vertrag beidseitig unterzeichnet",
"description": "Beidseitiger Versand, sobald beide Unterschriften vorliegen. Gestempeltes Vertrags-PDF im Anhang."
},
"event_reminder_default": {
"title": "Event-Erinnerung — Standard (Fallback)",
"description": "Vor-Event-Erinnerung, wenn keine kategoriespezifische Vorlage zutrifft."
},
"event_reminder_wedding": {
"title": "Event-Erinnerung — Hochzeit",
"description": "Vor-Event-Erinnerung für Events mit event_type=wedding."
},
"event_reminder_birthday": {
"title": "Event-Erinnerung — Geburtstag",
"description": "Vor-Event-Erinnerung für Events mit event_type=birthday."
},
"event_reminder_corporate": {
"title": "Event-Erinnerung — Firma",
"description": "Vor-Event-Erinnerung für Events mit event_type=corporate."
},
"event_reminder_other": {
"title": "Event-Erinnerung — Sonstiges",
"description": "Vor-Event-Erinnerung für Events mit event_type=other."
}
}
}
},
"ledger": {
"intro": "Dient nur dem Treuhänder-Export — picpeak führt keine doppelte Buchhaltung. Der vorbelegte Kontenplan + die MWST-Codes folgen dem Schweizer/LI KMU-Kontenrahmen; passe sie an das Setup deines Treuhänders an.",
"settingsSaved": "Zuordnungen gespeichert.",
"saveDefaults": "Zuordnungen speichern",
"accountType": {
"asset": "Aktiven",
"liability": "Passiven",
"equity": "Eigenkapital",
"revenue": "Ertrag",
"expense": "Aufwand"
},
"vatDirection": {
"input": "Vorsteuer",
"output": "Umsatzsteuer"
},
"defaults": {
"title": "Standard- & Systemkonten",
"none": "— keines —",
"ledger_account_debitoren": "Forderungen (Debitoren)",
"ledger_account_kreditoren": "Verbindlichkeiten (Kreditoren)",
"ledger_account_bank": "Bank",
"ledger_account_cash": "Kasse",
"ledger_account_default_revenue": "Standard-Ertragskonto",
"ledger_account_default_expense": "Standard-Aufwandkonto",
"ledger_account_mileage": "Kilometer-Konto",
"ledger_account_per_diem": "Spesenpauschalen-Konto",
"ledger_account_rebilled_revenue": "Weiterverrechnete Spesen (Ertrag)"
},
"vatMap": {
"title": "MWST-Code nach steuerlicher Behandlung (Kosten)"
},
"outputVatMap": {
"title": "MWST-Code nach Umsatzsatz",
"empty": "Fügen Sie oben Ausgangs-MWST-Codes hinzu, um pro Umsatzsatz einen Code festzulegen."
},
"categoryMap": {
"title": "Aufwandkategorie → Konto"
},
"accounts": {
"title": "Kontenplan"
},
"vatCodes": {
"title": "MWST-Codes"
},
"account": {
"addTitle": "Konto hinzufügen",
"editTitle": "Konto bearbeiten",
"number": "Kontonummer",
"name": "Name",
"type": "Art",
"confirmDelete": "Dieses Konto löschen?"
},
"vat": {
"addTitle": "MWST-Code hinzufügen",
"editTitle": "MWST-Code bearbeiten",
"code": "Code",
"name": "Name",
"rate": "Satz %",
"direction": "Richtung",
"account": "MWST-Konto",
"noAccount": "— keines —",
"confirmDelete": "Diesen MWST-Code löschen?",
"legacyRate": "{{rate}}% (nicht konfiguriert)"
},
"export": {
"title": "Treuhänder-Export",
"intro": "Lade das Sammeljournal (Erträge + Kosten als periodengerechte Buchungssätze mit Konto- und MWST-Codes) zum Import in die Buchhaltungssoftware deines Treuhänders herunter.",
"format": "Zielsoftware",
"format_generic": "Generisch (alle Spalten)",
"format_banana": "Banana — doppelte Buchhaltung",
"format_banana_ie": "Banana — Einnahmen/Ausgaben",
"format_bexio": "bexio",
"download": "CSV herunterladen",
"failed": "Export fehlgeschlagen.",
"disclaimer": "Nur periodengerecht (Belegdaten) — Zahlungen/Bankbewegungen sind nicht enthalten. Konto- + MWST-Codes folgen deiner Kontenplan-Zuordnung. Den Import vor der Einreichung immer mit dem Treuhänder prüfen."
}
},
"taxReport": {
"title": "Steuerliste",
"intro": "Periodenbezogene Umsatzliste mit Netto- und MwSt-Aufschlüsselung, gruppiert nach MwSt-Satz. Stornierte Rechnungen bleiben für die lückenlose Nummernfolge sichtbar, sind aber nicht in den Summen enthalten.",
"filters": {
"period": "Zeitraum",
"thisYear": "Dieses Jahr",
"lastYear": "Letztes Jahr",
"thisQuarter": "Dieses Quartal",
"lastQuarter": "Letztes Quartal",
"custom": "Benutzerdefiniert",
"from": "Von",
"to": "Bis",
"currency": "Währung"
},
"exportPdf": "PDF exportieren",
"ledgerExport": "Treuhänder-Export",
"ledgerExportHint": "Buchungssätze für Ihren Treuhänder, abgebildet über Ihren Kontenplan.",
"ledgerExportConfigure": "Einrichten →",
"export": {
"reportTitle": "Bericht",
"reportHint": "Lesbare Liste — für Ihre Unterlagen.",
"scopeLabel": "Umfang",
"scopeAll": "Vollständig",
"scopeIncome": "Nur Einnahmen",
"scopeCost": "Nur Kosten",
"journalTitle": "Buchungsjournal"
},
"exportCsv": "CSV exportieren",
"exportFailed": "Export fehlgeschlagen. Bitte erneut versuchen.",
"errorTitle": "Steuerliste konnte nicht geladen werden",
"empty": "Keine Rechnungen in diesem Zeitraum.",
"statusCancelled": "Storniert",
"totalsByVatRate": "Summen nach MwSt-Satz",
"grandTotalNet": "Gesamt Netto",
"grandTotalVat": "Gesamt MwSt.",
"grandTotalGross": "Gesamt Brutto",
"cancelledFootnote": "{{count}} stornierte Rechnung(en) — Beträge nicht in den Summen enthalten (für lückenlose Nummernfolge dargestellt).",
"skontoTooltip": "Mit Skonto bezahlt",
"costsTitle": "Kosten (Eingangsrechnungen + Spesen)",
"costsDisclaimer": "Diese Einnahmen-Ausgaben-Übersicht ist eine Orientierungshilfe für Ihre Aufzeichnungen (Milchbüchleinrechnung). Vorsteuerabzug und Ergebnis hängen von der steuerlichen Behandlung jeder Kostenposition ab — vor der Einreichung mit Ihrem Treuhänder / der Steuerverwaltung prüfen.",
"summary": {
"outgoingTitle": "Ausgangsrechnungen",
"title": "Einnahmen / Ausgaben",
"income": "Einnahmen",
"costs": "Ausgaben",
"result": "Ergebnis",
"vatPayable": "MWST-Zahllast (Umsatz- Vorsteuer)",
"vatUnconfigured": "Die MWST-Registrierung ist nicht konfiguriert, daher kann die MWST-Zahllast nicht berechnet werden. Lege sie unter Einstellungen → Buchhaltung fest."
},
"cost": {
"source": "Art",
"sourceIncoming": "Eingang",
"sourceExpense": "Spese",
"supplier": "Lieferant / Beschreibung",
"taxTreatment": "Steuerliche Behandlung",
"company": "Unternehmen",
"total": "Summe Kosten"
},
"type": {
"outgoing": "Ausgangsrechnung",
"incoming": "Eingangsrechnung",
"expense": "Aufwand"
},
"col": {
"date": "Datum",
"invoice": "Rechnung",
"customer": "Kunde",
"event": "Anlass",
"vatRate": "MwSt %",
"net": "Netto",
"vat": "MwSt.",
"total": "Brutto",
"skonto": "Skonto",
"type": "Typ",
"reference": "Referenz",
"party": "Kunde / Lieferant",
"tax": "Steuer"
}
},
"quotes": {
"status": {
"draft": "Entwurf",
"sent": "Gesendet",
"accepted": "Angenommen",
"declined": "Abgelehnt",
"expired": "Abgelaufen",
"converted": "Umgewandelt"
},
"errors": {
"popupBlocked": "Erlauben Sie Pop-ups für diese Seite, um die PDF-Vorschau anzuzeigen.",
"customerRequired": "Bitte zuerst einen Kunden auswählen.",
"customerFeatureDisabled": "Bei diesem Kunden sind Angebote deaktiviert. Aktivieren Sie Angebote zuerst in den Kundendetails."
},
"confirmSend": "Dieses Angebot jetzt an den Kunden senden?",
"sentToast": "Angebot an Kunden gesendet.",
"confirmConvert": "Dieses angenommene Angebot in einen Anlass + geplante Rechnungen umwandeln?",
"convertedToast": "Angebot in Anlass #{{id}} umgewandelt",
"send": "Senden",
"resend": "Erneut senden",
"convert": "In Anlass umwandeln",
"declineOnBehalf": "Im Namen ablehnen",
"declineReasonPrompt": "Dieses Angebot im Namen des Kunden als abgelehnt markieren? Optional einen Grund angeben (leer lassen zum Überspringen).",
"declinedOnBehalfToast": "Angebot als abgelehnt markiert.",
"field": {
"issueDate": "Ausgestellt am",
"validUntil": "Gültig bis",
"eventName": "Anlass",
"eventDate": "Anlassdatum",
"sentAt": "Gesendet am",
"acceptedAt": "Angenommen am",
"declinedAt": "Abgelehnt am",
"declineReason": "Ablehnungsgrund",
"responseWindow": "Antwortfrist",
"eventTimeStart": "Startzeit",
"eventTimeEnd": "Endzeit",
"expectedDuration": "Voraussichtliche Dauer (h)",
"vatRate": "MwSt-Satz %",
"shipping": "Versandkosten",
"currency": "Währung",
"selectPaymentTerm": "— Zahlungsbedingungen wählen —",
"paymentNetDays": "Zahlungsziel",
"paymentTiming": "Zahlungsablauf",
"selectNetDays": "— Zahlungsziel wählen —",
"selectTiming": "— Zahlungsablauf wählen —",
"introText": "Einleitungstext",
"outroText": "Schlusstext",
"ccPdfEmail": "PDF-Kopie an (zusätzlicher Empfänger)",
"ccPdfEmailPlaceholder": "[email protected]",
"ccPdfPickFromAdmins": "Aus Admins auswählen:",
"ccPdfCustom": "Eigene E-Mail-Adresse",
"internalNotes": "Interne Notizen (nicht auf der PDF)"
},
"responseWindowOpen": "Offen bis {{at}}",
"section": {
"lineItems": "Positionen",
"internalNotes": "Interne Notizen",
"customer": "Kunde",
"event": "Anlassdetails",
"payment": "Zahlungsbedingungen",
"extras": "Einleitung / Schluss / Extras"
},
"savedToast": "Angebot als Entwurf gespeichert.",
"edit": "Angebot bearbeiten",
"new": "Neues Angebot",
"preview": "PDF-Vorschau",
"saveAndSend": "Speichern & senden",
"customerSearch": "Kunde nach E-Mail oder Firma suchen…",
"title": "Angebote",
"subtitle": "Angebote versenden, verfolgen und in Anlässe umwandeln.",
"searchPlaceholder": "Nach Nummer, Kunde, Anlass suchen…",
"sort": {
"newest": "Neueste zuerst",
"oldest": "Älteste zuerst",
"customerAsc": "Kunde A→Z",
"valueAsc": "Betrag aufsteigend",
"valueDesc": "Betrag absteigend"
},
"empty": "Noch keine Angebote.",
"table": {
"customer": "Kunde",
"event": "Anlass",
"issueDate": "Ausgestellt",
"total": "Gesamt",
"status": "Status"
},
"pagination": "Seite {{page}} von {{total}} · {{count}} Angebote",
"trigger": {
"quote_accepted": "bei Annahme",
"before_event": "vor dem Anlass",
"after_event": "nach dem Anlass",
"after_delivery": "nach Lieferung",
"fixed_date": "an festem Datum"
}
},
"crm": {
"lineItems": {
"quantity": "Anzahl",
"description": "Beschreibung",
"unitPrice": "Einzelpreis",
"total": "Summe",
"subtotal": "Zwischensumme",
"vat": "MwSt.",
"rounding": "Rundung",
"position": "Pos.",
"discount": "Rabatt %",
"descriptionPlaceholder": "Beschreibung (mehrere Zeilen möglich)",
"saveAsPreset": "Als Vorlage speichern",
"empty": "Noch keine Positionen — fügen Sie eine hinzu, um zu starten.",
"addRow": "Position hinzufügen",
"addFromPreset": "Aus Vorlage hinzufügen…",
"shipping": "Versand",
"addSubItem": "Unterposition hinzufügen",
"detailsAdd": "+ Notiz / Details hinzufügen",
"detailsFilled": "Details",
"detailsPlaceholder": "Optionale Notizen — Kleingedrucktes, Paketinhalte, Bedingungen…",
"autoTotaledHint": "Summe automatisch aus den Unterpositionen berechnet",
"autoTotaledNote": "= Σ Unterpositionen"
}
},
"bills": {
"status": {
"scheduled": "Geplant",
"draft": "Entwurf",
"pending_delivery": "Wartet auf Lieferung",
"sent": "Gesendet",
"paid": "Bezahlt",
"overdue": "Überfällig",
"cancelled": "Storniert",
"skipped": "Übersprungen (leerer Monat)"
},
"field": {
"number": "Rechnung",
"status": "Status",
"dueDate": "Fällig",
"total": "Gesamt",
"issueDate": "Ausgestellt am",
"dueDateOverrideOn": "Manuelles Fälligkeitsdatum — Häkchen entfernen, um es automatisch aus Versanddatum + Zahlungsziel zu berechnen",
"dueDateOverrideOff": "Automatisch aus Versanddatum + Zahlungsziel — ankreuzen, um es manuell zu setzen",
"scheduledSendAt": "Geplanter Versand (optional)",
"installment": "Rate",
"paid": "Bezahlt",
"outstanding": "Offen",
"lateFee": "Mahngebühr",
"qrFormat": "Zahlungs-QR-Format",
"vatRate": "MwSt-Satz %",
"shipping": "Versand",
"currency": "Währung",
"ccPdfEmail": "PDF-Kopie an (zusätzlicher Empfänger)",
"sourceQuote": "Aus Angebot",
"businessBankAccount": "Zahlungskonto",
"bankAccountProfileDefault": "Geschäftsprofil-Standard für {{currency}} verwenden",
"bankAccountDefaultBadge": "(Standard)",
"bankAccountHelp": "Überschreibt den Profil-Standard nur für diese Rechnung. Auf «Standard» belassen, um das passende Konto aus Einstellungen → Geschäftsprofil zu übernehmen.",
"paymentNetDays": "Zahlungsziel",
"paymentTiming": "Zahlungsablauf",
"selectNetDays": "— Zahlungsziel wählen —",
"selectTiming": "— Zahlungsablauf wählen —",
"eventName": "Anlass",
"eventDate": "Anlassdatum",
"eventNamePlaceholder": "z.B. Hochzeit Schmidt 2024",
"eventTimeStart": "Startzeit",
"eventTimeEnd": "Endzeit",
"customer": "Kunde",
"invoiceNumber": "Rechnungsnummer",
"paidAmount": "Bereits bezahlt (optional)",
"pdfFile": "PDF-Datei",
"ccPdfCustom": "Eigene E-Mail-Adresse",
"ccPdfEmailPlaceholder": "[email protected]",
"ccPdfPickFromAdmins": "Aus Admin-Liste wählen:",
"paymentTermHelp": "Zahlungsziel + Skonto für diese Rechnung. Leer lassen, um die Werte vom Quell-Angebot oder den globalen CRM-Standardwerten zu übernehmen.",
"skontoDisabled": "Skonto für diese Rechnung deaktivieren (unterdrückt den Skonto-Block im PDF sowie die „Mit Skonto bezahlt“-Buttons in der Admin-E-Mail / im Zahlung-erfassen-Dialog).",
"sourceContract": "Vom Vertrag"
},
"import": "Historische Rechnung importieren",
"importTitle": "Historische Rechnung importieren",
"importHelp": "Hänge ein PDF aus einem früheren Abrechnungssystem an. Der Kunde sieht dieses Originaldokument in seinem Portal — picpeak erzeugt es nicht neu.",
"importedToast": "Rechnung importiert.",
"importError": "Import fehlgeschlagen",
"importing": "Importiere…",
"noMatch": "Keine Treffer",
"title": "Rechnungen",
"subtitle": "Rechnungen planen, versenden, Zahlungen erfassen und überfällige Rechnungen mahnen.",
"new": "Neue Rechnung",
"searchPlaceholder": "Nach Nummer oder Kunde suchen…",
"sort": {
"newest": "Neueste zuerst",
"dueAsc": "Fällig zuerst",
"dueDesc": "Fällig zuletzt",
"customerAsc": "Kunde A→Z",
"valueAsc": "Betrag aufsteigend",
"valueDesc": "Betrag absteigend"
},
"filter": {
"unpaidOnly": "Nur unbezahlt"
},
"empty": "Noch keine Rechnungen.",
"table": {
"customer": "Kunde",
"event": "Anlass",
"installment": "Rate",
"issueDate": "Ausgestellt",
"dueDate": "Fällig",
"total": "Gesamt",
"status": "Status"
},
"errors": {
"popupBlocked": "Erlauben Sie Pop-ups für diese Seite, um die PDF-Vorschau anzuzeigen.",
"customerRequired": "Bitte zuerst einen Kunden auswählen."
},
"confirmSend": "Diese Rechnung jetzt an den Kunden senden?",
"sentToast": "Rechnung an Kunden gesendet.",
"confirmRelease": "Fotos jetzt als geliefert markieren und Rechnung an den Kunden senden?",
"releaseForDelivery": "Geliefert markieren & senden",
"releasedToast": "Lieferungs-Rechnung gesendet.",
"monthlyDraftBadge": "Monats-Entwurf — wird am Stichtag des Kunden oder über „Rechnung jetzt ausstellen“ verschickt",
"confirmReminder": "Zahlungserinnerung jetzt senden?",
"reminderToast": "Zahlungserinnerung gesendet.",
"confirmCancel": "Diese Rechnung wirklich stornieren? Sie wird ausgegraut und kann nicht mehr bearbeitet werden.",
"confirmCancelDraft": "Diesen Rechnungsentwurf verwerfen? Es wird kein Dokument an den Kunden gesendet.",
"confirmCancelIssued": "Es wird eine Stornorechnung erzeugt und sofort an den Kunden gesendet. Dies kann nicht rückgängig gemacht werden. Fortfahren?",
"cancelledToast": "Rechnung storniert.",
"cancelledWithStornoToast": "Rechnung storniert — Stornorechnung an den Kunden gesendet.",
"confirmReissue": "Für diese Rechnung wird eine Stornorechnung an den Kunden gesendet, und ein neuer Entwurf mit den gleichen Positionen wird angelegt. Die neue Rechnung verweist auf diese als „Ersetzt R-XXXX“. Fortfahren?",
"confirmReissueCancelled": "Eine neue Rechnung mit denselben Positionen anlegen, verknüpft mit dieser stornierten Rechnung?",
"reissuedToast": "Rechnung neu ausgestellt — Entwurf wird geöffnet.",
"reissuedWithStornoToast": "Stornorechnung erzeugt — Entwurf wird geöffnet.",
"reissue": "Neu ausstellen",
"cancelAndReissue": "Stornieren & neu ausstellen",
"kind": {
"storno": "Stornorechnung",
"reissue": "Neu ausgestellt"
},
"stornoCancelsLabel": "Diese Stornorechnung hebt Rechnung auf:",
"cancelledByStornoLabel": "Diese Rechnung wurde aufgehoben durch Stornorechnung",
"paymentRecordedToast": "Zahlung erfasst.",
"sendNow": "Jetzt senden",
"resend": "Erneut senden",
"markPaid": "Als bezahlt markieren",
"sendReminder": "Erinnerung senden",
"section": {
"lineItems": "Positionen",
"paymentLog": "Zahlungsverlauf",
"customer": "Kunde",
"event": "Anlassdetails",
"details": "Details",
"payment": "Zahlungsbedingungen"
},
"noPayments": "Noch keine Zahlungen erfasst.",
"payment": {
"paidAt": "Bezahlt am",
"amount": "Betrag",
"date": "Zahlungsdatum",
"method": "Methode",
"reference": "Referenz",
"notes": "Notizen",
"methodPlaceholder": "Methode wählen…",
"methods": {
"bankTransfer": "Überweisung",
"card": "Karte",
"cash": "Bar",
"paypal": "PayPal",
"twint": "TWINT"
},
"withSkonto": "Mit Skonto bezahlt ({{percent}}% Rabatt)"
},
"recordPayment": "Zahlung erfassen",
"savedToast": "Rechnung gespeichert.",
"savedToastMulti": "{{n}} Rechnungen erstellt.",
"saveAndSpawn": "{{n}} Rechnungen erstellen",
"edit": "Rechnung bearbeiten",
"customerSearch": "Kunde nach E-Mail oder Firma suchen…",
"qrFormat": {
"none": "Keiner (Override)",
"swiss": "Swiss QR-Bill",
"epc": "EPC QR (SEPA)",
"profileDefault": "Standard aus Geschäftsprofil verwenden"
}
},
"businessProfile": {
"savedToast": "Geschäftsprofil gespeichert.",
"movedToAccounting": "MwSt-Satz, MwSt-Bezeichnung und Standard-Stundensatz befinden sich jetzt unter Einstellungen → Buchhaltung.",
"title": "Geschäftsprofil",
"subtitle": "Briefkopf, Kontaktdaten und Standardwerte für Angebote und Rechnungen.",
"businessHours": {
"title": "Geschäftszeiten",
"subtitle": "Öffnungszeiten je Wochentag festlegen — für eine Mittagspause einfach einen zweiten Block hinzufügen. Werden in der oben gewählten Zeitzone interpretiert ({{tz}}).",
"closed": "Geschlossen",
"addHours": "Zeiten hinzufügen",
"addBlock": "Weiteren Block hinzufügen",
"copyToAll": "Auf alle Tage übertragen",
"startTime": "Öffnungszeit",
"endTime": "Schließzeit",
"floorToggle": "Geplante E-Mails bis zu den Geschäftszeiten zurückhalten",
"floorToggleHelp": "Wenn aktiv, wird eine automatische E-Mail, die außerhalb der obigen Zeiten geplant ist, erst zur nächsten Öffnungszeit zugestellt statt zu einer ungünstigen Uhrzeit. Wenn aus, werden geplante E-Mails exakt zum geplanten Zeitpunkt versendet.",
"weekday": {
"1": "Montag",
"2": "Dienstag",
"3": "Mittwoch",
"4": "Donnerstag",
"5": "Freitag",
"6": "Samstag",
"7": "Sonntag"
}
},
"section": {
"company": "Firma",
"contact": "Kontakt",
"defaults": "Standardwerte",
"banks": "Bankverbindungen"
},
"field": {
"companyName": "Firmenname",
"vatId": "USt-IdNr.",
"taxId": "Steuernummer",
"addressLine1": "Adresszeile 1",
"addressLine2": "Adresszeile 2",
"postalCode": "PLZ",
"city": "Ort",
"state": "Kanton / Bundesland",
"countryCode": "Land",
"phone": "Telefon",
"mobile": "Mobil",
"email": "E-Mail",
"website": "Webseite",
"defaultCurrency": "Standardwährung",
"defaultLocale": "Standardsprache",
"timezone": "Zeitzone (IANA)",
"defaultQrFormat": "Standard-QR-Format",
"footerLine": "Fusszeile"
},
"qrFormat": {
"none": "Kein QR",
"swiss": "Swiss QR-Bill",
"epc": "EPC QR (SEPA)"
},
"bankCreatedToast": "Bankverbindung hinzugefügt.",
"bankDeletedToast": "Bankverbindung gelöscht.",
"addBank": "Bankverbindung hinzufügen",
"bank": {
"label": "Bezeichnung",
"accountHolder": "Kontoinhaber",
"currency": "Währung",
"isDefault": "Standard",
"makeDefault": "Als Standard",
"confirmDelete": "Diese Bankverbindung wirklich löschen?"
},
"noBanks": "Noch keine Bankverbindungen hinterlegt."
},
"crmSettings": {
"savedToast": "CRM-Einstellungen gespeichert.",
"title": "CRM-Einstellungen",
"subtitle": "Standardwerte für Angebote und Rechnungen.",
"emptyState": "Aktuell sind keine CRM-Funktionen aktiv. Aktiviere Angebote, Rechnungen oder Verträge unter Einstellungen → Features, damit die passenden Konfigurationen hier erscheinen.",
"section": {
"quotes": "Angebote",
"invoices": "Rechnungen",
"paymentDefaults": "Standard-Zahlungsbedingungen",
"installmentDefaults": "Standard-Trigger für Teilzahlungen",
"contracts": "Verträge",
"quotesTos": "AGB-Schritt",
"dashboardOverview": "CRM-Übersicht im Dashboard",
"dashboardOverviewHint": "CRM-Übersichtskacheln im Admin-Dashboard ausblenden. Alle Kacheln werden standardmäßig angezeigt; zum Ausblenden abwählen."
},
"installmentDefaults": {
"help": "Vorbelegung der Trigger für neue Zeilen im Teilzahlungs-Panel. Pro-Dokument-Anpassungen überschreiben; bestehende Dokumente behalten ihren gespeicherten Plan.",
"trigger": {
"quote_accepted": "Bei Unterzeichnung / Erstellung",
"before_event": "Vor dem Anlass",
"after_event": "Nach dem Anlass",
"after_delivery": "Bei Lieferung (manuelle Freigabe)",
"fixed_date": "Festes Datum"
}
},
"paymentDefaults": {
"help": "Wird bei jeder neuen Rechnung und jedem Angebot vorausgewählt. Im Editor lässt sich pro Dokument eine andere Kombination wählen.",
"none": "— Kein Standard —"
},
"crm_invoices_default_payment_net_days_template_id": {
"label": "Standard-Zahlungsziel"
},
"crm_invoices_default_payment_timing_template_id": {
"label": "Standard-Zahlungsablauf"
},
"crm_quotes_accept_window_minutes": {
"label": "Antwortfrist nach Versand (Minuten)"
},
"crm_quotes_default_valid_days": {
"label": "Standard-Gültigkeit Angebot (Tage)"
},
"crm_quotes_number_format": {
"label": "Format Angebotsnummer"
},
"crm_invoices_reminder_first_days": {
"label": "Erste Mahnung nach (Tagen)"
},
"crm_invoices_reminder_second_days": {
"label": "Zweite Mahnung nach (Tagen)"
},
"crm_invoices_late_fee_minor": {
"label": "Mahngebühr (Rappen / Cent)"
},
"crm_invoices_late_fee_type": {
"label": "Art der Mahngebühr"
},
"crm_invoices_late_fee_percent": {
"label": "Mahngebühr (% der Rechnung)"
},
"lateFeeType": {
"flat": "Fester Betrag (Rappen)",
"percent": "Prozentsatz der Rechnung"
},
"lateFeeAgb": {
"title": "Mahngebühren müssen in den AGB stehen",
"body": "Vertragliche Pflicht: Sätze wie „Es werden Mahnspesen erhoben“ reichen nicht aus. In den AGB muss die konkrete Gebühr klar beziffert sein (z.B. „CHF 20 ab der 2. Mahnung“). Mit dem Treuhänder prüfen."
},
"dunningMoved": {
"title": "Der Mahnrhythmus liegt jetzt in den Workflows",
"body": "Wann und wie oft Zahlungserinnerungen für überfällige Rechnungen verschickt werden, wird im Workflow „Rechnungsmahnung“ festgelegt. Die Mahngebühren unten gelten weiterhin.",
"link": "Workflows öffnen"
},
"crm_invoices_late_fee_label": {
"label": "Bezeichnung Mahngebühr"
},
"crm_invoices_skonto_percent_default": {
"label": "Standard-Skonto %"
},
"crm_invoices_skonto_business_days": {
"label": "Skonto-Frist (Werktage)"
},
"crm_invoices_installment_trigger_first": {
"label": "Trigger erste Teilzahlung"
},
"crm_invoices_installment_days_before_event": {
"label": "Tage vor dem Anlass (mittlere Teilzahlung)"
},
"crm_invoices_installment_days_after_event": {
"label": "Tage nach dem Anlass (letzte Teilzahlung)"
},
"crm_invoices_number_format": {
"label": "Format Rechnungsnummer"
},
"crm_quotes_pdf_attachment_enabled": {
"label": "PDF an E-Mail anhängen (Angebote)"
},
"crm_quotes_skonto_enabled": {
"label": "Skonto auf Angeboten aktivieren"
},
"crm_invoices_qr_enabled": {
"label": "Zahlungs-QR auf Rechnungen aktivieren"
},
"crm_invoice_round_total": {
"label": "Rappenrundung auf einen sauberen Gesamtbetrag ausgleichen (fügt eine \"Rundung\"-Zeile hinzu, wenn die zeilenweise Rundung von Menge × Preis abweicht)"
},
"crm_invoices_reminders_enabled": {
"label": "Automatische Mahnungen aktivieren"
},
"crm_invoices_late_fee_enabled": {
"label": "Mahngebühr ab der 2. Mahnung (jede weitere Mahnung)"
},
"crm_quotes_tos_required": {
"label": "Kunden müssen „Ich akzeptiere die AGB“ ankreuzen, bevor sie annehmen können"
},
"crm_quotes_tos_url": {
"label": "AGB-URL (optional)"
},
"crm_quotes_tos_text": {
"label": "AGB-Text, der auf der Angebotsseite angezeigt wird",
"placeholder": "Fügen Sie hier die Vertragsbedingungen ein. Nur Text. Leer lassen, um nur Häkchen + URL anzuzeigen."
},
"crm_contracts_pdf_attachment_enabled": {
"label": "Vertrags-PDF an E-Mail anhängen"
},
"crm_contracts_require_drawn_signature": {
"label": "Gezeichnete Unterschrift verlangen (getippter Name allein genügt nicht)"
},
"crm_contracts_allow_pdf_upload": {
"label": "Kunden erlauben, eine handsignierte PDF hochzuladen"
},
"crm_contracts_store_ip": {
"label": "IP-Adresse des Unterzeichners speichern (empfohlen — stützendes Beweismittel in Zivilstreitigkeiten)",
"help": "Wenn deaktiviert, wird die IP-Adresse von Kunde und Admin zum Signaturzeitpunkt NICHT in der Vertragszeile oder der öffentlichen Signaturseiten-Bestätigung erfasst. Nach dem DSGVO-Grundsatz der Datenminimierung bevorzugen das manche Betreiber — die IP ist jedoch ein stützendes Identitätsmerkmal, falls der Vertrag angefochten wird, daher empfehlen wir, sie aktiviert zu lassen."
},
"crm_contracts_default_valid_days": {
"label": "Unterzeichnungsfrist (Tage)"
},
"crm_contracts_number_format": {
"label": "Vertragsnummern-Format",
"help": "Unterstützte Platzhalter: {YEAR}, {MONTH}, {SEQ:04d}. Beispiel: LBM-C-{YEAR}-{SEQ:04d} → LBM-C-2026-0001."
},
"crm_overview_show_revenue": {
"label": "Umsatz-Kacheln (30 / 90 / 365 Tage)"
},
"crm_overview_show_outstanding": {
"label": "Kachel offene Zahlungen"
},
"crm_overview_show_quotes": {
"label": "Angebots-Pipeline (nach Status)"
},
"crm_overview_show_invoices": {
"label": "Rechnungs-Pipeline (nach Status)"
}
},
"quoteResponse": {
"notFound": "Angebot nicht gefunden",
"notFoundBody": "Dieser Angebotslink ist nicht mehr gültig.",
"locked": "Dieses Angebot kann nicht mehr beantwortet werden.",
"title": "Angebot",
"event": "Anlass",
"issueDate": "Ausgestellt am",
"validUntil": "Gültig bis",
"description": "Beschreibung",
"qty": "Anzahl",
"unit": "Einzelpreis",
"total": "Gesamt",
"subtotal": "Zwischensumme",
"vat": "MwSt.",
"acceptedLocked": "Dieses Angebot wurde bereits angenommen.",
"declinedLocked": "Dieses Angebot wurde abgelehnt.",
"cannotRespond": "Es ist nicht mehr möglich, auf dieses Angebot zu antworten.",
"changeWithin": "Sie können Ihre Antwort innerhalb von {{minutes}} Minuten ändern.",
"intro": "Vielen Dank für Ihre Anfrage. Bitte prüfen Sie das folgende Angebot und antworten Sie unten.",
"accept": "Angebot annehmen",
"decline": "Angebot ablehnen"
},
"reminderTemplates": {
"title": "Erinnerungs-E-Mails vor dem Anlass",
"scheduleMoved": {
"title": "Der Versandzeitpunkt liegt jetzt in den Workflows",
"body": "Ob Erinnerungen vor dem Anlass verschickt werden und wie viele Tage vorher, wird im Workflow „Erinnerung vor dem Anlass“ festgelegt. Auf dieser Seite werden die E-Mail-Vorlagen bearbeitet; anlassspezifische Überschreibungen bleiben auf der jeweiligen Anlass-Detailseite.",
"link": "Workflows öffnen"
},
"globalSection": "Globales Verhalten",
"globalHelp": "Standardmässig aus — aktiviere, um Erinnerungen zu senden. Der unten gesetzte Offset ist der Standard; jeder Anlass kann ihn auf der Detailseite überschreiben.",
"enableLabel": "Erinnerungs-E-Mails vor dem Anlass senden",
"daysBeforeLabel": "Tage vor dem Anlass",
"saveSettings": "Globale Einstellungen speichern",
"settingsSaved": "Erinnerungs-Einstellungen gespeichert.",
"settingsSaveError": "Erinnerungs-Einstellungen konnten nicht gespeichert werden.",
"sidebarHeading": "Vorlagen",
"sectionTemplates": "Vorlagen",
"defaultLabel": "Standard (Auffang)",
"usesDefault": "Standard",
"usesDefaultTooltip": "Noch keine eigene Vorlage — dieser Anlass-Typ nutzt die Standard-Vorlage. Bearbeite + speichere hier, um eine eigene zu erstellen.",
"willCreateOnSave": "Dieser Anlass-Typ verwendet die Standard-Vorlage. Die Felder unten sind aus der Standard-Vorlage vorbelegt; beim Speichern wird eine eigene Vorlage für diesen Anlass-Typ erstellt.",
"variablesHint": "Verfügbare Variablen: {{customer_name}}, {{event_name}}, {{event_date}}, {{event_type}}, {{days_before}}, {{business_name}} — werden beim Versand der E-Mail ersetzt.",
"subjectLabel": "Betreff",
"subjectPlaceholder": "Betreff der E-Mail",
"bodyLabel": "Text",
"noTranslation": "Noch keine Übersetzung",
"saveTemplate": "Vorlage speichern",
"saved": "Vorlage gespeichert.",
"saveError": "Vorlage konnte nicht gespeichert werden."
},
"eventReminderOverride": {
"title": "Erinnerung vor dem Event",
"save": "Override speichern",
"help": "Event-spezifischer Override für die Kundenerinnerung. Globaler An/Aus-Schalter und Standard-Offset liegen unter Einstellungen → Erinnerungs-E-Mails. Was hier leer bleibt, übernimmt die globale Einstellung bzw. die aufgelöste Vorlage.",
"disabledLabel": "Erinnerung für dieses Event deaktivieren (es wird keine E-Mail verschickt)",
"offsetLabel": "Tage vor dem Event (Override) — leer lassen für Standard",
"offsetPlaceholder": "Leer lassen, um den globalen Standard zu verwenden",
"bodyOverrideLabel": "Eigener Text für dieses Event (überschreibt den Vorlagentext)",
"bodyOverridePlaceholder": "Leer lassen, um den Vorlagentext zu verwenden. Variablen wie {{customer_name}}, {{event_name}}, {{event_date}} funktionieren auch hier.",
"saved": "Erinnerungs-Override gespeichert.",
"saveError": "Erinnerungs-Override konnte nicht gespeichert werden.",
"invalidOffset": "Offset muss eine nicht-negative ganze Zahl oder leer sein."
},
"dealLineage": {
"title": "Verknüpfte Dokumente",
"quotes": "Angebote",
"contracts": "Verträge",
"invoices": "Rechnungen",
"loading": "Verknüpfte Dokumente werden geladen…",
"error": "Verknüpfte Dokumente konnten nicht geladen werden.",
"empty": "Noch keine weiteren Dokumente in diesem Vorgang. Neue Rechnungen, Verträge oder Teilzahlungen erscheinen hier, sobald sie erstellt werden.",
"editPlan": "Plan bearbeiten",
"editPlanModalTitle": "Teilzahlungsplan bearbeiten",
"editPlanHelp": "Den Plan atomar umformen: Prozente, Bezeichnungen, Trigger ändern, Zeilen hinzufügen oder entfernen. Der Plan-Gesamtbetrag bleibt fix; bestehende Rechnungsnummern werden wo möglich beibehalten. Nicht mehr möglich, sobald eine Rechnung versendet wurde.",
"editPlanWarning": "Beim Entfernen von Zeilen werden deren Rechnungsnummern gelöscht (die Nummernfolge kann sie nicht freigeben — §14 UStG-Kontinuitätspflicht). Neue Zeilen vergeben frische Nummern.",
"editPlanSave": "Plan speichern",
"editPlanSuccess": "Teilzahlungsplan aktualisiert.",
"editPlanLocked": "Plan kann nicht mehr bearbeitet werden — mindestens eine Rechnung wurde versendet oder storniert.",
"editPlanPercentSumError": "Prozente müssen sich auf 100 summieren.",
"editPlanGeneralError": "Plan konnte nicht aktualisiert werden.",
"editPlanEmpty": "Plan darf nicht leer sein."
},
"installments": {
"enableLabel": "In Teilzahlungen aufteilen",
"advancedToggle": "Dynamische Trigger verwenden",
"simpleToggle": "Einfache Datumsauswahl verwenden",
"simpleHint": "Jede Zeile wird an einem festen Datum versendet. Wechsle zu dynamischen Triggern für Pläne, die an das Anlassdatum oder die Lieferung gekoppelt sind.",
"advancedHint": "Wähle einen Trigger (Angebot angenommen, vor/nach Anlass, bei Lieferung, festes Datum) und einen Offset in Tagen. Trigger lösen sich neu auf, wenn sich das Anlassdatum später verschiebt.",
"percent": "%",
"label": "Bezeichnung",
"labelPlaceholder": "Anzahlung / vor Anlass …",
"sendOn": "Versanddatum",
"trigger": "Trigger",
"offsetDays": "Offset (Tage)",
"onDeliveryHint": "Bei Lieferung — Admin gibt manuell frei. Für Änderungen auf erweitert umschalten.",
"addRow": "Teilzahlung hinzufügen",
"removeRow": "Zeile entfernen",
"total": "Summe",
"mustSumTo100": "muss 100 % ergeben",
"firstRowDefaultLabel": "Anzahlung",
"triggerOption": {
"quote_accepted": "Bei Unterzeichnung / Erstellung",
"before_event": "Vor dem Anlass",
"after_event": "Nach dem Anlass",
"after_delivery": "Bei Lieferung (manuelle Freigabe)",
"fixed_date": "Festes Datum"
}
},
"contracts": {
"title": "Verträge",
"subtitle": "Verträge aus wiederverwendbaren Bausteinen zusammenstellen und durch den Kunden im Browser oder per hochgeladenem, handunterschriebenem PDF unterzeichnen lassen.",
"sections": {
"basics": "Vertragsgrundlagen",
"scope": "Leistungsumfang",
"privacy": "Persönlichkeitsrechte & Datenschutz",
"commercial": "Kaufmännisches",
"nda": "Vertraulichkeit",
"closing": "Schlussbestimmungen"
},
"status": {
"draft": "Entwurf",
"sent": "Gesendet",
"signed_by_customer": "Kunde unterzeichnet",
"signed_by_admin": "Gegengezeichnet",
"fully_signed": "Beidseitig unterzeichnet",
"cancelled": "Storniert"
},
"list": {
"new": "Neuer Vertrag"
},
"detail": {
"previewPdf": "PDF-Vorschau",
"integrity": {
"title": "PDF-Integritätsprüfung",
"help": "Berechnet die SHA-256-Hashes der unsignierten und signierten PDFs neu und vergleicht sie mit den beim Ausstellen gespeicherten Werten. Deckt Backup-Beschädigungen oder nachträgliche Änderungen an der Kundenkopie auf.",
"verify": "Prüfen",
"reverify": "Erneut prüfen",
"unsignedTitle": "Unsigniertes PDF",
"signedTitle": "Signiertes PDF",
"match": "Hash stimmt überein",
"mismatch": "Hash weicht ab — Datei verändert",
"missing": "Datei auf dem Server nicht gefunden",
"notIssued": "Noch nicht ausgestellt",
"expected": "erwartet",
"actual": "tatsächlich",
"error": "Integritätsprüfung fehlgeschlagen."
},
"alreadyEventToast": "Bereits mit einem Anlass verknüpft.",
"auditEmpty": "Noch keine Audit-Log-Einträge.",
"auditTrail": "Audit-Verlauf",
"auditTrailHelp": "Jedes auf diesem Vertrag erfasste Ereignis. Die Liste ist anhängend (append-only) und ist die Quelle der Wahrheit, falls der Vertrag angefochten wird.",
"back": "Zurück zur Liste",
"blocks": "Enthaltene Bausteine",
"cancel": "Stornieren",
"cancelConfirm": "Diesen Vertrag stornieren? Der Signatur-Link des Kunden wird ungültig.",
"cancelError": "Stornierung fehlgeschlagen",
"cancelledToast": "Vertrag storniert.",
"clearSignature": "Löschen",
"confirmConvertEvent": "Diesen Vertrag in einen Anlass + geplante Rechnungen umwandeln?",
"confirmConvertInvoice": "Diesen Vertrag nur in Rechnung(en) umwandeln? Es wird keine Galerie / kein Anlass erstellt.",
"confirmCountersign": "Gegenzeichnen",
"confirmResendSigned": "Das signierte Vertrags-PDF erneut an beide Parteien senden?",
"confirmRestamp": "PDF neu stempeln & neu rendern",
"convertError": "Umwandlung fehlgeschlagen",
"convertToEvent": "In Anlass umwandeln",
"convertToInvoice": "Nur in Rechnung umwandeln",
"convertedToEvent": "In Anlass umgewandelt",
"convertedToEventToast": "Vertrag in Anlass #{{id}} umgewandelt",
"convertedToInvoiceToast": "{{count}} Rechnung(en) aus diesem Vertrag erstellt",
"countersignError": "Gegenzeichnen fehlgeschlagen",
"countersignHelp": "Geben Sie Ihren Namen ein UND zeichnen Sie unten Ihre Unterschrift — beide werden auf das neu gerenderte PDF gestempelt. IP und Zeitstempel werden für das Audit erfasst.",
"countersignSignaturePrompt": "Zeichnen Sie Ihre Unterschrift",
"countersignTitle": "Gegenzeichnen, um den Vertrag bindend zu machen",
"countersignedToast": "Gegengezeichnet.",
"customer": "Kunde",
"dates": "Daten",
"downloadPdf": "PDF herunterladen",
"downloadSignedPdf": "Signiertes PDF herunterladen",
"edit": "Bearbeiten",
"fromQuote": "Aus Angebot",
"issued": "Ausgestellt",
"linkedInvoice": "Rechnung",
"newInvoice": "Neue Rechnung",
"noBlocks": "Keine Bausteine enthalten.",
"noSignatureImage": "Kein Unterschriftsbild erfasst — nutzen Sie unten „Unterschriften neu stempeln“, um eines hinzuzufügen.",
"notFound": "Vertrag nicht gefunden.",
"parties": "Parteien",
"popupBlocked": "Erlauben Sie Pop-ups für diese Seite, um die PDF-Vorschau anzuzeigen.",
"renderFailedBody": "Der Signaturnachweis ist erfasst, aber das gestempelte PDF wurde beim letzten Versuch nicht erzeugt. Klicken Sie oben auf „Signiertes PDF erneut senden“, um es aus dem Originaldokument neu zu stempeln und erneut zu senden.",
"renderFailedTitle": "Stempeln des signierten PDFs fehlgeschlagen — Neustempeln erforderlich",
"resendError": "Erneutes Senden fehlgeschlagen",
"resendSigned": "Signiertes PDF erneut senden",
"resentSignedToast": "Signierter Vertrag erneut an beide Parteien gesendet.",
"restampAdmin": "Admin-Unterschrift",
"restampCustomer": "Kundenunterschrift",
"restampError": "Neustempeln fehlgeschlagen",
"restampHelp": "Bei einer oder beiden Unterschriften wurde kein Bild erfasst. Zeichnen Sie die fehlende(n) Unterschrift(en) hier und wir rendern das PDF neu. Die bereits gespeicherten getippten Namen, Zeitstempel und IPs bleiben unverändert.",
"restampTitle": "Fehlende Unterschriften neu stempeln",
"restampedToast": "Unterschriften neu gestempelt und PDF neu gerendert.",
"send": "An Kunden senden",
"sendError": "Senden fehlgeschlagen",
"sentAt": "Gesendet am",
"sentToast": "Vertrag gesendet.",
"signBy": "Unterzeichnen bis",
"signatures": "Unterschriften",
"signedByAdmin": "Gegengezeichnet",
"signedByCustomer": "Vom Kunden signiert",
"signedNamePlaceholder": "Ihr vollständiger Name",
"uploadError": "Upload fehlgeschlagen",
"uploadSigned": "Signiertes PDF hochladen",
"uploadedToast": "Signiertes PDF hochgeladen."
},
"editor": {
"back": "Zurück zur Liste",
"backToDetail": "Zurück zum Vertrag",
"create": "Entwurf erstellen",
"createdToast": "Vertrag erstellt.",
"customer": "Kunde",
"disclaimerBody": "Die vorausgefüllten Baustein-Texte sind NUR BEISPIELE — vom Maintainer verfasst, nicht von einem Anwalt. Lassen Sie jeden verwendeten Baustein von Ihrem eigenen Anwalt prüfen, bevor Sie den Vertrag versenden. Siehe docs/crm-disclaimers.md.",
"disclaimerTitle": "Anwaltliche Prüfung erforderlich",
"eventDate": "Anlassdatum",
"eventHelp": "Wird auf den Vertrag übernommen und an jeden daraus erzeugten Anlass / jede Rechnung weitergegeben. Setzen Sie dies, damit Kundenportal und Mahn-E-Mails die richtige Bezeichnung \"Hochzeit Doe / Müller\" anzeigen.",
"eventName": "Anlassname",
"eventNamePlaceholder": "z. B. Hochzeit Doe / Müller",
"eventType": "Anlasstyp",
"eventTypeNone": "— Standard verwenden —",
"eventTypeHint": "Wird für den Anlass verwendet, der bei Annahme dieses Angebots erstellt wird.",
"bookingWorkflow": "Buchungs-Workflow (bei Annahme)",
"bookingWorkflowNone": "— Keiner —",
"bookingWorkflowDisabled": "(deaktiviert)",
"bookingWorkflowHint": "Der Ablauf, der startet, wenn die Kundin/der Kunde annimmt. „Keiner“ = kein Buchungsablauf. Der Ablauf muss aktiviert sein, um zu starten.",
"eventSection": "Anlass (optional)",
"eventTimeEnd": "Ende",
"eventTimeStart": "Beginn",
"intro": "Einleitungstext (optional)",
"issueDate": "Ausstellungsdatum",
"language": "Sprache",
"locked": "Gesendete Verträge können nicht bearbeitet werden. Für Änderungen stornieren und einen neuen erstellen.",
"noBlocksInSection": "Noch keine Bausteine für diesen Abschnitt.",
"outro": "Schlusstext (optional)",
"popupBlocked": "Erlauben Sie Pop-ups für diese Seite, um die PDF-Vorschau anzuzeigen.",
"preview": "PDF-Vorschau",
"previewAfterSave": "Zuerst den Entwurf speichern, dann Vorschau anzeigen.",
"previewError": "Vorschau fehlgeschlagen",
"save": "Speichern",
"saveError": "Speichern fehlgeschlagen",
"savedToast": "Vertrag gespeichert.",
"schriftformWarning": "Signaturtyp: einfache elektronische Signatur (EES). Ausreichend für routinemäßige Fotografieverträge in CH / DE / AT / FL. NICHT ausreichend für Dokumente, die gesetzlich Schriftform / forme qualifiée verlangen: Bürgschaft (DE § 766 BGB), Verbraucherdarlehensvertrag (DE § 492 BGB), befristete Arbeitsverträge (DE § 14 Abs. 4 TzBfG) und Ähnliches. Dafür ist eine qualifizierte elektronische Signatur (QES) eines Vertrauensdiensteanbieters erforderlich — picpeak bietet keine QES.",
"searchCustomer": "Nach E-Mail suchen…",
"systemBadge": "System",
"titleEdit": "Vertrag bearbeiten",
"titleField": "Vertragstitel",
"titleNew": "Neuer Vertrag",
"titlePlaceholder": "z. B. Hochzeitsvertrag Doe / Müller",
"validUntil": "Unterzeichnen bis (optional)"
}
}
}