Add multi-step radio wizard with Shoutcast/Icecast/AzureCast support and multi-language translations

- New 5-step RadioWizardController with session-based wizard flow
- Enhanced RadioStreamService with Shoutcast/Icecast/ AzureCast auto-detection
- Connection test functionality for stream, now-playing, and listeners
- Wizard views for all 5 steps with step indicator navigation
- All 21 language files updated with wizard translation keys (NL/EN + placeholders)
- Wizard link added to existing radio setup page
- Routes registered under /admin/radio/wizard/*
This commit is contained in:
root
2026-05-24 13:12:57 +02:00
parent 8c49a1138c
commit 5476dce882
31 changed files with 4298 additions and 43 deletions
+166 -1
View File
@@ -182,5 +182,170 @@
"commandocentrum.client": "Client",
"commandocentrum.renderer": "Renderer",
"commandocentrum.webroot_status": "Webroot",
"commandocentrum.rank": "Rank"
"commandocentrum.rank": "Rank",
"radio.title": "Radio",
"radio.music": "Music",
"radio.loading": "Loading...",
"radio.navigation_label": "Radio",
"radio.setup_page_title": "Radio Setup",
"radio.setup_page_subtitle": "Configure your radio system in one go",
"radio.setup.success_title": "Radio Installed!",
"radio.setup.success_body": "Radio system has been successfully installed and configured!",
"radio.setup.error_title": "Installation Failed",
"radio.setup.error_body": "An error occurred: :message",
"radio.setup.button_label": "Install Everything",
"radio.setup.modal_heading": "Install Radio?",
"radio.setup.modal_description": "This will configure all radio settings with default values.",
"radio.setup.modal_submit": "Yes, install!",
"radio.setup.tooltip": "Install the complete radio system",
"radio.setup_complete": "✅ Installation Complete!",
"radio.what_gets_configured": "What gets configured?",
"radio.radio_stream": "Radio Stream",
"radio.radio_stream_desc": "Set your stream URL with support for SHOUTcast, Icecast, AzureCast and other streaming platforms.",
"radio.points_system": "Points System",
"radio.points_system_desc": "Let users earn points by listening, requesting songs and participating in contests.",
"radio.community_features": "Community Features",
"radio.community_features_desc": "Shouts, song requests, DJ applications and more community interactions.",
"radio.dj_management": "DJ Management",
"radio.dj_management_desc": "DJ ranks, schedule, auto-detection and Sambroadcaster/Virtual DJ integration.",
"radio.monitoring": "Stream Monitoring",
"radio.monitoring_desc": "Monitor your stream uptime with real-time monitoring.",
"radio.display_options": "Display Options",
"radio.display_options_desc": "Widget, player styles, colors and custom CSS/JS.",
"radio.default_settings": "Default Settings",
"radio.radio_label": "Radio",
"radio.enabled": "Enabled",
"radio.points_label": "Points",
"radio.per_min": " per min",
"radio.daily_limit": "Daily limit",
"radio.shouts_label": "Shouts",
"radio.on": "On",
"radio.widget": "Widget",
"radio.global": "Global",
"radio.dj_apps": "DJ Applications",
"radio.open": "Open",
"radio.monitoring_label": "Monitoring",
"radio.contests_label": "Contests",
"radio.install_radio_system": "🚀 Install Radio System",
"radio.reset_settings": "Reset Settings",
"radio.reset_confirm": "Are you sure you want to reset all radio settings?",
"radio.go_to_radio_settings": "Go to Radio Settings",
"radio.open_wizard": "🎯 Open Radio Wizard",
"radio.wizard_desc": "Step-by-step wizard with connection test",
"radio.wizard.title": "Radio Installation Wizard",
"radio.wizard.step_short": "Step",
"radio.wizard.step_prefix": "Step",
"radio.wizard.of": "of",
"radio.wizard.next_step": "Next Step →",
"radio.wizard.previous_step": "← Previous Step",
"radio.wizard.back_to_setup": "Back to setup",
"radio.wizard.step1_label": "Platform",
"radio.wizard.step2_label": "Stream",
"radio.wizard.step3_label": "API",
"radio.wizard.step4_label": "Features",
"radio.wizard.step5_label": "Test",
"radio.wizard.step1_subtitle": "Choose your streaming platform",
"radio.wizard.step2_title": "Stream Configuration",
"radio.wizard.step3_title": "API Configuration",
"radio.wizard.step3_subtitle": "Now Playing & Listeners",
"radio.wizard.step4_title": "Configure Features",
"radio.wizard.step4_subtitle": "Choose which radio features to enable",
"radio.wizard.step5_title": "Test & Install",
"radio.wizard.step5_subtitle": "Check the connection and complete the installation",
"radio.wizard.platform_shoutcast": "SHOUTcast",
"radio.wizard.platform_shoutcast_desc": "For SHOUTcast servers. Auto-detection of now playing and listeners via stats endpoint.",
"radio.wizard.platform_icecast": "Icecast",
"radio.wizard.platform_icecast_desc": "For Icecast servers. Uses status-json.xsl for auto-detection.",
"radio.wizard.platform_azurecast": "AzureCast",
"radio.wizard.platform_azurecast_desc": "AzureCast hosting. Full API integration with now-playing, listeners and auto-configuration.",
"radio.wizard.platform_other": "Other",
"radio.wizard.platform_other_desc": "Another stream provider. Manual configuration of stream URL and API endpoints.",
"radio.wizard.shoutcast_info_title": "SHOUTcast",
"radio.wizard.shoutcast_info_desc": "Enter your SHOUTcast stream URL. The wizard will try to find the stats endpoint automatically.",
"radio.wizard.icecast_info_title": "Icecast",
"radio.wizard.icecast_info_desc": "Enter your Icecast stream URL. The wizard uses status-json.xsl for auto-detection.",
"radio.wizard.azurecast_info_title": "AzureCast",
"radio.wizard.azurecast_info_desc": "AzureCast stream URL + server configuration. The wizard configures everything via the AzureCast API.",
"radio.wizard.other_info_title": "Other Stream",
"radio.wizard.other_info_desc": "Enter your stream URL. You can manually configure API endpoints for now playing and listeners later.",
"radio.wizard.stream_url_label": "Stream URL *",
"radio.wizard.stream_url_hint": "The direct URL to your audio stream (MP3, AAC, OGG, etc.)",
"radio.wizard.stream_name_label": "Stream Name",
"radio.wizard.stream_name_placeholder": "My Radio",
"radio.wizard.stream_name_hint": "A name for your radio stream (optional)",
"radio.wizard.azurecast_section": "AzureCast Server Configuration",
"radio.wizard.azurecast_base_url_label": "AzureCast Base URL",
"radio.wizard.azurecast_base_url_hint": "The base URL of your AzureCast server. Auto-detected if left empty.",
"radio.wizard.azurecast_station_id_label": "Station ID",
"radio.wizard.azurecast_station_id_hint": "The station ID in AzureCast (default: 1)",
"radio.wizard.enable_now_playing": "Enable Now Playing",
"radio.wizard.now_playing_api_label": "Now Playing API URL",
"radio.wizard.now_playing_api_hint": "API endpoint that returns the current song. Usually auto-detected.",
"radio.wizard.enable_listeners": "Enable Listeners Counter",
"radio.wizard.listeners_api_label": "Listeners API URL",
"radio.wizard.listeners_api_hint": "API endpoint that returns the listener count.",
"radio.wizard.enable_current_dj": "Show Current DJ",
"radio.wizard.detected": "detected!",
"radio.wizard.detected_desc": "API endpoints were automatically found and filled in.",
"radio.wizard.not_detected": "No automatic detection",
"radio.wizard.not_detected_desc": "Fill in the API URLs manually or skip this step.",
"radio.wizard.section_community": "Community Features",
"radio.wizard.feature_shouts": "Shouts",
"radio.wizard.feature_shouts_desc": "Leave messages",
"radio.wizard.feature_applications": "DJ Applications",
"radio.wizard.feature_applications_desc": "Apply as DJ",
"radio.wizard.feature_requests": "Song Requests",
"radio.wizard.feature_requests_desc": "Request songs",
"radio.wizard.section_display": "Display",
"radio.wizard.feature_widget": "Radio Widget",
"radio.wizard.feature_widget_desc": "Mini player on the site",
"radio.wizard.feature_widget_global": "Widget Everywhere",
"radio.wizard.feature_widget_global_desc": "Show on all pages",
"radio.wizard.widget_position_label": "Widget Position",
"radio.wizard.position_bottom_right": "Bottom Right",
"radio.wizard.position_bottom_left": "Bottom Left",
"radio.wizard.position_top_right": "Top Right",
"radio.wizard.position_top_left": "Top Left",
"radio.wizard.section_gamification": "Gamification",
"radio.wizard.feature_points": "Points System",
"radio.wizard.feature_points_desc": "Earn points by listening",
"radio.wizard.feature_contests": "Contests",
"radio.wizard.feature_contests_desc": "Organize competitions",
"radio.wizard.feature_giveaways": "Giveaways",
"radio.wizard.feature_giveaways_desc": "Give away prizes",
"radio.wizard.section_integrations": "Integrations",
"radio.wizard.feature_discord": "Discord Notifications",
"radio.wizard.feature_discord_desc": "Notifications when DJ goes live / song changes",
"radio.wizard.discord_webhook_label": "Discord Webhook URL",
"radio.wizard.discord_webhook_hint": "Create a webhook in your Discord server channel.",
"radio.wizard.test_title": "Test Connection",
"radio.wizard.test_desc": "Click Test Connection to check if your stream and APIs are reachable.",
"radio.wizard.test_loading": "Testing connection...",
"radio.wizard.test_prompt": "Click the button to test the connection.",
"radio.wizard.test_button": "Test Connection",
"radio.wizard.test_retry": "Test Again",
"radio.wizard.settings_overview": "Settings Overview",
"radio.wizard.settings_overview_desc": "These are the settings that will be saved:",
"radio.wizard.install_confirm": "Are you sure you want to install the radio with these settings?",
"radio.wizard.install_button": "Install Radio",
"radio.wizard.test_result_stream": "Stream Connection",
"radio.wizard.test_result_now_playing": "Now Playing",
"radio.wizard.test_result_listeners": "Listeners",
"radio.wizard.status_success": "Success",
"radio.wizard.status_warning": "Warning",
"radio.wizard.status_error": "Error",
"radio.wizard.status_skipped": "Skipped",
"radio.wizard.status_untested": "Not tested",
"radio.wizard.content_type": "Content-Type",
"radio.wizard.http_status": "HTTP Status",
"radio.wizard.song": "Song",
"radio.wizard.artist": "Artist",
"radio.wizard.listeners": "Listeners",
"radio.wizard.api_url": "API URL",
"radio.wizard.test_stream_ok": "Stream is reachable! You can install the radio.",
"radio.wizard.test_stream_fail": "Stream is not reachable. Check the URL and try again.",
"radio.wizard.test_not_run": "Not tested yet.",
"radio.wizard.test_connection_fail": "Could not run test: ",
"radio.wizard.error": "Error",
"radio.wizard.unknown_error": "Unknown error"
}