[ 'platform' => 'Platform', 'library' => 'Library', 'content' => 'Content', 'daily_ops' => 'Daily Ops', 'weekly_ops' => 'Weekly Ops', 'rare_admin' => 'Rare / Admin', 'platform_management' => 'Platform Management', 'events' => 'Events', 'tenants' => 'Tenants', 'curation' => 'Curation', 'event_management' => 'Event Management', 'tasks_emotions' => 'Tasks & Emotions', 'content_library' => 'Content & Library', 'billing' => 'Billing & Finance', 'commercial' => 'Commercial', 'infrastructure' => 'Infrastructure', 'storage' => 'Storage', 'feedback_support' => 'Feedback & Support', 'branding' => 'Branding', 'security' => 'Security', ], 'common' => [ 'key' => 'Key', 'value' => 'Value', 'locale' => 'Locale', 'german' => 'German', 'english' => 'English', 'import' => 'Import', 'import_csv' => 'Import CSV', 'download_csv_template' => 'Download CSV Template', 'csv_file' => 'CSV file', 'close' => 'Close', 'hash' => '#', 'slug' => 'Slug', 'event' => 'Event', 'tenant' => 'Tenant', 'uploads' => 'Uploads', 'uploads_today' => 'Uploads today', 'thumb' => 'Thumb', 'likes' => 'Likes', 'emotion' => 'Emotion', 'event_type' => 'Event Type', 'last_activity' => 'Last activity', 'credits' => 'Event bundle', 'settings' => 'Settings', 'join' => 'Join', 'unnamed' => 'Unnamed', 'from' => 'From', 'until' => 'Until', ], 'photos' => [ 'fields' => [ 'event' => 'Event', 'photo' => 'Photo', 'is_featured' => 'Is Featured', 'metadata' => 'Metadata', 'likes' => 'Likes', ], 'actions' => [ 'feature' => 'Feature', 'unfeature' => 'Unfeature', 'feature_selected' => 'Feature selected', 'unfeature_selected' => 'Unfeature selected', ], 'table' => [ 'photo' => 'Photo', 'event' => 'Event', 'likes' => 'Likes', ], ], 'moderation' => [ 'navigation' => [ 'label' => 'Moderation queue', ], 'sections' => [ 'photo' => 'Photo', 'moderation' => 'Moderation', ], 'fields' => [ 'photo' => 'Photo', 'event' => 'Event', 'tenant' => 'Tenant', 'uploader' => 'Uploader', 'uploaded_at' => 'Uploaded', 'ingest_source' => 'Ingest source', 'status' => 'Status', 'moderation_notes' => 'Moderation notes', 'moderated_by' => 'Moderated by', 'moderated_at' => 'Moderated at', 'security_scan_status' => 'Security scan', 'security_scan_message' => 'Security scan message', 'security_scanned_at' => 'Security scanned at', ], 'table' => [ 'photo' => 'Photo', 'event' => 'Event', 'tenant' => 'Tenant', 'uploader' => 'Uploader', 'status' => 'Status', 'security_scan' => 'Security scan', 'ingest_source' => 'Source', 'uploaded_at' => 'Uploaded', 'moderated_by' => 'Moderator', 'moderated_at' => 'Moderated', ], 'filters' => [ 'status' => 'Status', 'ingest_source' => 'Ingest source', 'security_scan_status' => 'Security scan', 'uploaded_at' => 'Uploaded at', ], 'actions' => [ 'approve' => 'Approve', 'reject' => 'Reject', 'hide' => 'Hide', 'approve_selected' => 'Approve selected', 'reject_selected' => 'Reject selected', 'hide_selected' => 'Hide selected', ], 'status' => [ 'pending' => 'Pending', 'approved' => 'Approved', 'rejected' => 'Rejected', 'hidden' => 'Hidden', ], 'ingest_sources' => [ 'guest_pwa' => 'Guest PWA', 'tenant_admin' => 'Tenant admin', 'photobooth' => 'Photobooth', 'sparkbooth' => 'Sparkbooth', 'unknown' => 'Unknown', ], 'security_scan' => [ 'pending' => 'Pending', 'clean' => 'Clean', 'infected' => 'Infected', 'skipped' => 'Skipped', 'stripped' => 'Stripped', 'error' => 'Error', ], ], 'feedback' => [ 'navigation' => [ 'label' => 'Feedback queue', ], 'sections' => [ 'moderation' => 'Moderation', ], 'fields' => [ 'status' => 'Status', 'moderation_notes' => 'Moderation notes', 'moderated_by' => 'Moderated by', 'moderated_at' => 'Moderated at', ], 'table' => [ 'status' => 'Status', 'moderated_by' => 'Moderator', 'moderated_at' => 'Moderated', ], 'filters' => [ 'status' => 'Status', ], 'actions' => [ 'resolve' => 'Resolve', 'hide' => 'Hide', 'delete' => 'Delete', 'resolve_selected' => 'Resolve selected', 'hide_selected' => 'Hide selected', 'delete_selected' => 'Delete selected', ], 'status' => [ 'pending' => 'Pending', 'resolved' => 'Resolved', 'hidden' => 'Hidden', 'deleted' => 'Deleted', ], ], 'paddle_health' => [ 'navigation' => [ 'label' => 'Paddle health', ], ], 'integrations_health' => [ 'navigation' => [ 'label' => 'Integrations health', ], 'status' => [ 'healthy' => 'Healthy', 'pending' => 'Pending', 'degraded' => 'Degraded', 'unconfigured' => 'Unconfigured', 'unknown' => 'Unknown', ], 'heading' => 'Integrations health', 'help' => 'Operational snapshot of Paddle/RevenueCat webhooks, queue backlog, and recent failures.', 'configured' => 'Configured', 'unconfigured' => 'Unconfigured', 'last_received' => 'Last received', 'last_processed' => 'Last processed', 'processing_lag' => 'Processing lag', 'pending_events' => 'Pending events', 'recent_failures' => 'Failures (24h)', 'queue_backlog' => 'Queue backlog', 'failed_jobs' => 'Failed jobs', 'last_error' => 'Last error', 'empty' => 'No integration health data available yet.', ], 'guest_policy' => [ 'navigation' => [ 'label' => 'Guest policy', ], 'sections' => [ 'toggles' => 'Guest toggles', 'rate_limits' => 'Rate limits', 'retention' => 'Retention defaults', ], 'fields' => [ 'guest_downloads_enabled' => 'Allow guest downloads', 'guest_sharing_enabled' => 'Allow guest sharing', 'guest_upload_visibility' => 'Guest upload visibility', 'upload_visibility_review' => 'Review required', 'upload_visibility_immediate' => 'Immediate publish', 'per_device_upload_limit' => 'Uploads per device (per event)', 'join_token_failure_limit' => 'Join token failure limit', 'join_token_failure_decay_minutes' => 'Join token failure decay (minutes)', 'join_token_access_limit' => 'Join token access limit', 'join_token_access_decay_minutes' => 'Join token access decay (minutes)', 'join_token_download_limit' => 'Join token download limit', 'join_token_download_decay_minutes' => 'Join token download decay (minutes)', 'join_token_ttl_hours' => 'Join token default TTL (hours)', 'share_link_ttl_hours' => 'Share link TTL (hours)', 'guest_notification_ttl_hours' => 'Guest notification default TTL (hours)', ], 'help' => [ 'zero_disables' => '0 disables throttling.', 'join_token_ttl' => '0 keeps tokens active until revoked or limited.', 'notification_ttl' => 'Leave empty to keep notifications until explicitly expired.', ], 'actions' => [ 'save' => 'Save changes', ], 'notifications' => [ 'saved' => 'Guest policy updated.', ], ], 'ops_health' => [ 'navigation' => [ 'label' => 'Ops health', ], 'heading' => 'Ops health', 'subheading' => 'Storage and queue snapshots for the upload pipeline.', 'help' => 'Snapshots are generated by scheduled commands: storage:monitor and storage:check-upload-queues.', 'snapshot_age' => 'Updated :age', 'snapshot_missing' => 'Snapshot missing', 'pipeline' => [ 'label' => 'Upload pipeline', 'total' => 'Total assets', 'pending' => 'Pending assets', 'failed' => 'Failed assets', 'hot' => 'Hot assets', 'archived' => 'Archived assets', 'alerts' => 'Alerts', 'hot_hint' => 'Hot: :count', 'archived_hint' => 'Archived: :count', 'no_snapshot' => 'Snapshot missing', 'no_snapshot_desc' => 'Run storage:monitor to generate a snapshot.', ], 'queue' => [ 'heading' => 'Queue health', 'description' => 'Upload queue sizes, failed jobs, and stalled assets.', 'connection' => 'Connection', 'snapshot' => 'Snapshot', 'stalled_assets' => 'Pending assets > :minutes min', 'no_snapshot' => 'No queue snapshot available. Run storage:check-upload-queues.', 'no_queues' => 'No queues configured.', 'alerts_heading' => 'Alerts', 'alerts_empty' => 'No active alerts.', 'thresholds' => 'Thresholds', 'size' => 'Size', 'failed' => 'Failed', 'queue' => 'Queue', 'utilization' => 'Utilization', 'utilization_of' => ':percent% of :label', 'utilization_na' => 'N/A', ], 'alert_types' => [ 'size' => 'Queue size above threshold (:size)', 'failed_jobs' => 'Failed jobs detected (:failed)', 'pending_assets' => ':count assets pending for more than :minutes min', ], 'severity' => [ 'ok' => 'OK', 'warning' => 'Warning', 'critical' => 'Critical', 'unknown' => 'Unknown', 'error' => 'Error', 'unavailable' => 'Unavailable', ], ], 'join_token_analytics' => [ 'navigation' => [ 'label' => 'Join token analytics', ], 'heading' => 'Join token analytics', 'subheading' => 'Monitor guest access and join-token activity across events.', 'filters' => [ 'range' => 'Time range', 'event' => 'Event', 'event_placeholder' => 'All events', 'range_options' => [ '2h' => 'Last 2 hours', '6h' => 'Last 6 hours', '12h' => 'Last 12 hours', '24h' => 'Last 24 hours', '7d' => 'Last 7 days', 'event_day' => 'Event day', ], ], 'stats' => [ 'success' => 'Success', 'failures' => 'Failures', 'rate_limited' => 'Rate limited', 'uploads' => 'Uploads', 'failure_ratio' => 'Failure ratio', 'no_data' => '—', ], 'trend' => [ 'heading' => 'Join-token activity', 'success' => 'Success', 'failures' => 'Failures', 'rate_limited' => 'Rate limited', 'uploads' => 'Uploads', ], 'table' => [ 'heading' => 'Top tokens', 'token' => 'Token', 'event' => 'Event', 'tenant' => 'Tenant', 'success' => 'Success', 'failures' => 'Failures', 'rate_limited' => 'Rate limited', 'uploads' => 'Uploads', 'last_seen' => 'Last seen', ], ], 'events' => [ 'fields' => [ 'tenant' => 'Tenant', 'name' => 'Event Name', 'slug' => 'Slug', 'date' => 'Event Date', 'type' => 'Event Type', 'default_locale' => 'Default Locale', 'is_active' => 'Is Active', 'settings' => 'Settings', ], 'table' => [ 'tenant' => 'Tenant', 'join' => 'Join', 'join_tokens_total' => 'Invitations: :count', 'join_tokens_missing' => 'No invitations created yet', ], 'actions' => [ 'toggle_active' => 'Toggle Active', 'join_link_qr' => 'Invitation Link & QR', 'download_photos' => 'Download all photos', ], 'modal' => [ 'join_link_heading' => 'Event Invitation Link', ], 'messages' => [ 'join_link_copied' => 'Invitation link copied', ], 'join_link' => [ 'event_label' => 'Event', 'slug_label' => 'Slug: :slug', 'link_label' => 'Invitation Link', 'copy_link' => 'Copy', 'no_tokens' => 'No invitations yet. Create one in the admin app to share your event.', 'token_default' => 'Invitation #:id', 'token_usage' => 'Usage: :usage / :limit', 'token_active' => 'Active', 'token_inactive' => 'Inactive', 'layouts_heading' => 'Printable layouts', 'layouts_fallback' => 'Open layout overview', 'token_expiry' => 'Expires at :date', 'deprecated_notice' => 'Direct access via slug :slug has been retired. Share the invitations below or manage QR layouts in the admin app.', 'open_admin' => 'Open admin app', ], 'analytics' => [ 'success_total' => 'Successful checks', 'failure_total' => 'Failures', 'rate_limited_total' => 'Rate limited', 'recent_24h' => 'Requests (24h)', 'last_seen_at' => 'Last activity: :date', ], ], 'legal_pages' => [ 'fields' => [ 'slug' => 'Slug', 'title_localized' => 'Title (de/en)', 'content_localization' => 'Content Localization', 'content_de' => 'Content (German)', 'content_en' => 'Content (English)', 'is_published' => 'Is Published', 'effective_from' => 'Effective From', 'version' => 'Version', ], ], 'emotions' => [ 'sections' => [ 'content_localization' => 'Content Localization', ], 'fields' => [ 'name_de' => 'Name (German)', 'description_de' => 'Description (German)', 'name_en' => 'Name (English)', 'description_en' => 'Description (English)', 'icon_emoji' => 'Icon/Emoji', 'color' => 'Color', 'sort_order' => 'Sort Order', 'is_active' => 'Is Active', 'event_types' => 'Event Types', ], 'table' => [ 'name' => 'Name', 'icon' => 'Icon', 'color' => 'Color', 'is_active' => 'Active', 'sort_order' => 'Sort Order', ], 'import' => [ 'heading' => 'Import Emotions (CSV)', ], ], 'event_types' => [ 'sections' => [ 'name_localization' => 'Name Localization', ], 'fields' => [ 'name_de' => 'Name (German)', 'name_en' => 'Name (English)', 'slug' => 'Slug', 'icon' => 'Icon', 'settings' => 'Settings', 'emotions' => 'Emotions', ], ], 'tasks' => [ 'menu' => 'Tasks', 'fields' => [ 'event_type_optional' => 'Event Type (optional)', 'content_localization' => 'Content Localization', 'title_de' => 'Title (German)', 'description_de' => 'Description (German)', 'example_de' => 'Example Text (German)', 'title_en' => 'Title (English)', 'description_en' => 'Description (English)', 'example_en' => 'Example Text (English)', 'emotion' => 'Emotion', 'event_type' => 'Event Type', 'difficulty' => [ 'label' => 'Difficulty', 'easy' => 'Easy', 'medium' => 'Medium', 'hard' => 'Hard', ], ], 'table' => [ 'title' => 'Title', 'is_active' => 'Active', 'sort_order' => 'Sort Order', ], 'import' => [ 'heading' => 'Import Tasks (CSV)', ], ], 'widgets' => [ 'events_active_today' => [ 'heading' => 'Events active today', ], 'recent_uploads' => [ 'heading' => 'Recent uploads', ], 'top_tenants_by_uploads' => [ 'heading' => 'Top tenants by uploads', ], 'uploads_per_day' => [ 'heading' => 'Uploads (14 days)', ], 'credit_alerts' => [ 'low_balance_label' => 'Tenants with low event bundle', 'low_balance_desc' => 'May require follow-up', 'monthly_revenue_label' => 'Revenue (month)', 'monthly_revenue_desc' => 'Current month (:month)', 'active_subscriptions_label' => 'Active subscriptions', 'active_subscriptions_desc' => 'Recurring packages in good standing', ], 'revenue_trend' => [ 'heading' => 'Monthly revenue', 'series' => 'Revenue (€)', ], 'top_tenants_by_revenue' => [ 'heading' => 'Top tenants by revenue', 'total' => 'Total (€)', 'count' => 'Purchases', ], ], 'notifications' => [ 'file_not_found' => 'File not found', 'imported_rows' => 'Imported :count rows', 'failed_count' => ':count failed', ], 'tenants' => [ 'fields' => [ 'name' => 'Tenant name', 'slug' => 'Slug', 'contact_email' => 'Contact email', 'event_credits_balance' => 'Event bundle', 'features' => 'Features', 'total_revenue' => 'Total revenue', 'active_reseller_package' => 'Active partner / agency package', 'remaining_events' => 'Remaining events', 'package_expires_at' => 'Package expires at', 'is_active' => 'Active', 'is_suspended' => 'Suspended', 'pending_deletion_at' => 'Deletion scheduled for', 'deletion_warning_sent_at' => 'Deletion warning sent at', 'anonymized_at' => 'Anonymized at', 'subscription_expires_at' => 'Subscription expires at', 'grace_period_ends_at' => 'Grace period ends at', 'max_photos_per_event' => 'Max photos per event', 'max_storage_mb' => 'Max storage (MB)', 'storage_used_mb' => 'Storage used', 'storage_remaining_mb' => 'Storage remaining', 'storage_usage_percent' => 'Storage usage', 'owner' => 'Owner', 'access_status' => 'Access status', ], 'sections' => [ 'profile' => 'Profile', 'lifecycle' => 'Lifecycle', 'limits' => 'Limits', 'timeline' => 'Audit timeline', ], 'actions' => [ 'adjust_credits' => 'Adjust bundle', 'adjust_credits_delta' => 'Event bundle delta (positive/negative)', 'adjust_credits_delta_hint' => 'Positive values add bundle, negative values deduct it.', 'adjust_credits_reason' => 'Internal note', 'adjust_credits_success_title' => 'Bundle updated', 'adjust_credits_success_body' => 'Bundle changed by :delta. New balance: :balance.', 'lifecycle' => 'Lifecycle', 'activate' => 'Activate', 'deactivate' => 'Deactivate', 'suspend' => 'Suspend', 'unsuspend' => 'Unsuspend', 'schedule_deletion' => 'Schedule deletion', 'schedule_deletion_success' => 'Deletion scheduled', 'cancel_deletion' => 'Cancel deletion', 'cancel_deletion_success' => 'Deletion schedule cleared', 'anonymize_now' => 'Anonymize now', 'anonymize_success' => 'Anonymization queued', 'send_warning' => 'Send warning email', 'send_warning_missing_title' => 'No contact email available', 'send_warning_missing_body' => 'No email address is available to send the warning.', 'update_limits' => 'Update limits', 'update_subscription_expires_at' => 'Update subscription expiry', 'set_grace_period' => 'Set grace period', 'clear_grace_period' => 'Clear grace period', 'lifecycle_controls' => 'Lifecycle controls', 'note' => 'Internal note', ], 'pages' => [ 'overview' => 'Overview', 'lifecycle' => 'Lifecycle', 'edit' => 'Edit', ], 'status' => [ 'active' => 'Active', 'inactive' => 'Inactive', 'suspended' => 'Suspended', 'expired' => 'Expired', 'grace' => 'Grace period', 'anonymized' => 'Anonymized', ], 'limits' => [ 'unlimited' => 'Unlimited', ], 'timeline' => [ 'title' => 'Event', 'details' => 'Details', 'status' => 'Status', 'occurred_at' => 'Occurred at', 'created' => 'Tenant created', 'created_details' => 'Tenant created in the system.', 'last_activity' => 'Last activity', 'last_activity_details' => 'Latest recorded tenant activity.', 'deletion_warning' => 'Deletion warning sent', 'deletion_warning_details' => 'Retention warning was sent.', 'deletion_scheduled' => 'Deletion scheduled', 'deletion_scheduled_details' => 'Deletion is scheduled.', 'anonymized' => 'Tenant anonymized', 'anonymized_details' => 'Tenant data anonymized.', 'notification_sent' => 'Notification sent', 'notification_failed' => 'Notification failed', 'grace_period_until' => 'Grace until :date', 'by' => 'By :name', 'events' => [ 'activated' => 'Tenant activated', 'deactivated' => 'Tenant deactivated', 'suspended' => 'Tenant suspended', 'unsuspended' => 'Tenant unsuspended', 'deletion_scheduled' => 'Deletion scheduled', 'deletion_cancelled' => 'Deletion cancelled', 'anonymize_requested' => 'Anonymization requested', 'grace_period_set' => 'Grace period set', 'grace_period_cleared' => 'Grace period cleared', 'limits_updated' => 'Limits updated', 'subscription_expires_at_updated' => 'Subscription expiry updated', ], 'tone' => [ 'success' => 'Success', 'warning' => 'Warning', 'danger' => 'Failed', 'info' => 'Info', 'muted' => 'Muted', ], ], ], 'purchase_history' => [ 'fields' => [ 'tenant' => 'Tenant', 'package' => 'Package', 'credits' => 'Event bundle', 'price' => 'Price', 'currency' => 'Currency', 'platform' => 'Platform', 'transaction_id' => 'Transaction ID', 'purchased_at' => 'Purchased at', ], 'filters' => [ 'purchased_at' => 'Date range', 'platform' => 'Platform', 'currency' => 'Currency', 'tenant' => 'Tenant', ], 'actions' => [ 'export' => 'Export', ], 'platforms' => [ 'ios' => 'iOS', 'android' => 'Android', 'web' => 'Web', 'manual' => 'Manual', ], 'export_success' => 'Export ready. :count rows exported.', ], 'data_exports' => [ 'navigation' => [ 'label' => 'Data exports', ], 'sections' => [ 'request' => 'Export request', ], 'fields' => [ 'id' => '#', 'scope' => 'Scope', 'tenant' => 'Tenant', 'event' => 'Event', 'include_media' => 'Include raw media', 'status' => 'Status', 'size' => 'Size', 'created_at' => 'Requested', 'expires_at' => 'Expires', ], 'help' => [ 'include_media' => 'Include original media files in the export archive.', ], 'scope' => [ 'user' => 'User', 'tenant' => 'Tenant', 'event' => 'Event', ], 'status' => [ 'pending' => 'Pending', 'processing' => 'Processing', 'ready' => 'Ready', 'failed' => 'Failed', 'canceled' => 'Canceled', ], 'actions' => [ 'request' => 'Request export', 'download' => 'Download', 'retry' => 'Retry', 'cancel' => 'Cancel', ], ], 'retention_overrides' => [ 'navigation' => [ 'label' => 'Retention overrides', ], 'sections' => [ 'override' => 'Retention hold', 'status' => 'Status', ], 'fields' => [ 'id' => '#', 'scope' => 'Scope', 'tenant' => 'Tenant', 'event' => 'Event', 'reason' => 'Reason', 'note' => 'Note', 'created_by' => 'Created by', 'created_at' => 'Created', 'released_by' => 'Released by', 'released_at' => 'Released at', 'status' => 'Status', ], 'scope' => [ 'tenant' => 'Tenant', 'event' => 'Event', ], 'status' => [ 'active' => 'Active', 'released' => 'Released', ], 'actions' => [ 'request' => 'Add hold', 'release' => 'Release hold', ], ], 'shell' => [ 'tenant_admin_title' => 'Tenant Admin', ], 'errors' => [ 'forbidden' => [ 'title' => 'Access denied', 'message' => 'You do not have permission to access this area of the admin panel.', 'hint' => 'Please verify that your tenant subscription is active or contact support if you believe this is a mistake.', 'cta' => 'Return to start page', ], ], ];