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
+118 -2
View File
@@ -1390,5 +1390,121 @@
"Group Homepage": "Group Homepage",
"Habbopages URL": "Habbopages URL",
"URL Prefix": "URL Prefix",
"figament::resources.navigations.Monitoring": "Megfigyelés"
}
"figament::resources.navigations.Monitoring": "Megfigyelés",
"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"
}