Limit-Status im Upload-Flow anzeigen (Warnbanner + Sperrzustände).

Upload-Fehlercodes auswerten und freundliche Dialoge zeigen.
This commit is contained in:
Codex Agent
2025-11-01 19:50:17 +01:00
parent 2c14493604
commit 79b209de9a
55 changed files with 3348 additions and 462 deletions

View File

@@ -188,6 +188,14 @@ export const messages: Record<LocaleCode, NestedMessages> = {
title: 'Nicht gefunden',
description: 'Die Seite konnte nicht gefunden werden.',
},
galleryCountdown: {
expiresIn: 'Noch {days} Tage online',
expiresToday: 'Letzter Tag!',
expired: 'Galerie abgelaufen',
description: 'Sichere jetzt deine Lieblingsfotos die Galerie verschwindet bald.',
expiredDescription: 'Nur die Veranstalter:innen können die Galerie jetzt noch verlängern.',
ctaUpload: 'Letzte Fotos hochladen',
},
galleryPublic: {
title: 'Galerie',
loading: 'Galerie wird geladen ...',
@@ -298,6 +306,63 @@ export const messages: Record<LocaleCode, NestedMessages> = {
limitReached: 'Upload-Limit erreicht ({used} / {max} Fotos). Bitte kontaktiere die Veranstalter für ein Upgrade.',
limitUnlimited: 'unbegrenzt',
limitWarning: 'Nur noch {remaining} von {max} Fotos möglich. Bitte kontaktiere die Veranstalter für ein Upgrade.',
galleryWarningDay: 'Galerie läuft in {days} Tag ab. Teile deine Fotos rechtzeitig!',
galleryWarningDays: 'Galerie läuft in {days} Tagen ab. Teile deine Fotos rechtzeitig!',
status: {
title: 'Dein Paketstatus',
subtitle: 'Behalte deine Kontingente im Blick, bevor es eng wird.',
badges: {
ok: 'Bereit',
warning: 'Hinweis',
limit_reached: 'Limit erreicht',
unlimited: 'Unbegrenzt',
},
cards: {
photos: {
title: 'Fotos',
remaining: 'Nur noch {remaining} von {limit} Fotos möglich',
unlimited: 'Unbegrenzte Foto-Uploads inklusive',
},
guests: {
title: 'Gäste',
remaining: '{remaining} Gäste frei (max. {limit})',
unlimited: 'Beliebig viele Gäste erlaubt',
},
},
},
dialogs: {
close: 'Verstanden',
photoLimit: {
title: 'Upload-Limit erreicht',
description: 'Es wurden {used} von {limit} Fotos hochgeladen. Bitte kontaktiere das Team für ein Upgrade.',
hint: 'Tipp: Größere Pakete schalten sofort wieder Uploads frei.',
},
deviceLimit: {
title: 'Gerätelimit erreicht',
description: 'Dieses Gerät hat sein Upload-Kontingent ausgeschöpft.',
hint: 'Nutze ein anderes Gerät oder sprich die Veranstalter:innen an.',
},
packageMissing: {
title: 'Event pausiert Uploads',
description: 'Für dieses Event sind aktuell keine Uploads freigeschaltet.',
hint: 'Bitte kontaktiere die Veranstalter:innen für weitere Informationen.',
},
galleryExpired: {
title: 'Galerie abgelaufen',
description: 'Die Galerie ist geschlossen neue Uploads sind nicht mehr möglich.',
hint: 'Nur die Veranstalter:innen können die Galerie verlängern.',
},
csrf: {
title: 'Sitzung abgelaufen',
description: 'Bitte lade die Seite neu und versuche den Upload anschließend erneut.',
hint: 'Aktualisiere die Seite, um eine neue Sitzung zu starten.',
},
generic: {
title: 'Upload fehlgeschlagen',
description: 'Der Upload konnte nicht abgeschlossen werden. Bitte versuche es später erneut.',
hint: 'Bleibt das Problem bestehen, kontaktiere die Veranstalter:innen.',
},
},
errors: {
photoLimit: 'Upload-Limit erreicht. Bitte kontaktiere die Veranstalter für ein Upgrade.',
deviceLimit: 'Dieses Gerät hat das Upload-Limit erreicht. Bitte wende dich an die Veranstalter.',
@@ -551,6 +616,14 @@ export const messages: Record<LocaleCode, NestedMessages> = {
title: 'Not found',
description: 'We could not find the page you requested.',
},
galleryCountdown: {
expiresIn: '{days} days remaining',
expiresToday: 'Final day!',
expired: 'Gallery expired',
description: 'Save your favourite photos before the gallery goes offline.',
expiredDescription: 'Only the organizers can extend the gallery now.',
ctaUpload: 'Share last photos',
},
galleryPublic: {
title: 'Gallery',
loading: 'Loading gallery ...',
@@ -661,6 +734,63 @@ export const messages: Record<LocaleCode, NestedMessages> = {
limitReached: 'Upload limit reached ({used} / {max} photos). Contact the organizers for an upgrade.',
limitUnlimited: 'unlimited',
limitWarning: 'Only {remaining} of {max} photos left. Please contact the organizers for an upgrade.',
galleryWarningDay: 'Gallery expires in {days} day. Upload your photos soon!',
galleryWarningDays: 'Gallery expires in {days} days. Upload your photos soon!',
status: {
title: 'Your package status',
subtitle: 'Keep an eye on your remaining allowances.',
badges: {
ok: 'Ready',
warning: 'Heads-up',
limit_reached: 'Limit reached',
unlimited: 'Unlimited',
},
cards: {
photos: {
title: 'Photos',
remaining: '{remaining} of {limit} photo slots left',
unlimited: 'Unlimited photo uploads included',
},
guests: {
title: 'Guests',
remaining: '{remaining} guest slots free (max {limit})',
unlimited: 'Unlimited guests allowed',
},
},
},
dialogs: {
close: 'Got it',
photoLimit: {
title: 'Upload limit reached',
description: '{used} of {limit} photos are already uploaded. Please reach out to upgrade your package.',
hint: 'Tip: Upgrading the package re-enables uploads instantly.',
},
deviceLimit: {
title: 'Device limit reached',
description: 'This device has used all available upload slots.',
hint: 'Try a different device or contact the organizers.',
},
packageMissing: {
title: 'Uploads paused',
description: 'This event is currently not accepting new uploads.',
hint: 'Check in with the organizers for the latest status.',
},
galleryExpired: {
title: 'Gallery closed',
description: 'The gallery has expired and no new uploads can be added.',
hint: 'Only the organizers can extend the gallery window.',
},
csrf: {
title: 'Session expired',
description: 'Refresh the page and try the upload again.',
hint: 'Reload the page to start a new session.',
},
generic: {
title: 'Upload failed',
description: 'We could not complete the upload. Please try again later.',
hint: 'If it keeps happening, reach out to the organizers.',
},
},
errors: {
photoLimit: 'Upload limit reached. Contact the organizers for an upgrade.',
deviceLimit: 'This device reached its upload limit. Please contact the organizers.',