states, and pulls data from the authenticated /api/v1/tenant/packages endpoint.
(resources/js/admin/pages/EventFormPage.tsx, resources/js/admin/api.ts)
- Harden tenant-admin auth flow: prevent PKCE state loss, scope out StrictMode double-processing, add SPA
routes for /event-admin/login and /event-admin/logout, and tighten token/session clearing semantics (resources/js/admin/auth/{context,tokens}.tsx, resources/js/admin/pages/{AuthCallbackPage,LogoutPage}.tsx,
resources/js/admin/router.tsx, routes/web.php)
466 lines
20 KiB
JSON
466 lines
20 KiB
JSON
{
|
||
"home": {
|
||
"title": "Home - Fotospiel",
|
||
"hero_title": "Fotospiel",
|
||
"hero_description": "Collect guest photos for events with QR codes. Our secure PWA platform for guests and organizers – simple, mobile, and privacy-compliant. Better than competitors, loved by thousands.",
|
||
"cta_explore": "Discover Packages",
|
||
"cta_explore_highlight": "Get started now",
|
||
"hero_image_alt": "Event photos with QR code",
|
||
"how_title": "How it works",
|
||
"step1_title": "Choose Package",
|
||
"step1_desc": "Choose the right package for your event.",
|
||
"step2_title": "Share QR Code",
|
||
"step2_desc": "Share the QR code with your guests.",
|
||
"step3_title": "Collect Photos",
|
||
"step3_desc": "Guests upload photos – secure and easy.",
|
||
"features_title": "Why Fotospiel?",
|
||
"feature1_title": "Secure & Privacy Compliant",
|
||
"feature1_desc": "GDPR compliant, no PII storage.",
|
||
"feature2_title": "Mobile & PWA",
|
||
"feature2_desc": "Works offline, installable like an app.",
|
||
"feature3_title": "Easy to Use",
|
||
"feature3_desc": "Intuitive UI for guests and organizers.",
|
||
"packages_title": "Our Packages",
|
||
"view_details": "View Details",
|
||
"all_packages": "View All Packages",
|
||
"contact_title": "Contact",
|
||
"name_label": "Name",
|
||
"email_label": "Email",
|
||
"message_label": "Message",
|
||
"sending": "Sending...",
|
||
"send": "Send",
|
||
"testimonials_title": "What our customers say",
|
||
"testimonial1": "Great for weddings! Simple and secure.",
|
||
"testimonial2": "Best app for event photos.",
|
||
"testimonial3": "Fast and user-friendly.",
|
||
"faq_title": "Frequently Asked Questions",
|
||
"faq1_q": "Is it free?",
|
||
"faq1_a": "Yes, there is a free package for small events.",
|
||
"faq2_q": "How does the QR code work?",
|
||
"faq2_a": "Guests scan and upload photos – easy!"
|
||
},
|
||
"packages": {
|
||
"title": "Our Packages",
|
||
"features": "Features",
|
||
"subscription_annual": "Annual Subscription",
|
||
"auto_renew": "auto-renew",
|
||
"cancel_anytime": "cancel anytime",
|
||
"trial_start": "Free Trial for :days days",
|
||
"reseller_benefits": "Benefits for Resellers",
|
||
"unlimited_events": "Unlimited Events",
|
||
"priority_support": "Priority Support",
|
||
"cancel_link": "Cancel Subscription: :link",
|
||
"hero_title": "Discover our flexible Packages",
|
||
"hero_description": "From free entry to premium features: Tailor your event package to your needs. Simple, secure, and scalable.",
|
||
"cta_explore": "Discover Packages",
|
||
"cta_explore_highlight": "Explore top packages",
|
||
"tab_endcustomer": "End Customers",
|
||
"tab_reseller": "Resellers & Agencies",
|
||
"section_endcustomer": "Packages for End Customers (One-time purchase per event)",
|
||
"section_reseller": "Packages for Resellers (Annual Subscription)",
|
||
"free": "Free",
|
||
"one_time": "One-time purchase",
|
||
"subscription": "Subscription",
|
||
"year": "Year",
|
||
"max_photos": "Photos",
|
||
"max_guests": "Guests",
|
||
"gallery_days": "Gallery Days",
|
||
"max_events_year": "Events/Year",
|
||
"buy_now": "Buy Now",
|
||
"subscribe_now": "Subscribe Now",
|
||
"register_buy": "Register and Buy",
|
||
"register_subscribe": "Register and Subscribe",
|
||
"faq_title": "Frequently Asked Questions about Packages",
|
||
"faq_q1": "What is a Package?",
|
||
"faq_a1": "A Package defines limits and features for your event, e.g. number of photos and gallery duration.",
|
||
"faq_q2": "Can I upgrade?",
|
||
"faq_a2": "Yes, choose a higher package when creating the event or upgrade later.",
|
||
"faq_q3": "What happens when it expires?",
|
||
"faq_a3": "The gallery remains readable, but uploads are blocked. Simply extend.",
|
||
"faq_q4": "Payment secure?",
|
||
"faq_a4": "Yes, via Stripe or PayPal – secure and GDPR compliant.",
|
||
"final_cta": "Ready for your next event?",
|
||
"contact_us": "Contact Us",
|
||
"feature_live_slideshow": "Live Slideshow",
|
||
"feature_analytics": "Analytics",
|
||
"feature_watermark": "Watermark",
|
||
"feature_branding": "Branding",
|
||
"feature_support": "Support",
|
||
"feature_basic_uploads": "Basic Uploads",
|
||
"feature_unlimited_sharing": "Unlimited Sharing",
|
||
"feature_no_watermark": "No Watermark",
|
||
"feature_custom_tasks": "Custom Tasks",
|
||
"feature_advanced_analytics": "Advanced Analytics",
|
||
"feature_priority_support": "Priority Support",
|
||
"feature_limited_sharing": "Limited Sharing",
|
||
"feature_no_branding": "No Branding",
|
||
"feature_0": "Basic Feature",
|
||
"feature_reseller_dashboard": "Reseller Dashboard",
|
||
"feature_custom_branding": "Custom Branding",
|
||
"feature_advanced_reporting": "Advanced Reporting",
|
||
"badge_most_popular": "Most Popular",
|
||
"badge_best_value": "Best Value",
|
||
"badge_starter": "Perfect Starter",
|
||
"billing_per_event": "per event",
|
||
"billing_per_year": "per year",
|
||
"more_features": "+{{count}} more features",
|
||
"feature_overview": "Feature overview",
|
||
"order_hint": "Launch instantly – secure Stripe or PayPal checkout, no hidden fees.",
|
||
"features_label": "Features",
|
||
"feature_highlights": "Feature Highlights",
|
||
"more_details_tab": "More Details",
|
||
"quick_facts": "Quick Facts",
|
||
"quick_facts_hint": "Your at-a-glance snapshot of core limits.",
|
||
"more_details_link": "See even more details",
|
||
"badge_deep_dive": "Deep Dive",
|
||
"breakdown_label": "At-a-glance",
|
||
"breakdown_label_hint": "Dive deeper into how the package is structured.",
|
||
"limits_label": "Limits & Capacity",
|
||
"limits_label_hint": "Understand the exact limits for planning and approvals.",
|
||
"for_endcustomers": "For End Customers",
|
||
"for_resellers": "For Resellers",
|
||
"details_show": "Show Details",
|
||
"comparison_title": "Compare Packages",
|
||
"price": "Price",
|
||
"max_photos_label": "Max. Photos",
|
||
"max_guests_label": "Max. Guests",
|
||
"gallery_days_label": "Gallery Days",
|
||
"watermark_label": "Watermark",
|
||
"no_watermark": "No Watermark",
|
||
"custom_branding": "Custom Branding",
|
||
"max_tenants": "Max. Tenants",
|
||
"max_events": "Max. Events/Year",
|
||
"faq_free": "What is the Free Package?",
|
||
"faq_upgrade": "Can I upgrade?",
|
||
"faq_reseller": "What for Resellers?",
|
||
"faq_payment": "Payment secure?",
|
||
"testimonials": {
|
||
"anna": "Fotospiel made our wedding perfect! Guests could easily share photos, and the gallery was a hit.",
|
||
"max": "As an event organizer, I love the analytics and easy branding. Great for corporate events!",
|
||
"lisa": "Free package for birthdays – simple and secure. No app hassle!"
|
||
},
|
||
"what_customers_say": "What our customers say",
|
||
"close": "Close",
|
||
"to_order": "Order Now",
|
||
"details": "Details",
|
||
"customer_opinions": "Customer Opinions",
|
||
"errors": {
|
||
"select_package": "Please select a package."
|
||
},
|
||
"currency": {
|
||
"euro": "€"
|
||
}
|
||
},
|
||
"blog": {
|
||
"title": "Fotospiel - Blog",
|
||
"hero_title": "Fotospiel Blog",
|
||
"hero_description": "Tips, news, and guides for perfect event photos with QR codes, PWA, and more. Stay informed!",
|
||
"hero_cta": "More about Fotospiel",
|
||
"posts_title": "Latest Blog Posts",
|
||
"by": "By",
|
||
"team": "Fotospiel Team",
|
||
"published_at": "Published on",
|
||
"read_more": "Read More",
|
||
"back": "Back to Blog",
|
||
"empty": "No posts available yet. Stay tuned!",
|
||
"our_blog": "Our Blog",
|
||
"latest_posts": "Latest Posts",
|
||
"no_posts": "No posts available.",
|
||
"read_more_link": "Read More",
|
||
"date_format": "Published on :date",
|
||
"post": {
|
||
"alt": "Post Image"
|
||
}
|
||
},
|
||
"kontakt": {
|
||
"title": "Contact - Fotospiel",
|
||
"description": "Have questions? Write to us!",
|
||
"name": "Name",
|
||
"email": "Email",
|
||
"message": "Message",
|
||
"sending": "Sending...",
|
||
"send": "Send",
|
||
"back_home": "Back to Home",
|
||
"success": "Thanks! We will get back to you soon."
|
||
},
|
||
"occasions": {
|
||
"title": "Fotospiel for :type",
|
||
"hero_title": "Fotospiel for :type",
|
||
"hero_description": "Collect unforgettable photos from your guests with QR codes. Perfect for :type – simple, mobile, and privacy-compliant.",
|
||
"cta": "Choose Package",
|
||
"weddings": {
|
||
"title": "Weddings with Fotospiel",
|
||
"description": "Capture romantic moments: Guests share photos via QR, choose emotions like 'Romantic' or 'Joyful'. Better than traditional photo booths.",
|
||
"benefits_title": "Benefits for Weddings",
|
||
"benefit1": "QR Code for Guests: Easy sharing without app download.",
|
||
"benefit2": "Emotion Filter: Categorize photos (e.g. 'Dance', 'Kiss').",
|
||
"benefit3": "Private Gallery: Only approved photos visible.",
|
||
"benefit4": "Download: High-res for album.",
|
||
"image_alt": "Wedding photos"
|
||
},
|
||
"birthdays": {
|
||
"title": "Celebrate Birthdays",
|
||
"description": "Let friends and family share spontaneous photos. QR on the cake – fun guaranteed!",
|
||
"benefits_title": "Benefits for Birthdays",
|
||
"benefit1": "Quick Uploads: Camera or gallery.",
|
||
"benefit2": "Likes & Shares: Highlight popular moments.",
|
||
"benefit3": "Offline-capable: PWA works without internet.",
|
||
"benefit4": "Anonymous: No registration required.",
|
||
"image_alt": "Birthday photos"
|
||
},
|
||
"corporate": {
|
||
"title": "Corporate Events Professional",
|
||
"description": "Networking and team-building: Collect photos centrally, share highlights internally.",
|
||
"benefits_title": "Benefits for Corporate Events",
|
||
"benefit1": "QR at Booths: Guests photograph themselves.",
|
||
"benefit2": "Categories: 'Team', 'Network', 'Presentation'.",
|
||
"benefit3": "Export: For social media or intranet.",
|
||
"benefit4": "GDPR-secure: No PII stored.",
|
||
"image_alt": "Corporate event photos"
|
||
},
|
||
"family": {
|
||
"title": "Family Celebrations",
|
||
"description": "From baptisms to anniversaries: Collect memories from all relatives.",
|
||
"benefits_title": "Benefits for Family Celebrations",
|
||
"benefit1": "Easy for all ages: Large font, touch-friendly.",
|
||
"benefit2": "Emotions: 'Family', 'Happiness', 'Unity'.",
|
||
"benefit3": "Share: Via link or QR for after-party.",
|
||
"benefit4": "Unlimited: In premium plan.",
|
||
"image_alt": "Family photos"
|
||
},
|
||
"not_found": "Event type not found.",
|
||
"hochzeit_title": "Wedding – Perfect Guest Photos with QR",
|
||
"hochzeit_desc": "Make your wedding unforgettable with Fotospiel. Guests share photos easily via QR code – secure, private, and in real-time. From ceremony to party, all moments centrally collected.",
|
||
"hochzeit_feature1": "Live Slideshow for Guests",
|
||
"hochzeit_feature2": "Emotion-based Photo Filters",
|
||
"hochzeit_feature3": "Unlimited Gallery for 30 Days",
|
||
"hochzeit_cta": "Choose Wedding Package",
|
||
"geburtstag_title": "Birthday – Celebrate with Shared Memories",
|
||
"geburtstag_desc": "Celebrate birthdays with Fotospiel! QR code for guests to upload photos – from kids' to adult parties. Easy to share, like, and download.",
|
||
"geburtstag_feature1": "Free Package for Small Parties",
|
||
"geburtstag_feature2": "Quick Uploads via PWA",
|
||
"geburtstag_feature3": "Private and Privacy Compliant",
|
||
"geburtstag_cta": "Discover Birthday Package",
|
||
"firmenevent_title": "Corporate Event – Team Events and Conferences",
|
||
"firmenevent_desc": "For corporate events, team buildings, and conferences: Fotospiel collects all photos centrally via QR. Branding, analytics, and secure gallery for your company.",
|
||
"firmenevent_feature1": "Custom Branding for Company Logo",
|
||
"firmenevent_feature2": "Advanced Analytics",
|
||
"firmenevent_feature3": "Priority Support",
|
||
"firmenevent_cta": "Request Corporate Package"
|
||
},
|
||
"success": {
|
||
"title": "Success",
|
||
"verify_email": "Verify Email",
|
||
"check_email": "Check your email for the verification link.",
|
||
"redirecting": "Redirecting to Admin Area...",
|
||
"complete_purchase": "Complete Purchase",
|
||
"login_to_continue": "Log in to continue.",
|
||
"loading": "Loading...",
|
||
"email_verify_title": "Verify Email",
|
||
"email_verify_desc": "Please check your email and click the verification link.",
|
||
"resend_verification": "Resend Verification",
|
||
"already_registered": "Already registered? Log in",
|
||
"purchase_complete_title": "Complete Purchase",
|
||
"purchase_complete_desc": "Log in to continue.",
|
||
"login": "Log In",
|
||
"no_account": "No Account? Register",
|
||
"manage_subscription": "Manage Subscription",
|
||
"stripe_dashboard": "Stripe Dashboard",
|
||
"paypal_dashboard": "PayPal Dashboard",
|
||
"trial_activated": "Trial activated for 14 days!"
|
||
},
|
||
"payment": {
|
||
"title": "Payment",
|
||
"card_details": "Card Details",
|
||
"stripe": "Credit Card",
|
||
"paypal": "PayPal",
|
||
"submit_stripe": "Pay with Card (:price)",
|
||
"submit_paypal": "Pay with PayPal (:price)",
|
||
"loading_stripe": "Loading Stripe...",
|
||
"paypal_description": "Secure payment with PayPal",
|
||
"switch_to_card": "Switch to Credit Card",
|
||
"paypal_create_error": "PayPal order creation failed",
|
||
"paypal_capture_error": "PayPal capture failed",
|
||
"paypal_error": "PayPal payment failed",
|
||
"stripe_error": "Stripe payment failed",
|
||
"confirm_error": "Confirmation failed",
|
||
"complete_error": "Payment could not be completed"
|
||
},
|
||
"blog_show": {
|
||
"title_suffix": " - Fotospiel Blog",
|
||
"by_author": "By",
|
||
"published_on": "Published on",
|
||
"back_to_blog": "Back to Blog"
|
||
},
|
||
"nav": {
|
||
"home": "Home",
|
||
"how_it_works": "How it Works",
|
||
"features": "Features",
|
||
"occasions": "Occasions",
|
||
"blog": "Blog",
|
||
"packages": "Packages",
|
||
"contact": "Contact",
|
||
"discover_packages": "Discover Packages",
|
||
"privacy": "Privacy",
|
||
"impressum": "Imprint"
|
||
},
|
||
"header": {
|
||
"home": "Home",
|
||
"packages": "Packages",
|
||
"blog": "Blog",
|
||
"contact": "Contact",
|
||
"login": "Login",
|
||
"register": "Register"
|
||
},
|
||
"footer": {
|
||
"company": "Fotospiel GmbH",
|
||
"rights_reserved": "All Rights Reserved"
|
||
},
|
||
"register": {
|
||
"free": "Free"
|
||
},
|
||
"currency": {
|
||
"euro": "€"
|
||
},
|
||
"meta": {
|
||
"title": "Fotospiel - Collect Guest Photos for Events with QR Codes",
|
||
"description": "Collect guest photos for events with QR codes. Our secure PWA platform for guests and organizers – simple, mobile, and privacy-compliant."
|
||
},
|
||
"common": {
|
||
"unlimited": "Unlimited",
|
||
"required": "*",
|
||
"loading": "Loading...",
|
||
"included": "Included",
|
||
"star": "Star",
|
||
"date": {
|
||
"format": "M d, Y"
|
||
},
|
||
"pagination": {
|
||
"previous": "Previous",
|
||
"next": "Next"
|
||
},
|
||
"contact": {
|
||
"errors": {
|
||
"name": "Name is required.",
|
||
"email": "Email is required.",
|
||
"message": "Message is required."
|
||
}
|
||
},
|
||
"testimonials": {
|
||
"anna": {
|
||
"name": "Anna M."
|
||
},
|
||
"max": {
|
||
"name": "Max S."
|
||
},
|
||
"lisa": {
|
||
"name": "Lisa K."
|
||
}
|
||
}
|
||
},
|
||
"checkout": {
|
||
"title": "Checkout",
|
||
"subtitle": "Secure Checkout Process",
|
||
"back": "Back",
|
||
"next": "Next",
|
||
"cancel": "Cancel",
|
||
"package_step": {
|
||
"title": "Select Package",
|
||
"subtitle": "Selection and Comparison",
|
||
"description": "Choose the right package for your needs",
|
||
"no_package_selected": "No package selected. Please choose a package from the overview.",
|
||
"alternatives_title": "Alternative Packages",
|
||
"no_alternatives": "No further packages in this category available.",
|
||
"next_to_account": "Next to Account",
|
||
"loading": "Loading..."
|
||
},
|
||
"auth_step": {
|
||
"title": "Account",
|
||
"subtitle": "Login or Register",
|
||
"description": "Create an account or log in to continue with your purchase.",
|
||
"already_logged_in_title": "Already Logged In",
|
||
"already_logged_in_desc": "You are already logged in as {email}.",
|
||
"next_to_payment": "Next to Payment",
|
||
"switch_to_register": "Register",
|
||
"switch_to_login": "Login",
|
||
"continue_with_google": "Continue with Google",
|
||
"google_success_toast": "Signed in with Google.",
|
||
"google_error_title": "Google login failed",
|
||
"google_missing_package": "Please choose a package before using Google login.",
|
||
"google_missing_email": "We could not retrieve your Google email address.",
|
||
"google_error_fallback": "We couldn't complete the Google login. Please try again."
|
||
},
|
||
"payment_step": {
|
||
"title": "Payment",
|
||
"subtitle": "Secure Payment",
|
||
"description": "Complete your purchase securely with your chosen payment method.",
|
||
"free_package_title": "Free Package",
|
||
"free_package_desc": "This package is free. We activate it directly after confirmation.",
|
||
"activate_package": "Activate Package",
|
||
"loading_payment": "Payment data is loading...",
|
||
"secure_payment_desc": "Secure payment with credit card, debit card or SEPA direct debit.",
|
||
"secure_paypal_desc": "Pay securely with PayPal.",
|
||
"payment_failed": "Payment failed. ",
|
||
"error_card": "Card error occurred.",
|
||
"error_validation": "Input data is invalid.",
|
||
"error_connection": "Connection error. Please check your internet connection.",
|
||
"error_server": "Server error. Please try again later.",
|
||
"error_auth": "Authentication error. Please reload the page.",
|
||
"error_unknown": "Unknown error occurred.",
|
||
"processing": "Payment is being processed. Please wait...",
|
||
"needs_method": "Payment method required. Please check card details.",
|
||
"needs_confirm": "Payment needs confirmation.",
|
||
"unexpected_status": "Unexpected payment status: {status}",
|
||
"processing_btn": "Processing...",
|
||
"pay_now": "Pay Now (${price})",
|
||
"stripe_not_loaded": "Stripe is not initialized. Please reload the page.",
|
||
"network_error": "Network error loading payment data",
|
||
"payment_intent_error": "Error loading payment data",
|
||
"paypal_order_error": "Could not create the PayPal order. Please try again.",
|
||
"paypal_capture_error": "PayPal capture failed. Please try again.",
|
||
"paypal_error": "PayPal reported an error.",
|
||
"paypal_cancelled": "You cancelled the PayPal payment.",
|
||
"paypal_missing_plan": "Missing PayPal plan configuration for this package. Please choose another payment method.",
|
||
"auth_required": "Please log in to continue to payment.",
|
||
"status_loading": "Preparing secure payment data…",
|
||
"status_ready": "Payment form ready. Enter your details to continue.",
|
||
"status_processing": "Processing payment with {{provider}}…",
|
||
"status_success": "Payment confirmed. Finalising your order…",
|
||
"status_info_title": "Payment status",
|
||
"status_error_title": "Payment failed",
|
||
"status_success_title": "Payment completed",
|
||
"status_retry": "Retry",
|
||
"method_stripe": "Credit Card (Stripe)",
|
||
"method_paypal": "PayPal"
|
||
},
|
||
"confirmation_step": {
|
||
"title": "Confirmation",
|
||
"subtitle": "All Done!",
|
||
"description": "Your package is activated. Check your email for details.",
|
||
"welcome": "Welcome to FotoSpiel",
|
||
"package_activated": "Your package '{name}' is activated.",
|
||
"email_sent": "We have sent you a confirmation email.",
|
||
"open_profile": "Open Profile",
|
||
"to_admin": "To Admin Area"
|
||
},
|
||
"confirmation": {
|
||
"welcome": "Welcome to FotoSpiel",
|
||
"package_activated": "Your package '{name}' is activated.",
|
||
"email_sent": "We have sent you a confirmation email.",
|
||
"open_profile": "Open Profile",
|
||
"to_admin": "To Admin Area"
|
||
},
|
||
"auth": {
|
||
"already_logged_in": "You are already logged in as {email}.",
|
||
"switch_to_register": "Register",
|
||
"switch_to_login": "Login",
|
||
"continue_with_google": "Continue with Google",
|
||
"google_success_toast": "Signed in with Google.",
|
||
"google_error_title": "Google login failed",
|
||
"google_missing_package": "Please choose a package before using Google login.",
|
||
"google_missing_email": "We could not retrieve your Google email address.",
|
||
"google_error_fallback": "We couldn't complete the Google login. Please try again."
|
||
}
|
||
}
|
||
}
|