feat: implement AI styling foundation and billing scope rework
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled

This commit is contained in:
Codex Agent
2026-02-06 20:01:58 +01:00
parent df00deb0df
commit 36bed12ff9
80 changed files with 8944 additions and 49 deletions

View File

@@ -85,15 +85,28 @@
"lemonsqueezy_voided": "The PayPal payment was voided."
},
"sections": {
"currentEvent": {
"title": "Current event",
"hint": "This section shows what is active for your currently selected event.",
"empty": "Select an event to view event-specific packages and add-ons.",
"eventLabel": "Selected event",
"packageActive": "Active for this event",
"packageExpires": "Gallery active until {{date}}",
"noPackage": "No package is currently assigned to this event.",
"addonsLabel": "Add-ons for this event",
"noAddons": "No add-ons purchased for this event.",
"eventAddonSource": "Source: event package"
},
"invoices": {
"title": "Invoices & payments",
"hint": "Review transactions and download receipts.",
"empty": "No payments found."
},
"addOns": {
"title": "Add-ons",
"hint": "Track extra photo, guest, or time bundles per event.",
"empty": "No add-ons booked."
"title": "Add-on purchase history",
"hint": "History of all add-on purchases across all events. An entry here is not automatically active for the currently selected event.",
"empty": "No add-ons booked.",
"otherEventNotice": "Purchased for another event"
},
"overview": {
"title": "Package overview",
@@ -125,12 +138,13 @@
}
},
"packages": {
"title": "Packages",
"hint": "Active package, limits, and history at a glance.",
"title": "Package history (all events)",
"hint": "All purchased packages across all events.",
"description": "Overview of active and past packages.",
"empty": "No packages purchased yet.",
"card": {
"statusActive": "Active",
"statusActiveTenant": "Currently active",
"statusInactive": "Inactive",
"used": "Events used",
"available": "Remaining",
@@ -2394,6 +2408,7 @@
"photo_likes_enabled": "Photo likes",
"event_checklist": "Event checklist",
"advanced_analytics": "Advanced analytics",
"ai_styling": "AI styling",
"branding_allowed": "Branding",
"watermark_allowed": "Watermarks",
"watermark_base": "Fotospiel watermark",
@@ -2588,7 +2603,47 @@
"saveFailed": "Automation settings could not be saved."
},
"emptyModeration": "No uploads match this filter.",
"emptyLive": "No photos waiting for Live Show."
"emptyLive": "No photos waiting for Live Show.",
"aiAddon": {
"title": "AI Magic Edits",
"body": "AI styling is hidden until this event is entitled. Unlock it via add-on or include it with Premium.",
"buyAction": "Buy AI styling add-on",
"upgradeAction": "View Premium package"
},
"aiSettings": {
"title": "AI Styling Controls",
"subtitle": "Enable AI edits per event, configure allowed presets, and monitor usage/failures.",
"loadFailed": "AI settings could not be loaded.",
"saveFailed": "AI settings could not be saved.",
"saved": "AI settings saved.",
"enabled": {
"label": "Enable AI edits for this event",
"hint": "When disabled, guest and admin AI requests are blocked for this event."
},
"customPrompt": {
"label": "Allow custom prompts",
"hint": "If disabled, users must choose one of the allowed presets."
},
"policyMessage": {
"label": "Policy message",
"hint": "Shown to users when AI edits are disabled or a style is blocked.",
"placeholder": "Optional message for guests/admins"
},
"styles": {
"label": "Allowed AI styles",
"hint": "No selection means all active styles are allowed.",
"empty": "No active AI styles found.",
"clear": "Allow all styles"
},
"usage": {
"title": "Usage overview",
"total": "Total",
"succeeded": "Succeeded",
"failed": "Failed",
"lastRequest": "Last request: {{date}}"
},
"save": "Save AI settings"
}
},
"liveShowSettings": {
"title": "Live Show settings",
@@ -3003,6 +3058,7 @@
},
"features": {
"advanced_analytics": "Advanced Analytics",
"ai_styling": "AI Styling",
"basic_uploads": "Basic uploads",
"custom_branding": "Custom Branding",
"custom_tasks": "Custom photo tasks",