diff --git a/app/Http/Controllers/Admin/RadioWizardController.php b/app/Http/Controllers/Admin/RadioWizardController.php new file mode 100755 index 0000000..270312f --- /dev/null +++ b/app/Http/Controllers/Admin/RadioWizardController.php @@ -0,0 +1,414 @@ +get(self::SESSION_KEY); + if (! $data) { + session()->forget(self::SESSION_KEY); + } + + return view('admin.radio.wizard.step-1', [ + 'step' => 1, + 'selectedPlatform' => $data['platform'] ?? null, + ]); + } + + public function processStep1(Request $request): RedirectResponse + { + $validated = $request->validate([ + 'platform' => ['required', 'string', 'in:shoutcast,icecast,azurecast,other'], + ]); + + session()->put(self::SESSION_KEY . '.platform', $validated['platform']); + + return redirect()->route('admin.radio.wizard.step', ['step' => 2]); + } + + public function step(int $step): View|RedirectResponse + { + $data = session()->get(self::SESSION_KEY); + + if (! $data && $step > 1) { + return redirect()->route('admin.radio.wizard'); + } + + return match ($step) { + 2 => $this->step2($data), + 3 => $this->step3($data), + 4 => $this->step4($data), + 5 => $this->step5($data), + default => redirect()->route('admin.radio.wizard'), + }; + } + + private function step2(array $data): View + { + $platform = $data['platform'] ?? 'other'; + $platformLabels = [ + 'shoutcast' => 'SHOUTcast', + 'icecast' => 'Icecast', + 'azurecast' => 'AzureCast', + 'other' => 'Anders', + ]; + + return view('admin.radio.wizard.step-2', [ + 'step' => 2, + 'platform' => $platform, + 'platformLabel' => $platformLabels[$platform] ?? 'Onbekend', + 'streamUrl' => session()->get(self::SESSION_KEY . '.stream_url', ''), + 'streamName' => session()->get(self::SESSION_KEY . '.stream_name', ''), + 'azurecastBaseUrl' => session()->get(self::SESSION_KEY . '.azurecast_base_url', ''), + 'azurecastStationId' => session()->get(self::SESSION_KEY . '.azurecast_station_id', '1'), + ]); + } + + public function processStep2(Request $request): RedirectResponse + { + $platform = session()->get(self::SESSION_KEY . '.platform', 'other'); + + $rules = [ + 'stream_url' => ['required', 'string', 'max:500'], + 'stream_name' => ['nullable', 'string', 'max:100'], + ]; + + if ($platform === 'azurecast') { + $rules['azurecast_base_url'] = ['nullable', 'string', 'max:500']; + $rules['azurecast_station_id'] = ['nullable', 'integer', 'min:1']; + } + + $validated = $request->validate($rules); + + session()->put(self::SESSION_KEY . '.stream_url', $validated['stream_url']); + session()->put(self::SESSION_KEY . '.stream_name', $validated['stream_name'] ?? 'Mijn Radio'); + + if ($platform === 'azurecast') { + session()->put(self::SESSION_KEY . '.azurecast_base_url', $validated['azurecast_base_url'] ?? ''); + session()->put(self::SESSION_KEY . '.azurecast_station_id', $validated['azurecast_station_id'] ?? '1'); + } + + return redirect()->route('admin.radio.wizard.step', ['step' => 3]); + } + + private function step3(array $data): View + { + $platform = $data['platform'] ?? 'other'; + $streamUrl = $data['stream_url'] ?? ''; + + $autoDetected = null; + if (! empty($streamUrl)) { + $autoDetected = $this->streamService->detectStreamType($streamUrl); + } + + return view('admin.radio.wizard.step-3', [ + 'step' => 3, + 'platform' => $platform, + 'autoDetected' => $autoDetected, + 'nowPlayingApi' => session()->get(self::SESSION_KEY . '.now_playing_api', $autoDetected['now_playing_api'] ?? ''), + 'listenersApi' => session()->get(self::SESSION_KEY . '.listeners_api', $autoDetected['listeners_api'] ?? ''), + 'enableNowPlaying' => session()->get(self::SESSION_KEY . '.enable_now_playing', true), + 'enableListeners' => session()->get(self::SESSION_KEY . '.enable_listeners', true), + 'enableCurrentDj' => session()->get(self::SESSION_KEY . '.enable_current_dj', true), + ]); + } + + public function processStep3(Request $request): RedirectResponse + { + $validated = $request->validate([ + 'now_playing_api' => ['nullable', 'string', 'max:500'], + 'listeners_api' => ['nullable', 'string', 'max:500'], + 'enable_now_playing' => ['nullable', 'boolean'], + 'enable_listeners' => ['nullable', 'boolean'], + 'enable_current_dj' => ['nullable', 'boolean'], + ]); + + session()->put(self::SESSION_KEY . '.now_playing_api', $validated['now_playing_api'] ?? ''); + session()->put(self::SESSION_KEY . '.listeners_api', $validated['listeners_api'] ?? ''); + session()->put(self::SESSION_KEY . '.enable_now_playing', (bool) ($validated['enable_now_playing'] ?? false)); + session()->put(self::SESSION_KEY . '.enable_listeners', (bool) ($validated['enable_listeners'] ?? false)); + session()->put(self::SESSION_KEY . '.enable_current_dj', (bool) ($validated['enable_current_dj'] ?? false)); + + return redirect()->route('admin.radio.wizard.step', ['step' => 4]); + } + + private function step4(array $data): View + { + return view('admin.radio.wizard.step-4', [ + 'step' => 4, + 'enableShouts' => session()->get(self::SESSION_KEY . '.enable_shouts', true), + 'enableApplications' => session()->get(self::SESSION_KEY . '.enable_applications', true), + 'enableWidget' => session()->get(self::SESSION_KEY . '.enable_widget', true), + 'enableWidgetGlobally' => session()->get(self::SESSION_KEY . '.enable_widget_globally', true), + 'enablePoints' => session()->get(self::SESSION_KEY . '.enable_points', true), + 'enableRequests' => session()->get(self::SESSION_KEY . '.enable_requests', true), + 'enableContests' => session()->get(self::SESSION_KEY . '.enable_contests', true), + 'enableGiveaways' => session()->get(self::SESSION_KEY . '.enable_giveaways', false), + 'enableDiscord' => session()->get(self::SESSION_KEY . '.enable_discord', false), + 'discordWebhook' => session()->get(self::SESSION_KEY . '.discord_webhook', ''), + 'widgetPosition' => session()->get(self::SESSION_KEY . '.widget_position', 'bottom-right'), + ]); + } + + public function processStep4(Request $request): RedirectResponse + { + $validated = $request->validate([ + 'enable_shouts' => ['nullable', 'boolean'], + 'enable_applications' => ['nullable', 'boolean'], + 'enable_widget' => ['nullable', 'boolean'], + 'enable_widget_globally' => ['nullable', 'boolean'], + 'enable_points' => ['nullable', 'boolean'], + 'enable_requests' => ['nullable', 'boolean'], + 'enable_contests' => ['nullable', 'boolean'], + 'enable_giveaways' => ['nullable', 'boolean'], + 'enable_discord' => ['nullable', 'boolean'], + 'discord_webhook' => ['nullable', 'string', 'max:500'], + 'widget_position' => ['nullable', 'string', 'in:bottom-right,bottom-left,top-right,top-left'], + ]); + + session()->put(self::SESSION_KEY . '.enable_shouts', (bool) ($validated['enable_shouts'] ?? false)); + session()->put(self::SESSION_KEY . '.enable_applications', (bool) ($validated['enable_applications'] ?? false)); + session()->put(self::SESSION_KEY . '.enable_widget', (bool) ($validated['enable_widget'] ?? false)); + session()->put(self::SESSION_KEY . '.enable_widget_globally', (bool) ($validated['enable_widget_globally'] ?? false)); + session()->put(self::SESSION_KEY . '.enable_points', (bool) ($validated['enable_points'] ?? false)); + session()->put(self::SESSION_KEY . '.enable_requests', (bool) ($validated['enable_requests'] ?? false)); + session()->put(self::SESSION_KEY . '.enable_contests', (bool) ($validated['enable_contests'] ?? false)); + session()->put(self::SESSION_KEY . '.enable_giveaways', (bool) ($validated['enable_giveaways'] ?? false)); + session()->put(self::SESSION_KEY . '.enable_discord', (bool) ($validated['enable_discord'] ?? false)); + session()->put(self::SESSION_KEY . '.discord_webhook', $validated['discord_webhook'] ?? ''); + session()->put(self::SESSION_KEY . '.widget_position', $validated['widget_position'] ?? 'bottom-right'); + + return redirect()->route('admin.radio.wizard.step', ['step' => 5]); + } + + private function step5(array $data): View + { + $platform = $data['platform'] ?? 'other'; + $streamUrl = $data['stream_url'] ?? ''; + + $platformLabels = [ + 'shoutcast' => 'SHOUTcast', + 'icecast' => 'Icecast', + 'azurecast' => 'AzureCast', + 'other' => 'Anders', + ]; + + $testResults = null; + + if (! empty($streamUrl)) { + $testResults = $this->streamService->testStreamConnection( + $streamUrl, + $data['now_playing_api'] ?? null, + $data['listeners_api'] ?? null, + ); + } + + $settingsList = $this->buildSettingsList($data); + + return view('admin.radio.wizard.step-5', [ + 'step' => 5, + 'platform' => $platform, + 'platformLabel' => $platformLabels[$platform] ?? 'Onbekend', + 'data' => $data, + 'testResults' => $testResults, + 'settingsList' => $settingsList, + ]); + } + + public function runTest(): JsonResponse + { + $data = session()->get(self::SESSION_KEY); + + if (! $data || empty($data['stream_url'])) { + return response()->json([ + 'success' => false, + 'error' => 'Geen stream URL gevonden. Start de wizard opnieuw.', + ]); + } + + $testResults = $this->streamService->testStreamConnection( + $data['stream_url'], + $data['now_playing_api'] ?? null, + $data['listeners_api'] ?? null, + ); + + return response()->json([ + 'success' => true, + 'results' => $testResults, + ]); + } + + public function complete(): RedirectResponse + { + $data = session()->get(self::SESSION_KEY); + + if (! $data) { + return redirect()->route('admin.radio.wizard') + ->with('error', 'Geen wizard data gevonden. Start opnieuw.'); + } + + try { + $this->saveAllSettings($data); + $this->createDefaultRanks(); + + Artisan::call('config:clear'); + Artisan::call('cache:clear'); + + session()->forget(self::SESSION_KEY); + + return redirect()->route('admin.radio.setup') + ->with('success', 'Radio systeem is succesvol geïnstalleerd en geconfigureerd!'); + } catch (\Exception $e) { + return redirect()->route('admin.radio.wizard.step', ['step' => 5]) + ->with('error', 'Fout tijdens opslaan: ' . $e->getMessage()); + } + } + + private function saveAllSettings(array $data): void + { + $platform = $data['platform'] ?? 'other'; + + $settings = [ + 'radio_enabled' => '1', + 'radio_stream_url' => $data['stream_url'] ?? '', + 'radio_stream_name' => $data['stream_name'] ?? 'Mijn Radio', + 'radio_style' => 'dark', + 'radio_auto_play' => '0', + 'radio_stream_platform' => $platform, + 'radio_now_playing_enabled' => ($data['enable_now_playing'] ?? true) ? '1' : '0', + 'radio_listeners_enabled' => ($data['enable_listeners'] ?? true) ? '1' : '0', + 'radio_show_current_dj' => ($data['enable_current_dj'] ?? true) ? '1' : '0', + 'radio_shouts_enabled' => ($data['enable_shouts'] ?? true) ? '1' : '0', + 'radio_applications_enabled' => ($data['enable_applications'] ?? true) ? '1' : '0', + 'radio_widget_enabled' => ($data['enable_widget'] ?? true) ? '1' : '0', + 'radio_widget_show_globally' => ($data['enable_widget_globally'] ?? true) ? '1' : '0', + 'radio_widget_position' => $data['widget_position'] ?? 'bottom-right', + 'radio_auto_dj_detection' => '1', + 'radio_show_song_history' => '1', + 'radio_show_schedule_preview' => '1', + 'radio_word_filter_enabled' => '1', + ]; + + if ($platform === 'azurecast') { + $settings['radio_azurecast_base_url'] = $data['azurecast_base_url'] ?? ''; + $settings['radio_azurecast_station_id'] = $data['azurecast_station_id'] ?? '1'; + } + + if (! empty($data['now_playing_api'])) { + $settings['radio_now_playing_api_url'] = $data['now_playing_api']; + } + + if (! empty($data['listeners_api'])) { + $settings['radio_listeners_api_url'] = $data['listeners_api']; + } + + if ($data['enable_points'] ?? true) { + $settings['points_enabled'] = '1'; + $settings['points_per_minute'] = '2'; + $settings['max_points_per_day'] = '100'; + $settings['points_for_request'] = '5'; + $settings['points_for_vote'] = '2'; + $settings['points_for_giveaway_win'] = '50'; + $settings['points_for_contest_win'] = '100'; + } + + if ($data['enable_requests'] ?? true) { + $settings['radio_request_form_enabled'] = '1'; + } + + if ($data['enable_contests'] ?? true) { + $settings['radio_contests_enabled'] = '1'; + } + + if ($data['enable_giveaways'] ?? false) { + $settings['radio_giveaways_enabled'] = '1'; + } + + if ($data['enable_discord'] ?? false && ! empty($data['discord_webhook'])) { + $settings['radio_discord_enabled'] = '1'; + $settings['radio_discord_webhook_url'] = $data['discord_webhook']; + $settings['radio_discord_dj_live'] = '1'; + $settings['radio_discord_song_changes'] = '1'; + } + + foreach ($settings as $key => $value) { + WebsiteSetting::updateOrCreate( + ['key' => $key], + ['value' => (string) $value, 'comment' => 'Radio wizard configuratie'], + ); + } + } + + private function createDefaultRanks(): void + { + $ranks = [ + ['name' => 'Trainee DJ', 'level' => 1, 'is_active' => true, 'description' => 'Beginnende DJ'], + ['name' => 'Junior DJ', 'level' => 2, 'is_active' => true, 'description' => 'Ervaren DJ'], + ['name' => 'Senior DJ', 'level' => 3, 'is_active' => true, 'description' => 'Professionele DJ'], + ['name' => 'Head DJ', 'level' => 4, 'is_active' => true, 'description' => 'Hoofd DJ'], + ['name' => 'Radio Manager', 'level' => 5, 'is_active' => true, 'description' => 'Radio Manager'], + ]; + + foreach ($ranks as $rank) { + RadioRank::updateOrCreate( + ['name' => $rank['name']], + $rank, + ); + } + } + + private function buildSettingsList(array $data): array + { + $list = []; + $list['Stream URL'] = $data['stream_url'] ?? '-'; + $list['Stream Naam'] = $data['stream_name'] ?? 'Mijn Radio'; + $list['Platform'] = match ($data['platform'] ?? 'other') { + 'shoutcast' => 'SHOUTcast', + 'icecast' => 'Icecast', + 'azurecast' => 'AzureCast', + default => 'Anders', + }; + + if (! empty($data['now_playing_api'])) { + $list['Now Playing API'] = $data['now_playing_api']; + } + + if (! empty($data['listeners_api'])) { + $list['Listeners API'] = $data['listeners_api']; + } + + $list['Nu Afspelen'] = ($data['enable_now_playing'] ?? true) ? 'Aan' : 'Uit'; + $list['Luisteraars'] = ($data['enable_listeners'] ?? true) ? 'Aan' : 'Uit'; + $list['Huidige DJ'] = ($data['enable_current_dj'] ?? true) ? 'Aan' : 'Uit'; + $list['Shouts'] = ($data['enable_shouts'] ?? true) ? 'Aan' : 'Uit'; + $list['DJ Aanmeldingen'] = ($data['enable_applications'] ?? true) ? 'Aan' : 'Uit'; + $list['Radio Widget'] = ($data['enable_widget'] ?? true) ? 'Aan' : 'Uit'; + $list['Widget Overal'] = ($data['enable_widget_globally'] ?? true) ? 'Ja' : 'Nee'; + $list['Widget Positie'] = $data['widget_position'] ?? 'bottom-right'; + $list['Punten Systeem'] = ($data['enable_points'] ?? true) ? 'Aan' : 'Uit'; + $list['Song Verzoeken'] = ($data['enable_requests'] ?? true) ? 'Aan' : 'Uit'; + $list['Contesten'] = ($data['enable_contests'] ?? true) ? 'Aan' : 'Uit'; + $list['Giveaways'] = ($data['enable_giveaways'] ?? false) ? 'Aan' : 'Uit'; + $list['Discord'] = ($data['enable_discord'] ?? false) ? 'Aan' : 'Uit'; + + return $list; + } +} diff --git a/app/Services/Community/RadioStreamService.php b/app/Services/Community/RadioStreamService.php index 4031c2b..1de0e26 100755 --- a/app/Services/Community/RadioStreamService.php +++ b/app/Services/Community/RadioStreamService.php @@ -16,10 +16,19 @@ class RadioStreamService } try { - return Http::timeout(2) + $response = Http::timeout(2) ->withOptions(['verify' => false]) - ->head($streamUrl) - ->successful(); + ->head($streamUrl); + + if ($response->successful()) { + return true; + } + + $response = Http::timeout(2) + ->withOptions(['verify' => false]) + ->get($streamUrl); + + return $response->successful(); } catch (\Exception) { return false; } @@ -105,6 +114,355 @@ class RadioStreamService return $url; } + public function detectStreamType(string $streamUrl): array + { + if (empty($streamUrl)) { + return ['type' => 'unknown', 'detected' => false]; + } + + $parsed = parse_url($streamUrl); + if (! $parsed) { + return ['type' => 'unknown', 'detected' => false]; + } + + $scheme = $parsed['scheme'] ?? 'https'; + $host = $parsed['host'] ?? ''; + $baseUrl = $scheme . '://' . $host; + + // Try AzureCast first + $azureCast = $this->tryAzureCast($baseUrl); + if ($azureCast['detected']) { + return $azureCast; + } + + // Try Icecast + $icecast = $this->tryIcecast($baseUrl); + if ($icecast['detected']) { + return $icecast; + } + + // Try Shoutcast + $shoutcast = $this->tryShoutcast($baseUrl, $streamUrl); + if ($shoutcast['detected']) { + return $shoutcast; + } + + return ['type' => 'unknown', 'detected' => false, 'base_url' => $baseUrl]; + } + + public function tryAzureCast(string $baseUrl): array + { + try { + $response = Http::timeout(3)->get(rtrim($baseUrl, '/') . '/api/nowplaying'); + if ($response->successful()) { + $data = $response->json(); + if (is_array($data) && (isset($data[0]['station']) || isset($data['station']))) { + $stationId = $data[0]['station']['id'] ?? $data['station']['id'] ?? 1; + + return [ + 'type' => 'azurecast', + 'detected' => true, + 'base_url' => $baseUrl, + 'station_id' => $stationId, + 'now_playing_api' => rtrim($baseUrl, '/') . '/api/nowplaying/' . $stationId, + 'listeners_api' => rtrim($baseUrl, '/') . '/api/nowplaying/' . $stationId, + ]; + } + } + } catch (\Exception) { + // Not AzureCast + } + + return ['detected' => false]; + } + + public function tryIcecast(string $baseUrl): array + { + try { + $response = Http::timeout(3)->get(rtrim($baseUrl, '/') . '/status-json.xsl'); + if ($response->successful()) { + $data = $response->json(); + if (isset($data['icestats'])) { + $source = $data['icestats']['source'] ?? []; + $listeners = 0; + $song = null; + $artist = null; + + if (is_array($source)) { + if (isset($source['listeners'])) { + $listeners = (int) $source['listeners']; + $title = $source['title'] ?? ''; + } else { + $firstSource = $source[0] ?? null; + if ($firstSource) { + $listeners = (int) ($firstSource['listeners'] ?? 0); + $title = $firstSource['title'] ?? ''; + } + } + } + + $title = $title ?? ''; + if (str_contains($title, ' - ')) { + $parts = explode(' - ', $title, 2); + $artist = trim($parts[0]); + $song = trim($parts[1]); + } else { + $song = $title ?: null; + } + + return [ + 'type' => 'icecast', + 'detected' => true, + 'base_url' => $baseUrl, + 'now_playing_api' => rtrim($baseUrl, '/') . '/status-json.xsl', + 'listeners_api' => rtrim($baseUrl, '/') . '/status-json.xsl', + 'listeners' => $listeners, + 'song' => $song, + 'artist' => $artist, + ]; + } + } + } catch (\Exception) { + // Not Icecast + } + + return ['detected' => false]; + } + + public function tryShoutcast(string $baseUrl, string $streamUrl): array + { + // Try SHOUTcast stats endpoint + $statsUrls = [ + rtrim($baseUrl, '/') . '/stats?json=1', + rtrim($baseUrl, '/') . '/7.html', + ]; + + foreach ($statsUrls as $statsUrl) { + try { + $response = Http::timeout(3)->get($statsUrl); + if ($response->successful()) { + $body = $response->body(); + + if (str_contains($statsUrl, 'json=1')) { + $data = json_decode($body, true); + if ($data && isset($data['streamstatus'])) { + $song = $data['songtitle'] ?? null; + $artist = null; + if ($song && str_contains($song, ' - ')) { + $parts = explode(' - ', $song, 2); + $artist = trim($parts[0]); + $song = trim($parts[1]); + } + + return [ + 'type' => 'shoutcast', + 'detected' => true, + 'base_url' => $baseUrl, + 'now_playing_api' => rtrim($baseUrl, '/') . '/stats?json=1', + 'listeners_api' => rtrim($baseUrl, '/') . '/stats?json=1', + 'listeners' => (int) ($data['currentlisteners'] ?? 0), + 'song' => $song, + 'artist' => $artist, + 'stream_url' => $data['streamurl'] ?? $streamUrl, + ]; + } + } + + if (str_contains($body, ',')) { + $parts = explode(',', $body); + if (count($parts) >= 7) { + $listeners = (int) trim($parts[2]); + + return [ + 'type' => 'shoutcast', + 'detected' => true, + 'base_url' => $baseUrl, + 'now_playing_api' => rtrim($baseUrl, '/') . '/7.html', + 'listeners_api' => rtrim($baseUrl, '/') . '/7.html', + 'listeners' => $listeners, + 'stream_url' => $streamUrl, + ]; + } + } + } + } catch (\Exception) { + continue; + } + } + + return ['detected' => false]; + } + + public function testStreamConnection(string $streamUrl, ?string $nowPlayingApiUrl = null, ?string $listenersApiUrl = null): array + { + $results = [ + 'stream' => ['status' => 'untested', 'message' => ''], + 'now_playing' => ['status' => 'untested', 'message' => ''], + 'listeners' => ['status' => 'untested', 'message' => ''], + 'stream_type' => 'unknown', + 'stream_info' => null, + ]; + + if (empty($streamUrl)) { + $results['stream'] = ['status' => 'error', 'message' => 'Geen stream URL opgegeven']; + return $results; + } + + // Test stream URL + try { + $response = Http::timeout(5) + ->withOptions(['verify' => false]) + ->head($streamUrl); + + if ($response->successful()) { + $contentType = $response->header('Content-Type'); + $results['stream'] = [ + 'status' => 'success', + 'message' => 'Stream bereikbaar!', + 'content_type' => $contentType, + 'http_code' => $response->status(), + ]; + } else { + $results['stream'] = [ + 'status' => 'warning', + 'message' => 'Stream reageert met status ' . $response->status(), + 'http_code' => $response->status(), + ]; + } + } catch (\Exception $e) { + $results['stream'] = [ + 'status' => 'error', + 'message' => 'Kon geen verbinding maken: ' . $e->getMessage(), + ]; + } + + // Detect stream type + $detected = $this->detectStreamType($streamUrl); + $results['stream_type'] = $detected['type']; + $results['stream_info'] = $detected; + + // Test now-playing API + $npUrl = $nowPlayingApiUrl ?: ($detected['now_playing_api'] ?? null); + if ($npUrl) { + try { + $npResponse = Http::timeout(5)->get($npUrl); + if ($npResponse->successful()) { + $npData = $npResponse->json(); + $song = null; + $artist = null; + + if ($detected['type'] === 'azurecast') { + $np = $npData['now_playing'] ?? []; + $song = $np['song']['title'] ?? null; + $artist = $np['song']['artist'] ?? null; + } elseif ($detected['type'] === 'icecast') { + $source = $npData['icestats']['source'] ?? []; + if (is_array($source)) { + if (isset($source['title'])) { + $title = $source['title']; + } else { + $title = $source[0]['title'] ?? null; + } + if ($title && str_contains($title, ' - ')) { + $parts = explode(' - ', $title, 2); + $artist = trim($parts[0]); + $song = trim($parts[1]); + } else { + $song = $title; + } + } + } elseif ($detected['type'] === 'shoutcast') { + $song = $npData['songtitle'] ?? null; + if ($song && str_contains($song, ' - ')) { + $parts = explode(' - ', $song, 2); + $artist = trim($parts[0]); + $song = trim($parts[1]); + } + } else { + $song = $npData['song'] ?? $npData['title'] ?? null; + $artist = $npData['artist'] ?? null; + } + + $results['now_playing'] = [ + 'status' => 'success', + 'message' => 'Nu afspelen informatie beschikbaar', + 'song' => $song, + 'artist' => $artist, + 'api_url' => $npUrl, + ]; + } else { + $results['now_playing'] = [ + 'status' => 'warning', + 'message' => 'API reageert met status ' . $npResponse->status(), + 'api_url' => $npUrl, + ]; + } + } catch (\Exception $e) { + $results['now_playing'] = [ + 'status' => 'error', + 'message' => 'Kon now-playing API niet bereiken: ' . $e->getMessage(), + 'api_url' => $npUrl, + ]; + } + } else { + $results['now_playing'] = [ + 'status' => 'skipped', + 'message' => 'Geen now-playing API geconfigureerd', + ]; + } + + // Test listeners API + $listenersUrl = $listenersApiUrl ?: ($detected['listeners_api'] ?? null); + if ($listenersUrl) { + try { + $listenersResponse = Http::timeout(5)->get($listenersUrl); + if ($listenersResponse->successful()) { + $listenersData = $listenersResponse->json(); + $count = 0; + + if ($detected['type'] === 'azurecast') { + $count = $listenersData['listeners']['total'] ?? $listenersData['listeners']['current'] ?? 0; + } elseif ($detected['type'] === 'icecast') { + $source = $listenersData['icestats']['source'] ?? []; + if (is_array($source)) { + $count = (int) ($source['listeners'] ?? $source[0]['listeners'] ?? 0); + } + } elseif ($detected['type'] === 'shoutcast') { + $count = (int) ($listenersData['currentlisteners'] ?? 0); + } else { + $count = $listenersData['listeners'] ?? $listenersData['count'] ?? $listenersData['total'] ?? 0; + } + + $results['listeners'] = [ + 'status' => 'success', + 'message' => 'Luisteraars informatie beschikbaar', + 'count' => (int) $count, + 'api_url' => $listenersUrl, + ]; + } else { + $results['listeners'] = [ + 'status' => 'warning', + 'message' => 'Listeners API reageert met status ' . $listenersResponse->status(), + 'api_url' => $listenersUrl, + ]; + } + } catch (\Exception $e) { + $results['listeners'] = [ + 'status' => 'error', + 'message' => 'Kon listeners API niet bereiken: ' . $e->getMessage(), + 'api_url' => $listenersUrl, + ]; + } + } else { + $results['listeners'] = [ + 'status' => 'skipped', + 'message' => 'Geen listeners API geconfigureerd', + ]; + } + + return $results; + } + public function detectAzureCast(): array { $baseUrl = $this->getSetting(RadioSettings::AzureCastBaseUrl); @@ -171,6 +529,70 @@ class RadioStreamService return $scheme . '://' . $host . '/api/nowplaying/' . $stationId; } + public function getNowPlayingFromShoutcast(string $baseUrl): ?array + { + try { + $response = Http::timeout(3)->get(rtrim($baseUrl, '/') . '/stats?json=1'); + if ($response->successful()) { + $data = $response->json(); + $song = $data['songtitle'] ?? null; + $artist = null; + + if ($song && str_contains($song, ' - ')) { + $parts = explode(' - ', $song, 2); + $artist = trim($parts[0]); + $song = trim($parts[1]); + } + + return [ + 'song' => $song, + 'artist' => $artist, + 'raw' => $data['songtitle'] ?? null, + ]; + } + } catch (\Exception) { + // Silent fail + } + + return null; + } + + public function getNowPlayingFromIcecast(string $baseUrl): ?array + { + try { + $response = Http::timeout(3)->get(rtrim($baseUrl, '/') . '/status-json.xsl'); + if ($response->successful()) { + $data = $response->json(); + $icestats = $data['icestats'] ?? []; + $source = $icestats['source'] ?? []; + + if (is_array($source)) { + $title = $source['title'] ?? $source[0]['title'] ?? null; + $song = null; + $artist = null; + + if ($title && str_contains($title, ' - ')) { + $parts = explode(' - ', $title, 2); + $artist = trim($parts[0]); + $song = trim($parts[1]); + } else { + $song = $title; + } + + return [ + 'song' => $song, + 'artist' => $artist, + 'raw' => $title, + ]; + } + } + } catch (\Exception) { + // Silent fail + } + + return null; + } + private function getSetting(RadioSettings $setting, mixed $default = null): mixed { return Cache::remember("setting_{$setting->value}", 60, function () use ($setting, $default): mixed { diff --git a/lang/ar.json b/lang/ar.json index 2e83b6c..c75f6bd 100755 --- a/lang/ar.json +++ b/lang/ar.json @@ -1395,5 +1395,121 @@ "Thumbnails URL": "رابط الصور المصغرة", "Group Homepage": "صفحة المجموعة", "Habbopages URL": "رابط Habbopages", - "URL Prefix": "بادئة الرابط" -} \ No newline at end of file + "URL Prefix": "بادئة الرابط", + "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" +} diff --git a/lang/br.json b/lang/br.json index d1e669a..66a12a8 100755 --- a/lang/br.json +++ b/lang/br.json @@ -1389,5 +1389,121 @@ "Thumbnails URL": "Thumbnails URL", "Group Homepage": "Group Homepage", "Habbopages URL": "Habbopages URL", - "URL Prefix": "URL Prefix" -} \ No newline at end of file + "URL Prefix": "URL Prefix", + "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" +} diff --git a/lang/cs.json b/lang/cs.json index 857486f..16f50a0 100755 --- a/lang/cs.json +++ b/lang/cs.json @@ -1389,5 +1389,121 @@ "Thumbnails URL": "Thumbnails URL", "Group Homepage": "Group Homepage", "Habbopages URL": "Habbopages URL", - "URL Prefix": "URL Prefix" -} \ No newline at end of file + "URL Prefix": "URL Prefix", + "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" +} diff --git a/lang/da.json b/lang/da.json index fda05b6..a65af82 100755 --- a/lang/da.json +++ b/lang/da.json @@ -1389,5 +1389,121 @@ "Thumbnails URL": "Thumbnails URL", "Group Homepage": "Group Homepage", "Habbopages URL": "Habbopages URL", - "URL Prefix": "URL Prefix" -} \ No newline at end of file + "URL Prefix": "URL Prefix", + "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" +} diff --git a/lang/de.json b/lang/de.json index f084822..251dc4b 100755 --- a/lang/de.json +++ b/lang/de.json @@ -1395,5 +1395,121 @@ "Thumbnails URL": "Vorschaubilder URL", "Group Homepage": "Gruppen Startseite", "Habbopages URL": "Habbopages URL", - "URL Prefix": "URL Präfix" -} \ No newline at end of file + "URL Prefix": "URL Präfix", + "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" +} diff --git a/lang/el.json b/lang/el.json index 3c05879..9664a36 100755 --- a/lang/el.json +++ b/lang/el.json @@ -1389,5 +1389,121 @@ "Thumbnails URL": "Thumbnails URL", "Group Homepage": "Group Homepage", "Habbopages URL": "Habbopages URL", - "URL Prefix": "URL Prefix" -} \ No newline at end of file + "URL Prefix": "URL Prefix", + "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" +} diff --git a/lang/en.json b/lang/en.json index d32e106..3bb6c91 100755 --- a/lang/en.json +++ b/lang/en.json @@ -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" } diff --git a/lang/es.json b/lang/es.json index 85ebd03..dbb1a50 100755 --- a/lang/es.json +++ b/lang/es.json @@ -1395,5 +1395,121 @@ "Thumbnails URL": "URL Miniaturas", "Group Homepage": "Página de grupo", "Habbopages URL": "URL Habbopages", - "URL Prefix": "Prefijo URL" -} \ No newline at end of file + "URL Prefix": "Prefijo URL", + "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" +} diff --git a/lang/fi.json b/lang/fi.json index 037fa55..6dcbb01 100755 --- a/lang/fi.json +++ b/lang/fi.json @@ -1389,5 +1389,121 @@ "Thumbnails URL": "Thumbnails URL", "Group Homepage": "Group Homepage", "Habbopages URL": "Habbopages URL", - "URL Prefix": "URL Prefix" -} \ No newline at end of file + "URL Prefix": "URL Prefix", + "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" +} diff --git a/lang/fr.json b/lang/fr.json index 8d55b1b..b00d189 100755 --- a/lang/fr.json +++ b/lang/fr.json @@ -1395,5 +1395,121 @@ "Thumbnails URL": "URL Miniatures", "Group Homepage": "Page d'accueil groupe", "Habbopages URL": "URL Habbopages", - "URL Prefix": "Préfixe URL" -} \ No newline at end of file + "URL Prefix": "Préfixe URL", + "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" +} diff --git a/lang/hu.json b/lang/hu.json index 471f4e3..8ec5584 100755 --- a/lang/hu.json +++ b/lang/hu.json @@ -1390,5 +1390,121 @@ "Group Homepage": "Group Homepage", "Habbopages URL": "Habbopages URL", "URL Prefix": "URL Prefix", - "figament::resources.navigations.Monitoring": "Megfigyelés" -} \ No newline at end of file + "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" +} diff --git a/lang/it.json b/lang/it.json index 9da6e3a..60c75d5 100755 --- a/lang/it.json +++ b/lang/it.json @@ -1395,5 +1395,121 @@ "Thumbnails URL": "URL Anteprime", "Group Homepage": "Homepage gruppo", "Habbopages URL": "URL Habbopages", - "URL Prefix": "Prefisso URL" -} \ No newline at end of file + "URL Prefix": "Prefisso URL", + "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" +} diff --git a/lang/nl.json b/lang/nl.json index f35f3cd..26381d1 100755 --- a/lang/nl.json +++ b/lang/nl.json @@ -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": "Muziek", + "radio.loading": "Laden...", + "radio.navigation_label": "Radio", + "radio.setup_page_title": "Radio Setup", + "radio.setup_page_subtitle": "Configureer je radio systeem in één keer", + "radio.setup.success_title": "Radio Geïnstalleerd!", + "radio.setup.success_body": "Radio systeem is succesvol geïnstalleerd en geconfigureerd!", + "radio.setup.error_title": "Installatie Mislukt", + "radio.setup.error_body": "Er is een fout opgetreden: :message", + "radio.setup.button_label": "Alles Installeren", + "radio.setup.modal_heading": "Radio Installeren?", + "radio.setup.modal_description": "Dit zal alle radio instellingen configureren met standaard waarden.", + "radio.setup.modal_submit": "Ja, installeer!", + "radio.setup.tooltip": "Installeer het complete radio systeem", + "radio.setup_complete": "✅ Installatie Voltooid!", + "radio.what_gets_configured": "Wat wordt er geconfigureerd?", + "radio.radio_stream": "Radio Stream", + "radio.radio_stream_desc": "Stel je stream URL in met ondersteuning voor SHOUTcast, Icecast, AzureCast en andere streaming platforms.", + "radio.points_system": "Punten Systeem", + "radio.points_system_desc": "Laat gebruikers punten verdienen door te luisteren, nummers aan te vragen en deel te nemen aan contests.", + "radio.community_features": "Community Functies", + "radio.community_features_desc": "Shouts, song requests, DJ aanmeldingen en meer community interacties.", + "radio.dj_management": "DJ Beheer", + "radio.dj_management_desc": "DJ ranks, schema, auto-detectie en Sambroadcaster/Virtual DJ integratie.", + "radio.monitoring": "Stream Monitoring", + "radio.monitoring_desc": "Houd je stream uptime in de gaten met real-time monitoring.", + "radio.display_options": "Weergave Opties", + "radio.display_options_desc": "Widget, player stijlen, kleuren en aanpasbare CSS/JS.", + "radio.default_settings": "Standaard Instellingen", + "radio.radio_label": "Radio", + "radio.enabled": "Ingeschakeld", + "radio.points_label": "Punten", + "radio.per_min": " per min", + "radio.daily_limit": "Dagelijkse limiet", + "radio.shouts_label": "Shouts", + "radio.on": "Aan", + "radio.widget": "Widget", + "radio.global": "Globaal", + "radio.dj_apps": "DJ Aanmeldingen", + "radio.open": "Open", + "radio.monitoring_label": "Monitoring", + "radio.contests_label": "Contesten", + "radio.install_radio_system": "🚀 Radio Systeem Installeren", + "radio.reset_settings": "Instellingen Resetten", + "radio.reset_confirm": "Weet je zeker dat je alle radio instellingen wilt resetten?", + "radio.go_to_radio_settings": "Naar Radio Instellingen", + "radio.open_wizard": "🎯 Open Radio Wizard", + "radio.wizard_desc": "Stap-voor-stap wizard met verbindingstest", + "radio.wizard.title": "Radio Installatie Wizard", + "radio.wizard.step_short": "Stap", + "radio.wizard.step_prefix": "Stap", + "radio.wizard.of": "van", + "radio.wizard.next_step": "Volgende Stap →", + "radio.wizard.previous_step": "← Vorige Stap", + "radio.wizard.back_to_setup": "Terug naar setup", + "radio.wizard.step1_label": "Platform", + "radio.wizard.step2_label": "Stream", + "radio.wizard.step3_label": "API", + "radio.wizard.step4_label": "Functies", + "radio.wizard.step5_label": "Testen", + "radio.wizard.step1_subtitle": "Kies je streaming platform", + "radio.wizard.step2_title": "Stream Configuratie", + "radio.wizard.step3_title": "API Configuratie", + "radio.wizard.step3_subtitle": "Now Playing & Luisteraars", + "radio.wizard.step4_title": "Functies Configureren", + "radio.wizard.step4_subtitle": "Kies welke radio functies je wilt inschakelen", + "radio.wizard.step5_title": "Test & Installeren", + "radio.wizard.step5_subtitle": "Controleer de verbinding en voltooi de installatie", + "radio.wizard.platform_shoutcast": "SHOUTcast", + "radio.wizard.platform_shoutcast_desc": "Geschikt voor SHOUTcast servers. Automatische detectie van nu afspelen en luisteraars via stats endpoint.", + "radio.wizard.platform_icecast": "Icecast", + "radio.wizard.platform_icecast_desc": "Geschikt voor Icecast servers. Gebruikt status-json.xsl voor automatische detectie.", + "radio.wizard.platform_azurecast": "AzureCast", + "radio.wizard.platform_azurecast_desc": "AzureCast hosting. Volledige API integratie met now-playing, listeners en auto-configuratie.", + "radio.wizard.platform_other": "Anders", + "radio.wizard.platform_other_desc": "Een andere stream provider. Handmatige configuratie van stream URL en API endpoints.", + "radio.wizard.shoutcast_info_title": "SHOUTcast", + "radio.wizard.shoutcast_info_desc": "Voer je SHOUTcast stream URL in. De wizard probeert automatisch de stats endpoint te vinden.", + "radio.wizard.icecast_info_title": "Icecast", + "radio.wizard.icecast_info_desc": "Voer je Icecast stream URL in. De wizard gebruikt status-json.xsl voor automatische detectie.", + "radio.wizard.azurecast_info_title": "AzureCast", + "radio.wizard.azurecast_info_desc": "AzureCast stream URL + server configuratie. De wizard configureert alles via de AzureCast API.", + "radio.wizard.other_info_title": "Andere Stream", + "radio.wizard.other_info_desc": "Voer je stream URL in. Je kunt later handmatig API endpoints configureren voor nu afspelen en luisteraars.", + "radio.wizard.stream_url_label": "Stream URL *", + "radio.wizard.stream_url_hint": "De directe URL naar je audiostreem (MP3, AAC, OGG, etc.)", + "radio.wizard.stream_name_label": "Stream Naam", + "radio.wizard.stream_name_placeholder": "Mijn Radio", + "radio.wizard.stream_name_hint": "Een naam voor je radiostream (optioneel)", + "radio.wizard.azurecast_section": "AzureCast Server Configuratie", + "radio.wizard.azurecast_base_url_label": "AzureCast Basis URL", + "radio.wizard.azurecast_base_url_hint": "De basis URL van je AzureCast server. Wordt automatisch gedetecteerd als leeg gelaten.", + "radio.wizard.azurecast_station_id_label": "Station ID", + "radio.wizard.azurecast_station_id_hint": "Het station ID in AzureCast (standaard: 1)", + "radio.wizard.enable_now_playing": "Nu Afspelen inschakelen", + "radio.wizard.now_playing_api_label": "Now Playing API URL", + "radio.wizard.now_playing_api_hint": "API endpoint dat het huidige nummer teruggeeft. Meestal automatisch gedetecteerd.", + "radio.wizard.enable_listeners": "Luisteraars teller inschakelen", + "radio.wizard.listeners_api_label": "Listeners API URL", + "radio.wizard.listeners_api_hint": "API endpoint dat het aantal luisteraars teruggeeft.", + "radio.wizard.enable_current_dj": "Huidige DJ tonen", + "radio.wizard.detected": "gedetecteerd!", + "radio.wizard.detected_desc": "API endpoints zijn automatisch gevonden en ingevuld.", + "radio.wizard.not_detected": "Geen automatische detectie", + "radio.wizard.not_detected_desc": "Vul de API URLs handmatig in of sla deze stap over.", + "radio.wizard.section_community": "Community Functies", + "radio.wizard.feature_shouts": "Shouts", + "radio.wizard.feature_shouts_desc": "Berichten achterlaten", + "radio.wizard.feature_applications": "DJ Aanmeldingen", + "radio.wizard.feature_applications_desc": "Solliciteren als DJ", + "radio.wizard.feature_requests": "Song Verzoeken", + "radio.wizard.feature_requests_desc": "Nummers aanvragen", + "radio.wizard.section_display": "Weergave", + "radio.wizard.feature_widget": "Radio Widget", + "radio.wizard.feature_widget_desc": "Miniplayer op de site", + "radio.wizard.feature_widget_global": "Widget Overal", + "radio.wizard.feature_widget_global_desc": "Op alle pagina's tonen", + "radio.wizard.widget_position_label": "Widget Positie", + "radio.wizard.position_bottom_right": "Rechtsonder", + "radio.wizard.position_bottom_left": "Linksonder", + "radio.wizard.position_top_right": "Rechtsboven", + "radio.wizard.position_top_left": "Linksboven", + "radio.wizard.section_gamification": "Gamification", + "radio.wizard.feature_points": "Punten Systeem", + "radio.wizard.feature_points_desc": "Verdien punten door te luisteren", + "radio.wizard.feature_contests": "Contesten", + "radio.wizard.feature_contests_desc": "Wedstrijden organiseren", + "radio.wizard.feature_giveaways": "Giveaways", + "radio.wizard.feature_giveaways_desc": "Cadeautjes weggeven", + "radio.wizard.section_integrations": "Integraties", + "radio.wizard.feature_discord": "Discord Notificaties", + "radio.wizard.feature_discord_desc": "Meldingen bij DJ live / nummer wijziging", + "radio.wizard.discord_webhook_label": "Discord Webhook URL", + "radio.wizard.discord_webhook_hint": "Maak een webhook aan in je Discord server kanaal.", + "radio.wizard.test_title": "Verbinding Testen", + "radio.wizard.test_desc": "Klik op Test Verbinding om te controleren of je stream en APIs bereikbaar zijn.", + "radio.wizard.test_loading": "Bezig met testen van de verbinding...", + "radio.wizard.test_prompt": "Klik op de knop om de verbinding te testen.", + "radio.wizard.test_button": "Test Verbinding", + "radio.wizard.test_retry": "Opnieuw Testen", + "radio.wizard.settings_overview": "Overzicht van Instellingen", + "radio.wizard.settings_overview_desc": "Dit zijn de instellingen die worden opgeslagen:", + "radio.wizard.install_confirm": "Weet je zeker dat je de radio wilt installeren met deze instellingen?", + "radio.wizard.install_button": "Radio Installeren", + "radio.wizard.test_result_stream": "Stream Verbinding", + "radio.wizard.test_result_now_playing": "Now Playing", + "radio.wizard.test_result_listeners": "Luisteraars", + "radio.wizard.status_success": "Succes", + "radio.wizard.status_warning": "Waarschuwing", + "radio.wizard.status_error": "Fout", + "radio.wizard.status_skipped": "Overgeslagen", + "radio.wizard.status_untested": "Niet getest", + "radio.wizard.content_type": "Content-Type", + "radio.wizard.http_status": "HTTP Status", + "radio.wizard.song": "Nummer", + "radio.wizard.artist": "Artiest", + "radio.wizard.listeners": "Luisteraars", + "radio.wizard.api_url": "API URL", + "radio.wizard.test_stream_ok": "Stream is bereikbaar! Je kunt de radio installeren.", + "radio.wizard.test_stream_fail": "Stream is niet bereikbaar. Controleer de URL en probeer het opnieuw.", + "radio.wizard.test_not_run": "Nog niet getest.", + "radio.wizard.test_connection_fail": "Kon de test niet uitvoeren: ", + "radio.wizard.error": "Fout", + "radio.wizard.unknown_error": "Onbekende fout" } diff --git a/lang/no.json b/lang/no.json index be3580f..7ee7685 100755 --- a/lang/no.json +++ b/lang/no.json @@ -1389,5 +1389,121 @@ "Thumbnails URL": "Thumbnails URL", "Group Homepage": "Group Homepage", "Habbopages URL": "Habbopages URL", - "URL Prefix": "URL Prefix" -} \ No newline at end of file + "URL Prefix": "URL Prefix", + "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" +} diff --git a/lang/pl.json b/lang/pl.json index a48e87b..f2c04d1 100755 --- a/lang/pl.json +++ b/lang/pl.json @@ -1395,5 +1395,121 @@ "Thumbnails URL": "URL miniaturek", "Group Homepage": "Strona grupy", "Habbopages URL": "URL Habbopages", - "URL Prefix": "Prefiks URL" -} \ No newline at end of file + "URL Prefix": "Prefiks URL", + "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" +} diff --git a/lang/pt.json b/lang/pt.json index ba96c45..718875a 100755 --- a/lang/pt.json +++ b/lang/pt.json @@ -1395,5 +1395,121 @@ "Thumbnails URL": "URL Miniaturas", "Group Homepage": "Página do grupo", "Habbopages URL": "URL Habbopages", - "URL Prefix": "Prefixo URL" -} \ No newline at end of file + "URL Prefix": "Prefixo URL", + "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" +} diff --git a/lang/ro.json b/lang/ro.json index 57c6869..69b03e4 100755 --- a/lang/ro.json +++ b/lang/ro.json @@ -1389,5 +1389,121 @@ "Thumbnails URL": "Thumbnails URL", "Group Homepage": "Group Homepage", "Habbopages URL": "Habbopages URL", - "URL Prefix": "URL Prefix" -} \ No newline at end of file + "URL Prefix": "URL Prefix", + "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" +} diff --git a/lang/ru.json b/lang/ru.json index 3021c85..723e446 100755 --- a/lang/ru.json +++ b/lang/ru.json @@ -1395,5 +1395,121 @@ "Thumbnails URL": "URL миниатюр", "Group Homepage": "Домашняя страница группы", "Habbopages URL": "URL Habbopages", - "URL Prefix": "Префикс URL" -} \ No newline at end of file + "URL Prefix": "Префикс URL", + "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" +} diff --git a/lang/se.json b/lang/se.json index 9eb374e..459bd12 100755 --- a/lang/se.json +++ b/lang/se.json @@ -1389,5 +1389,121 @@ "Thumbnails URL": "Thumbnails URL", "Group Homepage": "Group Homepage", "Habbopages URL": "Habbopages URL", - "URL Prefix": "URL Prefix" -} \ No newline at end of file + "URL Prefix": "URL Prefix", + "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" +} diff --git a/lang/tr.json b/lang/tr.json index caa3344..63793fe 100755 --- a/lang/tr.json +++ b/lang/tr.json @@ -1395,5 +1395,121 @@ "Thumbnails URL": "Küçük Resimler URL", "Group Homepage": "Grup Ana Sayfası", "Habbopages URL": "Habbopages URL", - "URL Prefix": "URL Öneki" -} \ No newline at end of file + "URL Prefix": "URL Öneki", + "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" +} diff --git a/lang/uk.json b/lang/uk.json index 74604a7..896c3d6 100755 --- a/lang/uk.json +++ b/lang/uk.json @@ -1389,5 +1389,121 @@ "Thumbnails URL": "Thumbnails URL", "Group Homepage": "Group Homepage", "Habbopages URL": "Habbopages URL", - "URL Prefix": "URL Prefix" -} \ No newline at end of file + "URL Prefix": "URL Prefix", + "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" +} diff --git a/resources/views/admin/radio/setup.blade.php b/resources/views/admin/radio/setup.blade.php index ea8867c..5b28eb2 100755 --- a/resources/views/admin/radio/setup.blade.php +++ b/resources/views/admin/radio/setup.blade.php @@ -356,6 +356,11 @@ + + 🎯 + {{ __('radio.open_wizard') }} + + ⚙️ {{ __('radio.go_to_radio_settings') }} diff --git a/resources/views/admin/radio/wizard/_test-results.blade.php b/resources/views/admin/radio/wizard/_test-results.blade.php new file mode 100755 index 0000000..28192e8 --- /dev/null +++ b/resources/views/admin/radio/wizard/_test-results.blade.php @@ -0,0 +1,64 @@ +@php + $statusLabels = [ + 'success' => __('radio.wizard.status_success'), + 'warning' => __('radio.wizard.status_warning'), + 'error' => __('radio.wizard.status_error'), + 'skipped' => __('radio.wizard.status_skipped'), + 'untested' => __('radio.wizard.status_untested'), + ]; + $statusIcons = [ + 'success' => '✅', + 'warning' => '⚠️', + 'error' => '❌', + 'skipped' => '⏭️', + 'untested' => '❓', + ]; + $testNames = [ + 'stream' => '📡 ' . __('radio.wizard.test_result_stream'), + 'now_playing' => '🎵 ' . __('radio.wizard.test_result_now_playing'), + 'listeners' => '👥 ' . __('radio.wizard.test_result_listeners'), + ]; +@endphp + +@foreach(['stream', 'now_playing', 'listeners'] as $key) + @php $result = $results[$key] ?? null; @endphp + @if($result) +
+
+ {{ $statusIcons[$result['status']] ?? '❓' }} {{ $testNames[$key] ?? $key }} + {{ $statusLabels[$result['status']] ?? $result['status'] }} +
+
+ {{ $result['message'] }} + @if(!empty($result['content_type'])) +
{{ __('radio.wizard.content_type') }}: {{ $result['content_type'] }} + @endif + @if(!empty($result['http_code'])) +
{{ __('radio.wizard.http_status') }}: {{ $result['http_code'] }} + @endif + @if(!empty($result['song'])) +
{{ __('radio.wizard.song') }}: {{ $result['song'] }} + @endif + @if(!empty($result['artist'])) + {{ __('radio.wizard.artist') }}: {{ $result['artist'] }} + @endif + @if(isset($result['count'])) +
{{ __('radio.wizard.listeners') }}: {{ $result['count'] }} + @endif + @if(!empty($result['api_url'])) +
{{ __('radio.wizard.api_url') }}: {{ $result['api_url'] }} + @endif +
+
+ @endif +@endforeach + +
+ @if(($results['stream']['status'] ?? '') === 'success' || ($results['stream']['status'] ?? '') === 'warning') +

✅ {{ __('radio.wizard.test_stream_ok') }}

+ @elseif(($results['stream']['status'] ?? '') === 'error') +

❌ {{ __('radio.wizard.test_stream_fail') }}

+ @else +

{{ __('radio.wizard.test_not_run') }}

+ @endif +
diff --git a/resources/views/admin/radio/wizard/step-1.blade.php b/resources/views/admin/radio/wizard/step-1.blade.php new file mode 100755 index 0000000..5ae02df --- /dev/null +++ b/resources/views/admin/radio/wizard/step-1.blade.php @@ -0,0 +1,99 @@ +@extends('layouts.app') + +@section('title', __('radio.wizard.title') . ' - ' . __('radio.wizard.step_short') . ' 1 - ' . config('app.name')) + +@push('styles') + +@endpush + +@section('content') +
+
+

📻 {{ __('radio.wizard.title') }}

+

{{ __('radio.wizard.step_prefix') }} 1 {{ __('radio.wizard.of') }} 5 - {{ __('radio.wizard.step1_subtitle') }}

+
+ +
+
1
+
+
2
+
+
3
+
+
4
+
+
5
+
+
+ {{ __('radio.wizard.step1_label') }} + {{ __('radio.wizard.step2_label') }} + {{ __('radio.wizard.step3_label') }} + {{ __('radio.wizard.step4_label') }} + {{ __('radio.wizard.step5_label') }} +
+ +
+
+ @csrf + +
+ @php $platforms = ['shoutcast', 'icecast', 'azurecast', 'other']; @endphp + @php $icons = ['shoutcast' => '📡', 'icecast' => '🎵', 'azurecast' => '☁️', 'other' => '🔗']; @endphp + + @foreach($platforms as $p) + + @endforeach +
+ +
+ + ← {{ __('radio.wizard.back_to_setup') }} + + +
+
+
+
+ + +@endsection diff --git a/resources/views/admin/radio/wizard/step-2.blade.php b/resources/views/admin/radio/wizard/step-2.blade.php new file mode 100755 index 0000000..7496aa5 --- /dev/null +++ b/resources/views/admin/radio/wizard/step-2.blade.php @@ -0,0 +1,118 @@ +@extends('layouts.app') + +@section('title', __('radio.wizard.title') . ' - ' . __('radio.wizard.step_short') . ' 2 - ' . config('app.name')) + +@push('styles') + +@endpush + +@section('content') +
+
+

📻 {{ __('radio.wizard.step2_title') }}

+

{{ __('radio.wizard.step_prefix') }} 2 {{ __('radio.wizard.of') }} 5 - {{ $platformLabel }}

+
+ +
+
+
+
2
+
+
3
+
+
4
+
+
5
+
+
+ ✓ {{ __('radio.wizard.step1_label') }} + {{ __('radio.wizard.step2_label') }} + {{ __('radio.wizard.step3_label') }} + {{ __('radio.wizard.step4_label') }} + {{ __('radio.wizard.step5_label') }} +
+ +
+
+ @csrf + +
+
{{ __("radio.wizard.platform_{$platform}_info_title") }}
+
{{ __("radio.wizard.platform_{$platform}_info_desc") }}
+
+ +
+ + +
{{ __('radio.wizard.stream_url_hint') }}
+
+ +
+ + +
{{ __('radio.wizard.stream_name_hint') }}
+
+ + @if($platform === 'azurecast') +
+ +

{{ __('radio.wizard.azurecast_section') }}

+ +
+ + +
{{ __('radio.wizard.azurecast_base_url_hint') }}
+
+ +
+ + +
{{ __('radio.wizard.azurecast_station_id_hint') }}
+
+ @endif + + @if ($errors->any()) +
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + +
+ ← {{ __('radio.wizard.previous_step') }} + +
+
+
+
+@endsection diff --git a/resources/views/admin/radio/wizard/step-3.blade.php b/resources/views/admin/radio/wizard/step-3.blade.php new file mode 100755 index 0000000..5f53157 --- /dev/null +++ b/resources/views/admin/radio/wizard/step-3.blade.php @@ -0,0 +1,152 @@ +@extends('layouts.app') + +@section('title', __('radio.wizard.title') . ' - ' . __('radio.wizard.step_short') . ' 3 - ' . config('app.name')) + +@push('styles') + +@endpush + +@section('content') +
+
+

🔌 {{ __('radio.wizard.step3_title') }}

+

{{ __('radio.wizard.step_prefix') }} 3 {{ __('radio.wizard.of') }} 5 - {{ __('radio.wizard.step3_subtitle') }}

+
+ +
+
+
+
+
+
3
+
+
4
+
+
5
+
+
+ ✓ {{ __('radio.wizard.step1_label') }} + ✓ {{ __('radio.wizard.step2_label') }} + {{ __('radio.wizard.step3_label') }} + {{ __('radio.wizard.step4_label') }} + {{ __('radio.wizard.step5_label') }} +
+ +
+ @if($autoDetected && $autoDetected['detected']) +
+
+ +
+ {{ ucfirst($autoDetected['type']) }} {{ __('radio.wizard.detected') }} +

{{ __('radio.wizard.detected_desc') }}

+
+
+
+ @elseif($autoDetected) +
+
+ ⚠️ +
+ {{ __('radio.wizard.not_detected') }} +

{{ __('radio.wizard.not_detected_desc') }}

+
+
+
+ @endif + +
+ @csrf + +
+ + {{ __('radio.wizard.enable_now_playing') }} +
+ +
+ + +
{{ __('radio.wizard.now_playing_api_hint') }}
+
+ +
+ + {{ __('radio.wizard.enable_listeners') }} +
+ +
+ + +
{{ __('radio.wizard.listeners_api_hint') }}
+
+ +
+ + {{ __('radio.wizard.enable_current_dj') }} +
+ + @if ($errors->any()) +
+
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+
+ @endif + +
+ ← {{ __('radio.wizard.previous_step') }} + +
+
+
+
+@endsection diff --git a/resources/views/admin/radio/wizard/step-4.blade.php b/resources/views/admin/radio/wizard/step-4.blade.php new file mode 100755 index 0000000..c249bc0 --- /dev/null +++ b/resources/views/admin/radio/wizard/step-4.blade.php @@ -0,0 +1,211 @@ +@extends('layouts.app') + +@section('title', __('radio.wizard.title') . ' - ' . __('radio.wizard.step_short') . ' 4 - ' . config('app.name')) + +@push('styles') + +@endpush + +@section('content') +
+
+

⚙️ {{ __('radio.wizard.step4_title') }}

+

{{ __('radio.wizard.step_prefix') }} 4 {{ __('radio.wizard.of') }} 5 - {{ __('radio.wizard.step4_subtitle') }}

+
+ +
+
+
+
+
+
+
+
4
+
+
5
+
+
+ ✓ {{ __('radio.wizard.step1_label') }} + ✓ {{ __('radio.wizard.step2_label') }} + ✓ {{ __('radio.wizard.step3_label') }} + {{ __('radio.wizard.step4_label') }} + {{ __('radio.wizard.step5_label') }} +
+ +
+
+ @csrf + +

{{ __('radio.wizard.section_community') }}

+
+
+ + {{ __('radio.wizard.feature_shouts') }} + {{ __('radio.wizard.feature_shouts_desc') }} +
+ +
+ + {{ __('radio.wizard.feature_applications') }} + {{ __('radio.wizard.feature_applications_desc') }} +
+ +
+ + {{ __('radio.wizard.feature_requests') }} + {{ __('radio.wizard.feature_requests_desc') }} +
+
+ +

{{ __('radio.wizard.section_display') }}

+
+
+ + {{ __('radio.wizard.feature_widget') }} + {{ __('radio.wizard.feature_widget_desc') }} +
+ +
+ + {{ __('radio.wizard.feature_widget_global') }} + {{ __('radio.wizard.feature_widget_global_desc') }} +
+
+ +
+ + +
+ +

{{ __('radio.wizard.section_gamification') }}

+
+
+ + {{ __('radio.wizard.feature_points') }} + {{ __('radio.wizard.feature_points_desc') }} +
+ +
+ + {{ __('radio.wizard.feature_contests') }} + {{ __('radio.wizard.feature_contests_desc') }} +
+ +
+ + {{ __('radio.wizard.feature_giveaways') }} + {{ __('radio.wizard.feature_giveaways_desc') }} +
+
+ +

{{ __('radio.wizard.section_integrations') }}

+
+ + {{ __('radio.wizard.feature_discord') }} + {{ __('radio.wizard.feature_discord_desc') }} +
+ +
+ + +
{{ __('radio.wizard.discord_webhook_hint') }}
+
+ +
+ ← {{ __('radio.wizard.previous_step') }} + +
+
+
+
+ + +@endsection diff --git a/resources/views/admin/radio/wizard/step-5.blade.php b/resources/views/admin/radio/wizard/step-5.blade.php new file mode 100755 index 0000000..6fd96f2 --- /dev/null +++ b/resources/views/admin/radio/wizard/step-5.blade.php @@ -0,0 +1,223 @@ +@extends('layouts.app') + +@section('title', __('radio.wizard.title') . ' - ' . __('radio.wizard.step_short') . ' 5 - ' . config('app.name')) + +@push('styles') + +@endpush + +@section('content') +
+
+

🧪 {{ __('radio.wizard.step5_title') }}

+

{{ __('radio.wizard.step_prefix') }} 5 {{ __('radio.wizard.of') }} 5 - {{ __('radio.wizard.step5_subtitle') }}

+
+ +
+
+
+
+
+
+
+
+
+
5
+
+
+ ✓ {{ __('radio.wizard.step1_label') }} + ✓ {{ __('radio.wizard.step2_label') }} + ✓ {{ __('radio.wizard.step3_label') }} + ✓ {{ __('radio.wizard.step4_label') }} + {{ __('radio.wizard.step5_label') }} +
+ + @if(session('error')) +
+ {{ session('error') }} +
+ @endif + +
+

+ 🔌 {{ __('radio.wizard.test_title') }} +

+

{{ __('radio.wizard.test_desc') }}

+ +
+ + +
+ @if($testResults) + @include('admin.radio.wizard._test-results', ['results' => $testResults]) + @else +

{{ __('radio.wizard.test_prompt') }}

+ @endif +
+
+ +
+ +
+
+ +
+

+ 📋 {{ __('radio.wizard.settings_overview') }} +

+

{{ __('radio.wizard.settings_overview_desc') }}

+ +
+ @foreach($settingsList as $key => $value) +
+ {{ $key }} + {{ $value }} +
+ @endforeach +
+
+ +
+ ← {{ __('radio.wizard.previous_step') }} + +
+ @csrf + +
+
+
+ + +@endsection diff --git a/routes/admin.php b/routes/admin.php index 8b5996c..319f7a2 100755 --- a/routes/admin.php +++ b/routes/admin.php @@ -1,6 +1,7 @@ group(function () { Route::get('/radio/setup', [RadioSetupController::class, 'index'])->name('admin.radio.setup'); Route::post('/radio/setup', [RadioSetupController::class, 'setup'])->name('admin.radio.setup.post'); + + // Radio wizard (multi-step) + Route::prefix('radio/wizard')->group(function () { + Route::get('/', [RadioWizardController::class, 'index'])->name('admin.radio.wizard'); + Route::post('/step-1', [RadioWizardController::class, 'processStep1'])->name('admin.radio.wizard.process-step-1'); + Route::get('/step/{step}', [RadioWizardController::class, 'step'])->name('admin.radio.wizard.step')->where('step', '[2-5]'); + Route::post('/step-2', [RadioWizardController::class, 'processStep2'])->name('admin.radio.wizard.process-step-2'); + Route::post('/step-3', [RadioWizardController::class, 'processStep3'])->name('admin.radio.wizard.process-step-3'); + Route::post('/step-4', [RadioWizardController::class, 'processStep4'])->name('admin.radio.wizard.process-step-4'); + Route::get('/test', [RadioWizardController::class, 'runTest'])->name('admin.radio.wizard.test'); + Route::post('/complete', [RadioWizardController::class, 'complete'])->name('admin.radio.wizard.complete'); + }); }); // Furni editor API