feat: localize guest endpoints and caching

This commit is contained in:
Codex Agent
2025-11-12 15:48:06 +01:00
parent d91108c883
commit 062932ce38
19 changed files with 1538 additions and 595 deletions

View File

@@ -184,6 +184,67 @@ export const messages: Record<LocaleCode, NestedMessages> = {
days: 'vor {count} Tagen',
},
},
achievements: {
page: {
title: 'Erfolge',
subtitle: 'Behalte deine Highlights, Badges und die aktivsten Gäste im Blick.',
loadError: 'Erfolge konnten nicht geladen werden.',
retry: 'Erneut versuchen',
buttons: {
personal: 'Meine Erfolge',
event: 'Event Highlights',
feed: 'Live Feed',
},
},
personal: {
greeting: 'Hi {name}!',
stats: '{photos} Fotos | {tasks} Aufgaben | {likes} Likes',
actions: {
upload: 'Neues Foto hochladen',
tasks: 'Aufgabe ziehen',
},
},
badges: {
title: 'Badges',
description: 'Dein Fortschritt bei den verfügbaren Erfolgen.',
empty: 'Noch keine Badges verfügbar.',
},
leaderboard: {
description: 'Top 5 Teilnehmer dieses Events',
uploadsTitle: 'Top Uploads',
uploadsEmpty: 'Noch keine Uploads sobald Fotos vorhanden sind, erscheinen sie hier.',
likesTitle: 'Beliebteste Gäste',
likesEmpty: 'Likes fehlen noch motiviere die Gäste, Fotos zu liken.',
guestFallback: 'Gast',
item: {
photos: '{count} Fotos',
likes: '{count} Likes',
},
},
timeline: {
title: 'Timeline',
description: 'Wie das Event im Laufe der Zeit Fahrt aufgenommen hat.',
row: '{photos} Fotos | {guests} Gäste',
},
feed: {
title: 'Live Feed',
description: 'Die neuesten Momente aus deinem Event.',
empty: 'Noch keine Uploads starte die Kamera und lege los!',
taskLabel: 'Aufgabe: {task}',
likesLabel: '{count} Likes',
thumbnailAlt: 'Vorschau',
},
highlights: {
topTitle: 'Publikumsliebling',
topDescription: 'Das Foto mit den meisten Likes.',
noPreview: 'Kein Vorschau-Bild',
likesAmount: '{count} Likes',
taskLabel: 'Aufgabe: {task}',
trendingTitle: 'Trend-Emotion',
trendingDescription: 'Diese Stimmung taucht gerade besonders oft auf.',
trendingCount: '{count} Fotos mit dieser Stimmung',
},
},
tasks: {
page: {
eyebrow: 'Aufgaben-Zentrale',
@@ -243,6 +304,37 @@ export const messages: Record<LocaleCode, NestedMessages> = {
emptyDescription: 'Sobald Fotos freigegeben sind, erscheinen sie hier.',
lightboxGuestFallback: 'Gast',
},
galleryPage: {
title: 'Galerie',
subtitle: 'Live-Impressionen deines Events',
loadingEvent: 'Event-Info wird geladen...',
eventNotFound: 'Event nicht gefunden.',
hero: {
label: 'Live-Galerie',
stats: '{photoCount} Fotos · {likeCount} ❤️ · {guestCount} Gäste online',
newPhotos: '{count} neue Fotos ansehen',
upload: 'Neues Foto hochladen',
eventFallback: 'Event',
},
loading: 'Lade…',
photo: {
justNow: 'Gerade eben',
anonymous: 'Gast',
alt: 'Foto {id}{suffix}',
altTaskSuffix: ' - {task}',
likeAria: 'Foto liken',
shareAria: 'Foto teilen',
},
filters: {
latest: 'Neueste',
popular: 'Beliebt',
mine: 'Meine',
photobooth: 'Fotobox',
},
badge: {
newPhotos: '{count} neue Fotos',
},
},
share: {
title: 'Geteiltes Foto',
defaultEvent: 'Ein besonderer Moment',
@@ -729,6 +821,67 @@ export const messages: Record<LocaleCode, NestedMessages> = {
days: '{count} days ago',
},
},
achievements: {
page: {
title: 'Achievements',
subtitle: 'Keep an eye on highlights, badges, and the most active guests.',
loadError: 'Achievements could not be loaded.',
retry: 'Try again',
buttons: {
personal: 'My achievements',
event: 'Event highlights',
feed: 'Live feed',
},
},
personal: {
greeting: 'Hi {name}!',
stats: '{photos} photos | {tasks} tasks | {likes} likes',
actions: {
upload: 'Upload photo',
tasks: 'Draw a task',
},
},
badges: {
title: 'Badges',
description: 'Your progress across available achievements.',
empty: 'No badges unlocked yet.',
},
leaderboard: {
description: 'Top 5 participants of this event',
uploadsTitle: 'Top uploads',
uploadsEmpty: 'No uploads yet once photos arrive you will see them here.',
likesTitle: 'Most liked guests',
likesEmpty: 'No likes yet motivate guests to like photos.',
guestFallback: 'Guest',
item: {
photos: '{count} photos',
likes: '{count} likes',
},
},
timeline: {
title: 'Timeline',
description: 'How the event gained momentum throughout the day.',
row: '{photos} photos | {guests} guests',
},
feed: {
title: 'Live feed',
description: 'The freshest moments from your event.',
empty: 'No uploads yet grab your camera and start!',
taskLabel: 'Task: {task}',
likesLabel: '{count} likes',
thumbnailAlt: 'Preview',
},
highlights: {
topTitle: 'Audience favorite',
topDescription: 'The photo with the most likes.',
noPreview: 'No preview image',
likesAmount: '{count} likes',
taskLabel: 'Task: {task}',
trendingTitle: 'Trending emotion',
trendingDescription: 'This mood appears most often right now.',
trendingCount: '{count} photos in this mood',
},
},
tasks: {
page: {
eyebrow: 'Mission hub',
@@ -788,6 +941,37 @@ export const messages: Record<LocaleCode, NestedMessages> = {
emptyDescription: 'Once photos are approved they will appear here.',
lightboxGuestFallback: 'Guest',
},
galleryPage: {
title: 'Gallery',
subtitle: 'Live impressions from your event',
loadingEvent: 'Loading event info…',
eventNotFound: 'Event not found.',
hero: {
label: 'Live gallery',
stats: '{photoCount} photos · {likeCount} ❤️ · {guestCount} guests online',
newPhotos: 'View {count} new photos',
upload: 'Upload new photo',
eventFallback: 'Event',
},
loading: 'Loading…',
photo: {
justNow: 'Just now',
anonymous: 'Guest',
alt: 'Photo {id}{suffix}',
altTaskSuffix: ' - {task}',
likeAria: 'Like photo',
shareAria: 'Share photo',
},
filters: {
latest: 'Newest',
popular: 'Popular',
mine: 'My photos',
photobooth: 'Photo booth',
},
badge: {
newPhotos: '{count} new photos',
},
},
share: {
title: 'Shared photo',
defaultEvent: 'A special moment',