[ 'platform' => 'Platform', 'library' => 'Library', 'content' => 'Content', 'platform_management' => 'Platform Management', 'billing' => 'Billing & Finance', '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' => 'Credits', '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', ], ], '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 credits', '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 credits balance', 'features' => 'Features', 'total_revenue' => 'Total revenue', 'active_reseller_package' => 'Active reseller package', 'remaining_events' => 'Remaining events', 'package_expires_at' => 'Package expires at', 'is_active' => 'Active', 'is_suspended' => 'Suspended', ], 'actions' => [ 'adjust_credits' => 'Adjust credits', 'adjust_credits_delta' => 'Credit delta (positive/negative)', 'adjust_credits_delta_hint' => 'Positive values grant credits, negative values deduct them.', 'adjust_credits_reason' => 'Internal note', 'adjust_credits_success_title' => 'Credits updated', 'adjust_credits_success_body' => 'Credits changed by :delta. New balance: :balance.', ], ], 'purchase_history' => [ 'fields' => [ 'tenant' => 'Tenant', 'package' => 'Package', 'credits' => 'Credits', '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.', ], 'oauth' => [ 'fields' => [ 'name' => 'Name', 'client_id' => 'Client ID', 'client_secret' => 'Client secret', 'tenant' => 'Tenant', 'redirect_uris' => 'Redirect URIs', 'scopes' => 'Scopes', 'is_active' => 'Active', 'description' => 'Description', 'updated_at' => 'Last updated', ], 'hints' => [ 'client_secret' => 'Leave blank to keep the current secret or for PKCE/public clients.', 'redirect_uris' => 'One URL per line. Must exactly match the callback on the client.', ], 'filters' => [ 'is_active' => 'Status', 'any' => 'All', 'active' => 'Active', 'inactive' => 'Inactive', ], 'actions' => [ 'regenerate_secret' => 'Regenerate secret', ], 'notifications' => [ 'secret_regenerated_title' => 'New secret generated', 'secret_regenerated_body' => 'Store the new secret securely: :secret', 'created_title' => 'OAuth client created', 'updated_title' => 'OAuth client saved', ], ], 'refresh_tokens' => [ 'menu' => 'Refresh tokens', 'single' => 'Refresh token', 'fields' => [ 'tenant' => 'Tenant', 'client' => 'Client', 'status' => 'Status', 'revoked_reason' => 'Revoked reason', 'created_at' => 'Created', 'last_used_at' => 'Last used', 'expires_at' => 'Expires at', 'ip_address' => 'IP address', 'user_agent' => 'User agent', 'note' => 'Operator note', ], 'status' => [ 'active' => 'Active', 'revoked' => 'Revoked', 'expired' => 'Expired', ], 'filters' => [ 'status' => 'Status', 'tenant' => 'Tenant', ], 'actions' => [ 'revoke' => 'Revoke token', ], 'reasons' => [ 'manual' => 'Manual', 'operator' => 'Operator action', 'rotated' => 'Rotated (auto)', 'ip_mismatch' => 'IP mismatch', 'expired' => 'Expired', 'invalid_secret' => 'Invalid secret attempt', 'tenant_missing' => 'Tenant removed', 'max_active_limit' => 'Exceeded active token limit', ], 'sections' => [ 'details' => 'Token details', 'security' => 'Security context', ], 'audit' => [ 'heading' => 'Audit log', 'event' => 'Event', 'events' => [ 'issued' => 'Issued', 'refresh_attempt' => 'Refresh attempted', 'refreshed' => 'Refresh succeeded', 'client_mismatch' => 'Client mismatch', 'invalid_secret' => 'Invalid secret', 'ip_mismatch' => 'IP mismatch', 'expired' => 'Expired', 'revoked' => 'Revoked', 'rotated' => 'Rotated', 'tenant_missing' => 'Tenant missing', 'max_active_limit' => 'Pruned (active limit)', ], 'performed_by' => 'Actor', 'ip_address' => 'IP address', 'context' => 'Context', 'performed_at' => 'Timestamp', 'empty' => [ 'heading' => 'No audit entries yet', 'description' => 'Token activity will appear here once it is used.', ], ], 'notifications' => [ 'revoked' => 'Refresh token revoked.', ], ], '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', ], ], ];