7056 lines
384 KiB
JSON
7056 lines
384 KiB
JSON
{
|
||
"productUsage": {
|
||
"auditTitle": "Export- und Löschquittungen",
|
||
"auditDescription": "Lade deine privaten Nachweise herunter. PicPeak speichert nur die letzte Exportquittung während der Teilnahme und die letzte Löschbestätigung. Sie enthalten keinen Installationshash, Schlüssel oder Bericht-/Feedbackinhalt. Opt-out entfernt die lokale Exportquittung; die Löschbestätigung ohne Identitätsbezug bleibt erhalten. Der Collector führt keinen Export- oder Zugriffsverlauf.",
|
||
"auditDownload": "Datenschutzquittungen herunterladen",
|
||
"title": "Produktnutzung & Feedback",
|
||
"noticeTitle": "Gestalten Sie PicPeak mit",
|
||
"notice": "Optionale Nutzungsberichte zeigen, welche Funktionen für die Community wichtig sind. Die Übermittlung ist aus, bis Sie sich aktiv dafür entscheiden.",
|
||
"ignore": "Ignorieren",
|
||
"ignoreHint": "Dieser Hinweis erscheint nicht erneut — Sie können weiterhin unter Einstellungen → Produktnutzung teilnehmen.",
|
||
"review": "Teilnahme prüfen",
|
||
"cancel": "Abbrechen",
|
||
"loading": "Teilnahmeeinstellungen werden geladen…",
|
||
"failed": "Der Vorgang konnte nicht abgeschlossen werden. Prüfe den Status und versuche es erneut.",
|
||
"purpose": "Hilf bei der Priorisierung von PicPeak-Funktionen, Fehlerbehebungen und Wartung mit groben Informationen über teilnehmende Installationen.",
|
||
"consentTitle": "Produktnutzung freiwillig teilen",
|
||
"sectionFields": "Was ein Bericht enthält",
|
||
"sectionExcluded": "Was niemals enthalten ist",
|
||
"sectionTransport": "Wie er gesendet wird",
|
||
"sectionVisibility": "Wo er sichtbar ist",
|
||
"sectionDeletion": "Beenden und löschen",
|
||
"sectionFeedback": "Feedback ist getrennt",
|
||
"fields": "Berichte enthalten einen Installationsfingerabdruck, PicPeak-Version, Berichtstag, Schema- und Signaturmetadaten, Galerie-Layouts sowie Konfiguriert/Genutzt-Werte für CRM und Unterfunktionen, Buchhaltung, Workflows, Newsletter, Gesichtserkennung, eigenes CSS, OAuth, SMTP, WhatsApp, Backups, S3 und eingebundene Freigaben. „Genutzt“ bedeutet seit der Teilnahme beobachtet, nicht wie häufig.",
|
||
"excluded": "Automatische Berichte enthalten keine Galeriebesucher, Klickverläufe, Foto- oder Galerieanzahlen, Namen, E-Mail-Adressen, Domains, Dateinamen oder Zugangsdaten.",
|
||
"transport": "Dein PicPeak-Backend verwahrt den Signaturschlüssel und sendet einmal pro UTC-Tag bei Admin-Nutzung signierte Nutzungsberichte an {{collector}}. Du kannst Berichte vorab ansehen und jeden eindeutig angenommenen Bericht genau wie beim ersten Empfang herunterladen; Übertragungswiederholungen werden zusammengeführt. Abgelehnte Versuche und getrennt gesendetes Feedback gehören nicht zu diesem Berichtsexport.",
|
||
"visibility": "Nur teilnehmende Installationen können den Funktionsdatensatz und aggregierte Ergebnisse einsehen, auch Gruppen mit nur einer Installation. Schema und Quellcode sind öffentlich; geprüfte Funktionswünsche und Empfehlungen werden nur mit Erlaubnis ihrer Verfasser veröffentlicht. Dein Fingerabdruck ist pseudonym, nicht anonym. Bewahre deinen Abfrage-Hash vertraulich auf: Er ermöglicht lesenden Zugriff auf deine eigenen Berichte und den Teilnehmerdatensatz.",
|
||
"deletion": "Deaktivieren stoppt die Erfassung sofort und fordert die Löschung der Berichte, Aggregatbeiträge, Rückmeldungen, Veröffentlichungen, Stimmen und Sitzungen an. Bei einem Ausfall bleiben nur die zur Löschung nötigen Zugangsdaten erhalten; die Oberfläche zeigt die ausstehende Löschung. Nach Bestätigung werden Hash und Schlüssel lokal gelöscht; eine erneute Teilnahme erzeugt eine neue Identität. Der Collector behält einen Einweg-Sperrwert und kurzlebige Missbrauchszähler ohne Installationsbezug. PicPeak speichert eine herunterladbare lokale Löschquittung ohne den alten Hash, Schlüssel oder Inhalte.",
|
||
"feedbackDisclosure": "Feedback wird getrennt von automatischen Berichten und nur beim Absenden übertragen. Jeder Beitrag ist anonym, sofern du keinen Namen angibst, und nur für Betreuer sichtbar, sofern du die Veröffentlichung nicht ausdrücklich erlaubst. Öffentliche Beiträge werden geprüft. Die Verwendung einer Empfehlung für Marketing benötigt eine zusätzliche Erlaubnis.",
|
||
"consentCheck": "Ich habe diese Hinweise gelesen und stimme der Teilnahme ausdrücklich zu.",
|
||
"enable": "Produktnutzung aktivieren",
|
||
"disable": "Deaktivieren & Daten löschen",
|
||
"retry": "Erneut versuchen / fälligen Bericht senden",
|
||
"transparency": "Öffentliches Schema & Datenschutzhinweise",
|
||
"linkCollector": "Wohin Berichte gesendet werden",
|
||
"hash": "Dein vertraulicher Abfrage-Hash",
|
||
"lastReport": "Zuletzt angenommener Bericht: {{date}} (UTC)",
|
||
"deliveryProblem": "Die Übertragung benötigt Aufmerksamkeit. Bei Löschung oder Identitätskonflikt ist die Erfassung gestoppt. Versuche es erneut oder deaktiviere die Teilnahme, um die Daten zu löschen.",
|
||
"invalidCollectorUrl": "Die konfigurierte Collector-URL ist ungültig, daher kann die Teilnahme weder gestartet noch übermittelt werden. Setzen Sie USAGE_COLLECTOR_URL auf einen https-Origin ohne Pfad, Query oder Zugangsdaten (oder lassen Sie sie leer, um den Standard zu verwenden).",
|
||
"signingKeyUnreadable": "Der Signaturschlüssel für die Nutzungsdaten kann nicht gelesen werden. Meist wurde USAGE_ENCRYPTION_KEY — oder das als Rückfallwert genutzte JWT_SECRET — geändert. Berichte können nicht gesendet und auch die Löschanfrage kann nicht signiert werden. Stellen Sie das ursprüngliche Schlüsselmaterial wieder her, um die Löschung abzuschließen; erneutes Senden oder Deaktivieren allein behebt dies nicht.",
|
||
"inspect": "Genau sehen, was geteilt wird",
|
||
"preview": "Nächsten Bericht ansehen",
|
||
"lastPacket": "Zuletzt angenommener signierter Nutzungsbericht",
|
||
"export": "Alle angenommenen Nutzungsberichte herunterladen",
|
||
"connect": "Mit Wünschen & Abstimmungen verbinden",
|
||
"openPortal": "Portal öffnen (Abstimmungssitzung für 15 Minuten)",
|
||
"queued": "Der Vorgang ist zur erneuten Übertragung gespeichert. Der Empfang ist noch nicht bestätigt.",
|
||
"feedbackTitle": "Feedback & Funktionswünsche",
|
||
"kind": "Art",
|
||
"subject": "Titel",
|
||
"message": "Deine Nachricht",
|
||
"includeName": "Diesem Beitrag einen Namen hinzufügen",
|
||
"name": "Anzeigename",
|
||
"saveName": "Diesen Namen lokal merken",
|
||
"saved": "Einstellung gespeichert. Neue Beiträge sind weiterhin standardmäßig anonym.",
|
||
"allowPublic": "Ich erlaube die Veröffentlichung dieses Textes und des angegebenen Namens im Nutzungsportal nach Prüfung.",
|
||
"allowMarketing": "Ich erlaube zusätzlich die Verwendung dieser Empfehlung und des angegebenen Namens für Marketing auf der PicPeak-Homepage.",
|
||
"sendFeedback": "Feedback absenden",
|
||
"feedbackSent": "Feedback erhalten. Eine Veröffentlichung erfordert deine Erlaubnis und die Prüfung durch Betreuer.",
|
||
"states": {
|
||
"disabled": "Teilnahme ist deaktiviert",
|
||
"activation_pending": "Aktivierung ausstehend",
|
||
"active": "Du nimmst teil",
|
||
"deletion_pending": "Löschung ausstehend",
|
||
"identity_conflict": "Konflikt der Installationsidentität"
|
||
},
|
||
"stateDetails": {
|
||
"disabled": "Es werden keine Produktnutzungsdaten erfasst oder gesendet. Prüfe die Hinweise, bevor du dich entscheidest.",
|
||
"activation_pending": "Die Zustimmung ist gespeichert. Die Registrierung wird bei Admin-Nutzung oder über „Erneut versuchen“ wiederholt.",
|
||
"active": "Nur die beschriebenen Funktionssignale werden erfasst. Tagesberichte werden bei Admin-Nutzung gesendet.",
|
||
"deletion_pending": "Erfassung und Berichte sind gestoppt. Die Signaturdaten bleiben ausschließlich für die bestätigte Löschung erhalten. Versuche es erneut, sobald der Dienst erreichbar ist.",
|
||
"identity_conflict": "Möglicherweise wurde diese Installation wiederhergestellt oder kopiert, oder die Berichtsfolge stimmt nicht mehr mit dem Dienst überein. Berichte sind gestoppt. Deaktiviere und lösche die alte Teilnahme vor einem erneuten Beitritt mit neuer Identität. Dadurch werden auch die Daten einer weiteren Kopie derselben Identität gelöscht."
|
||
},
|
||
"kinds": {
|
||
"feedback": "Privates Feedback",
|
||
"feature_request": "Funktionswunsch",
|
||
"testimonial": "Empfehlung"
|
||
}
|
||
},
|
||
"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",
|
||
"roles": "Rollen"
|
||
},
|
||
"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?"
|
||
},
|
||
"userActivated": "Benutzer erfolgreich reaktiviert",
|
||
"activateUserError": "Fehler beim Reaktivieren des Benutzers",
|
||
"userDeleted": "Benutzer erfolgreich gelöscht",
|
||
"deleteUserError": "Fehler beim Löschen des Benutzers",
|
||
"activateUser": "Benutzer reaktivieren",
|
||
"deleteUser": "Benutzer endgültig löschen",
|
||
"confirmActivate": {
|
||
"title": "Benutzer reaktivieren?",
|
||
"message": "{{name}} reaktivieren? Die Anmeldung ist danach sofort wieder möglich."
|
||
},
|
||
"confirmDelete": {
|
||
"title": "Benutzer endgültig löschen?",
|
||
"message": "{{name}} endgültig löschen? Dies kann nicht rückgängig gemacht werden. Ausstehende Einladungen und API-Token werden entfernt; anderswo erstellte Datensätze bleiben erhalten, verlieren aber die Zuordnung."
|
||
},
|
||
"activate": "Reaktivieren",
|
||
"delete": "Endgültig löschen"
|
||
},
|
||
"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"
|
||
},
|
||
"emptyNotAllClear": "Nichts ist fehlgeschlagen — beachten Sie aber die Hinweise oben."
|
||
},
|
||
"waitingEmails": {
|
||
"title": "Wartet auf Versand",
|
||
"empty": "Nichts in Wartestellung — die Warteschlange wird abgearbeitet.",
|
||
"description": "Vor über 10 Minuten eingereiht, jetzt fällig und weiterhin nicht versendet. Diese E-Mails sind nicht fehlgeschlagen — es hat niemand versucht, sie zu senden.",
|
||
"neverAttempted": "kein Versuch",
|
||
"attempted": "{{count}} Versuch(e), letzter Fehler: {{error}}",
|
||
"unknownError": "unbekannt",
|
||
"col": {
|
||
"attempts": "Versuche"
|
||
},
|
||
"emptyButUnworked": "Noch ist nichts überfällig, es sendet aber auch nichts — siehe Prozessor oben. Alles ab jetzt Eingereihte bleibt hier liegen.",
|
||
"truncated": "Die Warteschlange ist zu groß, um sie vollständig zu prüfen — in den gelesenen Zeilen war nichts überfällig, das ist aber keine Entwarnung."
|
||
},
|
||
"processor": {
|
||
"title": "E-Mail-Warteschlangen-Prozessor",
|
||
"running": "Läuft.",
|
||
"stopped": "Läuft auf dieser Instanz nicht. Eingereihte E-Mails werden in die Datenbank geschrieben, aber niemand versendet sie.",
|
||
"degraded": "Läuft, aber der letzte Durchlauf konnte nicht senden: {{error}}",
|
||
"lastRun": "Letzter Durchlauf {{when}}",
|
||
"neverRan": "Seit dem Start dieser Instanz nicht gelaufen.",
|
||
"lastResult": "{{sent}} gesendet, {{failed}} fehlgeschlagen"
|
||
}
|
||
},
|
||
"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",
|
||
"poweredBy": "Bereitgestellt von",
|
||
"on": "an",
|
||
"off": "aus",
|
||
"clear": "Zurücksetzen",
|
||
"saved": "Gespeichert",
|
||
"saveFailed": "Speichern fehlgeschlagen",
|
||
"menu": "Menü",
|
||
"deleted": "Gelöscht.",
|
||
"actions": "Aktionen",
|
||
"copyFailed": "Kopieren in die Zwischenablage fehlgeschlagen.",
|
||
"searching": "Wird gesucht…",
|
||
"language": "Sprache"
|
||
},
|
||
"upload": {
|
||
"photoCategory": "Fotokategorie",
|
||
"noCategory": "Keine Kategorie",
|
||
"eventSpecific": "(Veranstaltungsspezifisch)",
|
||
"clickToUpload": "Klicken zum Hochladen oder per Drag & Drop",
|
||
"fileRequirements": "{{formats}} (max. {{sizeLimit}}MB pro Datei, {{limit}} Dateien pro Upload)",
|
||
"videoSizeLimit": "Videos: max. {{sizeLimit}}MB pro Datei",
|
||
"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",
|
||
"processingFailed_one": "{{count}} Foto konnte nicht verarbeitet werden",
|
||
"processingFailed_other": "{{count}} Fotos konnten nicht verarbeitet werden",
|
||
"processingStillRunning": "Ihr Upload wird noch verarbeitet — er erscheint in Kürze in der Galerie.",
|
||
"retryFailed": "Fehlgeschlagene erneut versuchen",
|
||
"uploadComplete": "Upload abgeschlossen!",
|
||
"partialComplete": "{{uploaded}} von {{total}} Dateien hochgeladen — {{failed}} konnten nicht hochgeladen werden.",
|
||
"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",
|
||
"toast_one": "{{count}} Datei konnte nicht hochgeladen werden – siehe Liste unten.",
|
||
"toast_other": "{{count}} Dateien konnten nicht hochgeladen werden – siehe Liste unten.",
|
||
"title_one": "{{count}} Datei konnte nicht hochgeladen werden",
|
||
"title_other": "{{count}} Dateien konnten nicht hochgeladen werden"
|
||
},
|
||
"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",
|
||
"uploadingChunks_one": "{{count}} Teil wird hochgeladen",
|
||
"uploadingChunks_other": "{{count}} Teile werden hochgeladen",
|
||
"fileTooLarge": "Datei zu groß: {{name}} (max. {{limit}}MB)"
|
||
},
|
||
"navigation": {
|
||
"dashboard": "Dashboard",
|
||
"events": "Veranstaltungen",
|
||
"messages": "Nachrichten",
|
||
"settings": "Einstellungen",
|
||
"systemHealth": "Systemzustand",
|
||
"archives": "Archive",
|
||
"transfers": "PicTransfer",
|
||
"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"
|
||
},
|
||
"transfers": {
|
||
"title": "PicTransfer",
|
||
"subtitle": "Originaldateien aus beliebigen Events als Download-Link versenden.",
|
||
"new": "Neuer Transfer",
|
||
"create": "Transfer erstellen",
|
||
"created": "Transfer erstellt",
|
||
"createFailed": "Transfer konnte nicht erstellt werden",
|
||
"empty": "Noch keine Transfers. Erstellen Sie einen, um Dateien zu teilen.",
|
||
"untitled": "Unbenannter Transfer",
|
||
"linkCopied": "Link in die Zwischenablage kopiert",
|
||
"copyFailed": "Link konnte nicht kopiert werden",
|
||
"copyLink": "Link kopieren",
|
||
"downloadAll": "Alle herunterladen",
|
||
"expiresOn": "Läuft ab",
|
||
"disableLink": "Link deaktivieren",
|
||
"reactivate": "Reaktivieren (14 Tage)",
|
||
"reactivated": "Link reaktiviert",
|
||
"disabled": "Link deaktiviert",
|
||
"filesAdded": "Dateien hinzugefügt",
|
||
"deleted": "Transfer gelöscht",
|
||
"deleteConfirmTitle": "Transfer löschen?",
|
||
"deleteConfirmBody": "Dies entfernt den Link und alle Kunden-Uploads. Die Fotos der Quell-Events sind nicht betroffen.",
|
||
"addImages": "Bilder hinzufügen",
|
||
"clientUpload": "Kunden-Upload",
|
||
"disableUploads": "Deaktivieren",
|
||
"enableUploads": "Upload-Link aktivieren",
|
||
"uploadEnabled": "Upload-Link aktiviert",
|
||
"noUploads": "Der Kunde hat noch keine Dateien hochgeladen.",
|
||
"uploadHint": "Aktivieren Sie dies, um dem Kunden einen 6-stelligen Code zu geben, mit dem er Ihnen Dateien (Logos etc.) senden kann.",
|
||
"createAndSend": "Erstellen & senden",
|
||
"uploadedFiles": "Hochgeladene Dateien",
|
||
"addFiles": "Dateien hinzufügen",
|
||
"noUploadedFiles": "Keine hochgeladenen Dateien. Fügen Sie Dateien von Ihrem Computer hinzu, um sie in den Download aufzunehmen.",
|
||
"sentTo": "Per E-Mail an",
|
||
"delivery": {
|
||
"link": "Link teilen",
|
||
"email": "Per E-Mail senden"
|
||
},
|
||
"col": {
|
||
"title": "Titel",
|
||
"files": "Dateien",
|
||
"status": "Status",
|
||
"downloads": "Downloads",
|
||
"expires": "Läuft ab",
|
||
"uploads": "Uploads"
|
||
},
|
||
"status": {
|
||
"active": "Aktiv",
|
||
"expired": "Abgelaufen",
|
||
"deleted": "Gelöscht"
|
||
},
|
||
"field": {
|
||
"title": "Titel",
|
||
"titlePlaceholder": "z. B. Hochzeitsfinals für Familie Schmidt",
|
||
"message": "Nachricht (optional)",
|
||
"messagePlaceholder": "Wird dem Empfänger auf der Download-Seite angezeigt",
|
||
"expiresInDays": "Link aktiv für (Tage)",
|
||
"maxDownloads": "Max. Downloads (0 = unbegrenzt)",
|
||
"allowUploads": "Dem Kunden zusätzlich einen Upload-Link geben (für Logos etc.)",
|
||
"files": "Dateien",
|
||
"noFiles": "Noch keine Bilder ausgewählt.",
|
||
"uploadFiles": "Eigene Dateien hochladen",
|
||
"chooseFiles": "Dateien auswählen",
|
||
"noUploadFiles": "Optional Dateien von Ihrem Computer hinzufügen, die mitgesendet werden.",
|
||
"delivery": "Zustellung",
|
||
"recipients": "E-Mail-Adressen der Empfänger",
|
||
"recipientsPlaceholder": "[email protected], [email protected]",
|
||
"recipientsCount": "{{count}} Empfänger — jeder erhält den Download-Link",
|
||
"recipientsHint": "Mehrere Adressen durch Kommas trennen. Jeder Empfänger erhält den Download-Link.",
|
||
"recipientsCount_one": "{{count}} Empfänger — er erhält den Download-Link",
|
||
"recipientsCount_other": "{{count}} Empfänger — jeder erhält den Download-Link"
|
||
},
|
||
"picker": {
|
||
"title": "Bilder aus anderen Events auswählen",
|
||
"searchEvents": "Events suchen…",
|
||
"pickEvent": "Wählen Sie ein Event, um dessen Fotos zu durchsuchen",
|
||
"noPhotos": "Keine Fotos in diesem Event",
|
||
"select": "Auswählen",
|
||
"deselect": "Abwählen",
|
||
"alreadyAdded": "Hinzugefügt",
|
||
"selectedCount": "{{count}} ausgewählt",
|
||
"addSelected": "Auswahl hinzufügen",
|
||
"lightbox": "Lightbox",
|
||
"selectedCount_one": "{{count}} ausgewählt",
|
||
"selectedCount_other": "{{count}} ausgewählt"
|
||
},
|
||
"public": {
|
||
"notFoundTitle": "Link nicht gefunden",
|
||
"notFoundBody": "Dieser Transfer-Link ist ungültig oder wurde entfernt.",
|
||
"expiredTitle": "Dieser Link ist abgelaufen",
|
||
"expiredBody": "Bitte fordern Sie beim Absender einen neuen Link an.",
|
||
"limitTitle": "Download-Limit erreicht",
|
||
"limitBody": "Dieser Transfer hat die maximale Anzahl an Downloads erreicht.",
|
||
"availableUntil": "Verfügbar bis {{date}}",
|
||
"fileSummary": "{{count}} Dateien",
|
||
"downloadFile": "Herunterladen",
|
||
"fileSummary_one": "{{count}} Datei",
|
||
"fileSummary_other": "{{count}} Dateien"
|
||
},
|
||
"upload": {
|
||
"unavailableTitle": "Upload-Link nicht verfügbar",
|
||
"unavailableBody": "Dieser Upload-Link ist ungültig oder abgelaufen.",
|
||
"doneTitle": "Vielen Dank!",
|
||
"doneBody": "Ihre Dateien wurden erfolgreich hochgeladen.",
|
||
"uploadMore": "Weitere hochladen",
|
||
"dropzone": "Zum Auswählen klicken oder Dateien hierher ziehen",
|
||
"limits": "Bis zu {{files}} Dateien, je {{mb}} MB",
|
||
"tooBig": "Jede Datei darf höchstens {{mb}} MB groß sein",
|
||
"send": "{{count}} Dateien hochladen",
|
||
"failed": "Upload fehlgeschlagen. Bitte erneut versuchen.",
|
||
"send_one": "{{count}} Datei hochladen",
|
||
"send_other": "{{count}} Dateien hochladen"
|
||
}
|
||
},
|
||
"workflows": {
|
||
"title": "Workflows",
|
||
"subtitle": "Visuelle Automatisierungen – Auslöser, Bedingungen, Freigaben und Aktionen.",
|
||
"new": "Neuer Workflow",
|
||
"empty": "Noch keine Workflows. Erstellen Sie 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 Ihre Bestätigung warten.",
|
||
"empty": "Aktuell wartet nichts auf Sie.",
|
||
"confirm": "Bestätigen",
|
||
"deny": "Ablehnen",
|
||
"recorded": "Antwort gespeichert",
|
||
"defaultPrompt": "Ein Workflow benötigt Ihre 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": {
|
||
"picpeak": {
|
||
"restoreIntro": "Laden Sie eine .picpeak-Datei von dieser oder einer anderen Instanz hoch. Die Wiederherstellung eines SQLite-Backups auf einer PostgreSQL-Instanz wird unterstützt (Upgrade-Pfad); ansonsten müssen die Datenbank-Engines übereinstimmen.",
|
||
"crossEngineNote": "Engine-übergreifende Wiederherstellung: Ein SQLite-Backup wurde auf diese PostgreSQL-Instanz übernommen.",
|
||
"downloadFailed": "Die Backup-Datei konnte nicht erstellt werden.",
|
||
"title": "Portables Backup (.picpeak)",
|
||
"intro": "Laden Sie eine einzelne, in sich geschlossene Datei herunter und laden Sie sie auf einer anderen Instanz wieder hoch, um diese zu klonen — alles direkt 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",
|
||
"externalPathsFailed": "Backup wiederhergestellt, aber die externen Fotopfade konnten nicht umgestellt werden — diese Originale laden erst nach einem erneuten Versuch.",
|
||
"restoreDone": "Backup wiederhergestellt.",
|
||
"reloginRequired": "Wiederherstellung abgeschlossen — bitte melden Sie sich erneut an.",
|
||
"restoreFailed": "Wiederherstellung fehlgeschlagen.",
|
||
"restoreTitle": "Aus einer .picpeak-Datei wiederherstellen",
|
||
"chooseFile": ".picpeak-Datei auswählen…",
|
||
"restoreSummary": "{{tables}} Tabellen und {{files}} Dateien wiederhergestellt.",
|
||
"externalPathsFailedDetail": "Die externen Fotopfade wurden nicht umgestellt, deshalb ist derzeit kein referenziertes Original erreichbar. Führen Sie die Wiederherstellung oder die ausstehenden Migrationen erneut aus, sobald die Ursache behoben ist.",
|
||
"externalMediaNote": "Dieses Backup verweist auf eine externe Medienbibliothek. Stellen Sie sicher, dass das Routing für externe Medien auf dieser Instanz eingerichtet ist.",
|
||
"externalMediaLink": "Einrichtungsanleitung",
|
||
"reload": "App neu laden",
|
||
"confirmTitle": "Die Wiederherstellung löscht alle aktuellen Daten",
|
||
"confirmBody": "Dies ersetzt ALLE Daten dieser Instanz dauerhaft durch das hochgeladene Backup — ausgenommen Ihr aktuelles Konto. Das kann nicht rückgängig gemacht werden.",
|
||
"confirmRestore": "Löschen & wiederherstellen"
|
||
},
|
||
"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. Klicken Sie 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)",
|
||
"skippedBySetting": "Übersprungen (Backup-Einstellungen)",
|
||
"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",
|
||
"skippedBySetting": "In Backup-Einstellungen 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"
|
||
},
|
||
"lastSuccessful": "Letztes erfolgreiches Backup",
|
||
"lastAttempt": "Letzter Versuch",
|
||
"zombieRuns_one": "{{count}} Backup läuft seit über 30 Min. — es könnte abgestürzt sein, ohne abzuschließen",
|
||
"zombieRuns_other": "{{count}} Backups laufen seit über 30 Min. — sie könnten abgestürzt sein, ohne abzuschließen",
|
||
"status": {
|
||
"completed": "Abgeschlossen",
|
||
"failed": "Fehlgeschlagen",
|
||
"running": "Läuft"
|
||
}
|
||
},
|
||
"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",
|
||
"invalidCron": "Bitte geben Sie einen gültigen Cron-Ausdruck ein (5 Felder)"
|
||
},
|
||
"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",
|
||
"filesOnlyHint": "Dieses Backup enthält keinen Datenbank-Dump — eine Wiederherstellung stellt die Datenbank NICHT wieder her (CRM-Daten, Kunden, Angebote, Rechnungen und Verträge sind danach leer).",
|
||
"filesOnlyBadge": "Keine DB",
|
||
"corruptHint": "Die Manifest-Datei ist nicht lesbar — das Backup könnte unvollständig oder beschädigt sein.",
|
||
"corruptBadge": "Beschädigt",
|
||
"filesOnlyWarning": {
|
||
"title": "Das gewählte Backup enthält keinen Datenbank-Dump",
|
||
"message": "Die Wiederherstellung dieses Backups stellt Dateien (Fotos, PDFs) wieder her, die Datenbank — inklusive Admin-Benutzer, Kunden, Angebote, Rechnungen, Verträge und Einstellungen — jedoch NICHT. Wählen Sie ein anderes Backup mit Datenbank-Dump, falls vorhanden, oder fahren Sie nur fort, wenn Sie ausschließlich die Dateien möchten."
|
||
}
|
||
},
|
||
"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"
|
||
},
|
||
"failedSubtitle": "Wiederherstellung fehlgeschlagen — siehe Fehler unten. Das Ziel wurde auf den Stand vor der Wiederherstellung zurückgesetzt.",
|
||
"idle": "Derzeit läuft keine Wiederherstellung.",
|
||
"errorTitle": "Wiederherstellung nicht abgeschlossen",
|
||
"errorUnknown": "Keine Fehlermeldung aufgezeichnet.",
|
||
"rolledBack": "Das Sicherheits-Backup von vor der Wiederherstellung wurde für den Rollback verwendet. Das Ziel befindet sich im Zustand vor der Wiederherstellung — ein erneuter Versuch ist gefahrlos möglich, sobald das Problem oben behoben ist."
|
||
},
|
||
"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.",
|
||
"networkError": "Verbindung fehlgeschlagen. Bitte prüfen Sie Ihre Internetverbindung und versuchen Sie es erneut.",
|
||
"recaptchaFailed": "Sicherheitsprüfung fehlgeschlagen. Bitte laden Sie die Seite neu und versuchen Sie es erneut.",
|
||
"iab": {
|
||
"instagram": {
|
||
"blockedTitle": "Der Instagram-Browser kann diese Galerie nicht öffnen",
|
||
"blockedIos": "Das Passwort-Login funktioniert im eingebauten Browser von Instagram nicht zuverlässig. Oben rechts auf das ⋯-Menü tippen und „Im externen Browser öffnen“ wählen — oder den Link kopieren und in Safari einfügen.",
|
||
"blockedAndroid": "Das Passwort-Login funktioniert im eingebauten Browser von Instagram nicht zuverlässig. Oben rechts auf das ⋮-Menü tippen und „Im externen Browser öffnen“ wählen — oder den Link kopieren und in Chrome einfügen.",
|
||
"copyLink": "Link kopieren",
|
||
"linkCopied": "Link kopiert",
|
||
"tryAnyway": "Passwort trotzdem hier eingeben"
|
||
}
|
||
}
|
||
},
|
||
"gallery": {
|
||
"revealPendingTitle": "Die Fotos sind noch eine Überraschung",
|
||
"revealPendingMessage": "Der Gastgeber gibt die Galerie später frei — schauen Sie bald wieder vorbei!",
|
||
"revealScheduledFor": "Freigabe geplant für {{date}}",
|
||
"revealUploadHint": "Sie können schon jetzt eigene Fotos zur Sammlung beitragen:",
|
||
"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.",
|
||
"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",
|
||
"returningHint": "Schon einmal hier gewesen? Ihre bisherige Auswahl ist noch gespeichert.",
|
||
"recoverPicks": "Auswahl zurückholen"
|
||
},
|
||
"footer": {
|
||
"forgetMeConfirm": "Ihr Name und Ihre Auswahl werden aus dieser Galerie entfernt.",
|
||
"forgetMe": "Mich vergessen ({{name}})",
|
||
"notYou": "Nicht Sie?",
|
||
"socials": "Soziale Netzwerke"
|
||
},
|
||
"photosCount_one": "{{count}} Foto",
|
||
"photosCount_other": "{{count}} Fotos",
|
||
"chooseResolution": "Downloadgröße wählen",
|
||
"resolutionUpTo": "bis zu {{width}} × {{height}} px",
|
||
"prepareDownload": "Download vorbereiten",
|
||
"preparingDownload": "Download wird vorbereitet…",
|
||
"preparingHint": "Fotos werden verkleinert — bei großen Galerien kann das einen Moment dauern.",
|
||
"preparingProgress": "{{count}} Fotos verpackt",
|
||
"downloadReady": "Ihr Download ist bereit",
|
||
"downloadNow": "Herunterladen",
|
||
"downloadPrepFailed": "Vorbereitung fehlgeschlagen",
|
||
"downloadPrepTimeout": "Das dauert länger als erwartet. Bitte erneut versuchen.",
|
||
"people": {
|
||
"title": "Personen in dieser Galerie",
|
||
"showAll": "Alle {{count}} anzeigen",
|
||
"show": "Anzeigen",
|
||
"dismiss": "Personenleiste ausblenden",
|
||
"collapsedSummary": "{{count}} Personen gefunden",
|
||
"unnamedCount": "{{count}} Fotos",
|
||
"filterBy": "Fotos von {{name}} anzeigen",
|
||
"filterByUnnamed": "Fotos dieser Person anzeigen",
|
||
"scanning": "Personen werden gesucht… {{scanned}}/{{total}} Fotos",
|
||
"matchAll": "Beide Personen",
|
||
"matchAny": "Eine der Personen",
|
||
"matchCount": "{{count}} von {{total}} Fotos",
|
||
"clear": "Zurücksetzen",
|
||
"searchPlaceholder": "Person suchen",
|
||
"noMatches": "Niemand passt zu diesem Namen.",
|
||
"privacyNote": "Personen werden automatisch innerhalb dieser Galerie erkannt. Es werden keine Daten an externe Dienste gesendet.",
|
||
"inThisPhoto": "Auf diesem Foto:",
|
||
"downloadThese": "Diese {{count}} herunterladen",
|
||
"unnamedCount_one": "{{count}} Foto",
|
||
"unnamedCount_other": "{{count}} Fotos",
|
||
"collapsedSummary_one": "{{count}} Person gefunden",
|
||
"collapsedSummary_other": "{{count}} Personen gefunden",
|
||
"showAll_one": "Alle {{count}} anzeigen",
|
||
"showAll_other": "Alle {{count}} anzeigen",
|
||
"matchCount_one": "{{count}} von {{total}} Fotos",
|
||
"matchCount_other": "{{count}} von {{total}} Fotos",
|
||
"downloadThese_one": "Dieses {{count}} Foto herunterladen",
|
||
"downloadThese_other": "Diese {{count}} Fotos herunterladen"
|
||
},
|
||
"colorFilter": "Farbe",
|
||
"filterByColor": "Nur {{color}} anzeigen",
|
||
"folders": "Ordner",
|
||
"openFolder": "Ordner {{name}} öffnen",
|
||
"folderPhotoCount": "{{count}} Fotos",
|
||
"backToGallery": "Alle Fotos",
|
||
"downloadFolder": "Ordner herunterladen ({{count}})",
|
||
"downloadFolderCapped": "Erste {{limit}} von {{total}} herunterladen",
|
||
"downloadEverything": "Alle Fotos herunterladen",
|
||
"downloadFolder_one": "Ordner herunterladen ({{count}})",
|
||
"downloadFolder_other": "Ordner herunterladen ({{count}})",
|
||
"folderPhotoCount_one": "{{count}} Foto",
|
||
"folderPhotoCount_other": "{{count}} Fotos",
|
||
"preparingProgress_one": "{{count}} Foto verpackt",
|
||
"preparingProgress_other": "{{count}} Fotos verpackt"
|
||
},
|
||
"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.",
|
||
"moveUp": "Nach oben",
|
||
"moveDown": "Nach unten",
|
||
"failedToReorder": "Kategorie-Reihenfolge konnte nicht aktualisiert werden",
|
||
"galleryOrder": "Galerie-Reihenfolge",
|
||
"resetToDefault": "Auf Standard zurücksetzen",
|
||
"orderReset": "Auf Standardreihenfolge zurückgesetzt",
|
||
"orderCustomisedHint": "Diese Galerie verwendet eine eigene Reihenfolge. Zurücksetzen, um der globalen Standardreihenfolge zu folgen (Einstellungen → Fotokategorien).",
|
||
"orderDefaultHint": "Mit den Pfeilen die Reihenfolge für diese Galerie festlegen. Andernfalls gilt die globale Standardreihenfolge (Einstellungen → Fotokategorien).",
|
||
"sharedBadge": "Geteilt",
|
||
"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",
|
||
"folderEnabled": "Fotos dieser Kategorie liegen jetzt in einem Ordner",
|
||
"folderDisabled": "Diese Kategorie filtert die Galerie wieder",
|
||
"failedToToggleFolder": "Ordner-Einstellung konnte nicht geändert werden",
|
||
"disableFolderTitle": "Ordner: Diese Fotos sind im Hauptraster ausgeblendet und nur im Ordner sichtbar. Klicken, um wieder einen Filter daraus zu machen.",
|
||
"enableFolderTitle": "Filter: Diese Fotos bleiben im Hauptraster. Klicken, um einen Ordner daraus zu machen — blendet sie aus, schränkt den Zugriff aber NICHT ein."
|
||
},
|
||
"events": {
|
||
"revealMode": "Reveal-Modus (Galerie bis zur Freigabe verbergen)",
|
||
"revealModeHelp": "Gäste können hochladen, sehen aber keine Fotos, bis Sie die Galerie freigeben — manuell oder zum geplanten Zeitpunkt. Diashow und Kundenzugang funktionieren weiter.",
|
||
"revealAt": "Geplante Freigabe (optional)",
|
||
"revealAtHelp": "Leer lassen, um manuell mit „Jetzt freigeben\" freizugeben.",
|
||
"revealModeStatus": "Reveal-Modus",
|
||
"revealed": "Freigegeben",
|
||
"hiddenUntilReveal": "Für Gäste verborgen",
|
||
"revealScheduled": "Geplant: {{date}}",
|
||
"revealNow": "Jetzt freigeben",
|
||
"revealedToast": "Galerie freigegeben — Gäste sehen die Fotos jetzt",
|
||
"revealError": "Galerie konnte nicht freigegeben werden",
|
||
"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",
|
||
"qrCode": "QR-Code",
|
||
"qrTableCard": "Tischkarte (A6)",
|
||
"qrPoster": "Poster (A4)",
|
||
"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": "Erstellen Sie 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. Erstellen Sie 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 (1–64 Zeichen)."
|
||
},
|
||
"hits_one": "{{count}} Aufruf",
|
||
"hits_other": "{{count}} Aufrufe"
|
||
},
|
||
"resetGalleryPassword": "Galerie-Passwort zurücksetzen",
|
||
"resendCreationEmail": "Erstellungs-E-Mail erneut senden",
|
||
"creationEmailResent": "Die Erstellungs-E-Mail wurde zur Warteschlange hinzugefügt",
|
||
"emailQueuedHint": "Der Warteschlangen-Prozessor versendet sie — prüfen Sie den Systemzustand, falls sie nicht ankommt.",
|
||
"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": "Legen Sie ein neues Passwort für {{eventName}} fest oder lassen Sie 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. Stellen Sie sicher, dass Sie das neue Passwort an den Host weitergeben.",
|
||
"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: Speichern Sie dieses Passwort sicher. Es kann nicht wiederhergestellt werden, sobald Sie dieses Fenster schließen.",
|
||
"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",
|
||
"hide": "Ausblenden",
|
||
"show": "Einblenden"
|
||
},
|
||
"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",
|
||
"heroLogoInherit": "Branding-Standard verwenden",
|
||
"heroLogoShow": "Immer anzeigen",
|
||
"heroLogoHide": "Immer ausblenden",
|
||
"loginLogoVisible": "Logo auf der Passwort-Seite anzeigen",
|
||
"loginLogoShow": "Anzeigen (Standard)",
|
||
"loginLogoHide": "Ausblenden",
|
||
"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": "Geben Sie das bei der Erstellung gesetzte Passwort erneut ein (oder wählen Sie 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.",
|
||
"notifyLabel": "Galerie-E-Mail jetzt senden",
|
||
"notifyHelp": "Abwählen, um still zu veröffentlichen — die Galerie geht online, es wird nichts versendet. Die E-Mail lässt sich später auf dieser Seite senden.",
|
||
"descriptionQuiet": "Durch das Veröffentlichen wird \"{{eventName}}\" zugänglich. Es wird keine E-Mail versendet — Sie können sie später auf dieser Seite senden.",
|
||
"descriptionWhatsapp": "Durch das Veröffentlichen wird \"{{eventName}}\" zugänglich. Sofern WhatsApp eingerichtet ist, wird der Kunde dort benachrichtigt.",
|
||
"descriptionAssignedAccount_one": "Die Galerie \"{{eventName}}\" wird zugänglich gemacht. Das zugewiesene Kundenkonto wird per E-Mail (in seiner Sprache) benachrichtigt, dass sie verfügbar ist.",
|
||
"descriptionAssignedAccount_other": "Die Galerie \"{{eventName}}\" wird zugänglich gemacht. Die zugewiesenen Kundenkonten werden per E-Mail (in ihrer Sprache) benachrichtigt, dass sie verfügbar ist."
|
||
},
|
||
"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": "Legen Sie 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"
|
||
},
|
||
"infoBanner": {
|
||
"title": "Info-Banner",
|
||
"help": "Ein kurzer Hinweis oberhalb der Fotos in dieser Galerie. „Übernehmen“ nutzt die globale Vorgabe, „Eigener Text“ überschreibt sie für dieses Event, „Aus“ blendet ihn aus.",
|
||
"mode_inherit": "Globale Vorgabe übernehmen",
|
||
"mode_custom": "Eigener Text für dieses Event",
|
||
"mode_off": "Aus (für dieses Event ausblenden)",
|
||
"placeholder": "Über die Menü-Schaltfläche oben links lassen sich die Fotos filtern.",
|
||
"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ählen Sie erst ein Heldenbild, das Sie bewusst öffentlich zeigen möchten, bevor Sie diese Option aktivieren.",
|
||
"heroRequired": "Wählen Sie zuerst oben ein Heldenbild — diese Option verwendet es als WhatsApp- / Facebook- / Slack-Vorschaubild."
|
||
},
|
||
"publishQuietSuccess": "Galerie veröffentlicht. Es wurde keine E-Mail versendet.",
|
||
"sendGalleryEmail": {
|
||
"button": "Galerie-E-Mail senden",
|
||
"help": "Sendet den Galerie-Link an den Kunden. Bei Galerien mit Passwort bestätigen Sie es vorher.",
|
||
"confirm": "Galerie-E-Mail an {{recipient}} senden?",
|
||
"success": "Galerie-E-Mail an {{recipient}} eingereiht.",
|
||
"title": "Galerie-E-Mail senden",
|
||
"description": "Sendet den Galerie-Link für \"{{eventName}}\" an {{recipient}}.",
|
||
"passwordHelp": "Die E-Mail enthält genau diesen Text. Geben Sie das Galerie-Passwort erneut ein (oder wählen Sie ein neues) — das Backend hasht es neu, damit der Login weiter funktioniert."
|
||
},
|
||
"bulkArchive": {
|
||
"title": "Massen-Archivierung bestätigen",
|
||
"intro_one": "Sie sind dabei, {{count}} Veranstaltung zu archivieren. Dabei wird:",
|
||
"intro_other": "Sie sind dabei, {{count}} Veranstaltungen zu archivieren. Dabei wird:",
|
||
"effectZip": "für jede Veranstaltung ein ZIP-Archiv aller Fotos erstellt",
|
||
"effectInaccessible": "der Zugriff der Gäste auf die Galerien gesperrt",
|
||
"effectDelisted": "die Veranstaltung aus den aktiven Listen entfernt",
|
||
"effectStorage": "durch Komprimieren der Fotos Speicherplatz freigegeben",
|
||
"listHeading": "Zu archivierende Veranstaltungen:",
|
||
"submit_one": "{{count}} Veranstaltung archivieren",
|
||
"submit_other": "{{count}} Veranstaltungen archivieren"
|
||
},
|
||
"customerPicker": {
|
||
"help": "Hier hinzugefügte Kunden können sich unter /customer/login anmelden und diese Galerie ansehen, ohne das Galerie-Passwort einzugeben.",
|
||
"label": "Kundenkonten",
|
||
"removeAria": "{{name}} entfernen",
|
||
"placeholder": "Nach E-Mail, Name oder Firma suchen",
|
||
"searching": "Wird gesucht…",
|
||
"noResultsCanCreate": "Keine Treffer. Legen Sie über „Neuen Kunden anlegen“ einen an.",
|
||
"noResultsNoPermission": "Keine Treffer, und Ihre Rolle darf keine Kunden anlegen. Bitten Sie eine Administratorin oder einen Administrator, diesen Kunden anzulegen."
|
||
}
|
||
},
|
||
"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",
|
||
"siteUrlEnvPinned": "Durch die Umgebungsvariable FRONTEND_URL festgelegt; sie überschreibt diese Einstellung. Entfernen Sie sie aus Ihrer .env (oder der Container-Umgebung) und starten Sie neu, um die Adresse hier zu verwalten.",
|
||
"defaultExpiration": "Standardablauf (Tage)",
|
||
"maxFileSize": "Max. Dateigröße (MB)",
|
||
"maxVideoSize": "Max. Videogröße (MB)",
|
||
"maxVideoSizeHelp": "Eigenes Limit pro Videodatei, damit für Fotos ein kleineres Limit gelten kann.",
|
||
"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, z. B. jpg,jpeg,png,webp. Gilt für alle Upload-Wege, auch Gast-Uploads und die Chunked-API für große Dateien. Videos sind standardmäßig aus: mp4, mov oder webm hinzufügen, um sie zuzulassen.",
|
||
"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",
|
||
"siteUrlInvalid": "Geben Sie die vollständige Adresse inklusive http:// oder https:// an, zum Beispiel https://galerie.example.com",
|
||
"timeFormat": "Zeitformat",
|
||
"timeFormat24h": "24-Stunden (14:30)",
|
||
"timeFormat12h": "12-Stunden (2:30 PM)",
|
||
"timeFormatHelp": "Steuert die Darstellung von Uhrzeiten in der Administration, auf kundenseitigen Seiten und in PDFs. Gespeichert wird weiterhin im 24-Stunden-Format (HH:mm) — nur die Anzeige ändert sich."
|
||
},
|
||
"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",
|
||
"catalogMeasurement": "Katalogisierte Größe — die Objekte liegen im konfigurierten S3-Bucket, nicht auf dieser Festplatte"
|
||
},
|
||
"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",
|
||
"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",
|
||
"twoFactorTitle": "Zwei-Faktor-Authentifizierung",
|
||
"twoFactorNote": "Die Zwei-Faktor-Authentifizierung wird jetzt pro Admin unter Einstellungen → Allgemein → Admin-Konto verwaltet. Jeder Admin aktiviert sie für seine eigene Anmeldung."
|
||
},
|
||
"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.",
|
||
"feedbackTypeDefaultsHelp": "Welche Feedback-Typen neue Galerien standardmäßig erhalten. Bestehende Galerien bleiben unverändert – jede Galerie lässt sich weiterhin einzeln anpassen.",
|
||
"defaultAllowRatings": "Sternebewertung",
|
||
"defaultAllowLikes": "Likes",
|
||
"defaultAllowFavorites": "Favoriten",
|
||
"defaultAllowComments": "Kommentare",
|
||
"defaultAllowReactions": "Emoji-Reaktionen",
|
||
"defaultAllowColorLabels": "Farbmarkierungen",
|
||
"defaultKeybindMode": "Standard-Tastenkürzel in der Großansicht",
|
||
"keybindColors": "Nur Farben – 1 Grün, 2 Gelb, 3 Rot",
|
||
"keybindLightroom": "Lightroom – 1–5 Sterne, 6–9 Farben"
|
||
},
|
||
"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.",
|
||
"imageQualityHelp": "1–100, höher = bessere Qualität",
|
||
"fragmentationLevelHelp": "1–10, höher = mehr Schutz",
|
||
"suspiciousActivityThresholdHelp": "Verstöße, bevor als verdächtig markiert wird",
|
||
"autoBlockThresholdHelp": "Verstöße, bevor die IP automatisch gesperrt wird"
|
||
},
|
||
"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": "Die Lightbox zeigt ein seitenverhältnis-erhaltendes JPEG mit ~1920 px (typischerweise 200–500 KB) statt des vollen Originals (oft 5–12 MB). Beim Download durch Gäste wird weiterhin das Original ausgeliefert. Vorschauen kosten pro Foto etwa eine zusätzliche Datei auf der Festplatte und liegen unter /previews.",
|
||
"lightboxToggle": "Vorab-Erzeugung von Vorschauen aktivieren",
|
||
"lightboxToggleHelp": "Standardmäßig deaktiviert: Jede Vorschau entsteht, sobald ein Gast das Foto zum ersten Mal öffnet. Aktivieren schaltet die Schaltfläche unten frei, die alle im Voraus erzeugt.",
|
||
"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",
|
||
"emailProcessorStopped": "Läuft nicht — eingereihte E-Mails werden geschrieben, aber niemand versendet sie.",
|
||
"emailProcessorDegraded": "Läuft, aber der letzte Durchlauf konnte nicht senden: {{error}}"
|
||
},
|
||
"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",
|
||
"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.",
|
||
"proxiedNotice": "Wird über Ihre eigene Domain ausgeliefert",
|
||
"proxiedNoticeText": "PicPeak lädt das Tracker-Skript und leitet dessen Ereignisse über die eigene Domain weiter, deshalb ist keine Änderung an der Content-Security-Policy oder am Reverse-Proxy nötig — und Werbeblocker sehen First-Party-Anfragen. Ihr Tracker erhält weiterhin IP-Adresse und User-Agent jedes Besuchers (als X-Forwarded-For weitergereicht), Geräte- und Standort-Auswertungen funktionieren also unverändert. Die URL muss vom PicPeak-Server aus erreichbar sein und auf eine öffentliche Adresse auflösen.",
|
||
"customOnlyCspWarningText": "PicPeak liefert eine strikte CSP aus (`script-src 'self'; connect-src 'self'`). Anders als bei den Optionen Umami und Rybbit oben wird ein eingefügtes Snippet nicht über PicPeak geleitet — tragen Sie die Domain Ihres Trackers sowohl in `script-src` (zum Laden des Skripts) als auch in `connect-src` (für die gesendeten Ereignisse) Ihrer Reverse-Proxy- oder nginx-CSP-Konfiguration ein, sonst blockiert der Browser sie stillschweigend.",
|
||
"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",
|
||
"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.",
|
||
"umamiApiKey": "API-Schlüssel",
|
||
"umamiApiKeyHelp": "Optional. Nur für das Geräte-Diagramm im Analyse-Dashboard erforderlich. Erstellen in Umami → Settings → Profile → API Keys. Nach dem Speichern maskiert als •••••••• hinterlegt — den maskierten Wert stehen lassen, um den bestehenden Schlüssel zu behalten."
|
||
},
|
||
"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",
|
||
"deliveries": {
|
||
"back": "Zurück zu den Einstellungen",
|
||
"notFound": "Webhook nicht gefunden.",
|
||
"sendTest": "Testereignis senden",
|
||
"sendTestHelp": "Sendet eine künstliche Zustellung mit Beispiel-Payload an Ihren Empfänger — ohne echte Seiteneffekte.",
|
||
"refresh": "Aktualisieren",
|
||
"send": "Senden",
|
||
"eventType": "Ereignistyp",
|
||
"total_one": "{{count}} gesamt",
|
||
"total_other": "{{count}} gesamt",
|
||
"empty": "Noch keine Zustellungen. Erstellen Sie eine Veranstaltung oder senden Sie ein Testereignis, um hier etwas zu sehen.",
|
||
"colTime": "Zeit",
|
||
"colEvent": "Ereignis",
|
||
"colStatus": "Status",
|
||
"colAttempts": "Versuche",
|
||
"colHttp": "HTTP",
|
||
"colLatency": "Latenz",
|
||
"replay": "Erneut senden",
|
||
"replayEnqueued": "Erneute Zustellung eingereiht",
|
||
"replayError": "Erneutes Senden fehlgeschlagen",
|
||
"testEnqueued": "Testereignis eingereiht",
|
||
"testError": "Testereignis konnte nicht gesendet werden",
|
||
"detailTitle": "Zustellung #{{id}}",
|
||
"lastError": "Letzter Fehler",
|
||
"responseStatus": "Antwortstatus",
|
||
"responseBody": "Antwort-Body (auf 1 KB gekürzt)",
|
||
"payload": "Payload (signierter Body)",
|
||
"status": {
|
||
"all": "alle",
|
||
"pending": "ausstehend",
|
||
"success": "erfolgreich",
|
||
"failed": "fehlgeschlagen"
|
||
}
|
||
}
|
||
},
|
||
"sectionLabel": "Einstellungsbereich",
|
||
"navAriaLabel": "Einstellungsnavigation",
|
||
"eventTypes": {
|
||
"title": "Veranstaltungstypen"
|
||
},
|
||
"cms": {
|
||
"title": "CMS-Seiten"
|
||
},
|
||
"email": {
|
||
"title": "E-Mail-Einstellungen"
|
||
},
|
||
"backup": {
|
||
"title": "Backup"
|
||
},
|
||
"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."
|
||
},
|
||
"transfers": {
|
||
"title": "PicTransfer",
|
||
"description": "Originaldateien aus beliebigen Events als sicheren, Token-geschützten Download-Link versenden – mit optionalem Kunden-Upload-Code, über den Kunden Ihnen Logos und Dateien zurücksenden können. Strikt optional.",
|
||
"sidebar": "PicTransfer"
|
||
},
|
||
"workflows": {
|
||
"title": "Workflows",
|
||
"description": "Visuelle Automatisierungen auf einer Canvas erstellen – Auslöser, Bedingungen, Verzweigungen, Schleifen und Freigabe-Gates für Admins. Ihre Mahnstufen und Buchungsschritte werden zu bearbeitbaren Abläufen. Strikt optional.",
|
||
"sidebar": "Workflows"
|
||
},
|
||
"faces": {
|
||
"title": "Personen in Galerien",
|
||
"description": "Gruppiert die Fotos jeder Galerie nach den abgebildeten Personen, damit Gäste sich mit zwei Tipps selbst finden und nur ihre eigenen Fotos herunterladen. Läuft vollständig auf Ihrem eigenen Server in einem separaten, optionalen Container — es werden keine Daten übermittelt. Erkannte Gesichter sind personenbezogene Daten; die Funktion bleibt daher aus, bis Sie sie zusätzlich pro Galerie aktivieren.",
|
||
"lockedSingleContainer": "Im All-in-One-Image nicht verfügbar. Die Gesichtserkennung benötigt einen separaten ML-Container und konkurriert mit der Bildverarbeitung um dieselbe CPU und denselben Arbeitsspeicher, was die gesamte Installation verlangsamen würde."
|
||
}
|
||
},
|
||
"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 Ihr 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."
|
||
},
|
||
"rebillAttachProof": "Lieferantenbeleg bei Weiterverrechnungen standardmäßig anhängen",
|
||
"rebillAttachProofHint": "Wenn eine erfasste Lieferantenrechnung weiterverrechnet oder durchlaufend berechnet wird, wird ihr gespeichertes PDF der Rechnungs-E-Mail als separater Beleg beigefügt. Dies ist die Voreinstellung — eine kundenspezifische Einstellung und eine Auswahl pro Datei im Senden-Dialog können sie jederzeit ändern.",
|
||
"rebillProofNameFormat": "Dateiname-Format für Belege",
|
||
"rebillProofNameFormatHint": "Dateiname des angehängten Beleg-PDFs. Platzhalter: {INVOICE}, {SUPPLIER}, {YEAR}, {MONTH}, {SEQ} (oder {SEQ:03d}). Leer lassen für den Standard „Beleg-{INVOICE}“. Bei mehreren Belegen pro Rechnung wird automatisch ein Index angehängt. Behalten Sie ein Präfix wie „Beleg-“, damit der Beleg nicht genauso heißt wie das Rechnungs-PDF."
|
||
},
|
||
"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}})."
|
||
},
|
||
"mfa": {
|
||
"title": "Zwei-Faktor-Authentifizierung",
|
||
"description": "Sichern Sie Ihre Admin-Anmeldung mit einem zweiten Schritt über eine Authenticator-App (TOTP).",
|
||
"notEnrolled": "Die Zwei-Faktor-Authentifizierung ist für Ihr Konto nicht aktiviert.",
|
||
"setUp": "Einrichten",
|
||
"setupScanInstruction": "Scannen Sie diesen QR-Code mit Ihrer Authenticator-App (z. B. Google Authenticator, 1Password, Authy).",
|
||
"manualEntry": "Oder gib diesen Schlüssel manuell ein:",
|
||
"qrAlt": "QR-Code zur Zwei-Faktor-Einrichtung",
|
||
"enterCodeLabel": "Geben Sie den 6-stelligen Code aus Ihrer App ein",
|
||
"codePlaceholder": "123456",
|
||
"enable": "Aktivieren",
|
||
"enabledBadge": "Die Zwei-Faktor-Authentifizierung ist aktiviert.",
|
||
"recoveryCodesRemaining": "Noch {{count}} Wiederherstellungscode übrig.",
|
||
"recoveryCodesRemaining_other": "Noch {{count}} Wiederherstellungscodes übrig.",
|
||
"regenerate": "Wiederherstellungscodes neu erzeugen",
|
||
"regenerateHelp": "Geben Sie einen aktuellen Authentifizierungscode ein, um neue Wiederherstellungscodes zu erzeugen. Ihre alten Codes werden ungültig.",
|
||
"regenerateConfirm": "Neu erzeugen",
|
||
"disable": "Deaktivieren",
|
||
"disablePrompt": "Geben Sie einen aktuellen Authentifizierungs- oder Wiederherstellungscode ein, um die Zwei-Faktor-Authentifizierung zu deaktivieren:",
|
||
"disableConfirmTitle": "Zwei-Faktor-Authentifizierung deaktivieren?",
|
||
"disableConfirmMessage": "Für Ihr Konto ist bei der Anmeldung dann kein zweiter Schritt mehr erforderlich. Sie können sie jederzeit wieder aktivieren.",
|
||
"disableConfirmButton": "Deaktivieren",
|
||
"disabledToast": "Zwei-Faktor-Authentifizierung deaktiviert.",
|
||
"codeRequired": "Ein Code ist erforderlich.",
|
||
"recoveryCodesWarning": "Speichern Sie diese Wiederherstellungscodes jetzt. Jeder kann einmal verwendet werden, falls Sie den Zugriff auf Ihre Authenticator-App verlieren. Sie werden nicht erneut angezeigt.",
|
||
"recoveryCodesAck": "Ich habe meine Wiederherstellungscodes an einem sicheren Ort gespeichert.",
|
||
"copy": "Kopieren",
|
||
"copied": "Kopiert",
|
||
"copyFailed": "Kopieren in die Zwischenablage fehlgeschlagen.",
|
||
"download": ".txt herunterladen",
|
||
"done": "Fertig",
|
||
"setupFailed": "Zwei-Faktor-Einrichtung konnte nicht gestartet werden. Bitte versuche es erneut.",
|
||
"enableFailed": "Zwei-Faktor-Authentifizierung konnte nicht aktiviert werden. Prüfen Sie den Code und versuchen Sie es erneut.",
|
||
"disableFailed": "Zwei-Faktor-Authentifizierung konnte nicht deaktiviert werden. Prüfen Sie den Code und versuchen Sie es erneut.",
|
||
"regenerateFailed": "Wiederherstellungscodes konnten nicht neu erzeugt werden. Prüfen Sie den Code und versuchen Sie es erneut.",
|
||
"recoveryCodesRemaining_one": "Noch {{count}} Wiederherstellungscode übrig."
|
||
},
|
||
"sso": {
|
||
"title": "Single Sign-On (OIDC)",
|
||
"intro": "Admins melden sich über Ihren Identity Provider an (Keycloak, Authentik, Pocket ID oder jeder OIDC-konforme IdP). Die lokale Anmeldung mit E-Mail/Passwort bleibt als Fallback verfügbar.",
|
||
"redirectUri": "Redirect-URI (beim IdP-Client registrieren)",
|
||
"issuerUrl": "Issuer-URL",
|
||
"issuerHint": "Die Basis-URL, die /.well-known/openid-configuration ausliefert.",
|
||
"clientId": "Client-ID",
|
||
"clientSecret": "Client-Secret",
|
||
"secretSetPlaceholder": "•••••• (gespeichert — zum Ersetzen tippen)",
|
||
"secretUnsetPlaceholder": "Client-Secret einfügen",
|
||
"secretHint": "Verschlüsselt gespeichert; wird nie wieder angezeigt. Leer lassen, um das aktuelle zu behalten.",
|
||
"scopes": "Scopes",
|
||
"autoprovision": "Unbekannte Benutzer automatisch anlegen",
|
||
"autoprovisionHint": "Erstellt beim ersten SSO-Login ein Admin-Konto. Aus: Nur bestehende/verknüpfte Admins können sich anmelden.",
|
||
"defaultRole": "Rolle für neue Benutzer",
|
||
"buttonLabel": "Beschriftung des Login-Buttons (optional)",
|
||
"buttonLabelPlaceholder": "Mit SSO anmelden",
|
||
"enabled": "SSO-Login aktivieren",
|
||
"enabledHint": "Zeigt den SSO-Button auf der Admin-Anmeldeseite. Erfordert Issuer, Client-ID und Secret.",
|
||
"test": "Verbindung testen",
|
||
"testHint": "Der Test führt OIDC-Discovery gegen die gespeicherte Konfiguration aus — zuerst speichern.",
|
||
"testOk": "Discovery erfolgreich — Issuer ist erreichbar: {{issuer}}",
|
||
"testFailed": "Discovery fehlgeschlagen",
|
||
"saved": "SSO-Einstellungen gespeichert",
|
||
"saveError": "SSO-Einstellungen konnten nicht gespeichert werden",
|
||
"roleMapping": {
|
||
"title": "Rollen-Mapping",
|
||
"intro": "Weisen Sie PicPeak-Rollen aus einem Rollen- oder Gruppen-Claim im ID-Token zu. Rollen werden bei jeder SSO-Anmeldung neu ausgewertet — der IdP wird zur führenden Quelle.",
|
||
"enabled": "Rollen-Mapping aktivieren",
|
||
"enabledHint": "Aus: Bestehende Admins behalten ihre Rolle, neue Benutzer erhalten die Standardrolle oben.",
|
||
"claim": "Rollen-Claim (Punkt-Pfad)",
|
||
"claimHint": "Keycloak: realm_access.roles · Authentik: groups · Entra ID: roles oder groups",
|
||
"mappings": "Zuordnungen (IdP-Wert → PicPeak-Rolle)",
|
||
"noMappings": "Noch keine Zuordnungen — ohne Zuordnung erhält keine Anmeldung eine Rolle vom IdP.",
|
||
"idpValuePlaceholder": "IdP-Rolle oder -Gruppe, z. B. picpeak-admins",
|
||
"addMapping": "Zuordnung hinzufügen",
|
||
"requireRole": "Zugeordnete Rolle für die Anmeldung verlangen",
|
||
"requireRoleHint": "SSO-Anmeldungen ohne zugeordnete Rolle werden abgelehnt — nur Mitglieder der zugeordneten IdP-Gruppen kommen hinein. Der letzte aktive Super Admin wird durch das Mapping nie herabgestuft."
|
||
},
|
||
"policy": {
|
||
"title": "Anmelde-Richtlinie",
|
||
"disableLocalLogin": "Lokale Passwort-Anmeldung deaktivieren",
|
||
"disableLocalLoginHint": "Die Anmeldeseite zeigt nur noch den SSO-Button und die API lehnt Passwort-Anmeldungen ab. Nur möglich, solange SSO aktiviert ist; wird SSO deaktiviert, ist die Passwort-Anmeldung automatisch wieder möglich.",
|
||
"breakGlassHint": "Ausgesperrt, weil der IdP down oder falsch konfiguriert ist? Setzen Sie die Umgebungsvariable OIDC_BREAK_GLASS=true am Backend und starten Sie neu — die Passwort-Anmeldung ist sofort wieder möglich.",
|
||
"logoutFromIdp": "Auch beim Identity Provider abmelden",
|
||
"logoutFromIdpHint": "Die Abmeldung von PicPeak beendet auch die IdP-Sitzung (RP-initiated Logout). Gilt nur für Sitzungen, die per SSO angemeldet wurden; ohne diese Option bleibt die IdP-Sitzung bestehen und der nächste SSO-Klick meldet direkt wieder an.",
|
||
"postLogoutRedirectUri": "Post-Logout-Redirect-URI (beim IdP-Client registrieren, z. B. Keycloak „Valid post logout redirect URIs“)"
|
||
}
|
||
},
|
||
"downloads": {
|
||
"title": "Download-Auflösungen",
|
||
"intro": "Die Standardgröße gibt jede Galerie standardmäßig heraus. Einzelne Galerien können das überschreiben.",
|
||
"standard": "Standardauflösung",
|
||
"original": "Original (volle Größe)",
|
||
"picker": "Gäste die Downloadgröße wählen lassen",
|
||
"pickerHint": "Fügt Sammel-Downloads eine Größenauswahl hinzu. Eigene Größen werden bei Bedarf erzeugt und sind nie größer als der Standard.",
|
||
"allowOriginal": "„Original“ in der Auswahl anbieten",
|
||
"allowOriginalHint": "Standardmäßig aus: Wer die Standardgröße reduziert, möchte in der Regel keine Dateien in voller Auflösung herausgeben.",
|
||
"presets": "Verfügbare Größen",
|
||
"presetsHint": "Größen sind eine Obergrenze — das Seitenverhältnis bleibt erhalten und Fotos werden nie vergrößert.",
|
||
"label": "Bezeichnung",
|
||
"width": "Breite",
|
||
"height": "Höhe",
|
||
"eventTitle": "Download-Auflösung",
|
||
"eventIntro": "Überschreibt die globalen Download-Einstellungen nur für diese Galerie. „Erben“ folgt Einstellungen → Download-Auflösungen.",
|
||
"inheritWith": "Erben ({{value}})",
|
||
"effective": "Gibt derzeit heraus: {{standard}}",
|
||
"pickerOn": "Gäste dürfen eine andere Größe wählen"
|
||
},
|
||
"captureDates": {
|
||
"title": "Aufnahmedaten",
|
||
"totalPhotos": "Fotos gesamt",
|
||
"withDates": "Mit Aufnahmedatum",
|
||
"missingDates": "Ohne Aufnahmedatum",
|
||
"button": "Aufnahmedaten nachtragen",
|
||
"running": "Wird nachgetragen...",
|
||
"noneToFill": "Alle Fotos haben bereits ein Aufnahmedatum",
|
||
"resultSuccess": "Letzter Lauf: {{success}} aktualisiert, {{noExif}} ohne gefundenes Datum, {{failed}} nicht erreichbar",
|
||
"skipped": "{{count}} Foto(s) wurden während des Laufs anderweitig geändert und daher nicht aktualisiert.",
|
||
"description": "Trägt „Aufnahmedatum\" aus den EXIF-Daten nach, für Fotos die vor dieser Auswertung importiert wurden. Externe Importe haben nie eines gespeichert, dadurch sortieren diese Galerien nach Importreihenfolge statt nach Aufnahmezeit.",
|
||
"skipped_one": "{{count}} Foto wurde während des Laufs anderweitig geändert und daher nicht aktualisiert.",
|
||
"skipped_other": "{{count}} Fotos wurden während des Laufs anderweitig geändert und daher nicht aktualisiert."
|
||
},
|
||
"orientationBackfill": {
|
||
"title": "Fotoausrichtung",
|
||
"description": "Liest die EXIF-Ausrichtung für Fotos neu ein, die vor der Drehungskorrektur importiert wurden, korrigiert ihre gespeicherten Maße und verwirft Thumbnails, Vorschauen und Hero-Bilder, die aus den ungedrehten Originalen erzeugt wurden. Es werden nur Fotos angefasst, deren Ausrichtung sich tatsächlich ändert.",
|
||
"button": "Fotoausrichtung korrigieren",
|
||
"running": "Ausrichtung wird geprüft...",
|
||
"resultSuccess": "Letzter Lauf: {{checked}} geprüft, {{corrected}} korrigiert, {{requeued}} erneut zur Gesichtserkennung eingereiht, {{failed}} nicht erreichbar",
|
||
"staleTiers": "{{count}} zwischengespeicherte Größe(n) konnten nicht gelöscht werden und liefern weiterhin die alte Ausrichtung — bitte erneut ausführen, sobald der Speicher beschreibbar ist.",
|
||
"staleTiers_one": "{{count}} zwischengespeicherte Größe konnte nicht gelöscht werden und liefert weiterhin die alte Ausrichtung — bitte erneut ausführen, sobald der Speicher beschreibbar ist.",
|
||
"staleTiers_other": "{{count}} zwischengespeicherte Größen konnten nicht gelöscht werden und liefern weiterhin die alte Ausrichtung — bitte erneut ausführen, sobald der Speicher beschreibbar ist."
|
||
},
|
||
"saved": "Einstellungen gespeichert",
|
||
"saveError": "Einstellungen konnten nicht gespeichert werden"
|
||
},
|
||
"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ählen Sie eine der mitgelieferten Schriftarten aus oder belassen Sie 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",
|
||
"title": "Werbebanner in der Galerie",
|
||
"help": "Markdown, das über oder unter der Galerie-Fußzeile angezeigt wird (z. B. Saisonangebot, Print-Rabatt). Einstellungen auf Veranstaltungsebene haben Vorrang.",
|
||
"position": "Position",
|
||
"aboveFooter": "Über der Fußzeile",
|
||
"belowFooter": "Unter der Fußzeile",
|
||
"content": "Inhalt (Markdown)",
|
||
"placeholder": "**Frühlingsaktion**: 20 % Rabatt auf Abzüge mit dem Code SPRING — zum [Print-Shop](https://example.com).",
|
||
"markdownHelp": "Fett, kursiv, Links, Listen und Überschriften werden unterstützt. HTML wird entfernt.",
|
||
"preview": "Vorschau"
|
||
},
|
||
"infoBanner": {
|
||
"title": "Info-Banner der Galerie",
|
||
"description": "Ein kurzer Hinweis oberhalb der Fotos in jeder Galerie — praktisch für Bedienhinweise. Leer lassen, um ihn auszublenden. Einzelne Events können ihn überschreiben oder abschalten.",
|
||
"content": "Inhalt (Markdown)",
|
||
"placeholder": "Über die Menü-Schaltfläche oben links lassen sich die Fotos filtern.",
|
||
"markdownHelp": "Fett, kursiv, Links, Listen und Überschriften werden unterstützt. HTML wird entfernt.",
|
||
"preview": "Vorschau"
|
||
},
|
||
"socialMedia": {
|
||
"title": "Soziale Medien",
|
||
"help": "Hinterlegen Sie URLs, um Social-Media-Symbole in der Galerie-Fußzeile anzuzeigen. Lassen Sie ein Feld leer, um das jeweilige Symbol auszublenden.",
|
||
"whatsappHelp": "Eine wa.me-URL oder eine Telefonnummer mit Ländervorwahl (wird umgewandelt)."
|
||
}
|
||
},
|
||
"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",
|
||
"viewOnGithub": "PicPeak auf GitHub ansehen",
|
||
"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"
|
||
},
|
||
"viewDetails": "Versionshinweise und Update-Anleitung ansehen",
|
||
"registryMoved": {
|
||
"title": "Bezug aus der stillgelegten Image-Registry",
|
||
"body": "Dieses Update erreicht Sie erst, wenn Sie den Image-Pfad in der docker-compose.yml auf {{newPath}} ändern. Der alte Pfad antwortet weiterhin, deshalb wirkt `docker compose pull` erfolgreich, liefert aber denselben eingefrorenen Build.",
|
||
"link": "Migrationshinweise ansehen"
|
||
},
|
||
"copyFailed": "Kopieren in die Zwischenablage fehlgeschlagen.",
|
||
"modalTitle": "Update verfügbar",
|
||
"modalSubtitle": "v{{current}} → v{{latest}}",
|
||
"howToUpgrade": "So aktualisieren Sie",
|
||
"detectedEnv": "Erkannte Umgebung: {{env}}",
|
||
"copyCommand": "Befehl kopieren",
|
||
"releaseNotes": "Versionshinweise",
|
||
"changelogError": "Versionshinweise konnten nicht geladen werden. Bitte die Release-Seiten direkt auf GitHub prüfen.",
|
||
"noReleases": "Keine Versionshinweise verfügbar.",
|
||
"viewOnGitHub": "Auf GitHub ansehen",
|
||
"noNotes": "Keine Versionshinweise hinterlegt.",
|
||
"dismissUntilNext": "Bis zur nächsten Version ausblenden"
|
||
},
|
||
"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",
|
||
"galleryOpened": "Ein Gast hat die Galerie „{{eventName}}“ geöffnet",
|
||
"galleryDownloaded": "Ein Gast hat Fotos aus „{{eventName}}“ heruntergeladen",
|
||
"galleryDownloadedCustomer": "Kunde hat Fotos aus „{{eventName}}“ heruntergeladen",
|
||
"photoFavorite": "Ein Foto in „{{eventName}}“ wurde favorisiert",
|
||
"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",
|
||
"bulkDeleteCompleted_one": "Massen-Löschung abgeschlossen: {{count}} Event entfernt",
|
||
"bulkDeleteCompleted_other": "Massen-Löschung abgeschlossen: {{count}} Events entfernt",
|
||
"bulkArchiveCompleted_one": "Massen-Archivierung abgeschlossen: {{count}} Event archiviert",
|
||
"bulkArchiveCompleted_other": "Massen-Archivierung abgeschlossen: {{count}} Events archiviert",
|
||
"cssTemplateRemoteUrlsRemoved": "Externe URLs aus {{count}} CSS-Vorlage(n) entfernt — siehe Release Notes"
|
||
},
|
||
"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",
|
||
"hiddenTooltip": "Für Gäste ausgeblendet — dieses Foto erscheint nicht in der Kundengalerie.",
|
||
"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"
|
||
},
|
||
"myMarks": "Ihre Markierungen",
|
||
"myMarksHelp": "Nur für Sie sichtbar. Sie erscheinen nie in der Kundengalerie und werden als XMP nach Lightroom exportiert.",
|
||
"myRating": "Ihre Bewertung",
|
||
"clearRating": "Ihre Bewertung entfernen",
|
||
"rateStars": "Mit {{count}} Sternen bewerten",
|
||
"markError": "Markierung konnte nicht gespeichert werden",
|
||
"yourMarkColor": "Ihre Markierung: {{color}}",
|
||
"yourMarkRating": "Ihre Bewertung: {{count}}",
|
||
"rateStars_one": "Mit {{count}} Stern bewerten",
|
||
"rateStars_other": "Mit {{count}} Sternen bewerten",
|
||
"yourMarkRating_one": "Ihre Bewertung: {{count}}",
|
||
"yourMarkRating_other": "Ihre Bewertung: {{count}}"
|
||
},
|
||
"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",
|
||
"reactions": "Reaktionen",
|
||
"lastSeen": "Zuletzt gesehen",
|
||
"colorLabels": "Farbmarkierungen"
|
||
},
|
||
"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",
|
||
"reacted": "Reagiert",
|
||
"commented": "Kommentiert",
|
||
"labeled": "Farbmarkierungen"
|
||
},
|
||
"inviteStatus": {
|
||
"pending": "Ausstehend",
|
||
"redeemed": "Eingelöst",
|
||
"revoked": "Widerrufen"
|
||
},
|
||
"duplicatesFound": "{{guests}} Gasteinträge sehen nach {{groups}} wiederkehrenden Besucher(n) aus — gleiche E-Mail, mehrfach registriert. Ihre Auswahl bleibt geteilt, bis sie zusammengeführt werden.",
|
||
"reviewDuplicates": "Prüfen",
|
||
"duplicateBadge": "Duplikat?",
|
||
"duplicateHint": "Ein anderer Eintrag in dieser Galerie nutzt dieselbe E-Mail — vermutlich dieselbe Person, zweimal registriert.",
|
||
"mergePickKeep": "Bitte wählen, welcher Eintrag bleiben soll",
|
||
"mergePickKeepHint": "Eintrag zum Behalten wählen",
|
||
"mergeKeepColumn": "Behalten",
|
||
"mergeKeepRow": "{{name}} behalten",
|
||
"mergeInclude": "{{name}} in die Zusammenführung einbeziehen"
|
||
},
|
||
"analytics": "Analytik",
|
||
"activities": {
|
||
"event_created": "Neues Ereignis erstellt: {{eventName}}",
|
||
"gallery_opened": "Galerie „{{eventName}}“ wurde geöffnet",
|
||
"gallery_downloaded": "Fotos aus „{{eventName}}“ wurden heruntergeladen",
|
||
"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}}",
|
||
"photo_reaction": "Foto-Reaktion in {{eventName}}",
|
||
"guest_feedback_like": "Gast hat ein Foto geliked in {{eventName}}",
|
||
"guest_feedback_reaction": "Gast hat auf ein Foto in {{eventName}} reagiert",
|
||
"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",
|
||
"feature_flags_summary_one": "{{count}} Funktion aktualisiert: {{summary}}",
|
||
"feature_flags_summary_other": "{{count}} Funktionen aktualisiert: {{summary}}",
|
||
"feature_flags_updated": "Funktionseinstellungen aktualisiert",
|
||
"newsletter_created": "Newsletter-Kampagne erstellt",
|
||
"newsletter_updated": "Newsletter-Kampagne aktualisiert",
|
||
"newsletter_test_sent": "Newsletter-Test-E-Mail gesendet",
|
||
"newsletter_queued": "Newsletter an {{recipients}} Empfänger eingereiht",
|
||
"newsletter_cancelled": "Newsletter-Kampagne abgebrochen",
|
||
"newsletter_completed": "Newsletter abgeschlossen — {{sent}} gesendet, {{failed}} fehlgeschlagen",
|
||
"newsletter_deleted": "Newsletter-Kampagne gelöscht",
|
||
"customer_marketing_opt_out": "Newsletter-Einwilligung des Kunden geändert",
|
||
"css_template_remote_urls_removed": "Externe URLs aus {{count}} CSS-Vorlage(n) entfernt — siehe Release Notes"
|
||
},
|
||
"people": {
|
||
"title": "Personen in dieser Galerie",
|
||
"subtitle": "Umbenennen, getrennte Personen zusammenführen oder jemanden vor Gästen verbergen.",
|
||
"select": "Zum Zusammenführen auswählen",
|
||
"unnamed": "Namen hinzufügen",
|
||
"namePlaceholder": "Namen hinzufügen",
|
||
"photoCount": "{{count}} Fotos",
|
||
"hidden": "für Gäste verborgen",
|
||
"ignored": "ignoriert",
|
||
"renamed": "Name gespeichert",
|
||
"merged": "Personen zusammengeführt",
|
||
"split": "Als neue Person abgetrennt",
|
||
"updated": "Aktualisiert",
|
||
"merge": "Zusammenführen",
|
||
"mergeHint": "Tippen Sie zwei oder mehr Gesichter an, um sie zu einer Person zusammenzuführen.",
|
||
"selectedCount": "{{count}} ausgewählt",
|
||
"coverTruncated": "Es werden die {{limit}} Gesichter mit der höchsten Konfidenz gezeigt.",
|
||
"contextTruncated": "Es werden die ersten {{limit}} Aufnahmen dieser Person gezeigt.",
|
||
"contextUnavailable": "Für diese Person konnte kein Foto geladen werden.",
|
||
"contextAction": "Diese Person in ihrem Foto ansehen",
|
||
"contextHelp": "Das erkannte Gesicht, im Originalfoto markiert — wer daneben stand, klärt meist, ob zwei ähnliche Personen dieselbe sind.",
|
||
"contextNoBox": "Für dieses Foto sind keine Abmessungen gespeichert, daher kann das erkannte Gesicht nicht markiert werden.",
|
||
"contextPrev": "Vorheriges Foto dieser Person",
|
||
"contextNext": "Nächstes Foto dieser Person",
|
||
"coverAction": "Wählen, welches Foto diese Person darstellt",
|
||
"coverHelp": "Wählen Sie das Foto, das diese Person am besten zeigt. Es wird zum Avatar hier und in der Personenleiste für Gäste.",
|
||
"coverPick": "Als Titelbild verwenden",
|
||
"coverSet": "Titelbild aktualisiert",
|
||
"splitAction": "Fotos abtrennen, die jemand anderes zeigen",
|
||
"hideAction": "Vor Gästen verbergen",
|
||
"ignoreAction": "Keine echte Person — ignorieren",
|
||
"splitHelp": "Wählen Sie die Fotos aus, die NICHT diese Person zeigen. Sie werden zu einem neuen Eintrag, alles andere bleibt.",
|
||
"splitSelected": "{{count}} ausgewählt",
|
||
"doSplit": "Abtrennen",
|
||
"empty": "Noch keine Personen erkannt.",
|
||
"photoCount_one": "{{count}} Foto",
|
||
"photoCount_other": "{{count}} Fotos",
|
||
"suggestionsHeading": "Das könnte dieselbe Person sein. Die Gruppierung war sich nicht sicher genug, um sie von selbst zusammenzuführen.",
|
||
"suggestionScore": "{{percent}}% ähnlich",
|
||
"suggestionAccept": "Dieselbe Person",
|
||
"suggestionReject": "Nicht dieselbe",
|
||
"suggestionDismissed": "Getrennt gelassen",
|
||
"merged_one": "Personen zusammengeführt",
|
||
"merged_other": "Personen zusammengeführt",
|
||
"splitSelected_one": "{{count}} ausgewählt",
|
||
"splitSelected_other": "{{count}} ausgewählt",
|
||
"suggestionsHeading_one": "Das könnte dieselbe Person sein. Die Gruppierung war sich nicht sicher genug, um sie von selbst zusammenzuführen.",
|
||
"suggestionsHeading_other": "Das könnte dieselbe Person sein. Die Gruppierung war sich nicht sicher genug, um sie von selbst zusammenzuführen.",
|
||
"selectedCount_one": "{{count}} ausgewählt",
|
||
"selectedCount_other": "{{count}} ausgewählt"
|
||
},
|
||
"faces": {
|
||
"manage": "Personen verwalten",
|
||
"visibleToGuests": "({{count}} für Gäste sichtbar)",
|
||
"title": "Personen in dieser Galerie",
|
||
"subtitle": "Fotos nach den abgebildeten Personen gruppieren, damit Gäste ihre eigenen finden und herunterladen können.",
|
||
"consentNotice": "Erkannte Gesichter sind personenbezogene Daten und gelten in der EU als besondere Kategorie. Sie sind für diese Galerie verantwortlich: Stellen Sie sicher, dass Sie eine Rechtsgrundlage für die abgebildeten Personen haben, bevor Sie dies aktivieren. Nichts verlässt Ihren Server — die Erkennung läuft in Ihrem eigenen Container.",
|
||
"consentLearnMore": "Hinweise lesen",
|
||
"enable": "Personen in dieser Galerie erkennen",
|
||
"enableHint": "Vorhandene Fotos werden im Hintergrund durchsucht. Gesichter und ihre numerischen Signaturen werden in Ihrer Datenbank gespeichert; sie sind niemals in Backups oder Exporten enthalten.",
|
||
"visible": "Personenleiste für Gäste anzeigen",
|
||
"visibleHint": "Ausgeschaltet erhalten nur Sie die Gruppierung als privates Werkzeug, und Gäste sehen eine unveränderte Galerie.",
|
||
"previewNotice": "Die Erkennung arbeitet mit der Vorschaugröße jedes Fotos. In Galerien ohne vorhandene Vorschaubilder werden diese beim ersten Durchlauf erzeugt, was zusätzliche CPU-Last und Speicherplatz benötigt.",
|
||
"scanning": "Wird durchsucht… {{scanned}} von {{total}} Fotos",
|
||
"status": "{{scanned}} / {{total}} Fotos durchsucht · {{people}} Personen",
|
||
"failed": "{{count}} fehlgeschlagen",
|
||
"queued": "{{count}} Fotos werden nach Personen durchsucht…",
|
||
"rescan": "Erneut durchsuchen",
|
||
"rescanQueued": "Erneute Suche eingeplant",
|
||
"recluster": "Personen neu gruppieren",
|
||
"reclustered": "Personen neu gruppiert",
|
||
"delete": "Alle Gesichtsdaten löschen",
|
||
"deleted": "Gesichtsdaten gelöscht",
|
||
"confirmDelete": "Alle erkannten Personen und Gesichtsdaten dieser Galerie löschen? Dies kann nicht rückgängig gemacht werden. Die Fotos selbst bleiben unverändert.",
|
||
"autoCategories": "Fotos automatisch in Kategorien einsortieren",
|
||
"autoCategoriesHint": "Nutzt die Anzahl der Gesichter, um Fotos als Details, Porträts, Kleine Gruppen oder Gruppen abzulegen. Gilt für alle Galerien, füllt ausschließlich leere Kategorien und ändert niemals eine von Ihnen gesetzte.",
|
||
"sidecarUnreachable": "Der Gesichtserkennungs-Dienst unter {{url}} ist nicht erreichbar, deshalb werden die {{pending}} eingereihten Fotos nicht verarbeitet. Es geht nichts verloren — der Scan läuft von selbst weiter, sobald der Dienst wieder da ist. Starten Sie ihn mit `docker compose --profile faces up -d`; er beendet sich sofort, wenn FACE_ML_TOKEN nicht auf denselben Wert wie im Backend gesetzt ist — einen Standardwert gibt es nicht.",
|
||
"sidecarUnauthorized": "Der Gesichtserkennungs-Dienst unter {{url}} weist unser Token zurück; Fotos werden als fehlgeschlagen markiert statt erneut versucht. Setzen Sie FACE_ML_TOKEN im Backend und im picpeak-ml-Container identisch, starten Sie beide neu und nutzen Sie dann Neu scannen — das Token allein zu korrigieren verarbeitet die bereits fehlgeschlagenen Fotos nicht erneut.",
|
||
"sidecarRejected": "{{url}} antwortet, aber nicht wie der Gesichtserkennungs-Dienst — Fotos werden als fehlgeschlagen markiert statt erneut versucht. Prüfen Sie, ob FACE_ML_URL auf den picpeak-ml-Container zeigt und kein Proxy dazwischenliegt, und nutzen Sie dann Neu scannen für die bereits fehlgeschlagenen Fotos.",
|
||
"sidecarStateNow": "Aktueller Zustand des Dienstes — einige der Fehler oben können eine andere Ursache haben, aber ein erneuter Scan wird erst nach der Behebung erfolgreich sein:",
|
||
"consolidated_one": "Beim letzten Scan wurde {{count}} ähnliches Paar automatisch zusammengeführt. Prüfen Sie es unter „Personen verwalten“ — falsch Zusammengeführtes lässt sich mit „Trennen“ wieder aufteilen.",
|
||
"consolidated_other": "Beim letzten Scan wurden {{count}} ähnliche Paare automatisch zusammengeführt. Prüfen Sie sie unter „Personen verwalten“ — falsch Zusammengeführtes lässt sich mit „Trennen“ wieder aufteilen.",
|
||
"queued_one": "{{count}} Foto wird nach Personen durchsucht…",
|
||
"queued_other": "{{count}} Fotos werden nach Personen durchsucht…",
|
||
"visibleToGuests_one": "({{count}} für Gäste sichtbar)",
|
||
"visibleToGuests_other": "({{count}} für Gäste sichtbar)",
|
||
"failed_one": "{{count}} fehlgeschlagen",
|
||
"failed_other": "{{count}} fehlgeschlagen"
|
||
},
|
||
"catalogedMedia": "{{size}} katalogisiert",
|
||
"storageUnavailable": "nicht verfügbar",
|
||
"catalogedMediaOnly": "katalogisiert — Objekte liegen in S3",
|
||
"viewReleaseNotes": "Versionshinweise auf GitHub ansehen",
|
||
"expandSidebar": "Seitenleiste ausklappen",
|
||
"collapseSidebar": "Seitenleiste einklappen",
|
||
"viewOnGithub": "PicPeak auf GitHub ansehen"
|
||
},
|
||
"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": {
|
||
"downloadFailed": "Download fehlgeschlagen",
|
||
"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.",
|
||
"catalogedMedia": "Katalogisierte Medien",
|
||
"storageUnavailable": "nicht verfügbar",
|
||
"storageNoMeasurement": "keine Messung verfügbar"
|
||
},
|
||
"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.",
|
||
"pollOk_one": "Postfach geprüft — {{count}} neue E-Mail übernommen.",
|
||
"pollOk_other": "Postfach geprüft — {{count}} neue E-Mails übernommen.",
|
||
"foldersDetected_one": "{{count}} Ordner gefunden.",
|
||
"foldersDetected_other": "{{count}} Ordner gefunden."
|
||
},
|
||
"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"
|
||
},
|
||
"retries_one": "{{count}} Versuch",
|
||
"retries_other": "{{count}} Versuche",
|
||
"pagination_one": "Seite {{page}} von {{total}} · {{count}} E-Mail",
|
||
"pagination_other": "Seite {{page}} von {{total}} · {{count}} E-Mails"
|
||
},
|
||
"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. Sie können 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"
|
||
},
|
||
"customerMailbox": {
|
||
"title": "Kunden-Postfach (hello@)",
|
||
"subtitle": "Ein zweites Eingangspostfach für Kundenkommunikation. Die E-Mails erscheinen unter Nachrichten → Kunden; Anhänge werden nicht an die Buchhaltung weitergeleitet.",
|
||
"enabled": "Dieses Postfach jede Minute abrufen",
|
||
"outgoing": "Ausgang (SMTP)",
|
||
"outgoingHint": "Antworten aus diesem Postfach werden von hier gesendet. Leer lassen, um die globale Absenderadresse zu verwenden.",
|
||
"fromEmail": "Absenderadresse",
|
||
"smtpHost": "SMTP-Host",
|
||
"smtpUser": "SMTP-Benutzername",
|
||
"smtpPass": "SMTP-Passwort",
|
||
"smtpSsl": "SSL (465)",
|
||
"smtpStarttls": "STARTTLS (587)",
|
||
"save": "Kunden-Postfach speichern",
|
||
"savedToast": "Kunden-Postfach gespeichert.",
|
||
"requiredFields": "Host, Port und Benutzername sind erforderlich.",
|
||
"testOk": "Verbunden mit {{folder}} — {{messages}} Nachrichten, {{unseen}} ungelesen.",
|
||
"testFailed": "Verbindung fehlgeschlagen."
|
||
},
|
||
"signatureOn": "Fusszeilen-Signatur ist an — Ihre Geschäftsadresse wird an automatische E-Mails angehängt. Antworten, die Sie unter Nachrichten schreiben, werden unverändert gesendet.",
|
||
"signatureOff": "Fusszeilen-Signatur ist aus — E-Mails zeigen nur Logo und Firmenname.",
|
||
"signatureEdit": "Im Geschäftsprofil bearbeiten"
|
||
},
|
||
"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",
|
||
"editor": {
|
||
"placeholder": "Beginnen Sie hier mit Ihrem Inhalt …",
|
||
"viewEdit": "Bearbeiten",
|
||
"viewPreview": "Vorschau",
|
||
"viewSplit": "Geteilt",
|
||
"save": "Speichern",
|
||
"help": "Hilfe & Tastenkürzel",
|
||
"enterFullscreen": "Vollbild",
|
||
"exitFullscreen": "Vollbild beenden",
|
||
"linkUrlPlaceholder": "URL eingeben …",
|
||
"addLink": "Link einfügen",
|
||
"wordCount_one": "{{count}} Wort",
|
||
"wordCount_other": "{{count}} Wörter",
|
||
"charCount_one": "{{count}} Zeichen",
|
||
"charCount_other": "{{count}} Zeichen",
|
||
"lineBreakHint": "Umschalt+Enter für einen Zeilenumbruch, Enter für einen neuen Absatz",
|
||
"helpTitle": "Editor-Hilfe & Tastenkürzel",
|
||
"helpFormatting": "Textformatierung",
|
||
"helpHeadings": "Überschriften",
|
||
"helpLists": "Listen & Blöcke",
|
||
"helpAlignment": "Textausrichtung",
|
||
"helpAlignmentClick": "Ausrichtungs-Schaltflächen in der Symbolleiste anklicken",
|
||
"helpAlignmentScope": "Funktioniert für Absätze und Überschriften",
|
||
"helpLineBreaks": "Zeilenumbrüche",
|
||
"helpNewParagraph": "Neuer Absatz",
|
||
"helpLineBreak": "Zeilenumbruch (Formatierung bleibt erhalten)",
|
||
"helpNavigation": "Navigation",
|
||
"tool": {
|
||
"heading1": "Überschrift 1 (Strg+Alt+1)",
|
||
"heading2": "Überschrift 2 (Strg+Alt+2)",
|
||
"heading3": "Überschrift 3 (Strg+Alt+3)",
|
||
"heading4": "Überschrift 4 (Strg+Alt+4)",
|
||
"heading5": "Überschrift 5 (Strg+Alt+5)",
|
||
"heading6": "Überschrift 6 (Strg+Alt+6)",
|
||
"bold": "Fett (Strg+B)",
|
||
"italic": "Kursiv (Strg+I)",
|
||
"inlineCode": "Inline-Code (Strg+E)",
|
||
"codeBlock": "Codeblock (Strg+Alt+C)",
|
||
"bulletList": "Aufzählung (Strg+Umschalt+8)",
|
||
"numberedList": "Nummerierte Liste (Strg+Umschalt+9)",
|
||
"blockquote": "Zitatblock (Strg+Umschalt+B)",
|
||
"addLink": "Link einfügen (Strg+K)",
|
||
"horizontalRule": "Trennlinie",
|
||
"alignLeft": "Linksbündig",
|
||
"alignCenter": "Zentriert",
|
||
"alignRight": "Rechtsbündig",
|
||
"justify": "Blocksatz",
|
||
"clearFormatting": "Formatierung entfernen",
|
||
"undo": "Rückgängig (Strg+Z)",
|
||
"redo": "Wiederherstellen (Strg+Y)",
|
||
"boldShort": "Fett",
|
||
"italicShort": "Kursiv",
|
||
"inlineCodeShort": "Inline-Code",
|
||
"addLinkShort": "Link einfügen",
|
||
"heading1Short": "Überschrift 1",
|
||
"heading2Short": "Überschrift 2",
|
||
"heading3Short": "Überschrift 3",
|
||
"heading4Short": "Überschrift 4",
|
||
"heading5Short": "Überschrift 5",
|
||
"heading6Short": "Überschrift 6",
|
||
"bulletListShort": "Aufzählung",
|
||
"numberedListShort": "Nummerierte Liste",
|
||
"blockquoteShort": "Zitatblock",
|
||
"codeBlockShort": "Codeblock",
|
||
"undoShort": "Rückgängig",
|
||
"redoShort": "Wiederherstellen"
|
||
}
|
||
},
|
||
"showInFooter": "In der Galerie-Fußzeile anzeigen",
|
||
"showInFooterHelp": "Wenn deaktiviert, wird diese Seite in der öffentlichen Galerie-Fußzeile ausgeblendet. Die Seite selbst bleibt über ihre direkte URL erreichbar."
|
||
},
|
||
"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": "Aktualisieren Sie Ihre 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": {
|
||
"reaction": "Reaktion",
|
||
"reactions": "Reaktionen",
|
||
"reactWith": "Mit {{emoji}} reagieren",
|
||
"removeReaction": "{{emoji}}-Reaktion entfernen",
|
||
"reactionError": "Reaktion konnte nicht aktualisiert werden",
|
||
"totalReactions": "Reaktionen gesamt",
|
||
"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",
|
||
"reactions": "Emoji-Reaktionen",
|
||
"reactionsDesc": "Ein Emoji pro Gast und Foto (❤️ 😂 😍 👏 🎉)",
|
||
"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.",
|
||
"identityModeShared": "Ein gemeinsamer Farb-Tag",
|
||
"identityModeSharedDesc": "Eine Farbe pro Foto, die alle sehen und jeder ändern kann — für ein gemeinsam abgestimmtes Urteil. Likes, Bewertungen und Kommentare bleiben besucherbezogen.",
|
||
"identityModeSharedNote": "Farb-Tags haben in diesem Modus keinen Urheber, die Admin-Ansicht kann also nicht zeigen, wer einen gesetzt hat. Vorhandene besucherbezogene Farbmarkierungen bleiben erhalten, werden in diesem Modus aber nicht angezeigt und kehren beim Wechsel zurück.",
|
||
"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",
|
||
"colorLabels": "Farbmarkierungen",
|
||
"colorLabelsDesc": "Eine Farbe pro Gast und Foto – im Farbschema von Lightroom, damit die Auswahl per XMP übernommen werden kann",
|
||
"keybindMode": "Tastenkürzel",
|
||
"keybindColors": "Nur Farben (am einfachsten)",
|
||
"keybindColorsDesc": "1 = Grün (1. Wahl), 2 = Gelb (2. Wahl), 3 = Rot (aussortiert)",
|
||
"keybindLightroom": "Lightroom-Standard",
|
||
"keybindLightroomDesc": "1–5 vergeben Sterne, 6–9 setzen Rot / Gelb / Grün / Blau"
|
||
},
|
||
"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",
|
||
"reaction": "Reaktionen"
|
||
},
|
||
"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)",
|
||
"colorLabels": {
|
||
"red": "Rot",
|
||
"yellow": "Gelb",
|
||
"green": "Grün",
|
||
"blue": "Blau",
|
||
"purple": "Violett"
|
||
},
|
||
"colorLabel": "Farbmarkierung",
|
||
"colorLabelsTitle": "Farbmarkierungen",
|
||
"colorLabelError": "Farbmarkierung konnte nicht gespeichert werden",
|
||
"removeColorLabel": "Markierung {{color}} entfernen",
|
||
"setColorLabel": "Als {{color}} markieren",
|
||
"markedAs": "Markiert als {{color}}",
|
||
"alsoMarkedBy": "Auch von anderen markiert: {{colors}}"
|
||
},
|
||
"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",
|
||
"colorLabels": "Farbmarkierungen",
|
||
"showOnlyColor": "Nur {{color}} anzeigen",
|
||
"myColorLabels": "Ihre Markierungen",
|
||
"showOnlyMyColor": "Nur meine Markierungen in {{color}} anzeigen"
|
||
},
|
||
"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"
|
||
},
|
||
"markSource": "XMP-Sterne & -Farbe aus",
|
||
"markSourceClient": "Kundenauswahl",
|
||
"markSourceMine": "Ihre Markierungen"
|
||
},
|
||
"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"
|
||
},
|
||
"orderLabel": "Reihenfolge",
|
||
"order": {
|
||
"chronological": "Chronologisch",
|
||
"random": "Zufällig (mischen)"
|
||
},
|
||
"categoryLabel": "Nur Kategorie zeigen",
|
||
"categoryAll": "Alle Fotos",
|
||
"watermarkToggle": "Logo-Wasserzeichen anzeigen",
|
||
"qrToggle": "Galerie-QR-Code",
|
||
"qrDescription": "Zeigt den Galerie-Link als QR-Code, damit Gäste ihn direkt vom Bildschirm scannen können.",
|
||
"qrModeHint": "Position, Größe und Deckkraft werden unter Einstellungen → Slideshow konfiguriert.",
|
||
"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": "Ein paar Angaben zum Abschluss der Einrichtung. Alles, was Sie überspringen, behält seinen Standardwert und kann später in den Einstellungen gesetzt 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": "Wird verwendet, um Galerielinks an Ihre Kundinnen und Kunden zu senden, ausserdem für Gasteinladungen, Ablaufwarnungen sowie Erinnerungen und Rechnungen, die Sie aktivieren. Leer lassen, um dies später unter Einstellungen → E-Mail einzurichten.",
|
||
"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 — prüfen Sie die Angaben unten oder wählen Sie „Vorerst überspringen“ und schliessen Sie sie in den Einstellungen ab.",
|
||
"siteUrl": "Öffentliche Adresse",
|
||
"siteUrlHint": "Unter dieser Adresse erreichen Ihre Kundinnen und Kunden die Galerie. Vorausgefüllt mit der Adresse, die Sie gerade geöffnet haben — ändern Sie sie, wenn Sie PicPeak hinter einer Domain oder einem Reverse Proxy betreiben. Sie können das jederzeit unter Einstellungen → Allgemein anpassen.",
|
||
"siteUrlInvalid": "Geben Sie die vollständige Adresse inklusive http:// oder https:// an, zum Beispiel https://galerie.example.com",
|
||
"siteUrlRejected": "Der Server hat diese Adresse abgelehnt. Verwenden Sie den vollständigen Ursprung, zum Beispiel https://galerie.example.com oder http://192.168.1.50:3000.",
|
||
"fromEmailRequiredPlaceholder": "Absenderadresse (erforderlich)",
|
||
"fromEmailRequired": "Eine Absenderadresse ist erforderlich, wenn ein SMTP-Host gesetzt ist.",
|
||
"fromEmailInvalid": "Geben Sie eine gültige E-Mail-Adresse ein.",
|
||
"smtpPortInvalid": "Geben Sie einen Port zwischen 1 und 65535 an."
|
||
},
|
||
"eventTypes": {
|
||
"subtitle": "Welche Veranstaltungen fotografieren Sie?",
|
||
"intro": "Veranstaltungsarten ordnen Ihre Galerien — jede Art erhält ein eigenes URL-Präfix und Standard-Theme. Die Vorschläge unten sind nur ein Startpunkt: Benennen Sie sie um, entfernen Sie Unnötiges oder fügen Sie eigene hinzu. Nur jetzt können die mitgelieferten Arten gelöscht werden; später lassen sie sich nur umbenennen oder deaktivieren.",
|
||
"nameLabel": "Anzeigename",
|
||
"namePlaceholder": "z.B. Familienshooting",
|
||
"slugLabel": "URL-Präfix",
|
||
"slugPlaceholder": "z.B. familie",
|
||
"add": "Veranstaltungsart hinzufügen",
|
||
"hint": "Das URL-Präfix erscheint in Galerie-Links (z.B. familie-mueller-2025-06-01). Symbole, Themes und Reihenfolge können Sie später unter Einstellungen → Veranstaltungsarten anpassen.",
|
||
"atLeastOne": "Behalten Sie mindestens eine Veranstaltungsart — jede Galerie braucht eine.",
|
||
"loadFailed": "Veranstaltungsarten konnten nicht geladen werden — Sie können sie später unter Einstellungen → Veranstaltungsarten anpassen.",
|
||
"saveFailed": "Einige Änderungen konnten nicht gespeichert werden — Sie können sie unter Einstellungen → Veranstaltungsarten abschließen.",
|
||
"deleteFailed": "Eine Löschung ist fehlgeschlagen — die Liste wurde neu geladen. Mitgelieferte Arten können nur hier gelöscht werden; versuchen Sie es erneut oder fahren Sie mit ihnen fort."
|
||
},
|
||
"community": {
|
||
"subtitle": "Alles bereit",
|
||
"mission": "PicPeak gibt es, damit Fotografinnen und Fotografen ihre Galerien und Kundendaten selbst besitzen — auf dem eigenen Server, ohne monatliche SaaS-Gebühren. Danke, dass Sie es ausprobieren.",
|
||
"bugTitle": "Fehler gefunden?",
|
||
"bugDesc": "Melden Sie ihn und wir sehen ihn uns an.",
|
||
"featureTitle": "Wunschfunktion?",
|
||
"featureDesc": "Sagen Sie uns, was PicPeak für Sie besser machen würde.",
|
||
"starTitle": "Gefällt es Ihnen? Erzählen Sie davon",
|
||
"starDesc": "Empfiehl es anderen Fotografen, teile es und gib dem Projekt einen Stern auf GitHub.",
|
||
"supportTitle": "Entwicklung unterstützen",
|
||
"supportDesc": "Optional — spendier mir einen Kaffee, um PicPeak am Leben zu halten.",
|
||
"finish": "Fertig → Dashboard"
|
||
},
|
||
"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 exec backend cat /app/data/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",
|
||
"devModeHint": "Entwicklungsmodus: E-Mail: [email protected], Passwort: admin123",
|
||
"mfa": {
|
||
"title": "Zwei-Faktor-Authentifizierung",
|
||
"subtitle": "Geben Sie den 6-stelligen Code aus Ihrer Authenticator-App ein.",
|
||
"recoverySubtitle": "Geben Sie einen Ihrer Wiederherstellungscodes ein.",
|
||
"codeLabel": "Authentifizierungscode",
|
||
"codePlaceholder": "123456",
|
||
"recoveryCodeLabel": "Wiederherstellungscode",
|
||
"recoveryCodePlaceholder": "awzq-jca3-va",
|
||
"verify": "Bestätigen",
|
||
"back": "Zurück",
|
||
"useRecoveryCode": "Stattdessen Wiederherstellungscode verwenden",
|
||
"useAuthenticator": "Stattdessen Authenticator-App verwenden",
|
||
"codeRequired": "Geben Sie Ihren Authentifizierungscode ein",
|
||
"invalidCode": "Ungültiger Code. Bitte versuche es erneut.",
|
||
"sessionExpired": "Ihre Bestätigungssitzung ist abgelaufen. Bitte melden Sie sich erneut an.",
|
||
"locked": "Konto wegen zu vieler Versuche vorübergehend gesperrt. Versuchen Sie es später erneut.",
|
||
"lockedRetry": "Konto vorübergehend gesperrt. Versuchen Sie es in {{seconds}} Sekunden erneut."
|
||
},
|
||
"ssoDivider": "oder",
|
||
"ssoSignIn": "Mit SSO anmelden",
|
||
"ssoOnlyHint": "Die Passwort-Anmeldung ist auf dieser Instanz deaktiviert — melden Sie sich über Ihren Identity Provider an.",
|
||
"ssoErrors": {
|
||
"config": "SSO ist falsch konfiguriert — prüfen Sie die SSO-Einstellungen oder melden Sie sich mit E-Mail und Passwort an.",
|
||
"state": "Die SSO-Anmeldung ist abgelaufen oder wurde manipuliert. Bitte erneut versuchen.",
|
||
"idp": "Der Identity Provider hat die Anmeldung abgelehnt. Bitte erneut versuchen oder E-Mail und Passwort verwenden.",
|
||
"inactive": "Ihr Admin-Konto ist deaktiviert.",
|
||
"not_provisioned": "Kein Admin-Konto passt zu Ihrer SSO-Identität. Bitten Sie einen Administrator um eine Einladung.",
|
||
"no_email": "Ihr Identity Provider hat keine E-Mail-Adresse geliefert — es kann kein Konto erstellt werden.",
|
||
"no_role": "Ihr Identity Provider hat keine Rolle geliefert, die dieser Instanz zugeordnet ist — bitten Sie einen Administrator, Sie einer zugeordneten Gruppe hinzuzufügen."
|
||
}
|
||
},
|
||
"cssTemplates": {
|
||
"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",
|
||
"folderOption": "{{name}} (Ordner — im Hauptraster ausgeblendet)"
|
||
},
|
||
"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": "Ihr Passwort",
|
||
"needHelp": "Brauchen Sie Hilfe?"
|
||
},
|
||
"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ätigen oder ergänzen Sie Ihre Daten. Sie können 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": "Ihre Galerien",
|
||
"subtitle": "Klicken Sie 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",
|
||
"contracts": "Verträge"
|
||
},
|
||
"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 Ihnen Ihr Fotograf gesendet hat. Klicken Sie auf ein offenes Angebot, um es anzunehmen oder abzulehnen.",
|
||
"empty": "Noch keine Angebote.",
|
||
"disabled": "Diese Funktion ist für Ihr Konto aktuell deaktiviert. Bitte wenden Sie sich an Ihren Fotografen, falls Sie hier Angebote erwarten.",
|
||
"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 Ihnen Ihr Fotograf gesendet hat. Klicken Sie auf „PDF anzeigen“, um sie herunterzuladen.",
|
||
"empty": "Noch keine Rechnungen.",
|
||
"disabled": "Diese Funktion ist für Ihr Konto aktuell deaktiviert. Bitte wenden Sie sich an Ihren Fotografen, falls Sie hier Rechnungen erwarten.",
|
||
"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}}",
|
||
"countAll_one": "{{count}} insgesamt",
|
||
"countAll_other": "{{count}} insgesamt"
|
||
},
|
||
"profile": {
|
||
"title": "Kundenprofil",
|
||
"subtitle": "Halten Sie 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": "Wenden Sie sich an Ihren Fotografen, wenn Sie Ihre Login-E-Mail ändern möchten.",
|
||
"salutation": "Anrede",
|
||
"firstName": "Vorname",
|
||
"lastName": "Nachname",
|
||
"displayName": "Anzeigename",
|
||
"displayNameHint": "So begrüßen wir Sie 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 fordern Sie bei Ihrem 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."
|
||
},
|
||
"contracts": {
|
||
"title": "Verträge",
|
||
"disabled": "Diese Funktion ist für Ihr Konto aktuell deaktiviert.",
|
||
"loadError": "Verträge konnten nicht geladen werden.",
|
||
"subtitle": "Alle Verträge, die Ihnen Ihr Fotograf gesendet hat. Öffnen Sie bei Verträgen, die noch auf Ihre Unterschrift warten, den Signatur-Link — oder laden Sie das unterschriebene PDF herunter, sobald beide Seiten unterschrieben haben.",
|
||
"empty": "Noch keine Verträge.",
|
||
"popupBlocked": "Erlaube Pop-ups für diese Seite, um das Vertrags-PDF herunterzuladen.",
|
||
"issued": "Ausgestellt",
|
||
"signedByYou": "Von Ihnen unterschrieben",
|
||
"counterSigned": "Gegengezeichnet",
|
||
"openSign": "Öffnen & unterschreiben",
|
||
"downloadSigned": "Unterschriebenes PDF herunterladen",
|
||
"download": "PDF herunterladen"
|
||
}
|
||
},
|
||
"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.",
|
||
"marketingOptOut": "Vom Newsletter abgemeldet",
|
||
"marketingOptOutHelp": "Wenn aktiv, wird dieser Kunde von jeder Newsletter-Kampagne übersprungen. E-Mails zu Galerien, Offerten und Rechnungen sind nicht betroffen.",
|
||
"marketingOptOutSince": "Seit {{date}}"
|
||
},
|
||
"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",
|
||
"billedCombined": "Rechnung aus Stunden und Weiterverrechnungen erstellt."
|
||
},
|
||
"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"
|
||
},
|
||
"unbilledCount_one": "{{count}} offener Eintrag, total {{total}}",
|
||
"unbilledCount_other": "{{count}} offene Einträge, total {{total}}"
|
||
},
|
||
"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 angelegt und Portal-Einladung eingereiht. Der Versand läuft über die E-Mail-Warteschlange — prüfen Sie den Systemzustand, falls sie nicht ankommt.",
|
||
"inviteFailedToast": "Kunde als PASSIV gespeichert — es ging keine Einladung raus. Wiederholen Sie „Portal-Einladung senden“ auf der Kundendetailseite.",
|
||
"emailRequired": "Eine gültige E-Mail-Adresse ist erforderlich.",
|
||
"nameRequired": "Geben Sie mindestens einen Firmennamen oder einen Ansprechpartner an.",
|
||
"inviteAlreadyPendingToast": "Kunde gespeichert. Für diese Adresse ist bereits eine Einladung offen — stornieren Sie sie im Tab „Einladungen“, bevor Sie eine neue senden.",
|
||
"inviteAlreadyActiveToast": "Kunde gespeichert. Diese Adresse hat bereits Portalzugang, eine Einladung war nicht nötig.",
|
||
"inviteUnconfirmedToast": "Kunde gespeichert, aber die Einladung ist unbestätigt — prüfen Sie den Tab „Einladungen“, bevor Sie erneut senden."
|
||
},
|
||
"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 Sie ausfüllen, 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, Angebots-/Rechnungs-PDFs sowie Rechnungs-E-Mails (Erinnerungen/Mahnungen). 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": "Aktivieren Sie den Kunden, bevor Sie einen Reset senden."
|
||
},
|
||
"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.",
|
||
"rebillsSection": "Weiterverrechnungen & Durchlaufposten",
|
||
"noRebills": "Noch keine weiterverrechneten oder durchlaufenden Lieferantenrechnungen für diesen Kunden.",
|
||
"companyName": "Firmenname",
|
||
"marketingSection": "Newsletter-Einwilligung"
|
||
},
|
||
"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}}"
|
||
},
|
||
"rebillAttachProof": "Lieferantenbeleg bei Weiterverrechnungen anhängen",
|
||
"rebillAttachProofInherit": "Mandanten-Standard verwenden",
|
||
"rebillAttachProofOn": "Immer anhängen",
|
||
"rebillAttachProofOff": "Nie anhängen",
|
||
"rebillAttachProofHint": "Überschreibt die globale Voreinstellung für diesen Kunden. Der Senden-Dialog erlaubt weiterhin die Auswahl einzelner Belege bei jedem Versand."
|
||
},
|
||
"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ählen Sie 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. Suchen Sie unten, um eine hinzuzufügen.",
|
||
"searchLabel": "Galerie hinzufügen",
|
||
"searchPlaceholder": "Nach Eventname suchen",
|
||
"searchHint": "Beginnen Sie 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",
|
||
"addedN_one": "{{count}} hinzugefügt",
|
||
"addedN_other": "{{count}} hinzugefügt",
|
||
"removedN_one": "{{count}} entfernt",
|
||
"removedN_other": "{{count}} entfernt"
|
||
},
|
||
"invitePending": {
|
||
"badge": "Einladung offen",
|
||
"hint": "Für diese Adresse ist ein Einladungslink offen und noch nicht angenommen. Das ist kein Beleg dafür, dass die E-Mail angekommen ist — prüfen Sie den Systemzustand, falls der Kunde nichts erhalten hat."
|
||
}
|
||
},
|
||
"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": "Aktivieren Sie „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",
|
||
"newsletters": "Newsletter"
|
||
}
|
||
},
|
||
"accounting": {
|
||
"title": "Buchhaltung",
|
||
"subtitle": "Eingehende Lieferantenrechnungen, Aufwände und Auswertungen.",
|
||
"navAriaLabel": "Buchhaltungs-Navigation",
|
||
"empty": {
|
||
"title": "Keine Buchhaltungsfunktionen aktiviert",
|
||
"body": "Aktivieren Sie 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 Sie an einen Kunden weiterverrechnen — meist mit Zuschlag. Wird als Kosten und als weiterverrechneter Ertrag gebucht.",
|
||
"durchlaufend": "Ein Betrag, den Sie nur im Namen des Kunden vorstrecken und exakt durchreichen — 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 Ihrer 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 Sie weiterverrechnen."
|
||
},
|
||
"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.",
|
||
"amountRequired": "Rechnungsbetrag vor der Weiterverrechnung eingeben (0 ist erlaubt).",
|
||
"bundledToast_one": "{{count}} Weiterverrechnung zu einer Rechnung gebündelt.",
|
||
"pendingCount_one": "{{count}} Posten"
|
||
},
|
||
"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. Erstellen Sie 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."
|
||
},
|
||
"status": {
|
||
"active": "Aktiv",
|
||
"archived": "Archiviert"
|
||
},
|
||
"eventCount_one": "{{count}} Event",
|
||
"eventCount_other": "{{count}} Events"
|
||
},
|
||
"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",
|
||
"customerLoggingDisabled": "Bei diesem Kunden ist die Stundenerfassung deaktiviert. Aktivieren Sie sie auf der Detailseite des Kunden, um Stunden zu erfassen."
|
||
}
|
||
},
|
||
"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. Aktivieren Sie 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": "Setzen Sie PICPEAK_ENABLE_DEV_TOOLS=1 in der Backend-Env-Datei und starten Sie 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; passen Sie sie an das Setup Ihres 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)",
|
||
"ledger_vat_map": "MWST-Code nach steuerlicher Behandlung (Kosten)",
|
||
"ledger_output_vat_map": "MWST-Code nach Umsatzsatz"
|
||
},
|
||
"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": "Laden Sie das Sammeljournal (Erträge + Kosten als periodengerechte Buchungssätze mit Konto- und MWST-Codes) zum Import in die Buchhaltungssoftware Ihres 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 Ihrer 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. Legen Sie 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"
|
||
},
|
||
"cancelledFootnote_one": "{{count}} stornierte Rechnung — Betrag nicht in den Summen enthalten (für lückenlose Nummernfolge dargestellt).",
|
||
"cancelledFootnote_other": "{{count}} stornierte Rechnungen — Beträge nicht in den Summen enthalten (für lückenlose Nummernfolge dargestellt).",
|
||
"costsErrorTitle": "Kosten konnten nicht geladen werden"
|
||
},
|
||
"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)",
|
||
"eventType": "Anlassart",
|
||
"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 der Kunde annimmt. Auf „Keiner“ lassen, um keinen Buchungsablauf auszuführen. Der Ablauf muss aktiviert sein, damit er ausgelöst wird."
|
||
},
|
||
"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"
|
||
},
|
||
"acceptOnBehalf": "Im Namen annehmen",
|
||
"confirmAcceptOnBehalf": "Dieses Angebot im Namen des Kunden als angenommen markieren? Nur verwenden, wenn er mündlich zugestimmt hat (z. B. am Telefon).",
|
||
"acceptedOnBehalfToast": "Angebot als angenommen markiert.",
|
||
"convertToInvoice": "Nur in Rechnung umwandeln",
|
||
"confirmConvertToInvoice": "Dieses Angebot nur in Rechnung(en) umwandeln? Es wird keine Galerie / kein Anlass erstellt.",
|
||
"convertedToInvoiceToast": "{{count}} Rechnung(en) aus diesem Angebot erstellt",
|
||
"convertToContract": "In Vertrag umwandeln",
|
||
"confirmConvertToContract": "Aus diesem Angebot einen Vertrag entwerfen? Kunde und Administrator unterzeichnen beide, bevor Anlass / Rechnung erstellt werden.",
|
||
"convertedToContractToast": "Vertrag aus diesem Angebot entworfen.",
|
||
"contractAlreadyLinkedToast": "Aus diesem Angebot wurde bereits ein Vertrag entworfen.",
|
||
"pagination_one": "Seite {{page}} von {{total}} · {{count}} Angebot",
|
||
"pagination_other": "Seite {{page}} von {{total}} · {{count}} Angebote",
|
||
"convertedToInvoiceToast_one": "{{count}} Rechnung aus diesem Angebot erstellt",
|
||
"convertedToInvoiceToast_other": "{{count}} Rechnungen aus diesem Angebot erstellt"
|
||
},
|
||
"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"
|
||
},
|
||
"customerPicker": {
|
||
"search": "Kunde nach E-Mail oder Firma suchen…"
|
||
}
|
||
},
|
||
"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"
|
||
},
|
||
"send": {
|
||
"title": "Rechnung senden",
|
||
"proofIntro": "Diese Rechnung verrechnet erfasste Lieferantenrechnungen weiter. Wählen Sie, welche Lieferantenbelege der E-Mail beigefügt werden — die Rechnung als PDF wird immer angehängt.",
|
||
"proofsLabel": "Lieferantenbelege",
|
||
"selectAll": "Alle auswählen",
|
||
"selectNone": "Keine",
|
||
"unknownSupplier": "Lieferant",
|
||
"modePassthrough": "durchlaufend",
|
||
"modeRebill": "Weiterverrechnung",
|
||
"noProofFile": "Keine gespeicherte Belegdatei",
|
||
"sendWithCount": "Mit {{count}} Beleg(en) senden",
|
||
"sendWithCount_one": "Mit {{count}} Beleg senden",
|
||
"sendWithCount_other": "Mit {{count}} Belegen senden"
|
||
}
|
||
},
|
||
"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",
|
||
"timezoneSystemDefault": "Systemstandard",
|
||
"pdfLogoUpload": "Logo für den PDF-Briefkopf (PNG, JPEG oder SVG)",
|
||
"pdfLogoUploadHelp": "Wird auf jedem Angebots- und Rechnungs-PDF verwendet. SVG wird akzeptiert und automatisch in PNG umgewandelt. Ohne Eintrag greift der Renderer auf das globale Branding-Logo zurück.",
|
||
"pdfLogoHeight": "Höhe des PDF-Logos (pt, 24–200)",
|
||
"pdfFoldingMarks": "Falzmarken am Rand der PDF-Seite",
|
||
"pdfShowLogo": "Logo im PDF-Briefkopf anzeigen",
|
||
"pdfShowLogoHelp": "Wenn deaktiviert, wird das Logo auf jedem PDF unterdrückt — auch wenn ein Logo hochgeladen ist.",
|
||
"pdfShowCompanyName": "Firmennamen im PDF-Briefkopf anzeigen",
|
||
"pdfShowCompanyNameHelp": "Wenn deaktiviert, entfällt die Zeile mit dem Firmennamen (nützlich, wenn das Logo bereits eine Wortmarke mit dem Namen ist).",
|
||
"pdfCompanyNameInline": "Firmennamen direkt über der Adresse darstellen",
|
||
"pdfCompanyNameInlineHelp": "Wenn aktiviert, erscheint der Firmenname als einfache Zeile direkt über der Strassenadresse (gleiche Grösse und Schriftstärke). Wenn deaktiviert, wird er als fetter Titel unter dem Logo dargestellt.",
|
||
"pdfQuoteShowNetDays": "Zahlungsfrist (Netto-Tage) auf Angebots-PDFs anzeigen",
|
||
"pdfQuoteShowNetDaysHelp": "Wenn aktiviert, enthalten Angebots-PDFs die Zeile „X Tage ab Rechnungsdatum.“ im Block mit den Zahlungsbedingungen. Auf Rechnungen wird diese Zeile unabhängig davon immer angezeigt.",
|
||
"pdfQuoteShowSkonto": "Skonto / Frühzahlerrabatt auf Angebots-PDFs anzeigen",
|
||
"pdfQuoteShowSkontoHelp": "Wenn aktiviert, enthalten Angebots-PDFs das Skonto-Angebot und die Zeile „Betrag mit Skonto“. Auf Rechnungen werden diese unabhängig davon immer angezeigt."
|
||
},
|
||
"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.",
|
||
"foldingMarks": {
|
||
"none": "Keine",
|
||
"half": "Hälfte (148,5 mm) — für C5-Couverts",
|
||
"third": "Drittel (105 + 210 mm) — für DL- / DIN-lang-Couverts",
|
||
"both": "Alle drei Marken"
|
||
},
|
||
"qrDisclaimer": {
|
||
"title": "QR-Rechnung / Bankdaten — vor dem Produktivbetrieb prüfen",
|
||
"body": "Picpeak ist Open Source. Wir erzeugen den QR-Code und den IBAN-Block aus den von Ihnen eingegebenen Werten — wir prüfen sie nicht. Drucken Sie eine Testrechnung und scannen Sie sie mit der App Ihrer Bank, bevor Sie echte Rechnungen versenden. Für Fehler, die aus dem Versand einer Rechnung mit falschen Daten entstehen, übernehmen wir keine Haftung."
|
||
},
|
||
"logoUploadedToast": "PDF-Logo hochgeladen.",
|
||
"logoConfirmClear": "PDF-Logo entfernen? Der Renderer greift dann auf das Branding-Logo zurück, sofern eines hinterlegt ist.",
|
||
"logoClearedToast": "PDF-Logo entfernt.",
|
||
"bankUpdatedToast": "Bankverbindung aktualisiert.",
|
||
"emailSignature": {
|
||
"title": "E-Mail-Signatur",
|
||
"subtitle": "Hängt Ihre Firmendaten an die Fusszeile jeder E-Mail an, die diese Installation versendet. Wird aus den Adress- und Kontaktfeldern oben gebildet — nichts wird doppelt erfasst.",
|
||
"toggle": "Signatur in E-Mail-Fusszeilen anzeigen",
|
||
"toggleHelp": "Wenn aus, behalten E-Mails die schlichte Fusszeile mit Logo und Firmenname. Gilt für jede automatische E-Mail — Galerie-Benachrichtigungen, Offerten, Rechnungen, Erinnerungen — sowie für Testversand und Vorschau. Antworten, die Sie selbst unter Nachrichten schreiben, werden unverändert gesendet und erhalten keine Signatur.",
|
||
"extra": "Rechtliche Zeile (optional)",
|
||
"extraPlaceholder": "Handelsregister Vaduz FL-0002.123.456-7",
|
||
"extraHelp": "Registernummer, Haftungsausschluss oder jede Zeile ohne eigenes Feld. Reiner Text, maximal 500 Zeichen.",
|
||
"previewTitle": "Vorschau der Fusszeile",
|
||
"previewOff": "Signatur ist aus — E-Mails zeigen nur Logo und Firmenname.",
|
||
"previewEmpty": "Signatur ist an, aber alle Felder oben sind leer — es wird nichts an die Fusszeile angehängt."
|
||
}
|
||
},
|
||
"crmSettings": {
|
||
"savedToast": "CRM-Einstellungen gespeichert.",
|
||
"title": "CRM-Einstellungen",
|
||
"subtitle": "Standardwerte für Angebote und Rechnungen.",
|
||
"emptyState": "Aktuell sind keine CRM-Funktionen aktiv. Aktivieren Sie 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_vat_note_text": {
|
||
"label": "MwSt.- / Freitext-Hinweis auf Rechnungen",
|
||
"placeholder": "z. B. Gemäß § 6 Abs. 1 Z 27 UStG 1994 wird keine Umsatzsteuer berechnet (Kleinunternehmer).",
|
||
"help": "Wird direkt unter der MwSt.-Zeile auf jeder Rechnungs-PDF gedruckt. Leer lassen zum Ausblenden. Bitte den genauen Wortlaut mit Ihrem Steuerberater abstimmen."
|
||
},
|
||
"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",
|
||
"tosRequiredError": "Bitte bestätigen Sie „Ich akzeptiere die Allgemeinen Geschäftsbedingungen“, bevor Sie das Angebot annehmen — oder klicken Sie auf „Ablehnen“.",
|
||
"submitting": "Ihre Antwort wird erfasst…",
|
||
"tosCheckbox": "Ich habe die Allgemeinen Geschäftsbedingungen gelesen und akzeptiere sie.",
|
||
"tosLink": "Vollständige AGB lesen",
|
||
"preselectAcceptHint": "Sie sind dem Link „Annehmen“ aus der E-Mail gefolgt — klicken Sie zur Bestätigung auf die Schaltfläche unten.",
|
||
"preselectDeclineHint": "Sie sind dem Link „Ablehnen“ aus der E-Mail gefolgt — klicken Sie zur Bestätigung auf die Schaltfläche unten."
|
||
},
|
||
"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. Bearbeiten und speichern Sie 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. Wechseln Sie zu dynamischen Triggern für Pläne, die an das Anlassdatum oder die Lieferung gekoppelt sind.",
|
||
"advancedHint": "Wählen Sie 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",
|
||
"blocksLibrary": "Bausteinbibliothek",
|
||
"searchPlaceholder": "Nach Nummer, Titel oder Kunde suchen …",
|
||
"empty": "Noch keine Verträge.",
|
||
"table": {
|
||
"number": "Nummer",
|
||
"customer": "Kunde",
|
||
"title": "Titel",
|
||
"issueDate": "Ausgestellt",
|
||
"status": "Status"
|
||
},
|
||
"pagination": "Seite {{page}} von {{total}} · {{count}} Verträge",
|
||
"pagination_one": "Seite {{page}} von {{total}} · {{count}} Vertrag",
|
||
"pagination_other": "Seite {{page}} von {{total}} · {{count}} Verträge"
|
||
},
|
||
"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.",
|
||
"convertedToInvoiceToast_one": "{{count}} Rechnung aus diesem Vertrag erstellt",
|
||
"convertedToInvoiceToast_other": "{{count}} Rechnungen aus diesem Vertrag erstellt"
|
||
},
|
||
"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 https://docs.picpeak.app/features/crm/disclaimers.",
|
||
"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)"
|
||
},
|
||
"blocks": {
|
||
"back": "Zurück zu den Verträgen",
|
||
"title": "Vertragsbaustein-Bibliothek",
|
||
"hideInactive": "Inaktive ausblenden",
|
||
"disclaimerTitle": "Nur Beispiele — lassen Sie sie von Ihrem Anwalt prüfen",
|
||
"disclaimerBody": "Die mitgelieferten „System“-Bausteine stammen vom picpeak-Maintainer, nicht von einem Anwalt. Sie sind ausschließlich als Ausgangspunkt gedacht — lassen Sie jeden Baustein, den Sie versenden wollen, von Ihrem eigenen Anwalt prüfen und anpassen. Änderungen an System-Bausteinen bleiben erhalten; ersetzen Sie den mitgelieferten Text einfach durch die anwaltlich geprüfte Fassung.",
|
||
"sidebarHeading": "Bausteine",
|
||
"new": "Neuer Baustein",
|
||
"systemBadge": "System",
|
||
"empty": "Noch keine Bausteine.",
|
||
"selectPrompt": "Wählen Sie links einen Baustein aus oder erstellen Sie einen neuen, um mit der Bearbeitung zu beginnen.",
|
||
"active": "Aktiv",
|
||
"inactive": "Inaktiv",
|
||
"delete": "Löschen",
|
||
"deleteConfirm": "Diesen Baustein löschen?",
|
||
"save": "Speichern",
|
||
"noTranslation": "Noch keine Übersetzung",
|
||
"createdToast": "Baustein erstellt.",
|
||
"createError": "Erstellen fehlgeschlagen",
|
||
"updatedToast": "Baustein aktualisiert.",
|
||
"updateError": "Aktualisieren fehlgeschlagen",
|
||
"deletedToast": "Baustein gelöscht.",
|
||
"deleteError": "Löschen fehlgeschlagen",
|
||
"dialog": {
|
||
"createTitle": "Neuer Baustein",
|
||
"editTitle": "Baustein bearbeiten",
|
||
"name": "Name",
|
||
"section": "Abschnitt",
|
||
"description": "Beschreibung (interner Hinweis)",
|
||
"body": "Text",
|
||
"placeholderHint": "Sie können {{customer_name}}, {{event_name}}, {{event_date}}, {{net_days}}, {{skonto_percent}}, {{skonto_within_days}}, {{cancellation_30d_percent}}, {{currency}}, {{issuer_company_name}}, {{issuer_address}}, {{contract_number}} und {{source_quote_number}} als Platzhalter verwenden — sie werden beim Rendern des Vertrags ersetzt."
|
||
},
|
||
"quoteLineItems": {
|
||
"calloutTitle": "Automatisch erzeugte Tabelle folgt auf den Text",
|
||
"calloutBody": "Wenn dieser Baustein in einem aus einem Angebot erstellten Vertrag enthalten ist, fügt das PDF direkt nach dem obigen Text eine echte Tabelle mit den Positionen des Ausgangsangebots ein (Nr., Beschreibung, Menge, Einzelpreis, Gesamt). Unterpositionen werden eingerückt mit einem ↳ dargestellt. Verträge ohne Ausgangsangebot lassen die Tabelle weg und zeigen nur den Text.",
|
||
"previewExample": "Beispielausgabe:"
|
||
}
|
||
}
|
||
},
|
||
"messages": {
|
||
"title": "Nachrichten",
|
||
"subtitle": "Gesendete, automatische und eingehende E-Mails — an einem Ort.",
|
||
"sync": "Abrufen",
|
||
"newMessage": "Neue Nachricht",
|
||
"searchPlaceholder": "In diesem Ordner suchen…",
|
||
"account": {
|
||
"all": "Alle E-Mails",
|
||
"customers": "Kunden",
|
||
"accounting": "Buchhaltung",
|
||
"automated": "Automatisch"
|
||
},
|
||
"folder": {
|
||
"inbox": "Posteingang",
|
||
"sent": "Gesendet",
|
||
"archived": "Archiviert",
|
||
"deleted": "Gelöscht"
|
||
},
|
||
"unified": "Konten übergreifend",
|
||
"systemGenerated": "Systemgeneriert",
|
||
"acrossAccounts": "Über alle Konten",
|
||
"selectPrompt": "Nachricht zum Lesen auswählen",
|
||
"noMessages": "Keine Nachrichten",
|
||
"noSearchResults": "Keine Treffer",
|
||
"noSubject": "(kein Betreff)",
|
||
"from": "von",
|
||
"to": "An",
|
||
"reply": "Antworten",
|
||
"replyAll": "Allen antworten",
|
||
"forward": "Weiterleiten",
|
||
"archive": "Archivieren",
|
||
"delete": "Löschen",
|
||
"deleteForever": "Endgültig löschen",
|
||
"restore": "Wiederherstellen",
|
||
"bookExpense": "Als Ausgabe buchen",
|
||
"rebill": "An Kunden weiterverrechnen",
|
||
"createQuote": "Angebot",
|
||
"createContract": "Vertrag",
|
||
"createGallery": "Galerie",
|
||
"createInvoice": "Rechnung",
|
||
"doc": {
|
||
"quote": "Angebot",
|
||
"contract": "Vertrag",
|
||
"invoice": "Rechnung",
|
||
"gallery": "Galerie"
|
||
},
|
||
"soon": "In einer späteren Phase verfügbar",
|
||
"viewDocument": "Dokument ansehen",
|
||
"openInAccounting": "Im Buchhaltungs-Posteingang öffnen",
|
||
"noInboundBody": "Für diese E-Mail wurde kein Nachrichtentext erfasst.",
|
||
"noBody": "Diese Nachricht wurde gesendet, bevor die Textspeicherung eingeführt wurde — keine Vorschau verfügbar.",
|
||
"loadError": "Diese Nachricht konnte nicht geladen werden.",
|
||
"attachments": "Anhang/Anhänge",
|
||
"notArchived": "noch nicht archiviert",
|
||
"sentAttachHint": "Gesendete Anhänge werden noch nicht archiviert — Phase 2.",
|
||
"document": "Dokument",
|
||
"previewUnavailable": "Vorschau nicht verfügbar",
|
||
"rasterNote": "Serverseitig gerenderte Vorschau — die Originaldatei erreicht den Browser nie.",
|
||
"close": "Schliessen",
|
||
"compose": "Nachricht verfassen",
|
||
"cancel": "Abbrechen",
|
||
"send": "Senden",
|
||
"subject": "Betreff",
|
||
"optional": "optional",
|
||
"bodyHint": "Bearbeiten Sie die Nachricht frei — fügen Sie vor dem Senden an beliebiger Stelle eine Notiz ein.",
|
||
"sendsFromHint": "Wird von Ihrer konfigurierten Absenderadresse gesendet.",
|
||
"sentToast": "Nachricht gesendet.",
|
||
"sendFailed": "Nachricht konnte nicht gesendet werden.",
|
||
"onWrote": "Am",
|
||
"customer": "Kunde",
|
||
"resolvingCustomer": "Absender wird einem Kunden zugeordnet…",
|
||
"noCustomerMatch": "Kein Kunde zu diesem Absender gefunden — oben suchen oder neuen Kunden anlegen.",
|
||
"createNewDoc": "Neues {{label}} erstellen",
|
||
"existingDocs": "Oder ein bestehendes referenzieren",
|
||
"noExistingDocs": "Für diesen Kunden gibt es noch keine Dokumente.",
|
||
"galleryCreateOnly": "Galerien sind event-basiert — dies öffnet den Event-Editor, wo Sie den Kunden zuweisen können.",
|
||
"syncOk": "Postfächer geprüft — {{count}} neu.",
|
||
"syncDisabled": "Eingehende E-Mails sind deaktiviert — unter Einstellungen → Funktionen aktivieren.",
|
||
"syncUnconfigured": "Zuerst ein Postfach unter Einstellungen → E-Mail konfigurieren.",
|
||
"syncBusy": "Es läuft bereits eine Synchronisierung.",
|
||
"syncFailed": "Synchronisierung fehlgeschlagen.",
|
||
"actionFailed": "Aktion fehlgeschlagen.",
|
||
"syncOk_one": "Postfächer geprüft — {{count}} neu.",
|
||
"syncOk_other": "Postfächer geprüft — {{count}} neu."
|
||
},
|
||
"rebills": {
|
||
"createInvoice": "Rechnung aus Weiterverrechnungen erstellen",
|
||
"unknownSupplier": "Lieferant",
|
||
"costLabel": "Kosten {{amount}}",
|
||
"proofError": "Beleg nicht angehängt: {{err}}",
|
||
"status": {
|
||
"open": "Offen",
|
||
"sent": "Versendet",
|
||
"paid": "Bezahlt"
|
||
},
|
||
"mode": {
|
||
"passthrough": "Durchlaufend",
|
||
"rebill": "Weiterverrechnung"
|
||
},
|
||
"toast": {
|
||
"billed": "Rechnung aus Weiterverrechnungen erstellt.",
|
||
"billedCombined": "Rechnung aus Weiterverrechnungen und Stunden erstellt.",
|
||
"billFailed": "Rechnung konnte nicht erstellt werden"
|
||
}
|
||
},
|
||
"crossAdd": {
|
||
"title": "Weitere offene Posten hinzufügen?",
|
||
"body": "Dieser Kunde hat außerdem {{count}} {{label}}. Zur selben Rechnung hinzufügen? Sie bleiben eine separate Gruppe — Stunden und Weiterverrechnungen werden nie in einer Position vermischt.",
|
||
"addBoth": "Beide hinzufügen",
|
||
"hours": "offene Stunden",
|
||
"rebills": "offene Weiterverrechnungen",
|
||
"hoursOnly": "Nur die Stunden",
|
||
"rebillsOnly": "Nur die Weiterverrechnungen",
|
||
"body_one": "Dieser Kunde hat außerdem {{count}} {{label}}. Zur selben Rechnung hinzufügen? Sie bleiben eine separate Gruppe — Stunden und Weiterverrechnungen werden nie in einer Position vermischt.",
|
||
"body_other": "Dieser Kunde hat außerdem {{count}} {{label}}. Zur selben Rechnung hinzufügen? Sie bleiben eine separate Gruppe — Stunden und Weiterverrechnungen werden nie in einer Position vermischt."
|
||
},
|
||
"roleEditor": {
|
||
"loading": "Rollen werden geladen…",
|
||
"subtitle": "Legen Sie fest, was jede Rolle darf. Beginnen Sie mit einer Vorlage, indem Sie sie duplizieren, und passen Sie die Berechtigungen an.",
|
||
"newRole": "Neue Rolle",
|
||
"systemRole": "System",
|
||
"permCount": "{{count}} Berechtigungen",
|
||
"userCount": "{{count}} Benutzer",
|
||
"view": "Ansehen",
|
||
"clone": "Duplizieren",
|
||
"create": "Rolle erstellen",
|
||
"createTitle": "Rolle erstellen",
|
||
"editTitle": "Rolle bearbeiten: {{name}}",
|
||
"superAdminLocked": "Super Admin besitzt immer alle Berechtigungen und kann nicht bearbeitet werden. Neue Berechtigungen werden automatisch übernommen.",
|
||
"displayName": "Anzeigename",
|
||
"displayNamePlaceholder": "z. B. Fotograf",
|
||
"key": "Schlüssel (Kennung)",
|
||
"keyLocked": "Der Schlüssel ist nach dem Erstellen fest.",
|
||
"description": "Beschreibung",
|
||
"descriptionPlaceholder": "Wofür diese Rolle gedacht ist",
|
||
"permissions": "Berechtigungen",
|
||
"selectedCount": "{{count}} ausgewählt",
|
||
"selectAll": "Alle auswählen",
|
||
"clearAll": "Alle abwählen",
|
||
"nameError": "Nur Kleinbuchstaben, Zahlen und Unterstriche (2–49 Zeichen, beginnend mit einem Buchstaben).",
|
||
"created": "Rolle erstellt",
|
||
"updated": "Rolle aktualisiert",
|
||
"deleted": "Rolle gelöscht",
|
||
"saveError": "Rolle konnte nicht gespeichert werden",
|
||
"deleteError": "Rolle konnte nicht gelöscht werden",
|
||
"confirmDelete": {
|
||
"title": "Rolle löschen?",
|
||
"message": "Die Rolle \"{{name}}\" endgültig löschen? Dies kann nicht rückgängig gemacht werden.",
|
||
"hasUsers": "Weisen Sie die {{count}} Benutzer der Rolle \"{{name}}\" neu zu, bevor Sie sie löschen.",
|
||
"hasUsers_one": "Weisen Sie den {{count}} Benutzer der Rolle \"{{name}}\" neu zu, bevor Sie sie löschen.",
|
||
"hasUsers_other": "Weisen Sie die {{count}} Benutzer der Rolle \"{{name}}\" neu zu, bevor Sie sie löschen."
|
||
},
|
||
"permCount_one": "{{count}} Berechtigung",
|
||
"permCount_other": "{{count}} Berechtigungen",
|
||
"userCount_one": "{{count}} Benutzer",
|
||
"userCount_other": "{{count}} Benutzer",
|
||
"selectedCount_one": "{{count}} ausgewählt",
|
||
"selectedCount_other": "{{count}} ausgewählt"
|
||
},
|
||
"paymentCheck": {
|
||
"missingToken": "Token fehlt",
|
||
"alreadyUsed": "Dieser Link wurde bereits verwendet (Aktion: {{action}}). Wenn Sie eine weitere Zahlung erfassen möchten, öffnen Sie die Rechnung im Admin-Bereich.",
|
||
"expired": "Dieser Link ist abgelaufen. Öffnen Sie die Rechnung im Admin-Bereich, um die Zahlung manuell zu erfassen.",
|
||
"loadError": "Die Rechnung konnte nicht geladen werden. Der Link ist möglicherweise ungültig.",
|
||
"partialInvalid": "Bitte einen positiven Betrag eingeben.",
|
||
"partialTooHigh": "Der Betrag darf den offenen Gesamtbetrag ({{max}}) nicht überschreiten.",
|
||
"submitError": "Die Aktion konnte nicht erfasst werden.",
|
||
"title": "Zahlung bestätigen",
|
||
"subtitle": "Wählen Sie aus, was zu dieser Rechnung eingegangen ist. Die Auswahl wird protokolliert und die passende Erinnerung automatisch eingereiht.",
|
||
"field": {
|
||
"invoice": "Rechnung",
|
||
"customer": "Kunde",
|
||
"issued": "Ausgestellt",
|
||
"due": "Fällig",
|
||
"total": "Gesamt",
|
||
"outstanding": "Offen",
|
||
"paid": "Bereits bezahlt",
|
||
"lateFee": "Mahngebühr"
|
||
},
|
||
"action": {
|
||
"paidFull": "Vollständig bezahlt",
|
||
"paidFullHelp": "Den gesamten offenen Betrag ({{amount}}) als eingegangen markieren. Es wird keine Erinnerung versendet.",
|
||
"paidSkonto": "Mit Skonto bezahlt",
|
||
"paidSkontoHelp": "Der Kunde hat innerhalb der Skontofrist bezahlt. {{amount}} ({{percent}}% Abzug) als bezahlt erfassen.",
|
||
"partial": "Teilweise bezahlt",
|
||
"partialHelp": "Den eingegangenen Betrag erfassen und anschließend die Zahlungserinnerung für den Restbetrag einreihen.",
|
||
"partialAmount": "Eingegangener Betrag",
|
||
"partialMax": "Max.: {{max}}",
|
||
"unpaid": "Noch nicht bezahlt",
|
||
"unpaidHelp": "Nichts eingegangen. Die Zahlungserinnerung an den Kunden wird eingereiht{{fee}}.",
|
||
"unpaidWithFee": " (mit Mahngebühr ab der zweiten Erinnerung)"
|
||
},
|
||
"submitting": "Wird erfasst…",
|
||
"submit": "Bestätigen",
|
||
"result": {
|
||
"title": "Aktion erfasst",
|
||
"paid": "Rechnung {{n}} als vollständig bezahlt markiert.",
|
||
"paidSkonto": "Rechnung {{n}} als mit Skonto bezahlt markiert.",
|
||
"partial": "Teilzahlung für Rechnung {{n}} erfasst. Die Zahlungserinnerung für den Restbetrag wurde eingereiht.",
|
||
"unpaidMax": "Als unbezahlt erfasst. Die höchste Mahnstufe ist bereits erreicht — bitte klären Sie den Fall direkt mit dem Kunden.",
|
||
"unpaid": "Als unbezahlt erfasst. Zahlungserinnerung eingereiht (Stufe {{lvl}}).",
|
||
"close": "Sie können diesen Tab schließen."
|
||
}
|
||
},
|
||
"publicContract": {
|
||
"errorAccept": "Bitte bestätigen Sie das Kontrollkästchen zur Annahme.",
|
||
"errorName": "Bitte geben Sie Ihren Namen ein.",
|
||
"errorSignatureRequired": "Für diesen Vertrag ist eine gezeichnete Unterschrift erforderlich.",
|
||
"notFoundTitle": "Vertrag nicht verfügbar",
|
||
"notFoundBody": "Dieser Signatur-Link ist ungültig oder abgelaufen. Bitte wenden Sie sich an den Absender.",
|
||
"fallbackTitle": "Vertrag",
|
||
"signed": {
|
||
"title": "Vielen Dank — der Vertrag ist unterschrieben.",
|
||
"by": "Unterschrieben von",
|
||
"counterBy": "Gegengezeichnet von",
|
||
"auditTitle": "Signatur-Prüfprotokoll",
|
||
"auditBody": "Für Ihre Unterlagen. Speichern Sie diese Angaben oder machen Sie einen Screenshot — mit dem SHA-256-Hash können Sie später belegen, dass das heruntergeladene PDF exakt dem von uns ausgestellten entspricht (Datei erneut hashen und vergleichen).",
|
||
"contractNumber": "Vertrag",
|
||
"signedAt": "Unterschrieben am",
|
||
"ipAddress": "IP bei Unterzeichnung",
|
||
"counterSignedAt": "Gegengezeichnet am",
|
||
"signedSha": "SHA-256 des unterschriebenen PDFs",
|
||
"unsignedSha": "SHA-256 des Original-PDFs"
|
||
},
|
||
"downloadSigned": "Unterschriebenes PDF herunterladen",
|
||
"download": "PDF herunterladen",
|
||
"signTitle": "Diesen Vertrag unterschreiben",
|
||
"nameField": "Ihr vollständiger Name",
|
||
"signaturePromptRequired": "Zeichnen Sie Ihre Unterschrift",
|
||
"signaturePrompt": "Zeichnen Sie Ihre Unterschrift (optional)",
|
||
"clearSignature": "Löschen",
|
||
"acceptCheckbox": "Ich habe diesen Vertrag gelesen und erkläre mich mit seinen Bedingungen einverstanden.",
|
||
"submit": "Vertrag unterschreiben",
|
||
"uploadAlternative": "Oder ein handschriftlich unterschriebenes PDF hochladen",
|
||
"uploadHint": "Unterschreiben Sie den ausgedruckten Vertrag von Hand, scannen Sie ihn ein und laden Sie das PDF hier hoch.",
|
||
"uploadButton": "Unterschriebenes PDF hochladen"
|
||
},
|
||
"crmOverview": {
|
||
"title": "CRM-Übersicht",
|
||
"loadError": "CRM-Kennzahlen konnten nicht geladen werden. Prüfen Sie, ob Sie die Berechtigung bills.view oder quotes.view besitzen und ob das Backend auf dem aktuellen Stand ist.",
|
||
"revenue": {
|
||
"month": "Umsatz · letzte 30 Tage",
|
||
"quarter": "Umsatz · letzte 90 Tage",
|
||
"yearCalendar": "Umsatz · dieses Jahr",
|
||
"year": "Umsatz · letzte 365 Tage",
|
||
"toggleHint": "Tippen, um den Zeitraum zu wechseln"
|
||
},
|
||
"outstanding": "Offene Zahlungen",
|
||
"outstandingSub_one": "{{count}} Rechnung offen",
|
||
"outstandingSub_other": "{{count}} Rechnungen offen",
|
||
"quotes": {
|
||
"title": "Angebote"
|
||
},
|
||
"viewAll": "Alle anzeigen",
|
||
"invoices": {
|
||
"title": "Rechnungen"
|
||
}
|
||
},
|
||
"users": {
|
||
"roles": {
|
||
"viewer": "Betrachter",
|
||
"editor": "Bearbeiter",
|
||
"admin": "Admin",
|
||
"super_admin": "Super-Admin"
|
||
}
|
||
},
|
||
"newsletters": {
|
||
"title": "Newsletter",
|
||
"subtitle": "Senden Sie eine Kampagne an Ihre Kundenkonten. Abgemeldete Kunden werden automatisch übersprungen, und jede Sendung enthält einen Abmeldelink.",
|
||
"new": "Neue Kampagne",
|
||
"untitled": "Unbenannte Kampagne",
|
||
"untitledSubject": "Newsletter",
|
||
"empty": "Noch keine Kampagnen.",
|
||
"allStatuses": "Alle Status",
|
||
"filterByStatus": "Nach Status filtern",
|
||
"backToList": "Alle Kampagnen",
|
||
"recipientsTitle": "Empfänger",
|
||
"notEditable": "Diese Kampagne wurde bereits eingereiht und kann nicht mehr bearbeitet werden.",
|
||
"viewCampaign": "Kampagne ansehen",
|
||
"status": {
|
||
"draft": "Entwurf",
|
||
"queued": "Eingereiht",
|
||
"sending": "Wird gesendet",
|
||
"sent": "Gesendet",
|
||
"cancelled": "Abgebrochen",
|
||
"failed": "Fehlgeschlagen"
|
||
},
|
||
"recipientStatus": {
|
||
"queued": "Eingereiht",
|
||
"sent": "Gesendet",
|
||
"failed": "Fehlgeschlagen",
|
||
"cancelled": "Abgebrochen",
|
||
"skipped_opt_out": "Übersprungen (abgemeldet)"
|
||
},
|
||
"col": {
|
||
"name": "Name",
|
||
"status": "Status",
|
||
"recipients": "Empfänger",
|
||
"sent": "Gesendet",
|
||
"failed": "Fehlgeschlagen",
|
||
"created": "Erstellt"
|
||
},
|
||
"section": {
|
||
"content": "Inhalt",
|
||
"recipients": "Empfänger & Versand",
|
||
"preview": "Vorschau"
|
||
},
|
||
"field": {
|
||
"name": "Kampagnenname (intern)",
|
||
"subject": "Betreff",
|
||
"body": "Inhalt",
|
||
"rate": "Senderate (E-Mails pro Minute)",
|
||
"testTo": "Test senden an"
|
||
},
|
||
"mode": {
|
||
"allActive": "Alle aktiven Kunden",
|
||
"manual": "Kunden auswählen"
|
||
},
|
||
"showCss": "Eigenes CSS (optional)",
|
||
"hideCss": "Eigenes CSS ausblenden",
|
||
"cssHelp": "Viele E-Mail-Programme entfernen einen <style>-Block — halten Sie wichtige Gestaltung in Inline-Attributen. Externe Bilder und @import werden entfernt.",
|
||
"rateHelp": "Sendungen werden gestreckt, damit Ihr Mailanbieter nicht drosselt. Prüfen Sie das Stundenlimit Ihres Anbieters, bevor Sie diesen Wert erhöhen.",
|
||
"recipientCount": "{{count}} Empfänger",
|
||
"skippedOptOut": "{{count}} übersprungen (abgemeldet)",
|
||
"saveToRefresh": "Speichern, um diese Zahl zu aktualisieren.",
|
||
"refreshPreview": "Vorschau aktualisieren",
|
||
"previewTitle": "Newsletter-Vorschau",
|
||
"sendTest": "Test",
|
||
"queueButton": "Kampagne einreihen",
|
||
"queueBlocked": "Betreff, Inhalt und mindestens ein Empfänger werden zum Senden benötigt.",
|
||
"queueTitle": "Diese Kampagne senden?",
|
||
"queueBody": "Damit werden {{count}} Kunden mit {{rate}} pro Minute angeschrieben (rund {{minutes}} Min.). Sobald der Versand läuft, lässt sich das nicht rückgängig machen.",
|
||
"queueConfirm": "An {{count}} Kunden senden",
|
||
"cancel": "Kampagne abbrechen",
|
||
"cancelTitle": "Diese Kampagne abbrechen?",
|
||
"cancelBody": "Noch nicht versendete E-Mails werden verworfen. Bereits versendete E-Mails lassen sich nicht zurückholen.",
|
||
"cancelled": "{{count}} ausstehende E-Mails abgebrochen.",
|
||
"sendingAt": "Versand mit {{rate}} E-Mails pro Minute.",
|
||
"deleteTitle": "Kampagne löschen?",
|
||
"deleteBody": "\"{{name}}\" wird gelöscht. Das lässt sich nicht rückgängig machen.",
|
||
"deleteAria": "{{name}} löschen",
|
||
"saved": "Kampagne gespeichert.",
|
||
"queued": "Kampagne eingereiht.",
|
||
"deleted": "Kampagne gelöscht.",
|
||
"testSent": "Test-E-Mail an {{to}} gesendet.",
|
||
"createFailed": "Kampagne konnte nicht erstellt werden.",
|
||
"saveFailed": "Kampagne konnte nicht gespeichert werden.",
|
||
"deleteFailed": "Kampagne konnte nicht gelöscht werden.",
|
||
"previewFailed": "Vorschau konnte nicht erzeugt werden.",
|
||
"testFailed": "Test-E-Mail konnte nicht gesendet werden.",
|
||
"queueFailed": "Kampagne konnte nicht eingereiht werden.",
|
||
"cancelFailed": "Kampagne konnte nicht abgebrochen werden.",
|
||
"previewEmpty": "Aktualisieren Sie die Vorschau, um die E-Mail so zu sehen, wie ein Kunde sie erhält."
|
||
}
|
||
}
|