zu fabricjs gewechselt, noch nicht funktionsfähig

This commit is contained in:
Codex Agent
2025-10-31 20:19:09 +01:00
parent 06df61f706
commit eb0c31c90b
33 changed files with 7718 additions and 2062 deletions

View File

@@ -1,10 +1,21 @@
{
"login": {
"title": "Tenant-Admin",
"lead": "Melde dich mit deinem Fotospiel-Account an. Du wirst zur sicheren OAuth-Anmeldung weitergeleitet und anschließend zur Admin-Oberfläche zurückgebracht.",
"cta": "Mit Tenant-Account anmelden",
"badge": "Fotospiel Tenant Admin",
"hero_title": "Event-Steuerung, die sich wie Zuhause anfühlt.",
"hero_subtitle": "Wechsle mühelos zwischen Mandanten, behalte Live-Uploads im Blick und teile elegante Einladungen alles in einer ruhigen Oberfläche.",
"features": [
"Gestalte QR-Einladungen und druckfertige Layouts in wenigen Klicks passend zu eurer Marke.",
"Organisiere Aufgaben, Emotionen und Sammlungen für jeden Eventtyp ohne Excel-Chaos.",
"Bleib am Eventtag souverän mit Dashboards, Live-Statistiken und sofortiger Moderation."
],
"lead": "Die Anmeldung erfolgt über unseren sicheren OAuth-Login und bringt dich direkt wieder zurück.",
"panel_copy": "Melde dich mit deinen Fotospiel-Admin-Zugangsdaten an. Wir schützen dein Konto mit OAuth 2.1 und mandantenbewussten Berechtigungen.",
"cta": "Mit Fotospiel-Login fortfahren",
"loading": "Bitte warten …",
"oauth_error_title": "Login aktuell nicht möglich",
"oauth_error": "Anmeldung fehlgeschlagen: {{message}}",
"support": "Du brauchst Zugriff? Wende dich an den Tenant-Inhaber oder schreibe an support@fotospiel.de wir helfen gern weiter.",
"appearance_label": "Darstellung"
}
}

View File

@@ -283,12 +283,12 @@
},
"logo": {
"label": "Logo",
"hint": "PNG oder SVG, max. 1 MB. Wird oben rechts platziert.",
"hint": "PNG, max. 1 MB. Wird oben rechts platziert.",
"remove": "Logo entfernen"
},
"preview": {
"title": "Vorschau",
"hint": "Farben und Texte, wie sie im Layout erscheinen. Speichere, um neue PDFs/SVGs zu erhalten."
"hint": "Farben und Texte, wie sie im Layout erscheinen. Speichere, um neue PDFs/PNGs zu erhalten."
},
"actions": {
"save": "Speichern",
@@ -299,7 +299,9 @@
"actionLabel": "Layout anpassen",
"errors": {
"logoTooLarge": "Das Logo darf maximal 1 MB groß sein.",
"noLayout": "Bitte wähle ein Layout aus."
"noLayout": "Bitte wähle ein Layout aus.",
"downloadFailed": "Download fehlgeschlagen. Bitte versuche es erneut.",
"printFailed": "Drucken konnte nicht gestartet werden."
},
"defaults": {
"badgeLabel": "Digitale Gästebox",
@@ -310,7 +312,8 @@
"QR-Code scannen",
"Profil anlegen",
"Fotos teilen"
]
],
"textBlock": "Neuer Textblock hier kannst du eigene Hinweise ergänzen."
}
}
},
@@ -354,24 +357,35 @@
"export": {
"title": "Drucken & Export",
"description": "Lade druckfertige Dateien herunter oder starte direkt einen Testdruck.",
"mode": {
"standard": "Standardlayout",
"advanced": "Freier Editor"
},
"previewHint": "Speichere deine Änderungen, um die Exportdateien neu zu erstellen.",
"noLayoutPreview": "Noch keine Vorschau verfügbar. Speichere das Layout zuerst.",
"selectPlaceholder": "Einladung auswählen",
"noInviteSelected": "Wähle zunächst eine Einladung aus, um Downloads zu starten.",
"noLayouts": "Für diese Einladung sind aktuell keine Layouts verfügbar.",
"actions": {
"print": "Direkt drucken"
"title": "Aktionen",
"description": "Starte deinen Testdruck oder lade die Layouts herunter.",
"printNow": "Direkt drucken",
"hint": "PDF enthält Beschnittmarken, PNG ist ideal für digitale Freigaben."
},
"errorTitle": "Download fehlgeschlagen"
},
"customizer": {
"heading": "Layout anpassen",
"copy": "Verleihe der Einladung euren Ton: Texte, Farben und Logo lassen sich live bearbeiten.",
"copy": "Bearbeite Texte, Farben und Positionen direkt neben der Live-Vorschau. Änderungen werden sofort sichtbar.",
"actions": {
"save": "Layout speichern",
"reset": "Zurücksetzen",
"print": "Drucken",
"removeLogo": "Logo entfernen",
"uploadLogo": "Logo hochladen (max. 1 MB)",
"addInstruction": "Punkt hinzufügen"
"addInstruction": "Punkt hinzufügen",
"undo": "Rückgängig",
"redo": "Wiederholen"
},
"sections": {
"layouts": "Layouts",
@@ -381,6 +395,37 @@
"instructionsHint": "Helft euren Gästen mit klaren Aufgaben. Maximal fünf Punkte.",
"branding": "Farbgebung"
},
"elements": {
"title": "Elemente & Positionierung",
"hint": "Wähle ein Element aus, um es zu verschieben, anzupassen oder zu entfernen.",
"headline": "Überschrift",
"subtitle": "Untertitel",
"description": "Beschreibung",
"badge": "Badge",
"link": "Linkfeld",
"cta": "Call-to-Action",
"qr": "QR-Code",
"logo": "Logo",
"text": "Freier Textblock",
"remove": "Element entfernen",
"details": "Element-Details",
"detailsHint": "Passe Text, Ausrichtung und weitere Eigenschaften an. Änderungen werden sofort sichtbar.",
"customText": "Textinhalt",
"qrHint": "Der QR-Code lässt sich im Canvas in Größe und Position verändern.",
"logoHint": "Logos bearbeitest du im Bereich „Branding“. Hier kannst du das Element nur verschieben oder skalieren.",
"align": "Ausrichtung",
"alignLeft": "Links",
"alignCenter": "Zentriert",
"alignRight": "Rechts",
"fontSize": "Schriftgröße",
"selectHint": "Tippe ein Element im Canvas oder in der Liste an, um Details zu bearbeiten.",
"listHint": "Wähle ein Element aus, damit seine Einstellungen direkt darunter erscheinen.",
"addSubtitle": "Untertitel einblenden",
"addBadge": "Badge anzeigen",
"addLink": "Linkfeld hinzufügen",
"addCta": "Call-to-Action einfügen",
"addText": "Freien Textblock hinzufügen"
},
"fields": {
"headline": "Überschrift",
"subtitle": "Unterzeile",
@@ -415,6 +460,113 @@
"layoutFallback": "Layout"
}
},
"events": {
"errors": {
"missingSlug": "Kein Event ausgewählt.",
"loadFailed": "Event konnte nicht geladen werden.",
"notFoundTitle": "Event nicht gefunden",
"notFoundBody": "Ohne gültige Kennung können wir keine Daten laden. Kehre zur Eventliste zurück und wähle dort ein Event aus.",
"toggleFailed": "Status konnte nicht angepasst werden."
},
"alerts": {
"failedTitle": "Aktion fehlgeschlagen"
},
"placeholders": {
"untitled": "Unbenanntes Event"
},
"actions": {
"backToList": "Zurück zur Liste",
"edit": "Bearbeiten",
"members": "Team & Rollen",
"tasks": "Aufgaben verwalten",
"invites": "Einladungen & Layouts",
"photos": "Fotos moderieren",
"refresh": "Aktualisieren"
},
"workspace": {
"detailSubtitle": "Behalte Status, Aufgaben und Einladungen deines Events im Blick.",
"toolkitSubtitle": "Moderation, Aufgaben und Einladungen für deinen Eventtag bündeln.",
"sections": {
"statusTitle": "Eventstatus & Sichtbarkeit",
"statusSubtitle": "Aktiviere dein Event für Gäste oder verstecke es vorübergehend."
},
"fields": {
"status": "Status",
"active": "Aktiv für Gäste",
"date": "Eventdatum",
"eventType": "Event-Typ",
"insights": "Letzte Aktivität",
"uploadsTotal": "{{count}} Uploads gesamt",
"uploadsToday": "{{count}} Uploads (24h)",
"likesTotal": "{{count}} Likes vergeben"
},
"actions": {
"pause": "Event pausieren",
"activate": "Event aktivieren"
},
"activeYes": "Ja",
"activeNo": "Nein"
},
"status": {
"published": "Veröffentlicht",
"draft": "Entwurf",
"archived": "Archiviert"
},
"quickActions": {
"title": "Schnellaktionen",
"subtitle": "Nutze die wichtigsten Schritte vor und während deines Events.",
"moderate": "Fotos moderieren",
"tasks": "Aufgaben bearbeiten",
"invites": "Layouts & QR verwalten",
"roles": "Team & Rollen anpassen",
"print": "Layouts als PDF drucken",
"toggle": "Status ändern"
},
"metrics": {
"uploadsTotal": "Uploads gesamt",
"uploads24h": "Uploads (24h)",
"pending": "Fotos in Moderation",
"activeInvites": "Aktive Einladungen"
},
"invites": {
"title": "QR-Einladungen",
"subtitle": "Behält aktive Einladungen und Layouts im Blick.",
"activeCount": "{{count}} aktiv",
"totalCount": "{{count}} gesamt",
"empty": "Noch keine Einladungen erstellt.",
"manage": "Layouts & Einladungen verwalten"
},
"tasks": {
"title": "Aktive Aufgaben",
"subtitle": "Motiviere Gäste mit klaren Aufgaben & Highlights.",
"summary": "{{completed}} von {{total}} erledigt",
"empty": "Noch keine Aufgaben zugewiesen.",
"manage": "Aufgabenbereich öffnen"
},
"photos": {
"pendingTitle": "Fotos in Moderation",
"pendingSubtitle": "Schnell prüfen, bevor Gäste live gehen.",
"pendingCount": "{{count}} Fotos offen",
"pendingEmpty": "Aktuell warten keine Fotos auf Freigabe.",
"openModeration": "Moderation öffnen",
"recentTitle": "Neueste Uploads",
"recentSubtitle": "Halte Ausschau nach Highlight-Momenten der Gäste.",
"recentEmpty": "Noch keine neuen Uploads."
},
"feedback": {
"title": "Wie läuft dein Event?",
"subtitle": "Feedback hilft uns, neue Features zu priorisieren.",
"positive": "Super Lauf!",
"neutral": "Läuft",
"negative": "Braucht Support",
"placeholder": "Optional: Lass uns wissen, was gut funktioniert oder wo du Unterstützung brauchst.",
"errorTitle": "Feedback konnte nicht gesendet werden.",
"authError": "Deine Session ist abgelaufen. Bitte melde dich erneut an.",
"genericError": "Feedback konnte nicht gesendet werden.",
"submit": "Feedback senden",
"submitted": "Danke!"
}
},
"collections": {
"title": "Aufgabenvorlagen",
"subtitle": "Durchstöbere kuratierte Vorlagen oder aktiviere sie für deine Events.",

View File

@@ -1,10 +1,21 @@
{
"login": {
"title": "Tenant Admin",
"lead": "Sign in with your Fotospiel account. We will redirect you to the secure OAuth login and bring you back to the admin dashboard afterwards.",
"cta": "Sign in with tenant account",
"loading": "Please wait …",
"badge": "Fotospiel Tenant Admin",
"hero_title": "Event control that feels at home.",
"hero_subtitle": "Switch between tenants, monitor live uploads, and share beautiful invites — all in one calm workspace.",
"features": [
"Design QR invites and print-ready layouts that match your brand in minutes.",
"Coordinate tasks, emotions, and achievements for every event flow.",
"Stay confident on event day with dashboards, live stats, and instant moderation."
],
"lead": "You will be redirected to our secure OAuth login and come right back afterwards.",
"panel_copy": "Sign in with your Fotospiel admin credentials to continue. We secure your account with OAuth 2.1 and tenant-aware permissions.",
"cta": "Continue with Fotospiel login",
"loading": "Signing you in …",
"oauth_error_title": "Login not possible right now",
"oauth_error": "Sign-in failed: {{message}}",
"support": "Need access? Contact your tenant owner or email support@fotospiel.de — we're happy to help.",
"appearance_label": "Appearance"
}
}

View File

@@ -283,12 +283,12 @@
},
"logo": {
"label": "Logo",
"hint": "PNG or SVG, max. 1 MB. Appears in the top right corner.",
"hint": "PNG, max. 1 MB. Appears in the top right corner.",
"remove": "Remove logo"
},
"preview": {
"title": "Preview",
"hint": "Visual reference for colours and texts. Save to generate new PDFs/SVGs."
"hint": "Visual reference for colours and texts. Save to generate new PDFs/PNGs."
},
"actions": {
"save": "Save",
@@ -299,7 +299,9 @@
"actionLabel": "Customize layout",
"errors": {
"logoTooLarge": "Logo must not exceed 1 MB.",
"noLayout": "Please select a layout."
"noLayout": "Please select a layout.",
"downloadFailed": "Download failed. Please try again.",
"printFailed": "Printing could not be started."
},
"defaults": {
"badgeLabel": "Digital guest box",
@@ -310,7 +312,8 @@
"Scan the QR code",
"Create your profile",
"Share your photos"
]
],
"textBlock": "New text block add your own notes here."
}
}
},
@@ -354,24 +357,35 @@
"export": {
"title": "Print & export",
"description": "Download print-ready files or launch a test print right away.",
"mode": {
"standard": "Standard layout",
"advanced": "Advanced editor"
},
"previewHint": "Save after making changes to regenerate the export files.",
"noLayoutPreview": "No preview available yet. Save your layout first.",
"selectPlaceholder": "Select invite",
"noInviteSelected": "Select an invite first to start downloads.",
"noLayouts": "There are currently no layouts available for this invite.",
"actions": {
"print": "Print now"
"title": "Actions",
"description": "Start a test print or download the layouts.",
"printNow": "Print now",
"hint": "PDF includes crop marks; PNG is perfect for quick digital approvals."
},
"errorTitle": "Download failed"
},
"customizer": {
"heading": "Customise layout",
"copy": "Make the invite your own adjust copy, colours, and logos in real time.",
"copy": "Edit texts, colours, and positions right next to the live preview. Changes appear instantly.",
"actions": {
"save": "Save layout",
"reset": "Reset",
"print": "Print",
"removeLogo": "Remove logo",
"uploadLogo": "Upload logo (max. 1 MB)",
"addInstruction": "Add step"
"addInstruction": "Add step",
"undo": "Undo",
"redo": "Redo"
},
"sections": {
"layouts": "Layouts",
@@ -381,6 +395,37 @@
"instructionsHint": "Guide guests with clear steps. Maximum of five.",
"branding": "Colors"
},
"elements": {
"title": "Elements & positioning",
"hint": "Select an element to move, edit, or remove it.",
"headline": "Headline",
"subtitle": "Subheading",
"description": "Description",
"badge": "Badge",
"link": "Link field",
"cta": "Call-to-action",
"qr": "QR code",
"logo": "Logo",
"text": "Free text block",
"remove": "Remove element",
"details": "Element details",
"detailsHint": "Adjust copy, alignment, and more. Changes appear instantly in the preview.",
"customText": "Text content",
"qrHint": "Resize and reposition the QR code directly on the canvas.",
"logoHint": "Adjust logos in the branding section. Use the canvas to resize or move the element.",
"align": "Alignment",
"alignLeft": "Left",
"alignCenter": "Center",
"alignRight": "Right",
"fontSize": "Font size",
"selectHint": "Tap an element on the canvas or in the list to edit its details.",
"listHint": "Select an element to reveal its settings directly under the entry.",
"addSubtitle": "Show subtitle",
"addBadge": "Show badge",
"addLink": "Add link field",
"addCta": "Insert call-to-action",
"addText": "Add free text block"
},
"fields": {
"headline": "Headline",
"subtitle": "Subheading",
@@ -415,6 +460,113 @@
"layoutFallback": "Layout"
}
},
"events": {
"errors": {
"missingSlug": "No event selected.",
"loadFailed": "Event could not be loaded.",
"notFoundTitle": "Event not found",
"notFoundBody": "Without a valid identifier we cant load the data. Return to the list and choose an event.",
"toggleFailed": "Status could not be updated."
},
"alerts": {
"failedTitle": "Action failed"
},
"placeholders": {
"untitled": "Untitled event"
},
"actions": {
"backToList": "Back to list",
"edit": "Edit",
"members": "Team & roles",
"tasks": "Manage tasks",
"invites": "Invites & layouts",
"photos": "Moderate photos",
"refresh": "Refresh"
},
"workspace": {
"detailSubtitle": "Keep status, tasks, and invites of your event in one view.",
"toolkitSubtitle": "Bundle moderation, tasks, and invites for the event day.",
"sections": {
"statusTitle": "Event status & visibility",
"statusSubtitle": "Activate the event for guests or hide it temporarily."
},
"fields": {
"status": "Status",
"active": "Active for guests",
"date": "Event date",
"eventType": "Event type",
"insights": "Recent activity",
"uploadsTotal": "{{count}} uploads total",
"uploadsToday": "{{count}} uploads (24h)",
"likesTotal": "{{count}} likes in total"
},
"actions": {
"pause": "Pause event",
"activate": "Activate event"
},
"activeYes": "Yes",
"activeNo": "No"
},
"status": {
"published": "Published",
"draft": "Draft",
"archived": "Archived"
},
"quickActions": {
"title": "Quick actions",
"subtitle": "Jump into the most important flows before and during the event.",
"moderate": "Moderate photos",
"tasks": "Edit tasks",
"invites": "Manage layouts & QR",
"roles": "Adjust team & roles",
"print": "Print layouts as PDF",
"toggle": "Change status"
},
"metrics": {
"uploadsTotal": "Uploads total",
"uploads24h": "Uploads (24h)",
"pending": "Photos in moderation",
"activeInvites": "Active invites"
},
"invites": {
"title": "QR invites",
"subtitle": "Keep an eye on active links and layouts.",
"activeCount": "{{count}} active",
"totalCount": "{{count}} total",
"empty": "No invites created yet.",
"manage": "Manage layouts & invites"
},
"tasks": {
"title": "Active tasks",
"subtitle": "Motivate guests with clear prompts & highlights.",
"summary": "{{completed}} of {{total}} complete",
"empty": "No tasks assigned yet.",
"manage": "Open task workspace"
},
"photos": {
"pendingTitle": "Photos awaiting review",
"pendingSubtitle": "Check uploads before they go live.",
"pendingCount": "{{count}} photos pending",
"pendingEmpty": "No photos waiting for moderation.",
"openModeration": "Open moderation",
"recentTitle": "Latest uploads",
"recentSubtitle": "Spot the latest guest highlights.",
"recentEmpty": "No new uploads yet."
},
"feedback": {
"title": "How is your event running?",
"subtitle": "Your feedback helps us prioritise improvements.",
"positive": "Going great!",
"neutral": "All right",
"negative": "Needs support",
"placeholder": "Optional: tell us what works well or where you need help.",
"errorTitle": "Feedback could not be sent.",
"authError": "Your session expired. Please sign in again.",
"genericError": "Feedback could not be sent.",
"submit": "Send feedback",
"submitted": "Thanks!"
}
},
"collections": {
"title": "Task collections",
"subtitle": "Browse curated task bundles or activate them for your events.",