From da87997c7f66fb07d26f146e51e78607b0d1370a Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 00:44:31 +0100 Subject: [PATCH 01/16] feat: Add FPS and bitrate to merge channel scoring (#330) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extends the auto-merge scoring system with two new priority attributes: - Frame Rate (fps): scores channels by detected video frame rate - Bitrate: scores channels by detected video bitrate (kbps) Both attributes are available in the per-playlist auto-merge config and the bulk "Merge Same ID" action. They follow the same opportunistic-probe pattern as the existing resolution scorer — values come from stream_stats, which is populated by the channel probe. To make video bitrate available for MPEG-TS / HLS streams (where per-stream video bit_rate is typically null), probeStreamStats now also requests ffprobe -show_format and appends a format entry. getEmbyStreamStats falls back to (format.bit_rate - audio.bit_rate) when the per-stream value is missing. Old DB rows without a format entry continue to work; they just don't get the fallback. --- .../Resources/Playlists/PlaylistResource.php | 2 + app/Http/Controllers/PlaylistController.php | 2 +- app/Jobs/MergeChannels.php | 54 ++++ app/Models/Channel.php | 37 ++- app/Services/PlaylistService.php | 2 + tests/Feature/ChannelStreamStatsTest.php | 150 +++++++++++ .../MergeChannelsFpsBitrateScoringTest.php | 248 ++++++++++++++++++ 7 files changed, 491 insertions(+), 4 deletions(-) create mode 100644 tests/Feature/MergeChannelsFpsBitrateScoringTest.php diff --git a/app/Filament/Resources/Playlists/PlaylistResource.php b/app/Filament/Resources/Playlists/PlaylistResource.php index 784ffcffa..66027fb69 100644 --- a/app/Filament/Resources/Playlists/PlaylistResource.php +++ b/app/Filament/Resources/Playlists/PlaylistResource.php @@ -2067,6 +2067,8 @@ public static function getFormSections($creating = false, $includeAuth = false): 'group_priority' => '📁 Group Priority (from weights above)', 'catchup_support' => '⏪ Catch-up/Replay Support', 'resolution' => '📺 Resolution (requires stream analysis)', + 'fps' => '🎞️ Frame Rate (requires stream analysis)', + 'bitrate' => '📊 Bitrate (requires stream analysis)', 'codec' => '🎬 Codec Preference (HEVC/H264)', 'keyword_match' => '🏷️ Keyword Match', ]) diff --git a/app/Http/Controllers/PlaylistController.php b/app/Http/Controllers/PlaylistController.php index 0b6b7ead0..2b7590f15 100644 --- a/app/Http/Controllers/PlaylistController.php +++ b/app/Http/Controllers/PlaylistController.php @@ -275,7 +275,7 @@ public function mergeChannels(Request $request, string $uuid): JsonResponse ], 'group_priorities.*.weight' => 'required_with:group_priorities|integer|min:1|max:1000', 'priority_attributes' => 'sometimes|array', - 'priority_attributes.*' => 'string|in:playlist_priority,group_priority,catchup_support,resolution,codec,keyword_match', + 'priority_attributes.*' => 'string|in:playlist_priority,group_priority,catchup_support,resolution,fps,bitrate,codec,keyword_match', ]); $config = $playlist->auto_merge_config ?? []; diff --git a/app/Jobs/MergeChannels.php b/app/Jobs/MergeChannels.php index 5ce414c2e..5272eab7a 100644 --- a/app/Jobs/MergeChannels.php +++ b/app/Jobs/MergeChannels.php @@ -26,6 +26,8 @@ class MergeChannels implements ShouldQueue 'group_priority', 'catchup_support', 'resolution', + 'fps', + 'bitrate', 'codec', 'keyword_match', ]; @@ -390,6 +392,8 @@ protected function calculateChannelScore(Channel $channel, array $playlistPriori 'group_priority' => $this->getGroupPriorityScore($channel), 'catchup_support' => $this->getCatchupScore($channel), 'resolution' => $this->getResolutionScore($channel), + 'fps' => $this->getFpsScore($channel), + 'bitrate' => $this->getBitrateScore($channel), 'codec' => $this->getCodecScore($channel), 'keyword_match' => $this->getKeywordScore($channel), default => 0, @@ -486,6 +490,28 @@ protected function getResolutionScore(Channel $channel): int return min(100, (int) ($resolution / 82944)); } + /** + * Get FPS score (normalized 0-100). + */ + protected function getFpsScore(Channel $channel): int + { + $fps = $this->getFps($channel); + + // Normalize: 25/30 fps = ~25-30, 50/60 fps = ~50-60, 100+ fps caps at 100 + return min(100, (int) round($fps)); + } + + /** + * Get bitrate score (normalized 0-100). + */ + protected function getBitrateScore(Channel $channel): int + { + $kbps = $this->getBitrate($channel); + + // Normalize: 5000 kbps = 50, 10000+ kbps caps at 100 + return min(100, (int) ($kbps / 100)); + } + /** * Get codec preference score. */ @@ -645,6 +671,34 @@ protected function getResolution(Channel $channel): int return 0; } + /** + * Get video frame rate (FPS) from channel stream stats. + * + * Routes through getEmbyStreamStats() so the fractional-rate parsing + * (e.g. "30000/1001" → 29.97) is reused. + */ + protected function getFps(Channel $channel): float + { + $channel->ensureStreamStats(); + $emby = $channel->getEmbyStreamStats(); + + return (float) ($emby['source_fps'] ?? 0.0); + } + + /** + * Get video bitrate (kbps) from channel stream stats. + * + * Routes through getEmbyStreamStats() so the format-level bitrate + * fallback (used when per-stream video bit_rate is null for MPEG-TS) applies. + */ + protected function getBitrate(Channel $channel): int + { + $channel->ensureStreamStats(); + $emby = $channel->getEmbyStreamStats(); + + return (int) ($emby['ffmpeg_output_bitrate'] ?? 0); + } + protected function sendCompletionNotification(int $processed, int $deactivatedCount = 0): void { if ($processed > 0) { diff --git a/app/Models/Channel.php b/app/Models/Channel.php index e0bb4d24a..13df13f00 100644 --- a/app/Models/Channel.php +++ b/app/Models/Channel.php @@ -357,7 +357,12 @@ public function ensureStreamStats(): array /** * Run ffprobe against this channel's stream URL and return parsed stats. * - * @return array{streams: array} + * Returns a list of entries. Per-stream entries are keyed under `stream` and + * carry a `codec_type`. A trailing entry keyed under `format` carries + * container-level metadata (bit_rate, duration, format_name) used as a + * fallback when per-stream video `bit_rate` is null (common for MPEG-TS). + * + * @return array, format?: array{bit_rate: ?string, duration: ?string, format_name: ?string}}> */ public function probeStreamStats(int $timeout = 15): array { @@ -367,7 +372,7 @@ public function probeStreamStats(int $timeout = 15): array return []; } - $process = new SymfonyProcess(['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_streams', $url]); + $process = new SymfonyProcess(['ffprobe', '-v', 'quiet', '-print_format', 'json', '-show_streams', '-show_format', $url]); $process->setTimeout($timeout); $process->run(); @@ -404,6 +409,16 @@ public function probeStreamStats(int $timeout = 15): array } } + if (isset($json['format']) && is_array($json['format'])) { + $streamStats[] = [ + 'format' => [ + 'bit_rate' => $json['format']['bit_rate'] ?? null, + 'duration' => $json['format']['duration'] ?? null, + 'format_name' => $json['format']['format_name'] ?? null, + ], + ]; + } + return $streamStats; } } catch (Exception $e) { @@ -427,7 +442,13 @@ public function getEmbyStreamStats(): array $video = null; $audio = null; + $format = null; foreach ($stats as $entry) { + if (isset($entry['format']) && is_array($entry['format'])) { + $format = $entry['format']; + + continue; + } $stream = $entry['stream'] ?? $entry; if (($stream['codec_type'] ?? '') === 'video' && ! $video) { $video = $stream; @@ -462,8 +483,15 @@ public function getEmbyStreamStats(): array $result['source_fps'] = $fps ? (float) $fps : null; } - // Convert bps to kbps + // Per-stream video bit_rate is often null for MPEG-TS / HLS containers. + // Fall back to (format.bit_rate − audio.bit_rate). Includes muxing overhead + // (~3-5% inflation) but is good enough for ranking and Technical Details display. $bitRate = $video['bit_rate'] ?? null; + if ($bitRate === null && $format !== null && isset($format['bit_rate'])) { + $audioBps = isset($audio['bit_rate']) ? (float) $audio['bit_rate'] : 0.0; + $videoBps = max(0.0, (float) $format['bit_rate'] - $audioBps); + $bitRate = $videoBps > 0 ? $videoBps : null; + } $result['ffmpeg_output_bitrate'] = $bitRate ? round((float) $bitRate / 1000, 1) : null; } @@ -530,6 +558,9 @@ public function getStreamStatsForDisplay(): array $allStreams = []; foreach ($stats as $index => $entry) { + if (isset($entry['format']) && ! isset($entry['stream'])) { + continue; + } $stream = $entry['stream'] ?? $entry; $type = $stream['codec_type'] ?? null; diff --git a/app/Services/PlaylistService.php b/app/Services/PlaylistService.php index 0d4b1e9da..f9194e79b 100644 --- a/app/Services/PlaylistService.php +++ b/app/Services/PlaylistService.php @@ -1013,6 +1013,8 @@ public static function getMergeFormSchema(): array 'group_priority' => '📁 Group Priority (from weights above)', 'catchup_support' => '⏪ Catch-up/Replay Support', 'resolution' => '📺 Resolution (requires stream analysis)', + 'fps' => '🎞️ Frame Rate (requires stream analysis)', + 'bitrate' => '📊 Bitrate (requires stream analysis)', 'codec' => '🎬 Codec Preference (HEVC/H264)', 'keyword_match' => '🏷️ Keyword Match', ]) diff --git a/tests/Feature/ChannelStreamStatsTest.php b/tests/Feature/ChannelStreamStatsTest.php index 9c8ec0ec6..35c48ee01 100644 --- a/tests/Feature/ChannelStreamStatsTest.php +++ b/tests/Feature/ChannelStreamStatsTest.php @@ -208,3 +208,153 @@ expect($channel->stream_stats)->toBe([]) ->and($channel->stream_stats_probed_at)->toBeNull(); }); + +// ────────────────────────────────────────────────────────────────────────────── +// Format-level fallback for video bitrate (Issue #330 — Smart Channels) +// ────────────────────────────────────────────────────────────────────────────── + +it('falls back to format.bit_rate minus audio.bit_rate when video bit_rate is null', function () { + $channel = Channel::factory()->for($this->playlist)->create([ + 'stream_stats' => [ + ['stream' => [ + 'codec_type' => 'video', + 'codec_name' => 'h264', + 'width' => 1920, + 'height' => 1080, + 'bit_rate' => null, // typical for MPEG-TS + ]], + ['stream' => [ + 'codec_type' => 'audio', + 'codec_name' => 'aac', + 'channels' => 2, + 'bit_rate' => '128000', + ]], + ['format' => [ + 'bit_rate' => '5128000', + 'duration' => '10.0', + 'format_name' => 'mpegts', + ]], + ], + ]); + + expect($channel->getEmbyStreamStats()['ffmpeg_output_bitrate'])->toBe(5000.0); +}); + +it('prefers per-stream video bit_rate over format-level fallback', function () { + $channel = Channel::factory()->for($this->playlist)->create([ + 'stream_stats' => [ + ['stream' => [ + 'codec_type' => 'video', + 'codec_name' => 'h264', + 'width' => 1920, + 'height' => 1080, + 'bit_rate' => '4500000', + ]], + ['format' => [ + 'bit_rate' => '9999000', + 'duration' => '10.0', + 'format_name' => 'mpegts', + ]], + ], + ]); + + expect($channel->getEmbyStreamStats()['ffmpeg_output_bitrate'])->toBe(4500.0); +}); + +it('uses format.bit_rate directly when audio bit_rate is unavailable', function () { + $channel = Channel::factory()->for($this->playlist)->create([ + 'stream_stats' => [ + ['stream' => [ + 'codec_type' => 'video', + 'codec_name' => 'h264', + 'width' => 1920, + 'height' => 1080, + 'bit_rate' => null, + ]], + ['stream' => [ + 'codec_type' => 'audio', + 'codec_name' => 'aac', + 'bit_rate' => null, + ]], + ['format' => [ + 'bit_rate' => '5000000', + 'duration' => '10.0', + 'format_name' => 'mpegts', + ]], + ], + ]); + + expect($channel->getEmbyStreamStats()['ffmpeg_output_bitrate'])->toBe(5000.0); +}); + +it('clamps fallback video bitrate to null when audio bit_rate exceeds format bit_rate', function () { + $channel = Channel::factory()->for($this->playlist)->create([ + 'stream_stats' => [ + ['stream' => [ + 'codec_type' => 'video', + 'codec_name' => 'h264', + 'width' => 1920, + 'height' => 1080, + 'bit_rate' => null, + ]], + ['stream' => [ + 'codec_type' => 'audio', + 'codec_name' => 'aac', + 'bit_rate' => '10000000', + ]], + ['format' => [ + 'bit_rate' => '5000000', + 'duration' => '10.0', + 'format_name' => 'mpegts', + ]], + ], + ]); + + expect($channel->getEmbyStreamStats()['ffmpeg_output_bitrate'])->toBeNull(); +}); + +it('parses old stream_stats rows without a format entry without errors', function () { + $channel = Channel::factory()->for($this->playlist)->create([ + 'stream_stats' => [ + ['stream' => [ + 'codec_type' => 'video', + 'codec_name' => 'h264', + 'width' => 1920, + 'height' => 1080, + 'bit_rate' => null, + ]], + ['stream' => [ + 'codec_type' => 'audio', + 'codec_name' => 'aac', + 'bit_rate' => '128000', + ]], + ], + ]); + + $result = $channel->getEmbyStreamStats(); + + expect($result['ffmpeg_output_bitrate'])->toBeNull() + ->and($result['resolution'])->toBe('1920x1080') + ->and($result['audio_bitrate'])->toBe(128.0); +}); + +// ────────────────────────────────────────────────────────────────────────────── +// getStreamStatsForDisplay() with format entry +// ────────────────────────────────────────────────────────────────────────────── + +it('skips format entries when building all_streams display list', function () { + $channel = Channel::factory()->for($this->playlist)->create([ + 'stream_stats' => [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 1920, 'height' => 1080, 'tags' => []]], + ['stream' => ['codec_type' => 'audio', 'codec_name' => 'aac', 'channels' => 2, 'tags' => ['language' => 'eng']]], + ['stream' => ['codec_type' => 'audio', 'codec_name' => 'ac3', 'channels' => 6, 'tags' => ['language' => 'spa']]], + ['format' => ['bit_rate' => '5000000', 'duration' => '10.0', 'format_name' => 'mpegts']], + ], + ]); + + $display = $channel->getStreamStatsForDisplay(); + + expect($display['advanced']['all_streams'])->toHaveCount(3) + ->and(collect($display['advanced']['all_streams'])->pluck('codec')->all()) + ->toBe(['h264', 'aac', 'ac3']); +}); diff --git a/tests/Feature/MergeChannelsFpsBitrateScoringTest.php b/tests/Feature/MergeChannelsFpsBitrateScoringTest.php new file mode 100644 index 000000000..8ca0a75e5 --- /dev/null +++ b/tests/Feature/MergeChannelsFpsBitrateScoringTest.php @@ -0,0 +1,248 @@ +user = User::factory()->create(); + $this->actingAs($this->user); + + $this->playlist = Playlist::factory()->createQuietly([ + 'user_id' => $this->user->id, + ]); + + $this->group = Group::factory()->createQuietly([ + 'user_id' => $this->user->id, + 'playlist_id' => $this->playlist->id, + ]); +}); + +/** + * Helper: build stream_stats array with given fps + video bitrate (kbps). + * Includes a format entry so the value path matches a real probe. + */ +function streamStats(?float $fps = null, ?int $videoKbps = null, int $audioKbps = 128, ?int $width = 1920, ?int $height = 1080): array +{ + $stats = []; + + $videoStream = [ + 'codec_type' => 'video', + 'codec_name' => 'h264', + 'width' => $width, + 'height' => $height, + ]; + if ($fps !== null) { + $videoStream['avg_frame_rate'] = $fps.'/1'; + } + if ($videoKbps !== null) { + $videoStream['bit_rate'] = (string) ($videoKbps * 1000); + } + $stats[]['stream'] = $videoStream; + + $stats[]['stream'] = [ + 'codec_type' => 'audio', + 'codec_name' => 'aac', + 'channels' => 2, + 'bit_rate' => (string) ($audioKbps * 1000), + ]; + + return $stats; +} + +it('selects high-fps channel as master when fps is the priority', function () { + $low = Channel::factory()->create([ + 'user_id' => $this->user->id, + 'playlist_id' => $this->playlist->id, + 'group_id' => $this->group->id, + 'stream_id' => 'fps-test', + 'name' => 'Low FPS', + 'enabled' => true, + 'can_merge' => true, + 'stream_stats' => streamStats(fps: 25), + 'stream_stats_probed_at' => now(), + ]); + + $high = Channel::factory()->create([ + 'user_id' => $this->user->id, + 'playlist_id' => $this->playlist->id, + 'group_id' => $this->group->id, + 'stream_id' => 'fps-test', + 'name' => 'High FPS', + 'enabled' => true, + 'can_merge' => true, + 'stream_stats' => streamStats(fps: 60), + 'stream_stats_probed_at' => now(), + ]); + + (new MergeChannels( + user: $this->user, + playlists: collect([['playlist_failover_id' => $this->playlist->id]]), + playlistId: $this->playlist->id, + weightedConfig: [ + 'priority_attributes' => ['fps'], + 'priority_keywords' => [], + 'prefer_codec' => null, + 'exclude_disabled_groups' => false, + 'group_priorities' => [], + ], + ))->handle(); + + $this->assertDatabaseHas('channel_failovers', [ + 'channel_id' => $high->id, + 'channel_failover_id' => $low->id, + ]); +}); + +it('selects high-bitrate channel as master when bitrate is the priority', function () { + $low = Channel::factory()->create([ + 'user_id' => $this->user->id, + 'playlist_id' => $this->playlist->id, + 'group_id' => $this->group->id, + 'stream_id' => 'br-test', + 'name' => 'Low Bitrate', + 'enabled' => true, + 'can_merge' => true, + 'stream_stats' => streamStats(videoKbps: 2000), + 'stream_stats_probed_at' => now(), + ]); + + $high = Channel::factory()->create([ + 'user_id' => $this->user->id, + 'playlist_id' => $this->playlist->id, + 'group_id' => $this->group->id, + 'stream_id' => 'br-test', + 'name' => 'High Bitrate', + 'enabled' => true, + 'can_merge' => true, + 'stream_stats' => streamStats(videoKbps: 8000), + 'stream_stats_probed_at' => now(), + ]); + + (new MergeChannels( + user: $this->user, + playlists: collect([['playlist_failover_id' => $this->playlist->id]]), + playlistId: $this->playlist->id, + weightedConfig: [ + 'priority_attributes' => ['bitrate'], + 'priority_keywords' => [], + 'prefer_codec' => null, + 'exclude_disabled_groups' => false, + 'group_priorities' => [], + ], + ))->handle(); + + $this->assertDatabaseHas('channel_failovers', [ + 'channel_id' => $high->id, + 'channel_failover_id' => $low->id, + ]); +}); + +it('uses format-level bitrate fallback for ranking when per-stream video bit_rate is null', function () { + // Channel with format-level bitrate only (typical for MPEG-TS): 8000 kbps total. + $high = Channel::factory()->create([ + 'user_id' => $this->user->id, + 'playlist_id' => $this->playlist->id, + 'group_id' => $this->group->id, + 'stream_id' => 'fmt-test', + 'name' => 'Format Fallback Hi', + 'enabled' => true, + 'can_merge' => true, + 'stream_stats' => [ + ['stream' => [ + 'codec_type' => 'video', 'codec_name' => 'h264', + 'width' => 1920, 'height' => 1080, + 'bit_rate' => null, + ]], + ['stream' => [ + 'codec_type' => 'audio', 'codec_name' => 'aac', + 'channels' => 2, 'bit_rate' => '128000', + ]], + ['format' => ['bit_rate' => '8128000', 'duration' => '10.0', 'format_name' => 'mpegts']], + ], + 'stream_stats_probed_at' => now(), + ]); + + $low = Channel::factory()->create([ + 'user_id' => $this->user->id, + 'playlist_id' => $this->playlist->id, + 'group_id' => $this->group->id, + 'stream_id' => 'fmt-test', + 'name' => 'Format Fallback Lo', + 'enabled' => true, + 'can_merge' => true, + 'stream_stats' => streamStats(videoKbps: 2000), + 'stream_stats_probed_at' => now(), + ]); + + (new MergeChannels( + user: $this->user, + playlists: collect([['playlist_failover_id' => $this->playlist->id]]), + playlistId: $this->playlist->id, + weightedConfig: [ + 'priority_attributes' => ['bitrate'], + 'priority_keywords' => [], + 'prefer_codec' => null, + 'exclude_disabled_groups' => false, + 'group_priorities' => [], + ], + ))->handle(); + + $this->assertDatabaseHas('channel_failovers', [ + 'channel_id' => $high->id, + 'channel_failover_id' => $low->id, + ]); +}); + +it('treats missing stream_stats as zero score for fps', function () { + $low = Channel::factory()->create([ + 'user_id' => $this->user->id, + 'playlist_id' => $this->playlist->id, + 'group_id' => $this->group->id, + 'stream_id' => 'fps-empty', + 'name' => 'No Stats', + 'sort' => 1.0, + 'enabled' => true, + 'can_merge' => true, + 'stream_stats' => null, + 'stream_stats_probed_at' => now(), + 'url' => null, + 'url_custom' => null, + ]); + + $high = Channel::factory()->create([ + 'user_id' => $this->user->id, + 'playlist_id' => $this->playlist->id, + 'group_id' => $this->group->id, + 'stream_id' => 'fps-empty', + 'name' => 'Has Stats', + 'sort' => 2.0, + 'enabled' => true, + 'can_merge' => true, + 'stream_stats' => streamStats(fps: 50), + 'stream_stats_probed_at' => now(), + ]); + + (new MergeChannels( + user: $this->user, + playlists: collect([['playlist_failover_id' => $this->playlist->id]]), + playlistId: $this->playlist->id, + weightedConfig: [ + 'priority_attributes' => ['fps'], + 'priority_keywords' => [], + 'prefer_codec' => null, + 'exclude_disabled_groups' => false, + 'group_priorities' => [], + ], + ))->handle(); + + $this->assertDatabaseHas('channel_failovers', [ + 'channel_id' => $high->id, + 'channel_failover_id' => $low->id, + ]); +}); From 7421ce7b0293fcee353637ee215271e55a64ec94 Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 22:11:42 +0100 Subject: [PATCH 02/16] fix: Sample packets to measure video bitrate for live MPEG-TS streams ffprobe leaves both per-stream and format-level bit_rate null for live streams without a known duration, so the format-level fallback added in the previous commit had nothing to fall back to. Probe now runs a short follow-up ffprobe with -show_packets -read_intervals "%+5" -select_streams v:0 when the metadata pass yields no video bit_rate, sums packet sizes over the captured pts span, and back-fills the video stream's bit_rate field. The format-level fallback in getEmbyStreamStats remains useful for VOD / MP4 sources that populate format.bit_rate but not per-stream bit_rate, so both paths coexist. --- app/Models/Channel.php | 93 +++++++++++++++++++++++- tests/Feature/ChannelStreamStatsTest.php | 43 +++++++++++ 2 files changed, 134 insertions(+), 2 deletions(-) diff --git a/app/Models/Channel.php b/app/Models/Channel.php index 13df13f00..2441345f7 100644 --- a/app/Models/Channel.php +++ b/app/Models/Channel.php @@ -359,8 +359,12 @@ public function ensureStreamStats(): array * * Returns a list of entries. Per-stream entries are keyed under `stream` and * carry a `codec_type`. A trailing entry keyed under `format` carries - * container-level metadata (bit_rate, duration, format_name) used as a - * fallback when per-stream video `bit_rate` is null (common for MPEG-TS). + * container-level metadata (bit_rate, duration, format_name). + * + * For live MPEG-TS / HLS streams, neither the per-stream video `bit_rate` + * nor the format-level `bit_rate` is typically populated (no known + * duration). In that case a short packet-sampling probe measures the actual + * throughput and back-fills the video stream's `bit_rate` field. * * @return array, format?: array{bit_rate: ?string, duration: ?string, format_name: ?string}}> */ @@ -386,8 +390,12 @@ public function probeStreamStats(int $timeout = 15): array $json = json_decode($output, true); if (isset($json['streams']) && is_array($json['streams'])) { $streamStats = []; + $videoBitRateMissing = false; foreach ($json['streams'] as $stream) { if (isset($stream['codec_name'])) { + if (($stream['codec_type'] ?? '') === 'video' && empty($stream['bit_rate'])) { + $videoBitRateMissing = true; + } $streamStats[]['stream'] = [ 'codec_type' => $stream['codec_type'], 'codec_name' => $stream['codec_name'], @@ -409,6 +417,19 @@ public function probeStreamStats(int $timeout = 15): array } } + if ($videoBitRateMissing) { + $sampledBps = $this->sampleVideoBitrate($url, $timeout); + if ($sampledBps !== null) { + foreach ($streamStats as &$entry) { + if (isset($entry['stream']) && ($entry['stream']['codec_type'] ?? '') === 'video') { + $entry['stream']['bit_rate'] = (string) $sampledBps; + break; + } + } + unset($entry); + } + } + if (isset($json['format']) && is_array($json['format'])) { $streamStats[] = [ 'format' => [ @@ -428,6 +449,74 @@ public function probeStreamStats(int $timeout = 15): array return []; } + /** + * Measure video bitrate by sampling packets from the live stream. + * + * Used when ffprobe's metadata pass leaves both per-stream and format-level + * `bit_rate` null (common for live MPEG-TS / HLS). Reads ~5 seconds of + * video packets and computes (bytes * 8 / duration). Returns bps as an + * integer, or null if no usable packets were captured. + */ + protected function sampleVideoBitrate(string $url, int $timeout): ?int + { + try { + $process = new SymfonyProcess([ + 'ffprobe', + '-v', 'quiet', + '-print_format', 'json', + '-read_intervals', '%+5', + '-select_streams', 'v:0', + '-show_entries', 'packet=size,pts_time', + $url, + ]); + $process->setTimeout($timeout); + $process->run(); + + if ($process->getExitCode() !== 0) { + return null; + } + + $json = json_decode($process->getOutput(), true); + + return self::computeBitrateFromPackets($json['packets'] ?? []); + } catch (Exception $e) { + Log::error("Error sampling video bitrate for channel \"{$this->title}\": {$e->getMessage()}"); + + return null; + } + } + + /** + * Compute bitrate (bps) from a sequence of ffprobe `-show_packets` entries. + * + * Returns null when there are too few packets, the time span is non-positive, + * or the total byte count is zero — i.e. when no meaningful measurement can + * be derived. + * + * @param array $packets + */ + public static function computeBitrateFromPackets(array $packets): ?int + { + if (count($packets) < 2) { + return null; + } + + $totalBytes = 0; + foreach ($packets as $packet) { + $totalBytes += (int) ($packet['size'] ?? 0); + } + + $firstPts = (float) ($packets[0]['pts_time'] ?? 0); + $lastPts = (float) ($packets[count($packets) - 1]['pts_time'] ?? 0); + $duration = $lastPts - $firstPts; + + if ($duration <= 0 || $totalBytes <= 0) { + return null; + } + + return (int) round($totalBytes * 8 / $duration); + } + /** * Build stream_stats in the format expected by emby-xtream (Dispatcharr-compatible). * diff --git a/tests/Feature/ChannelStreamStatsTest.php b/tests/Feature/ChannelStreamStatsTest.php index 35c48ee01..525cda7ad 100644 --- a/tests/Feature/ChannelStreamStatsTest.php +++ b/tests/Feature/ChannelStreamStatsTest.php @@ -342,6 +342,49 @@ // getStreamStatsForDisplay() with format entry // ────────────────────────────────────────────────────────────────────────────── +// ────────────────────────────────────────────────────────────────────────────── +// computeBitrateFromPackets() — packet-sampling math used as a fallback when +// neither per-stream nor format-level bit_rate is populated. +// ────────────────────────────────────────────────────────────────────────────── + +it('computes bitrate from packet sizes and pts span', function () { + // 125 packets totalling ~3.75 MB over ~5 s ≈ 6 Mbps + $packets = [ + ['size' => '750000', 'pts_time' => '88441.900000'], + ['size' => '750000', 'pts_time' => '88443.150000'], + ['size' => '750000', 'pts_time' => '88444.400000'], + ['size' => '750000', 'pts_time' => '88445.650000'], + ['size' => '750000', 'pts_time' => '88446.900000'], + ]; + + $bps = Channel::computeBitrateFromPackets($packets); + + expect($bps)->toBe(6_000_000); +}); + +it('returns null when there are fewer than 2 packets', function () { + expect(Channel::computeBitrateFromPackets([]))->toBeNull() + ->and(Channel::computeBitrateFromPackets([['size' => '1000', 'pts_time' => '0.0']]))->toBeNull(); +}); + +it('returns null when packet pts span is zero or negative', function () { + $packets = [ + ['size' => '1000', 'pts_time' => '5.0'], + ['size' => '1000', 'pts_time' => '5.0'], + ]; + + expect(Channel::computeBitrateFromPackets($packets))->toBeNull(); +}); + +it('returns null when total packet bytes is zero', function () { + $packets = [ + ['size' => '0', 'pts_time' => '0.0'], + ['size' => '0', 'pts_time' => '5.0'], + ]; + + expect(Channel::computeBitrateFromPackets($packets))->toBeNull(); +}); + it('skips format entries when building all_streams display list', function () { $channel = Channel::factory()->for($this->playlist)->create([ 'stream_stats' => [ From 1a2560145778a251f368748b1c7e263290aad7fe Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 22:38:57 +0100 Subject: [PATCH 03/16] feat: Periodic failover rescoring + virtual primary bulk action (#330) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Slice 2 of Smart Channels: keep failover ordering aligned with current channel quality without ever promoting or replacing the master. Migration adds three columns to playlists: - auto_rescore_failovers_interval (off / daily / weekly) - last_failover_rescore_at - failover_rescore_staleness_days (default 7) New job RescoreChannelFailovers iterates failover groups owned by the playlist, re-probes any member whose stream_stats are older than the staleness window (throttled via ProviderRequestDelay), scores members through ChannelMergeScorer, and updates channel_failovers.sort so the highest-scoring failover sits at sort=0. The master is intentionally left alone — for "virtual primary" masters (custom channel, empty URL) PlaylistUrlService::getChannelUrl already falls back to the first failover, so re-ordering is enough to switch the effective stream URL. Console command app:rescore-channel-failovers iterates playlists with a configured interval and dispatches the job when due. Schedule registers it to run hourly with withoutOverlapping. Direct dispatch via the "Re-score failovers now" header action on the Playlist edit page covers the manual case. ChannelMergeScorer extracts the previously-private MergeChannels scoring logic into a reusable service. MergeChannels now delegates to it so all existing scoring behavior is preserved with no test changes required. VirtualPrimaryCreator service plus a "Make virtual primary" channels bulk action build a custom channel from a selection: identity copied from the highest-scoring source, all selected channels attached as sorted failovers, with an optional toggle to disable the sources. --- .../RescoreChannelFailoversCommand.php | 66 +++++ .../Resources/Channels/ChannelResource.php | 43 +++ .../Resources/Playlists/PlaylistResource.php | 43 +++ app/Jobs/MergeChannels.php | 266 ++---------------- app/Jobs/RescoreChannelFailovers.php | 180 ++++++++++++ app/Models/Playlist.php | 2 + app/Services/Channels/ChannelMergeScorer.php | 257 +++++++++++++++++ .../Channels/VirtualPrimaryCreator.php | 115 ++++++++ ...er_rescore_settings_to_playlists_table.php | 34 +++ routes/console.php | 5 + .../RescoreChannelFailoversCommandTest.php | 94 +++++++ tests/Feature/RescoreChannelFailoversTest.php | 206 ++++++++++++++ tests/Feature/VirtualPrimaryCreatorTest.php | 160 +++++++++++ 13 files changed, 1230 insertions(+), 241 deletions(-) create mode 100644 app/Console/Commands/RescoreChannelFailoversCommand.php create mode 100644 app/Jobs/RescoreChannelFailovers.php create mode 100644 app/Services/Channels/ChannelMergeScorer.php create mode 100644 app/Services/Channels/VirtualPrimaryCreator.php create mode 100644 database/migrations/2026_04_26_221703_add_failover_rescore_settings_to_playlists_table.php create mode 100644 tests/Feature/RescoreChannelFailoversCommandTest.php create mode 100644 tests/Feature/RescoreChannelFailoversTest.php create mode 100644 tests/Feature/VirtualPrimaryCreatorTest.php diff --git a/app/Console/Commands/RescoreChannelFailoversCommand.php b/app/Console/Commands/RescoreChannelFailoversCommand.php new file mode 100644 index 000000000..dde85cf0d --- /dev/null +++ b/app/Console/Commands/RescoreChannelFailoversCommand.php @@ -0,0 +1,66 @@ + 86400, + 'weekly' => 604800, + ]; + + protected $signature = 'app:rescore-channel-failovers {playlist? : Optional playlist ID to rescore directly}'; + + protected $description = 'Dispatch RescoreChannelFailovers for any playlist whose configured interval has elapsed'; + + public function handle(): int + { + $playlistId = $this->argument('playlist'); + + if ($playlistId !== null) { + $playlist = Playlist::find($playlistId); + if (! $playlist) { + $this->error("Playlist {$playlistId} not found"); + + return Command::FAILURE; + } + + dispatch(new RescoreChannelFailovers($playlist->id)); + $this->info("Dispatched failover rescore for playlist {$playlist->id}"); + + return Command::SUCCESS; + } + + $playlists = Playlist::query() + ->whereNotNull('auto_rescore_failovers_interval') + ->get(); + + $dispatched = 0; + foreach ($playlists as $playlist) { + $intervalKey = strtolower((string) $playlist->auto_rescore_failovers_interval); + $intervalSeconds = self::INTERVALS[$intervalKey] ?? null; + if ($intervalSeconds === null) { + continue; + } + + $lastRun = $playlist->last_failover_rescore_at; + if ($lastRun !== null && $lastRun->copy()->addSeconds($intervalSeconds)->gt(now())) { + continue; + } + + dispatch(new RescoreChannelFailovers($playlist->id)); + $dispatched++; + } + + $this->info("Dispatched {$dispatched} playlist(s) for failover rescoring"); + + return Command::SUCCESS; + } +} diff --git a/app/Filament/Resources/Channels/ChannelResource.php b/app/Filament/Resources/Channels/ChannelResource.php index a803a825b..2c4cdf361 100644 --- a/app/Filament/Resources/Channels/ChannelResource.php +++ b/app/Filament/Resources/Channels/ChannelResource.php @@ -21,6 +21,7 @@ use App\Models\Group; use App\Models\Playlist; use App\Models\StreamProfile; +use App\Services\Channels\VirtualPrimaryCreator; use App\Services\DateFormatService; use App\Services\EpgCacheService; use App\Services\LogoCacheService; @@ -1115,6 +1116,48 @@ private static function getBulkActionSchema(bool $addToCustom, bool $includeReco ->modalIcon('heroicon-o-arrow-path-rounded-square') ->modalDescription(__('Add the selected channel(s) to the chosen channel as failover sources.')) ->modalSubmitActionLabel(__('Add failovers now')), + BulkAction::make('make_virtual_primary') + ->label(__('Make virtual primary')) + ->schema([ + TextInput::make('title') + ->label(__('Virtual channel title')) + ->helperText(__('Leave empty to copy the highest-scoring source\'s title.')) + ->maxLength(255), + Toggle::make('disable_sources') + ->label(__('Disable source channels')) + ->helperText(__('When enabled, the selected source channels will be disabled after being attached as failovers. They\'ll only be reachable via the new virtual primary.')) + ->default(false) + ->inline(false), + ]) + ->action(function (Collection $records, array $data): void { + if ($records->isEmpty()) { + return; + } + + $playlists = $records->pluck('playlist_id')->unique(); + $playlistForScoring = $playlists->count() === 1 + ? Playlist::find($playlists->first()) + : null; + + VirtualPrimaryCreator::fromPlaylist($playlistForScoring)->create( + channels: $records, + title: $data['title'] ?? null, + disableSources: (bool) ($data['disable_sources'] ?? false), + ); + }) + ->after(function () { + Notification::make() + ->success() + ->title(__('Virtual primary created')) + ->body(__('A custom channel was created with the selected sources attached as failovers, ranked by quality.')) + ->send(); + }) + ->deselectRecordsAfterCompletion() + ->requiresConfirmation() + ->icon('heroicon-o-arrow-trending-up') + ->modalIcon('heroicon-o-arrow-trending-up') + ->modalDescription(__('Create a custom "virtual primary" channel from the selected channels. The highest-scoring source\'s title, logo, and EPG mapping will be copied. All selected channels become failovers, sorted by score, and the playlist will stream the top failover automatically.')) + ->modalSubmitActionLabel(__('Create virtual primary')), ]), // -- Probing -- diff --git a/app/Filament/Resources/Playlists/PlaylistResource.php b/app/Filament/Resources/Playlists/PlaylistResource.php index 66027fb69..f2300c1b5 100644 --- a/app/Filament/Resources/Playlists/PlaylistResource.php +++ b/app/Filament/Resources/Playlists/PlaylistResource.php @@ -19,6 +19,7 @@ use App\Jobs\ProcessM3uImport; use App\Jobs\ProcessM3uImportSeries; use App\Jobs\ProcessVodChannels; +use App\Jobs\RescoreChannelFailovers; use App\Jobs\SyncMediaServer; use App\Livewire\EpgViewer; use App\Livewire\MediaFlowProxyUrl; @@ -615,6 +616,26 @@ public static function getHeaderActions(): array ->send(); }) ->visible(fn ($record) => $record->isProcessing()), + Action::make('rescore_failovers') + ->label(__('Re-score failovers now')) + ->icon('heroicon-o-arrow-trending-up') + ->color('info') + ->action(function ($record) { + app('Illuminate\Contracts\Bus\Dispatcher') + ->dispatch(new RescoreChannelFailovers($record->id)); + })->after(function () { + Notification::make() + ->success() + ->title(__('Failover rescoring queued')) + ->body(__('Failover groups will be re-scored in the background. You can keep using the app while this runs.')) + ->duration(5000) + ->send(); + }) + ->visible(fn ($record): bool => (bool) ($record->auto_merge_channels_enabled ?? false)) + ->requiresConfirmation() + ->modalIcon('heroicon-o-arrow-trending-up') + ->modalDescription(__('Queue a one-off failover rescore for this playlist? Stale channels will be re-probed (subject to the configured staleness window) and failovers re-sorted so the highest-quality source sits first.')) + ->modalSubmitActionLabel(__('Yes, rescore now')), Action::make('Download M3U') ->label(__('Download M3U')) ->icon('heroicon-o-arrow-down-tray') @@ -2094,6 +2115,28 @@ public static function getFormSections($creating = false, $includeAuth = false): } }), ]), + + Fieldset::make(__('Periodic Failover Rescoring (optional)')) + ->columnSpanFull() + ->columns(2) + ->hidden(fn (Get $get): bool => ! $get('auto_merge_channels_enabled')) + ->schema([ + Select::make('auto_rescore_failovers_interval') + ->label(__('Re-score failovers')) + ->options([ + 'daily' => __('Daily'), + 'weekly' => __('Weekly'), + ]) + ->placeholder(__('Off')) + ->helperText(__('Periodically re-score this playlist\'s failover groups so the highest-quality source bubbles to the top. Master channels are never promoted or replaced; only failover sort order changes.')), + TextInput::make('failover_rescore_staleness_days') + ->label(__('Re-probe channels older than (days)')) + ->numeric() + ->default(7) + ->minValue(0) + ->maxValue(365) + ->helperText(__('Channels whose stream stats are older than this will be re-probed during rescoring. Set to 0 to always re-probe.')), + ]), ]), Section::make(__('Find & Replace Rules')) ->description(__('Define find & replace rules that automatically run after each playlist sync. Rules execute in order.')) diff --git a/app/Jobs/MergeChannels.php b/app/Jobs/MergeChannels.php index 5272eab7a..a75ea5659 100644 --- a/app/Jobs/MergeChannels.php +++ b/app/Jobs/MergeChannels.php @@ -6,6 +6,7 @@ use App\Models\ChannelFailover; use App\Models\Group; use App\Models\Playlist; +use App\Services\Channels\ChannelMergeScorer; use Filament\Notifications\Notification; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; @@ -19,18 +20,11 @@ class MergeChannels implements ShouldQueue use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** - * Default priority attributes order (first = highest priority) + * Default priority attributes order (first = highest priority). + * + * @deprecated Use {@see ChannelMergeScorer::DEFAULT_PRIORITY_ORDER}. Kept here for legacy callers. */ - protected const DEFAULT_PRIORITY_ORDER = [ - 'playlist_priority', - 'group_priority', - 'catchup_support', - 'resolution', - 'fps', - 'bitrate', - 'codec', - 'keyword_match', - ]; + protected const DEFAULT_PRIORITY_ORDER = ChannelMergeScorer::DEFAULT_PRIORITY_ORDER; /** * Cached group priorities for performance @@ -375,45 +369,31 @@ protected function selectMasterByWeightedScore(Collection $group, array $playlis return $topChannels->sortBy('sort')->first(); } + /** + * Build a fresh scorer using this job's weighted config and the supplied playlist priority lookup. + */ + protected function buildScorer(array $playlistPriority): ChannelMergeScorer + { + return new ChannelMergeScorer( + priorityOrder: $this->getPriorityOrder(), + playlistPriority: $playlistPriority, + groupPriorityCache: $this->groupPriorityCache, + preferredCodec: $this->weightedConfig['prefer_codec'] ?? null, + priorityKeywords: $this->weightedConfig['priority_keywords'] ?? [], + ); + } + /** * Calculate weighted score for a channel. */ protected function calculateChannelScore(Channel $channel, array $playlistPriority): int { - $score = 0; - $priorityOrder = $this->getPriorityOrder(); - - // Base multiplier decreases for each priority level - $multiplier = count($priorityOrder) * 1000; - - foreach ($priorityOrder as $attribute) { - $attributeScore = match ($attribute) { - 'playlist_priority' => $this->getPlaylistPriorityScore($channel, $playlistPriority), - 'group_priority' => $this->getGroupPriorityScore($channel), - 'catchup_support' => $this->getCatchupScore($channel), - 'resolution' => $this->getResolutionScore($channel), - 'fps' => $this->getFpsScore($channel), - 'bitrate' => $this->getBitrateScore($channel), - 'codec' => $this->getCodecScore($channel), - 'keyword_match' => $this->getKeywordScore($channel), - default => 0, - }; - - $score += $attributeScore * $multiplier; - $multiplier = max(1, $multiplier - 1000); - } - - return $score; + return $this->buildScorer($playlistPriority)->score($channel); } /** * Get normalized priority order from config. * - * Supports both string array format: - * ['playlist_priority', 'resolution'] - * and object array format: - * [['attribute' => 'playlist_priority'], ['attribute' => 'resolution']] - * * @return array */ protected function getPriorityOrder(): array @@ -422,166 +402,13 @@ protected function getPriorityOrder(): array return $this->normalizedPriorityOrder; } - $allowed = array_flip(self::DEFAULT_PRIORITY_ORDER); - $raw = $this->weightedConfig['priority_attributes'] ?? self::DEFAULT_PRIORITY_ORDER; - - if (! is_array($raw) || empty($raw)) { - $this->normalizedPriorityOrder = self::DEFAULT_PRIORITY_ORDER; - - return $this->normalizedPriorityOrder; - } - - $normalized = []; - foreach ($raw as $item) { - $attribute = is_array($item) ? ($item['attribute'] ?? null) : $item; - if (! is_string($attribute)) { - continue; - } - - $attribute = trim($attribute); - if ($attribute === '' || ! isset($allowed[$attribute])) { - continue; - } - - $normalized[] = $attribute; - } - - $normalized = array_values(array_unique($normalized)); - $this->normalizedPriorityOrder = ! empty($normalized) ? $normalized : self::DEFAULT_PRIORITY_ORDER; + $this->normalizedPriorityOrder = ChannelMergeScorer::normalizePriorityOrder( + $this->weightedConfig['priority_attributes'] ?? null + ); return $this->normalizedPriorityOrder; } - /** - * Get playlist priority score (higher = better). - */ - protected function getPlaylistPriorityScore(Channel $channel, array $playlistPriority): int - { - // Invert priority so lower index = higher score - $priority = $playlistPriority[$channel->playlist_id] ?? 999; - - return max(0, 100 - $priority); - } - - /** - * Get group priority score from config (higher = better). - */ - protected function getGroupPriorityScore(Channel $channel): int - { - return $this->groupPriorityCache[$channel->group_id] ?? 0; - } - - /** - * Get catchup support score. - */ - protected function getCatchupScore(Channel $channel): int - { - return ! empty($channel->catchup) ? 100 : 0; - } - - /** - * Get resolution score (normalized 0-100). - */ - protected function getResolutionScore(Channel $channel): int - { - $resolution = $this->getResolution($channel); - - // Normalize: 4K (3840x2160 = 8294400) = 100, 1080p = ~25, 720p = ~11 - return min(100, (int) ($resolution / 82944)); - } - - /** - * Get FPS score (normalized 0-100). - */ - protected function getFpsScore(Channel $channel): int - { - $fps = $this->getFps($channel); - - // Normalize: 25/30 fps = ~25-30, 50/60 fps = ~50-60, 100+ fps caps at 100 - return min(100, (int) round($fps)); - } - - /** - * Get bitrate score (normalized 0-100). - */ - protected function getBitrateScore(Channel $channel): int - { - $kbps = $this->getBitrate($channel); - - // Normalize: 5000 kbps = 50, 10000+ kbps caps at 100 - return min(100, (int) ($kbps / 100)); - } - - /** - * Get codec preference score. - */ - protected function getCodecScore(Channel $channel): int - { - $preferredCodec = $this->weightedConfig['prefer_codec'] ?? null; - if (! $preferredCodec) { - return 0; - } - - $channelCodec = $this->getCodec($channel); - if (! $channelCodec) { - return 0; - } - - $preferredCodec = strtolower($preferredCodec); - $channelCodec = strtolower($channelCodec); - - $isHevc = str_contains($channelCodec, 'hevc') || str_contains($channelCodec, 'h265') || str_contains($channelCodec, '265'); - $isH264 = str_contains($channelCodec, 'h264') || str_contains($channelCodec, 'avc') || str_contains($channelCodec, '264'); - - if ($preferredCodec === 'hevc' || $preferredCodec === 'h265') { - return $isHevc ? 100 : 0; - } - - if ($preferredCodec === 'h264' || $preferredCodec === 'avc') { - return $isH264 ? 100 : 0; - } - - return 0; - } - - /** - * Get keyword match score. - */ - protected function getKeywordScore(Channel $channel): int - { - $keywords = $this->weightedConfig['priority_keywords'] ?? []; - if (empty($keywords)) { - return 0; - } - - $channelName = strtolower($channel->title ?? $channel->name ?? ''); - $matchCount = 0; - - foreach ($keywords as $keyword) { - if (str_contains($channelName, strtolower($keyword))) { - $matchCount++; - } - } - - // More matches = higher score (cap at 100) - return min(100, $matchCount * 25); - } - - /** - * Get codec from channel stream stats. - */ - protected function getCodec(Channel $channel): ?string - { - $streamStats = $channel->ensureStreamStats(); - foreach ($streamStats as $stream) { - if (isset($stream['stream']['codec_type']) && $stream['stream']['codec_type'] === 'video') { - return $stream['stream']['codec_name'] ?? null; - } - } - - return null; - } - /** * Sort channels by score (descending). */ @@ -598,7 +425,7 @@ protected function sortChannelsByScore(Collection $channels, array $playlistPrio if ($this->checkResolution) { return $channels->sortBy(fn ($channel) => [ $this->preferCatchupAsPrimary && empty($channel->catchup) ? 1 : 0, - -(int) $this->getResolution($channel), + -(int) ChannelMergeScorer::getResolution($channel), (int) ($playlistPriority[$channel->playlist_id] ?? 999), $channel->sort ?? 999999, ]); @@ -626,7 +453,7 @@ protected function selectMasterLegacy(Collection $group, array $playlistPriority $channelsWithResolution = $selectionGroup->map(function ($channel) { return [ 'channel' => $channel, - 'resolution' => $this->getResolution($channel), + 'resolution' => ChannelMergeScorer::getResolution($channel), ]; }); @@ -656,49 +483,6 @@ protected function selectMasterLegacy(Collection $group, array $playlistPriority ])->first(); } - /** - * Get resolution from channel stream stats. - */ - protected function getResolution(Channel $channel): int - { - $streamStats = $channel->ensureStreamStats(); - foreach ($streamStats as $stream) { - if (isset($stream['stream']['codec_type']) && $stream['stream']['codec_type'] === 'video') { - return ($stream['stream']['width'] ?? 0) * ($stream['stream']['height'] ?? 0); - } - } - - return 0; - } - - /** - * Get video frame rate (FPS) from channel stream stats. - * - * Routes through getEmbyStreamStats() so the fractional-rate parsing - * (e.g. "30000/1001" → 29.97) is reused. - */ - protected function getFps(Channel $channel): float - { - $channel->ensureStreamStats(); - $emby = $channel->getEmbyStreamStats(); - - return (float) ($emby['source_fps'] ?? 0.0); - } - - /** - * Get video bitrate (kbps) from channel stream stats. - * - * Routes through getEmbyStreamStats() so the format-level bitrate - * fallback (used when per-stream video bit_rate is null for MPEG-TS) applies. - */ - protected function getBitrate(Channel $channel): int - { - $channel->ensureStreamStats(); - $emby = $channel->getEmbyStreamStats(); - - return (int) ($emby['ffmpeg_output_bitrate'] ?? 0); - } - protected function sendCompletionNotification(int $processed, int $deactivatedCount = 0): void { if ($processed > 0) { diff --git a/app/Jobs/RescoreChannelFailovers.php b/app/Jobs/RescoreChannelFailovers.php new file mode 100644 index 000000000..5738ca8e3 --- /dev/null +++ b/app/Jobs/RescoreChannelFailovers.php @@ -0,0 +1,180 @@ +|null $channelIds Optional master-channel filter (manual scoped runs) + */ + public function __construct( + public int $playlistId, + public ?array $channelIds = null, + ) {} + + public function handle(): void + { + $playlist = Playlist::find($this->playlistId); + if (! $playlist) { + Log::warning("RescoreChannelFailovers: playlist {$this->playlistId} not found"); + + return; + } + + $masterIds = ChannelFailover::query() + ->whereHas('channel', fn ($q) => $q->where('playlist_id', $playlist->id)) + ->when($this->channelIds, fn ($q, $ids) => $q->whereIn('channel_id', $ids)) + ->distinct() + ->pluck('channel_id'); + + if ($masterIds->isEmpty()) { + $playlist->update(['last_failover_rescore_at' => now()]); + + return; + } + + $stalenessDays = (int) ($playlist->failover_rescore_staleness_days ?? 7); + $staleBefore = $stalenessDays > 0 ? Carbon::now()->subDays($stalenessDays) : null; + $probeTimeout = (int) ($playlist->probe_timeout ?? 15); + + $scorer = $this->buildScorer($playlist); + + foreach ($masterIds as $masterId) { + $master = Channel::find($masterId); + if (! $master) { + continue; + } + + $failovers = $master->failoverChannels()->get(); + if ($failovers->isEmpty()) { + continue; + } + + $this->ensureFreshStats($master, $staleBefore, $probeTimeout); + foreach ($failovers as $failover) { + $this->ensureFreshStats($failover, $staleBefore, $probeTimeout); + } + + $this->reorderFailovers($master, $failovers, $scorer); + } + + $playlist->update(['last_failover_rescore_at' => now()]); + } + + /** + * Build a scorer using the playlist's auto_merge_config, falling back to + * a sensible default of [resolution, fps, bitrate, codec] when no config + * is set. + */ + protected function buildScorer(Playlist $playlist): ChannelMergeScorer + { + $config = $playlist->auto_merge_config ?? []; + + $rawAttributes = $config['priority_attributes'] ?? null; + $priorityOrder = empty($rawAttributes) + ? ['resolution', 'fps', 'bitrate', 'codec'] + : ChannelMergeScorer::normalizePriorityOrder($rawAttributes); + + $groupPriorityCache = []; + foreach ($config['group_priorities'] ?? [] as $group) { + if (isset($group['group_id'], $group['weight'])) { + $groupPriorityCache[(int) $group['group_id']] = (int) $group['weight']; + } + } + + return new ChannelMergeScorer( + priorityOrder: $priorityOrder, + playlistPriority: [$playlist->id => 0], + groupPriorityCache: $groupPriorityCache, + preferredCodec: $config['prefer_codec'] ?? null, + priorityKeywords: $config['priority_keywords'] ?? [], + ); + } + + /** + * Re-probe a channel if its stats are missing or older than the staleness window. + */ + protected function ensureFreshStats(Channel $channel, ?CarbonInterface $staleBefore, int $probeTimeout): void + { + if (! $channel->probe_enabled) { + return; + } + + $needsReprobe = $channel->stream_stats_probed_at === null + || ($staleBefore !== null && $channel->stream_stats_probed_at->lt($staleBefore)); + + if (! $needsReprobe) { + return; + } + + try { + $stats = $this->withProviderThrottling( + fn () => $channel->probeStreamStats($probeTimeout) + ); + + if (! empty($stats)) { + $channel->updateQuietly([ + 'stream_stats' => $stats, + 'stream_stats_probed_at' => now(), + ]); + } + } catch (Throwable $e) { + Log::warning("RescoreChannelFailovers: probe failed for channel {$channel->id}: {$e->getMessage()}"); + } + } + + /** + * Score every failover and update channel_failovers.sort so the best + * failover sits at sort=0. The master is intentionally not scored or altered. + * + * @param Collection $failovers + */ + protected function reorderFailovers(Channel $master, $failovers, ChannelMergeScorer $scorer): void + { + $scored = $failovers->map(fn (Channel $failover) => [ + 'failover_id' => $failover->id, + 'score' => $scorer->score($failover), + ])->sortByDesc('score')->values(); + + foreach ($scored as $index => $row) { + ChannelFailover::query() + ->where('channel_id', $master->id) + ->where('channel_failover_id', $row['failover_id']) + ->update(['sort' => $index]); + } + } +} diff --git a/app/Models/Playlist.php b/app/Models/Playlist.php index a807f7a70..d5fb551aa 100644 --- a/app/Models/Playlist.php +++ b/app/Models/Playlist.php @@ -78,6 +78,8 @@ class Playlist extends Model 'enable_series' => 'boolean', 'auto_retry_503_count' => 'integer', 'auto_retry_503_last_at' => 'datetime', + 'last_failover_rescore_at' => 'datetime', + 'failover_rescore_staleness_days' => 'integer', ]; public function getFolderPathAttribute(): string diff --git a/app/Services/Channels/ChannelMergeScorer.php b/app/Services/Channels/ChannelMergeScorer.php new file mode 100644 index 000000000..7606e0a9a --- /dev/null +++ b/app/Services/Channels/ChannelMergeScorer.php @@ -0,0 +1,257 @@ + $priorityOrder Normalized priority order, in priority-descending order + * @param array $playlistPriority Map of playlist_id => priority index (lower index = higher priority) + * @param array $groupPriorityCache Map of group_id => weight + * @param array $priorityKeywords Substrings to match against channel title + */ + public function __construct( + protected array $priorityOrder, + protected array $playlistPriority = [], + protected array $groupPriorityCache = [], + protected ?string $preferredCodec = null, + protected array $priorityKeywords = [], + ) {} + + /** + * Normalize a user-supplied priority attributes config. + * + * Accepts either a flat string array (`['resolution', 'fps']`) or the + * Filament repeater shape (`[['attribute' => 'resolution'], ...]`). + * Filters out anything not in DEFAULT_PRIORITY_ORDER. Returns the default + * order when the input is empty or fully invalid. + * + * @param array|null $raw + * @return array + */ + public static function normalizePriorityOrder(?array $raw): array + { + if (! is_array($raw) || empty($raw)) { + return self::DEFAULT_PRIORITY_ORDER; + } + + $allowed = array_flip(self::DEFAULT_PRIORITY_ORDER); + $normalized = []; + + foreach ($raw as $item) { + $attribute = is_array($item) ? ($item['attribute'] ?? null) : $item; + if (! is_string($attribute)) { + continue; + } + + $attribute = trim($attribute); + if ($attribute === '' || ! isset($allowed[$attribute])) { + continue; + } + + $normalized[] = $attribute; + } + + $normalized = array_values(array_unique($normalized)); + + return ! empty($normalized) ? $normalized : self::DEFAULT_PRIORITY_ORDER; + } + + /** + * Calculate the weighted score for a channel under the configured priority order. + */ + public function score(Channel $channel): int + { + $score = 0; + $multiplier = count($this->priorityOrder) * 1000; + + foreach ($this->priorityOrder as $attribute) { + $attributeScore = match ($attribute) { + 'playlist_priority' => $this->getPlaylistPriorityScore($channel), + 'group_priority' => $this->getGroupPriorityScore($channel), + 'catchup_support' => $this->getCatchupScore($channel), + 'resolution' => $this->getResolutionScore($channel), + 'fps' => $this->getFpsScore($channel), + 'bitrate' => $this->getBitrateScore($channel), + 'codec' => $this->getCodecScore($channel), + 'keyword_match' => $this->getKeywordScore($channel), + default => 0, + }; + + $score += $attributeScore * $multiplier; + $multiplier = max(1, $multiplier - 1000); + } + + return $score; + } + + protected function getPlaylistPriorityScore(Channel $channel): int + { + $priority = $this->playlistPriority[$channel->playlist_id] ?? 999; + + return max(0, 100 - $priority); + } + + protected function getGroupPriorityScore(Channel $channel): int + { + return $this->groupPriorityCache[$channel->group_id] ?? 0; + } + + protected function getCatchupScore(Channel $channel): int + { + return ! empty($channel->catchup) ? 100 : 0; + } + + protected function getResolutionScore(Channel $channel): int + { + $resolution = self::getResolution($channel); + + // Normalize: 4K (3840x2160 = 8294400) = 100, 1080p = ~25, 720p = ~11 + return min(100, (int) ($resolution / 82944)); + } + + protected function getFpsScore(Channel $channel): int + { + $fps = self::getFps($channel); + + // Normalize: 25/30 fps = ~25-30, 50/60 fps = ~50-60, 100+ fps caps at 100 + return min(100, (int) round($fps)); + } + + protected function getBitrateScore(Channel $channel): int + { + $kbps = self::getBitrate($channel); + + // Normalize: 5000 kbps = 50, 10000+ kbps caps at 100 + return min(100, (int) ($kbps / 100)); + } + + protected function getCodecScore(Channel $channel): int + { + if (! $this->preferredCodec) { + return 0; + } + + $channelCodec = self::getCodec($channel); + if (! $channelCodec) { + return 0; + } + + $preferred = strtolower($this->preferredCodec); + $codec = strtolower($channelCodec); + + $isHevc = str_contains($codec, 'hevc') || str_contains($codec, 'h265') || str_contains($codec, '265'); + $isH264 = str_contains($codec, 'h264') || str_contains($codec, 'avc') || str_contains($codec, '264'); + + if ($preferred === 'hevc' || $preferred === 'h265') { + return $isHevc ? 100 : 0; + } + + if ($preferred === 'h264' || $preferred === 'avc') { + return $isH264 ? 100 : 0; + } + + return 0; + } + + protected function getKeywordScore(Channel $channel): int + { + if (empty($this->priorityKeywords)) { + return 0; + } + + $channelName = strtolower($channel->title ?? $channel->name ?? ''); + $matchCount = 0; + + foreach ($this->priorityKeywords as $keyword) { + if (str_contains($channelName, strtolower($keyword))) { + $matchCount++; + } + } + + return min(100, $matchCount * 25); + } + + /** + * Total pixel count of the first video stream (width * height). + */ + public static function getResolution(Channel $channel): int + { + $streamStats = $channel->ensureStreamStats(); + foreach ($streamStats as $entry) { + $stream = $entry['stream'] ?? null; + if (is_array($stream) && ($stream['codec_type'] ?? null) === 'video') { + return (int) ($stream['width'] ?? 0) * (int) ($stream['height'] ?? 0); + } + } + + return 0; + } + + /** + * Frame rate (fps) of the first video stream. Routes via getEmbyStreamStats + * so the fractional-rate parsing (e.g. "30000/1001" → 29.97) is reused. + */ + public static function getFps(Channel $channel): float + { + $channel->ensureStreamStats(); + $emby = $channel->getEmbyStreamStats(); + + return (float) ($emby['source_fps'] ?? 0.0); + } + + /** + * Video bitrate (kbps). Routes via getEmbyStreamStats so format-level and + * packet-sampling fallbacks for live MPEG-TS streams apply. + */ + public static function getBitrate(Channel $channel): int + { + $channel->ensureStreamStats(); + $emby = $channel->getEmbyStreamStats(); + + return (int) ($emby['ffmpeg_output_bitrate'] ?? 0); + } + + /** + * Codec name of the first video stream, or null if no video stream is present. + */ + public static function getCodec(Channel $channel): ?string + { + $streamStats = $channel->ensureStreamStats(); + foreach ($streamStats as $entry) { + $stream = $entry['stream'] ?? null; + if (is_array($stream) && ($stream['codec_type'] ?? null) === 'video') { + return $stream['codec_name'] ?? null; + } + } + + return null; + } +} diff --git a/app/Services/Channels/VirtualPrimaryCreator.php b/app/Services/Channels/VirtualPrimaryCreator.php new file mode 100644 index 000000000..da12ea1b8 --- /dev/null +++ b/app/Services/Channels/VirtualPrimaryCreator.php @@ -0,0 +1,115 @@ + $channels + */ + public function create(Collection $channels, ?string $title = null, bool $disableSources = false): Channel + { + if ($channels->isEmpty()) { + throw new \InvalidArgumentException('Cannot build a virtual primary from an empty selection.'); + } + + $scored = $channels->map(fn (Channel $channel) => [ + 'channel' => $channel, + 'score' => $this->scorer->score($channel), + ])->sortByDesc('score')->values(); + + /** @var Channel $top */ + $top = $scored->first()['channel']; + + $resolvedTitle = $title !== null && $title !== '' + ? $title + : ($top->title_custom ?: $top->title ?: $top->name); + + $virtualPrimary = Channel::create([ + 'user_id' => $top->user_id, + 'playlist_id' => $top->playlist_id, + 'group_id' => $top->group_id, + 'group' => $top->group, + 'is_custom' => true, + 'enabled' => true, + 'url' => null, + 'title' => $resolvedTitle, + 'name' => $resolvedTitle, + 'logo' => $top->logo, + 'logo_internal' => $top->logo_internal ?? $top->logo, + 'epg_channel_id' => $top->epg_channel_id, + 'channel' => $top->channel, + 'shift' => $top->shift ?? 0, + 'is_vod' => false, + ]); + + foreach ($scored as $index => $row) { + ChannelFailover::create([ + 'user_id' => $virtualPrimary->user_id, + 'channel_id' => $virtualPrimary->id, + 'channel_failover_id' => $row['channel']->id, + 'sort' => $index, + ]); + } + + if ($disableSources) { + Channel::whereIn('id', $channels->pluck('id')->all())->update(['enabled' => false]); + } + + return $virtualPrimary->fresh(); + } + + /** + * Build a creator using a playlist's auto_merge_config (or a sensible + * default of [resolution, fps, bitrate, codec] when no config is set). + */ + public static function fromPlaylist(?Playlist $playlist): self + { + $config = $playlist?->auto_merge_config ?? []; + + $rawAttributes = $config['priority_attributes'] ?? null; + $priorityOrder = empty($rawAttributes) + ? ['resolution', 'fps', 'bitrate', 'codec'] + : ChannelMergeScorer::normalizePriorityOrder($rawAttributes); + + $groupPriorityCache = []; + foreach ($config['group_priorities'] ?? [] as $group) { + if (isset($group['group_id'], $group['weight'])) { + $groupPriorityCache[(int) $group['group_id']] = (int) $group['weight']; + } + } + + return new self( + new ChannelMergeScorer( + priorityOrder: $priorityOrder, + playlistPriority: $playlist ? [$playlist->id => 0] : [], + groupPriorityCache: $groupPriorityCache, + preferredCodec: $config['prefer_codec'] ?? null, + priorityKeywords: $config['priority_keywords'] ?? [], + ) + ); + } +} diff --git a/database/migrations/2026_04_26_221703_add_failover_rescore_settings_to_playlists_table.php b/database/migrations/2026_04_26_221703_add_failover_rescore_settings_to_playlists_table.php new file mode 100644 index 000000000..1d2f09772 --- /dev/null +++ b/database/migrations/2026_04_26_221703_add_failover_rescore_settings_to_playlists_table.php @@ -0,0 +1,34 @@ +string('auto_rescore_failovers_interval')->nullable()->after('probe_timeout'); + $table->timestamp('last_failover_rescore_at')->nullable()->after('auto_rescore_failovers_interval'); + $table->unsignedSmallInteger('failover_rescore_staleness_days')->default(7)->after('last_failover_rescore_at'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('playlists', function (Blueprint $table) { + $table->dropColumn([ + 'auto_rescore_failovers_interval', + 'last_failover_rescore_at', + 'failover_rescore_staleness_days', + ]); + }); + } +}; diff --git a/routes/console.php b/routes/console.php index a3f09aef7..acdf8f84f 100644 --- a/routes/console.php +++ b/routes/console.php @@ -72,6 +72,11 @@ ->hourly() ->withoutOverlapping(); +// Re-score failover channels for playlists with auto_rescore_failovers_interval set +Schedule::command('app:rescore-channel-failovers') + ->hourly() + ->withoutOverlapping(); + // Run scheduled plugin invocations Schedule::command('plugins:run-scheduled') ->everyMinute() diff --git a/tests/Feature/RescoreChannelFailoversCommandTest.php b/tests/Feature/RescoreChannelFailoversCommandTest.php new file mode 100644 index 000000000..f399fc867 --- /dev/null +++ b/tests/Feature/RescoreChannelFailoversCommandTest.php @@ -0,0 +1,94 @@ +user = User::factory()->create(); +}); + +it('dispatches rescore for playlists whose interval has elapsed', function () { + $due = Playlist::factory()->for($this->user)->createQuietly([ + 'auto_rescore_failovers_interval' => 'daily', + 'last_failover_rescore_at' => now()->subDays(2), + ]); + + $notDue = Playlist::factory()->for($this->user)->createQuietly([ + 'auto_rescore_failovers_interval' => 'daily', + 'last_failover_rescore_at' => now()->subHours(2), + ]); + + $this->artisan('app:rescore-channel-failovers')->assertExitCode(0); + + Bus::assertDispatched(RescoreChannelFailovers::class, fn (RescoreChannelFailovers $job) => $job->playlistId === $due->id); + Bus::assertNotDispatched(RescoreChannelFailovers::class, fn (RescoreChannelFailovers $job) => $job->playlistId === $notDue->id); +}); + +it('dispatches when last_failover_rescore_at is null (never run)', function () { + $never = Playlist::factory()->for($this->user)->createQuietly([ + 'auto_rescore_failovers_interval' => 'weekly', + 'last_failover_rescore_at' => null, + ]); + + $this->artisan('app:rescore-channel-failovers')->assertExitCode(0); + + Bus::assertDispatched(RescoreChannelFailovers::class, fn (RescoreChannelFailovers $job) => $job->playlistId === $never->id); +}); + +it('skips playlists with no auto_rescore_failovers_interval set', function () { + Playlist::factory()->for($this->user)->createQuietly([ + 'auto_rescore_failovers_interval' => null, + 'last_failover_rescore_at' => null, + ]); + + $this->artisan('app:rescore-channel-failovers')->assertExitCode(0); + + Bus::assertNotDispatched(RescoreChannelFailovers::class); +}); + +it('skips playlists with an unrecognized interval value', function () { + Playlist::factory()->for($this->user)->createQuietly([ + 'auto_rescore_failovers_interval' => 'banana', + 'last_failover_rescore_at' => null, + ]); + + $this->artisan('app:rescore-channel-failovers')->assertExitCode(0); + + Bus::assertNotDispatched(RescoreChannelFailovers::class); +}); + +it('respects the weekly interval', function () { + $dueWeekly = Playlist::factory()->for($this->user)->createQuietly([ + 'auto_rescore_failovers_interval' => 'weekly', + 'last_failover_rescore_at' => now()->subDays(8), + ]); + + $notDueWeekly = Playlist::factory()->for($this->user)->createQuietly([ + 'auto_rescore_failovers_interval' => 'weekly', + 'last_failover_rescore_at' => now()->subDays(3), + ]); + + $this->artisan('app:rescore-channel-failovers')->assertExitCode(0); + + Bus::assertDispatched(RescoreChannelFailovers::class, fn (RescoreChannelFailovers $job) => $job->playlistId === $dueWeekly->id); + Bus::assertNotDispatched(RescoreChannelFailovers::class, fn (RescoreChannelFailovers $job) => $job->playlistId === $notDueWeekly->id); +}); + +it('dispatches a single playlist immediately when an ID is passed', function () { + $playlist = Playlist::factory()->for($this->user)->createQuietly([ + 'auto_rescore_failovers_interval' => null, + 'last_failover_rescore_at' => now(), + ]); + + $this->artisan('app:rescore-channel-failovers', ['playlist' => $playlist->id])->assertExitCode(0); + + Bus::assertDispatched(RescoreChannelFailovers::class, fn (RescoreChannelFailovers $job) => $job->playlistId === $playlist->id); +}); + +it('returns failure when the supplied playlist ID does not exist', function () { + $this->artisan('app:rescore-channel-failovers', ['playlist' => 999999])->assertExitCode(1); + Bus::assertNotDispatched(RescoreChannelFailovers::class); +}); diff --git a/tests/Feature/RescoreChannelFailoversTest.php b/tests/Feature/RescoreChannelFailoversTest.php new file mode 100644 index 000000000..dd9c7e924 --- /dev/null +++ b/tests/Feature/RescoreChannelFailoversTest.php @@ -0,0 +1,206 @@ +user = User::factory()->create(); + $this->playlist = Playlist::factory()->for($this->user)->createQuietly([ + 'failover_rescore_staleness_days' => 7, + ]); +}); + +/** + * Build a channel with a known set of stream stats for deterministic scoring. + */ +function rescoreChannel(User $user, Playlist $playlist, array $overrides, ?array $stats = null): Channel +{ + return Channel::factory()->for($user)->for($playlist)->create(array_merge([ + 'enabled' => true, + 'can_merge' => true, + 'probe_enabled' => true, + 'stream_stats' => $stats ?? [ + ['stream' => [ + 'codec_type' => 'video', + 'codec_name' => 'h264', + 'width' => 1920, + 'height' => 1080, + 'bit_rate' => '5000000', + 'avg_frame_rate' => '25/1', + ]], + ['stream' => [ + 'codec_type' => 'audio', + 'codec_name' => 'aac', + 'channels' => 2, + 'bit_rate' => '128000', + ]], + ], + 'stream_stats_probed_at' => now(), + ], $overrides)); +} + +it('reorders failovers so the highest-scoring channel sits at sort=0', function () { + $master = rescoreChannel($this->user, $this->playlist, [ + 'name' => 'Virtual Primary', + 'is_custom' => true, + 'url' => null, + ]); + + $hd = rescoreChannel($this->user, $this->playlist, ['name' => 'HD Source']); + $sd = rescoreChannel($this->user, $this->playlist, ['name' => 'SD Source'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + // Attach in the "wrong" order — SD at sort=0, HD at sort=1. + ChannelFailover::create([ + 'user_id' => $this->user->id, + 'channel_id' => $master->id, + 'channel_failover_id' => $sd->id, + 'sort' => 0, + ]); + ChannelFailover::create([ + 'user_id' => $this->user->id, + 'channel_id' => $master->id, + 'channel_failover_id' => $hd->id, + 'sort' => 1, + ]); + + (new RescoreChannelFailovers($this->playlist->id))->handle(); + + $this->assertDatabaseHas('channel_failovers', [ + 'channel_id' => $master->id, + 'channel_failover_id' => $hd->id, + 'sort' => 0, + ]); + $this->assertDatabaseHas('channel_failovers', [ + 'channel_id' => $master->id, + 'channel_failover_id' => $sd->id, + 'sort' => 1, + ]); +}); + +it('flips the effective virtual-primary URL when the top failover changes', function () { + $master = rescoreChannel($this->user, $this->playlist, [ + 'name' => 'Virtual Primary', + 'is_custom' => true, + 'url' => null, + ]); + + $hd = rescoreChannel($this->user, $this->playlist, ['name' => 'HD Source', 'url' => 'http://hd.example/stream']); + $sd = rescoreChannel($this->user, $this->playlist, ['name' => 'SD Source', 'url' => 'http://sd.example/stream'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + ChannelFailover::create([ + 'user_id' => $this->user->id, 'channel_id' => $master->id, 'channel_failover_id' => $sd->id, 'sort' => 0, + ]); + ChannelFailover::create([ + 'user_id' => $this->user->id, 'channel_id' => $master->id, 'channel_failover_id' => $hd->id, 'sort' => 1, + ]); + + expect((new PlaylistUrlService)->getChannelUrl($master->fresh(), 'http://m3u.test'))->toContain('sd.example'); + + (new RescoreChannelFailovers($this->playlist->id))->handle(); + + expect((new PlaylistUrlService)->getChannelUrl($master->fresh(), 'http://m3u.test'))->toContain('hd.example'); +}); + +it('never modifies the master channel itself', function () { + $master = rescoreChannel($this->user, $this->playlist, [ + 'name' => 'Master', + 'enabled' => true, + 'is_custom' => false, + ]); + + $failover = rescoreChannel($this->user, $this->playlist, ['name' => 'Failover']); + + ChannelFailover::create([ + 'user_id' => $this->user->id, 'channel_id' => $master->id, 'channel_failover_id' => $failover->id, 'sort' => 0, + ]); + + $beforeMasterAttrs = $master->only(['id', 'name', 'enabled', 'is_custom', 'url']); + + (new RescoreChannelFailovers($this->playlist->id))->handle(); + + $master->refresh(); + expect($master->only(['id', 'name', 'enabled', 'is_custom', 'url']))->toBe($beforeMasterAttrs); +}); + +it('updates last_failover_rescore_at when the job completes', function () { + expect($this->playlist->fresh()->last_failover_rescore_at)->toBeNull(); + + $master = rescoreChannel($this->user, $this->playlist, ['name' => 'Master']); + $failover = rescoreChannel($this->user, $this->playlist, ['name' => 'Failover']); + ChannelFailover::create([ + 'user_id' => $this->user->id, 'channel_id' => $master->id, 'channel_failover_id' => $failover->id, 'sort' => 0, + ]); + + (new RescoreChannelFailovers($this->playlist->id))->handle(); + + expect($this->playlist->fresh()->last_failover_rescore_at)->not->toBeNull(); +}); + +it('updates last_failover_rescore_at even when the playlist has no failover groups', function () { + rescoreChannel($this->user, $this->playlist, ['name' => 'Lonely']); + + (new RescoreChannelFailovers($this->playlist->id))->handle(); + + expect($this->playlist->fresh()->last_failover_rescore_at)->not->toBeNull(); +}); + +it('does not re-probe channels with fresh stream_stats', function () { + $master = rescoreChannel($this->user, $this->playlist, ['name' => 'Master']); + $failover = rescoreChannel($this->user, $this->playlist, [ + 'name' => 'Failover', + 'stream_stats_probed_at' => now()->subDay(), + ]); + ChannelFailover::create([ + 'user_id' => $this->user->id, 'channel_id' => $master->id, 'channel_failover_id' => $failover->id, 'sort' => 0, + ]); + + $probedAt = $failover->fresh()->stream_stats_probed_at; + + (new RescoreChannelFailovers($this->playlist->id))->handle(); + + // Within the staleness window — probed_at must remain unchanged. + expect($failover->fresh()->stream_stats_probed_at?->timestamp)->toBe($probedAt?->timestamp); +}); + +it('skips rescoring when the master has no failovers attached', function () { + rescoreChannel($this->user, $this->playlist, ['name' => 'Lonely']); + + (new RescoreChannelFailovers($this->playlist->id))->handle(); + + expect(ChannelFailover::count())->toBe(0); +}); + +it('honors the channelIds filter to scope rescoring to specific masters', function () { + $masterA = rescoreChannel($this->user, $this->playlist, ['name' => 'Master A']); + $masterB = rescoreChannel($this->user, $this->playlist, ['name' => 'Master B']); + + $aHigh = rescoreChannel($this->user, $this->playlist, ['name' => 'A High']); + $aLow = rescoreChannel($this->user, $this->playlist, ['name' => 'A Low'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + $bHigh = rescoreChannel($this->user, $this->playlist, ['name' => 'B High']); + $bLow = rescoreChannel($this->user, $this->playlist, ['name' => 'B Low'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + ChannelFailover::create(['user_id' => $this->user->id, 'channel_id' => $masterA->id, 'channel_failover_id' => $aLow->id, 'sort' => 0]); + ChannelFailover::create(['user_id' => $this->user->id, 'channel_id' => $masterA->id, 'channel_failover_id' => $aHigh->id, 'sort' => 1]); + + ChannelFailover::create(['user_id' => $this->user->id, 'channel_id' => $masterB->id, 'channel_failover_id' => $bLow->id, 'sort' => 0]); + ChannelFailover::create(['user_id' => $this->user->id, 'channel_id' => $masterB->id, 'channel_failover_id' => $bHigh->id, 'sort' => 1]); + + (new RescoreChannelFailovers($this->playlist->id, channelIds: [$masterA->id]))->handle(); + + // Master A reordered, Master B left alone. + $this->assertDatabaseHas('channel_failovers', ['channel_id' => $masterA->id, 'channel_failover_id' => $aHigh->id, 'sort' => 0]); + $this->assertDatabaseHas('channel_failovers', ['channel_id' => $masterB->id, 'channel_failover_id' => $bLow->id, 'sort' => 0]); +}); diff --git a/tests/Feature/VirtualPrimaryCreatorTest.php b/tests/Feature/VirtualPrimaryCreatorTest.php new file mode 100644 index 000000000..8462f584d --- /dev/null +++ b/tests/Feature/VirtualPrimaryCreatorTest.php @@ -0,0 +1,160 @@ +user = User::factory()->create(); + $this->actingAs($this->user); + $this->playlist = Playlist::factory()->for($this->user)->createQuietly(); +}); + +function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $stats = null): Channel +{ + return Channel::factory()->for($user)->for($playlist)->create(array_merge([ + 'enabled' => true, + 'can_merge' => true, + 'probe_enabled' => true, + 'is_custom' => false, + 'stream_stats' => $stats ?? [ + ['stream' => [ + 'codec_type' => 'video', + 'codec_name' => 'h264', + 'width' => 1920, + 'height' => 1080, + 'bit_rate' => '5000000', + 'avg_frame_rate' => '25/1', + ]], + ], + 'stream_stats_probed_at' => now(), + ], $overrides)); +} + +it('registers make_virtual_primary in the channel BulkModalActionGroup', function () { + $bulkActions = ChannelResource::getTableBulkActions(); + $group = $bulkActions[0]; + + $schemaProp = new ReflectionProperty($group, 'schema'); + $outerSchema = $schemaProp->getValue($group); + + $childProp = new ReflectionProperty(Component::class, 'childComponents'); + $names = []; + + foreach ($outerSchema as $component) { + $children = $childProp->getValue($component)['default'] ?? []; + foreach ($children as $child) { + if ($child instanceof BulkAction) { + $names[] = $child->getName(); + } + } + } + + expect($names)->toContain('make_virtual_primary'); +}); + +it('creates a custom channel with copied identity from the highest-scoring source', function () { + $epg = EpgChannel::factory()->create(); + + $high = vpChannel($this->user, $this->playlist, [ + 'title' => 'BBC One HD', + 'name' => 'BBC One HD', + 'logo' => 'http://logos.example/bbc-hd.png', + 'epg_channel_id' => $epg->id, + ]); + + $low = vpChannel($this->user, $this->playlist, [ + 'title' => 'BBC One SD', + 'logo' => 'http://logos.example/bbc-sd.png', + ], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + $virtual = VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect([$low, $high])); + + expect($virtual->is_custom)->toBeTrue() + ->and($virtual->url)->toBeNull() + ->and($virtual->title)->toBe('BBC One HD') + ->and($virtual->logo)->toBe('http://logos.example/bbc-hd.png') + ->and($virtual->epg_channel_id)->toBe($epg->id); +}); + +it('attaches all selected channels as failovers in score order', function () { + $hd = vpChannel($this->user, $this->playlist, ['title' => 'HD']); + $sd = vpChannel($this->user, $this->playlist, ['title' => 'SD'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + $uhd = vpChannel($this->user, $this->playlist, ['title' => '4K'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'hevc', 'width' => 3840, 'height' => 2160]], + ]); + + $virtual = VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect([$sd, $hd, $uhd])); + + $sorted = ChannelFailover::where('channel_id', $virtual->id)->orderBy('sort')->get(); + + expect($sorted)->toHaveCount(3) + ->and($sorted[0]->channel_failover_id)->toBe($uhd->id) + ->and($sorted[1]->channel_failover_id)->toBe($hd->id) + ->and($sorted[2]->channel_failover_id)->toBe($sd->id); +}); + +it('streams the highest-ranked source URL via PlaylistUrlService fallback', function () { + $hd = vpChannel($this->user, $this->playlist, ['title' => 'HD', 'url' => 'http://hd.example/stream']); + $sd = vpChannel($this->user, $this->playlist, ['title' => 'SD', 'url' => 'http://sd.example/stream'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + $virtual = VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect([$sd, $hd])); + + expect((new PlaylistUrlService)->getChannelUrl($virtual->fresh(), 'http://m3u.test'))->toContain('hd.example'); +}); + +it('disables source channels when the disableSources flag is set', function () { + $hd = vpChannel($this->user, $this->playlist, ['title' => 'HD']); + $sd = vpChannel($this->user, $this->playlist, ['title' => 'SD'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + VirtualPrimaryCreator::fromPlaylist($this->playlist)->create( + channels: collect([$hd, $sd]), + disableSources: true, + ); + + expect($hd->fresh()->enabled)->toBeFalse() + ->and($sd->fresh()->enabled)->toBeFalse(); +}); + +it('leaves source channels enabled when disableSources is false', function () { + $hd = vpChannel($this->user, $this->playlist, ['title' => 'HD']); + $sd = vpChannel($this->user, $this->playlist, ['title' => 'SD'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect([$hd, $sd])); + + expect($hd->fresh()->enabled)->toBeTrue() + ->and($sd->fresh()->enabled)->toBeTrue(); +}); + +it('uses the provided title when one is supplied', function () { + $hd = vpChannel($this->user, $this->playlist, ['title' => 'BBC One HD']); + + $virtual = VirtualPrimaryCreator::fromPlaylist($this->playlist)->create( + channels: collect([$hd]), + title: 'BBC One', + ); + + expect($virtual->title)->toBe('BBC One') + ->and($virtual->name)->toBe('BBC One'); +}); + +it('throws when called with an empty channel collection', function () { + VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect()); +})->throws(InvalidArgumentException::class); From e0e3d2abfc1b7fbc42a93d83faf3b6e072833864 Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 22:52:08 +0100 Subject: [PATCH 04/16] feat: Surface scoring rationale for failover ranking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ChannelMergeScorer gains a scoreBreakdown() method returning per-attribute scores (0-100 each) under the configured priority order. Used by: - The "Make virtual primary" bulk action — now shows a ranked preview table in the confirmation modal so you can see exactly why each source ranked where it did before committing to creation. Each row shows the rank, channel + playlist, total score, and per-attribute breakdown. - VirtualPrimaryCreator — persists the score, breakdown, priority order, and ranked_at timestamp into channel_failovers.metadata. - RescoreChannelFailovers — same, so the rationale is durable for scheduled rescoring runs too. The metadata column was already available on channel_failovers and was previously unused for this purpose, so no schema change is required. --- .../Resources/Channels/ChannelResource.php | 58 +++++++++++++++---- app/Jobs/RescoreChannelFailovers.php | 15 ++++- app/Services/Channels/ChannelMergeScorer.php | 50 +++++++++++----- .../Channels/VirtualPrimaryCreator.php | 40 +++++++++++-- tests/Feature/RescoreChannelFailoversTest.php | 31 ++++++++++ tests/Feature/VirtualPrimaryCreatorTest.php | 34 +++++++++++ 6 files changed, 197 insertions(+), 31 deletions(-) diff --git a/app/Filament/Resources/Channels/ChannelResource.php b/app/Filament/Resources/Channels/ChannelResource.php index 2c4cdf361..ee421d027 100644 --- a/app/Filament/Resources/Channels/ChannelResource.php +++ b/app/Filament/Resources/Channels/ChannelResource.php @@ -36,6 +36,7 @@ use Filament\Actions\EditAction; use Filament\Actions\ViewAction; use Filament\Forms\Components\Hidden; +use Filament\Forms\Components\Placeholder; use Filament\Forms\Components\Repeater; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; @@ -1118,17 +1119,52 @@ private static function getBulkActionSchema(bool $addToCustom, bool $includeReco ->modalSubmitActionLabel(__('Add failovers now')), BulkAction::make('make_virtual_primary') ->label(__('Make virtual primary')) - ->schema([ - TextInput::make('title') - ->label(__('Virtual channel title')) - ->helperText(__('Leave empty to copy the highest-scoring source\'s title.')) - ->maxLength(255), - Toggle::make('disable_sources') - ->label(__('Disable source channels')) - ->helperText(__('When enabled, the selected source channels will be disabled after being attached as failovers. They\'ll only be reachable via the new virtual primary.')) - ->default(false) - ->inline(false), - ]) + ->schema(function (Collection $records) { + $playlists = $records->pluck('playlist_id')->unique(); + $playlistForScoring = $playlists->count() === 1 + ? Playlist::find($playlists->first()) + : null; + + $creator = VirtualPrimaryCreator::fromPlaylist($playlistForScoring); + $ranking = $creator->rank($records); + + $rows = $ranking->map(function ($row, int $index) { + $channel = $row['channel']; + $playlistName = $channel->getEffectivePlaylist()->name ?? 'Unknown'; + $displayTitle = e($channel->title_custom ?: $channel->title ?: $channel->name); + $rankBadge = '#'.($index + 1).''; + $titleCell = "
{$displayTitle}
".e($playlistName).'
'; + $totalScore = ''.number_format($row['score']).''; + + $breakdownParts = []; + foreach ($row['breakdown'] as $attribute => $score) { + $label = e(str_replace('_', ' ', $attribute)); + $breakdownParts[] = "{$label}{$score}"; + } + $breakdownCell = '
'.implode('', $breakdownParts).'
'; + + return "{$rankBadge}{$titleCell}{$totalScore}{$breakdownCell}"; + })->implode(''); + + $headerRow = 'RankChannelScoreBreakdown (per attribute, 0-100)'; + $tableHtml = "{$headerRow}{$rows}
"; + + return [ + Placeholder::make('ranking_preview') + ->label(__('Ranked sources')) + ->content(new HtmlString($tableHtml)) + ->columnSpanFull(), + TextInput::make('title') + ->label(__('Virtual channel title')) + ->helperText(__('Leave empty to copy the highest-scoring source\'s title.')) + ->maxLength(255), + Toggle::make('disable_sources') + ->label(__('Disable source channels')) + ->helperText(__('When enabled, the selected source channels will be disabled after being attached as failovers. They\'ll only be reachable via the new virtual primary.')) + ->default(false) + ->inline(false), + ]; + }) ->action(function (Collection $records, array $data): void { if ($records->isEmpty()) { return; diff --git a/app/Jobs/RescoreChannelFailovers.php b/app/Jobs/RescoreChannelFailovers.php index 5738ca8e3..09a2c19f4 100644 --- a/app/Jobs/RescoreChannelFailovers.php +++ b/app/Jobs/RescoreChannelFailovers.php @@ -161,6 +161,9 @@ protected function ensureFreshStats(Channel $channel, ?CarbonInterface $staleBef * Score every failover and update channel_failovers.sort so the best * failover sits at sort=0. The master is intentionally not scored or altered. * + * Each failover's score and per-attribute breakdown is persisted into + * channel_failovers.metadata so the rationale stays inspectable later. + * * @param Collection $failovers */ protected function reorderFailovers(Channel $master, $failovers, ChannelMergeScorer $scorer): void @@ -168,13 +171,23 @@ protected function reorderFailovers(Channel $master, $failovers, ChannelMergeSco $scored = $failovers->map(fn (Channel $failover) => [ 'failover_id' => $failover->id, 'score' => $scorer->score($failover), + 'breakdown' => $scorer->scoreBreakdown($failover), ])->sortByDesc('score')->values(); + $rankedAt = now()->toIso8601String(); foreach ($scored as $index => $row) { ChannelFailover::query() ->where('channel_id', $master->id) ->where('channel_failover_id', $row['failover_id']) - ->update(['sort' => $index]); + ->update([ + 'sort' => $index, + 'metadata' => [ + 'score' => $row['score'], + 'attribute_scores' => $row['breakdown'], + 'priority_order' => array_keys($row['breakdown']), + 'ranked_at' => $rankedAt, + ], + ]); } } } diff --git a/app/Services/Channels/ChannelMergeScorer.php b/app/Services/Channels/ChannelMergeScorer.php index 7606e0a9a..dc5f55328 100644 --- a/app/Services/Channels/ChannelMergeScorer.php +++ b/app/Services/Channels/ChannelMergeScorer.php @@ -93,25 +93,49 @@ public function score(Channel $channel): int $multiplier = count($this->priorityOrder) * 1000; foreach ($this->priorityOrder as $attribute) { - $attributeScore = match ($attribute) { - 'playlist_priority' => $this->getPlaylistPriorityScore($channel), - 'group_priority' => $this->getGroupPriorityScore($channel), - 'catchup_support' => $this->getCatchupScore($channel), - 'resolution' => $this->getResolutionScore($channel), - 'fps' => $this->getFpsScore($channel), - 'bitrate' => $this->getBitrateScore($channel), - 'codec' => $this->getCodecScore($channel), - 'keyword_match' => $this->getKeywordScore($channel), - default => 0, - }; - - $score += $attributeScore * $multiplier; + $score += $this->attributeScore($attribute, $channel) * $multiplier; $multiplier = max(1, $multiplier - 1000); } return $score; } + /** + * Return per-attribute scores (0-100 each) for a channel under the configured priority order. + * + * Useful for explaining why a channel ranked the way it did. The priority + * order is preserved so the highest-impact attributes appear first. + * + * @return array + */ + public function scoreBreakdown(Channel $channel): array + { + $breakdown = []; + foreach ($this->priorityOrder as $attribute) { + $breakdown[$attribute] = $this->attributeScore($attribute, $channel); + } + + return $breakdown; + } + + /** + * Score a single attribute (0-100). Returns 0 for unknown attributes. + */ + protected function attributeScore(string $attribute, Channel $channel): int + { + return match ($attribute) { + 'playlist_priority' => $this->getPlaylistPriorityScore($channel), + 'group_priority' => $this->getGroupPriorityScore($channel), + 'catchup_support' => $this->getCatchupScore($channel), + 'resolution' => $this->getResolutionScore($channel), + 'fps' => $this->getFpsScore($channel), + 'bitrate' => $this->getBitrateScore($channel), + 'codec' => $this->getCodecScore($channel), + 'keyword_match' => $this->getKeywordScore($channel), + default => 0, + }; + } + protected function getPlaylistPriorityScore(Channel $channel): int { $priority = $this->playlistPriority[$channel->playlist_id] ?? 999; diff --git a/app/Services/Channels/VirtualPrimaryCreator.php b/app/Services/Channels/VirtualPrimaryCreator.php index da12ea1b8..9b02c8f5c 100644 --- a/app/Services/Channels/VirtualPrimaryCreator.php +++ b/app/Services/Channels/VirtualPrimaryCreator.php @@ -28,6 +28,9 @@ public function __construct( * Score the supplied channels, create a virtual-primary custom channel from * the top scorer, and attach all sources as failovers in score order. * + * Score breakdowns are persisted to channel_failovers.metadata so the + * rationale stays inspectable later (e.g. via UI or DB query). + * * @param Collection $channels */ public function create(Collection $channels, ?string $title = null, bool $disableSources = false): Channel @@ -36,13 +39,10 @@ public function create(Collection $channels, ?string $title = null, bool $disabl throw new \InvalidArgumentException('Cannot build a virtual primary from an empty selection.'); } - $scored = $channels->map(fn (Channel $channel) => [ - 'channel' => $channel, - 'score' => $this->scorer->score($channel), - ])->sortByDesc('score')->values(); + $ranking = $this->rank($channels); /** @var Channel $top */ - $top = $scored->first()['channel']; + $top = $ranking->first()['channel']; $resolvedTitle = $title !== null && $title !== '' ? $title @@ -66,12 +66,19 @@ public function create(Collection $channels, ?string $title = null, bool $disabl 'is_vod' => false, ]); - foreach ($scored as $index => $row) { + $rankedAt = now()->toIso8601String(); + foreach ($ranking as $index => $row) { ChannelFailover::create([ 'user_id' => $virtualPrimary->user_id, 'channel_id' => $virtualPrimary->id, 'channel_failover_id' => $row['channel']->id, 'sort' => $index, + 'metadata' => [ + 'score' => $row['score'], + 'attribute_scores' => $row['breakdown'], + 'priority_order' => array_keys($row['breakdown']), + 'ranked_at' => $rankedAt, + ], ]); } @@ -82,6 +89,27 @@ public function create(Collection $channels, ?string $title = null, bool $disabl return $virtualPrimary->fresh(); } + /** + * Score and rank the supplied channels, returning each with its score and + * per-attribute breakdown. Same logic as create() uses internally — exposed + * so callers (e.g. bulk-action modals) can preview the ranking before + * committing to creating the virtual primary. + * + * @param Collection $channels + * @return Collection}> + */ + public function rank(Collection $channels): Collection + { + return $channels + ->map(fn (Channel $channel) => [ + 'channel' => $channel, + 'score' => $this->scorer->score($channel), + 'breakdown' => $this->scorer->scoreBreakdown($channel), + ]) + ->sortByDesc('score') + ->values(); + } + /** * Build a creator using a playlist's auto_merge_config (or a sensible * default of [resolution, fps, bitrate, codec] when no config is set). diff --git a/tests/Feature/RescoreChannelFailoversTest.php b/tests/Feature/RescoreChannelFailoversTest.php index dd9c7e924..90dbf610e 100644 --- a/tests/Feature/RescoreChannelFailoversTest.php +++ b/tests/Feature/RescoreChannelFailoversTest.php @@ -178,6 +178,37 @@ function rescoreChannel(User $user, Playlist $playlist, array $overrides, ?array expect(ChannelFailover::count())->toBe(0); }); +it('persists score breakdown on each failover row after rescoring', function () { + $master = rescoreChannel($this->user, $this->playlist, [ + 'name' => 'Virtual Primary', + 'is_custom' => true, + 'url' => null, + ]); + + $hd = rescoreChannel($this->user, $this->playlist, ['name' => 'HD Source']); + $sd = rescoreChannel($this->user, $this->playlist, ['name' => 'SD Source'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + ChannelFailover::create([ + 'user_id' => $this->user->id, 'channel_id' => $master->id, 'channel_failover_id' => $sd->id, 'sort' => 0, + ]); + ChannelFailover::create([ + 'user_id' => $this->user->id, 'channel_id' => $master->id, 'channel_failover_id' => $hd->id, 'sort' => 1, + ]); + + (new RescoreChannelFailovers($this->playlist->id))->handle(); + + $hdRow = ChannelFailover::where('channel_id', $master->id) + ->where('channel_failover_id', $hd->id) + ->first(); + + expect($hdRow->metadata) + ->toHaveKey('score') + ->and($hdRow->metadata['priority_order'])->toBe(['resolution', 'fps', 'bitrate', 'codec']) + ->and($hdRow->metadata['attribute_scores'])->toHaveKeys(['resolution', 'fps', 'bitrate', 'codec']); +}); + it('honors the channelIds filter to scope rescoring to specific masters', function () { $masterA = rescoreChannel($this->user, $this->playlist, ['name' => 'Master A']); $masterB = rescoreChannel($this->user, $this->playlist, ['name' => 'Master B']); diff --git a/tests/Feature/VirtualPrimaryCreatorTest.php b/tests/Feature/VirtualPrimaryCreatorTest.php index 8462f584d..48bf3a117 100644 --- a/tests/Feature/VirtualPrimaryCreatorTest.php +++ b/tests/Feature/VirtualPrimaryCreatorTest.php @@ -158,3 +158,37 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta it('throws when called with an empty channel collection', function () { VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect()); })->throws(InvalidArgumentException::class); + +it('persists score and per-attribute breakdown on each channel_failovers row', function () { + $hd = vpChannel($this->user, $this->playlist, ['title' => 'HD']); + $sd = vpChannel($this->user, $this->playlist, ['title' => 'SD'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + $virtual = VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect([$sd, $hd])); + + $hdFailover = ChannelFailover::where('channel_id', $virtual->id) + ->where('channel_failover_id', $hd->id) + ->first(); + + expect($hdFailover->metadata) + ->toHaveKey('score') + ->and($hdFailover->metadata['priority_order'])->toBe(['resolution', 'fps', 'bitrate', 'codec']) + ->and($hdFailover->metadata['attribute_scores'])->toHaveKeys(['resolution', 'fps', 'bitrate', 'codec']) + ->and($hdFailover->metadata['attribute_scores']['resolution'])->toBe(25); // 1920x1080 / 82944 ≈ 25 +}); + +it('rank() returns channels sorted by score with breakdowns', function () { + $hd = vpChannel($this->user, $this->playlist, ['title' => 'HD']); + $sd = vpChannel($this->user, $this->playlist, ['title' => 'SD'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + $ranking = VirtualPrimaryCreator::fromPlaylist($this->playlist)->rank(collect([$sd, $hd])); + + expect($ranking)->toHaveCount(2) + ->and($ranking[0]['channel']->id)->toBe($hd->id) + ->and($ranking[1]['channel']->id)->toBe($sd->id) + ->and($ranking[0]['score'])->toBeGreaterThan($ranking[1]['score']) + ->and($ranking[0]['breakdown'])->toHaveKeys(['resolution', 'fps', 'bitrate', 'codec']); +}); From 4e784d54bec38ed746dba8befdf48c15bac6138c Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 23:01:07 +0100 Subject: [PATCH 05/16] refactor: Normalize merge score to 0-100 instead of hundreds of thousands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previous scoring multiplied each attribute (0-100) by positional weights of 4000/3000/2000/1000, producing totals like 207,000. The 1000× scaling factor was cosmetic and made scores hard to interpret at a glance. Algorithm now uses the same positional weights ([N, N-1, ..., 1] for N priorities) but normalizes the total by dividing by the maximum possible weighted sum. Final score is always 0-100, with identical relative ordering to the previous algorithm — pure UX simplification, no ranking behavior change. --- app/Services/Channels/ChannelMergeScorer.php | 27 ++++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/app/Services/Channels/ChannelMergeScorer.php b/app/Services/Channels/ChannelMergeScorer.php index dc5f55328..e41ef45cc 100644 --- a/app/Services/Channels/ChannelMergeScorer.php +++ b/app/Services/Channels/ChannelMergeScorer.php @@ -86,18 +86,35 @@ public static function normalizePriorityOrder(?array $raw): array /** * Calculate the weighted score for a channel under the configured priority order. + * + * Each attribute scores 0-100 (see scoreBreakdown). Weights are positional: + * with N priorities the first attribute is weighted ×N, the second ×(N-1), + * down to ×1. The total is normalized so the final score is always 0-100, + * regardless of how many priority attributes are configured. + * + * score = round( 100 × Σ(rawᵢ × weightᵢ) / (100 × Σ weightᵢ) ) + * = round( Σ(rawᵢ × weightᵢ) / Σ weightᵢ ) + * + * Relative ordering is identical to the unnormalized weighted sum, so this + * is a pure UX simplification — no behavioral change for ranking. */ public function score(Channel $channel): int { - $score = 0; - $multiplier = count($this->priorityOrder) * 1000; + $count = count($this->priorityOrder); + if ($count === 0) { + return 0; + } + + $sumOfWeights = $count * ($count + 1) / 2; + $weighted = 0; + $weight = $count; foreach ($this->priorityOrder as $attribute) { - $score += $this->attributeScore($attribute, $channel) * $multiplier; - $multiplier = max(1, $multiplier - 1000); + $weighted += $this->attributeScore($attribute, $channel) * $weight; + $weight--; } - return $score; + return (int) round($weighted / $sumOfWeights); } /** From 8b013325f6fb0a7fe21b50a075d7810c45755903 Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 23:06:22 +0100 Subject: [PATCH 06/16] feat: Show failover ranking in channel info pane with rescore button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When viewing a channel that has at least one failover attached, the info pane (View action) now includes a "Failover Ranking" section that pulls the persisted score and per-attribute breakdown out of channel_failovers.metadata and renders them as a ranked table — same layout as the bulk-action preview, just durable rather than one-shot. The section's header action "Rescore now" dispatches RescoreChannelFailovers scoped to that single channel, so users can refresh the ranking on demand without going through the playlist-level periodic config. Stale failovers are re-probed (subject to the playlist's staleness window); the master is never altered. Section is hidden for channels with no failovers, so it adds nothing to non-virtual-primary records. --- .../Resources/Channels/ChannelResource.php | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/app/Filament/Resources/Channels/ChannelResource.php b/app/Filament/Resources/Channels/ChannelResource.php index ee421d027..9c5b59052 100644 --- a/app/Filament/Resources/Channels/ChannelResource.php +++ b/app/Filament/Resources/Channels/ChannelResource.php @@ -14,6 +14,7 @@ use App\Jobs\ChannelFindAndReplaceReset; use App\Jobs\MapPlaylistChannelsToEpg; use App\Jobs\ProbeChannelStreams; +use App\Jobs\RescoreChannelFailovers; use App\Jobs\SyncPlexDvrJob; use App\Models\Channel; use App\Models\ChannelFailover; @@ -1530,6 +1531,40 @@ public static function infolist(Schema $schema): Schema ->state(fn () => __("Probing is disabled for this channel. Enable it in the channel's edit form to allow probe data collection.")) ->visible(fn ($record) => self::resolveTechnicalDetailsState($record) === 'disabled'), ]), + Section::make(__('Failover Ranking')) + ->description(__('Failovers ranked by score. Stored from the last merge or rescore — click "Rescore now" to recalculate against current stream stats.')) + ->collapsible() + ->visible(fn ($record) => $record && $record->failovers()->exists()) + ->headerActions([ + Action::make('rescore_failovers_inline') + ->label(__('Rescore now')) + ->icon('heroicon-o-arrow-path') + ->color('info') + ->action(function ($record) { + dispatch(new RescoreChannelFailovers( + playlistId: $record->playlist_id, + channelIds: [$record->id], + )); + + Notification::make() + ->success() + ->title(__('Rescoring queued')) + ->body(__('Failovers will be re-scored in the background. Refresh this page in a moment to see the updated ranking.')) + ->duration(6000) + ->send(); + }) + ->requiresConfirmation() + ->modalIcon('heroicon-o-arrow-path') + ->modalDescription(__('Re-score this channel\'s failovers against current stream stats. Stale channels may be re-probed (subject to the playlist\'s staleness window). The master channel is never altered — only the failover order changes.')) + ->modalSubmitActionLabel(__('Rescore')), + ]) + ->schema([ + TextEntry::make('failover_ranking_html') + ->hiddenLabel() + ->columnSpanFull() + ->state(fn ($record) => self::renderFailoverRankingHtml($record)) + ->html(), + ]), ]); } @@ -1551,6 +1586,64 @@ private static function resolveTechnicalDetailsState(?Channel $record): string return 'ok'; } + /** + * Render the channel's failover ranking as an HTML table for the infolist. + * + * Pulls each failover's persisted score and per-attribute breakdown from + * channel_failovers.metadata. Returns null when the channel has no + * failovers attached so the section can hide itself. + */ + private static function renderFailoverRankingHtml(?Channel $record): ?HtmlString + { + if (! $record) { + return null; + } + + $failovers = $record->failovers() + ->with('channelFailover') + ->orderBy('sort') + ->get(); + + if ($failovers->isEmpty()) { + return null; + } + + $bodyRows = $failovers->map(function ($failover, int $index) { + $channel = $failover->channelFailover; + if (! $channel) { + return ''; + } + + $metadata = $failover->metadata ?? []; + $score = $metadata['score'] ?? null; + $breakdown = $metadata['attribute_scores'] ?? []; + + $rankBadge = '#'.($index + 1).''; + $displayTitle = e($channel->title_custom ?: $channel->title ?: $channel->name); + $playlistName = e($channel->getEffectivePlaylist()->name ?? 'Unknown'); + $titleCell = "
{$displayTitle}
{$playlistName}
"; + + $scoreCell = $score !== null + ? ''.number_format((int) $score).'' + : 'not scored'; + + $breakdownParts = []; + foreach ($breakdown as $attribute => $value) { + $label = e(str_replace('_', ' ', $attribute)); + $breakdownParts[] = "{$label}".(int) $value.''; + } + $breakdownCell = $breakdownParts + ? '
'.implode('', $breakdownParts).'
' + : ''; + + return "{$rankBadge}{$titleCell}{$scoreCell}{$breakdownCell}"; + })->implode(''); + + $headerRow = 'RankChannelScoreBreakdown (per attribute, 0-100)'; + + return new HtmlString("{$headerRow}{$bodyRows}
"); + } + public static function getForm($customPlaylist = null, $edit = false): array { return [ From 4f4b0c73faea557d2fbe16bb405780e4040faede Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 23:12:05 +0100 Subject: [PATCH 07/16] feat: Hide tech details for virtual primaries; expandable failover cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Virtual primaries (custom channel + empty URL) can't be probed — they have no URL of their own. The Technical Details section now hides when both flags are set, since the panel would always show "not probed yet". Failover Ranking section is restructured from a flat table into a stack of expandable disclosure cards. Each summary row still shows rank + title + score badge; expanding (native
/, no JS) reveals the score breakdown plus that failover's technical details — resolution, fps, video bitrate, codec, audio info, last probed timestamp. Falls back to a "Not yet probed" hint when stream_stats are empty. Layout reads cleanly at all widths and keeps users from having to navigate to each individual failover channel just to compare quality. --- .../Resources/Channels/ChannelResource.php | 119 ++++++++++++++---- 1 file changed, 97 insertions(+), 22 deletions(-) diff --git a/app/Filament/Resources/Channels/ChannelResource.php b/app/Filament/Resources/Channels/ChannelResource.php index 9c5b59052..19029b66c 100644 --- a/app/Filament/Resources/Channels/ChannelResource.php +++ b/app/Filament/Resources/Channels/ChannelResource.php @@ -1355,7 +1355,7 @@ public static function infolist(Schema $schema): Schema ]), Section::make(__('Technical Details')) ->collapsible() - ->visible(fn ($record) => $record && ! $record->is_vod) + ->visible(fn ($record) => $record && ! $record->is_vod && ! ($record->is_custom && empty($record->url))) ->headerActions([ Action::make('probe') ->label(fn ($record) => match (self::resolveTechnicalDetailsState($record)) { @@ -1587,11 +1587,13 @@ private static function resolveTechnicalDetailsState(?Channel $record): string } /** - * Render the channel's failover ranking as an HTML table for the infolist. + * Render the channel's failover ranking as a stack of expandable cards. * - * Pulls each failover's persisted score and per-attribute breakdown from - * channel_failovers.metadata. Returns null when the channel has no - * failovers attached so the section can hide itself. + * Each card's summary row shows rank + title + score; expanding reveals + * the per-attribute breakdown plus the failover's probed technical + * details (resolution, fps, bitrate, codec, audio info, last probed). + * Returns null when the channel has no failovers attached so the section + * can hide itself. */ private static function renderFailoverRankingHtml(?Channel $record): ?HtmlString { @@ -1608,7 +1610,7 @@ private static function renderFailoverRankingHtml(?Channel $record): ?HtmlString return null; } - $bodyRows = $failovers->map(function ($failover, int $index) { + $cards = $failovers->map(function ($failover, int $index) { $channel = $failover->channelFailover; if (! $channel) { return ''; @@ -1618,30 +1620,103 @@ private static function renderFailoverRankingHtml(?Channel $record): ?HtmlString $score = $metadata['score'] ?? null; $breakdown = $metadata['attribute_scores'] ?? []; - $rankBadge = '#'.($index + 1).''; $displayTitle = e($channel->title_custom ?: $channel->title ?: $channel->name); $playlistName = e($channel->getEffectivePlaylist()->name ?? 'Unknown'); - $titleCell = "
{$displayTitle}
{$playlistName}
"; - $scoreCell = $score !== null - ? ''.number_format((int) $score).'' - : 'not scored'; - - $breakdownParts = []; - foreach ($breakdown as $attribute => $value) { - $label = e(str_replace('_', ' ', $attribute)); - $breakdownParts[] = "{$label}".(int) $value.''; + $scoreBadge = $score !== null + ? 'Score '.(int) $score.'' + : 'not scored'; + + $summary = ' + + #'.($index + 1).' +
+
'.$displayTitle.'
+
'.$playlistName.'
+
+ '.$scoreBadge.' +
'; + + $expanded = '
'; + + if (! empty($breakdown)) { + $breakdownParts = []; + foreach ($breakdown as $attribute => $value) { + $label = e(str_replace('_', ' ', $attribute)); + $breakdownParts[] = ''.$label.''.(int) $value.''; + } + $expanded .= '
+
Score breakdown (per attribute, 0-100)
+
'.implode('', $breakdownParts).'
+
'; } - $breakdownCell = $breakdownParts - ? '
'.implode('', $breakdownParts).'
' - : ''; - return "{$rankBadge}{$titleCell}{$scoreCell}{$breakdownCell}"; + $expanded .= self::renderFailoverTechDetails($channel); + $expanded .= '
'; + + return '
'.$summary.$expanded.'
'; })->implode(''); - $headerRow = 'RankChannelScoreBreakdown (per attribute, 0-100)'; + return new HtmlString('
'.$cards.'
'); + } + + /** + * Render a single failover channel's technical details for the expandable + * ranking card. Returns a "not yet probed" hint when no stream stats are + * available so users know whether re-probing might help. + */ + private static function renderFailoverTechDetails(Channel $channel): string + { + if (empty($channel->stream_stats)) { + $hint = $channel->probe_enabled + ? __('Not yet probed — run a probe on this channel to capture stream details.') + : __('Probing is disabled for this channel.'); + + return '
+
Technical details
+
'.e($hint).'
+
'; + } + + $compact = $channel->getStreamStatsForDisplay()['compact'] ?? []; + $rows = []; + + $append = function (string $label, $value, ?string $suffix = null) use (&$rows) { + if ($value === null || $value === '') { + return; + } + $formatted = is_numeric($value) && $suffix === ' kbps' + ? number_format((float) $value, 0).$suffix + : ($suffix ? $value.$suffix : $value); + $rows[] = '
'.e($label).'
'.e((string) $formatted).'
'; + }; + + $append('Resolution', $compact['resolution'] ?? null); + $append('Frame rate', isset($compact['source_fps']) ? $compact['source_fps'] : null, ' fps'); + $append('Video codec', $compact['video_codec_display'] ?? null); + $append('Video bitrate', $compact['ffmpeg_output_bitrate'] ?? null, ' kbps'); + $append('Audio codec', $compact['audio_codec'] ?? null); + $append('Audio channels', $compact['audio_channels'] ?? null); + $append('Audio bitrate', $compact['audio_bitrate'] ?? null, ' kbps'); + $append('Audio language', $compact['audio_language'] ?? null); + + if (empty($rows)) { + return '
+
Technical details
+
'.e(__('Probe ran but returned no usable details.')).'
+
'; + } + + $probedAt = $channel->stream_stats_probed_at?->diffForHumans(); + $footer = $probedAt + ? '
'.e(__('Last probed').': '.$probedAt).'
' + : ''; - return new HtmlString("{$headerRow}{$bodyRows}
"); + return '
+
Technical details
+
'.implode('', $rows).'
+ '.$footer.' +
'; } public static function getForm($customPlaylist = null, $edit = false): array From 4ecf077bda6bfe5824926f45ee933e06a31ef4b7 Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 23:22:04 +0100 Subject: [PATCH 08/16] refactor: Promote failover rescoring to its own playlist Section Failover scoring now feeds three separate flows: scheduled rescoring, the per-channel "Rescore now" action, and the "Make virtual primary" bulk action. Previously the interval + staleness inputs lived inside the Auto-Merge Processing section and were hidden until auto-merge was on, which made the staleness window unreachable for users running manual rescoring without auto-merge. Lifts the two fields into a dedicated "Failover Rescoring" section, always visible. Section description spells out which flows it impacts; field helpers note which inputs apply where (in particular: the staleness window applies to scheduled and manual rescoring only, not to the bulk action which scores against existing stats). --- .../Resources/Playlists/PlaylistResource.php | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/app/Filament/Resources/Playlists/PlaylistResource.php b/app/Filament/Resources/Playlists/PlaylistResource.php index f2300c1b5..d89c2bfc4 100644 --- a/app/Filament/Resources/Playlists/PlaylistResource.php +++ b/app/Filament/Resources/Playlists/PlaylistResource.php @@ -2116,27 +2116,29 @@ public static function getFormSections($creating = false, $includeAuth = false): }), ]), - Fieldset::make(__('Periodic Failover Rescoring (optional)')) - ->columnSpanFull() - ->columns(2) - ->hidden(fn (Get $get): bool => ! $get('auto_merge_channels_enabled')) - ->schema([ - Select::make('auto_rescore_failovers_interval') - ->label(__('Re-score failovers')) - ->options([ - 'daily' => __('Daily'), - 'weekly' => __('Weekly'), - ]) - ->placeholder(__('Off')) - ->helperText(__('Periodically re-score this playlist\'s failover groups so the highest-quality source bubbles to the top. Master channels are never promoted or replaced; only failover sort order changes.')), - TextInput::make('failover_rescore_staleness_days') - ->label(__('Re-probe channels older than (days)')) - ->numeric() - ->default(7) - ->minValue(0) - ->maxValue(365) - ->helperText(__('Channels whose stream stats are older than this will be re-probed during rescoring. Set to 0 to always re-probe.')), - ]), + ]), + Section::make(__('Failover Rescoring')) + ->description(__('Keeps failover ordering in sync with current stream quality. Affects three places: scheduled rescoring (the interval below), the per-channel "Rescore now" action, and the "Make virtual primary" bulk action. The Priority Order under Auto-Merge above is reused for the actual scoring in all three.')) + ->columnSpanFull() + ->collapsible() + ->collapsed($creating) + ->columns(2) + ->schema([ + Select::make('auto_rescore_failovers_interval') + ->label(__('Periodic rescoring')) + ->options([ + 'daily' => __('Daily'), + 'weekly' => __('Weekly'), + ]) + ->placeholder(__('Off')) + ->helperText(__('Schedule a recurring rescore for every failover group in this playlist. Master channels are never promoted or replaced — only failover sort order changes. Off = rescore manually only via the "Rescore now" button.')), + TextInput::make('failover_rescore_staleness_days') + ->label(__('Re-probe channels older than (days)')) + ->numeric() + ->default(7) + ->minValue(0) + ->maxValue(365) + ->helperText(__('During scheduled or manual rescoring, channels with stats older than this are re-probed first. Set to 0 to always re-probe. The "Make virtual primary" action uses existing stats only and does not consult this setting.')), ]), Section::make(__('Find & Replace Rules')) ->description(__('Define find & replace rules that automatically run after each playlist sync. Rules execute in order.')) From 1d08e843216897438ffb99e9d2fd7b1097918710 Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 23:30:27 +0100 Subject: [PATCH 09/16] refactor: Rename "virtual primary" to "smart channel" throughout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User-facing name change with no behavioral impact. "Virtual primary" described what the channel isn't (no URL of its own); "smart channel" describes what it does for users (auto-selects the best source). - Class: VirtualPrimaryCreator → SmartChannelCreator (file renamed via git mv to preserve history) - Test file renamed to match - Bulk action: make_virtual_primary → make_smart_channel; label, modal copy, and success notification updated - PlaylistResource Failover Rescoring section description and helper text reference the new name - RescoreChannelFailovers docblock updated - One test name reflects the new term - Database column / is_custom flag unchanged — those describe the underlying mechanism, not the user-facing concept --- .../Resources/Channels/ChannelResource.php | 18 +++++++------- .../Resources/Playlists/PlaylistResource.php | 4 ++-- app/Jobs/RescoreChannelFailovers.php | 2 +- ...aryCreator.php => SmartChannelCreator.php} | 14 +++++------ tests/Feature/RescoreChannelFailoversTest.php | 2 +- ...orTest.php => SmartChannelCreatorTest.php} | 24 +++++++++---------- 6 files changed, 32 insertions(+), 32 deletions(-) rename app/Services/Channels/{VirtualPrimaryCreator.php => SmartChannelCreator.php} (92%) rename tests/Feature/{VirtualPrimaryCreatorTest.php => SmartChannelCreatorTest.php} (87%) diff --git a/app/Filament/Resources/Channels/ChannelResource.php b/app/Filament/Resources/Channels/ChannelResource.php index 19029b66c..22b28923c 100644 --- a/app/Filament/Resources/Channels/ChannelResource.php +++ b/app/Filament/Resources/Channels/ChannelResource.php @@ -22,7 +22,7 @@ use App\Models\Group; use App\Models\Playlist; use App\Models\StreamProfile; -use App\Services\Channels\VirtualPrimaryCreator; +use App\Services\Channels\SmartChannelCreator; use App\Services\DateFormatService; use App\Services\EpgCacheService; use App\Services\LogoCacheService; @@ -1118,15 +1118,15 @@ private static function getBulkActionSchema(bool $addToCustom, bool $includeReco ->modalIcon('heroicon-o-arrow-path-rounded-square') ->modalDescription(__('Add the selected channel(s) to the chosen channel as failover sources.')) ->modalSubmitActionLabel(__('Add failovers now')), - BulkAction::make('make_virtual_primary') - ->label(__('Make virtual primary')) + BulkAction::make('make_smart_channel') + ->label(__('Make smart channel')) ->schema(function (Collection $records) { $playlists = $records->pluck('playlist_id')->unique(); $playlistForScoring = $playlists->count() === 1 ? Playlist::find($playlists->first()) : null; - $creator = VirtualPrimaryCreator::fromPlaylist($playlistForScoring); + $creator = SmartChannelCreator::fromPlaylist($playlistForScoring); $ranking = $creator->rank($records); $rows = $ranking->map(function ($row, int $index) { @@ -1161,7 +1161,7 @@ private static function getBulkActionSchema(bool $addToCustom, bool $includeReco ->maxLength(255), Toggle::make('disable_sources') ->label(__('Disable source channels')) - ->helperText(__('When enabled, the selected source channels will be disabled after being attached as failovers. They\'ll only be reachable via the new virtual primary.')) + ->helperText(__('When enabled, the selected source channels will be disabled after being attached as failovers. They\'ll only be reachable via the new smart channel.')) ->default(false) ->inline(false), ]; @@ -1176,7 +1176,7 @@ private static function getBulkActionSchema(bool $addToCustom, bool $includeReco ? Playlist::find($playlists->first()) : null; - VirtualPrimaryCreator::fromPlaylist($playlistForScoring)->create( + SmartChannelCreator::fromPlaylist($playlistForScoring)->create( channels: $records, title: $data['title'] ?? null, disableSources: (bool) ($data['disable_sources'] ?? false), @@ -1185,7 +1185,7 @@ private static function getBulkActionSchema(bool $addToCustom, bool $includeReco ->after(function () { Notification::make() ->success() - ->title(__('Virtual primary created')) + ->title(__('Smart channel created')) ->body(__('A custom channel was created with the selected sources attached as failovers, ranked by quality.')) ->send(); }) @@ -1193,8 +1193,8 @@ private static function getBulkActionSchema(bool $addToCustom, bool $includeReco ->requiresConfirmation() ->icon('heroicon-o-arrow-trending-up') ->modalIcon('heroicon-o-arrow-trending-up') - ->modalDescription(__('Create a custom "virtual primary" channel from the selected channels. The highest-scoring source\'s title, logo, and EPG mapping will be copied. All selected channels become failovers, sorted by score, and the playlist will stream the top failover automatically.')) - ->modalSubmitActionLabel(__('Create virtual primary')), + ->modalDescription(__('Create a custom "smart channel" from the selected channels. The highest-scoring source\'s title, logo, and EPG mapping will be copied. All selected channels become failovers, sorted by score, and the playlist will stream the top failover automatically.')) + ->modalSubmitActionLabel(__('Create smart channel')), ]), // -- Probing -- diff --git a/app/Filament/Resources/Playlists/PlaylistResource.php b/app/Filament/Resources/Playlists/PlaylistResource.php index d89c2bfc4..14bfed48a 100644 --- a/app/Filament/Resources/Playlists/PlaylistResource.php +++ b/app/Filament/Resources/Playlists/PlaylistResource.php @@ -2118,7 +2118,7 @@ public static function getFormSections($creating = false, $includeAuth = false): ]), Section::make(__('Failover Rescoring')) - ->description(__('Keeps failover ordering in sync with current stream quality. Affects three places: scheduled rescoring (the interval below), the per-channel "Rescore now" action, and the "Make virtual primary" bulk action. The Priority Order under Auto-Merge above is reused for the actual scoring in all three.')) + ->description(__('Keeps failover ordering in sync with current stream quality. Affects three places: scheduled rescoring (the interval below), the per-channel "Rescore now" action, and the "Make smart channel" bulk action. The Priority Order under Auto-Merge above is reused for the actual scoring in all three.')) ->columnSpanFull() ->collapsible() ->collapsed($creating) @@ -2138,7 +2138,7 @@ public static function getFormSections($creating = false, $includeAuth = false): ->default(7) ->minValue(0) ->maxValue(365) - ->helperText(__('During scheduled or manual rescoring, channels with stats older than this are re-probed first. Set to 0 to always re-probe. The "Make virtual primary" action uses existing stats only and does not consult this setting.')), + ->helperText(__('During scheduled or manual rescoring, channels with stats older than this are re-probed first. Set to 0 to always re-probe. The "Make smart channel" action uses existing stats only and does not consult this setting.')), ]), Section::make(__('Find & Replace Rules')) ->description(__('Define find & replace rules that automatically run after each playlist sync. Rules execute in order.')) diff --git a/app/Jobs/RescoreChannelFailovers.php b/app/Jobs/RescoreChannelFailovers.php index 09a2c19f4..1862d9335 100644 --- a/app/Jobs/RescoreChannelFailovers.php +++ b/app/Jobs/RescoreChannelFailovers.php @@ -23,7 +23,7 @@ * so the highest-scoring source sits at sort=0. * * The master channel is intentionally never promoted or replaced. For - * "virtual-primary" masters (custom channel with no URL), the existing + * "smart channel" masters (custom channel with no URL), the existing * PlaylistUrlService::getChannelUrl() falls back to the first failover, so * re-ordering the failovers is enough to switch the effective stream URL. * For real-channel masters, this job simply re-orders failovers — the master diff --git a/app/Services/Channels/VirtualPrimaryCreator.php b/app/Services/Channels/SmartChannelCreator.php similarity index 92% rename from app/Services/Channels/VirtualPrimaryCreator.php rename to app/Services/Channels/SmartChannelCreator.php index 9b02c8f5c..a287ff654 100644 --- a/app/Services/Channels/VirtualPrimaryCreator.php +++ b/app/Services/Channels/SmartChannelCreator.php @@ -8,7 +8,7 @@ use Illuminate\Support\Collection; /** - * Builds a "virtual primary" channel from a selection of source channels. + * Builds a "smart channel" from a selection of source channels. * * The custom channel has no URL of its own. The source channels are attached * as failovers, ranked by ChannelMergeScorer score. PlaylistUrlService falls @@ -16,17 +16,17 @@ * effective stream URL always tracks the highest-scoring source. * * Identity (title, logo, EPG mapping, group) is copied from the highest-scoring - * source, which is also where the virtual primary is parented. + * source, which is also where the smart channel is parented. */ -class VirtualPrimaryCreator +class SmartChannelCreator { public function __construct( protected ChannelMergeScorer $scorer, ) {} /** - * Score the supplied channels, create a virtual-primary custom channel from - * the top scorer, and attach all sources as failovers in score order. + * Score the supplied channels, create a custom smart channel from the top + * scorer, and attach all sources as failovers in score order. * * Score breakdowns are persisted to channel_failovers.metadata so the * rationale stays inspectable later (e.g. via UI or DB query). @@ -36,7 +36,7 @@ public function __construct( public function create(Collection $channels, ?string $title = null, bool $disableSources = false): Channel { if ($channels->isEmpty()) { - throw new \InvalidArgumentException('Cannot build a virtual primary from an empty selection.'); + throw new \InvalidArgumentException('Cannot build a smart channel from an empty selection.'); } $ranking = $this->rank($channels); @@ -93,7 +93,7 @@ public function create(Collection $channels, ?string $title = null, bool $disabl * Score and rank the supplied channels, returning each with its score and * per-attribute breakdown. Same logic as create() uses internally — exposed * so callers (e.g. bulk-action modals) can preview the ranking before - * committing to creating the virtual primary. + * committing to creating the smart channel. * * @param Collection $channels * @return Collection}> diff --git a/tests/Feature/RescoreChannelFailoversTest.php b/tests/Feature/RescoreChannelFailoversTest.php index 90dbf610e..1ed8e7b60 100644 --- a/tests/Feature/RescoreChannelFailoversTest.php +++ b/tests/Feature/RescoreChannelFailoversTest.php @@ -83,7 +83,7 @@ function rescoreChannel(User $user, Playlist $playlist, array $overrides, ?array ]); }); -it('flips the effective virtual-primary URL when the top failover changes', function () { +it('flips the effective smart-channel URL when the top failover changes', function () { $master = rescoreChannel($this->user, $this->playlist, [ 'name' => 'Virtual Primary', 'is_custom' => true, diff --git a/tests/Feature/VirtualPrimaryCreatorTest.php b/tests/Feature/SmartChannelCreatorTest.php similarity index 87% rename from tests/Feature/VirtualPrimaryCreatorTest.php rename to tests/Feature/SmartChannelCreatorTest.php index 48bf3a117..a5b3bc57a 100644 --- a/tests/Feature/VirtualPrimaryCreatorTest.php +++ b/tests/Feature/SmartChannelCreatorTest.php @@ -6,7 +6,7 @@ use App\Models\EpgChannel; use App\Models\Playlist; use App\Models\User; -use App\Services\Channels\VirtualPrimaryCreator; +use App\Services\Channels\SmartChannelCreator; use App\Services\PlaylistUrlService; use Filament\Actions\BulkAction; use Filament\Schemas\Components\Component; @@ -38,7 +38,7 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta ], $overrides)); } -it('registers make_virtual_primary in the channel BulkModalActionGroup', function () { +it('registers make_smart_channel in the channel BulkModalActionGroup', function () { $bulkActions = ChannelResource::getTableBulkActions(); $group = $bulkActions[0]; @@ -57,7 +57,7 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta } } - expect($names)->toContain('make_virtual_primary'); + expect($names)->toContain('make_smart_channel'); }); it('creates a custom channel with copied identity from the highest-scoring source', function () { @@ -77,7 +77,7 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], ]); - $virtual = VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect([$low, $high])); + $virtual = SmartChannelCreator::fromPlaylist($this->playlist)->create(collect([$low, $high])); expect($virtual->is_custom)->toBeTrue() ->and($virtual->url)->toBeNull() @@ -95,7 +95,7 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta ['stream' => ['codec_type' => 'video', 'codec_name' => 'hevc', 'width' => 3840, 'height' => 2160]], ]); - $virtual = VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect([$sd, $hd, $uhd])); + $virtual = SmartChannelCreator::fromPlaylist($this->playlist)->create(collect([$sd, $hd, $uhd])); $sorted = ChannelFailover::where('channel_id', $virtual->id)->orderBy('sort')->get(); @@ -111,7 +111,7 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], ]); - $virtual = VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect([$sd, $hd])); + $virtual = SmartChannelCreator::fromPlaylist($this->playlist)->create(collect([$sd, $hd])); expect((new PlaylistUrlService)->getChannelUrl($virtual->fresh(), 'http://m3u.test'))->toContain('hd.example'); }); @@ -122,7 +122,7 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], ]); - VirtualPrimaryCreator::fromPlaylist($this->playlist)->create( + SmartChannelCreator::fromPlaylist($this->playlist)->create( channels: collect([$hd, $sd]), disableSources: true, ); @@ -137,7 +137,7 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], ]); - VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect([$hd, $sd])); + SmartChannelCreator::fromPlaylist($this->playlist)->create(collect([$hd, $sd])); expect($hd->fresh()->enabled)->toBeTrue() ->and($sd->fresh()->enabled)->toBeTrue(); @@ -146,7 +146,7 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta it('uses the provided title when one is supplied', function () { $hd = vpChannel($this->user, $this->playlist, ['title' => 'BBC One HD']); - $virtual = VirtualPrimaryCreator::fromPlaylist($this->playlist)->create( + $virtual = SmartChannelCreator::fromPlaylist($this->playlist)->create( channels: collect([$hd]), title: 'BBC One', ); @@ -156,7 +156,7 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta }); it('throws when called with an empty channel collection', function () { - VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect()); + SmartChannelCreator::fromPlaylist($this->playlist)->create(collect()); })->throws(InvalidArgumentException::class); it('persists score and per-attribute breakdown on each channel_failovers row', function () { @@ -165,7 +165,7 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], ]); - $virtual = VirtualPrimaryCreator::fromPlaylist($this->playlist)->create(collect([$sd, $hd])); + $virtual = SmartChannelCreator::fromPlaylist($this->playlist)->create(collect([$sd, $hd])); $hdFailover = ChannelFailover::where('channel_id', $virtual->id) ->where('channel_failover_id', $hd->id) @@ -184,7 +184,7 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], ]); - $ranking = VirtualPrimaryCreator::fromPlaylist($this->playlist)->rank(collect([$sd, $hd])); + $ranking = SmartChannelCreator::fromPlaylist($this->playlist)->rank(collect([$sd, $hd])); expect($ranking)->toHaveCount(2) ->and($ranking[0]['channel']->id)->toBe($hd->id) From 85a304bef7f93cb51f8d22bde4cd530f636563df Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 23:40:45 +0100 Subject: [PATCH 10/16] feat: First-class is_smart_channel flag on channels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Smart-channel-ness was previously emergent from is_custom + empty url + has failovers. The composite check leaks across UI gating, can't easily be queried, and makes it easy for a user to construct a "looks like one but isn't" config that silently fails to stream. Adds an explicit is_smart_channel boolean column with an index. The migration backfills existing channels that match the historic composite shape so rows created via earlier bulk-action runs flip cleanly. Channel model gains an isSmartChannel() helper plus a smartChannels() query scope. SmartChannelCreator now sets the flag on creation. The infolist Technical Details section, the URL field's lock, and the new "Smart" column in the channel list all read the flag directly. The edit form also exposes a "Smart channel" toggle for custom channels so users can manually flip existing wrappers without going through the bulk action. The flag and the underlying mechanism (is_custom + empty url + failovers) stay in sync naturally — the toggle drives the flag, and PlaylistUrlService keeps using the composite check at stream time, so the two never diverge in a user-visible way. --- .../Resources/Channels/ChannelResource.php | 33 +++++++++++--- app/Models/Channel.php | 24 ++++++++++ app/Services/Channels/SmartChannelCreator.php | 9 ++-- ...add_is_smart_channel_to_channels_table.php | 44 +++++++++++++++++++ tests/Feature/SmartChannelCreatorTest.php | 28 ++++++++++++ 5 files changed, 129 insertions(+), 9 deletions(-) create mode 100644 database/migrations/2026_04_26_233628_add_is_smart_channel_to_channels_table.php diff --git a/app/Filament/Resources/Channels/ChannelResource.php b/app/Filament/Resources/Channels/ChannelResource.php index 22b28923c..093fa54d3 100644 --- a/app/Filament/Resources/Channels/ChannelResource.php +++ b/app/Filament/Resources/Channels/ChannelResource.php @@ -235,6 +235,16 @@ public static function getTableColumns($showGroup = true, $showPlaylist = true): ->badge() ->toggleable() ->sortable(), + IconColumn::make('is_smart_channel') + ->label(__('Smart')) + ->icon('heroicon-o-sparkles') + ->color('info') + ->tooltip(fn ($record): ?string => $record->is_smart_channel ? __('Smart channel — streams the highest-ranked failover automatically') : null) + ->getStateUsing(fn ($record): bool => (bool) $record->is_smart_channel) + ->boolean() + ->falseIcon('') + ->sortable() + ->toggleable(), TextInputColumn::make('stream_id_custom') ->label(__('ID')) ->rules(['min:0', 'max:255']) @@ -1355,7 +1365,7 @@ public static function infolist(Schema $schema): Schema ]), Section::make(__('Technical Details')) ->collapsible() - ->visible(fn ($record) => $record && ! $record->is_vod && ! ($record->is_custom && empty($record->url))) + ->visible(fn ($record) => $record && ! $record->is_vod && ! $record->isSmartChannel()) ->headerActions([ Action::make('probe') ->label(fn ($record) => match (self::resolveTechnicalDetailsState($record)) { @@ -1738,6 +1748,12 @@ public static function getForm($customPlaylist = null, $edit = false): array Toggle::make('probe_enabled') ->default(true) ->helperText(__('Allow probing this channel when running playlist channel probe jobs.')), + Toggle::make('is_smart_channel') + ->label(__('Smart channel')) + ->default(false) + ->live() + ->helperText(__('Auto-streams the highest-ranked failover. URL field is locked while on. Custom channels only.')) + ->visible(fn (Get $get) => (bool) $get('is_custom')), ]), Fieldset::make(__('Playlist Type (choose one)')) ->schema([ @@ -1873,12 +1889,19 @@ public static function getForm($customPlaylist = null, $edit = false): array ->columnSpan(1) ->prefixIcon('heroicon-m-globe-alt') ->hintIcon( - icon: fn (Get $get) => $get('is_custom') ? null : 'heroicon-m-question-mark-circle', - tooltip: fn (Get $get) => $get('is_custom') ? null : 'The original URL from the playlist provider. This is read-only and cannot be modified. This URL is automatically updated on Playlist sync.' + icon: fn (Get $get) => $get('is_smart_channel') + ? 'heroicon-m-sparkles' + : ($get('is_custom') ? null : 'heroicon-m-question-mark-circle'), + tooltip: fn (Get $get) => $get('is_smart_channel') + ? 'This is a smart channel. The streamed URL is taken from the highest-ranked failover automatically — set the URL on a failover channel instead, or remove the smart-channel flag to manage the URL directly.' + : ($get('is_custom') ? null : 'The original URL from the playlist provider. This is read-only and cannot be modified. This URL is automatically updated on Playlist sync.') ) + ->helperText(fn (Get $get) => $get('is_smart_channel') + ? __('Smart channels rely on auto-failover; setting a URL here would override that.') + : null) ->formatStateUsing(fn ($record) => $record?->url) - ->disabled(fn (Get $get) => ! $get('is_custom')) // make it read-only but copyable for non-custom channels - ->dehydrated(fn (Get $get) => $get('is_custom')) // don't save the value in the database for custom channels + ->disabled(fn (Get $get) => $get('is_smart_channel') || ! $get('is_custom')) + ->dehydrated(fn (Get $get) => ! $get('is_smart_channel') && $get('is_custom')) ->type('url'), TextInput::make('url_custom') ->label(__('URL Override')) diff --git a/app/Models/Channel.php b/app/Models/Channel.php index 2441345f7..c4fd0f753 100644 --- a/app/Models/Channel.php +++ b/app/Models/Channel.php @@ -49,6 +49,7 @@ class Channel extends Model 'extvlcopt' => 'array', 'kodidrop' => 'array', 'is_custom' => 'boolean', + 'is_smart_channel' => 'boolean', 'is_vod' => 'boolean', 'enable_proxy' => 'boolean', 'tmdb_id' => 'integer', @@ -821,6 +822,29 @@ public function hasMovieId(): bool return $this->getTmdbId() !== null || $this->getImdbId() !== null; } + /** + * Convenience helper: same as reading $this->is_smart_channel, but cast-safe + * for code that wants a boolean expression in templates / closures. + */ + public function isSmartChannel(): bool + { + return (bool) $this->is_smart_channel; + } + + /** + * Filter to only channels that have been classified as smart channels. + * + * Smart channels are custom wrappers with no URL of their own; the + * effective stream URL comes from the highest-ranked attached failover + * via PlaylistUrlService::getChannelUrl(). The flag is set explicitly + * (e.g. by SmartChannelCreator) — composite "looks like one" configs + * don't auto-classify. + */ + public function scopeSmartChannels(Builder $query): Builder + { + return $query->where('is_smart_channel', true); + } + public function scopeHasMovieId(Builder $query): Builder { $isPgsql = config('database.connections.'.config('database.default').'.driver') === 'pgsql'; diff --git a/app/Services/Channels/SmartChannelCreator.php b/app/Services/Channels/SmartChannelCreator.php index a287ff654..7e06c9b1a 100644 --- a/app/Services/Channels/SmartChannelCreator.php +++ b/app/Services/Channels/SmartChannelCreator.php @@ -48,12 +48,13 @@ public function create(Collection $channels, ?string $title = null, bool $disabl ? $title : ($top->title_custom ?: $top->title ?: $top->name); - $virtualPrimary = Channel::create([ + $smartChannel = Channel::create([ 'user_id' => $top->user_id, 'playlist_id' => $top->playlist_id, 'group_id' => $top->group_id, 'group' => $top->group, 'is_custom' => true, + 'is_smart_channel' => true, 'enabled' => true, 'url' => null, 'title' => $resolvedTitle, @@ -69,8 +70,8 @@ public function create(Collection $channels, ?string $title = null, bool $disabl $rankedAt = now()->toIso8601String(); foreach ($ranking as $index => $row) { ChannelFailover::create([ - 'user_id' => $virtualPrimary->user_id, - 'channel_id' => $virtualPrimary->id, + 'user_id' => $smartChannel->user_id, + 'channel_id' => $smartChannel->id, 'channel_failover_id' => $row['channel']->id, 'sort' => $index, 'metadata' => [ @@ -86,7 +87,7 @@ public function create(Collection $channels, ?string $title = null, bool $disabl Channel::whereIn('id', $channels->pluck('id')->all())->update(['enabled' => false]); } - return $virtualPrimary->fresh(); + return $smartChannel->fresh(); } /** diff --git a/database/migrations/2026_04_26_233628_add_is_smart_channel_to_channels_table.php b/database/migrations/2026_04_26_233628_add_is_smart_channel_to_channels_table.php new file mode 100644 index 000000000..6bd859198 --- /dev/null +++ b/database/migrations/2026_04_26_233628_add_is_smart_channel_to_channels_table.php @@ -0,0 +1,44 @@ +boolean('is_smart_channel')->default(false)->after('is_custom'); + $table->index('is_smart_channel'); + }); + + // Backfill: any existing custom channel with no URL of its own that + // already has at least one failover attached is, in effect, a smart + // channel — flip the flag so the UI/scoping treats it as one. + DB::table('channels') + ->where('is_custom', true) + ->whereNull('url') + ->whereExists(function ($query) { + $query->select(DB::raw(1)) + ->from('channel_failovers') + ->whereColumn('channel_failovers.channel_id', 'channels.id'); + }) + ->update(['is_smart_channel' => true]); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('channels', function (Blueprint $table) { + $table->dropIndex(['is_smart_channel']); + $table->dropColumn('is_smart_channel'); + }); + } +}; diff --git a/tests/Feature/SmartChannelCreatorTest.php b/tests/Feature/SmartChannelCreatorTest.php index a5b3bc57a..debab4532 100644 --- a/tests/Feature/SmartChannelCreatorTest.php +++ b/tests/Feature/SmartChannelCreatorTest.php @@ -178,6 +178,34 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta ->and($hdFailover->metadata['attribute_scores']['resolution'])->toBe(25); // 1920x1080 / 82944 ≈ 25 }); +it('flags the created channel with is_smart_channel = true', function () { + $hd = vpChannel($this->user, $this->playlist, ['title' => 'HD']); + $sd = vpChannel($this->user, $this->playlist, ['title' => 'SD'], stats: [ + ['stream' => ['codec_type' => 'video', 'codec_name' => 'h264', 'width' => 720, 'height' => 480]], + ]); + + $smartChannel = SmartChannelCreator::fromPlaylist($this->playlist)->create(collect([$sd, $hd])); + + expect($smartChannel->is_smart_channel)->toBeTrue() + ->and($smartChannel->isSmartChannel())->toBeTrue() + ->and($smartChannel->is_custom)->toBeTrue() + ->and($smartChannel->url)->toBeNull(); +}); + +it('smartChannels query scope filters to flagged channels only', function () { + $hd = vpChannel($this->user, $this->playlist, ['title' => 'HD']); + $sd = vpChannel($this->user, $this->playlist, ['title' => 'SD']); + + SmartChannelCreator::fromPlaylist($this->playlist)->create(collect([$hd, $sd])); + + $smartChannels = Channel::smartChannels()->get(); + + expect($smartChannels)->toHaveCount(1) + ->and($smartChannels->first()->is_smart_channel)->toBeTrue() + ->and($smartChannels->first()->id)->not->toBe($hd->id) + ->and($smartChannels->first()->id)->not->toBe($sd->id); +}); + it('rank() returns channels sorted by score with breakdowns', function () { $hd = vpChannel($this->user, $this->playlist, ['title' => 'HD']); $sd = vpChannel($this->user, $this->playlist, ['title' => 'SD'], stats: [ From 2556f132b2b2d08da4d332d50422642bac2163dd Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 23:44:51 +0100 Subject: [PATCH 11/16] refactor: Drop redundant helper text under smart-channel URL field The field is disabled when is_smart_channel is on, so the user can't type into it anyway. The sparkles hint icon (which surfaces the same explanation on hover) stays, and is the right place for the why. --- app/Filament/Resources/Channels/ChannelResource.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/Filament/Resources/Channels/ChannelResource.php b/app/Filament/Resources/Channels/ChannelResource.php index 093fa54d3..f74435c37 100644 --- a/app/Filament/Resources/Channels/ChannelResource.php +++ b/app/Filament/Resources/Channels/ChannelResource.php @@ -1896,9 +1896,6 @@ public static function getForm($customPlaylist = null, $edit = false): array ? 'This is a smart channel. The streamed URL is taken from the highest-ranked failover automatically — set the URL on a failover channel instead, or remove the smart-channel flag to manage the URL directly.' : ($get('is_custom') ? null : 'The original URL from the playlist provider. This is read-only and cannot be modified. This URL is automatically updated on Playlist sync.') ) - ->helperText(fn (Get $get) => $get('is_smart_channel') - ? __('Smart channels rely on auto-failover; setting a URL here would override that.') - : null) ->formatStateUsing(fn ($record) => $record?->url) ->disabled(fn (Get $get) => $get('is_smart_channel') || ! $get('is_custom')) ->dehydrated(fn (Get $get) => ! $get('is_smart_channel') && $get('is_custom')) From 06d9331ec079fa1ec2baa6fa19c2a7d297eadf03 Mon Sep 17 00:00:00 2001 From: warbs816 Date: Sun, 26 Apr 2026 23:52:21 +0100 Subject: [PATCH 12/16] feat: Smart Channel badge on Stream Monitor; fix list-column rendering MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stream Monitor now surfaces a "Smart Channel" badge (sparkles icon, sky palette to match the existing pill style) on any active stream whose backing channel has is_smart_channel = true. Helps operators spot at a glance when a stream is being routed through the auto-failover layer versus a direct provider URL. Also fixes the channel-list IconColumn that was rendering the sparkles icon for every row regardless of the flag — replaced the .icon() + .boolean() combo with a closure-based icon that returns null for non-smart rows so they render empty. --- app/Filament/Pages/M3uProxyStreamMonitor.php | 3 +++ app/Filament/Resources/Channels/ChannelResource.php | 7 ++----- .../filament/pages/m3u-proxy-stream-monitor.blade.php | 6 ++++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/app/Filament/Pages/M3uProxyStreamMonitor.php b/app/Filament/Pages/M3uProxyStreamMonitor.php index 2f188aaea..590e72335 100644 --- a/app/Filament/Pages/M3uProxyStreamMonitor.php +++ b/app/Filament/Pages/M3uProxyStreamMonitor.php @@ -333,11 +333,13 @@ protected function getActiveStreams(): array if (isset($stream['metadata']['type']) && isset($stream['metadata']['id'])) { $modelType = $stream['metadata']['type']; $modelId = $stream['metadata']['id']; + $isSmartChannel = false; if ($modelType === 'channel') { $channel = $channelsById[$modelId] ?? null; if ($channel) { $title = $channel->name_custom ?? $channel->name ?? $channel->title; $logo = LogoFacade::getChannelLogoUrl($channel); + $isSmartChannel = (bool) $channel->is_smart_channel; } } elseif ($modelType === 'episode') { $episode = $episodesById[$modelId] ?? null; @@ -350,6 +352,7 @@ protected function getActiveStreams(): array $model = [ 'title' => $title ?? 'N/A', 'logo' => $logo, + 'is_smart_channel' => $isSmartChannel, ]; } } diff --git a/app/Filament/Resources/Channels/ChannelResource.php b/app/Filament/Resources/Channels/ChannelResource.php index f74435c37..f41a8e32b 100644 --- a/app/Filament/Resources/Channels/ChannelResource.php +++ b/app/Filament/Resources/Channels/ChannelResource.php @@ -237,12 +237,9 @@ public static function getTableColumns($showGroup = true, $showPlaylist = true): ->sortable(), IconColumn::make('is_smart_channel') ->label(__('Smart')) - ->icon('heroicon-o-sparkles') + ->icon(fn ($record): ?string => $record?->is_smart_channel ? 'heroicon-o-sparkles' : null) ->color('info') - ->tooltip(fn ($record): ?string => $record->is_smart_channel ? __('Smart channel — streams the highest-ranked failover automatically') : null) - ->getStateUsing(fn ($record): bool => (bool) $record->is_smart_channel) - ->boolean() - ->falseIcon('') + ->tooltip(fn ($record): ?string => $record?->is_smart_channel ? __('Smart channel — streams the highest-ranked failover automatically') : null) ->sortable() ->toggleable(), TextInputColumn::make('stream_id_custom') diff --git a/resources/views/filament/pages/m3u-proxy-stream-monitor.blade.php b/resources/views/filament/pages/m3u-proxy-stream-monitor.blade.php index 1bc1034cf..3ced26551 100644 --- a/resources/views/filament/pages/m3u-proxy-stream-monitor.blade.php +++ b/resources/views/filament/pages/m3u-proxy-stream-monitor.blade.php @@ -189,6 +189,12 @@
+ @if($stream['model']['is_smart_channel'] ?? false) + + + Smart Channel + + @endif @if($stream['alias_name'] ?? false) Alias: {{ $stream['alias_name'] }} From 78d1bde5f2dec5969e67081265f1a335fc1341f6 Mon Sep 17 00:00:00 2001 From: warbs816 Date: Mon, 27 Apr 2026 00:02:49 +0100 Subject: [PATCH 13/16] feat: Warning banner when smart channel has no failovers; sync i18n MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A smart channel with no failovers attached can't stream — the URL field is locked, and there's nothing to fall back to. Adds a warning banner to the Failover Channels fieldset that appears whenever is_smart_channel is on and the failover repeater is empty. Reactive to both the toggle and the repeater, so users see it the moment they enter the broken state. Doesn't block save (the user might be configuring incrementally) — just makes the gap visible. Also runs app:sync-translations to wrap the new strings (badges, modal copy, helper text, section descriptions, the warning text itself) into lang/en.json. 83 new keys. --- .../Resources/Channels/ChannelResource.php | 13 +++ lang/en.json | 87 ++++++++++++++++++- 2 files changed, 98 insertions(+), 2 deletions(-) diff --git a/app/Filament/Resources/Channels/ChannelResource.php b/app/Filament/Resources/Channels/ChannelResource.php index f41a8e32b..e161d789a 100644 --- a/app/Filament/Resources/Channels/ChannelResource.php +++ b/app/Filament/Resources/Channels/ChannelResource.php @@ -2054,6 +2054,19 @@ public static function getForm($customPlaylist = null, $edit = false): array ]), Fieldset::make(__('Failover Channels')) ->schema([ + Placeholder::make('smart_channel_no_failovers_warning') + ->hiddenLabel() + ->columnSpanFull() + ->visible(fn (Get $get): bool => (bool) $get('is_smart_channel') && empty($get('failovers'))) + ->content(new HtmlString( + '
+ +
+ '.e(__('Smart channel without failovers won\'t stream.')).' ' + .e(__('Add at least one failover channel below — the smart channel takes its stream URL from the highest-ranked failover at stream time.')).' +
+
' + )), Repeater::make('failovers') ->relationship() ->label('') diff --git a/lang/en.json b/lang/en.json index 2b9c30b89..4a5ba62d2 100644 --- a/lang/en.json +++ b/lang/en.json @@ -16,6 +16,7 @@ "01:30:00": "01:30:00", "1": 1, "1-1000, higher = more preferred": "1-1000, higher = more preferred", + "10 based rating of the VOD content.": "10 based rating of the VOD content.", "2": 10, "3": 2, "4": 3, @@ -26,12 +27,13 @@ "8.7": "8.7", "9": 8, "10": 9, - "10 based rating of the VOD content.": "10 based rating of the VOD content.", ":name installed": ":name installed", ":name updated": ":name updated", "A SHA-256 checksum is required to stage this update.": "A SHA-256 checksum is required to stage this update.", "A channel dedicated to classic movies from the golden age of cinema": "A channel dedicated to classic movies from the golden age of cinema", + "A custom channel was created with the selected sources attached as failovers, ranked by quality.": "A custom channel was created with the selected sources attached as failovers, ranked by quality.", "A descriptive name for this post process.": "A descriptive name for this post process.", + "A descriptive name for this profile (e.g., \"720p Standard\", \"Twitch Stream\")": "A descriptive name for this profile (e.g., \"720p Standard\", \"Twitch Stream\")", "A descriptive name for this stream file setting profile": "A descriptive name for this stream file setting profile", "A descriptive name for this transcoding profile (e.g., \"720p Standard\", \"1080p High Quality\")": "A descriptive name for this transcoding profile (e.g., \"720p Standard\", \"1080p High Quality\")", "A new version is available": "A new version is available", @@ -69,6 +71,7 @@ "Add and manage authentication.": "Add and manage authentication.", "Add any custom headers to include when streaming a channel/episode.": "Add any custom headers to include when streaming a channel/episode.", "Add as failover": "Add as failover", + "Add at least one failover channel below — the smart channel takes its stream URL from the highest-ranked failover at stream time.": "Add at least one failover channel below — the smart channel takes its stream URL from the highest-ranked failover at stream time.", "Add auto-add rule": "Add auto-add rule", "Add available subtitle languages for this content.": "Add available subtitle languages for this content.", "Add backdrop/poster image URLs for this content.": "Add backdrop/poster image URLs for this content.", @@ -118,7 +121,10 @@ "Allow queue manager access": "Allow queue manager access", "Allow this channel to be merged during \"Merge Same ID\" jobs.": "Allow this channel to be merged during \"Merge Same ID\" jobs.", "Allowed Playlist Domains": "Allowed Playlist Domains", + "Allowed VOD groups": "Allowed VOD groups", "Allowed domains": "Allowed domains", + "Allowed live groups": "Allowed live groups", + "Allowed series categories": "Allowed series categories", "Also check VOD channel links in addition to live channels.": "Also check VOD channel links in addition to live channels.", "Alternative URLs": "Alternative URLs", "Alternative Xtream API URLs. If the primary URL fails during a sync, these will be tried in order (same credentials are used for all URLs).": "Alternative Xtream API URLs. If the primary URL fails during a sync, these will be tried in order (same credentials are used for all URLs).", @@ -142,6 +148,7 @@ "Are you sure you want to clear all selected VOD groups?": "Are you sure you want to clear all selected VOD groups?", "Are you sure you want to clear all selected categories?": "Are you sure you want to clear all selected categories?", "Are you sure you want to clear all selected live groups?": "Are you sure you want to clear all selected live groups?", + "Are you sure you want to clear all selected series categories?": "Are you sure you want to clear all selected series categories?", "Are you sure you want to delete the selected VOD channels? This action cannot be undone.": "Are you sure you want to delete the selected VOD channels? This action cannot be undone.", "Are you sure you want to delete this VOD channel? This action cannot be undone.": "Are you sure you want to delete this VOD channel? This action cannot be undone.", "Are you sure you want to delete this series? This will delete all episodes and seasons for this series. This action cannot be undone.": "Are you sure you want to delete this series? This will delete all episodes and seasons for this series. This action cannot be undone.", @@ -190,8 +197,10 @@ "Auto-Enable Settings": "Auto-Enable Settings", "Auto-Fetch Metadata": "Auto-Fetch Metadata", "Auto-Merge Processing": "Auto-Merge Processing", + "Auto-create groups/categories from TMDB genres": "Auto-create groups/categories from TMDB genres", "Auto-lookup on metadata fetch": "Auto-lookup on metadata fetch", "Auto-regenerate Schedule": "Auto-regenerate Schedule", + "Auto-streams the highest-ranked failover. URL field is locked while on. Custom channels only.": "Auto-streams the highest-ranked failover. URL field is locked while on. Custom channels only.", "Auto/Default": "Auto/Default", "Automated backups": "Automated backups", "Automatically assign sort number based on playlist order": "Automatically assign sort number based on playlist order", @@ -224,6 +233,7 @@ "Back to VOD": "Back to VOD", "Back to series": "Back to series", "Backdrop Images": "Backdrop Images", + "Backend": "Backend", "Backup & Restore": "Backup & Restore", "Backup Account": "Backup Account", "Backup Before Sync": "Backup Before Sync", @@ -277,15 +287,18 @@ "Capability Map": "Capability Map", "Cast": "Cast", "Catchup": "Catchup", + "Catchup Source": "Catchup Source", "Categories": "Categories", "Categories to import": "Categories to import", "Category": "Category", "Category Name": "Category Name", "Category Settings": "Category Settings", + "Category sort order": "Category sort order", "Ch #": "Ch #", "Channel": "Channel", "Channel Attributes to Copy": "Channel Attributes to Copy", "Channel Details": "Channel Details", + "Channel Filter (optional)": "Channel Filter (optional)", "Channel ID": "Channel ID", "Channel Match Attributes": "Channel Match Attributes", "Channel Name": "Channel Name", @@ -391,6 +404,7 @@ "Control how media is transcoded": "Control how media is transcoded", "Control request concurrency for parallel processing and add delays between requests to avoid provider rate limiting.": "Control request concurrency for parallel processing and add delays between requests to avoid provider rate limiting.", "Control what content is synced from the media server": "Control what content is synced from the media server", + "Cookies (Netscape format)": "Cookies (Netscape format)", "Copy Changes": "Copy Changes", "Copy now": "Copy now", "Copy the file hash from the GitHub release page to verify the download hasn't been tampered with.": "Copy the file hash from the GitHub release page to verify the download hasn't been tampered with.", @@ -410,11 +424,13 @@ "Create Networks in the Networks section to build pseudo-live channels": "Create Networks in the Networks section to build pseudo-live channels", "Create Plugin": "Create Plugin", "Create Token": "Create Token", + "Create a custom \"smart channel\" from the selected channels. The highest-scoring source's title, logo, and EPG mapping will be copied. All selected channels become failovers, sorted by score, and the playlist will stream the top failover automatically.": "Create a custom \"smart channel\" from the selected channels. The highest-scoring source's title, logo, and EPG mapping will be copied. All selected channels become failovers, sorted by score, and the playlist will stream the top failover automatically.", "Create an alias of an existing playlist or custom playlist to use a different Xtream API credentials, while still using the same underlying Channel, VOD and Series configurations of the linked playlist.": "Create an alias of an existing playlist or custom playlist to use a different Xtream API credentials, while still using the same underlying Channel, VOD and Series configurations of the linked playlist.", "Create credentials and assign them to your Playlist for simple authentication. They can also be used to access the Xtream API for the assigned Playlists.": "Create credentials and assign them to your Playlist for simple authentication. They can also be used to access the Xtream API for the assigned Playlists.", "Create live TV channels from your media server content": "Create live TV channels from your media server content", "Create now": "Create now", "Create playlists composed of channels from your other playlists. Head to channels to bulk add channels to your custom playlist.": "Create playlists composed of channels from your other playlists. Head to channels to bulk add channels to your custom playlist.", + "Create smart channel": "Create smart channel", "Creates a new security review of this plugin\\'s current files. Use this after updating plugin files on disk or after a failed install to re-trigger the review process without re-uploading.": "Creates a new security review of this plugin\\'s current files. Use this after updating plugin files on disk or after a failed install to re-trigger the review process without re-uploading.", "Credentials": "Credentials", "Current IDs": "Current IDs", @@ -442,8 +458,11 @@ "DVR Removed": "DVR Removed", "DVR Status": "DVR Status", "DVR Sync Status": "DVR Sync Status", + "Daily": "Daily", "Dashboard": "Dashboard", "Data Ownership": "Data Ownership", + "Database: Execute Query": "Database: Execute Query", + "Database: Get Schema": "Database: Get Schema", "Date Format": "Date Format", "Days of schedule to generate": "Days of schedule to generate", "Days to Import": "Days to Import", @@ -515,6 +534,7 @@ "Disable group channels now?": "Disable group channels now?", "Disable now": "Disable now", "Disable selected": "Disable selected", + "Disable source channels": "Disable source channels", "Disable stream probing for the selected channels. They will be excluded from stream probing jobs.": "Disable stream probing for the selected channels. They will be excluded from stream probing jobs.", "Disable the current category series now?": "Disable the current category series now?", "Disable the selected categories now?": "Disable the selected categories now?", @@ -555,6 +575,7 @@ "Duration (Seconds)": "Duration (Seconds)", "Duration in HH:MM:SS format.": "Duration in HH:MM:SS format.", "Duration in seconds.": "Duration in seconds.", + "During scheduled or manual rescoring, channels with stats older than this are re-probed first. Set to 0 to always re-probe. The \"Make smart channel\" action uses existing stats only and does not consult this setting.": "During scheduled or manual rescoring, channels with stats older than this are re-probed first. Set to 0 to always re-probe. The \"Make smart channel\" action uses existing stats only and does not consult this setting.", "EPG": "EPG", "EPG Cache is being generated": "EPG Cache is being generated", "EPG Cache is being generated for selected EPGs": "EPG Cache is being generated for selected EPGs", @@ -575,6 +596,8 @@ "EPG Output": "EPG Output", "EPG Settings": "EPG Settings", "EPG Shift": "EPG Shift", + "EPG Shift updated": "EPG Shift updated", + "EPG Shift value": "EPG Shift value", "EPG URL": "EPG URL", "EPG data for your Networks": "EPG data for your Networks", "EPG is being processed in the background. Depending on the size of the guide data, this may take a while. You will be notified on completion.": "EPG is being processed in the background. Depending on the size of the guide data, this may take a while. You will be notified on completion.", @@ -724,6 +747,8 @@ "Export name": "Export name", "Export variables": "Export variables", "FFmpeg Template": "FFmpeg Template", + "FFmpeg arguments for transcoding. Use placeholders like {crf|23} for configurable parameters with defaults. Hardware acceleration will be applied automatically by the proxy server.": "FFmpeg arguments for transcoding. Use placeholders like {crf|23} for configurable parameters with defaults. Hardware acceleration will be applied automatically by the proxy server.", + "FFmpeg re-encodes the stream. Streamlink and yt-dlp extract and deliver streams directly from supported platforms (Twitch, YouTube, etc.) without re-encoding.": "FFmpeg re-encodes the stream. Streamlink and yt-dlp extract and deliver streams directly from supported platforms (Twitch, YouTube, etc.) without re-encoding.", "Failed": "Failed", "Failed playlists cleared": "Failed playlists cleared", "Failed to Start": "Failed to Start", @@ -738,7 +763,13 @@ "Failover Channel": "Failover Channel", "Failover Channels": "Failover Channels", "Failover Playlist": "Failover Playlist", + "Failover Ranking": "Failover Ranking", + "Failover Rescoring": "Failover Rescoring", + "Failover groups will be re-scored in the background. You can keep using the app while this runs.": "Failover groups will be re-scored in the background. You can keep using the app while this runs.", + "Failover rescoring queued": "Failover rescoring queued", "Failovers": "Failovers", + "Failovers ranked by score. Stored from the last merge or rescore — click \"Rescore now\" to recalculate against current stream stats.": "Failovers ranked by score. Stored from the last merge or rescore — click \"Rescore now\" to recalculate against current stream stats.", + "Failovers will be re-scored in the background. Refresh this page in a moment to see the updated ranking.": "Failovers will be re-scored in the background. Refresh this page in a moment to see the updated ranking.", "Fetch & Install": "Fetch & Install", "Fetch & Update": "Fetch & Update", "Fetch IDs for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "Fetch IDs for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.", @@ -786,6 +817,7 @@ "Force complete re-merge": "Force complete re-merge", "Force password change on next login": "Force password change on next login", "Format": "Format", + "Format Selector & Options": "Format Selector & Options", "Format applied to dates throughout the application (e.g. next sync, last synced).": "Format applied to dates throughout the application (e.g. next sync, last synced).", "Found and loaded :count plugin(s).": "Found and loaded :count plugin(s).", "Frame rate": "Frame rate", @@ -943,6 +975,7 @@ "John Doe, Jane Smith": "John Doe, Jane Smith", "Join us on Discord": "Join us on Discord", "Keep cache permanently (disable expiry cleanup)": "Keep cache permanently (disable expiry cleanup)", + "Keeps failover ordering in sync with current stream quality. Affects three places: scheduled rescoring (the interval below), the per-channel \"Rescore now\" action, and the \"Make smart channel\" bulk action. The Priority Order under Auto-Merge above is reused for the actual scoring in all three.": "Keeps failover ordering in sync with current stream quality. Affects three places: scheduled rescoring (the interval below), the per-channel \"Rescore now\" action, and the \"Make smart channel\" bulk action. The Priority Order under Auto-Merge above is reused for the actual scoring in all three.", "Kinopoisk Rating Count": "Kinopoisk Rating Count", "Kinopoisk URL": "Kinopoisk URL", "Label": "Label", @@ -969,6 +1002,7 @@ "Leave blank to keep the current password": "Leave blank to keep the current password", "Leave blank to use the same provider as the primary account.": "Leave blank to use the same provider as the primary account.", "Leave empty for direct stream proxying": "Leave empty for direct stream proxying", + "Leave empty to copy the highest-scoring source's title.": "Leave empty to copy the highest-scoring source's title.", "Leave empty to disable .strm file generation for VOD. Priority: VOD > Group > Global.": "Leave empty to disable .strm file generation for VOD. Priority: VOD > Group > Global.", "Leave empty to disable .strm file generation for series. Priority: Series > Category > Global.": "Leave empty to disable .strm file generation for series. Priority: Series > Category > Global.", "Leave empty to remove": "Leave empty to remove", @@ -1003,6 +1037,7 @@ "Live Streaming Profile": "Live Streaming Profile", "Live Sync": "Live Sync", "Live TV": "Live TV", + "Live channel groups": "Live channel groups", "Live channel processing": "Live channel processing", "Live groups to import": "Live groups to import", "Live streaming (optional)": "Live streaming (optional)", @@ -1039,6 +1074,7 @@ "MPAA rating classification.": "MPAA rating classification.", "Main actors in the content.": "Main actors in the content.", "Make log files viewable": "Make log files viewable", + "Make smart channel": "Make smart channel", "Manage": "Manage", "Manage API Tokens": "Manage API Tokens", "Manage Assets": "Manage Assets", @@ -1118,6 +1154,7 @@ "Method": "Method", "Minimum Similarity (%)": "Minimum Similarity (%)", "Minimum continuous silence within a check window to count as a silent check. Default: 3 seconds.": "Minimum continuous silence within a check window to count as a silent check. Default: 3 seconds.", + "Minimum delay between provider requests, in milliseconds.": "Minimum delay between provider requests, in milliseconds.", "Minimum similarity percentage required for a match (0-100). Higher = stricter matching. Default: 70%": "Minimum similarity percentage required for a match (0-100). Higher = stricter matching. Default: 70%", "Minimum title similarity percentage (50-100) required to accept a match. Higher values = stricter matching.": "Minimum title similarity percentage (50-100) required to accept a match. Higher values = stricter matching.", "Missing Credentials": "Missing Credentials", @@ -1232,6 +1269,7 @@ "Not authorized to manage this stream.": "Not authorized to manage this stream.", "Not set": "Not set", "Not started": "Not started", + "Not yet probed — run a probe on this channel to capture stream details.": "Not yet probed — run a probe on this channel to capture stream details.", "Notification Message": "Notification Message", "Notification Subject": "Notification Subject", "Notification Type": "Notification Type", @@ -1250,14 +1288,18 @@ "Number of streams available for HDHR and Xtream API service (if using).": "Number of streams available for HDHR and Xtream API service (if using).", "Number of streams available for this playlist (only applies to custom channels assigned to this Custom Playlist).": "Number of streams available for this playlist (only applies to custom channels assigned to this Custom Playlist).", "Number of streams available for this provider. If set to a value other than 0, will prevent any streams from starting if the number of active streams exceeds this value.": "Number of streams available for this provider. If set to a value other than 0, will prevent any streams from starting if the number of active streams exceeds this value.", + "Off": "Off", "Offline": "Offline", "Online": "Online", + "Only VOD channels in these groups will be accessible. Leave empty to allow all VOD groups.": "Only VOD channels in these groups will be accessible. Leave empty to allow all VOD groups.", "Only check this for plugins you're actively developing locally. Don't use for production installs.": "Only check this for plugins you're actively developing locally. Don't use for production installs.", "Only check this for plugins you\\'re actively developing locally. Don\\'t use for production installs.": "Only check this for plugins you\\'re actively developing locally. Don\\'t use for production installs.", "Only disable this if you are having issues.": "Only disable this if you are having issues.", "Only enabled series will be automatically updated on Playlist sync, this includes fetching episodes and metadata. You can also manually sync series to update episodes and metadata.": "Only enabled series will be automatically updated on Playlist sync, this includes fetching episodes and metadata. You can also manually sync series to update episodes and metadata.", "Only expired logo cache entries (those older than 30 days). If permanent cache is enabled, nothing will be removed.": "Only expired logo cache entries (those older than 30 days). If permanent cache is enabled, nothing will be removed.", "Only export enabled channels?": "Only export enabled channels?", + "Only live channels in these groups will be accessible. Leave empty to allow all live groups.": "Only live channels in these groups will be accessible. Leave empty to allow all live groups.", + "Only series in these categories will be accessible. Leave empty to allow all series categories.": "Only series in these categories will be accessible. Leave empty to allow all series categories.", "Only unassigned auths are available. Each auth can only be assigned to one playlist at a time.": "Only unassigned auths are available. Each auth can only be assigned to one playlist at a time.", "Open": "Open", "Open Discord": "Open Discord", @@ -1308,6 +1350,7 @@ "Parallel processing": "Parallel processing", "Password": "Password", "Password for playlist access.": "Password for playlist access.", + "Paste cookies.txt content for authenticated streams (e.g. YouTube members-only, age-gated). Get cookies using a browser extension like \"Get cookies.txt LOCALLY\".": "Paste cookies.txt content for authenticated streams (e.g. YouTube members-only, age-gated). Get cookies using a browser extension like \"Get cookies.txt LOCALLY\".", "Path Validation Failed": "Path Validation Failed", "Path structure (folders)": "Path structure (folders)", "Patterns to remove": "Patterns to remove", @@ -1316,6 +1359,7 @@ "Pending Review": "Pending Review", "Pending Trust": "Pending Trust", "Performance": "Performance", + "Periodic rescoring": "Periodic rescoring", "Permanently removes the plugin files from the server and deletes its registry record, settings, and run history. This cannot be undone.": "Permanently removes the plugin files from the server and deletes its registry record, settings, and run history. This cannot be undone.", "Permanently removes this install log entry. The plugin itself (if installed) is not affected.": "Permanently removes this install log entry. The plugin itself (if installed) is not affected.", "Permissions": "Permissions", @@ -1452,10 +1496,12 @@ "Probe Enabled": "Probe Enabled", "Probe Streams": "Probe Streams", "Probe now": "Probe now", + "Probe ran but returned no usable details.": "Probe ran but returned no usable details.", "Probe streams after sync": "Probe streams after sync", "Probe the selected channels with ffprobe to collect stream metadata (codec, resolution, bitrate). This data enables fast channel switching in Emby.": "Probe the selected channels with ffprobe to collect stream metadata (codec, resolution, bitrate). This data enables fast channel switching in Emby.", "Probe timeout (seconds)": "Probe timeout (seconds)", "Probed": "Probed", + "Probing is disabled for this channel.": "Probing is disabled for this channel.", "Probing is disabled for this channel. Enable it in the channel's edit form to allow probe data collection.": "Probing is disabled for this channel. Enable it in the channel's edit form to allow probe data collection.", "Probing started": "Probing started", "Process": "Process", @@ -1521,7 +1567,10 @@ "Purge Series": "Purge Series", "Purge now": "Purge now", "QR Code": "QR Code", + "Quality & Options": "Quality & Options", + "Quality selector (best, worst, 720p, etc.) followed by optional Streamlink flags. Example: best --hls-live-edge 3": "Quality selector (best, worst, 720p, etc.) followed by optional Streamlink flags. Example: best --hls-live-edge 3", "Queue Manager": "Queue Manager", + "Queue a one-off failover rescore for this playlist? Stale channels will be re-probed (subject to the configured staleness window) and failovers re-sorted so the highest-quality source sits first.": "Queue a one-off failover rescore for this playlist? Stale channels will be re-probed (subject to the configured staleness window) and failovers re-sorted so the highest-quality source sits first.", "Queue a plugin action from the page header to create the first run.": "Queue a plugin action from the page header to create the first run.", "Queue a scan from the header to generate the first run. That will populate Live Activity, Run History, and the run detail screen.": "Queue a scan from the header to generate the first run. That will populate Live Activity, Run History, and the run detail screen.", "Queue reset": "Queue reset", @@ -1530,6 +1579,7 @@ "Quick Actions": "Quick Actions", "Ran At": "Ran At", "Ran at": "Ran at", + "Ranked sources": "Ranked sources", "Rate Limit (requests/second)": "Rate Limit (requests/second)", "Rating": "Rating", "Rating (5 based)": "Rating (5 based)", @@ -1537,7 +1587,10 @@ "Re-enable disabled channels that are found to be live. Requires \"Scan all channels\" to be on.": "Re-enable disabled channels that are found to be live. Requires \"Scan all channels\" to be on.", "Re-enable live channels": "Re-enable live channels", "Re-probe": "Re-probe", + "Re-probe channels older than (days)": "Re-probe channels older than (days)", "Re-run this mapping everytime the EPG is synced?": "Re-run this mapping everytime the EPG is synced?", + "Re-score failovers now": "Re-score failovers now", + "Re-score this channel's failovers against current stream stats. Stale channels may be re-probed (subject to the playlist's staleness window). The master channel is never altered — only the failover order changes.": "Re-score this channel's failovers against current stream stats. Stale channels may be re-probed (subject to the playlist's staleness window). The master channel is never altered — only the failover order changes.", "Recall Memories": "Recall Memories", "Recent Plugin Installs": "Recent Plugin Installs", "Recent Runs": "Recent Runs", @@ -1620,6 +1673,9 @@ "Required to send emails, if your provider requires authentication.": "Required to send emails, if your provider requires authentication.", "Required to send emails.": "Required to send emails.", "Rescan storage": "Rescan storage", + "Rescore": "Rescore", + "Rescore now": "Rescore now", + "Rescoring queued": "Rescoring queued", "Reset": "Reset", "Reset EPG status so it can be processed again. Only perform this action if you are having problems with the EPG syncing.": "Reset EPG status so it can be processed again. Only perform this action if you are having problems with the EPG syncing.", "Reset Find & Replace results back to EPG defaults. This will remove any custom values set in the selected column.": "Reset Find & Replace results back to EPG defaults. This will remove any custom values set in the selected column.", @@ -1716,6 +1772,7 @@ "Schedule Start Time": "Schedule Start Time", "Schedule Type": "Schedule Type", "Schedule Window": "Schedule Window", + "Schedule a recurring rescore for every failover group in this playlist. Master channels are never promoted or replaced — only failover sort order changes. Off = rescore manually only via the \"Rescore now\" button.": "Schedule a recurring rescore for every failover group in this playlist. Master channels are never promoted or replaced — only failover sort order changes. Off = rescore manually only via the \"Rescore now\" button.", "Schedule window is already one week": "Schedule window is already one week", "Scheduled": "Scheduled", "Scheduled Recordings": "Scheduled Recordings", @@ -1751,6 +1808,7 @@ "Search categories": "Search categories", "Search for master channel": "Search for master channel", "Search live groups": "Search live groups", + "Search series categories": "Search series categories", "Search term or question to look up in the docs": "Search term or question to look up in the docs", "Searching for TMDB/TVDB IDs. Check the logs or refresh the page in a few seconds.": "Searching for TMDB/TVDB IDs. Check the logs or refresh the page in a few seconds.", "Season": "Season", @@ -1803,6 +1861,7 @@ "Select live groups": "Select live groups", "Select master channel": "Select master channel", "Select movies to add to this network. Once added, you can sort them using drag and drop in the main table.": "Select movies to add to this network. Once added, you can sort them using drag and drop in the main table.", + "Select series categories": "Select series categories", "Select the EPG you would like to apply changes to.": "Select the EPG you would like to apply changes to.", "Select the EPG you would like to apply the reset to.": "Select the EPG you would like to apply the reset to.", "Select the EPG you would like to assign this post process to.": "Select the EPG you would like to assign this post process to.", @@ -1880,6 +1939,7 @@ "Series Processing": "Series Processing", "Series Sync": "Series Sync", "Series are being processed": "Series are being processed", + "Series categories": "Series categories", "Series episodes disabled": "Series episodes disabled", "Series episodes enabled": "Series episodes enabled", "Series have been added and are being processed.": "Series have been added and are being processed.", @@ -1894,11 +1954,13 @@ "Server Configuration": "Server Configuration", "Server Info": "Server Info", "Server Type": "Server Type", + "Set EPG shift": "Set EPG shift", "Set Timeshift": "Set Timeshift", "Set logo URL": "Set logo URL", "Set logo override URL": "Set logo override URL", "Set poster URL": "Set poster URL", "Set preferred icon to EPG": "Set preferred icon to EPG", + "Set the EPG time shift (tvg-shift) for the selected channels. This shifts the EPG program schedule by the specified number of hours.": "Set the EPG time shift (tvg-shift) for the selected channels. This shifts the EPG program schedule by the specified number of hours.", "Set the timeshift (in hours) for the selected channels. Use 0 to disable catch-up.": "Set the timeshift (in hours) for the selected channels. Use 0 to disable catch-up.", "Set the timeshift value for the selected channels. Use 0 to disable catch-up.": "Set the timeshift value for the selected channels. Use 0 to disable catch-up.", "Set timeshift": "Set timeshift", @@ -1908,6 +1970,7 @@ "Settings for automatically enabling new content": "Settings for automatically enabling new content", "Settings saved": "Settings saved", "Settings used when mapping EPG to a Playlist.": "Settings used when mapping EPG to a Playlist.", + "Shift the EPG time for the selected channels by this many hours. Use values like -2, -1, 0, 1, 2, etc. Use 0 to reset.": "Shift the EPG time for the selected channels by this many hours. Use values like -2, -1, 0, 1, 2, etc. Use 0 to reset.", "Short description for the plugin manifest. Leave blank for a default.": "Short description for the plugin manifest. Leave blank for a default.", "Short description of the content.": "Short description of the content.", "Show breadcrumbs": "Show breadcrumbs", @@ -1918,12 +1981,18 @@ "Simple authentication for playlist access.": "Simple authentication for playlist access.", "Size": "Size", "Skip channels without EPG ID": "Skip channels without EPG ID", + "Smart": "Smart", + "Smart channel": "Smart channel", + "Smart channel created": "Smart channel created", + "Smart channel without failovers won't stream.": "Smart channel without failovers won't stream.", + "Smart channel — streams the highest-ranked failover automatically": "Smart channel — streams the highest-ranked failover automatically", "Sort": "Sort", "Sort Alpha": "Sort Alpha", "Sort Alpha Configs": "Sort Alpha Configs", "Sort By": "Sort By", "Sort Order": "Sort Order", "Sort all channels in this group alphabetically? This will update the sort order.": "Sort all channels in this group alphabetically? This will update the sort order.", + "Sort now": "Sort now", "Sort the selected VOD alphabetically? This will update their sort order within this custom playlist.": "Sort the selected VOD alphabetically? This will update their sort order within this custom playlist.", "Sort the selected channels alphabetically? This will update their sort order within this custom playlist.": "Sort the selected channels alphabetically? This will update their sort order within this custom playlist.", "Source": "Source", @@ -1959,6 +2028,7 @@ "Stop oldest stream when limit reached": "Stop oldest stream when limit reached", "Stop the current broadcast": "Stop the current broadcast", "Stop the current broadcast. Viewers will be disconnected.": "Stop the current broadcast. Viewers will be disconnected.", + "Stream Backend": "Stream Backend", "Stream File Setting": "Stream File Setting", "Stream File Setting Profile": "Stream File Setting Profile", "Stream File Settings": "Stream File Settings", @@ -2081,7 +2151,10 @@ "The channels in the selected groups have been recounted sequentially.": "The channels in the selected groups have been recounted sequentially.", "The channels in this group have been recounted.": "The channels in this group have been recounted.", "The channels in this group have been sorted alphabetically.": "The channels in this group have been sorted alphabetically.", + "The container format FFmpeg will produce. Must match the -f muxer argument in your FFmpeg template above.": "The container format FFmpeg will produce. Must match the -f muxer argument in your FFmpeg template above.", + "The container format Streamlink will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format Streamlink actually produces for the selected quality.": "The container format Streamlink will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format Streamlink actually produces for the selected quality.", "The container format for the output stream.": "The container format for the output stream.", + "The container format yt-dlp will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format produced by your yt-dlp format selector.": "The container format yt-dlp will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format produced by your yt-dlp format selector.", "The current category series have been disabled.": "The current category series have been disabled.", "The current category series have been enabled.": "The current category series have been enabled.", "The database table to query.": "The database table to query.", @@ -2173,6 +2246,7 @@ "These plugins have issues that need your attention — they may be blocked, modified, invalid, or incomplete.": "These plugins have issues that need your attention — they may be blocked, modified, invalid, or incomplete.", "These settings are used by hook-triggered runs, scheduled runs, and as defaults for manual actions.": "These settings are used by hook-triggered runs, scheduled runs, and as defaults for manual actions.", "This URL must be reachable from your Plex server. Use your machine\\'s LAN IP, not localhost.": "This URL must be reachable from your Plex server. Use your machine\\'s LAN IP, not localhost.", + "This URL must be reachable from your Plex server. Uses the Proxy URL Override or APP_URL. Adjust if Plex reaches m3u-editor via a different address (e.g. Docker internal IP).": "This URL must be reachable from your Plex server. Uses the Proxy URL Override or APP_URL. Adjust if Plex reaches m3u-editor via a different address (e.g. Docker internal IP).", "This action will permanently delete all series associated with the playlist. Proceed with caution.": "This action will permanently delete all series associated with the playlist. Proceed with caution.", "This channel hasn't been probed yet. Run a probe to capture stream details.": "This channel hasn't been probed yet. Run a probe to capture stream details.", "This is a development/testing plugin": "This is a development/testing plugin", @@ -2329,6 +2403,7 @@ "VOD Sync": "VOD Sync", "VOD and Series Streaming Profile": "VOD and Series Streaming Profile", "VOD and Series Transcoding Profile": "VOD and Series Transcoding Profile", + "VOD groups": "VOD groups", "VOD groups to import": "VOD groups to import", "VOD processing": "VOD processing", "VOD record not found.": "VOD record not found.", @@ -2374,6 +2449,7 @@ "View the EPG channel mapping jobs and progress here.": "View the EPG channel mapping jobs and progress here.", "View/Update Unique Identifier": "View/Update Unique Identifier", "Viewer ID": "Viewer ID", + "Virtual channel title": "Virtual channel title", "Wait this many seconds after sync completes before triggering the library refresh": "Wait this many seconds after sync completes before triggering the library refresh", "Wait until a specific date/time before starting the broadcast.": "Wait until a specific date/time before starting the broadcast.", "Warning": "Warning", @@ -2383,6 +2459,7 @@ "WebDAV Password": "WebDAV Password", "WebDAV Username": "WebDAV Username", "WebSocket Connection Test": "WebSocket Connection Test", + "Weekly": "Weekly", "Weight": "Weight", "Weight (for shuffle)": "Weight (for shuffle)", "What does this plugin do?": "What does this plugin do?", @@ -2394,8 +2471,10 @@ "When enabled you can access the API documentation using the \"API Docs\" button. When disabled, the docs endpoint will return a 403 (Unauthorized). NOTE: The API will respond regardless of this setting. You do not need to enable it to use the API.": "When enabled you can access the API documentation using the \"API Docs\" button. When disabled, the docs endpoint will return a 403 (Unauthorized). NOTE: The API will respond regardless of this setting. You do not need to enable it to use the API.", "When enabled you can access the queue manager using the \"Queue Manager\" button. When disabled, the queue manager endpoint will return a 403 (Unauthorized).": "When enabled you can access the queue manager using the \"Queue Manager\" button. When disabled, the queue manager endpoint will return a 403 (Unauthorized).", "When enabled, /logo-repository endpoints are publicly accessible for apps like UHF.": "When enabled, /logo-repository endpoints are publicly accessible for apps like UHF.", + "When enabled, TMDB metadata fetching will automatically create new groups (for VOD) and categories (for Series) based on TMDB genres. When disabled, only existing groups/categories will be used.": "When enabled, TMDB metadata fetching will automatically create new groups (for VOD) and categories (for Series) based on TMDB genres. When disabled, only existing groups/categories will be used.", "When enabled, VOD channels will be included in the M3U output.": "When enabled, VOD channels will be included in the M3U output.", "When enabled, a backup will be created before syncing.": "When enabled, a backup will be created before syncing.", + "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs and other stream processing tasks.": "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs and other stream processing tasks.", "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs.": "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs.", "When enabled, all channels will be re-evaluated during merge, including existing failover relationships.": "When enabled, all channels will be re-evaluated during merge, including existing failover relationships.", "When enabled, all streams will be proxied through the application. This allows for better compatibility with various clients and enables features such as stream limiting and output format selection.": "When enabled, all streams will be proxied through the application. This allows for better compatibility with various clients and enables features such as stream limiting and output format selection.", @@ -2434,6 +2513,7 @@ "When enabled, the playlist will fetch items by category.": "When enabled, the playlist will fetch items by category.", "When enabled, the playlist will fetch items by category. This may slow down the import process but can help with larger playlists that time out when fetching all items at once.": "When enabled, the playlist will fetch items by category. This may slow down the import process but can help with larger playlists that time out when fetching all items at once.", "When enabled, the proxy will attempt to start streams even if the provider\\'s reported connection limit has been reached.": "When enabled, the proxy will attempt to start streams even if the provider\\'s reported connection limit has been reached.", + "When enabled, the selected source channels will be disabled after being attached as failovers. They'll only be reachable via the new smart channel.": "When enabled, the selected source channels will be disabled after being attached as failovers. They'll only be reachable via the new smart channel.", "When enabled, the user will be prompted to set a new password before they can use the application.": "When enabled, the user will be prompted to set a new password before they can use the application.", "When enabled, there will be an additional navigation item (Logs) to view the log file content.": "When enabled, there will be an additional navigation item (Logs) to view the log file content.", "When enabled, this network will continuously broadcast content according to the schedule.": "When enabled, this network will continuously broadcast content according to the schedule.", @@ -2445,6 +2525,7 @@ "Whether the plugin files are currently present.": "Whether the plugin files are currently present.", "X-Emby-Token": "X-Emby-Token", "XMLTV EPG guide URL. Must also be reachable from Plex.": "XMLTV EPG guide URL. Must also be reachable from Plex.", + "XMLTV EPG guide URL. Must also be reachable from Plex. Adjust if needed.": "XMLTV EPG guide URL. Must also be reachable from Plex. Adjust if needed.", "XMLTV File, URL or Path": "XMLTV File, URL or Path", "XMLTV Format": "XMLTV Format", "Xtream": "Xtream", @@ -2473,6 +2554,7 @@ "Yes, generate cache now": "Yes, generate cache now", "Yes, process now": "Yes, process now", "Yes, refresh now": "Yes, refresh now", + "Yes, rescore now": "Yes, rescore now", "Yes, reset now": "Yes, reset now", "Yes, sync now": "Yes, sync now", "You are a helpful AI assistant integrated into m3u editor. You help users manage playlists, EPG data, streams, channels, and other features. Be concise and accurate.": "You are a helpful AI assistant integrated into m3u editor. You help users manage playlists, EPG data, streams, channels, and other features. Be concise and accurate.", @@ -2538,5 +2620,6 @@ "username": "username", "variable_name": "variable_name", "veryfast": "veryfast", - "your-api-key-here": "your-api-key-here" + "your-api-key-here": "your-api-key-here", + "yt-dlp format selector followed by optional flags. Example: bestvideo+bestaudio/best --no-playlist": "yt-dlp format selector followed by optional flags. Example: bestvideo+bestaudio/best --no-playlist" } From e9e597902fabcdb637d467ab7dbb5567f4115720 Mon Sep 17 00:00:00 2001 From: warbs816 Date: Mon, 27 Apr 2026 00:15:13 +0100 Subject: [PATCH 14/16] fix: Cap probe sample timeout, eager-load rescore, guard smart-channel sources MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four follow-ups from a thorough code review of the smart-channel work: 1. sampleVideoBitrate() previously inherited the full probe timeout, so one channel could take 2 × probe_timeout (default 30s). Capped to 10s since -read_intervals "%+5" only reads 5 seconds of stream anyway. Bounds the rescore job's worst-case runtime under the queue timeout. 2. RescoreChannelFailovers now eager-loads masters with their failover channels in one query instead of N+1-ing per master. 3. SmartChannelCreator::create() rejects two illegal source mixes: - Sources spanning multiple playlists (the smart channel ends up parented to one playlist, leaving cross-playlist failovers rescore-orphans because the rescore job filters by playlist_id). - Sources that are themselves smart channels (chained smart channels have no URL of their own, score 0 across the board, and produce misleading rankings). The bulk action surfaces both as user-friendly notifications instead of unhandled exceptions, plus skips smart-channel rows in the "Add as failover" bulk action with a count notification. 4. Existing per-channel failover Repeater search now excludes smart channels from results, matching the bulk-action behavior. Tests cover the cross-playlist and smart-channel-as-source rejections. --- .../Resources/Channels/ChannelResource.php | 59 +++++++++++++++---- app/Jobs/RescoreChannelFailovers.php | 16 ++--- app/Models/Channel.php | 7 ++- app/Services/Channels/SmartChannelCreator.php | 8 +++ lang/en.json | 7 +++ tests/Feature/SmartChannelCreatorTest.php | 20 +++++++ 6 files changed, 99 insertions(+), 18 deletions(-) diff --git a/app/Filament/Resources/Channels/ChannelResource.php b/app/Filament/Resources/Channels/ChannelResource.php index e161d789a..3e6f35605 100644 --- a/app/Filament/Resources/Channels/ChannelResource.php +++ b/app/Filament/Resources/Channels/ChannelResource.php @@ -1106,12 +1106,23 @@ private static function getBulkActionSchema(bool $addToCustom, bool $includeReco return (int) $record->id !== (int) $masterRecordId; }); + $smartChannelCount = $failoverRecords->filter(fn ($r) => (bool) $r->is_smart_channel)->count(); + $failoverRecords = $failoverRecords->filter(fn ($r) => ! $r->is_smart_channel); + foreach ($failoverRecords as $record) { ChannelFailover::updateOrCreate([ 'channel_id' => $masterRecordId, 'channel_failover_id' => $record->id, ]); } + + if ($smartChannelCount > 0) { + Notification::make() + ->warning() + ->title(__('Some channels were skipped')) + ->body(__(':count smart channel(s) were skipped — smart channels can\'t be used as failovers themselves.', ['count' => $smartChannelCount])) + ->send(); + } })->after(function () { Notification::make() ->success() @@ -1179,17 +1190,44 @@ private static function getBulkActionSchema(bool $addToCustom, bool $includeReco } $playlists = $records->pluck('playlist_id')->unique(); - $playlistForScoring = $playlists->count() === 1 - ? Playlist::find($playlists->first()) - : null; + if ($playlists->count() > 1) { + Notification::make() + ->warning() + ->title(__('Mixed playlists not supported')) + ->body(__('Smart channels must be created from sources within a single playlist. Narrow your selection and try again.')) + ->send(); + + return; + } + + if ($records->contains(fn (Channel $channel) => (bool) $channel->is_smart_channel)) { + Notification::make() + ->warning() + ->title(__('Smart channels cannot be sources')) + ->body(__('Your selection includes one or more existing smart channels — pick raw provider channels instead, or remove the smart-channel flag first.')) + ->send(); + + return; + } + + $playlistForScoring = Playlist::find($playlists->first()); + + try { + SmartChannelCreator::fromPlaylist($playlistForScoring)->create( + channels: $records, + title: $data['title'] ?? null, + disableSources: (bool) ($data['disable_sources'] ?? false), + ); + } catch (\InvalidArgumentException $e) { + Notification::make() + ->warning() + ->title(__('Could not create smart channel')) + ->body($e->getMessage()) + ->send(); + + return; + } - SmartChannelCreator::fromPlaylist($playlistForScoring)->create( - channels: $records, - title: $data['title'] ?? null, - disableSources: (bool) ($data['disable_sources'] ?? false), - ); - }) - ->after(function () { Notification::make() ->success() ->title(__('Smart channel created')) @@ -2111,6 +2149,7 @@ public static function getForm($customPlaylist = null, $edit = false): array ->withoutEagerLoads() ->with('playlist') ->whereNotIn('id', $existingFailoverIds) + ->where('is_smart_channel', false) ->where(function ($query) use ($searchLower) { $query->whereRaw('LOWER(title) LIKE ?', ["%{$searchLower}%"]) ->orWhereRaw('LOWER(title_custom) LIKE ?', ["%{$searchLower}%"]) diff --git a/app/Jobs/RescoreChannelFailovers.php b/app/Jobs/RescoreChannelFailovers.php index 1862d9335..340a1f108 100644 --- a/app/Jobs/RescoreChannelFailovers.php +++ b/app/Jobs/RescoreChannelFailovers.php @@ -73,13 +73,15 @@ public function handle(): void $scorer = $this->buildScorer($playlist); - foreach ($masterIds as $masterId) { - $master = Channel::find($masterId); - if (! $master) { - continue; - } - - $failovers = $master->failoverChannels()->get(); + // Eager-load masters with their failover channels in one query so the + // per-iteration loop doesn't N+1. + $masters = Channel::query() + ->with('failoverChannels') + ->whereIn('id', $masterIds) + ->get(); + + foreach ($masters as $master) { + $failovers = $master->failoverChannels; if ($failovers->isEmpty()) { continue; } diff --git a/app/Models/Channel.php b/app/Models/Channel.php index c4fd0f753..eceb04c36 100644 --- a/app/Models/Channel.php +++ b/app/Models/Channel.php @@ -457,6 +457,11 @@ public function probeStreamStats(int $timeout = 15): array * `bit_rate` null (common for live MPEG-TS / HLS). Reads ~5 seconds of * video packets and computes (bytes * 8 / duration). Returns bps as an * integer, or null if no usable packets were captured. + * + * Caps its timeout at 10 seconds regardless of the metadata-pass timeout — + * `-read_intervals "%+5"` only reads 5 seconds of stream, so longer is + * pointless and would compound with the metadata-pass budget for jobs + * that probe many channels. */ protected function sampleVideoBitrate(string $url, int $timeout): ?int { @@ -470,7 +475,7 @@ protected function sampleVideoBitrate(string $url, int $timeout): ?int '-show_entries', 'packet=size,pts_time', $url, ]); - $process->setTimeout($timeout); + $process->setTimeout(min($timeout, 10)); $process->run(); if ($process->getExitCode() !== 0) { diff --git a/app/Services/Channels/SmartChannelCreator.php b/app/Services/Channels/SmartChannelCreator.php index 7e06c9b1a..29e8e65c2 100644 --- a/app/Services/Channels/SmartChannelCreator.php +++ b/app/Services/Channels/SmartChannelCreator.php @@ -39,6 +39,14 @@ public function create(Collection $channels, ?string $title = null, bool $disabl throw new \InvalidArgumentException('Cannot build a smart channel from an empty selection.'); } + if ($channels->contains(fn (Channel $channel) => (bool) $channel->is_smart_channel)) { + throw new \InvalidArgumentException('Smart channels cannot be used as sources for another smart channel — pick raw provider channels instead.'); + } + + if ($channels->pluck('playlist_id')->unique()->count() > 1) { + throw new \InvalidArgumentException('All sources for a smart channel must belong to the same playlist.'); + } + $ranking = $this->rank($channels); /** @var Channel $top */ diff --git a/lang/en.json b/lang/en.json index 4a5ba62d2..9136ea6c4 100644 --- a/lang/en.json +++ b/lang/en.json @@ -27,6 +27,7 @@ "8.7": "8.7", "9": 8, "10": 9, + ":count smart channel(s) were skipped — smart channels can't be used as failovers themselves.": ":count smart channel(s) were skipped — smart channels can't be used as failovers themselves.", ":name installed": ":name installed", ":name updated": ":name updated", "A SHA-256 checksum is required to stage this update.": "A SHA-256 checksum is required to stage this update.", @@ -410,6 +411,7 @@ "Copy the file hash from the GitHub release page to verify the download hasn't been tampered with.": "Copy the file hash from the GitHub release page to verify the download hasn't been tampered with.", "Copy the file hash from the GitHub release page to verify the download hasn\\'t been tampered with.": "Copy the file hash from the GitHub release page to verify the download hasn\\'t been tampered with.", "Copy the file hash from the GitHub release page.": "Copy the file hash from the GitHub release page.", + "Could not create smart channel": "Could not create smart channel", "Could not determine the record to update. Please close the modal and try again.": "Could not determine the record to update. Please close the modal and try again.", "Could not fetch release": "Could not fetch release", "Country": "Country", @@ -1166,6 +1168,7 @@ "Missing checksum": "Missing checksum", "Missing credentials": "Missing credentials", "Missing information": "Missing information", + "Mixed playlists not supported": "Mixed playlists not supported", "Mode": "Mode", "Model": "Model", "Modified": "Modified", @@ -1986,6 +1989,9 @@ "Smart channel created": "Smart channel created", "Smart channel without failovers won't stream.": "Smart channel without failovers won't stream.", "Smart channel — streams the highest-ranked failover automatically": "Smart channel — streams the highest-ranked failover automatically", + "Smart channels cannot be sources": "Smart channels cannot be sources", + "Smart channels must be created from sources within a single playlist. Narrow your selection and try again.": "Smart channels must be created from sources within a single playlist. Narrow your selection and try again.", + "Some channels were skipped": "Some channels were skipped", "Sort": "Sort", "Sort Alpha": "Sort Alpha", "Sort Alpha Configs": "Sort Alpha Configs", @@ -2575,6 +2581,7 @@ "Your TMDB API key (v3 auth). You can get one for free at themoviedb.org.": "Your TMDB API key (v3 auth). You can get one for free at themoviedb.org.", "Your m3u proxy API key": "Your m3u proxy API key", "Your preferences have been saved successfully.": "Your preferences have been saved successfully.", + "Your selection includes one or more existing smart channels — pick raw provider channels instead, or remove the smart-channel flag first.": "Your selection includes one or more existing smart channels — pick raw provider channels instead, or remove the smart-channel flag first.", "aac": "aac", "and how to use it": "and how to use it", "e.g. 2024": "e.g. 2024", diff --git a/tests/Feature/SmartChannelCreatorTest.php b/tests/Feature/SmartChannelCreatorTest.php index debab4532..9a44d3f55 100644 --- a/tests/Feature/SmartChannelCreatorTest.php +++ b/tests/Feature/SmartChannelCreatorTest.php @@ -159,6 +159,26 @@ function vpChannel(User $user, Playlist $playlist, array $overrides, ?array $sta SmartChannelCreator::fromPlaylist($this->playlist)->create(collect()); })->throws(InvalidArgumentException::class); +it('rejects sources spanning multiple playlists', function () { + $other = Playlist::factory()->for($this->user)->createQuietly(); + + $a = vpChannel($this->user, $this->playlist, ['title' => 'A']); + $b = vpChannel($this->user, $other, ['title' => 'B']); + + SmartChannelCreator::fromPlaylist($this->playlist)->create(collect([$a, $b])); +})->throws(InvalidArgumentException::class, 'same playlist'); + +it('rejects existing smart channels as sources', function () { + $hd = vpChannel($this->user, $this->playlist, ['title' => 'HD']); + $sd = vpChannel($this->user, $this->playlist, ['title' => 'SD']); + + $existingSmart = SmartChannelCreator::fromPlaylist($this->playlist)->create(collect([$hd, $sd])); + + $thirdSource = vpChannel($this->user, $this->playlist, ['title' => 'Other']); + + SmartChannelCreator::fromPlaylist($this->playlist)->create(collect([$existingSmart, $thirdSource])); +})->throws(InvalidArgumentException::class, 'cannot be used as sources'); + it('persists score and per-attribute breakdown on each channel_failovers row', function () { $hd = vpChannel($this->user, $this->playlist, ['title' => 'HD']); $sd = vpChannel($this->user, $this->playlist, ['title' => 'SD'], stats: [ From 38782e1b376b78b9a8be9e42d76a68e7b4c1be0b Mon Sep 17 00:00:00 2001 From: warbs816 Date: Mon, 27 Apr 2026 00:19:44 +0100 Subject: [PATCH 15/16] fix: WithoutOverlapping middleware on RescoreChannelFailovers job The schedule's withoutOverlapping() locks the dispatcher command, not the dispatched jobs. Two manual rescores, or a manual + scheduled fire once the dispatcher unlocks, can produce two RescoreChannelFailovers running concurrently for the same playlist. Scoring is idempotent so the math is fine, but the second run wastes provider quota by re-probing the same upstream URLs and can race with hand edits to channel_failovers metadata. Adds Laravel's WithoutOverlapping queue middleware keyed on playlistId. If a job is already running for that playlist, additional dispatches are dropped. Lock auto-releases at the job timeout (1 hour) so a crashed worker doesn't hold it indefinitely. Different playlists get independent keys so they can run in parallel. Tests verify the middleware is registered with the correct key and that distinct playlists get distinct keys. --- app/Jobs/RescoreChannelFailovers.php | 19 +++++++++++++++++++ tests/Feature/RescoreChannelFailoversTest.php | 18 ++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/app/Jobs/RescoreChannelFailovers.php b/app/Jobs/RescoreChannelFailovers.php index 340a1f108..449af3087 100644 --- a/app/Jobs/RescoreChannelFailovers.php +++ b/app/Jobs/RescoreChannelFailovers.php @@ -12,6 +12,7 @@ use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; +use Illuminate\Queue\Middleware\WithoutOverlapping; use Illuminate\Queue\SerializesModels; use Illuminate\Support\Carbon; use Illuminate\Support\Collection; @@ -46,6 +47,24 @@ public function __construct( public ?array $channelIds = null, ) {} + /** + * Prevent concurrent runs against the same playlist. If a job is already in + * flight, additional dispatches (manual + scheduled, or two manual clicks) + * are dropped — scoring is idempotent and re-probing the same upstream URLs + * twice would just waste provider quota. Lock auto-releases at the job + * timeout so a crashed worker doesn't hold it indefinitely. + * + * @return array + */ + public function middleware(): array + { + return [ + (new WithoutOverlapping((string) $this->playlistId)) + ->releaseAfter($this->timeout) + ->expireAfter($this->timeout), + ]; + } + public function handle(): void { $playlist = Playlist::find($this->playlistId); diff --git a/tests/Feature/RescoreChannelFailoversTest.php b/tests/Feature/RescoreChannelFailoversTest.php index 1ed8e7b60..7fb07eaaf 100644 --- a/tests/Feature/RescoreChannelFailoversTest.php +++ b/tests/Feature/RescoreChannelFailoversTest.php @@ -6,6 +6,7 @@ use App\Models\Playlist; use App\Models\User; use App\Services\PlaylistUrlService; +use Illuminate\Queue\Middleware\WithoutOverlapping; beforeEach(function () { $this->user = User::factory()->create(); @@ -209,6 +210,23 @@ function rescoreChannel(User $user, Playlist $playlist, array $overrides, ?array ->and($hdRow->metadata['attribute_scores'])->toHaveKeys(['resolution', 'fps', 'bitrate', 'codec']); }); +it('registers a WithoutOverlapping middleware keyed on the playlist id', function () { + $job = new RescoreChannelFailovers(playlistId: 42); + + $middleware = $job->middleware(); + + expect($middleware)->toHaveCount(1) + ->and($middleware[0])->toBeInstanceOf(WithoutOverlapping::class) + ->and($middleware[0]->key)->toBe('42'); +}); + +it('uses different overlap keys for different playlists so they do not block each other', function () { + $jobA = new RescoreChannelFailovers(playlistId: 1); + $jobB = new RescoreChannelFailovers(playlistId: 2); + + expect($jobA->middleware()[0]->key)->not->toBe($jobB->middleware()[0]->key); +}); + it('honors the channelIds filter to scope rescoring to specific masters', function () { $masterA = rescoreChannel($this->user, $this->playlist, ['name' => 'Master A']); $masterB = rescoreChannel($this->user, $this->playlist, ['name' => 'Master B']); From 5faf95cbcbb7b87b5ffbe0cd3a647da2a3607f58 Mon Sep 17 00:00:00 2001 From: warbs816 Date: Mon, 27 Apr 2026 01:08:05 +0100 Subject: [PATCH 16/16] chore: Translate new smart channel strings into DE/FR/ES/zh_CN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the 92 new keys from this branch's en.json into each locale file, translated via google-translate-php (same library app:generate-translations uses). Skips keys that already happened to exist in some locales. Locale backlogs (~600 unrelated keys missing across the four locales) left untouched — those are out of scope for this feature PR and should go in a dedicated translation-sync change. --- lang/de.json | 2630 ++--------------------------------------------- lang/es.json | 1626 +++++++++++++++-------------- lang/fr.json | 1626 +++++++++++++++-------------- lang/zh_CN.json | 1626 +++++++++++++++-------------- 4 files changed, 2665 insertions(+), 4843 deletions(-) diff --git a/lang/de.json b/lang/de.json index 6a5af7934..fee792a8a 100644 --- a/lang/de.json +++ b/lang/de.json @@ -1,2542 +1,94 @@ { - "#": "#", - "# Netscape HTTP Cookie File\\n.youtube.com\\tTRUE\\t/\\tTRUE\\t0\\tCOOKIE_NAME\\tCOOKIE_VALUE": "# Netscape HTTP Cookie File\\n.youtube.com\\tTRUE\\t/\\tTRUE\\t0\\tCOOKIE_NAME\\tCOOKIE_VALUE", - "-": "-", - ".strm files are being synced for current category series. Only enabled series will be synced.": ".strm-Dateien werden für die aktuelle Kategorieserie synchronisiert. Nur aktivierte Serien werden synchronisiert.", - ".strm files are being synced for selected VOD channels": ".strm-Dateien werden für ausgewählte VOD-Kanäle synchronisiert", - ".strm files are being synced for selected category series. Only enabled series will be synced.": ".strm-Dateien werden für ausgewählte Kategorieserien synchronisiert. Nur aktivierte Serien werden synchronisiert.", - ".strm files are being synced for selected series": ".strm-Dateien werden für ausgewählte Serien synchronisiert", - ".strm files are being synced for the group channels. Only enabled channels will be synced.": ".strm-Dateien werden für die Gruppenkanäle synchronisiert. Nur aktivierte Kanäle werden synchronisiert.", - ".strm files are being synced for the selected group channels. Only enabled channels will be synced.": ".strm-Dateien werden für die ausgewählten Gruppenkanäle synchronisiert. Nur aktivierte Kanäle werden synchronisiert.", - "/Series": "/Serie", - "/VOD/movies": "/VOD/Filme", - "0": "0", - "0 */6 * * *": "0 */6 * * *", - "0 0 * * *": "0 0 * * *", - "01:30:00": "01:30:00", - "1": "1", - "1-1000, higher = more preferred": "1-1000, höher = bevorzugt", "10 based rating of the VOD content.": "10-basierte Bewertung des VOD-Inhalts.", - "2": "2", - "3": "3", - "4": "4", - "5": "5", - "6": "6", - "7": "7", - "8": "8", - "8.7": "8.7", - "9": "9", - "10": "10", - ":name installed": ":name installiert", - ":name updated": ":name aktualisiert", - "A SHA-256 checksum is required to stage this update.": "Für die Bereitstellung dieses Updates ist eine SHA-256-Prüfsumme erforderlich.", - "A channel dedicated to classic movies from the golden age of cinema": "Ein Kanal, der klassischen Filmen aus dem goldenen Zeitalter des Kinos gewidmet ist", - "A descriptive name for this post process.": "Ein beschreibender Name für diesen Postprozess.", - "A descriptive name for this stream file setting profile": "Ein beschreibender Name für dieses Streamdatei-Einstellungsprofil", - "A descriptive name for this transcoding profile (e.g., \"720p Standard\", \"1080p High Quality\")": "Ein beschreibender Name für dieses Transkodierungsprofil (z. B. „720p Standard“, „1080p High Quality“)", - "A new version is available": "Eine neue Version ist verfügbar", - "A recommendation based on the current plugin state.": "Eine Empfehlung basierend auf dem aktuellen Plugin-Status.", - "A test email will be sent to this address using the entered SMTP settings.": "An diese Adresse wird eine Test-E-Mail mit den eingegebenen SMTP-Einstellungen gesendet.", - "AI Copilot": "KI-Copilot", - "AI Provider": "KI-Anbieter", - "API": "API", - "API Docs": "API-Dokumente", - "API Key": "API-Schlüssel", - "API Key Required": "API-Schlüssel erforderlich", - "API Key/Token": "API-Schlüssel/Token", - "API Settings": "API-Einstellungen", - "API Token Created": "API-Token erstellt", - "API Tokens": "API-Tokens", - "API docs": "API-Dokumente", - "API key": "API-Schlüssel", - "Accepted Values": "Akzeptierte Werte", - "Access your media server content directly within M3U Editor by integrating with popular media servers like Emby and Jellyfin, or directly via mount points. An associated playlist will be automatically created for each integration to manage content like you would for any other playlist.": "Greifen Sie direkt im M3U Editor auf die Inhalte Ihres Medienservers zu, indem Sie gängige Medienserver wie Emby und Jellyfin integrieren oder direkt über Mount-Punkte. Für jede Integration wird automatisch eine zugehörige Playlist erstellt, um Inhalte wie bei jeder anderen Playlist zu verwalten.", - "Action, Drama, Comedy": "Action, Drama, Komödie", - "Actions": "Aktionen", - "Active Sessions": "Aktive Sitzungen", - "Active Streams": "Aktive Streams", - "Activity": "Aktivität", - "Activity stream": "Aktivitätsstream", - "Actor 1, Actor 2, Actor 3": "Schauspieler 1, Schauspieler 2, Schauspieler 3", - "Actors": "Schauspieler", - "Add Episodes": "Episoden hinzufügen", - "Add Lineup to Account": "Senderliste zum Konto hinzufügen", - "Add Media Server": "Medienserver hinzufügen", - "Add Movies": "Filme hinzufügen", - "Add Quick Action": "Schnellaktion hinzufügen", - "Add Series": "Serie hinzufügen", - "Add a delay between requests to providers to avoid rate limiting.": "Fügen Sie eine Verzögerung zwischen Anfragen an Anbieter hinzu, um eine Ratenbegrenzung zu vermeiden.", - "Add and manage authentication.": "Authentifizierung hinzufügen und verwalten.", - "Add any custom headers to include when streaming a channel/episode.": "Fügen Sie alle benutzerdefinierten Header hinzu, die beim Streamen eines Kanals/einer Episode einbezogen werden sollen.", - "Add as failover": "Als Failover hinzufügen", - "Add auto-add rule": "Auto-Hinzufüge-Regel hinzufügen", - "Add available subtitle languages for this content.": "Fügen Sie verfügbare Untertitelsprachen für diesen Inhalt hinzu.", - "Add backdrop/poster image URLs for this content.": "Fügen Sie Hintergrund-/Posterbild-URLs für diesen Inhalt hinzu.", - "Add conditions that must be met for this post process to execute. All conditions must be true for execution.": "Fügen Sie Bedingungen hinzu, die erfüllt sein müssen, damit dieser Postprozess ausgeführt werden kann. Für die Ausführung müssen alle Bedingungen erfüllt sein.", - "Add extension...": "Erweiterung hinzufügen...", - "Add failovers now": "Jetzt Failover hinzufügen", - "Add keyword...": "Schlüsselwort hinzufügen...", - "Add multiple EPG sources and map them to your playlists. Multiple EPG sources can be mapped to the same playlist, and the guide data will be merged together.": "Fügen Sie mehrere EPG-Quellen hinzu und ordnen Sie sie Ihren Wiedergabelisten zu. Mehrere EPG-Quellen können derselben Playlist zugeordnet werden und die Guide-Daten werden zusammengeführt.", - "Add new API Token": "Neues API-Token hinzufügen", - "Add or create additional authentication methods for this playlist.": "Fügen Sie zusätzliche Authentifizierungsmethoden für diese Playlist hinzu oder erstellen Sie sie.", - "Add pattern (e.g. \"DE • \" or \"EN |\")": "Muster hinzufügen (z. B. „DE • “ oder „EN |“)", - "Add the selected channel(s) to the chosen channel as failover sources.": "Fügen Sie die ausgewählten Kanäle als Failover-Quellen zum ausgewählten Kanal hinzu.", - "Add to category": "Zur Kategorie hinzufügen", - "Add to custom category": "Zur benutzerdefinierten Kategorie hinzufügen", - "Add to custom group": "Zur benutzerdefinierten Gruppe hinzufügen", - "Add to group": "Zur Gruppe hinzufügen", - "Added Channels": "Kanäle hinzugefügt", - "Added Groups": "Gruppen hinzugefügt", - "Added to category": "Zur Kategorie hinzugefügt", - "Added to group": "Zur Gruppe hinzugefügt", - "Added to the title folder name": "Dem Titelordnernamen hinzugefügt", - "Additional Failover Playlists (optional)": "Zusätzliche Failover-Wiedergabelisten (optional)", - "Additional Profiles": "Zusätzliche Profile", - "Adds an uninstall() method for custom cleanup logic beyond what the manifest declares.": "Fügt eine uninstall()-Methode für benutzerdefinierte Bereinigungslogik hinzu, die über das hinausgeht, was im Manifest deklariert wird.", - "Admin": "Admin", - "Admin viewers cannot be deleted": "Admin-Viewer können nicht gelöscht werden", - "Advanced": "Erweitert", - "Advanced Priority Scoring (optional)": "Erweiterte Prioritätsbewertung (optional)", - "Advanced Settings": "Erweiterte Einstellungen", - "Age Rating": "Altersfreigabe", - "Age rating or classification.": "Alterseinstufung oder -klassifizierung.", - "All": "Alle", - "All Activity": "Alle Aktivitäten", - "All Attributes": "Alle Attribute", - "All EPGs": "Alle EPGs", - "All Live Channels": "Alle Live-Kanäle", - "All Playlists": "Alle Playlists", - "All Runs": "Alle Läufe", - "All Series": "Alle Serien", - "All VOD Channels": "Alle VOD-Kanäle", - "All streams": "Alle Streams", - "Allow access to API docs": "Erlauben Sie den Zugriff auf API-Dokumente", - "Allow mapping EPG to selected channels when running EPG mapping jobs.": "Zulassen, dass EPG ausgewählten Kanälen zugeordnet wird, wenn EPG-Zuordnungsjobs ausgeführt werden.", - "Allow mapping EPG to this channel when running EPG mapping jobs.": "Zulassen, dass EPG diesem Kanal zugeordnet wird, wenn EPG-Zuordnungsjobs ausgeführt werden.", - "Allow merging for selected channels when running \"Merge Same ID\" jobs.": "Erlauben Sie das Zusammenführen ausgewählter Kanäle, wenn Sie Jobs „Gleiche ID zusammenführen“ ausführen.", - "Allow probing this channel when running playlist channel probe jobs.": "Erlauben Sie die Prüfung dieses Kanals, wenn Sie Playlist-Kanal-Prüfungsjobs ausführen.", - "Allow queue manager access": "Erlauben Sie den Zugriff des Warteschlangenmanagers", - "Allow this channel to be merged during \"Merge Same ID\" jobs.": "Ermöglichen Sie die Zusammenführung dieses Kanals während „Merge Same ID“-Aufträgen.", - "Allowed Playlist Domains": "Zulässige Playlist-Domänen", - "Allowed domains": "Erlaubte Domänen", - "Also check VOD channel links in addition to live channels.": "Überprüfen Sie neben den Live-Kanälen auch die Links zu VOD-Kanälen.", - "Alternative URLs": "Alternative URLs", - "Alternative Xtream API URLs. If the primary URL fails during a sync, these will be tried in order (same credentials are used for all URLs).": "Alternative Xtream-API-URLs. Wenn die primäre URL während einer Synchronisierung fehlschlägt, werden diese der Reihe nach versucht (für alle URLs werden dieselben Anmeldeinformationen verwendet).", - "Alternative password if not specified in URL. Not commonly used.": "Alternatives Passwort, falls nicht in der URL angegeben. Wird nicht häufig verwendet.", - "Alternative port if not specified in URL. Not commonly used.": "Alternativer Port, falls nicht in der URL angegeben. Wird nicht häufig verwendet.", - "Alternative release date field.": "Feld für alternatives Veröffentlichungsdatum.", - "An administrator still needs to trust this plugin. Review the declared permissions, owned schema, and file integrity before enabling it.": "Ein Administrator muss diesem Plugin weiterhin vertrauen. Überprüfen Sie die deklarierten Berechtigungen, das eigene Schema und die Dateiintegrität, bevor Sie es aktivieren.", - "Application Timezone": "Zeitzone der Anwendung", - "Apply TMDB ID to": "Wenden Sie die TMDB-ID an", - "Apply URL": "URL anwenden", - "Apply a single logo URL to all selected networks. Leave empty to remove logos.": "Wenden Sie eine einzige Logo-URL auf alle ausgewählten Netzwerke an. Lassen Sie das Feld leer, um Logos zu entfernen.", - "Apply a single logo override URL to all selected VOD channels. Leave empty to remove overrides.": "Wenden Sie eine einzelne Logo-Override-URL auf alle ausgewählten VOD-Kanäle an. Leer lassen, um Überschreibungen zu entfernen.", - "Apply a single logo override URL to all selected channels. Leave empty to remove overrides.": "Wenden Sie eine einzige Logo-Override-URL auf alle ausgewählten Kanäle an. Leer lassen, um Überschreibungen zu entfernen.", - "Apply a single poster URL to all selected series. Leave empty to remove custom posters.": "Wenden Sie eine einzelne Poster-URL auf alle ausgewählten Serien an. Lassen Sie das Feld leer, um benutzerdefinierte Poster zu entfernen.", - "Apply find and replace to all EPGs? If disabled, it will only apply to the selected EPG.": "Suchen und Ersetzen auf alle EPGs anwenden? Wenn es deaktiviert ist, gilt es nur für den ausgewählten EPG.", - "Apply find and replace to all Series? If disabled, it will only apply to the selected Series.": "Suchen und Ersetzen auf alle Serien anwenden? Wenn es deaktiviert ist, gilt es nur für die ausgewählte Serie.", - "Apply find and replace to all playlists? If disabled, it will only apply to the selected playlist.": "Suchen und Ersetzen auf alle Playlists anwenden? Wenn es deaktiviert ist, gilt es nur für die ausgewählte Playlist.", - "Apply reset to all EPGs? If disabled, it will only apply to the selected EPG.": "Zurücksetzen auf alle EPGs anwenden? Wenn es deaktiviert ist, gilt es nur für den ausgewählten EPG.", - "Apply reset to all playlists? If disabled, it will only apply to the selected playlist.": "Zurücksetzen auf alle Playlists anwenden? Wenn es deaktiviert ist, gilt es nur für die ausgewählte Playlist.", - "Archive Path": "Archivpfad", - "Are you sure you want to clear all selected VOD groups?": "Sind Sie sicher, dass Sie alle ausgewählten VOD-Gruppen löschen möchten?", - "Are you sure you want to clear all selected categories?": "Möchten Sie wirklich alle ausgewählten Kategorien löschen?", - "Are you sure you want to clear all selected live groups?": "Sind Sie sicher, dass Sie alle ausgewählten Live-Gruppen löschen möchten?", - "Are you sure you want to delete the selected VOD channels? This action cannot be undone.": "Sind Sie sicher, dass Sie die ausgewählten VOD-Kanäle löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", - "Are you sure you want to delete this VOD channel? This action cannot be undone.": "Möchten Sie diesen VOD-Kanal wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.", - "Are you sure you want to delete this series? This will delete all episodes and seasons for this series. This action cannot be undone.": "Sind Sie sicher, dass Sie diese Serie löschen möchten? Dadurch werden alle Episoden und Staffeln dieser Serie gelöscht. Diese Aktion kann nicht rückgängig gemacht werden.", - "Are you sure you want to delete this token? This action cannot be undone.": "Sind Sie sicher, dass Sie dieses Token löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.", - "Are you sure you want to manually trigger this EPG mapping to run again? This will not modify the \"Recurring\" setting.": "Sind Sie sicher, dass Sie die erneute Ausführung dieser EPG-Zuordnung manuell auslösen möchten? Dadurch wird die Einstellung „Wiederkehrend“ nicht geändert.", - "Are you sure you want to manually trigger this scrubber to run? This will not modify the \"Recurring\" setting.": "Sind Sie sicher, dass Sie die Ausführung dieses Scrubbers manuell auslösen möchten? Dadurch wird die Einstellung „Wiederkehrend“ nicht geändert.", - "Artifact": "Artefakt", - "Asset": "Asset", - "Asset deleted": "Asset gelöscht", - "Asset file": "Asset-Datei", - "Asset scan complete": "Asset-Scan abgeschlossen", - "Asset uploaded": "Asset hochgeladen", - "Assets": "Assets", - "Assign Auth to Playlist": "Weisen Sie der Playlist eine Authentifizierung zu", - "Assign priority weights to specific groups. Higher weight = more preferred as master. Leave empty for default behavior.": "Weisen Sie bestimmten Gruppen Prioritätsgewichtungen zu. Höheres Gewicht = bevorzugter als Master. Für Standardverhalten leer lassen.", - "Assign processing to item": "Ordnen Sie der Position die Verarbeitung zu", - "Assign this auth to a specific playlist. Each auth can only be assigned to one playlist at a time.": "Weisen Sie diese Authentifizierung einer bestimmten Playlist zu. Jede Authentifizierung kann jeweils nur einer Playlist zugewiesen werden.", - "Assign this network to a playlist for M3U/EPG output. Create one if none exist.": "Weisen Sie dieses Netzwerk einer Playlist für die M3U/EPG-Ausgabe zu. Erstellen Sie eine, falls keine vorhanden ist.", - "Assign to a network playlist for M3U/EPG output.": "Zuweisen zu einer Netzwerk-Playlist für die M3U/EPG-Ausgabe.", - "Assigned Auths": "Zugewiesene Auths", - "Assigned To": "Zugewiesen an", - "Assigned to Playlist": "Der Playlist zugewiesen", - "Audio Bitrate": "Audio-Bitrate", - "Audio Codec": "Audio-Codec", - "Audio bitrate": "Audio-Bitrate", - "Audio channels": "Audiokanäle", - "Audio codec": "Audio-Codec", - "Audio language": "Audiosprache", - "Audio level (in dB) below which audio is considered silent. Default: -50 dB.": "Audiopegel (in dB), unterhalb dessen Audio als stumm gilt. Standard: -50 dB.", - "Auth": "Auth", - "Auth (optional)": "Authentifizierung (optional)", - "Auth Name": "Authentifizierungsname", - "Auth for My Playlist": "Auth für meine Playlist", - "Authentication Option": "Authentifizierungsoption", - "Auto Enable": "Automatische Aktivierung", - "Auto Enable New Channels": "Neue Kanäle automatisch aktivieren", - "Auto Sync": "Automatische Synchronisierung", - "Auto channel number increment": "Automatische Erhöhung der Kanalnummer", - "Auto enable newly added category series": "Neu hinzugefügte Kategorieserien automatisch aktivieren", - "Auto enable newly added group channels": "Neu hinzugefügte Gruppenkanäle automatisch aktivieren", - "Auto scan on EPG cache: disabled": "Automatischer Scan im EPG-Cache: deaktiviert", - "Auto scan on EPG cache: enabled": "Automatischer Scan im EPG-Cache: aktiviert", - "Auto sync and scheduling options": "Automatische Synchronisierungs- und Planungsoptionen", - "Auto trigger": "Automatischer Auslöser", - "Auto-Add to Custom Playlist": "Automatisch zur benutzerdefinierten Playlist hinzufügen", - "Auto-Enable Settings": "Einstellungen für die automatische Aktivierung", - "Auto-Fetch Metadata": "Metadaten automatisch abrufen", - "Auto-Merge Processing": "Automatische Zusammenführungsverarbeitung", - "Auto-lookup on metadata fetch": "Automatische Suche beim Metadatenabruf", - "Auto-regenerate Schedule": "Zeitplan automatisch neu generieren", - "Auto/Default": "Auto/Standard", - "Automated backups": "Automatisierte Backups", - "Automatically assign sort number based on playlist order": "Weisen Sie automatisch eine Sortiernummer basierend auf der Reihenfolge der Wiedergabelisten zu", - "Automatically disable channels whose stream URL is unreachable.": "Kanäle, deren Stream-URL nicht erreichbar ist, automatisch deaktivieren.", - "Automatically enable newly added channels to this group.": "Neu hinzugefügte Kanäle dieser Gruppe automatisch aktivieren.", - "Automatically lookup TMDB IDs when fetching metadata for VOD and Series. This may slow down imports and metadata fetching for large playlists. Will only be fetched for enabled items.": "Suchen Sie beim Abrufen von Metadaten für VOD und Serien automatisch nach TMDB-IDs. Dies kann den Import und das Abrufen von Metadaten für große Playlists verlangsamen. Wird nur für aktivierte Elemente abgerufen.", - "Automatically lookup TMDB metadata after sync completes (Local & WebDAV)": "Nach Abschluss der Synchronisierung automatisch nach TMDB-Metadaten suchen (lokal und WebDAV)", - "Automatically merge channels with the same stream ID into failover relationships after sync": "Führen Sie Kanäle mit derselben Stream-ID nach der Synchronisierung automatisch in Failover-Beziehungen zusammen", - "Automatically regenerate when schedule is about to expire (within 24 hours).": "Automatische Neugenerierung, wenn der Zeitplan bald abläuft (innerhalb von 24 Stunden).", - "Automatically regenerate when schedule is about to expire.": "Automatisch neu generieren, wenn der Zeitplan bald abläuft.", - "Automatically run this scrubber after each playlist sync.": "Führen Sie diesen Scrubber automatisch nach jeder Playlist-Synchronisierung aus.", - "Automatically set when selecting a category.": "Wird bei der Auswahl einer Kategorie automatisch festgelegt.", - "Automatically sync EPG": "EPG automatisch synchronisieren", - "Automatically sync content on schedule": "Synchronisieren Sie Inhalte automatisch nach Zeitplan", - "Automatically sync merged EPG": "Zusammengeführte EPG automatisch synchronisieren", - "Automatically sync playlist": "Wiedergabeliste automatisch synchronisieren", - "Automatically trigger a library scan on your media server after .strm files are synced": "Lösen Sie automatisch einen Bibliotheksscan auf Ihrem Medienserver aus, nachdem .strm-Dateien synchronisiert wurden", - "Automatically trigger failover when a stream\\'s audio goes silent. Disabled by default.": "Failover automatisch auslösen, wenn der Ton eines Streams stumm geschaltet wird. Standardmäßig deaktiviert.", - "Automation": "Automatisierung", - "Availability": "Verfügbarkeit", - "Available Actions": "Verfügbare Aktionen", - "Available Streams": "Verfügbare Streams", - "Avatar": "Avatar", - "Back to Playlist": "Zurück zur Playlist", - "Back to Plugin": "Zurück zum Plugin", - "Back to Scrubber": "Zurück zu Scrubber", - "Back to Scrubbers": "Zurück zu Scrubbers", - "Back to Series": "Zurück zur Serie", - "Back to Sync Statuses": "Zurück zu Synchronisierungsstatus", - "Back to VOD": "Zurück zu VOD", - "Back to series": "Zurück zur Serie", - "Backdrop Images": "Hintergrundbilder", - "Backup & Restore": "Sichern und Wiederherstellen", - "Backup Account": "Sicherungskonto", - "Backup Before Sync": "Sicherung vor der Synchronisierung", - "Backup Schedule": "Backup-Zeitplan", - "Backup file": "Sicherungsdatei", - "Backup file (.ZIP files only)": "Sicherungsdatei (nur ZIP-Dateien)", - "Backup file has been uploaded, you can now restore it if needed.": "Die Sicherungsdatei wurde hochgeladen. Sie können sie jetzt bei Bedarf wiederherstellen.", - "Backup has been uploaded": "Backup wurde hochgeladen", - "Backup is being created": "Backup wird erstellt", - "Backup is being created in the background. Depending on the size of your database and files, this could take a while.": "Das Backup wird im Hintergrund erstellt. Abhängig von der Größe Ihrer Datenbank und Dateien kann dies eine Weile dauern.", - "Backup is being restored": "Das Backup wird wiederhergestellt", - "Backup is being restored in the background. Depending on the size of the backup, this could take a while.": "Das Backup wird im Hintergrund wiederhergestellt. Abhängig von der Größe des Backups kann dies eine Weile dauern.", - "Backups": "Backups", - "Bare scaffold": "Kahles Gerüst", - "Base URL": "Basis-URL", - "Bit depth": "Bittiefe", - "Bitrate": "Bitrate", - "Block Plugin": "Block-Plugin", - "Blocked": "Blockiert", - "Blocking disables the plugin immediately and prevents execution until an administrator trusts it again.": "Durch das Blockieren wird das Plugin sofort deaktiviert und die Ausführung verhindert, bis ein Administrator ihm wieder vertraut.", - "Body": "Körper", - "Body content for the email (optional).": "Textinhalt für die E-Mail (optional).", - "Brief description...": "Kurzbeschreibung...", - "Broadcast": "Übertragen", - "Broadcast Scheduled": "Übertragung geplant", - "Broadcast Settings": "Broadcast-Einstellungen", - "Broadcast Started": "Übertragung gestartet", - "Broadcast Status": "Übertragungsstatus", - "Broadcast Stopped": "Übertragung gestoppt", - "Broadcast will wait until this time to start. Leave empty to start immediately.": "Mit dem Start der Übertragung wird bis zu diesem Zeitpunkt gewartet. Lassen Sie es leer, um sofort zu beginnen.", - "Browse Library": "Durchsuchen Sie die Bibliothek", - "Bulk Actions": "Massenaktionen", - "Bulk VOD actions": "Massen-VOD-Aktionen", - "Bulk channel actions": "Massenkanalaktionen", - "Bulk series actions": "Massenserienaktionen", - "Bundled plugins cannot be deleted.": "Gebündelte Plugins können nicht gelöscht werden.", - "Bypass Provider Connection Limits": "Umgehen Sie die Verbindungsbeschränkungen des Anbieters", - "CRON Example": "CRON-Beispiel", - "Cache Metadata": "Cache-Metadaten", - "Cache Progress": "Cache-Fortschritt", - "Cached": "Zwischengespeichert", - "Cached logos removed": "Zwischengespeicherte Logos entfernt", - "Call webhooks, or run local scripts, after playlist sync completion.": "Rufen Sie Webhooks auf oder führen Sie lokale Skripts aus, nachdem die Synchronisierung der Wiedergabeliste abgeschlossen ist.", - "Cancel": "Abbrechen", - "Cancel Run": "Lauf abbrechen", - "Cancel the in-progress scrubber run.": "Brechen Sie den laufenden Scrubber-Lauf ab.", - "Cancel this scrubber run? The current run will be abandoned. Any channels already disabled during this run will remain disabled.": "Diesen Scrubber-Lauf abbrechen? Der aktuelle Lauf wird abgebrochen. Alle während dieses Laufs bereits deaktivierten Kanäle bleiben deaktiviert.", - "Cancellation requested": "Abbruch angefordert", - "Cancelled": "Abgebrochen", - "Capabilities": "Fähigkeiten", - "Capability Map": "Fähigkeitskarte", - "Cast": "Besetzung", - "Catchup": "Catch-up", - "Categories": "Kategorien", - "Categories to import": "Zu importierende Kategorien", - "Category": "Kategorie", - "Category Name": "Kategoriename", - "Category Settings": "Kategorieeinstellungen", - "Ch #": "Ch #", - "Channel": "Kanal", - "Channel Attributes to Copy": "Zu kopierende Kanalattribute", - "Channel Details": "Kanaldetails", - "Channel ID": "Kanal-ID", - "Channel Match Attributes": "Kanalübereinstimmungsattribute", - "Channel Name": "Kanalname", - "Channel No.": "Kanal-Nr.", - "Channel Number": "Kanalnummer", - "Channel Scrubber": "Kanal-Scrubber", - "Channel Scrubbers": "Kanal-Scrubber", - "Channel Title": "Kanaltitel", - "Channel group as category": "Kanalgruppe als Kategorie", - "Channel mapping removed for the selected Playlist.": "Kanalzuordnung für die ausgewählte Playlist entfernt.", - "Channel mapping removed for the selected channels.": "Kanalzuordnung für die ausgewählten Kanäle entfernt.", - "Channel mapping started, you will be notified when the process is complete.": "Die Kanalzuordnung wurde gestartet. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.", - "Channel merge started": "Kanalzusammenführung gestartet", - "Channel scrubber restarted": "Kanal-Scrubber neu gestartet", - "Channel scrubber started": "Kanal-Scrubber gestartet", - "Channel scrubbers started": "Kanal-Scrubber gestartet", - "Channel unmerge started": "Die Kanalzusammenführung wurde gestartet", - "Channels": "Kanäle", - "Channels Checked": "Kanäle überprüft", - "Channels Disabled": "Kanäle deaktiviert", - "Channels Recounted": "Nachgezählte Kanäle", - "Channels Sorted": "Kanäle sortiert", - "Channels as failover": "Kanäle als Failover", - "Channels moved to group": "Kanäle wurden in die Gruppe verschoben", - "Channels only": "Nur Kanäle", - "Channels to process per call (default: 50, max: 100). Use with offset for pagination.": "Pro Anruf zu verarbeitende Kanäle (Standard: 50, max: 100). Zur Paginierung mit Offset verwenden.", - "Channels to skip (default: 0). Increment by limit to page through a large group.": "Zu überspringende Kanäle (Standard: 0). Erhöhen Sie die Anzahl um ein Limit, um durch eine große Gruppe zu blättern.", - "Channels with these keywords in their name will be prioritized (e.g., \"RAW\", \"LOCAL\", \"HD\").": "Kanäle mit diesen Schlüsselwörtern im Namen werden priorisiert (z. B. „RAW“, „LOCAL“, „HD“).", - "Check Method": "Methode prüfen", - "Check Plugin Updates": "Überprüfen Sie Plugin-Updates", - "Check for File Changes": "Suchen Sie nach Dateiänderungen", - "Check for Updates": "Suchen Sie nach Updates", - "Check interval (seconds)": "Prüfintervall (Sekunden)", - "Checked": "Geprüft", - "Choose between URL/file upload or SchedulesDirect integration": "Wählen Sie zwischen URL-/Datei-Upload oder SchedulesDirect-Integration", - "Choose if and where transcoding should occur. Restart the broadcast after changing this setting.": "Wählen Sie, ob und wo die Transkodierung erfolgen soll. Starten Sie die Übertragung neu, nachdem Sie diese Einstellung geändert haben.", - "Choose master from?": "Wählen Sie Master aus?", - "Choose the position of primary navigation": "Wählen Sie die Position der primären Navigation", - "Choose whether to retain or remove any database tables and storage files the plugin created during its lifetime.": "Wählen Sie, ob alle Datenbanktabellen und Speicherdateien, die das Plugin während seiner Lebensdauer erstellt hat, beibehalten oder entfernt werden sollen.", - "Clean special characters": "Sonderzeichen bereinigen", - "Cleanup Complete": "Bereinigung abgeschlossen", - "Cleanup Duplicate Series": "Bereinigen Sie doppelte Serien", - "Cleanup Duplicates": "Duplikate bereinigen", - "Cleanup Streams": "Streams bereinigen", - "Cleanup default": "Bereinigungsstandard", - "Cleanup requested.": "Bereinigung angefordert.", - "Clear": "Klar", - "Clear All Logo Cache": "Löschen Sie den gesamten Logo-Cache", - "Clear EPG mappings for all channels of the selected playlist.": "EPG-Zuordnungen für alle Kanäle der ausgewählten Playlist löschen.", - "Clear EPG mappings for the selected channels.": "Löschen Sie die EPG-Zuordnungen für die ausgewählten Kanäle.", - "Clear Expired Logo Cache": "Leeren Sie den abgelaufenen Logo-Cache", - "Clear History": "Verlauf löschen", - "Clear Watch Progress": "Wiedergabefortschritt löschen", - "Clear all": "Alles löschen", - "Clear all cached logos": "Alle zwischengespeicherten Logos löschen", - "Clear cached logos and poster images for selected VOD channels so they are fetched again on the next request.": "Löschen Sie zwischengespeicherte Logos und Posterbilder für ausgewählte VOD-Kanäle, damit sie bei der nächsten Anfrage erneut abgerufen werden.", - "Clear cached logos for selected channels so they are fetched again on the next request.": "Löschen Sie zwischengespeicherte Logos für ausgewählte Kanäle, damit sie bei der nächsten Anfrage erneut abgerufen werden.", - "Clear cached logos for selected networks so they are fetched again on the next request.": "Löschen Sie zwischengespeicherte Logos für ausgewählte Netzwerke, damit sie bei der nächsten Anfrage erneut abgerufen werden.", - "Clear cached poster images for selected series so they are fetched again on the next request.": "Löschen Sie zwischengespeicherte Posterbilder für ausgewählte Serien, damit sie bei der nächsten Anfrage erneut abgerufen werden.", - "Clear expired cache": "Leeren Sie den abgelaufenen Cache", - "Clear failed playlists": "Löschen Sie fehlgeschlagene Wiedergabelisten", - "Clear history": "Verlauf löschen", - "Clear log": "Protokoll löschen", - "Clear log file?": "Logdatei löschen?", - "Clear run history": "Laufverlauf löschen", - "Clear selection": "Auswahl aufheben", - "Clearing the logo cache will remove all cached logo images. If permanent cache is enabled, it will be ignored. This action cannot be undone.": "Durch das Löschen des Logo-Cache werden alle zwischengespeicherten Logo-Bilder entfernt. Wenn der permanente Cache aktiviert ist, wird er ignoriert. Diese Aktion kann nicht rückgängig gemacht werden.", - "Click on a result to apply the TMDB IDs": "Klicken Sie auf ein Ergebnis, um die TMDB-IDs anzuwenden", - "Close": "Schließen", - "Codec long name": "Codec-Langname", - "Column to modify": "Zu ändernde Spalte", - "Column to reset": "Spalte zum Zurücksetzen", - "Combine multiple EPGs into one unified XML for external players.": "Kombinieren Sie mehrere EPGs in einem einheitlichen XML für externe Player.", - "Complete cast list": "Vollständige Besetzungsliste", - "Completed": "Abgeschlossen", - "Condition": "Zustand", - "Condition to check.": "Zu überprüfender Zustand.", - "Conditional Settings": "Bedingte Einstellungen", - "Conditions": "Bedingungen", - "Config": "Konfig", - "Configuration": "Konfiguration", - "Configure SMTP settings to send emails from the application.": "Konfigurieren Sie die SMTP-Einstellungen zum Senden von E-Mails aus der Anwendung.", - "Configure The Movie Database (TMDB) integration to automatically lookup and populate metadata IDs (TMDB, TVDB, IMDB) for your VOD content and Series.": "Konfigurieren Sie die Integration der Filmdatenbank (TMDB), um automatisch Metadaten-IDs (TMDB, TVDB, IMDB) für Ihre VOD-Inhalte und Serien zu suchen und zu füllen.", - "Configure automatic stream probing after each playlist sync.": "Konfigurieren Sie die automatische Stream-Prüfung nach jeder Playlist-Synchronisierung.", - "Configure automatic sync schedule": "Konfigurieren Sie den Zeitplan für die automatische Synchronisierung", - "Configure groups to automatically sync into Custom Playlists after each successful sync. Each rule syncs the selected source group(s) into one Custom Playlist.": "Konfigurieren Sie Gruppen, die nach jeder erfolgreichen Synchronisierung automatisch in benutzerdefinierte Playlists synchronisiert werden. Jede Regel synchronisiert die ausgewählten Quellgruppen in eine benutzerdefinierte Playlist.", - "Configure how content is scheduled and where the network is published.": "Konfigurieren Sie, wie Inhalte geplant werden und wo das Netzwerk veröffentlicht wird.", - "Configure how the proxy handles stream failures, including advanced resolver logic and fail conditions.": "Konfigurieren Sie, wie der Proxy Stream-Fehler behandelt, einschließlich erweiterter Resolver-Logik und Fehlerbedingungen.", - "Configure how the proxy is accessed and how stream URLs are resolved.": "Konfigurieren Sie, wie auf den Proxy zugegriffen wird und wie Stream-URLs aufgelöst werden.", - "Configure scaffold options": "Konfigurieren Sie Gerüstoptionen", - "Configure your SchedulesDirect account settings": "Konfigurieren Sie Ihre SchedulesDirect-Kontoeinstellungen", - "Confirm selection": "Auswahl bestätigen", - "Connected but No Libraries Found": "Verbunden, aber keine Bibliotheken gefunden", - "Connection Failed": "Verbindung fehlgeschlagen", - "Connection Successful": "Verbindung erfolgreich", - "Connection failed": "Verbindung fehlgeschlagen", - "Connection successful!": "Verbindung erfolgreich!", - "Consecutive silent checks before failover": "Aufeinanderfolgende stille Prüfungen vor dem Failover", - "Container Extension": "Containererweiterung", - "Content": "Inhalt", - "Content Type": "Inhaltstyp", - "Content not found": "Inhalt nicht gefunden", - "Control how media is transcoded": "Steuern Sie, wie Medien transkodiert werden", - "Control request concurrency for parallel processing and add delays between requests to avoid provider rate limiting.": "Steuern Sie die Anfragenparallelität für die Parallelverarbeitung und fügen Sie Verzögerungen zwischen Anfragen ein, um Rate-Limiting beim Anbieter zu vermeiden.", - "Control what content is synced from the media server": "Steuern Sie, welche Inhalte vom Medienserver synchronisiert werden", - "Copy Changes": "Änderungen kopieren", - "Copy now": "Jetzt kopieren", - "Copy the file hash from the GitHub release page to verify the download hasn't been tampered with.": "Kopieren Sie den Datei-Hash von der GitHub-Release-Seite, um sicherzustellen, dass der Download nicht manipuliert wurde.", - "Copy the file hash from the GitHub release page to verify the download hasn\\'t been tampered with.": "Kopieren Sie den Datei-Hash von der GitHub-Release-Seite, um sicherzustellen, dass der Download nicht manipuliert wurde.", - "Copy the file hash from the GitHub release page.": "Kopieren Sie den Datei-Hash von der GitHub-Release-Seite.", - "Could not determine the record to update. Please close the modal and try again.": "Der zu aktualisierende Datensatz konnte nicht ermittelt werden. Bitte schließen Sie das Modal und versuchen Sie es erneut.", - "Could not fetch release": "Die Veröffentlichung konnte nicht abgerufen werden", - "Country": "Land", - "Country Code": "Landesvorwahl", - "Country of origin.": "Ursprungsland.", - "Cover": "Abdeckung", - "Cover Image (Large)": "Titelbild (groß)", - "Create Custom Channel": "Erstellen Sie einen benutzerdefinierten Kanal", - "Create Custom VOD": "Erstellen Sie ein benutzerdefiniertes VOD", - "Create Missing Channels": "Erstellen Sie fehlende Kanäle", - "Create Network": "Netzwerk erstellen", - "Create Networks in the Networks section to build pseudo-live channels": "Erstellen Sie im Abschnitt „Netzwerke“ Netzwerke, um Pseudo-Live-Kanäle zu erstellen", - "Create Plugin": "Plugin erstellen", - "Create Token": "Token erstellen", - "Create an alias of an existing playlist or custom playlist to use a different Xtream API credentials, while still using the same underlying Channel, VOD and Series configurations of the linked playlist.": "Erstellen Sie einen Alias ​​einer vorhandenen Wiedergabeliste oder einer benutzerdefinierten Wiedergabeliste, um andere Xtream-API-Anmeldeinformationen zu verwenden und gleichzeitig dieselben zugrunde liegenden Kanal-, VOD- und Serienkonfigurationen der verknüpften Wiedergabeliste zu verwenden.", - "Create credentials and assign them to your Playlist for simple authentication. They can also be used to access the Xtream API for the assigned Playlists.": "Erstellen Sie Anmeldeinformationen und weisen Sie diese zur einfachen Authentifizierung Ihrer Playlist zu. Sie können auch verwendet werden, um auf die Xtream-API für die zugewiesenen Playlists zuzugreifen.", - "Create live TV channels from your media server content": "Erstellen Sie Live-TV-Kanäle aus den Inhalten Ihres Medienservers", - "Create now": "Jetzt erstellen", - "Create playlists composed of channels from your other playlists. Head to channels to bulk add channels to your custom playlist.": "Erstellen Sie Playlists, die aus Kanälen Ihrer anderen Playlists bestehen. Gehen Sie zu „Kanäle“, um Ihrer benutzerdefinierten Playlist mehrere Kanäle hinzuzufügen.", - "Creates a new security review of this plugin\\'s current files. Use this after updating plugin files on disk or after a failed install to re-trigger the review process without re-uploading.": "Erstellt eine neue Sicherheitsüberprüfung der aktuellen Dateien dieses Plugins. Verwenden Sie dies nach dem Aktualisieren von Plugin-Dateien auf der Festplatte oder nach einer fehlgeschlagenen Installation, um den Überprüfungsprozess ohne erneutes Hochladen erneut auszulösen.", - "Credentials": "Anmeldeinformationen", - "Current IDs": "Aktuelle IDs", - "Current Provider Timezone": "Aktuelle Zeitzone des Anbieters", - "Current Run": "Aktueller Lauf", - "Current Status": "Aktueller Status", - "Current category series disabled": "Aktuelle Kategorieserie deaktiviert", - "Current category series enabled": "Aktuelle Kategoriereihe aktiviert", - "Current signal": "Aktuelles Signal", - "Currently Mapped": "Derzeit zugeordnet", - "Currently stored external IDs for this VOD": "Derzeit gespeicherte externe IDs für dieses VOD", - "Currently stored external IDs for this series": "Derzeit gespeicherte externe IDs für diese Serie", - "Custom": "Benutzerdefiniert", - "Custom Category": "Benutzerdefinierte Kategorie", - "Custom Date Format String": "Benutzerdefinierte Datumsformatzeichenfolge", - "Custom Group": "Benutzerdefinierte Gruppe", - "Custom Headers": "Benutzerdefinierte Header", - "Custom Playlist": "Benutzerdefinierte Wiedergabeliste", - "Custom Playlist Channels Recounted": "Benutzerdefinierte Playlist-Kanäle erneut gezählt", - "Custom Playlists": "Benutzerdefinierte Wiedergabelisten", - "Custom headers to use when streaming via the proxy.": "Benutzerdefinierte Header zur Verwendung beim Streaming über den Proxy.", - "DNS failover URLs": "DNS-Failover-URLs", - "DVR / Live TV Tuner": "DVR / Live-TV-Tuner", - "DVR Channels": "DVR-Kanäle", - "DVR Removed": "DVR entfernt", - "DVR Status": "DVR-Status", - "DVR Sync Status": "DVR-Synchronisierungsstatus", - "Dashboard": "Dashboard", - "Data Ownership": "Dateneigentum", - "Date Format": "Datumsformat", - "Days of schedule to generate": "Zu generierender Zeitplan in Tagen", - "Days to Import": "Tage zum Importieren", - "Deactivate failover channels": "Failover-Kanäle deaktivieren", - "Dead Links": "Tote Links", - "Dead Links Found": "Tote Links gefunden", - "Debug Logs": "Debug-Protokolle", - "Debugging": "Debuggen", - "Default EPG": "Standard-EPG", - "Default ID": "Standard-ID", - "Default Live Transcoding Profile": "Standard-Live-Transkodierungsprofil", - "Default Name": "Standardname", - "Default Series Stream File Setting": "Standardeinstellung für Serien-Stream-Dateien", - "Default Title": "Standardtitel", - "Default URL": "Standard-URL", - "Default Uninstall Behavior": "Standardmäßiges Deinstallationsverhalten", - "Default VOD Stream File Setting": "Standardeinstellung für VOD-Stream-Dateien", - "Default name": "Standardname", - "Default options for new Live channels": "Standardoptionen für neue Live-Kanäle", - "Default options for new VOD channels": "Standardoptionen für neue VOD-Kanäle", - "Default playlist": "Standard-Playlist", - "Default routes through M3U Editor for dynamic routing.": "Standardrouten über den M3U-Editor für dynamisches Routing.", - "Default stream profiles have been generated!": "Standard-Stream-Profile wurden generiert!", - "Defaults": "Standardeinstellungen", - "Defaults and schedules used by the plugin.": "Vom Plugin verwendete Standardeinstellungen und Zeitpläne.", - "Defaults, schedules, and automatic entry points.": "Standardeinstellungen, Zeitpläne und automatische Einstiegspunkte.", - "Define find & replace rules that automatically run after each playlist sync. Rules execute in order.": "Definieren Sie Such- und Ersetzungsregeln, die nach jeder Playlist-Synchronisierung automatisch ausgeführt werden. Regeln werden der Reihe nach ausgeführt.", - "Define sort configurations that automatically run after each playlist sync. Configurations execute in order.": "Definieren Sie Sortierkonfigurationen, die nach jeder Playlist-Synchronisierung automatisch ausgeführt werden. Konfigurationen werden der Reihe nach ausgeführt.", - "Delay after stream start before silence monitoring begins. Allows for initial buffering and audio decoder startup. Default: 15 seconds.": "Verzögerung nach Streamstart, bevor die Stilleüberwachung beginnt. Ermöglicht die anfängliche Pufferung und den Start des Audio-Decoders. Standard: 15 Sekunden.", - "Delay before refresh (seconds)": "Verzögerung vor der Aktualisierung (Sekunden)", - "Delay in milliseconds between requests.": "Verzögerung in Millisekunden zwischen Anfragen.", - "Delete": "Löschen", - "Delete Plugin": "Plugin löschen", - "Delete Record": "Datensatz löschen", - "Delete blocked": "Löschen blockiert", - "Delete now": "Jetzt löschen", - "Delete permanently": "Dauerhaft löschen", - "Delete plugin from disk": "Plugin von der Festplatte löschen", - "Delete selected": "Ausgewählte löschen", - "Delete selected files": "Ausgewählte Dateien löschen", - "Delete this sync log?": "Dieses Synchronisierungsprotokoll löschen?", - "Description": "Beschreibung", - "Detach Selected": "Ausgewählte trennen", - "Detach selected channels from custom playlist": "Trennen Sie ausgewählte Kanäle von der benutzerdefinierten Wiedergabeliste", - "Detach selected series from custom playlist": "Trennen Sie ausgewählte Serien von der benutzerdefinierten Wiedergabeliste", - "Detached from playlist": "Von der Playlist entfernt", - "Detailed plot summary.": "Detaillierte Handlungszusammenfassung.", - "Detailed plot summary...": "Detaillierte Handlungszusammenfassung...", - "Details": "Details", - "Determines how the playlist is output": "Bestimmt, wie die Playlist ausgegeben wird", - "Determines which path structure options are available and where this profile can be assigned": "Bestimmt, welche Pfadstrukturoptionen verfügbar sind und wo dieses Profil zugewiesen werden kann", - "Direct": "Direkt", - "Director": "Regisseur", - "Director(s) of the content.": "Regisseur(e) des Inhalts.", - "Disable": "Deaktivieren", - "Disable Categories": "Kategorien deaktivieren", - "Disable Category Series": "Kategorieserien deaktivieren", - "Disable EPG mapping": "Deaktivieren Sie die EPG-Zuordnung", - "Disable Group Channels": "Gruppenkanäle deaktivieren", - "Disable Groups": "Gruppen deaktivieren", - "Disable Merge": "Deaktivieren Sie die Zusammenführung", - "Disable Probing": "Deaktivieren Sie die Sondierung", - "Disable SSL verification": "Deaktivieren Sie die SSL-Überprüfung", - "Disable all episodes": "Deaktivieren Sie alle Episoden", - "Disable catch-up": "Aufholen deaktivieren", - "Disable category series": "Kategorieserie deaktivieren", - "Disable dead channels": "Tote Kanäle deaktivieren", - "Disable group channels": "Gruppenkanäle deaktivieren", - "Disable group channels now?": "Gruppenkanäle jetzt deaktivieren?", - "Disable now": "Jetzt deaktivieren", - "Disable selected": "Ausgewählte Option deaktivieren", - "Disable stream probing for the selected channels. They will be excluded from stream probing jobs.": "Deaktivieren Sie die Stream-Prüfung für die ausgewählten Kanäle. Sie werden von Stream-Probing-Jobs ausgeschlossen.", - "Disable the current category series now?": "Aktuelle Kategoriereihe jetzt deaktivieren?", - "Disable the selected categories now?": "Ausgewählte Kategorien jetzt deaktivieren?", - "Disable the selected category series now?": "Die ausgewählte Kategorieserie jetzt deaktivieren?", - "Disable the selected channel(s) now?": "Die ausgewählten Kanäle jetzt deaktivieren?", - "Disable the selected group(s) channels now?": "Die ausgewählten Gruppenkanäle jetzt deaktivieren?", - "Disable the selected group(s) now?": "Die ausgewählte(n) Gruppe(n) jetzt deaktivieren?", - "Disable the series episodes now?": "Serienepisoden jetzt deaktivieren?", - "Disable to pause syncing without deleting the integration": "Deaktivieren Sie diese Option, um die Synchronisierung anzuhalten, ohne die Integration zu löschen", - "Disable to stop generating schedule without deleting": "Deaktivieren Sie diese Option, um die Generierung des Zeitplans ohne Löschen zu beenden", - "Disabled": "Deaktiviert", - "Disabling is reversible. Uninstalling changes the plugin\\'s status and optionally removes its database tables, files, and reports.": "Die Deaktivierung ist reversibel. Durch die Deinstallation wird der Status des Plugins geändert und optional werden dessen Datenbanktabellen, Dateien und Berichte entfernt.", - "Discard Review": "Bewertung verwerfen", - "Discard review failed": "Die Überprüfung konnte nicht verworfen werden", - "Discord": "Discord", - "Discover Plugins": "Entdecken Sie Plugins", - "Disk": "Festplatte", - "Display Name": "Anzeigename", - "Display aspect ratio": "Seitenverhältnis anzeigen", - "Documentation": "Dokumentation", - "Does not have metadata": "Verfügt über keine Metadaten", - "Don\\'t allow merging for selected channels when running \"Merge Same ID\" jobs.": "Lassen Sie das Zusammenführen ausgewählter Kanäle nicht zu, wenn Sie Aufträge mit der Bezeichnung „Gleiche ID zusammenführen“ ausführen.", - "Don\\'t map EPG to selected channels when running EPG mapping jobs.": "Ordnen Sie EPG nicht ausgewählten Kanälen zu, wenn Sie EPG-Zuordnungsjobs ausführen.", - "Donate now": "Jetzt spenden", - "Donate via Ko-fi": "Spenden Sie über Ko-fi", - "Done": "Erledigt", - "Download": "Herunterladen", - "Download EPG": "EPG herunterladen", - "Download M3U": "Laden Sie M3U herunter", - "Download Report": "Bericht herunterladen", - "Drag to re-order the assigned EPG sources. The first will be given the highest priority.": "Ziehen Sie, um die zugewiesenen EPG-Quellen neu anzuordnen. Dem ersten wird die höchste Priorität eingeräumt.", - "Drag to reorder priority attributes. First attribute has highest priority. Leave empty for default order.": "Ziehen Sie, um die Prioritätsattribute neu anzuordnen. Das erste Attribut hat die höchste Priorität. Für die Standardreihenfolge leer lassen.", - "Dry run": "Trockenlauf", - "Dummy program length (in minutes)": "Dummy-Programmlänge (in Minuten)", - "Duplicate": "Duplikat", - "Duplicate playlist now?": "Playlist jetzt duplizieren?", - "Duration": "Dauer", - "Duration (Seconds)": "Dauer (Sekunden)", - "Duration in HH:MM:SS format.": "Dauer im Format HH:MM:SS.", - "Duration in seconds.": "Dauer in Sekunden.", - "EPG": "EPG", - "EPG Cache is being generated": "EPG-Cache wird generiert", - "EPG Cache is being generated for selected EPGs": "Für ausgewählte EPGs wird ein EPG-Cache generiert", - "EPG Cache is being generated in the background for the selected EPGs. You will be notified when complete.": "Der EPG-Cache wird im Hintergrund für die ausgewählten EPGs generiert. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.", - "EPG Cache is being generated in the background. You will be notified when complete.": "Der EPG-Cache wird im Hintergrund generiert. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.", - "EPG Channel": "EPG-Kanal", - "EPG Channel mapping removed": "EPG-Kanalzuordnung entfernt", - "EPG Channels": "EPG-Kanäle", - "EPG File Cache Cleared": "EPG-Dateicache gelöscht", - "EPG File Cache Not Found": "EPG-Dateicache nicht gefunden", - "EPG Information": "EPG-Informationen", - "EPG Map": "EPG-Karte", - "EPG Mapped Channels": "EPG-zugeordnete Kanäle", - "EPG Mapper: Apply Mappings": "EPG Mapper: Zuordnungen anwenden", - "EPG Mapper: Channel Matcher": "EPG-Mapper: Kanal-Matcher", - "EPG Mapper: Mapping State": "EPG Mapper: Mapping-Status", - "EPG Maps": "EPG-Karten", - "EPG Output": "EPG-Ausgabe", - "EPG Settings": "EPG-Einstellungen", - "EPG Shift": "EPG-Verschiebung", - "EPG URL": "EPG-URL", - "EPG data for your Networks": "EPG-Daten für Ihre Netzwerke", - "EPG is being processed in the background. Depending on the size of the guide data, this may take a while. You will be notified on completion.": "EPG wird im Hintergrund verarbeitet. Abhängig von der Größe der Leitdaten kann dies eine Weile dauern. Nach Abschluss werden Sie benachrichtigt.", - "EPG is being processed in the background. The view will update when complete.": "EPG wird im Hintergrund verarbeitet. Die Ansicht wird aktualisiert, wenn der Vorgang abgeschlossen ist.", - "EPG is mapped": "EPG ist zugeordnet", - "EPG is not mapped": "EPG ist nicht zugeordnet", - "EPG is processing": "EPG wird verarbeitet", - "EPG map disabled for selected channels": "EPG-Karte für ausgewählte Kanäle deaktiviert", - "EPG map re-enabled for selected channels": "EPG-Karte für ausgewählte Kanäle wieder aktiviert", - "EPG mapping restarted": "EPG-Mapping neu gestartet", - "EPG mapping started": "EPG-Mapping gestartet", - "EPG output options": "EPG-Ausgabeoptionen", - "EPG status has been reset.": "Der EPG-Status wurde zurückgesetzt.", - "EPG status reset": "EPG-Status zurückgesetzt", - "EPG to Channel mapping": "EPG-zu-Kanal-Zuordnung", - "EPG type": "EPG-Typ", - "EPGs": "EPGs", - "Edit Playlist": "Playlist bearbeiten", - "Edit Series": "Serie bearbeiten", - "Edit VOD": "VOD bearbeiten", - "Edit or add the series details": "Bearbeiten oder fügen Sie die Seriendetails hinzu", - "Email Body": "E-Mail-Text", - "Email Options": "E-Mail-Optionen", - "Email Subject": "E-Mail-Betreff", - "Email address": "E-Mail-Adresse", - "Email variables": "E-Mail-Variablen", - "Emby": "Emby", - "Enable": "Aktivieren", - "Enable .strm file generation": "Aktivieren Sie die .strm-Dateigenerierung", - "Enable AI Copilot": "Aktivieren Sie AI Copilot", - "Enable AI Copilot Management": "Aktivieren Sie die KI-Copilot-Verwaltung", - "Enable Automatic Database Backups": "Aktivieren Sie automatische Datenbanksicherungen", - "Enable Broadcasting": "Aktivieren Sie Broadcasting", - "Enable Categories": "Kategorien aktivieren", - "Enable Category Series": "Kategorieserien aktivieren", - "Enable Debugging": "Aktivieren Sie das Debuggen", - "Enable EPG mapping": "Aktivieren Sie die EPG-Zuordnung", - "Enable EPG mapping by default": "Aktivieren Sie standardmäßig die EPG-Zuordnung", - "Enable Group Channels": "Gruppenkanäle aktivieren", - "Enable Groups": "Gruppen aktivieren", - "Enable Logo Proxy": "Logo-Proxy aktivieren", - "Enable Logo Repository endpoint": "Aktivieren Sie den Logo-Repository-Endpunkt", - "Enable Merge": "Aktivieren Sie Zusammenführen", - "Enable Plex Management": "Aktivieren Sie die Plex-Verwaltung", - "Enable Probing": "Aktivieren Sie die Sondierung", - "Enable Provider Affinity": "Aktivieren Sie die Anbieteraffinität", - "Enable Provider Profiles": "Anbieterprofile aktivieren", - "Enable Sticky Session Handler": "Aktivieren Sie den Sticky Session Handler", - "Enable Stream Proxy": "Stream-Proxy aktivieren", - "Enable Strict Live TS Handling": "Aktivieren Sie die strikte Live-TS-Behandlung", - "Enable Sync Logs": "Aktivieren Sie die Synchronisierungsprotokolle", - "Enable advanced failover logic": "Aktivieren Sie erweiterte Failover-Logik", - "Enable all episodes": "Alle Episoden aktivieren", - "Enable auto-merge after sync": "Aktivieren Sie die automatische Zusammenführung nach der Synchronisierung", - "Enable category series": "Kategorieserien aktivieren", - "Enable dummy EPG": "Dummy-EPG aktivieren", - "Enable group channels": "Gruppenkanäle aktivieren", - "Enable group channels now?": "Gruppenkanäle jetzt aktivieren?", - "Enable if your server uses SSL/TLS": "Aktivieren Sie diese Option, wenn Ihr Server SSL/TLS verwendet", - "Enable live broadcasting to stream content like a real TV channel. This is optional - you can enable it later.": "Aktivieren Sie Live-Übertragungen, um Inhalte wie bei einem echten Fernsehsender zu streamen. Dies ist optional – Sie können es später aktivieren.", - "Enable merging by default": "Aktivieren Sie die Zusammenführung standardmäßig", - "Enable name filtering": "Aktivieren Sie die Namensfilterung", - "Enable new Live channels": "Aktivieren Sie neue Live-Kanäle", - "Enable new VOD channels": "Aktivieren Sie neue VOD-Kanäle", - "Enable new series": "Neue Serie aktivieren", - "Enable now": "Jetzt aktivieren", - "Enable playlist fail conditions": "Aktivieren Sie Playlist-Fehlerbedingungen", - "Enable request delay": "Anforderungsverzögerung aktivieren", - "Enable selected": "Ausgewählte aktivieren", - "Enable silence detection": "Stilleerkennung aktivieren", - "Enable stream probing by default": "Aktivieren Sie standardmäßig die Stream-Prüfung", - "Enable stream probing for the selected channels. They will be included in stream probing jobs.": "Aktivieren Sie die Stream-Prüfung für die ausgewählten Kanäle. Sie werden in Stream-Probing-Jobs einbezogen.", - "Enable sync invalidation": "Synchronisierungsungültigmachung aktivieren", - "Enable the current category series now?": "Jetzt die aktuelle Kategoriereihe aktivieren?", - "Enable the selected categories now?": "Die ausgewählten Kategorien jetzt aktivieren?", - "Enable the selected category series now?": "Die ausgewählte Kategoriereihe jetzt aktivieren?", - "Enable the selected channel(s) now?": "Die ausgewählten Kanäle jetzt aktivieren?", - "Enable the selected group(s) channels now?": "Die ausgewählten Gruppenkanäle jetzt aktivieren?", - "Enable the selected group(s) now?": "Die ausgewählte(n) Gruppe(n) jetzt aktivieren?", - "Enable the series episodes now?": "Serienepisoden jetzt freischalten?", - "Enable this network for schedule generation": "Aktivieren Sie dieses Netzwerk für die Zeitplangenerierung", - "Enable this post process": "Aktivieren Sie diesen Postprozess", - "Enable to allow new stream requests to automatically stop the oldest stream when a playlist reaches its connection limit. Disabled by default.": "Aktivieren Sie diese Option, um neuen Stream-Anfragen zu erlauben, den ältesten Stream automatisch zu stoppen, wenn eine Playlist ihr Verbindungslimit erreicht. Standardmäßig deaktiviert.", - "Enable to import additional program images (NOTE: this can significantly increase import time)": "Aktivieren Sie diese Option, um zusätzliche Programmbilder zu importieren (HINWEIS: Dies kann die Importzeit erheblich verlängern)", - "Enabled": "Aktiviert", - "Enabled Channels": "Aktivierte Kanäle", - "Enabled Tools": "Aktivierte Tools", - "Enables audit log, custom rate limits, conversation history, and other management features for the AI Copilot assistant.": "Aktiviert Audit-Protokoll, benutzerdefinierte Ratenlimits, Konversationsverlauf und andere Verwaltungsfunktionen für den AI Copilot-Assistenten.", - "Encoder Preset": "Encoder-Voreinstellung", - "English, Spanish, French, etc.": "Englisch, Spanisch, Französisch usw.", - "Enhanced stability for live MPEG-TS streams with PVR clients like Kodi and HDHomeRun (only used when not using transcoding profiles).": "Verbesserte Stabilität für Live-MPEG-TS-Streams mit PVR-Clients wie Kodi und HDHomeRun (wird nur verwendet, wenn keine Transkodierungsprofile verwendet werden).", - "Enter SMTP From Address": "Geben Sie die SMTP-Absenderadresse ein", - "Enter SMTP Host": "Geben Sie den SMTP-Host ein", - "Enter SMTP Password": "Geben Sie das SMTP-Passwort ein", - "Enter SMTP Port": "Geben Sie den SMTP-Port ein", - "Enter SMTP Username": "Geben Sie den SMTP-Benutzernamen ein", - "Enter To Email Address": "Geben Sie die An-E-Mail-Adresse ein", - "Enter Token Name": "Geben Sie den Tokennamen ein", - "Enter a group title": "Geben Sie einen Gruppentitel ein", - "Enter a name for the new API token, and select the permissions it should have. Permissions can be changed later.": "Geben Sie einen Namen für das neue API-Token ein und wählen Sie die Berechtigungen aus, die es haben soll. Berechtigungen können später geändert werden.", - "Enter a number to define the sort order (e.g., 1, 2, 3). Lower numbers appear first.": "Geben Sie eine Zahl ein, um die Sortierreihenfolge festzulegen (z. B. 1, 2, 3). Niedrigere Zahlen erscheinen zuerst.", - "Enter a path on your server. This reads files from the server directly, not from your browser.": "Geben Sie einen Pfad auf Ihrem Server ein. Dadurch werden Dateien direkt vom Server gelesen, nicht von Ihrem Browser.", - "Enter movie name...": "Filmnamen eingeben...", - "Enter series name...": "Geben Sie den Seriennamen ein...", - "Enter the URL of the XMLTV guide data. If this is a local file, you can enter a full or relative path. If changing URL, the guide data will be re-imported. Use with caution as this could lead to data loss if the new guide differs from the old one.": "Geben Sie die URL der XMLTV-Guide-Daten ein. Wenn es sich um eine lokale Datei handelt, können Sie einen vollständigen oder relativen Pfad eingeben. Bei einer URL-Änderung werden die Reiseführerdaten erneut importiert. Seien Sie vorsichtig, da dies zu Datenverlust führen kann, wenn sich die neue Anleitung von der alten unterscheidet.", - "Enter the URL of the playlist file. If this is a local file, you can enter a full or relative path. If changing URL, the playlist will be re-imported. Use with caution as this could lead to data loss if the new playlist differs from the old one.": "Geben Sie die URL der Playlist-Datei ein. Wenn es sich um eine lokale Datei handelt, können Sie einen vollständigen oder relativen Pfad eingeben. Wenn Sie die URL ändern, wird die Wiedergabeliste erneut importiert. Seien Sie vorsichtig, da dies zu Datenverlust führen kann, wenn sich die neue Playlist von der alten unterscheidet.", - "Enter the archive path on your server. This reads the file directly, not from your browser.": "Geben Sie den Archivpfad auf Ihrem Server ein. Dadurch wird die Datei direkt gelesen, nicht von Ihrem Browser.", - "Enter the full url, using : format - without trailing slash (/).": "Geben Sie die vollständige URL im Format : ein – ohne abschließenden Schrägstrich (/).", - "Enter the name of the EPG. Internal use only.": "Geben Sie den Namen des EPG ein. Nur für den internen Gebrauch.", - "Enter the name of the alias. Internal use only.": "Geben Sie den Namen des Alias ​​ein. Nur für den internen Gebrauch.", - "Enter the name of the merged EPG. Internal use only.": "Geben Sie den Namen des zusammengeführten EPG ein. Nur für den internen Gebrauch.", - "Enter the name of the playlist. Internal use only.": "Geben Sie den Namen der Playlist ein. Nur für den internen Gebrauch.", - "Enter words, symbols or prefixes to remove. Press Enter after each pattern.": "Geben Sie Wörter, Symbole oder Präfixe ein, die entfernt werden sollen. Drücken Sie nach jedem Muster die Eingabetaste.", - "Enter your TMDB API Key (v3 auth)": "Geben Sie Ihren TMDB-API-Schlüssel ein (v3-Authentifizierung).", - "Entered your desired locale - if you\\'re not sure what to put here, look at your EPG source. If you see entries like \"CHANNEL.en\", then \"en\" would be a good choice if you prefer english. This is used when mapping the EPG to a playlist. If the EPG has multiple locales, this will be used as the preferred locale when a direct match is not found.": "Sie haben Ihr gewünschtes Gebietsschema eingegeben. Wenn Sie nicht sicher sind, was Sie hier eingeben sollen, sehen Sie sich Ihre EPG-Quelle an. Wenn Sie Einträge wie „CHANNEL.en“ sehen, wäre „en“ eine gute Wahl, wenn Sie Englisch bevorzugen. Dies wird beim Zuordnen des EPG zu einer Wiedergabeliste verwendet. Wenn der EPG über mehrere Gebietsschemas verfügt, wird dieses als bevorzugtes Gebietsschema verwendet, wenn keine direkte Übereinstimmung gefunden wird.", - "Ep #": "Ep #", - "Episode Details": "Episodendetails", - "Episode Image": "Episodenbild", - "Episode Metadata": "Episodenmetadaten", - "Episode Number": "Episodennummer", - "Episode Runtime": "Episodenlaufzeit", - "Episode Title": "Episodentitel", - "Episode preview placeholder": "Platzhalter für die Episodenvorschau", - "Episode runtime in minutes.": "Episodenlaufzeit in Minuten.", - "Episodes": "Episoden", - "Episodes added": "Episoden hinzugefügt", - "Episodes added successfully": "Episoden erfolgreich hinzugefügt", - "Error": "Fehler", - "Error Sending Test Email": "Fehler beim Senden der Test-E-Mail", - "Error stopping stream.": "Fehler beim Stoppen des Streams.", - "Error triggering failover.": "Fehler beim Auslösen des Failovers.", - "Errors": "Fehler", - "Etc/UTC": "Etc/UTC", - "Event Triggers": "Ereignisauslöser", - "Events that automatically run this plugin in the background.": "Ereignisse, die dieses Plugin automatisch im Hintergrund ausführen.", - "Exact Match Distance": "Exakte Übereinstimmungsdistanz", - "Exclude disabled groups from master selection": "Schließen Sie deaktivierte Gruppen von der Masterauswahl aus", - "Execution is now disabled until an administrator reviews and trusts this plugin again.": "Die Ausführung ist nun deaktiviert, bis ein Administrator dieses Plugin erneut überprüft und ihm vertraut.", - "Execution requires both admin trust and verified file integrity.": "Für die Ausführung sind sowohl Administratorvertrauen als auch eine überprüfte Dateiintegrität erforderlich.", - "Expiration (date & time)": "Ablauf (Datum und Uhrzeit)", - "Expiration Date": "Verfallsdatum", - "Expired logo cache cleared": "Abgelaufener Logo-Cache gelöscht", - "Expired logo cache files were removed successfully.": "Abgelaufene Logo-Cache-Dateien wurden erfolgreich entfernt.", - "Expiry Date": "Verfallsdatum", - "Export Channels": "Kanäle exportieren", - "Export channels to a CSV or XLSX file. NOTE: Only enabled channels will be exported.": "Exportieren Sie Kanäle in eine CSV- oder XLSX-Datei. HINWEIS: Es werden nur aktivierte Kanäle exportiert.", - "Export name": "Exportname", - "Export variables": "Variablen exportieren", - "FFmpeg Template": "FFmpeg-Vorlage", - "Failed": "Fehlgeschlagen", - "Failed playlists cleared": "Fehlgeschlagene Wiedergabelisten gelöscht", - "Failed to Start": "Start fehlgeschlagen", - "Failed to add lineup": "Senderliste konnte nicht hinzugefügt werden", - "Failed to apply TMDB selection.": "Die TMDB-Auswahl konnte nicht angewendet werden.", - "Failed to fetch TMDB data for this movie.": "Die TMDB-Daten für diesen Film konnten nicht abgerufen werden.", - "Failed to fetch TMDB data for this series.": "Das Abrufen der TMDB-Daten für diese Serie ist fehlgeschlagen.", - "Failed to fetch lineups": "Senderlisten konnten nicht abgerufen werden", - "Failed to refresh release logs": "Die Veröffentlichungsprotokolle konnten nicht aktualisiert werden", - "Failover": "Failover", - "Failover & Recovery": "Failover und Wiederherstellung", - "Failover Channel": "Failover-Kanal", - "Failover Channels": "Failover-Kanäle", - "Failover Playlist": "Failover-Playlist", - "Failovers": "Failover", - "Fetch & Install": "Abrufen und installieren", - "Fetch & Update": "Abrufen und aktualisieren", - "Fetch IDs for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "IDs für alle aktivierten Playlist-Serien abrufen? Wenn deaktiviert, wird es nur für Serien der ausgewählten Playlist abgerufen.", - "Fetch IDs now": "Jetzt IDs abrufen", - "Fetch Metadata": "Metadaten abrufen", - "Fetch Series Metadata": "Serienmetadaten abrufen", - "Fetch Series metadata for this playlist now? Only enabled Series will be included.": "Jetzt Serienmetadaten für diese Playlist abrufen? Es werden nur aktivierte Serien berücksichtigt.", - "Fetch TMDB IDs": "Rufen Sie TMDB-IDs ab", - "Fetch TMDB, TVDB, and IMDB IDs for this series from The Movie Database.": "Rufen Sie TMDB-, TVDB- und IMDB-IDs für diese Serie aus der Movie Database ab.", - "Fetch TMDB/TVDB IDs": "Rufen Sie TMDB/TVDB-IDs ab", - "Fetch VOD Metadata": "VOD-Metadaten abrufen", - "Fetch VOD metadata for this playlist now? Only enabled VOD channels will be included.": "Jetzt VOD-Metadaten für diese Playlist abrufen? Es werden nur aktivierte VOD-Kanäle einbezogen.", - "Fetch and process VOD metadata for the group channels.": "VOD-Metadaten für die Gruppenkanäle abrufen und verarbeiten.", - "Fetch and process VOD metadata for the selected Playlist? Only enabled VOD channels will be processed.": "VOD-Metadaten für die ausgewählte Playlist abrufen und verarbeiten? Es werden nur aktivierte VOD-Kanäle verarbeitet.", - "Fetch and process VOD metadata for the selected channel.": "Rufen Sie VOD-Metadaten für den ausgewählten Kanal ab und verarbeiten Sie sie.", - "Fetch and process VOD metadata for the selected channels? Only enabled VOD channels will be processed.": "VOD-Metadaten für die ausgewählten Kanäle abrufen und verarbeiten? Es werden nur aktivierte VOD-Kanäle verarbeitet.", - "Fetch and process VOD metadata for the selected group channels.": "Rufen Sie VOD-Metadaten für die ausgewählten Gruppenkanäle ab und verarbeiten Sie sie.", - "Fetch by category": "Nach Kategorie abrufen", - "Fetch metadata": "Metadaten abrufen", - "Fetch metadata for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "Metadaten für alle aktivierten Playlist-Serien abrufen? Wenn deaktiviert, wird es nur für Serien der ausgewählten Playlist abgerufen.", - "Fetches episode metadata for enabled series after each sync. Required for stream file sync.": "Ruft Episodenmetadaten für aktivierte Serien nach jeder Synchronisierung ab. Erforderlich für die Stream-Dateisynchronisierung.", - "Fetching VOD metadata for channel": "Abrufen von VOD-Metadaten für den Kanal", - "Fetching VOD metadata for playlist": "Abrufen von VOD-Metadaten für die Wiedergabeliste", - "Fetching VOD metadata for selected group channels": "Abrufen von VOD-Metadaten für ausgewählte Gruppenkanäle", - "Field": "Feld", - "Field to check condition against.": "Feld, anhand dessen die Bedingung überprüft werden soll.", - "File": "Datei", - "File check complete": "Dateiprüfung abgeschlossen", - "File extensions to scan for (without dots)": "Dateierweiterungen, nach denen gesucht werden soll (ohne Punkte)", - "Filename Cleansing": "Dateinamenbereinigung", - "Filename metadata": "Dateinamen-Metadaten", - "Files": "Dateien", - "Files Changed": "Dateien geändert", - "Filter to a specific group within the playlist. Omit to show all groups.": "Filtern Sie nach einer bestimmten Gruppe innerhalb der Playlist. Lassen Sie es weg, um alle Gruppen anzuzeigen.", - "Filters": "Filter", - "Find & Replace": "Suchen und Ersetzen", - "Find & Replace Rules": "Regeln zum Suchen und Ersetzen", - "Find & Replace reset started": "Das Zurücksetzen von „Suchen und Ersetzen“ wurde gestartet", - "Find & Replace reset working in the background. You will be notified once the process is complete.": "Das Zurücksetzen von „Suchen und Ersetzen“ erfolgt im Hintergrund. Sobald der Vorgang abgeschlossen ist, werden Sie benachrichtigt.", - "Find & Replace started": "Suchen und Ersetzen wurde gestartet", - "Find & Replace working in the background. You will be notified once the process is complete.": "Suchen und Ersetzen läuft im Hintergrund. Sobald der Vorgang abgeschlossen ist, werden Sie benachrichtigt.", - "Finished": "Fertig", - "Focus run": "Fokuslauf", - "Force Sync Channels": "Synchronisierung der Kanäle erzwingen", - "Force complete re-merge": "Komplette Neuzusammenführung erzwingen", - "Force password change on next login": "Passwortänderung beim nächsten Login erzwingen", - "Format": "Format", - "Format applied to dates throughout the application (e.g. next sync, last synced).": "Format, das auf Datumsangaben in der gesamten Anwendung angewendet wird (z. B. nächste Synchronisierung, letzte Synchronisierung).", - "Found and loaded :count plugin(s).": ":count Plugin(s) gefunden und geladen.", - "Frame rate": "Bildrate", - "From the selected channels": "Von den ausgewählten Kanälen", - "Full cast information.": "Vollständige Besetzungsinformationen.", - "GET/POST variables": "GET/POST-Variablen", - "Gap Between Programmes": "Lücke zwischen Programmen", - "General": "Allgemein", - "General Settings": "Allgemeine Einstellungen", - "Generate": "Erzeugen", - "Generate Cache": "Cache generieren", - "Generate Default Profiles": "Generieren Sie Standardprofile", - "Generate EPG Cache now? This will create a cache for the EPG data.": "Jetzt EPG-Cache generieren? Dadurch wird ein Cache für die EPG-Daten erstellt.", - "Generate NFO files": "Generieren Sie NFO-Dateien", - "Generate Schedule": "Zeitplan erstellen", - "Generate Schedules": "Zeitpläne erstellen", - "Generate a new plugin scaffold with all the files you need to get started.": "Generieren Sie ein neues Plugin-Gerüst mit allen Dateien, die Sie für den Einstieg benötigen.", - "Generate only plugin.json and Plugin.php — skip README, CI workflow, scripts, and AI guidance files.": "Generieren Sie nur „plugin.json“ und „Plugin.php“ – überspringen Sie README, CI-Workflow, Skripte und KI-Anleitungsdateien.", - "Generates .strm files for enabled series after metadata fetch completes. Requires \"Fetch metadata\" to be enabled.": "Erstellt .strm-Dateien für aktivierte Serien, nachdem der Metadatenabruf abgeschlossen ist. Erfordert die Aktivierung von „Metadaten abrufen“.", - "Genre": "Genre", - "Genre Handling": "Umgang mit Genres", - "Genre of the content.": "Genre des Inhalts.", - "Get API Key": "Holen Sie sich den API-Schlüssel", - "Get Available Tools": "Erhalten Sie verfügbare Tools", - "Get from playlist status": "Vom Playlist-Status abrufen", - "GitHub": "GitHub", - "GitHub release staged": "GitHub-Veröffentlichung bereitgestellt", - "GitHub release staging failed": "Das GitHub-Release-Staging ist fehlgeschlagen", - "Give your network a name and optional branding.": "Geben Sie Ihrem Netzwerk einen Namen und optional ein Branding.", - "Global Settings": "Globale Einstellungen", - "Global Tools": "Globale Tools", - "Gracenote station ID": "Gracenote-Sender-ID", - "Group": "Gruppe", - "Group Assignment": "Gruppenzuweisung", - "Group Details": "Gruppendetails", - "Group Name": "Gruppenname", - "Group Priority Weights": "Gruppenprioritätsgewichte", - "Group Settings": "Gruppeneinstellungen", - "Group channels added to custom playlist": "Gruppenkanäle zur benutzerdefinierten Playlist hinzugefügt", - "Group channels disabled": "Gruppenkanäle deaktiviert", - "Group channels enabled": "Gruppenkanäle aktiviert", - "Group created": "Gruppe erstellt", - "Group name used in the M3U playlist. Defaults to \"Networks\" if left empty.": "Gruppenname, der in der M3U-Wiedergabeliste verwendet wird. Wenn leer, wird standardmäßig „Netzwerke“ verwendet.", - "Groups": "Gruppen", - "Groups and Streams to Import": "Zu importierende Gruppen und Streams", - "Groups only": "Nur Gruppen", - "Guide Refreshed": "Leitfaden aktualisiert", - "HDHR Base URL": "HDHR-Basis-URL", - "HDHR/Xtream API Streams": "HDHR/Xtream-API-Streams", - "HDHomeRun URL": "HDHomeRun-URL", - "HLS Playlist URL": "HLS-Playlist-URL", - "HLS provides better compatibility": "HLS bietet eine bessere Kompatibilität", - "HLS segment length (6s recommended)": "HLS-Segmentlänge (6 Sekunden empfohlen)", - "HTTP Headers (optional)": "HTTP-Header (optional)", - "HTTP Port": "HTTP-Port", - "HTTP response codes that should mark a playlist as temporarily unavailable. All channels from the affected playlist will be skipped during failover resolution.": "HTTP-Antwortcodes, die eine Playlist als vorübergehend nicht verfügbar markieren sollen. Alle Kanäle der betroffenen Playlist werden während der Failover-Auflösung übersprungen.", - "HTTP status codes": "HTTP-Statuscodes", - "HTTPS Port": "HTTPS-Port", - "Hardware Acceleration": "Hardwarebeschleunigung", - "Has TMDB/IMDB ID": "Hat eine TMDB/IMDB-ID", - "Has TMDB/TVDB/IMDB ID": "Hat eine TMDB/TVDB/IMDB-ID", - "Has metadata": "Hat Metadaten", - "Header": "Kopfzeile", - "Header name": "Headername", - "Header value": "Header-Wert", - "Headers": "Überschriften", - "Healthy": "Gesund", - "Help support this project by donating! Any amount is appreciated.": "Unterstützen Sie dieses Projekt mit Ihrer Spende! Jeder Betrag ist willkommen.", - "High-Risk Permissions": "Hochriskante Berechtigungen", - "Higher weight = more likely to appear when shuffling": "Höheres Gewicht = Wahrscheinlichkeit, dass es beim Mischen erscheint", - "Hint for proxy to enable hardware acceleration if available": "Hinweis für Proxy zur Aktivierung der Hardwarebeschleunigung, falls verfügbar", - "Hooks": "Hooks", - "Host / IP Address": "Host-/IP-Adresse", - "How content is ordered in the schedule. Manual lets you place items on a visual timeline.": "Wie Inhalte im Zeitplan angeordnet sind. Mit „Manuell“ können Sie Elemente auf einer visuellen Zeitleiste platzieren.", - "How long (in minutes) a playlist remains marked as invalid before being retried.": "Wie lange (in Minuten) eine Playlist als ungültig markiert bleibt, bevor sie erneut versucht wird.", - "How many days of programme schedule to generate in advance.": "Wie viele Tage Programmplan im Voraus erstellt werden sollen.", - "How often to run silence analysis. Each window buffers stream data and analyses it with ffmpeg. Default: 10 seconds.": "Wie oft soll die Stilleanalyse durchgeführt werden? Jedes Fenster puffert Stream-Daten und analysiert sie mit ffmpeg. Standard: 10 Sekunden.", - "How should the TMDB ID be used.": "Wie soll die TMDB-ID verwendet werden?", - "How the manual schedule repeats": "Wie sich der manuelle Zeitplan wiederholt", - "How the manual schedule repeats across the schedule window": "Wie sich der manuelle Zeitplan im gesamten Zeitplanfenster wiederholt", - "How to handle content with multiple genres": "Umgang mit Inhalten mit mehreren Genres", - "How you would like to ID your channels in the EPG.": "Wie Sie Ihre Kanäle im EPG kennzeichnen möchten.", - "I understand, clear now": "Ich verstehe, jetzt klar", - "I understand, reset now": "Ich verstehe, jetzt zurücksetzen", - "ID": "ID", - "IMDB ID": "IMDB-ID", - "ISO country code for the DVR guide (e.g. us, de, gb).": "ISO-Ländercode für den DVR-Leitfaden (z. B. us, de, gb).", - "ISO language code for the DVR guide (e.g. en, de, fr).": "ISO-Sprachcode für die DVR-Anleitung (z. B. en, de, fr).", - "Icon": "Symbol", - "Idle Streams": "Leerlauf-Streams", - "If enabled, all series in the selected category will be imported. Use with caution as this will make a lot of requests to your provider to fetch metadata and episodes. It is recomended to import only the series you want to watch. You can also enable the series option on your playlist under the \"Groups and Streams to Import\" to import all the base data for all available series.": "Wenn aktiviert, werden alle Serien in der ausgewählten Kategorie importiert. Seien Sie vorsichtig, da dadurch viele Anfragen an Ihren Anbieter gestellt werden, Metadaten und Episoden abzurufen. Es wird empfohlen, nur die Serien zu importieren, die Sie sehen möchten. Sie können auch die Serienoption in Ihrer Playlist unter „Zu importierende Gruppen und Streams“ aktivieren, um alle Basisdaten für alle verfügbaren Serien zu importieren.", - "If enabled, the User Agent will also be used for fetching playlist files. Otherwise, the default FFmpeg User Agent is used for playlists.": "Wenn aktiviert, wird der User Agent auch zum Abrufen von Playlist-Dateien verwendet. Andernfalls wird der standardmäßige FFmpeg-Benutzeragent für Wiedergabelisten verwendet.", - "If no channel number is set, output an automatically incrementing number.": "Wenn keine Kanalnummer festgelegt ist, wird eine automatisch hochzählende Nummer ausgegeben.", - "If set, channels from this playlist will be prioritized as master during merge. Leave empty to only merge within this playlist.": "Wenn diese Einstellung festgelegt ist, werden Kanäle aus dieser Playlist beim Zusammenführen als Master priorisiert. Leer lassen, um nur innerhalb dieser Playlist zusammenzuführen.", - "If set, this account will stop working at that exact time.": "Wenn dies festgelegt ist, funktioniert dieses Konto genau zu diesem Zeitpunkt nicht mehr.", - "If set, this alias credentials will stop working at that exact time.": "Wenn diese Alias-Anmeldeinformationen festgelegt sind, funktionieren sie genau zu diesem Zeitpunkt nicht mehr.", - "If sync will remove more than this number of channels, the sync will be canceled.": "Wenn durch die Synchronisierung mehr als diese Anzahl an Kanälen entfernt werden, wird die Synchronisierung abgebrochen.", - "If you have MediaFlow Proxy installed, you can use it to proxy your m3u editor playlist streams. When enabled, the app will auto-generate URLs for you to use via MediaFlow Proxy.": "Wenn Sie MediaFlow Proxy installiert haben, können Sie es als Proxy für Ihre M3U-Editor-Playlist-Streams verwenden. Wenn diese Option aktiviert ist, generiert die App automatisch URLs, die Sie über MediaFlow Proxy verwenden können.", - "If your provider supports EPG, you can import it automatically.": "Wenn Ihr Anbieter EPG unterstützt, können Sie es automatisch importieren.", - "Ignored file types": "Ignorierte Dateitypen", - "Image URL": "Bild-URL", - "Images only": "Nur Bilder", - "Img": "Bild", - "Implementation": "Durchführung", - "Import Metadata": "Metadaten importieren", - "Import All Series": "Alle Serien importieren", - "Import Channels": "Kanäle importieren", - "Import EPG": "EPG importieren", - "Import Movies": "Filme importieren", - "Import Series": "Serie importieren", - "Import Series Episodes & Metadata": "Importieren Sie Serienepisoden und Metadaten", - "Import Settings": "Einstellungen importieren", - "Import channels from a CSV or XLSX file.": "Importieren Sie Kanäle aus einer CSV- oder XLSX-Datei.", - "In-App Player Transcoding": "Transkodierung von In-App-Playern", - "Include Files": "Dateien einschließen", - "Include Metadata": "Metadaten einbeziehen", - "Include VOD": "VOD einschließen", - "Include VOD channels in the scrub.": "Beziehen Sie VOD-Kanäle in das Scrub ein.", - "Include VOD in M3U output": "Beziehen Sie VOD in die M3U-Ausgabe ein", - "Include lifecycle hook": "Fügen Sie einen Lifecycle-Hook hinzu", - "Include logos in proxy URL override": "Beziehen Sie Logos in die Proxy-URL-Überschreibung ein", - "Include series in M3U output": "Fügen Sie Serien in die M3U-Ausgabe ein", - "Includes VOD": "Beinhaltet VOD", - "Indicates the shift of the program schedule, use the values -2,-1,0,1,2,.. and so on.": "Zeigt die Verschiebung des Programmplans an. Verwenden Sie die Werte -2, -1,0,1,2 usw.", - "Info": "Info", - "Information about the last sync operation": "Informationen zum letzten Synchronisierungsvorgang", - "Input Stream Format": "Eingabe-Stream-Format", - "Install": "Installieren", - "Install And Trust": "Installieren und vertrauen", - "Install failed": "Die Installation ist fehlgeschlagen", - "Install latest release from GitHub": "Installieren Sie die neueste Version von GitHub", - "Installed": "Installiert", - "Installed Plugins": "Installierte Plugins", - "Installed plugins that passed validation, are trusted, and haven't been modified.": "Installierte Plugins, die die Validierung bestanden haben, vertrauenswürdig sind und nicht geändert wurden.", - "Installed plugins with a newer version available on GitHub.": "Installierte Plugins mit einer neueren Version, die auf GitHub verfügbar ist.", - "Installs": "Installiert", - "Integration EPG URL": "Integrations-EPG-URL", - "Integration Playlist URL": "URL der Integrations-Playlist", - "Integrations": "Integrationen", - "Integrity": "Integrität", - "Integrity is no longer verified. Re-run integrity verification and trust review before allowing this plugin to execute again.": "Die Integrität wird nicht mehr überprüft. Führen Sie die Integritätsüberprüfung und die Vertrauensüberprüfung erneut durch, bevor Sie die Ausführung dieses Plugins erneut zulassen.", - "Internal name for this authentication.": "Interner Name für diese Authentifizierung.", - "Invalid Time": "Ungültige Zeit", - "Invalid timeout (minutes)": "Ungültiges Timeout (Minuten)", - "Invocation": "Aufruf", - "Item Details": "Artikeldetails", - "Item Name": "Artikelname", - "Item is added": "Artikel wurde hinzugefügt", - "Item is removed": "Artikel wurde entfernt", - "Item type": "Artikeltyp", - "Items": "Artikel", - "Items per page (default: 15, max: 50)": "Elemente pro Seite (Standard: 15, max: 50)", - "JSON object containing key-value pairs for an update action.": "JSON-Objekt mit Schlüssel-Wert-Paaren für eine Aktualisierungsaktion.", - "Jellyfin": "Jellyfin", - "John Doe, Jane Smith": "John Doe, Jane Smith", - "Join us on Discord": "Tritt uns auf Discord bei", - "Keep cache permanently (disable expiry cleanup)": "Cache dauerhaft behalten (Ablaufbereinigung deaktivieren)", - "Kinopoisk Rating Count": "Anzahl der Kinopoisk-Bewertungen", - "Kinopoisk URL": "Kinopoisk-URL", - "Label": "Etikett", - "Language": "Sprache", - "Language Code": "Sprachcode", - "Last Channels Checked": "Zuletzt überprüfte Kanäle", - "Last Dead Links": "Letzte tote Links", - "Last Ran": "Letzter Lauf", - "Last Runtime": "Letzte Laufzeit", - "Last Sync Stats": "Letzte Synchronisierungsstatistiken", - "Last Synced": "Zuletzt synchronisiert", - "Last Watched": "Zuletzt gesehen", - "Last heartbeat": "Letzter Herzschlag", - "Last probe returned no data — the stream may have been unreachable.": "Die letzte Prüfung hat keine Daten zurückgegeben – der Stream war möglicherweise nicht erreichbar.", - "Last probed": "Zuletzt untersucht", - "Last ran": "Letzter Lauf", - "Last sync :date": "Letzte Synchronisierung :date", - "Last validation": "Letzte Validierung", - "Latest persisted log messages for this run.": "Neueste persistente Protokollmeldungen für diesen Lauf.", - "Latest version: :version": "Neueste Version: :version", - "Layout & Display Options": "Layout- und Anzeigeoptionen", - "Learn More": "Erfahren Sie mehr", - "Learn more about": "Erfahren Sie mehr über", - "Leave blank to keep the current password": "Lassen Sie das Feld leer, um das aktuelle Passwort beizubehalten", - "Leave blank to use the same provider as the primary account.": "Lassen Sie das Feld leer, um denselben Anbieter wie das primäre Konto zu verwenden.", - "Leave empty for direct stream proxying": "Für direktes Stream-Proxying leer lassen", - "Leave empty to disable .strm file generation for VOD. Priority: VOD > Group > Global.": "Lassen Sie das Feld leer, um die .strm-Dateigenerierung für VOD zu deaktivieren. Priorität: VOD > Gruppe > Global.", - "Leave empty to disable .strm file generation for series. Priority: Series > Category > Global.": "Lassen Sie das Feld leer, um die Generierung von .strm-Dateien für Serien zu deaktivieren. Priorität: Serie > Kategorie > Global.", - "Leave empty to remove": "Zum Entfernen leer lassen", - "Leave empty to remove custom poster URL and use placeholder fallback.": "Lassen Sie das Feld leer, um die benutzerdefinierte Poster-URL zu entfernen und Platzhalter-Fallback zu verwenden.", - "Leave empty to remove the custom logo and use provider/EPG logo.": "Lassen Sie das Feld leer, um das benutzerdefinierte Logo zu entfernen und das Anbieter-/EPG-Logo zu verwenden.", - "Leave empty to remove the logo.": "Lassen Sie das Feld leer, um das Logo zu entfernen.", - "Leave empty to use default value.": "Lassen Sie das Feld leer, um den Standardwert zu verwenden.", - "Leave empty to use provider URL.": "Lassen Sie das Feld leer, um die Anbieter-URL zu verwenden.", - "Leave empty to use provider display name.": "Lassen Sie das Feld leer, um den Anzeigenamen des Anbieters zu verwenden.", - "Leave empty to use provider icon.": "Lassen Sie das Feld leer, um das Anbietersymbol zu verwenden.", - "Leave empty to use provider logo.": "Lassen Sie das Feld leer, um das Anbieterlogo zu verwenden.", - "Leave empty to use provider name.": "Lassen Sie das Feld leer, um den Anbieternamen zu verwenden.", - "Leave empty to use the default.": "Lassen Sie das Feld leer, um die Standardeinstellung zu verwenden.", - "Level": "Ebene", - "Libraries": "Bibliotheken", - "Libraries & Scanning": "Bibliotheken und Scannen", - "Libraries Refreshed": "Bibliotheken aktualisiert", - "Libraries to Import": "Zu importierende Bibliotheken", - "Library Name": "Bibliotheksname", - "Library Selection": "Bibliotheksauswahl", - "Lifecycle": "Lebenszyklus", - "Lineup": "Senderliste", - "Lineup added successfully!": "Senderliste erfolgreich hinzugefügt!", - "Links": "Links", - "List Pages": "Seiten auflisten", - "List Resources": "Ressourcen auflisten", - "List Widgets": "Widgets auflisten", - "List of allowed domains (supports wildcards, e.g. *.example.com*). Press [tab] or [return] to add item. When set, playlist URLs must match one of these patterns.": "Liste der erlaubten Domänen (unterstützt Platzhalter, z. B. *.example.com*). Drücken Sie [Tab] oder [Return], um ein Element hinzuzufügen. Wenn die Playlist-URLs festgelegt sind, müssen sie einem dieser Muster entsprechen.", - "Live": "Live", - "Live Activity Feed": "Live-Aktivitäts-Feed", - "Live Channels": "Live-Kanäle", - "Live Streaming Profile": "Live-Streaming-Profil", - "Live Sync": "Live-Synchronisierung", - "Live TV": "Live-TV", - "Live channel processing": "Live-Kanalverarbeitung", - "Live groups to import": "Live-Gruppen zum Importieren", - "Live streaming (optional)": "Live-Streaming (optional)", - "Load Avg": "Ø Last", - "Load saved pattern": "Gespeichertes Muster laden", - "Local": "Lokal", - "Local File": "Lokale Datei", - "Local Media": "Lokale Medien", - "Location": "Standort", - "Location Override": "Standortüberschreibung", - "Lock clients to specific backend origins after redirects to prevent playback loops when load balancers bounce between origins. Disable if your provider doesn\\'t use load balancing.": "Sperren Sie Clients nach Umleitungen an bestimmte Backend-Ursprünge, um Wiedergabeschleifen zu verhindern, wenn Load Balancer zwischen Ursprüngen wechseln. Deaktivieren Sie diese Option, wenn Ihr Anbieter keinen Lastausgleich verwendet.", - "Log cleared": "Protokoll gelöscht", - "Login": "Login", - "Login as this user": "Melden Sie sich als dieser Benutzer an", - "Logo": "Logo", - "Logo Cache": "Logo-Cache", - "Logo Override": "Logo-Überschreibung", - "Logo URL": "Logo-URL", - "Logo cache cleared": "Logo-Cache geleert", - "Logo image": "Logobild", - "Logo override URL": "Logo-Überschreibungs-URL", - "Logo override updated": "Logo-Überschreibung aktualisiert", - "Logo placeholder": "Logo-Platzhalter", - "Logo repository refreshed": "Logo-Repository aktualisiert", - "Logo updated": "Logo aktualisiert", - "Loop Content": "Schleifeninhalt", - "Lower = tried first": "Unten = zuerst versucht", - "M3U": "M3U", - "M3U Playlist URL": "M3U-Playlist-URL", - "M3U Proxy Stream Monitor": "M3U-Proxy-Stream-Monitor", - "M3U URL": "M3U-URL", - "M3U playlist containing all your Networks as live channels": "M3U-Playlist mit allen Ihren Netzwerken als Live-Kanäle", - "MPAA Rating": "MPAA-Rating", - "MPAA rating classification.": "MPAA-Bewertungsklassifizierung.", - "Main actors in the content.": "Hauptakteure des Inhalts.", - "Make log files viewable": "Machen Sie Protokolldateien sichtbar", - "Manage": "Verwalten", - "Manage API Tokens": "API-Tokens verwalten", - "Manage Assets": "Assets verwalten", - "Manage Backups": "Backups verwalten", - "Manage Plex libraries and trigger scans.": "Verwalten Sie Plex-Bibliotheken und lösen Sie Scans aus.", - "Manage Profiles": "Profile verwalten", - "Manage Stream File Settings": "Stream-Dateieinstellungen verwalten", - "Manage VOD groups.": "Verwalten Sie VOD-Gruppen.", - "Manage cached logos and uploaded media assets. Placeholder images can be updated in Settings > Assets.": "Verwalten Sie zwischengespeicherte Logos und hochgeladene Medienressourcen. Platzhalterbilder können unter Einstellungen > Assets aktualisiert werden.", - "Manage installed plugins, review new installs, and check security status from one place.": "Verwalten Sie installierte Plugins, überprüfen Sie neue Installationen und überprüfen Sie den Sicherheitsstatus von einem Ort aus.", - "Manage live groups.": "Live-Gruppen verwalten.", - "Manage logo cache behavior and storage used by logo proxy URLs.": "Verwalten Sie das Logo-Cache-Verhalten und den von Logo-Proxy-URLs verwendeten Speicher.", - "Manage playlist links and URL options.": "Verwalten Sie Playlist-Links und URL-Optionen.", - "Manage series categories. Only enabled series will be automatically updated on Playlist sync, this includes fetching episodes and metadata. You can also manually sync series to update episodes and metadata.": "Serienkategorien verwalten. Nur aktivierte Serien werden bei der Playlist-Synchronisierung automatisch aktualisiert. Dazu gehört auch das Abrufen von Episoden und Metadaten. Sie können Serien auch manuell synchronisieren, um Episoden und Metadaten zu aktualisieren.", - "Manage users that can access and use the application. Each user will have their own playlists, channels, series, and other resources. Some features may be restricted based on user roles (such as global settings).": "Verwalten Sie Benutzer, die auf die Anwendung zugreifen und sie verwenden können. Jeder Benutzer verfügt über eigene Wiedergabelisten, Kanäle, Serien und andere Ressourcen. Einige Funktionen können aufgrund von Benutzerrollen eingeschränkt sein (z. B. globale Einstellungen).", - "Manage your API tokens. Tokens allow you to authenticate API requests for certain API actions.": "Verwalten Sie Ihre API-Tokens. Mit Tokens können Sie API-Anfragen für bestimmte API-Aktionen authentifizieren.", - "Manage your Plex server directly from m3u-editor — register DVR tuners, monitor sessions, and control libraries.": "Verwalten Sie Ihren Plex-Server direkt über m3u-editor – registrieren Sie DVR-Tuner, überwachen Sie Sitzungen und steuern Sie Bibliotheken.", - "Manages M3U playlists, including live streams, VOD, and series. Supports Xtream API.": "Verwaltet M3U-Wiedergabelisten, einschließlich Live-Streams, VOD und Serien. Unterstützt die Xtream-API.", - "Manual": "Handbuch", - "Manual TMDB Search": "Manuelle TMDB-Suche", - "Manual actions available from the page header.": "Manuelle Aktionen sind im Seitenkopf verfügbar.", - "Manual actions, hook-triggered automation, and scheduled jobs. Open a run to inspect payload, metrics, and live activity.": "Manuelle Aktionen, durch Hooks ausgelöste Automatisierung und geplante Jobs. Öffnen Sie einen Lauf, um Nutzlast, Metriken und Live-Aktivitäten zu überprüfen.", - "Manually restart this EPG mapping? This will restart the existing mapping process.": "Diese EPG-Zuordnung manuell neu starten? Dadurch wird der bestehende Mapping-Prozess neu gestartet.", - "Manually trigger this EPG mapping to run again. This will not modify the \"Recurring\" setting.": "Lösen Sie die erneute Ausführung dieser EPG-Zuordnung manuell aus. Dadurch wird die Einstellung „Wiederkehrend“ nicht geändert.", - "Manually trigger this scrubber to run.": "Lösen Sie die Ausführung dieses Scrubbers manuell aus.", - "Map EPG to Playlist": "Ordnen Sie EPG der Playlist zu", - "Map EPG to selected": "EPG der Auswahl zuordnen", - "Map now": "Jetzt zuordnen", - "Map the selected EPG to the selected Playlist channels.": "Ordnen Sie den ausgewählten EPG den ausgewählten Playlist-Kanälen zu.", - "Map the selected EPG to the selected channel(s).": "Ordnen Sie den ausgewählten EPG den ausgewählten Kanälen zu.", - "Mapping": "Zuordnung", - "Mapping Enabled": "Zuordnung aktiviert", - "Mapping started, you will be notified when the process is complete.": "Die Zuordnung wurde gestartet. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.", - "Mark playlists as temporarily unavailable when specific HTTP errors are encountered during failover.": "Markieren Sie Wiedergabelisten als vorübergehend nicht verfügbar, wenn während des Failovers bestimmte HTTP-Fehler auftreten.", - "Match Confidence Threshold (%)": "Übereinstimmungskonfidenzschwellenwert (%)", - "Matching Thresholds": "Passende Schwellenwerte", - "Max Backups": "Max. Backups", - "Max Concurrent Players": "Max. gleichzeitige Player", - "Max Streams": "Max. Streams", - "Max concurrent requests": "Maximale Anzahl gleichzeitiger Anfragen", - "Max width of the page content": "Maximale Breite des Seiteninhalts", - "Maximum Fuzzy Distance": "Maximale Fuzzy-Distanz", - "Maximum Levenshtein distance allowed for fuzzy matching. Lower = stricter matching. Default: 25": "Maximal zulässige Levenshtein-Distanz für Fuzzy-Matching. Niedriger = strengere Übereinstimmung. Standard: 25", - "Maximum TMDB API requests per second. TMDB allows ~40 req/s for free accounts.": "Maximale TMDB-API-Anfragen pro Sekunde. TMDB erlaubt ~40 Anforderungen/s für kostenlose Konten.", - "Maximum distance for exact matches. Lower = stricter exact matching. Default: 8": "Maximale Entfernung für exakte Übereinstimmungen. Niedriger = strengere exakte Übereinstimmung. Standard: 8", - "Maximum number of players that can be open at once.": "Maximale Anzahl an Playern, die gleichzeitig geöffnet sein können.", - "Maximum number of simultaneous requests allowed. Also controls the level of parallelism for batch operations such as stream probing and channel scrubbing.": "Maximale Anzahl gleichzeitiger Anfragen. Steuert auch den Parallelisierungsgrad für Stapeloperationen wie Stream-Prüfung und Kanalbereinigung.", - "Maximum number of simultaneous requests to the provider.": "Maximale Anzahl gleichzeitiger Anfragen an den Anbieter.", - "Maximum proxy streams allowed. Applies regardless of Provider Profiles — set to 0 for unlimited. When Provider Profiles are enabled, this is the authoritative proxy-level limit while provider limits control routing.": "Maximal zulässige Proxy-Streams. Gilt unabhängig von den Anbieterprofilen – auf 0 für unbegrenzt gesetzt. Wenn Anbieterprofile aktiviert sind, ist dies der maßgebliche Grenzwert auf Proxy-Ebene, während der Anbieter das Kontrollrouting einschränkt.", - "Maximum results to return (default: 10, max: 50)": "Maximal zurückzugebende Ergebnisse (Standard: 10, max: 50)", - "Media Library Paths": "Pfade der Medienbibliothek", - "Media Server": "Medienserver", - "Media Server Library Refresh": "Aktualisierung der Medienserverbibliothek", - "Media Servers": "Medienserver", - "Media server status has been reset.": "Der Status des Medienservers wurde zurückgesetzt.", - "Media server status reset": "Status des Medienservers zurückgesetzt", - "MediaFlow Proxy": "MediaFlow-Proxy", - "Memory": "Erinnerung", - "Memory Usage": "Speichernutzung", - "Merge Enabled": "Zusammenführen aktiviert", - "Merge behavior": "Verhalten zusammenführen", - "Merge disabled for selected channels": "Zusammenführung für ausgewählte Kanäle deaktiviert", - "Merge only new channels": "Nur neue Kanäle zusammenführen", - "Merge re-enabled for selected channels": "Zusammenführung für ausgewählte Kanäle wieder aktiviert", - "Merge source configuration": "Quellkonfiguration zusammenführen", - "Merged EPG": "Zusammengeführter EPG", - "Merged EPG is being processed in the background. You will be notified on completion.": "Der zusammengeführte EPG wird im Hintergrund verarbeitet. Nach Abschluss werden Sie benachrichtigt.", - "Merged EPG is processing": "Der zusammengeführte EPG wird verarbeitet", - "Merged EPGs": "Zusammengeführte EPGs", - "Merged Playlist": "Zusammengeführte Playlist", - "Merged Playlists": "Zusammengeführte Playlists", - "Merging channels in the background for this group only. You will be notified once the process is complete.": "Kanäle werden im Hintergrund nur für diese Gruppe zusammengeführt. Sobald der Vorgang abgeschlossen ist, werden Sie benachrichtigt.", - "Merging channels in the background. You will be notified once the process is complete.": "Kanäle im Hintergrund zusammenführen. Sobald der Vorgang abgeschlossen ist, werden Sie benachrichtigt.", - "Message": "Nachricht", - "Metadata": "Metadaten", - "Metadata Source": "Metadatenquelle", - "Method": "Verfahren", - "Minimum Similarity (%)": "Mindestähnlichkeit (%)", - "Minimum continuous silence within a check window to count as a silent check. Default: 3 seconds.": "Mindestdauer der Stille innerhalb eines Prüffensters, um als stille Prüfung zu gelten. Standard: 3 Sekunden.", - "Minimum similarity percentage required for a match (0-100). Higher = stricter matching. Default: 70%": "Mindestprozentsatz für die Ähnlichkeit, der für eine Übereinstimmung erforderlich ist (0–100). Höher = strengere Übereinstimmung. Standard: 70 %", - "Minimum title similarity percentage (50-100) required to accept a match. Higher values = stricter matching.": "Mindestprozentsatz der Titelähnlichkeit (50–100), der erforderlich ist, um eine Übereinstimmung zu akzeptieren. Höhere Werte = strengere Übereinstimmung.", - "Missing Credentials": "Fehlende Anmeldeinformationen", - "Missing Files": "Fehlende Dateien", - "Missing SMTP Fields": "Fehlende SMTP-Felder", - "Missing TMDB/IMDB ID": "Fehlende TMDB/IMDB-ID", - "Missing TMDB/TVDB/IMDB ID": "Fehlende TMDB/TVDB/IMDB-ID", - "Missing URL": "Fehlende URL", - "Missing checksum": "Fehlende Prüfsumme", - "Missing credentials": "Fehlende Anmeldeinformationen", - "Missing information": "Fehlende Informationen", - "Mode": "Modus", - "Model": "Modell", - "Modified": "Geändert", - "Monitoring grace period (seconds)": "Überwachungsfrist (Sekunden)", - "Move Channels to Group": "Verschieben Sie Kanäle in eine Gruppe", - "Move Series to Category": "Serie in Kategorie verschieben", - "Move now": "Jetzt verschieben", - "Move the category series to another category.": "Verschieben Sie die Kategoriereihe in eine andere Kategorie.", - "Move the group channels to the another group.": "Verschieben Sie die Gruppenkanäle in eine andere Gruppe.", - "Move the selected VOD(s) to the chosen group.": "Verschieben Sie die ausgewählten VOD(s) in die ausgewählte Gruppe.", - "Move the selected channel(s) to the chosen group.": "Verschieben Sie die ausgewählten Kanäle in die ausgewählte Gruppe.", - "Move the series to another category.": "Die Serie in eine andere Kategorie verschieben.", - "Move to Group": "In die Gruppe verschieben", - "Movie": "Film", - "Movie Image": "Filmbild", - "Movie Sync": "Filmsynchronisierung", - "Movie Title": "Filmtitel", - "Movies": "Filme", - "Movies added": "Filme hinzugefügt", - "Movies added successfully": "Filme erfolgreich hinzugefügt", - "My Awesome Plugin": "Mein tolles Plugin", - "NFO File Generation": "NFO-Dateigenerierung", - "NOTE: Custom VOD need to be associated with a Playlist or Custom Playlist.": "HINWEIS: Benutzerdefiniertes VOD muss mit einer Playlist oder benutzerdefinierten Playlist verknüpft sein.", - "NOTE: Custom channels need to be associated with a Playlist or Custom Playlist.": "HINWEIS: Benutzerdefinierte Kanäle müssen einer Playlist oder benutzerdefinierten Playlist zugeordnet werden.", - "NOTE: If the list is empty, sync the playlist and check again once complete.": "HINWEIS: Wenn die Liste leer ist, synchronisieren Sie die Wiedergabeliste und überprüfen Sie sie erneut, sobald sie fertig ist.", - "NOTE: Only properly formatted backups will be accepted. If the backup is not valid, you will receive an error when attempting to restore.": "HINWEIS: Es werden nur ordnungsgemäß formatierte Backups akzeptiert. Wenn die Sicherung ungültig ist, erhalten Sie beim Wiederherstellungsversuch eine Fehlermeldung.", - "NOTE: Only the database will be restored, which will overwrite any existing data with the backup data. Files will not be automatically restored, you will need to manually re-upload them where needed.": "HINWEIS: Es wird nur die Datenbank wiederhergestellt, wodurch alle vorhandenen Daten mit den Sicherungsdaten überschrieben werden. Dateien werden nicht automatisch wiederhergestellt. Sie müssen sie bei Bedarf manuell erneut hochladen.", - "NOTE: Playlist channel output order is based on: 1 Sort order, 2 Channel no. and 3 Channel title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "HINWEIS: Die Ausgabereihenfolge der Playlist-Kanäle basiert auf: 1 Sortierreihenfolge, 2 Kanal-Nr. und 3 Kanaltitel – in dieser Reihenfolge. Sie können Ihre Playlist-Ausgabe auch so bearbeiten, dass sie automatisch sortiert wird, wodurch die Sortierreihenfolge basierend auf der Playlist-Reihenfolge definiert wird.", - "NOTE: Playlist series can be managed in the Series section. You will need to enabled the VOD channels and Series you wish to import metadata for as it will only be imported for enabled channels and series.": "HINWEIS: Playlist-Serien können im Abschnitt „Serien“ verwaltet werden. Sie müssen die VOD-Kanäle und Serien aktivieren, für die Sie Metadaten importieren möchten, da diese nur für aktivierte Kanäle und Serien importiert werden.", - "NOTE: Restoring a backup will overwrite any existing data. Your manually uploaded EPG and Playlist files will NOT be restored. You will need to download the backup and manually re-upload where needed.": "HINWEIS: Durch das Wiederherstellen einer Sicherung werden alle vorhandenen Daten überschrieben. Ihre manuell hochgeladenen EPG- und Playlist-Dateien werden NICHT wiederhergestellt. Sie müssen das Backup herunterladen und bei Bedarf manuell erneut hochladen.", - "NOTE: VOD output order is based on: 1 Sort order, 2 Channel no. and 3 Title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "HINWEIS: Die VOD-Ausgabereihenfolge basiert auf: 1 Sortierreihenfolge, 2 Kanalnummer. und 3 Titel – in dieser Reihenfolge. Sie können Ihre Playlist-Ausgabe auch so bearbeiten, dass sie automatisch sortiert wird, wodurch die Sortierreihenfolge basierend auf der Playlist-Reihenfolge definiert wird.", - "NOTE: When enabled, proxy mode is required for accurate connection tracking.": "HINWEIS: Wenn diese Option aktiviert ist, ist der Proxy-Modus für eine genaue Verbindungsverfolgung erforderlich.", - "NOTE: When restoring a backup, only the database will be restored, files will not be automatically restored. You will need to manually re-upload them where needed.": "HINWEIS: Beim Wiederherstellen einer Sicherung wird nur die Datenbank wiederhergestellt, Dateien werden nicht automatisch wiederhergestellt. Sie müssen sie bei Bedarf manuell erneut hochladen.", - "NOTE: You will need to re-sync your playlist, or wait for the next scheduled sync, if changing this. This will overwrite any existing channel sort order customization for this playlist.": "HINWEIS: Wenn Sie dies ändern, müssen Sie Ihre Playlist erneut synchronisieren oder auf die nächste geplante Synchronisierung warten. Dadurch werden alle vorhandenen Anpassungen der Kanalsortierung für diese Playlist überschrieben.", - "Name": "Name", - "Name Filtering": "Namensfilterung", - "Name and branding": "Name und Branding", - "Name and describe your plugin": "Benennen und beschreiben Sie Ihr Plugin", - "Name of the HTTP header.": "Name des HTTP-Headers.", - "Name of the variable to send as GET/POST variable to your webhook URL.": "Name der Variablen, die als GET/POST-Variable an Ihre Webhook-URL gesendet werden soll.", - "Navigation position": "Navigationsposition", - "Network": "Netzwerk", - "Network Details": "Netzwerkdetails", - "Network Info": "Netzwerkinformationen", - "Network Name": "Netzwerkname", - "Networks": "Netzwerke", - "Networks (Pseudo-Live Channels)": "Netzwerke (Pseudo-Live-Kanäle)", - "Networks EPG URL": "Netzwerk-EPG-URL", - "Networks Playlist URL": "URL der Netzwerk-Playlist", - "Networks are pseudo-TV channels built from media server content (Jellyfin/Emby/etc.) You can create M3U playlists and stream them to your IPTV apps and devices. A media server is required to use networks.": "Netzwerke sind Pseudo-TV-Kanäle, die aus Medienserverinhalten (Jellyfin/Emby usw.) erstellt werden. Sie können M3U-Wiedergabelisten erstellen und diese auf Ihre IPTV-Apps und -Geräte streamen. Für die Nutzung von Netzwerken ist ein Medienserver erforderlich.", - "Networks pull VOD content from the linked media server.": "Netzwerke beziehen VOD-Inhalte vom verknüpften Medienserver.", - "Networks pull their content from a media server integration. Select which media server to use.": "Netzwerke beziehen ihre Inhalte aus einer Medienserver-Integration. Wählen Sie den zu verwendenden Medienserver aus.", - "Never": "Niemals", - "New Custom Channel": "Neuer benutzerdefinierter Kanal", - "New Custom VOD": "Neues benutzerdefiniertes VOD", - "New Group Name": "Neuer Gruppenname", - "New Profile": "Neues Profil", - "New Setting": "Neue Einstellung", - "Newly Mapped": "Neu zugeordnet", - "Next Sync": "Nächste Synchronisierung", - "No": "Nein", - "No Duplicates Found": "Keine Duplikate gefunden", - "No EPG cache files found.": "Keine EPG-Cache-Dateien gefunden.", - "No Libraries Found": "Keine Bibliotheken gefunden", - "No Media Found": "Keine Medien gefunden", - "No Paths Configured": "Keine Pfade konfiguriert", - "No VOD channels found": "Keine VOD-Kanäle gefunden", - "No actions were declared for this plugin.": "Für dieses Plugin wurden keine Aktionen deklariert.", - "No aggregate totals were returned by this run.": "Bei diesem Lauf wurden keine Gesamtsummen zurückgegeben.", - "No checksum was found for this release. Please provide the SHA-256 hash to verify the download.": "Für diese Version wurde keine Prüfsumme gefunden. Bitte geben Sie den SHA-256-Hash an, um den Download zu überprüfen.", - "No description available": "Keine Beschreibung verfügbar", - "No description provided.": "Keine Beschreibung angegeben.", - "No duplicate series were found for this media server.": "Für diesen Medienserver wurden keine doppelten Serien gefunden.", - "No enabled VOD channels found in the selected playlist.": "In der ausgewählten Playlist wurden keine aktivierten VOD-Kanäle gefunden.", - "No enabled series found matching the criteria.": "Es wurden keine aktivierten Serien gefunden, die den Kriterien entsprechen.", - "No heartbeat yet": "Noch kein Herzschlag", - "No live activity yet": "Noch keine Live-Aktivität", - "No log messages yet": "Noch keine Protokollmeldungen", - "No movie or TV show libraries were found on the server.": "Auf dem Server wurden keine Film- oder Fernsehsendungsbibliotheken gefunden.", - "No plugin installs yet.": "Noch keine Plugin-Installationen.", - "No plugin record loaded.": "Kein Plugin-Datensatz geladen.", - "No plugin runs recorded yet.": "Es wurden noch keine Plugin-Ausführungen aufgezeichnet.", - "No plugin runs recorded yet. Use the header actions to run the plugin once.": "Es wurden noch keine Plugin-Ausführungen aufgezeichnet. Verwenden Sie die Header-Aktionen, um das Plugin einmal auszuführen.", - "No plugins currently need attention.": "Derzeit benötigen keine Plugins Aufmerksamkeit.", - "No preference": "Keine Präferenz", - "No programmes to copy from this day": "Von diesem Tag an gibt es keine Programme zum Kopieren", - "No release URL or SHA-256 found. Ensure a release has been published with a companion .sha256 file.": "Keine Release-URL oder SHA-256 gefunden. Stellen Sie sicher, dass eine Version mit einer begleitenden .sha256-Datei veröffentlicht wurde.", - "No run history yet": "Noch kein Laufverlauf", - "No runs recorded yet. Trigger a scan or apply action from the header to create the first job.": "Es wurden noch keine Läufe aufgezeichnet. Lösen Sie einen Scan aus oder wenden Sie eine Aktion aus dem Header an, um den ersten Job zu erstellen.", - "No runs yet": "Noch keine Läufe", - "No series found": "Keine Serie gefunden", - "No structured context was attached to this activity line.": "Dieser Aktivitätszeile wurde kein strukturierter Kontext zugeordnet.", - "No summary has been written yet.": "Es wurde noch keine Zusammenfassung verfasst.", - "No syncs yet": "Noch keine Synchronisierungen", - "No template programmes found in the first week": "In der ersten Woche wurden keine Vorlagenprogramme gefunden", - "No trailer ID set.": "Keine Trailer-ID festgelegt.", - "No video files were found in the configured paths.": "In den konfigurierten Pfaden wurden keine Videodateien gefunden.", - "None": "Keiner", - "None declared": "Keiner erklärt", - "Not Configured": "Nicht konfiguriert", - "Not authorized to manage this stream.": "Nicht berechtigt, diesen Stream zu verwalten.", - "Not set": "Nicht festgelegt", - "Not started": "Nicht gestartet", - "Notification Message": "Benachrichtigungsnachricht", - "Notification Subject": "Betreff der Benachrichtigung", - "Notification Type": "Benachrichtigungstyp", - "Notifications Sent": "Benachrichtigungen gesendet", - "Notify All Users": "Alle Benutzer benachrichtigen", - "Notify Myself": "Benachrichtigen Sie mich", - "Notify User": "Benutzer benachrichtigen", - "Notify Users": "Benutzer benachrichtigen", - "Number of channels that were already mapped to an EPG entry.": "Anzahl der Kanäle, die bereits einem EPG-Eintrag zugeordnet wurden.", - "Number of channels that were searched for a matching EPG entry in this mapping. If the \"Override\" option is enabled, this will also include channels that were previously mapped. If the \"Override\" option is disabled, this will only include channels that were not previously mapped.": "Anzahl der Kanäle, die in dieser Zuordnung nach einem passenden EPG-Eintrag durchsucht wurden. Wenn die Option „Überschreiben“ aktiviert ist, werden auch zuvor zugeordnete Kanäle berücksichtigt. Wenn die Option „Überschreiben“ deaktiviert ist, werden nur Kanäle berücksichtigt, die zuvor nicht zugeordnet wurden.", - "Number of channels that were successfully matched to an EPG entry in this mapping. When \"Override\" is disabled, it is normal for this count to be 0 on subsequent syncs.": "Anzahl der Kanäle, die in dieser Zuordnung erfolgreich einem EPG-Eintrag zugeordnet wurden. Wenn „Override“ deaktiviert ist, ist es normal, dass dieser Zähler bei nachfolgenden Synchronisierungen 0 ist.", - "Number of channels with dead links found in the last run.": "Anzahl der Kanäle mit toten Links, die im letzten Lauf gefunden wurden.", - "Number of consecutive silent checks required before triggering failover. Prevents failover on brief silent moments. Default: 3.": "Anzahl der aufeinanderfolgenden stillen Prüfungen, die erforderlich sind, bevor ein Failover ausgelöst wird. Verhindert ein Failover in kurzen stillen Momenten. Standard: 3.", - "Number of days to import from SchedulesDirect (1-14)": "Anzahl der Tage, die aus SchedulesDirect importiert werden sollen (1–14)", - "Number of ratings on Kinopoisk.": "Anzahl der Bewertungen auf Kinopoisk.", - "Number of streams available for HDHR and Xtream API service (if using).": "Anzahl der für den HDHR- und Xtream-API-Dienst verfügbaren Streams (falls verwendet).", - "Number of streams available for this playlist (only applies to custom channels assigned to this Custom Playlist).": "Anzahl der für diese Playlist verfügbaren Streams (gilt nur für benutzerdefinierte Kanäle, die dieser benutzerdefinierten Playlist zugewiesen sind).", - "Number of streams available for this provider. If set to a value other than 0, will prevent any streams from starting if the number of active streams exceeds this value.": "Anzahl der für diesen Anbieter verfügbaren Streams. Bei einem anderen Wert als 0 wird verhindert, dass Streams gestartet werden, wenn die Anzahl der aktiven Streams diesen Wert überschreitet.", - "Offline": "Offline", - "Online": "Online", - "Only check this for plugins you're actively developing locally. Don't use for production installs.": "Überprüfen Sie dies nur für Plugins, die Sie aktiv lokal entwickeln. Nicht für Produktionsinstallationen verwenden.", - "Only check this for plugins you\\'re actively developing locally. Don\\'t use for production installs.": "Überprüfen Sie dies nur für Plugins, die Sie aktiv lokal entwickeln. Nicht für Produktionsinstallationen verwenden.", - "Only disable this if you are having issues.": "Deaktivieren Sie dies nur, wenn Sie Probleme haben.", - "Only enabled series will be automatically updated on Playlist sync, this includes fetching episodes and metadata. You can also manually sync series to update episodes and metadata.": "Nur aktivierte Serien werden bei der Playlist-Synchronisierung automatisch aktualisiert. Dazu gehört auch das Abrufen von Episoden und Metadaten. Sie können Serien auch manuell synchronisieren, um Episoden und Metadaten zu aktualisieren.", - "Only expired logo cache entries (those older than 30 days). If permanent cache is enabled, nothing will be removed.": "Nur abgelaufene Logo-Cache-Einträge (die älter als 30 Tage sind). Wenn der permanente Cache aktiviert ist, wird nichts entfernt.", - "Only export enabled channels?": "Nur aktivierte Kanäle exportieren?", - "Only unassigned auths are available. Each auth can only be assigned to one playlist at a time.": "Es sind nur nicht zugewiesene Authentifizierungen verfügbar. Jede Authentifizierung kann jeweils nur einer Playlist zugewiesen werden.", - "Open": "Offen", - "Open Discord": "Öffne Discord", - "Open action menu": "Aktionsmenü öffnen", - "Open bulk action menu": "Öffnen Sie das Massenaktionsmenü", - "Open run": "Offener Lauf", - "Open the current run and watch the activity stream. If the run stalls, inspect the payload to confirm the target playlist and EPG pair.": "Öffnen Sie den aktuellen Lauf und sehen Sie sich den Aktivitätsstream an. Wenn der Lauf ins Stocken gerät, überprüfen Sie die Nutzlast, um das Ziel-Playlist- und EPG-Paar zu bestätigen.", - "Optional JSON array of columns to return for a select query. Defaults to [\"*\"].": "Optionales JSON-Array der zurückzugebenden Spalten für eine Auswahlabfrage. Standardmäßig [\"*\"].", - "Optional channel number for EPG": "Optionale Kanalnummer für EPG", - "Optional channel number for EPG ordering": "Optionale Kanalnummer zur EPG-Bestellung", - "Optional description for your reference.": "Optionale Beschreibung als Referenz.", - "Optional description of this profile": "Optionale Beschreibung dieses Profils", - "Optional description of what this profile does": "Optionale Beschreibung der Funktion dieses Profils", - "Optional limit for select queries. Defaults to 50.": "Optionales Limit für Auswahlabfragen. Standardmäßig 50.", - "Optional. The name of a specific table to get the schema for. If omitted, returns all accessible tables.": "Optional. Der Name einer bestimmten Tabelle, für die das Schema abgerufen werden soll. Wenn weggelassen, werden alle zugänglichen Tabellen zurückgegeben.", - "Optional: Set credentials to access this alias via Xtream API. Must be unique across all aliases and playlist auths.": "Optional: Legen Sie Anmeldeinformationen fest, um über die Xtream-API auf diesen Alias ​​zuzugreifen. Muss für alle Aliase und Playlist-Authentifizierungen eindeutig sein.", - "Options": "Optionen", - "Original Movie Title": "Originaler Filmtitel", - "Original Title": "Originaltitel", - "Output": "Ausgabe", - "Output Format": "Ausgabeformat", - "Output Playlist": "Ausgabe-Playlist", - "Output WAN address in menu": "WAN-Adresse im Menü ausgeben", - "Output processing options": "Ausgabeverarbeitungsoptionen", - "Override URL": "URL überschreiben", - "Override app-wide placeholder images for logos, episode previews, and VOD/Series poster fallbacks.": "Überschreiben Sie App-weite Platzhalterbilder für Logos, Episodenvorschauen und VOD-/Serienposter-Fallbacks.", - "Override global .strm file generation settings for this series.": "Überschreiben Sie die globalen Einstellungen für die .strm-Dateigenerierung für diese Serie.", - "Override the application timezone. Leave empty to use the server default (UTC). Takes effect for all date/time output throughout the app.": "Überschreiben Sie die Zeitzone der Anwendung. Lassen Sie das Feld leer, um den Serverstandard (UTC) zu verwenden. Wirkt für alle Datums-/Uhrzeitausgaben in der gesamten App.", - "Override the default API base URL. Leave blank to use the provider default. Useful for self-hosted models or proxy endpoints.": "Überschreiben Sie die Standard-API-Basis-URL. Lassen Sie das Feld leer, um die Standardeinstellung des Anbieters zu verwenden. Nützlich für selbstgehostete Modelle oder Proxy-Endpunkte.", - "Override the sync location from the profile. Leave empty to use profile location.": "Überschreiben Sie den Synchronisierungsort aus dem Profil. Lassen Sie das Feld leer, um den Profilspeicherort zu verwenden.", - "Overview": "Überblick", - "Overwrite": "Überschreiben", - "Overwrite Existing Attributes": "Vorhandene Attribute überschreiben", - "Overwrite Existing IDs": "Vorhandene IDs überschreiben", - "Overwrite Existing Metadata": "Vorhandene Metadaten überschreiben", - "Overwrite channels with existing mappings?": "Kanäle mit vorhandenen Zuordnungen überschreiben?", - "Overwrite existing TMDB/IMDB IDs? If disabled, it will only fetch IDs for items that don\\'t already have them.": "Vorhandene TMDB/IMDB-IDs überschreiben? Wenn die Funktion deaktiviert ist, werden IDs nur für Artikel abgerufen, die diese noch nicht haben.", - "Overwrite existing TMDB/IMDB IDs? If disabled, it will only fetch IDs for items that don\\'t have them.": "Vorhandene TMDB/IMDB-IDs überschreiben? Wenn die Funktion deaktiviert ist, werden IDs nur für Artikel abgerufen, die keine IDs haben.", - "Overwrite existing TMDB/TVDB/IMDB IDs? If disabled, it will only fetch IDs for series that don\\'t already have them.": "Vorhandene TMDB/TVDB/IMDB-IDs überschreiben? Wenn es deaktiviert ist, werden nur IDs für Serien abgerufen, die diese noch nicht haben.", - "Overwrite existing TMDB/TVDB/IMDB IDs? If disabled, it will only fetch IDs for series that don\\'t have them.": "Vorhandene TMDB/TVDB/IMDB-IDs überschreiben? Wenn es deaktiviert ist, werden IDs nur für Serien abgerufen, die keine IDs haben.", - "Overwrite existing metadata? Episodes and seasons will always be fetched/updated.": "Vorhandene Metadaten überschreiben? Episoden und Staffeln werden immer abgerufen/aktualisiert.", - "Overwrite existing metadata? If disabled, it will only fetch and process episodes for the Series.": "Vorhandene Metadaten überschreiben? Wenn die Funktion deaktiviert ist, werden nur Episoden der Serie abgerufen und verarbeitet.", - "Overwrite existing metadata? If disabled, it will only fetch and process metadata if it does not already exist.": "Vorhandene Metadaten überschreiben? Wenn es deaktiviert ist, werden Metadaten nur dann abgerufen und verarbeitet, wenn sie noch nicht vorhanden sind.", - "PG, PG-13, R, NC-17": "PG, PG-13, R, NC-17", - "PG-13, R, etc.": "PG-13, R usw.", - "PHP Date Formats": "PHP-Datumsformate", - "Page number (default: 1)": "Seitenzahl (Standard: 1)", - "Parallel processing": "Parallele Verarbeitung", - "Password": "Passwort", - "Password for playlist access.": "Passwort für den Zugriff auf die Playlist.", - "Path Validation Failed": "Pfadvalidierung fehlgeschlagen", - "Path structure (folders)": "Pfadstruktur (Ordner)", - "Patterns to remove": "Muster zum Entfernen", - "Pending": "Ausstehend", - "Pending Plugin Installs": "Ausstehende Plugin-Installationen", - "Pending Review": "Ausstehende Überprüfung", - "Pending Trust": "Ausstehendes Vertrauen", - "Performance": "Leistung", - "Permanently removes the plugin files from the server and deletes its registry record, settings, and run history. This cannot be undone.": "Entfernt die Plugin-Dateien dauerhaft vom Server und löscht den Registrierungseintrag, die Einstellungen und den Ausführungsverlauf. Dies kann nicht rückgängig gemacht werden.", - "Permanently removes this install log entry. The plugin itself (if installed) is not affected.": "Entfernt diesen Installationsprotokolleintrag dauerhaft. Das Plugin selbst (falls installiert) ist nicht betroffen.", - "Permissions": "Berechtigungen", - "Personal Access Token": "Persönliches Zugriffstoken", - "Personal Access Tokens": "Persönliche Zugriffstoken", - "Placeholder Images": "Platzhalterbilder", - "Play": "Spielen", - "Play Channel": "Kanal abspielen", - "Play Episode": "Episode abspielen", - "Play Video": "Video abspielen", - "Playback settings": "Wiedergabeeinstellungen", - "Playlist": "Wiedergabeliste", - "Playlist Alias": "Playlist-Alias", - "Playlist Aliases": "Playlist-Aliase", - "Playlist Auth": "Playlist-Auth", - "Playlist Auth ID": "Authentifizierungs-ID der Wiedergabeliste", - "Playlist Auth created": "Playlist-Auth erstellt", - "Playlist Auths": "Playlist-Authen", - "Playlist Category": "Playlist-Kategorie", - "Playlist Group": "Playlist-Gruppe", - "Playlist Name": "Name der Wiedergabeliste", - "Playlist Output": "Playlist-Ausgabe", - "Playlist Processing": "Playlist-Verarbeitung", - "Playlist Series are being processed in the background. Depending on the number of enabled Series, this may take a while. You will be notified on completion.": "Playlist-Serien werden im Hintergrund verarbeitet. Abhängig von der Anzahl der aktivierten Serien kann dies eine Weile dauern. Nach Abschluss werden Sie benachrichtigt.", - "Playlist Settings": "Playlist-Einstellungen", - "Playlist Type": "Wiedergabelistentyp", - "Playlist Type (choose one)": "Playlist-Typ (wählen Sie einen)", - "Playlist URL": "Playlist-URL", - "Playlist VOD channels are being processed in the background. Depending on the number of enabled VOD channels, this may take a while. You will be notified on completion.": "Playlist-VOD-Kanäle werden im Hintergrund verarbeitet. Abhängig von der Anzahl der aktivierten VOD-Kanäle kann dies eine Weile dauern. Nach Abschluss werden Sie benachrichtigt.", - "Playlist Viewer": "Wiedergabelisten-Viewer", - "Playlist Viewers": "Playlist-Zuschauer", - "Playlist fail conditions": "Bedingungen für Playlist-Fehler", - "Playlist is being duplicated": "Playlist wird dupliziert", - "Playlist is being duplicated in the background. You will be notified on completion.": "Die Playlist wird im Hintergrund dupliziert. Nach Abschluss werden Sie benachrichtigt.", - "Playlist is fetching metadata for Series": "Die Playlist ruft Metadaten für die Serie ab", - "Playlist is fetching metadata for VOD channels": "Die Playlist ruft Metadaten für VOD-Kanäle ab", - "Playlist name": "Name der Wiedergabeliste", - "Playlist settings are being copied": "Playlist-Einstellungen werden kopiert", - "Playlist settings are being copied in the background. You will be notified on completion.": "Playlist-Einstellungen werden im Hintergrund kopiert. Nach Abschluss werden Sie benachrichtigt.", - "Playlist status has been reset.": "Der Playlist-Status wurde zurückgesetzt.", - "Playlist status reset": "Playlist-Status zurückgesetzt", - "Playlist type": "Playlist-Typ", - "Playlist viewers are used for in app viewing and M3U TV access. Viewers are created automatically via username used to access playlist or start playback.": "Playlist-Viewer werden für die In-App-Anzeige und den M3U-TV-Zugriff verwendet. Zuschauer werden automatisch über den Benutzernamen erstellt, der zum Zugriff auf die Wiedergabeliste oder zum Starten der Wiedergabe verwendet wird.", - "Playlists": "Wiedergabelisten", - "Plays": "Spielt", - "Please add at least one media library path before scanning.": "Bitte fügen Sie vor dem Scannen mindestens einen Medienbibliothekspfad hinzu.", - "Please configure Xtream credentials first.": "Bitte konfigurieren Sie zuerst die Xtream-Anmeldeinformationen.", - "Please configure your TMDB API key in Settings > TMDB before using this feature.": "Bitte konfigurieren Sie Ihren TMDB-API-Schlüssel unter Einstellungen > TMDB, bevor Sie diese Funktion verwenden.", - "Please enter a TMDB API key to test the connection.": "Bitte geben Sie einen TMDB-API-Schlüssel ein, um die Verbindung zu testen.", - "Please enter a search query": "Bitte geben Sie eine Suchanfrage ein", - "Please enter credentials and select a lineup first": "Bitte geben Sie Ihre Anmeldedaten ein und wählen Sie zunächst eine Senderliste aus", - "Please enter username and password first": "Bitte geben Sie zuerst Benutzernamen und Passwort ein", - "Please enter username and password first.": "Bitte geben Sie zuerst Benutzernamen und Passwort ein.", - "Please fill in all required SMTP fields before sending a test email.": "Bitte füllen Sie alle erforderlichen SMTP-Felder aus, bevor Sie eine Test-E-Mail senden.", - "Please fill in all required connection fields before testing the connection.": "Bitte füllen Sie alle erforderlichen Verbindungsfelder aus, bevor Sie die Verbindung testen.", - "Please fill in all required fields first": "Bitte füllen Sie zunächst alle Pflichtfelder aus", - "Please provide a provider URL or configure the playlist Xtream URL.": "Bitte geben Sie eine Anbieter-URL an oder konfigurieren Sie die Xtream-URL der Wiedergabeliste.", - "Plex": "Plex", - "Plex Server Management": "Plex-Serververwaltung", - "Plot": "Handlung", - "Plugin": "Plugin", - "Plugin Archive": "Plugin-Archiv", - "Plugin Directory Path": "Plugin-Verzeichnispfad", - "Plugin Info": "Plugin-Info", - "Plugin Install": "Plugin-Installation", - "Plugin Installs": "Plugin-Installationen", - "Plugin Name": "Plugin-Name", - "Plugin Update Check Complete": "Plugin-Update-Prüfung abgeschlossen", - "Plugin archive staged": "Plugin-Archiv bereitgestellt", - "Plugin archive staging failed": "Das Staging des Plugin-Archivs ist fehlgeschlagen", - "Plugin blocked": "Plugin blockiert", - "Plugin creation failed": "Die Plugin-Erstellung ist fehlgeschlagen", - "Plugin deleted": "Plugin gelöscht", - "Plugin disabled": "Plugin deaktiviert", - "Plugin discovery completed": "Plugin-Erkennung abgeschlossen", - "Plugin enabled": "Plugin aktiviert", - "Plugin install #:id installed [:plugin_id].": "Plugin-Installation #:id installiert [:plugin_id].", - "Plugin install #:id installed and trusted [:plugin_id].": "Plugin-Installation #:id installiert und vertrauenswürdig [:plugin_id].", - "Plugin install #:id was rejected.": "Plugin-Installation #:id wurde abgelehnt.", - "Plugin install discarded": "Plugin-Installation verworfen", - "Plugin install failed": "Die Plugin-Installation ist fehlgeschlagen", - "Plugin install rejected": "Plugin-Installation abgelehnt", - "Plugin install staged": "Plugin-Installation erfolgt stufenweise", - "Plugin installed": "Plugin installiert", - "Plugin installed and trusted": "Plugin installiert und vertrauenswürdig", - "Plugin reinstalled": "Plugin neu installiert", - "Plugin run": "Plugin ausführen", - "Plugin run detail": "Details zur Plugin-Ausführung", - "Plugin staging failed": "Das Plugin-Staging ist fehlgeschlagen", - "Plugin trusted": "Plugin vertrauenswürdig", - "Plugin uninstalled": "Plugin deinstalliert", - "Plugin upload failed": "Das Hochladen des Plugins ist fehlgeschlagen", - "Plugins": "Plugins", - "Plugins Needing Attention": "Plugins, die Aufmerksamkeit erfordern", - "Plugins that are blocked, modified, invalid, or not fully installed.": "Plugins, die blockiert, geändert, ungültig oder nicht vollständig installiert sind.", - "Plugins that are currently installed and available to operate.": "Plugins, die derzeit installiert und betriebsbereit sind.", - "Pool Status": "Poolstatus", - "Pool multiple Xtream accounts from this provider to increase concurrent stream capacity.": "Bündeln Sie mehrere Xtream-Konten dieses Anbieters, um die Kapazität gleichzeitiger Streams zu erhöhen.", - "Port": "Port", - "Position / Duration": "Position / Dauer", - "Post Process": "Nachbearbeitung", - "Post Process ID": "Postprozess-ID", - "Post Process created": "Postprozess erstellt", - "Post Processing": "Nachbearbeitung", - "Postal Code": "Postleitzahl", - "Poster URL updated": "Poster-URL aktualisiert", - "Pre-defined prompts displayed as buttons in the Copilot chat window.": "Vordefinierte Eingabeaufforderungen, die als Schaltflächen im Copilot-Chatfenster angezeigt werden.", - "Prefer catch-up as primary": "Bevorzugen Sie das Aufholen als Primär", - "Prefer icon from channel or EPG.": "Symbol vom Sender oder EPG bevorzugen.", - "Prefer logo from channel or EPG.": "Logo vom Sender oder EPG bevorzugen.", - "Preferred Codec": "Bevorzugter Codec", - "Preferred Icon": "Bevorzugtes Symbol", - "Preferred Locale": "Bevorzugtes Gebietsschema", - "Preferred Playlist (optional)": "Bevorzugte Playlist (optional)", - "Preferred TVG ID output": "Bevorzugte TVG-ID-Ausgabe", - "Preferred icon updated": "Bevorzugtes Symbol aktualisiert", - "Preferred language for TMDB searches.": "Bevorzugte Sprache für TMDB-Suchen.", - "Preprocess playlist": "Playlist vorverarbeiten", - "Press [tab] or [return] to add item.": "Drücken Sie [Tab] oder [Return], um ein Element hinzuzufügen.", - "Press [tab] or [return] to add item. Leave empty to disable.": "Drücken Sie [Tab] oder [Return], um ein Element hinzuzufügen. Zum Deaktivieren leer lassen.", - "Press [tab] or [return] to add item. You can ignore certain file types from being imported (.e.g.: \".mkv\", \".mp4\", etc.) This is useful for ignoring VOD or other unwanted content.": "Drücken Sie [Tab] oder [Return], um ein Element hinzuzufügen. Sie können den Import bestimmter Dateitypen ignorieren (z. B. „.mkv“, „.mp4“ usw.). Dies ist nützlich, um VOD oder andere unerwünschte Inhalte zu ignorieren.", - "Prevent sync from proceeding if conditions are met.": "Verhindern Sie, dass die Synchronisierung fortgesetzt wird, wenn die Bedingungen erfüllt sind.", - "Preview": "Vorschau", - "Primary Account": "Primäres Konto", - "Primary Account Test Failed": "Der Test des primären Kontos ist fehlgeschlagen", - "Primary Account Valid ✓": "Primärkonto gültig ✓", - "Primary Profile": "Primäres Profil", - "Prioritize by resolution": "Priorisieren Sie nach Auflösung", - "Prioritize channels with a specific video codec.": "Priorisieren Sie Kanäle mit einem bestimmten Videocodec.", - "Prioritize name/display name matching": "Priorisieren Sie die Zuordnung von Namen und Anzeigenamen", - "Priority": "Priorität", - "Priority Keywords": "Vorrangige Schlüsselwörter", - "Priority Order": "Prioritätsreihenfolge", - "Probe Enabled": "Sonde aktiviert", - "Probe Streams": "Streams prüfen", - "Probe now": "Jetzt sondieren", - "Probe streams after sync": "Testen Sie Streams nach der Synchronisierung", - "Probe the selected channels with ffprobe to collect stream metadata (codec, resolution, bitrate). This data enables fast channel switching in Emby.": "Untersuchen Sie die ausgewählten Kanäle mit ffprobe, um Stream-Metadaten (Codec, Auflösung, Bitrate) zu sammeln. Diese Daten ermöglichen einen schnellen Kanalwechsel in Emby.", - "Probe timeout (seconds)": "Probe-Timeout (Sekunden)", - "Probed": "Untersucht", - "Probing is disabled for this channel. Enable it in the channel's edit form to allow probe data collection.": "Die Prüfung ist für diesen Kanal deaktiviert. Aktivieren Sie es im Bearbeitungsformular des Kanals, um die Erfassung von Sondendaten zu ermöglichen.", - "Probing started": "Die Sondierung hat begonnen", - "Process": "Verfahren", - "Process EPG now?": "EPG jetzt verarbeiten?", - "Process EPG now? This will reload the EPG data from the source.": "EPG jetzt verarbeiten? Dadurch werden die EPG-Daten von der Quelle neu geladen.", - "Process Event": "Prozessereignis", - "Process Message": "Prozessmeldung", - "Process Status": "Prozessstatus", - "Process failed": "Der Prozess ist fehlgeschlagen", - "Process in parallel rather than one-at-a-time for significantly faster results.": "Parallel verarbeiten statt nacheinander für deutlich schnellere Ergebnisse.", - "Process merged EPG now?": "Zusammengeführtes EPG jetzt verarbeiten?", - "Process now? This will fetch all episodes and seasons for the enabled series.": "Jetzt verarbeiten? Dadurch werden alle Episoden und Staffeln der aktivierten Serie abgerufen.", - "Process on failed syncs too (default is only successful syncs).": "Prozess auch bei fehlgeschlagenen Synchronisierungen (Standard sind nur erfolgreiche Synchronisierungen).", - "Process selected": "Ausgewählte verarbeiten", - "Process selected series now? This will fetch all episodes and seasons for this series. This may take a while depending on the number of series selected.": "Ausgewählte Serie jetzt bearbeiten? Dadurch werden alle Episoden und Staffeln dieser Serie abgerufen. Dies kann je nach Anzahl der ausgewählten Serien eine Weile dauern.", - "Process series for selected category now? Only enabled series will be processed. This will fetch all episodes and seasons for the category series. This may take a while depending on the number of series in the category.": "Jetzt Serie für ausgewählte Kategorie verarbeiten? Es werden nur aktivierte Serien verarbeitet. Dadurch werden alle Episoden und Staffeln der Kategorieserie abgerufen. Dies kann je nach Anzahl der Serien in der Kategorie eine Weile dauern.", - "Process series for this category now? Only enabled series will be processed. This will fetch all episodes and seasons for the category series. This may take a while depending on the number of series in the category.": "Jetzt Prozessserie für diese Kategorie? Es werden nur aktivierte Serien verarbeitet. Dadurch werden alle Episoden und Staffeln der Kategorieserie abgerufen. Dies kann je nach Anzahl der Serien in der Kategorie eine Weile dauern.", - "Process series now? This will fetch all episodes and seasons for this series.": "Jetzt Serie verarbeiten? Dadurch werden alle Episoden und Staffeln dieser Serie abgerufen.", - "Process the selected epg(s) now?": "Die ausgewählten EPG(s) jetzt verarbeiten?", - "Process the selected merged EPG(s) now?": "Die ausgewählten zusammengeführten EPG(s) jetzt verarbeiten?", - "Process the selected playlist(s) now?": "Ausgewählte Playlist(s) jetzt bearbeiten?", - "Processing": "Verarbeitung", - "Processing options for playlist VOD": "Verarbeitungsmöglichkeiten für Playlist-VOD", - "Processing options for playlist series": "Bearbeitungsmöglichkeiten für Playlist-Serien", - "Processing settings for the playlist": "Verarbeitungseinstellungen für die Playlist", - "Processing state reset": "Verarbeitungsstatus zurückgesetzt", - "Profile Name": "Profilname", - "Profile Test Failed": "Profiltest fehlgeschlagen", - "Profile Valid ✓": "Profil gültig ✓", - "Programme not found": "Programm nicht gefunden", - "Programme removed": "Programm entfernt", - "Programs": "Programme", - "Progress": "Fortschritt", - "Progress of EPG cache generation": "Fortschritt der EPG-Cache-Generierung", - "Progress of EPG import/sync": "Fortschritt des EPG-Imports/Synchronisierung", - "Progress of SchedulesDirect import (if using)": "Fortschritt des SchedulesDirect-Imports (falls verwendet)", - "Progress of merged EPG import/sync": "Fortschritt des zusammengeführten EPG-Imports/Synchronisierung", - "Prompt": "Prompt", - "Provider": "Anbieter", - "Provider Credentials": "Anmeldeinformationen des Anbieters", - "Provider Limits Warning": "Warnung zu Anbieterbeschränkungen", - "Provider Profiles": "Anbieterprofile", - "Provider Rate Limiting & Concurrency": "Anbieter-Ratenlimitierung & Parallelität", - "Provider Request Delay": "Verzögerung der Anbieteranfrage", - "Provider Streams": "Anbieter-Streams", - "Provider Timezone": "Zeitzone des Anbieters", - "Provider Timezone Not Found": "Zeitzone des Anbieters nicht gefunden", - "Provider URL": "Anbieter-URL", - "Provider credentials to use for this alias. At least one set of credentials is required.": "Für diesen Alias ​​zu verwendende Anbieteranmeldeinformationen. Es ist mindestens ein Satz Anmeldeinformationen erforderlich.", - "Provider timezone not found in playlist status. Make sure the playlist is connected and has synced at least once to retrieve this information.": "Die Zeitzone des Anbieters wurde im Playlist-Status nicht gefunden. Stellen Sie sicher, dass die Wiedergabeliste verbunden ist und mindestens einmal synchronisiert wurde, um diese Informationen abzurufen.", - "Proxied M3U URL": "Proxy-M3U-URL", - "Proxy": "Proxy", - "Proxy Enabled": "Proxy aktiviert", - "Proxy Options": "Proxy-Optionen", - "Proxy Password (Alternative)": "Proxy-Passwort (Alternative)", - "Proxy Port (Alternative)": "Proxy-Port (Alternative)", - "Proxy Settings": "Proxy-Einstellungen", - "Proxy Streams": "Proxy-Streams", - "Proxy URL": "Proxy-URL", - "Proxy User Agent for Media Streams": "Proxy-Benutzeragent für Medienstreams", - "Proxy mode was automatically enabled because this playlist now contains channels from source playlists with Provider Profiles enabled.": "Der Proxy-Modus wurde automatisch aktiviert, da diese Playlist jetzt Kanäle aus Quell-Playlists mit aktivierten Anbieterprofilen enthält.", - "Public URL": "Öffentliche URL", - "Purge Series": "Purge-Serie", - "Purge now": "Jetzt reinigen", - "QR Code": "QR-Code", - "Queue Manager": "Warteschlangenmanager", - "Queue a plugin action from the page header to create the first run.": "Stellen Sie eine Plugin-Aktion aus dem Seitenkopf in die Warteschlange, um die erste Ausführung zu erstellen.", - "Queue a scan from the header to generate the first run. That will populate Live Activity, Run History, and the run detail screen.": "Stellen Sie einen Scan vom Header in die Warteschlange, um den ersten Lauf zu generieren. Dadurch werden die Live-Aktivität, der Laufverlauf und der Laufdetailbildschirm angezeigt.", - "Queue reset": "Warteschlange zurückgesetzt", - "Queued": "In der Warteschlange", - "Queued by": "In der Warteschlange", - "Quick Actions": "Schnelle Aktionen", - "Ran At": "Ausgeführt um", - "Ran at": "Ausgeführt um", - "Rate Limit (requests/second)": "Ratenlimit (Anfragen/Sekunde)", - "Rating": "Bewertung", - "Rating (5 based)": "Bewertung (5 basierend)", - "Rating (5-based)": "Bewertung (5-basiert)", - "Re-enable disabled channels that are found to be live. Requires \"Scan all channels\" to be on.": "Deaktivierte Kanäle, die als live erkannt werden, wieder aktivieren. Erfordert, dass \"Alle Kanäle scannen\" aktiviert ist.", - "Re-enable live channels": "Live-Kanäle wieder aktivieren", - "Re-probe": "Erneut prüfen", - "Re-run this mapping everytime the EPG is synced?": "Diese Zuordnung jedes Mal erneut ausführen, wenn der EPG synchronisiert wird?", - "Recall Memories": "Erinnern Sie sich an Erinnerungen", - "Recent Plugin Installs": "Aktuelle Plugin-Installationen", - "Recent Runs": "Letzte Läufe", - "Recent plugin uploads — pending approval, approved, or rejected.": "Aktuelle Plugin-Uploads – Genehmigung ausstehend, genehmigt oder abgelehnt.", - "Recommended Next Step": "Empfohlener nächster Schritt", - "Recordings / DVR Subscriptions": "Aufnahmen / DVR-Abonnements", - "Recount Channels": "Kanäle nachzählen", - "Recount all channels in this group sequentially?": "Alle Kanäle dieser Gruppe der Reihe nach nachzählen?", - "Recount all channels in this group sequentially? Channel numbers will be assigned based on the current sort order.": "Alle Kanäle dieser Gruppe der Reihe nach nachzählen? Kanalnummern werden basierend auf der aktuellen Sortierreihenfolge zugewiesen.", - "Recount channels across selected groups? This will renumber channels sequentially starting from the top-most selected group down to the bottom-most.": "Kanäle in ausgewählten Gruppen erneut zählen? Dadurch werden die Kanäle der Reihe nach neu nummeriert, beginnend von der obersten ausgewählten Gruppe bis zur untersten.", - "Recount now": "Jetzt neu zählen", - "Recount the selected channels only inside this custom playlist. The original channel numbers will not change.": "Zählen Sie die ausgewählten Kanäle nur innerhalb dieser benutzerdefinierten Wiedergabeliste erneut auf. Die ursprünglichen Kanalnummern ändern sich nicht.", - "Recount the selected channels sequentially? Channel numbers will be assigned based on the current sort order.": "Die ausgewählten Kanäle der Reihe nach nachzählen? Kanalnummern werden basierend auf der aktuellen Sortierreihenfolge zugewiesen.", - "Recount the selected items only inside this custom playlist. The original channel numbers will not change.": "Erzählen Sie die ausgewählten Elemente nur innerhalb dieser benutzerdefinierten Wiedergabeliste. Die ursprünglichen Kanalnummern ändern sich nicht.", - "Recurrence Mode": "Wiederholungsmodus", - "Recurring": "Wiederkehrend", - "Ref frames": "Referenzrahmen", - "Refine feed": "Feed verfeinern", - "Refine runs": "Läufe verfeinern", - "Refresh": "Aktualisieren", - "Refresh EPG Guide": "EPG-Guide aktualisieren", - "Refresh Failed": "Aktualisierung fehlgeschlagen", - "Refresh Libraries": "Bibliotheken aktualisieren", - "Refresh Logo Repository": "Logo-Repository aktualisieren", - "Refresh logo cache (selected)": "Logo-Cache aktualisieren (ausgewählt)", - "Refresh media server library after sync": "Aktualisieren Sie die Medienserverbibliothek nach der Synchronisierung", - "Refresh poster cache (selected)": "Poster-Cache aktualisieren (ausgewählt)", - "Refresh selected cache": "Ausgewählten Cache aktualisieren", - "Regex merge patterns": "Regex-Zusammenführungsmuster", - "Regex patterns for failover grouping. Useful when the same channel has different names within and across providers.": "Regex-Muster für die Failover-Gruppierung. Nützlich, wenn derselbe Kanal innerhalb und zwischen Anbietern unterschiedliche Namen hat.", - "Register HDHomeRun Tuner": "Register HDHomeRun Tuner", - "Register a DVR tuner first.": "Registrieren Sie zunächst einen DVR-Tuner.", - "Register this playlist as an HDHomeRun tuner in Plex for Live TV & DVR.": "Registrieren Sie diese Wiedergabeliste als HDHomeRun-Tuner in Plex für Live-TV und DVR.", - "Registered Tuners": "Registrierte Tuner", - "Registration Failed": "Registrierung fehlgeschlagen", - "Reinstall": "Neu installieren", - "Reinstalling makes this plugin eligible to run again. Settings are preserved unless you deleted its data during uninstall.": "Durch eine Neuinstallation kann dieses Plugin erneut ausgeführt werden. Die Einstellungen bleiben erhalten, es sei denn, Sie haben die Daten während der Deinstallation gelöscht.", - "Reject Install": "Installation ablehnen", - "Reject install failed": "Installation ablehnen fehlgeschlagen", - "Release Asset URL": "Asset-URL freigeben", - "Release Date": "Veröffentlichungsdatum", - "Release Date (Alt)": "Veröffentlichungsdatum (Alt)", - "Release Logs": "Release-Protokolle", - "Release info missing": "Release-Informationen fehlen", - "Release logs": "Freigabeprotokolle", - "Release logs refreshed": "Release-Protokolle aktualisiert", - "Releases": "Veröffentlichungen", - "Remember": "Erinnern", - "Remember which provider profile a client was assigned to and prefer it on subsequent requests.": "Merken Sie sich, welchem ​​Anbieterprofil ein Kunde zugeordnet wurde, und bevorzugen Sie es bei späteren Anfragen.", - "Removal Failed": "Entfernung fehlgeschlagen", - "Remove": "Entfernen", - "Remove Auth": "Authentifizierung entfernen", - "Remove DVR": "Entfernen Sie den DVR", - "Remove Entire DVR": "Entfernen Sie den gesamten DVR", - "Remove Tuner": "Tuner entfernen", - "Remove auth": "Authentifizierung entfernen", - "Remove auth from Playlist": "Entfernen Sie die Authentifizierung von der Playlist", - "Remove auth from Playlist?": "Authentifizierung aus Playlist entfernen?", - "Remove auth from selected Playlist?": "Authentifizierung von ausgewählter Playlist entfernen?", - "Remove consecutive replacement characters": "Entfernen Sie aufeinanderfolgende Ersatzzeichen", - "Remove inactive streams and clients": "Entfernen Sie inaktive Streams und Clients", - "Remove or replace special characters in filenames": "Entfernen oder ersetzen Sie Sonderzeichen in Dateinamen", - "Remove post processing": "Nachbearbeitung entfernen", - "Remove post processing from item": "Nachbearbeitung vom Artikel entfernen", - "Remove post processing from item?": "Nachbearbeitung vom Artikel entfernen?", - "Remove post processing from selected item?": "Nachbearbeitung vom ausgewählten Element entfernen?", - "Remove quality indicators": "Qualitätsindikatoren entfernen", - "Remove specific words or symbols from folder and file names": "Entfernen Sie bestimmte Wörter oder Symbole aus Ordner- und Dateinamen", - "Removed Channels": "Entfernte Kanäle", - "Removed Groups": "Entfernte Gruppen", - "Removes the selected reviews from the system. This does not affect the installed plugins or their files on disk.": "Entfernt die ausgewählten Bewertungen aus dem System. Dies hat keine Auswirkungen auf die installierten Plugins oder deren Dateien auf der Festplatte.", - "Replace now": "Jetzt ersetzen", - "Replace with": "Ersetzen durch", - "Replace with (optional)": "Ersetzen durch (optional)", - "Request Options": "Anfrageoptionen", - "Request delay": "Anforderungsverzögerung", - "Request delay (milliseconds)": "Anforderungsverzögerung (Millisekunden)", - "Request type": "Anfragetyp", - "Requested Access": "Angeforderter Zugriff", - "Required to send emails, if your provider requires authentication.": "Erforderlich zum Versenden von E-Mails, wenn Ihr Provider eine Authentifizierung erfordert.", - "Required to send emails.": "Erforderlich zum Versenden von E-Mails.", - "Rescan storage": "Speicher erneut scannen", - "Reset": "Zurücksetzen", - "Reset EPG status so it can be processed again. Only perform this action if you are having problems with the EPG syncing.": "Setzen Sie den EPG-Status zurück, damit er erneut verarbeitet werden kann. Führen Sie diese Aktion nur aus, wenn Sie Probleme mit der EPG-Synchronisierung haben.", - "Reset Find & Replace results back to EPG defaults. This will remove any custom values set in the selected column.": "Setzen Sie die Ergebnisse von „Suchen und Ersetzen“ auf die EPG-Standardeinstellungen zurück. Dadurch werden alle in der ausgewählten Spalte festgelegten benutzerdefinierten Werte entfernt.", - "Reset Find & Replace results back to epg defaults for the selected epg channels. This will remove any custom values set in the selected column.": "Setzen Sie die Ergebnisse von „Suchen und Ersetzen“ für die ausgewählten EPG-Kanäle auf die EPG-Standardwerte zurück. Dadurch werden alle in der ausgewählten Spalte festgelegten benutzerdefinierten Werte entfernt.", - "Reset Find & Replace results back to playlist defaults for the selected channels. This will remove any custom values set in the selected column.": "Setzen Sie die Ergebnisse von „Suchen und Ersetzen“ auf die Playlist-Standardwerte für die ausgewählten Kanäle zurück. Dadurch werden alle in der ausgewählten Spalte festgelegten benutzerdefinierten Werte entfernt.", - "Reset Find & Replace results back to playlist defaults. This will remove any custom values set in the selected column.": "Setzen Sie die Ergebnisse von „Suchen und Ersetzen“ auf die Standardeinstellungen der Wiedergabeliste zurück. Dadurch werden alle in der ausgewählten Spalte festgelegten benutzerdefinierten Werte entfernt.", - "Reset Processing State": "Verarbeitungsstatus zurücksetzen", - "Reset Queue": "Warteschlange zurücksetzen", - "Reset VOD group names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Setzen Sie die VOD-Gruppennamen auf ihre ursprünglich importierten Werte zurück. Dadurch werden alle „Suchen und Ersetzen“-Änderungen für die ausgewählte Wiedergabeliste rückgängig gemacht.", - "Reset category names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Setzen Sie die Kategorienamen auf ihre ursprünglich importierten Werte zurück. Dadurch werden alle „Suchen und Ersetzen“-Änderungen für die ausgewählte Wiedergabeliste rückgängig gemacht.", - "Reset category names back to their original imported values? This will undo any find & replace changes.": "Kategorienamen auf ihre ursprünglich importierten Werte zurücksetzen? Dadurch werden alle „Suchen und Ersetzen“-Änderungen rückgängig gemacht.", - "Reset group names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Setzen Sie die Gruppennamen auf ihre ursprünglich importierten Werte zurück. Dadurch werden alle „Suchen und Ersetzen“-Änderungen für die ausgewählte Wiedergabeliste rückgängig gemacht.", - "Reset group names back to their original imported values? This will undo any find & replace changes.": "Gruppennamen auf ihre ursprünglich importierten Werte zurücksetzen? Dadurch werden alle „Suchen und Ersetzen“-Änderungen rückgängig gemacht.", - "Reset media server status so it can be synced again. Only perform this action if you are having problems with the media server syncing.": "Setzen Sie den Status des Medienservers zurück, damit er erneut synchronisiert werden kann. Führen Sie diese Aktion nur aus, wenn Sie Probleme mit der Synchronisierung des Medienservers haben.", - "Reset now": "Jetzt zurücksetzen", - "Reset playlist status so it can be processed again. Only perform this action if you are having problems with the playlist syncing.": "Setzen Sie den Playlist-Status zurück, damit er erneut verarbeitet werden kann. Führen Sie diese Aktion nur aus, wenn Sie Probleme mit der Synchronisierung der Wiedergabeliste haben.", - "Reset status": "Status zurücksetzen", - "Reset status for the selected Playlists so they can be processed again. Only perform this action if you are having problems with the playlist syncing.": "Setzen Sie den Status der ausgewählten Playlists zurück, damit diese erneut verarbeitet werden können. Führen Sie diese Aktion nur aus, wenn Sie Probleme mit der Synchronisierung der Wiedergabeliste haben.", - "Reset status for the selected media servers so they can be synced again.": "Setzen Sie den Status der ausgewählten Medienserver zurück, damit diese erneut synchronisiert werden können.", - "Resetting the queue will restart the queue workers and flush any pending jobs. Any syncs or background processes will be stopped and removed. Only perform this action if you are having sync issues.": "Durch das Zurücksetzen der Warteschlange werden die Warteschlangenarbeiter neu gestartet und alle ausstehenden Jobs gelöscht. Alle Synchronisierungen oder Hintergrundprozesse werden gestoppt und entfernt. Führen Sie diese Aktion nur aus, wenn Sie Synchronisierungsprobleme haben.", - "Resolution": "Auflösung", - "Resolve proxy public URL dynamically at request time": "Lösen Sie die öffentliche Proxy-URL zum Zeitpunkt der Anfrage dynamisch auf", - "Resolver URL": "Resolver-URL", - "Restart Now": "Jetzt neu starten", - "Restart existing mapping process.": "Starten Sie den bestehenden Mapping-Prozess neu.", - "Restart from beginning when all content has played": "Beginnen Sie von vorne, wenn alle Inhalte abgespielt wurden", - "Restart the in-progress scrubber run.": "Starten Sie den laufenden Scrubber-Lauf neu.", - "Restart this scrubber? The existing run will be abandoned and a new one will begin.": "Diesen Scrubber neu starten? Der bestehende Lauf wird aufgegeben und ein neuer beginnt.", - "Restore now": "Jetzt wiederherstellen", - "Restrict playlist URLs to specific domains. Leave empty to allow all domains.": "Beschränken Sie Playlist-URLs auf bestimmte Domains. Lassen Sie das Feld leer, um alle Domänen zuzulassen.", - "Resume Run": "Lauf fortsetzen", - "Retain logs of playlist syncs. This is useful for debugging and tracking changes to the playlist. This can lead to increased sync time and storage usage depending on the size of the playlist.": "Bewahren Sie Protokolle der Playlist-Synchronisierungen auf. Dies ist nützlich zum Debuggen und Verfolgen von Änderungen an der Wiedergabeliste. Dies kann je nach Größe der Playlist zu einer längeren Synchronisierungszeit und Speichernutzung führen.", - "Retry probe": "Versuchen Sie es erneut", - "Returned Metrics": "Zurückgegebene Metriken", - "Returned as \"server_info.http_port\" in \"player_api.php\" responses. Leave empty to use APP_PORT (default).": "Wird als „server_info.http_port“ in „player_api.php“-Antworten zurückgegeben. Leer lassen, um APP_PORT zu verwenden (Standard).", - "Returned as \"server_info.https_port\" in \"player_api.php\" responses. Leave empty to use 443 (default).": "Wird als „server_info.https_port“ in „player_api.php“-Antworten zurückgegeben. Lassen Sie das Feld leer, um 443 (Standard) zu verwenden.", - "Returned as \"user_info.message\" in \"player_api.php\" responses.": "Wird als „user_info.message“ in „player_api.php“-Antworten zurückgegeben.", - "Returned totals": "Zurückgegebene Summen", - "Review #:id is queued for approval.": "Rezension #:id steht zur Genehmigung in der Warteschlange.", - "Review #:id is queued for security scan and approval.": "Rezension #:id steht zur Sicherheitsüberprüfung und Genehmigung in der Warteschlange.", - "Review #:id is queued — check Plugin Installs to scan and approve it.": "Überprüfung #:id steht in der Warteschlange – überprüfen Sie Plugin-Installationen, um es zu scannen und zu genehmigen.", - "Review #:id is ready - check Plugin Installs to scan and approve it.": "Review #:id ist fertig – überprüfen Sie Plugin-Installationen, um es zu scannen und zu genehmigen.", - "Review Notes": "Überprüfen Sie die Notizen", - "Review Summary": "Zusammenfassung der Rezension", - "Review and create your plugin": "Überprüfen und erstellen Sie Ihr Plugin", - "Review the failed run, check the activity stream for the error context, and correct the target playlist, EPG, or thresholds before trying again.": "Überprüfen Sie die fehlgeschlagene Ausführung, überprüfen Sie den Aktivitätsstream auf den Fehlerkontext und korrigieren Sie die Zielwiedergabeliste, den EPG oder die Schwellenwerte, bevor Sie es erneut versuchen.", - "Rule Name": "Regelname", - "Run": "Laufen", - "Run ClamAV Scan": "Führen Sie den ClamAV-Scan aus", - "Run History": "Laufverlauf", - "Run Log": "Ausführungsprotokoll", - "Run Logs": "Ausführungsprotokolle", - "Run Now": "Jetzt ausführen", - "Run Summary": "Zusammenfassung ausführen", - "Run Tool": "Tool ausführen", - "Run a plugin action to see step-by-step activity appear here.": "Führen Sie eine Plugin-Aktion aus, um die Schritt-für-Schritt-Aktivität hier anzuzeigen.", - "Run automatically after each playlist sync.": "Wird nach jeder Playlist-Synchronisierung automatisch ausgeführt.", - "Run resumed": "Der Lauf wurde fortgesetzt", - "Run status": "Ausführungsstatus", - "Run the selected scrubbers now? This will not modify the \"Recurring\" setting.": "Die ausgewählten Scrubber jetzt ausführen? Dadurch wird die Einstellung „Wiederkehrend“ nicht geändert.", - "Running": "Läuft", - "Runtime": "Laufzeit", - "SD Progress": "SD-Fortschritt", - "SHA-256 Checksum": "SHA-256-Prüfsumme", - "SMTP": "SMTP", - "SMTP Encryption": "SMTP-Verschlüsselung", - "SMTP From Address": "SMTP-Absenderadresse", - "SMTP Host": "SMTP-Host", - "SMTP Password": "SMTP-Passwort", - "SMTP Port": "SMTP-Port", - "SMTP Settings": "SMTP-Einstellungen", - "SMTP Username": "SMTP-Benutzername", - "Sample rate": "Abtastrate", - "Saved targets used for manual defaults and automation.": "Gespeicherte Ziele, die für manuelle Standardeinstellungen und Automatisierung verwendet werden.", - "Scan": "Scan", - "Scan & Discover Libraries": "Bibliotheken scannen und entdecken", - "Scan All Libraries": "Alle Bibliotheken scannen", - "Scan Complete": "Scan abgeschlossen", - "Scan Details": "Scandetails", - "Scan Failed": "Scan fehlgeschlagen", - "Scan Recursively": "Rekursiv scannen", - "Scan Scope": "Scan-Bereich", - "Scan Started": "Scan gestartet", - "Scan all channels (including disabled)": "Alle Kanäle scannen (auch deaktiviert)", - "Scan completed": "Scan abgeschlossen", - "Scan failed": "Der Scan ist fehlgeschlagen", - "Scan subdirectories for media files": "Unterverzeichnisse nach Mediendateien durchsuchen", - "Scans All Channels": "Scannt alle Kanäle", - "Schedule": "Zeitplan", - "Schedule Builder": "Zeitplan-Builder", - "Schedule Generated": "Zeitplan generiert", - "Schedule Info": "Zeitplaninformationen", - "Schedule Settings": "Zeitplaneinstellungen", - "Schedule Start Time": "Planen Sie die Startzeit", - "Schedule Type": "Zeitplantyp", - "Schedule Window": "Zeitplanfenster", - "Schedule window is already one week": "Das Zeitplanfenster beträgt bereits eine Woche", - "Scheduled": "Geplant", - "Scheduled Recordings": "Geplante Aufnahmen", - "Scheduled Start Time": "Geplante Startzeit", - "Scheduled scans: disabled": "Geplante Scans: deaktiviert", - "Scheduled start time must be in the future.": "Die geplante Startzeit muss in der Zukunft liegen.", - "Schedules Generated": "Zeitpläne generiert", - "SchedulesDirect": "SchedulesDirect", - "SchedulesDirect Configuration": "SchedulesDirect-Konfiguration", - "Scheduling": "Terminplanung", - "Schema": "Schema", - "Script Options": "Skriptoptionen", - "Scrubber Details": "Scrubber-Details", - "Scrubber run cancelled": "Scrubber-Lauf abgebrochen", - "Scrubber tasks run after Playlist sync to check for dead URLs and automatically disable failing channels based on the configuration.": "Scrubber-Aufgaben werden nach der Playlist-Synchronisierung ausgeführt, um nach toten URLs zu suchen und fehlerhafte Kanäle basierend auf der Konfiguration automatisch zu deaktivieren.", - "Search & Map": "Suche & Karte", - "Search Documentation": "Dokumentation durchsuchen", - "Search Error": "Suchfehler", - "Search Language": "Suchsprache", - "Search Query": "Suchanfrage", - "Search Results": "Suchergebnisse", - "Search TMDB": "Durchsuchen Sie TMDB", - "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs for the selected series? This enables Trash Guides compatibility for Sonarr.": "TMDB nach passenden TV-Serien durchsuchen und TMDB/TVDB/IMDB-IDs für die ausgewählte Serie eintragen? Dies ermöglicht die Trash Guides-Kompatibilität für Sonarr.", - "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs? This enables Trash Guides compatibility for Sonarr.": "TMDB nach passenden TV-Serien durchsuchen und TMDB/TVDB/IMDB-IDs eintragen? Dies ermöglicht die Trash Guides-Kompatibilität für Sonarr.", - "Search TMDB for matching movies and populate TMDB/IMDB IDs for all VOD channels in the selected playlist? This enables Trash Guides compatibility for Radarr.": "TMDB nach passenden Filmen durchsuchen und TMDB/IMDB-IDs für alle VOD-Kanäle in der ausgewählten Playlist eintragen? Dies ermöglicht die Trash Guides-Kompatibilität für Radarr.", - "Search TMDB for matching movies and populate TMDB/IMDB IDs for the selected VOD channels? This enables Trash Guides compatibility for Radarr/Sonarr.": "TMDB nach passenden Filmen durchsuchen und TMDB/IMDB-IDs für die ausgewählten VOD-Kanäle eingeben? Dies ermöglicht die Trash Guides-Kompatibilität für Radarr/Sonarr.", - "Search The Movie Database for this movie": "Durchsuchen Sie die Filmdatenbank nach diesem Film", - "Search The Movie Database for this series": "Durchsuchen Sie die Filmdatenbank nach dieser Serie", - "Search VOD groups": "Durchsuchen Sie VOD-Gruppen", - "Search and Select Episodes": "Episoden suchen und auswählen", - "Search and Select Movies": "Filme suchen und auswählen", - "Search by filename...": "Nach Dateinamen suchen...", - "Search categories": "Kategorien durchsuchen", - "Search for master channel": "Nach Master-Kanal suchen", - "Search live groups": "Durchsuchen Sie Live-Gruppen", - "Search term or question to look up in the docs": "Suchbegriff oder Frage zum Nachschlagen in den Dokumenten", - "Searching for TMDB/TVDB IDs. Check the logs or refresh the page in a few seconds.": "Suche nach TMDB/TVDB-IDs. Überprüfen Sie die Protokolle oder aktualisieren Sie die Seite in wenigen Sekunden.", - "Season": "Staffel", - "Season #": "Staffel #", - "Season (Metadata)": "Staffel (Metadaten)", - "Seasons": "Staffeln", - "Seconds to wait per stream (3–30). Streams that do not respond within this window are marked dead.": "Sekunden pro Stream warten (3–30). Streams, die innerhalb dieses Zeitfensters nicht antworten, werden als tot markiert.", - "Seconds to wait per stream (5–60). Streams that do not respond within this window will be skipped.": "Sekunden pro Stream warten (5–60). Streams, die innerhalb dieses Zeitfensters nicht antworten, werden übersprungen.", - "Security": "Sicherheit", - "Security Hash (SHA-256)": "Sicherheits-Hash (SHA-256)", - "Security review created": "Sicherheitsüberprüfung erstellt", - "Security scan failed": "Der Sicherheitsscan ist fehlgeschlagen", - "Seen": "Gesehen", - "Segment Duration": "Segmentdauer", - "Select Episodes": "Wählen Sie Episoden aus", - "Select Existing Auth": "Wählen Sie Vorhandene Authentifizierung aus", - “Select Expiration Date, or leave empty for no expiration”: “Wählen Sie „Ablaufdatum” aus oder lassen Sie es leer, wenn kein Ablaufdatum besteht”, - “Select Group”: “Gruppe auswählen”, - “Select Movies”: “Wählen Sie Filme”, - "Select Permissions": "Wählen Sie Berechtigungen aus", - "Select VOD groups": "Wählen Sie VOD-Gruppen aus", - "Select a Custom Playlist (multiple provider credentials can be configured to match source providers).": "Wählen Sie eine benutzerdefinierte Playlist aus (mehrere Anbieteranmeldeinformationen können so konfiguriert werden, dass sie mit den Quellanbietern übereinstimmen).", - "Select a Stream File Setting for VOD .strm file generation. ": "Wählen Sie eine Stream-Dateieinstellung für die VOD-STRM-Dateigenerierung aus.", - "Select a Stream File Setting for series .strm file generation.": "Wählen Sie eine Stream-Dateieinstellung für die Serien-.strm-Dateigenerierung aus.", - "Select a Stream File Setting profile for all VOD channels in this group. VOD-level settings take priority. Leave empty to use global settings.": "Wählen Sie ein Stream-Dateieinstellungsprofil für alle VOD-Kanäle in dieser Gruppe aus. Einstellungen auf VOD-Ebene haben Vorrang. Lassen Sie das Feld leer, um globale Einstellungen zu verwenden.", - "Select a Stream File Setting profile for all series in this category. Series-level settings take priority. Leave empty to use global settings.": "Wählen Sie ein Stream-Dateieinstellungsprofil für alle Serien in dieser Kategorie aus. Einstellungen auf Serienebene haben Vorrang. Lassen Sie das Feld leer, um globale Einstellungen zu verwenden.", - "Select a Stream File Setting profile to override global/category settings for this series. Leave empty to use category or global settings.": "Wählen Sie ein Stream-Dateieinstellungsprofil aus, um globale/Kategorieeinstellungen für diese Serie zu überschreiben. Lassen Sie das Feld leer, um Kategorie- oder globale Einstellungen zu verwenden.", - "Select a Stream File Setting profile to override global/group settings for this VOD channel. Leave empty to use group or global settings. Priority: VOD > Group > Global.": "Wählen Sie ein Stream-Dateieinstellungsprofil aus, um globale/Gruppeneinstellungen für diesen VOD-Kanal zu überschreiben. Lassen Sie das Feld leer, um Gruppen- oder globale Einstellungen zu verwenden. Priorität: VOD > Gruppe > Global.", - "Select a group": "Wählen Sie eine Gruppe aus", - "Select a media server...": "Wählen Sie einen Medienserver aus...", - "Select a playlist - only VODs in the selected playlist will be moved. Any VODs selected from another playlist will be ignored.": "Wählen Sie eine Playlist aus – nur VODs in der ausgewählten Playlist werden verschoben. Alle aus einer anderen Playlist ausgewählten VODs werden ignoriert.", - "Select a playlist - only channels in the selected playlist will be moved. Any channels selected from another playlist will be ignored.": "Wählen Sie eine Playlist aus – nur Kanäle in der ausgewählten Playlist werden verschoben. Alle aus einer anderen Playlist ausgewählten Kanäle werden ignoriert.", - "Select a playlist or leave empty": "Wählen Sie eine Playlist aus oder lassen Sie sie leer", - "Select a saved pattern...": "Wählen Sie ein gespeichertes Muster aus...", - "Select a standard Playlist (only one set of alternative credentials can be configured).": "Wählen Sie eine Standard-Playlist aus (es kann nur ein Satz alternativer Anmeldeinformationen konfiguriert werden).", - "Select a transcoding profile to apply to Live streams for external clients (VLC, Kodi, etc.). Does not affect the in-app player. Leave empty for direct stream proxying.": "Wählen Sie ein Transkodierungsprofil aus, das auf Live-Streams für externe Clients (VLC, Kodi usw.) angewendet werden soll. Hat keinen Einfluss auf den In-App-Player. Für direktes Stream-Proxying leer lassen.", - "Select a transcoding profile to apply to VOD and Series streams for external clients (VLC, Kodi, etc.). Does not affect the in-app player. Leave empty for direct stream proxying.": "Wählen Sie ein Transkodierungsprofil aus, das auf VOD- und Serien-Streams für externe Clients (VLC, Kodi usw.) angewendet werden soll. Hat keinen Einfluss auf den In-App-Player. Für direktes Stream-Proxying leer lassen.", - "Select a tuner to remove from the DVR. If it is the last tuner, the entire DVR will be removed.": "Wählen Sie einen Tuner aus, der vom DVR entfernt werden soll. Wenn es der letzte Tuner ist, wird der gesamte DVR entfernt.", - "Select additional playlists to include as failover sources. Leave empty to only merge channels within this playlist.": "Wählen Sie zusätzliche Wiedergabelisten aus, die als Failover-Quellen einbezogen werden sollen. Lassen Sie das Feld leer, um nur Kanäle innerhalb dieser Playlist zusammenzuführen.", - "Select an associated EPG channel for this channel.": "Wählen Sie einen zugehörigen EPG-Kanal für diesen Kanal aus.", - "Select an auth to assign": "Wählen Sie eine zuzuweisende Authentifizierung aus", - "Select auths or leave empty": "Wählen Sie Authentifizierungen aus oder lassen Sie das Feld leer", - "Select categories": "Wählen Sie Kategorien aus", - "Select category": "Kategorie auswählen", - "Select content source": "Wählen Sie die Inhaltsquelle aus", - "Select encryption type (optional)": "Verschlüsselungstyp auswählen (optional)", - "Select episodes to add to this network. Once added, you can sort them using drag and drop in the main table.": "Wählen Sie Episoden aus, die Sie diesem Netzwerk hinzufügen möchten. Sobald Sie sie hinzugefügt haben, können Sie sie per Drag & Drop in der Haupttabelle sortieren.", - "Select group": "Gruppe auswählen", - "Select image": "Bild auswählen", - "Select live groups": "Wählen Sie Live-Gruppen aus", - "Select master channel": "Masterkanal auswählen", - "Select movies to add to this network. Once added, you can sort them using drag and drop in the main table.": "Wählen Sie Filme aus, die Sie diesem Netzwerk hinzufügen möchten. Sobald Sie sie hinzugefügt haben, können Sie sie per Drag & Drop in der Haupttabelle sortieren.", - "Select the EPG you would like to apply changes to.": "Wählen Sie den EPG aus, auf den Sie Änderungen anwenden möchten.", - "Select the EPG you would like to apply the reset to.": "Wählen Sie den EPG aus, auf den Sie den Reset anwenden möchten.", - "Select the EPG you would like to assign this post process to.": "Wählen Sie den EPG aus, dem Sie diesen Postprozess zuweisen möchten.", - "Select the EPG you would like to map from.": "Wählen Sie den EPG aus, von dem Sie eine Karte erstellen möchten.", - "Select the Playlist you would like to assign this post process to.": "Wählen Sie die Playlist aus, der Sie diesen Postprozess zuweisen möchten.", - "Select the Playlist you would like to fetch Series metadata for.": "Wählen Sie die Playlist aus, für die Sie Serienmetadaten abrufen möchten.", - "Select the Playlist you would like to fetch TMDB IDs for.": "Wählen Sie die Playlist aus, für die Sie TMDB-IDs abrufen möchten.", - "Select the Playlist you would like to fetch VOD metadata for.": "Wählen Sie die Playlist aus, für die Sie VOD-Metadaten abrufen möchten.", - "Select the Playlist you would like to sync Series stream files for.": "Wählen Sie die Playlist aus, für die Sie Serien-Stream-Dateien synchronisieren möchten.", - "Select the Series you would like to apply changes to.": "Wählen Sie die Serie aus, auf die Sie Änderungen anwenden möchten.", - "Select the backup file you would like to upload.": "Wählen Sie die Sicherungsdatei aus, die Sie hochladen möchten.", - "Select the backup you would like to restore.": "Wählen Sie das Backup aus, das Sie wiederherstellen möchten.", - "Select the category you would like to move the series to.": "Wählen Sie die Kategorie aus, in die Sie die Serie verschieben möchten.", - "Select the channel attributes you want to copy to the target playlist.": "Wählen Sie die Kanalattribute aus, die Sie in die Ziel-Playlist kopieren möchten.", - "Select the default transcoding profiles used when playing streams in the in-app player.": "Wählen Sie die Standard-Transkodierungsprofile aus, die beim Abspielen von Streams im In-App-Player verwendet werden.", - "Select the group you would like to move the channels to.": "Wählen Sie die Gruppe aus, in die Sie die Kanäle verschieben möchten.", - "Select the playlist Series you would like to add.": "Wählen Sie die Playlist-Serie aus, die Sie hinzufügen möchten.", - "Select the playlist this import is associated with.": "Wählen Sie die Playlist aus, mit der dieser Import verknüpft ist.", - "Select the playlist to use for HDHR/EPG endpoints.": "Wählen Sie die Wiedergabeliste aus, die für HDHR/EPG-Endpunkte verwendet werden soll.", - "Select the playlist whose channels you want to scrub.": "Wählen Sie die Playlist aus, deren Kanäle Sie löschen möchten.", - "Select the playlist you would like to add the group to.": "Wählen Sie die Playlist aus, zu der Sie die Gruppe hinzufügen möchten.", - "Select the playlist you would like to apply changes to.": "Wählen Sie die Playlist aus, auf die Sie Änderungen anwenden möchten.", - "Select the playlist you would like to apply the reset to.": "Wählen Sie die Playlist aus, auf die Sie das Zurücksetzen anwenden möchten.", - "Select the playlist you would like to assign this auth to.": "Wählen Sie die Playlist aus, der Sie diese Authentifizierung zuweisen möchten.", - "Select the playlist you would like to export channels for.": "Wählen Sie die Playlist aus, für die Sie Kanäle exportieren möchten.", - "Select the playlist you would like to import series from.": "Wählen Sie die Playlist aus, aus der Sie Serien importieren möchten.", - "Select the playlist you would like to map to.": "Wählen Sie die Playlist aus, die Sie zuordnen möchten.", - "Select the target playlist and channel attributes to copy": "Wählen Sie die zu kopierenden Ziel-Playlist- und Kanalattribute aus", - "Select what you would like to find and replace in the selected category names.": "Wählen Sie aus, was Sie in den ausgewählten Kategorienamen suchen und ersetzen möchten.", - "Select what you would like to find and replace in the selected channels.": "Wählen Sie aus, was Sie in den ausgewählten Kanälen finden und ersetzen möchten.", - "Select what you would like to find and replace in the selected epg channels.": "Wählen Sie aus, was Sie in den ausgewählten EPG-Kanälen finden und ersetzen möchten.", - "Select what you would like to find and replace in the selected group names.": "Wählen Sie aus, was Sie in den ausgewählten Gruppennamen suchen und ersetzen möchten.", - "Select what you would like to find and replace in your VOD group names.": "Wählen Sie aus, was Sie in Ihren VOD-Gruppennamen suchen und ersetzen möchten.", - "Select what you would like to find and replace in your channels list.": "Wählen Sie aus, was Sie in Ihrer Kanalliste finden und ersetzen möchten.", - "Select what you would like to find and replace in your live group names.": "Wählen Sie aus, was Sie in Ihren Live-Gruppennamen finden und ersetzen möchten.", - "Select what you would like to find and replace in your series category names.": "Wählen Sie aus, was Sie in den Namen Ihrer Serienkategorie suchen und ersetzen möchten.", - "Select what your plugin will participate in. Each capability adds a required PHP interface to your Plugin class.": "Wählen Sie aus, woran Ihr Plugin teilnehmen soll. Jede Funktion fügt Ihrer Plugin-Klasse eine erforderliche PHP-Schnittstelle hinzu.", - "Select whether to send a request to a URL, execute a local script, or send an email.": "Wählen Sie aus, ob eine Anfrage an eine URL gesendet, ein lokales Skript ausgeführt oder eine E-Mail gesendet werden soll.", - "Select which additional tools the AI assistant can use. Core tools (navigation, memory) are always available.": "Wählen Sie aus, welche zusätzlichen Tools der KI-Assistent nutzen kann. Kernwerkzeuge (Navigation, Speicher) sind immer verfügbar.", - "Select which libraries to import from your media server": "Wählen Sie aus, welche Bibliotheken von Ihrem Medienserver importiert werden sollen", - "Select which media server to refresh (Jellyfin, Emby, or Plex)": "Wählen Sie aus, welcher Medienserver aktualisiert werden soll (Jellyfin, Emby oder Plex).", - "Select which tools the AI assistant can use.": "Wählen Sie aus, welche Tools der KI-Assistent verwenden kann.", - "Select your AI provider and configure the API credentials.": "Wählen Sie Ihren KI-Anbieter aus und konfigurieren Sie die API-Anmeldeinformationen.", - "Select your SchedulesDirect lineup": "Wählen Sie Ihre SchedulesDirect-Senderliste aus", - "Selected EPGs are processing": "Ausgewählte EPGs werden verarbeitet", - "Selected VOD cache refreshed": "Ausgewählter VOD-Cache aktualisiert", - "Selected assets deleted": "Ausgewählte Assets gelöscht", - "Selected categories disabled": "Ausgewählte Kategorien deaktiviert", - "Selected categories enabled": "Ausgewählte Kategorien aktiviert", - "Selected category series disabled": "Ausgewählte Kategoriereihe deaktiviert", - "Selected category series enabled": "Ausgewählte Kategoriereihe aktiviert", - "Selected channels disabled": "Ausgewählte Kanäle deaktiviert", - "Selected channels enabled": "Ausgewählte Kanäle aktiviert", - "Selected episodes disabled": "Ausgewählte Episoden deaktiviert", - "Selected episodes enabled": "Ausgewählte Episoden aktiviert", - "Selected group channels disabled": "Ausgewählte Gruppenkanäle deaktiviert", - "Selected group channels enabled": "Ausgewählte Gruppenkanäle aktiviert", - "Selected groups disabled": "Ausgewählte Gruppen deaktiviert", - "Selected groups enabled": "Ausgewählte Gruppen aktiviert", - "Selected logo cache refreshed": "Ausgewählter Logo-Cache aktualisiert", - "Selected merged EPGs are processing": "Ausgewählte zusammengeführte EPGs werden verarbeitet", - "Selected playlists are processing": "Ausgewählte Playlists werden verarbeitet", - "Selected series cache refreshed": "Der Cache der ausgewählten Serie wurde aktualisiert", - "Selected series disabled": "Ausgewählte Serie deaktiviert", - "Selected series enabled": "Ausgewählte Serie aktiviert", - "Send Test Email": "Test-E-Mail senden", - "Send as GET or POST request.": "Als GET- oder POST-Anfrage senden.", - "Send as JSON body": "Als JSON-Text senden", - "Send the notification to yourself as well (for testing purposes)": "Senden Sie die Benachrichtigung auch an sich selbst (zu Testzwecken)", - "Send without body": "Ohne Körper senden", - "Series": "Serien", - "Series .strm files are being synced": "Serien-.strm-Dateien werden synchronisiert", - "Series Category": "Serienkategorie", - "Series Details": "Details zur Serie", - "Series Processing": "Serienbearbeitung", - "Series Sync": "Seriensynchronisation", - "Series are being processed": "Serien werden bearbeitet", - "Series episodes disabled": "Serienepisoden deaktiviert", - "Series episodes enabled": "Serienepisoden aktiviert", - "Series have been added and are being processed.": "Serien wurden hinzugefügt und werden bearbeitet.", - "Series is being processed": "Serie wird bearbeitet", - "Series moved to category": "Serie wurde in die Kategorie verschoben", - "Series poster URL": "URL des Serienposters", - "Series processing": "Serienbearbeitung", - "Series record not found.": "Seriendatensatz nicht gefunden.", - "Series stream file settings": "Einstellungen für Serien-Stream-Dateien", - "Series to Import": "Serie zum Importieren", - "Server": "Server", - "Server Configuration": "Serverkonfiguration", - "Server Info": "Serverinformationen", - "Server Type": "Servertyp", - "Set Timeshift": "Timeshift einstellen", - "Set logo URL": "Logo-URL festlegen", - "Set logo override URL": "Legen Sie die URL zum Überschreiben des Logos fest", - "Set poster URL": "Legen Sie die Poster-URL fest", - "Set preferred icon to EPG": "Stellen Sie das bevorzugte Symbol auf EPG ein", - "Set the timeshift (in hours) for the selected channels. Use 0 to disable catch-up.": "Stellen Sie die Zeitverschiebung (in Stunden) für die ausgewählten Kanäle ein. Verwenden Sie 0, um das Aufholen zu deaktivieren.", - "Set the timeshift value for the selected channels. Use 0 to disable catch-up.": "Stellen Sie den Timeshift-Wert für die ausgewählten Kanäle ein. Verwenden Sie 0, um das Aufholen zu deaktivieren.", - "Set timeshift": "Timeshift einstellen", - "Set to 0 (or clear value) for unlimited.": "Auf 0 (oder leeren Wert) für unbegrenzt setzen.", - "Set to 0 for unlimited streams.": "Für unbegrenzte Streams auf 0 setzen.", - "Settings": "Einstellungen", - "Settings for automatically enabling new content": "Einstellungen zum automatischen Aktivieren neuer Inhalte", - "Settings saved": "Einstellungen gespeichert", - "Settings used when mapping EPG to a Playlist.": "Einstellungen, die beim Zuordnen von EPG zu einer Playlist verwendet werden.", - "Short description for the plugin manifest. Leave blank for a default.": "Kurze Beschreibung für das Plugin-Manifest. Für einen Standardwert leer lassen.", - "Short description of the content.": "Kurze Beschreibung des Inhalts.", - "Show breadcrumbs": "Breadcrumbs anzeigen", - "Show breadcrumbs under the page titles": "Breadcrumbs unter den Seitentiteln anzeigen", - "Silence Detection Settings": "Einstellungen zur Stilleerkennung", - "Silence duration (seconds)": "Stilledauer (Sekunden)", - "Silence threshold (dB)": "Ruheschwelle (dB)", - "Simple authentication for playlist access.": "Einfache Authentifizierung für den Playlist-Zugriff.", - "Size": "Größe", - "Skip channels without EPG ID": "Kanäle ohne EPG-ID überspringen", - "Sort": "Sortieren", - "Sort Alpha": "Alpha sortieren", - "Sort Alpha Configs": "Alpha-Konfigurationen sortieren", - "Sort By": "Sortieren nach", - "Sort Order": "Sortierreihenfolge", - "Sort all channels in this group alphabetically? This will update the sort order.": "Alle Kanäle in dieser Gruppe alphabetisch sortieren? Dadurch wird die Sortierreihenfolge aktualisiert.", - "Sort the selected VOD alphabetically? This will update their sort order within this custom playlist.": "Ausgewählte VOD alphabetisch sortieren? Dadurch wird ihre Sortierreihenfolge in dieser benutzerdefinierten Playlist aktualisiert.", - "Sort the selected channels alphabetically? This will update their sort order within this custom playlist.": "Ausgewählte Kanäle alphabetisch sortieren? Dadurch wird ihre Sortierreihenfolge in dieser benutzerdefinierten Playlist aktualisiert.", - "Source": "Quelle", - "Source EPGs": "Quell-EPGs", - "Source Metadata": "Quellmetadaten", - "Source Playlist": "Quell-Playlist", - "Source Type": "Quellentyp", - "Space between consecutive programmes during cascade bump (0 = no gap)": "Abstand zwischen aufeinanderfolgenden Programmen während des Kaskadenstoßes (0 = keine Lücke)", - "Specify the maximum number of backups to keep. Enter 0 for no limit.": "Geben Sie die maximale Anzahl der aufzubewahrenden Sicherungen an. Geben Sie 0 für „kein Limit“ ein.", - "Stage GitHub Release": "Bühnen-GitHub-Release", - "Stage Local Plugin": "Stage Local-Plugin", - "Stage Plugin Archive": "Stage-Plugin-Archiv", - "Stage plugin update": "Plugin-Update bereitstellen", - "Standard Playlist": "Standard-Playlist", - "Start Broadcast": "Übertragung starten", - "Start Broadcasting": "Übertragung starten", - "Start Number": "Startnummer", - "Start On Viewer Connection": "Bei Viewer-Verbindung starten", - "Start broadcasting for the selected networks.": "Beginnen Sie mit der Übertragung für die ausgewählten Netzwerke.", - "Start continuous HLS broadcasting": "Kontinuierliche HLS-Übertragung starten", - "Start probing": "Prüfung starten", - "Started": "Begonnen", - "Started At": "Begonnen um", - "Station ID": "Stations-ID", - "Status": "Status", - "Status has been reset for the selected Playlists.": "Der Status der ausgewählten Playlists wurde zurückgesetzt.", - "Status has been reset for the selected media servers.": "Der Status für die ausgewählten Medienserver wurde zurückgesetzt.", - "Still running": "Läuft immer noch", - "Stop Broadcast": "Übertragung stoppen", - "Stop Broadcasting": "Übertragung stoppen", - "Stop Run": "Lauf stoppen", - "Stop broadcasting for the selected networks.": "Stoppen Sie die Übertragung für die ausgewählten Netzwerke.", - "Stop oldest stream when limit reached": "Ältesten Stream stoppen, wenn Limit erreicht", - "Stop the current broadcast": "Aktuelle Übertragung stoppen", - "Stop the current broadcast. Viewers will be disconnected.": "Aktuelle Übertragung stoppen. Zuschauer werden getrennt.", - "Stream File Setting": "Stream-Dateieinstellung", - "Stream File Setting Profile": "Stream-Dateieinstellungsprofil", - "Stream File Settings": "Stream-Dateieinstellungen", - "Stream Format": "Stream-Format", - "Stream Monitor": "Stream-Monitor", - "Stream Output": "Stream-Ausgabe", - "Stream Probing": "Stream-Prüfung", - "Stream Profile": "Stream-Profil", - "Stream Profiles": "Stream-Profile", - "Stream URL": "Stream-URL", - "Stream file settings": "Stream-Dateieinstellungen", - "Stream file settings define how .strm files are generated and organized. They can be assigned globally in Settings, to Groups/Categories, or directly to individual Series/VOD channels. Priority: Direct > Group/Category > Global.": "Stream-Dateieinstellungen legen fest, wie .strm-Dateien generiert und organisiert werden. Sie können global in den Einstellungen, Gruppen/Kategorien oder direkt einzelnen Serien/VOD-Kanälen zugewiesen werden. Priorität: Direkt > Gruppe/Kategorie > Global.", - "Stream not probed": "Stream nicht untersucht", - "Stream probed": "Stream untersucht", - "Stream probing completed": "Stream-Prüfung abgeschlossen", - "Stream probing disabled": "Stream-Prüfung deaktiviert", - "Stream probing enabled": "Stream-Prüfung aktiviert", - "Stream probing failed": "Stream-Prüfung fehlgeschlagen", - "Stream probing has been disabled for the selected channels.": "Die Stream-Prüfung wurde für die ausgewählten Kanäle deaktiviert.", - "Stream probing has been enabled for the selected channels.": "Für die ausgewählten Kanäle wurde die Stream-Prüfung aktiviert.", - "Stream probing is running in the background. You will be notified once the process is complete.": "Die Stream-Prüfung wird im Hintergrund ausgeführt. Sobald der Vorgang abgeschlossen ist, werden Sie benachrichtigt.", - "Stream probing started": "Die Stream-Prüfung wurde gestartet", - "Stream profiles are used to define how streams are transcoded by the proxy. They can be assigned to playlists to enable transcoding for those playlists. If a playlist does not have a stream profile assigned, direct stream proxying will be used.": "Stream-Profile werden verwendet, um zu definieren, wie Streams vom Proxy transkodiert werden. Sie können Playlists zugewiesen werden, um die Transkodierung für diese Playlists zu ermöglichen. Wenn einer Playlist kein Stream-Profil zugewiesen ist, wird direktes Stream-Proxying verwendet.", - "Streaming Output": "Streaming-Ausgabe", - "Streaming notes from running and recent jobs. Open any run to inspect the payload, result snapshot, and full trail.": "Streaming-Notizen von laufenden und aktuellen Jobs. Öffnen Sie einen beliebigen Lauf, um die Nutzlast, den Ergebnis-Snapshot und den vollständigen Trail zu überprüfen.", - "Streams": "Streams", - "Strip all catch-up related attributes from the playlist output and Xtream API. Useful when your provider\\'s catch-up doesn\\'t work or is unreliable.": "Entfernen Sie alle Catch-up-bezogenen Attribute aus der Playlist-Ausgabe und der Xtream-API. Nützlich, wenn die Kontaktaufnahme Ihres Anbieters nicht funktioniert oder unzuverlässig ist.", - "Structured Context": "Strukturierter Kontext", - "Subject line for the email (optional).": "Betreffzeile für die E-Mail (optional).", - "Submit for Review": "Zur Überprüfung einreichen", - "Submit for review": "Zur Überprüfung einreichen", - "Subscribe to host events that will automatically run your plugin in the background.": "Abonnieren Sie Host-Events, bei denen Ihr Plugin automatisch im Hintergrund ausgeführt wird.", - "Subtitles": "Untertitel", - "Successfully connected to TMDB API!": "Erfolgreich mit der TMDB-API verbunden!", - "Summary": "Zusammenfassung", - "Sync .strm files now? This will generate .strm files for enabled series.": ".strm-Dateien jetzt synchronisieren? Dadurch werden .strm-Dateien für aktivierte Serien generiert.", - "Sync Failed": "Synchronisierung fehlgeschlagen", - "Sync Information": "Informationen synchronisieren", - "Sync Interval": "Synchronisierungsintervall", - "Sync Invalidation": "Ungültigmachung der Synchronisierung", - "Sync Location": "Standort synchronisieren", - "Sync Logs": "Protokolle synchronisieren", - "Sync Media Server": "Medienserver synchronisieren", - "Sync Mode": "Synchronisierungsmodus", - "Sync Now": "Jetzt synchronisieren", - "Sync Options": "Synchronisierungsoptionen", - "Sync Progress": "Synchronisierungsfortschritt", - "Sync Schedule": "Synchronisierungsplan", - "Sync Selected": "Ausgewählte Synchronisierung", - "Sync Series .strm files": "Serie .strm-Dateien synchronisieren", - "Sync Started": "Synchronisierung gestartet", - "Sync Status": "Synchronisierungsstatus", - "Sync TV series with episodes": "Synchronisieren Sie Fernsehserien mit Episoden", - "Sync Time": "Synchronisierungszeit", - "Sync VOD .strm file": "VOD-.strm-Datei synchronisieren", - "Sync VOD .strm files": "Synchronisieren Sie VOD-STRM-Dateien", - "Sync VOD .strm files now? This will generate .strm files for this VOD channel at the path set for this channel.": "Jetzt VOD-STRM-Dateien synchronisieren? Dadurch werden .strm-Dateien für diesen VOD-Kanal unter dem für diesen Kanal festgelegten Pfad generiert.", - "Sync and Process": "Synchronisieren und verarbeiten", - "Sync category series .strm files now? This will generate .strm files for the enabled series at the path set for the series.": "Kategorieserien-.strm-Dateien jetzt synchronisieren? Dadurch werden .strm-Dateien für die aktivierte Serie im für die Serie festgelegten Pfad generiert.", - "Sync group VOD channels .strm files now? This will generate .strm files for the group channels.": "Gruppen-VOD-Kanäle jetzt .strm-Dateien synchronisieren? Dadurch werden .strm-Dateien für die Gruppenkanäle generiert.", - "Sync invalidation threshold": "Schwellenwert für die Ungültigmachung der Synchronisierung", - "Sync movies as VOD channels": "Synchronisieren Sie Filme als VOD-Kanäle", - "Sync selected VOD .strm files now? This will generate .strm files for the selected VOD channels at the path set for the channels.": "Ausgewählte VOD-STRM-Dateien jetzt synchronisieren? Dadurch werden .strm-Dateien für die ausgewählten VOD-Kanäle unter dem für die Kanäle festgelegten Pfad generiert.", - "Sync selected category series .strm files now? This will generate .strm files for the enabled series at the path set for the series.": "Ausgewählte Kategorieserien-STRM-Dateien jetzt synchronisieren? Dadurch werden .strm-Dateien für die aktivierte Serie im für die Serie festgelegten Pfad generiert.", - "Sync selected category series .strm files now? This will generate .strm files for the selected series at the path set for the series.": "Ausgewählte Kategorieserien-STRM-Dateien jetzt synchronisieren? Dadurch werden .strm-Dateien für die ausgewählte Serie unter dem für die Serie festgelegten Pfad generiert.", - "Sync selected group VOD channels .strm files now? This will generate .strm files for the group channels.": "Ausgewählte Gruppen-VOD-Kanäle jetzt als .strm-Dateien synchronisieren? Dadurch werden .strm-Dateien für die Gruppenkanäle generiert.", - "Sync selected series .strm files now? This will generate .strm files for the selected series at the path set for the series.": "Ausgewählte Serien-.strm-Dateien jetzt synchronisieren? Dadurch werden .strm-Dateien für die ausgewählte Serie unter dem für die Serie festgelegten Pfad generiert.", - "Sync series .strm files now? This will generate .strm files for this series at the path set for this series.": "Serien-.strm-Dateien jetzt synchronisieren? Dadurch werden .strm-Dateien für diese Serie unter dem für diese Serie festgelegten Pfad generiert.", - "Sync stream files": "Streamdateien synchronisieren", - "Sync stream files for all enabled Playlist Series? If disabled, it will only sync for Series of the selected Playlist.": "Streamdateien für alle aktivierten Playlist-Serien synchronisieren? Wenn die Option deaktiviert ist, wird die Synchronisierung nur für Serien der ausgewählten Playlist durchgeführt.", - "Sync time": "Synchronisierungszeit", - "Synced": "Synchronisiert", - "Synced at": "Synchronisiert um", - "System": "System", - "System Prompt": "Systemaufforderung", - "System Resources": "Systemressourcen", - "TMDB": "TMDB", - "TMDB API Key": "TMDB-API-Schlüssel", - "TMDB API Key Required": "TMDB-API-Schlüssel erforderlich", - "TMDB ID": "TMDB-ID", - "TMDB ID format": "TMDB-ID-Format", - "TMDB Integration": "TMDB-Integration", - "TMDB Metadata Applied": "Angewendete TMDB-Metadaten", - "TMDB Search Started": "TMDB-Suche gestartet", - "TMDB/TVDB": "TMDB/TVDB", - "TVDB ID": "TVDB-ID", - "TVG ID/Stream ID (default)": "TVG-ID/Stream-ID (Standard)", - "Tags": "Schlagworte", - "Target": "Ziel", - "Target Playlist": "Ziel-Playlist", - "Target Scope": "Zielbereich", - "Technical Details": "Technische Details", - "Test": "Prüfen", - "Test Connection": "Testverbindung", - "Test Connection & Discover Libraries": "Testen Sie die Verbindung und entdecken Sie Bibliotheken", - "Test Email Sent": "Test-E-Mail gesendet", - "Test Primary": "Primär testen", - "Test WebSocket": "Testen Sie WebSocket", - "Test connection": "Testverbindung", - "Test credentials and auto-detect max connections": "Testen Sie Anmeldeinformationen und ermitteln Sie automatisch die maximale Anzahl an Verbindungen", - "Test primary account credentials and detect max connections": "Testen Sie die Anmeldeinformationen des primären Kontos und ermitteln Sie die maximale Anzahl an Verbindungen", - "Test resolver connection": "Resolver-Verbindung testen", - "The \"From\" email address for outgoing emails. Defaults to no-reply@m3u-editor.dev.": "Die „Von“-E-Mail-Adresse für ausgehende E-Mails. Standardmäßig no-reply@m3u-editor.dev.", - "The AI provider to use for the Copilot assistant.": "Der KI-Anbieter, der für den Copilot-Assistenten verwendet werden soll.", - "The EPG file cache has been successfully cleared.": "Der EPG-Dateicache wurde erfolgreich geleert.", - "The EPG map has been disabled for the selected channels.": "Die EPG-Karte wurde für die ausgewählten Kanäle deaktiviert.", - "The EPG map has been re-enabled for the selected channels.": "Die EPG-Karte wurde für die ausgewählten Kanäle wieder aktiviert.", - "The EPG mapping process has been initiated for the selected mappings.": "Der EPG-Zuordnungsprozess wurde für die ausgewählten Zuordnungen gestartet.", - "The EPG mapping process has been initiated.": "Der EPG-Mapping-Prozess wurde eingeleitet.", - "The EPG mapping process has been re-initiated.": "Der EPG-Mapping-Prozess wurde erneut gestartet.", - "The EPG source ID to match against. Always ask the user which EPG source to use before calling this tool.": "Die EPG-Quellen-ID, mit der abgeglichen werden soll. Fragen Sie den Benutzer immer, welche EPG-Quelle er verwenden soll, bevor er dieses Tool aufruft.", - "The Movie Database ID.": "Die Filmdatenbank-ID.", - "The TMDB ID lookup has been started. You will be notified when it is complete.": "Die TMDB-ID-Suche wurde gestartet. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.", - "The VOD metadata fetching and processing has been started for the group channels. Only enabled channels will be processed. You will be notified when it is complete.": "Der Abruf und die Verarbeitung der VOD-Metadaten für die Gruppenkanäle wurde gestartet. Es werden nur aktivierte Kanäle verarbeitet. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.", - "The VOD metadata fetching and processing has been started for the selected group channels. Only enabled channels will be processed. You will be notified when it is complete.": "Der Abruf und die Verarbeitung von VOD-Metadaten für die ausgewählten Gruppenkanäle wurde gestartet. Es werden nur aktivierte Kanäle verarbeitet. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.", - "The VOD metadata fetching and processing has been started. You will be notified when it is complete.": "Der Abruf und die Verarbeitung der VOD-Metadaten wurde gestartet. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.", - "The action to perform: \"select\", \"update\", or \"delete\".": "Die auszuführende Aktion: \"select\", \"update\" oder \"delete\".", - "The category series have been moved to the chosen category.": "Die Kategorieserien wurden in die ausgewählte Kategorie verschoben.", - "The channel group name to process (e.g. \"UNITED STATES\").": "Der zu verarbeitende Kanalgruppenname (z. B. „VEREINIGTE STAATEN“).", - "The channels in the selected groups have been recounted sequentially.": "Die Kanäle in den ausgewählten Gruppen wurden nacheinander neu gezählt.", - "The channels in this group have been recounted.": "Die Kanäle dieser Gruppe wurden neu gezählt.", - "The channels in this group have been sorted alphabetically.": "Die Kanäle dieser Gruppe wurden alphabetisch sortiert.", - "The container format for the output stream.": "Das Containerformat für den Ausgabestream.", - "The current category series have been disabled.": "Die aktuellen Kategorieserien wurden deaktiviert.", - "The current category series have been enabled.": "Die aktuellen Kategoriereihen wurden aktiviert.", - "The database table to query.": "Die abzufragende Datenbanktabelle.", - "The default transcoding profile used for the in-app player for Live content. Leave empty to disable transcoding (some streams may not be playable in the player).": "Das standardmäßige Transkodierungsprofil, das für den In-App-Player für Live-Inhalte verwendet wird. Lassen Sie das Feld leer, um die Transkodierung zu deaktivieren (einige Streams können im Player möglicherweise nicht abgespielt werden).", - "The default transcoding profile used for the in-app player for VOD/Series content. Leave empty to disable transcoding (some streams may not be playable in the player).": "Das Standard-Transkodierungsprofil, das für den In-App-Player für VOD-/Serieninhalte verwendet wird. Lassen Sie das Feld leer, um die Transkodierung zu deaktivieren (einige Streams können im Player möglicherweise nicht abgespielt werden).", - "The event that will trigger this post process.": "Das Ereignis, das diesen Postprozess auslöst.", - "The file extension of the VOD container (e.g., mp4, mkv, etc.).": "Die Dateierweiterung des VOD-Containers (z. B. mp4, mkv usw.).", - "The group channels have been disabled.": "Die Gruppenkanäle wurden deaktiviert.", - "The group channels have been enabled.": "Die Gruppenkanäle wurden aktiviert.", - "The group channels have been moved to the chosen group.": "Die Gruppenkanäle wurden in die ausgewählte Gruppe verschoben.", - "The groups channels have been added to the chosen custom playlist.": "Die Gruppenkanäle wurden zur ausgewählten benutzerdefinierten Wiedergabeliste hinzugefügt.", - "The groups channels have been disabled.": "Die Gruppenkanäle wurden deaktiviert.", - "The latest execution and its immediate outcome.": "Die letzte Ausführung und ihr unmittelbares Ergebnis.", - "The latest plugin executions across all installed plugins.": "Die neuesten Plugin-Ausführungen aller installierten Plugins.", - "The logo URL has been updated for the selected networks.": "Die Logo-URL wurde für die ausgewählten Netzwerke aktualisiert.", - "The logo cache has been cleared. Logos will be fetched again on next request wherever logo proxy is enabled.": "Der Logo-Cache wurde geleert. Logos werden bei der nächsten Anfrage erneut abgerufen, sofern der Logo-Proxy aktiviert ist.", - "The logo override URL has been updated for the selected VOD channels.": "Die Logo-Override-URL wurde für die ausgewählten VOD-Kanäle aktualisiert.", - "The logo override URL has been updated for the selected channels.": "Die Logo-Override-URL wurde für die ausgewählten Kanäle aktualisiert.", - "The merge has been disabled for the selected channels. They will not be merged during \"Merge Same ID\" jobs.": "Die Zusammenführung wurde für die ausgewählten Kanäle deaktiviert. Sie werden bei „Gleiche ID zusammenführen“-Aufträgen nicht zusammengeführt.", - "The merge has been re-enabled for the selected channels. They can now be merged during \"Merge Same ID\" jobs.": "Die Zusammenführung wurde für die ausgewählten Kanäle wieder aktiviert. Sie können jetzt bei „Gleiche ID zusammenführen“-Aufträgen zusammengeführt werden.", - "The model to use. Leave blank to use the provider default.": "Das zu verwendende Modell. Lassen Sie das Feld leer, um die Standardeinstellung des Anbieters zu verwenden.", - "The most recent plugin job and where to inspect it.": "Der neueste Plugin-Job und wo Sie ihn überprüfen können.", - "The original title in the source language.": "Der Originaltitel in der Ausgangssprache.", - "The playlist ID chosen by the user. Omit on the first call — you must list playlists first so the user can select one.": "Die vom Benutzer gewählte Playlist-ID. Beim ersten Aufruf weglassen – Sie müssen zuerst Playlists auflisten, damit der Benutzer eine auswählen kann.", - "The playlist ID containing the channels to match.": "Die Playlist-ID mit den abzugleichenden Kanälen.", - "The playlist is no longer processing. You can now run new syncs.": "Die Wiedergabeliste wird nicht mehr verarbeitet. Sie können jetzt neue Synchronisierungen durchführen.", - "The plugin action is running in the background. Watch the Live Activity and Run History tabs for progress and results.": "Die Plugin-Aktion läuft im Hintergrund. Beobachten Sie den Fortschritt und die Ergebnisse auf den Registerkarten „Live-Aktivität“ und „Laufverlauf“.", - "The plugin archive was flagged by the security scanner and has not been installed.": "Das Plugin-Archiv wurde vom Sicherheitsscanner markiert und nicht installiert.", - "The plugin class discovered from the manifest.": "Die aus dem Manifest ermittelte Plugin-Klasse.", - "The plugin files have been removed from disk and its registry record has been deleted.": "Die Plugin-Dateien wurden von der Festplatte entfernt und der Registrierungseintrag wurde gelöscht.", - "The plugin has been installed and trusted. Enable it to start using it.": "Das Plugin wurde installiert und ist vertrauenswürdig. Aktivieren Sie es, um es zu verwenden.", - "The plugin has been updated to the latest version.": "Das Plugin wurde auf die neueste Version aktualisiert.", - "The plugin is now trusted. You can enable it when you are ready.": "Das Plugin ist jetzt vertrauenswürdig. Sie können es aktivieren, wenn Sie bereit sind.", - "The plugin is valid but disabled. Enable it first, then run a dry scan so you can inspect the output before applying repairs.": "Das Plugin ist gültig, aber deaktiviert. Aktivieren Sie es zuerst und führen Sie dann einen Trockenscan durch, damit Sie die Ausgabe überprüfen können, bevor Sie Reparaturen durchführen.", - "The portal/provider timezone (DST-aware). Needed to correctly use timeshift functionality.": "Die Zeitzone des Portals/Anbieters (DST-fähig). Wird benötigt, um die Timeshift-Funktionalität korrekt nutzen zu können.", - "The poster URL has been updated for the selected series.": "Die Poster-URL für die ausgewählte Serie wurde aktualisiert.", - "The preferred icon has been updated.": "Das bevorzugte Symbol wurde aktualisiert.", - "The queue workers have been restarted and any pending jobs flushed. You may need to manually sync any Playlists or EPGs that were in progress.": "Die Warteschlangenarbeiter wurden neu gestartet und alle ausstehenden Jobs gelöscht. Möglicherweise müssen Sie alle laufenden Wiedergabelisten oder EPGs manuell synchronisieren.", - "The rating of the VOD content on a scale of 0 to 5.": "Die Bewertung des VOD-Inhalts auf einer Skala von 0 bis 5.", - "The release date of the content.": "Das Veröffentlichungsdatum des Inhalts.", - "The run has been cancelled. In-progress checks will complete before stopping.": "Der Lauf wurde abgesagt. Laufende Prüfungen werden vor dem Stoppen abgeschlossen.", - "The run was queued again and will continue from the last saved checkpoint when possible.": "Der Lauf wurde erneut in die Warteschlange gestellt und wird nach Möglichkeit vom letzten gespeicherten Kontrollpunkt aus fortgesetzt.", - "The scrubber has been initiated and will run in the background.": "Der Scrubber wurde gestartet und wird im Hintergrund ausgeführt.", - "The scrubber has been re-initiated.": "Der Kanal-Scrubber wurde neu gestartet.", - "The search term to look for": "Der Suchbegriff, nach dem gesucht werden soll", - "The selected EPGs are being processed in the background. Depending on the size of the guide data, this may take a while.": "Die ausgewählten EPGs werden im Hintergrund verarbeitet. Abhängig von der Größe der Leitdaten kann dies eine Weile dauern.", - "The selected VOD have been added to the custom group.": "Das ausgewählte VOD wurde der benutzerdefinierten Gruppe hinzugefügt.", - "The selected VOD have been sorted alphabetically.": "Die ausgewählten VOD wurden alphabetisch sortiert.", - "The selected VODs have been moved to the chosen group.": "Die ausgewählten VODs wurden in die ausgewählte Gruppe verschoben.", - "The selected categories have been disabled.": "Die ausgewählten Kategorien wurden deaktiviert.", - "The selected categories have been enabled.": "Die ausgewählten Kategorien wurden aktiviert.", - "The selected category series have been disabled.": "Die ausgewählten Kategorieserien wurden deaktiviert.", - "The selected category series have been enabled.": "Die ausgewählten Kategoriereihen wurden aktiviert.", - "The selected channels have been added as failovers.": "Die ausgewählten Kanäle wurden als Failover hinzugefügt.", - "The selected channels have been added to the custom group.": "Die ausgewählten Kanäle wurden der benutzerdefinierten Gruppe hinzugefügt.", - "The selected channels have been detached from the custom playlist.": "Die ausgewählten Kanäle wurden aus der benutzerdefinierten Playlist entfernt.", - "The selected channels have been disabled.": "Die ausgewählten Kanäle wurden deaktiviert.", - "The selected channels have been enabled.": "Die ausgewählten Kanäle wurden aktiviert.", - "The selected channels have been moved to the chosen group.": "Die ausgewählten Kanäle wurden in die ausgewählte Gruppe verschoben.", - "The selected channels have been recounted.": "Die ausgewählten Sender wurden neu gezählt.", - "The selected channels have been sorted alphabetically.": "Die ausgewählten Kanäle wurden alphabetisch sortiert.", - "The selected channels were recounted for this custom playlist only.": "Die ausgewählten Kanäle wurden nur für diese benutzerdefinierte Playlist neu gezählt.", - "The selected episodes have been disabled.": "Die ausgewählten Episoden wurden deaktiviert.", - "The selected episodes have been enabled.": "Die ausgewählten Episoden wurden aktiviert.", - "The selected group channels have been disabled.": "Die ausgewählten Gruppenkanäle wurden deaktiviert.", - "The selected group channels have been enabled.": "Die ausgewählten Gruppenkanäle wurden aktiviert.", - "The selected groups channels have been disabled.": "Die ausgewählten Gruppenkanäle wurden deaktiviert.", - "The selected groups have been disabled.": "Die ausgewählten Gruppen wurden deaktiviert.", - "The selected groups have been enabled.": "Die ausgewählten Gruppen wurden aktiviert.", - "The selected items were recounted for this custom playlist only.": "Die ausgewählten Elemente wurden nur für diese benutzerdefinierte Playlist nachgezählt.", - "The selected merged EPGs are being processed in the background.": "Die ausgewählten zusammengeführten EPGs werden im Hintergrund verarbeitet.", - "The selected playlists are being processed in the background. Depending on the size of your playlist, this may take a while.": "Die ausgewählten Playlists werden im Hintergrund verarbeitet. Abhängig von der Größe Ihrer Playlist kann dies eine Weile dauern.", - "The selected scrubbers have been initiated.": "Die ausgewählten Scrubber wurden gestartet.", - "The selected series have been added to the custom category.": "Die ausgewählten Serien wurden zur benutzerdefinierten Kategorie hinzugefügt.", - "The selected series have been detached from the custom playlist.": "Die ausgewählten Serien wurden aus der benutzerdefinierten Playlist entfernt.", - "The selected series have been disabled.": "Die ausgewählten Serien wurden deaktiviert.", - "The selected series have been enabled.": "Die ausgewählten Serien wurden aktiviert.", - "The series episodes have been disabled.": "Die Serienepisoden wurden deaktiviert.", - "The series episodes have been enabled.": "Die Serienepisoden wurden freigeschaltet.", - "The series has been moved to the chosen category.": "Die Serie wurde in die ausgewählte Kategorie verschoben.", - "The series have been moved to the chosen category.": "Die Serie wurde in die ausgewählte Kategorie verschoben.", - "The starting channel number.": "Die Startkanalnummer.", - "The system prompt sent to the AI on every conversation to configure its behaviour.": "Die Systemaufforderung wird bei jedem Gespräch an die KI gesendet, um ihr Verhalten zu konfigurieren.", - "The title from metadata info.": "Der Titel aus Metadateninformationen.", - "The type of item to assign this post process to.": "Der Typ des Elements, dem dieser Postprozess zugewiesen werden soll.", - "The type of playlist to assign this auth to.": "Der Typ der Wiedergabeliste, der diese Authentifizierung zugewiesen werden soll.", - "The worker will stop the run at the next safe checkpoint.": "Der Arbeiter stoppt den Lauf am nächsten sicheren Kontrollpunkt.", - "The year of the VOD content.": "Das Jahr der VOD-Inhalte.", - "These plugins have issues that need your attention — they may be blocked, modified, invalid, or incomplete.": "Diese Plugins weisen Probleme auf, die Ihre Aufmerksamkeit erfordern – sie können blockiert, geändert, ungültig oder unvollständig sein.", - "These settings are used by hook-triggered runs, scheduled runs, and as defaults for manual actions.": "Diese Einstellungen werden von durch Hooks ausgelösten Ausführungen, geplanten Ausführungen und als Standard für manuelle Aktionen verwendet.", - "This URL must be reachable from your Plex server. Use your machine\\'s LAN IP, not localhost.": "Diese URL muss von Ihrem Plex-Server aus erreichbar sein. Verwenden Sie die LAN-IP Ihres Computers, nicht localhost.", - "This action will permanently delete all series associated with the playlist. Proceed with caution.": "Durch diese Aktion werden alle mit der Playlist verknüpften Serien dauerhaft gelöscht. Gehen Sie vorsichtig vor.", - "This channel hasn't been probed yet. Run a probe to capture stream details.": "Dieser Kanal wurde noch nicht untersucht. Führen Sie eine Probe aus, um Stream-Details zu erfassen.", - "This is a development/testing plugin": "Dies ist ein Entwicklungs-/Test-Plugin", - "This message will be sent to the WebSocket server, and displayed as a pop-up notification. If you do not see a notification shortly after sending, there is likely an issue with your WebSocket configuration.": "Diese Nachricht wird an den WebSocket-Server gesendet und als Popup-Benachrichtigung angezeigt. Wenn Sie kurz nach dem Senden keine Benachrichtigung sehen, liegt wahrscheinlich ein Problem mit Ihrer WebSocket-Konfiguration vor.", - "This network will use VOD content (movies/series) from this media server.": "Dieses Netzwerk verwendet VOD-Inhalte (Filme/Serien) von diesem Medienserver.", - "This permanently deletes all completed, failed, cancelled, and stale runs for this plugin. Any currently running jobs are not affected.": "Dadurch werden alle abgeschlossenen, fehlgeschlagenen, abgebrochenen und veralteten Ausführungen für dieses Plugin dauerhaft gelöscht. Derzeit ausgeführte Jobs sind davon nicht betroffen.", - "This plugin is already on the latest version.": "Dieses Plugin ist bereits in der neuesten Version.", - "This run did not publish aggregate totals.": "Bei diesem Lauf wurden keine Gesamtsummen veröffentlicht.", - "This run has no summary yet. Use the payload, result, and log stream below to inspect what happened.": "Für diesen Lauf gibt es noch keine Zusammenfassung. Verwenden Sie die unten stehende Nutzlast, das Ergebnis und den Protokollstream, um zu überprüfen, was passiert ist.", - "This run has not written a summary yet.": "Für diesen Lauf wurde noch keine Zusammenfassung verfasst.", - "This should be disabled unless directed by SchedulesDirect support": "Dies sollte deaktiviert werden, es sei denn, Sie werden vom SchedulesDirect-Support dazu aufgefordert", - "This will be the name of the duplicated playlist.": "Dies ist der Name der duplizierten Playlist.", - "This will clear all playlists currently marked as invalid, allowing them to be used for failover again immediately.": "Dadurch werden alle derzeit als ungültig markierten Wiedergabelisten gelöscht, sodass sie sofort wieder für das Failover verwendet werden können.", - "This will clear any stuck processing locks and allow new syncs to run. Use this if syncs appear stuck.": "Dadurch werden alle festsitzenden Verarbeitungssperren gelöscht und die Ausführung neuer Synchronisierungen ermöglicht. Verwenden Sie diese Option, wenn die Synchronisierungen scheinbar hängen bleiben.", - "This will download the latest release and stage it for review. The checksum will be verified automatically.": "Dadurch wird die neueste Version heruntergeladen und zur Überprüfung bereitgestellt. Die Prüfsumme wird automatisch überprüft.", - "This will find and merge duplicate series entries that were created due to sync format changes. Duplicate series without episodes will be removed, and their seasons will be merged into the series that has episodes.": "Dadurch werden doppelte Serieneinträge gefunden und zusammengeführt, die aufgrund von Änderungen im Synchronisierungsformat erstellt wurden. Doppelte Serien ohne Episoden werden entfernt und ihre Staffeln werden in der Serie mit Episoden zusammengeführt.", - "This will only fetch metadata for enabled VOD channels.": "Dadurch werden nur Metadaten für aktivierte VOD-Kanäle abgerufen.", - "This will only sync stream files for enabled VOD channels.": "Dadurch werden nur Streamdateien für aktivierte VOD-Kanäle synchronisiert.", - "This will permanently delete all entries in the selected log file. This cannot be undone.": "Dadurch werden alle Einträge in der ausgewählten Protokolldatei dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.", - "This will query GitHub for the latest release of every plugin that has a repository configured. Continue?": "Dadurch wird GitHub nach der neuesten Version jedes Plugins abgefragt, für das ein Repository konfiguriert ist. Weitermachen?", - "This will register the playlist\\'s HDHR endpoint as a DVR tuner in Plex and configure the EPG guide. The HDHR URL must be reachable from your Plex server.": "Dadurch wird der HDHR-Endpunkt der Wiedergabeliste als DVR-Tuner in Plex registriert und der EPG-Guide konfiguriert. Die HDHR-URL muss von Ihrem Plex-Server aus erreichbar sein.", - "This will remove the entire DVR and all tuners from Plex. Live TV & DVR will no longer work.": "Dadurch werden der gesamte DVR und alle Tuner aus Plex entfernt. Live-TV und DVR funktionieren nicht mehr.", - "This will stop all inactive streams via external API.": "Dadurch werden alle inaktiven Streams über die externe API gestoppt.", - "This will sync all content from the media server. For large libraries, this may take several minutes.": "Dadurch werden alle Inhalte vom Medienserver synchronisiert. Bei großen Bibliotheken kann dies mehrere Minuten dauern.", - "This will trigger Plex to re-fetch your EPG guide data and configure automatic refreshes.": "Dadurch wird Plex veranlasst, Ihre EPG-Guide-Daten erneut abzurufen und automatische Aktualisierungen zu konfigurieren.", - "Time Shift": "Zeitverschiebung", - "Timeshift updated": "Timeshift aktualisiert", - "Timeshift value": "Timeshift-Wert", - "Timing": "Timing", - "Title": "Titel", - "Title (Info)": "Titel (Info)", - "Title folder metadata": "Metadaten des Titelordners", - "To Email Address": "An E-Mail-Adresse", - "To use as the master for the selected channel.": "Zur Verwendung als Master für den ausgewählten Kanal.", - "Toggle auth status": "Authentifizierungsstatus umschalten", - "Toggle auto-sync status": "Schalten Sie den Status der automatischen Synchronisierung um", - "Toggle proxy status": "Proxy-Status umschalten", - "Token Name": "Tokenname", - "Tools": "Tools", - "Tools available to the Copilot assistant across all pages.": "Tools, die dem Copilot-Assistenten auf allen Seiten zur Verfügung stehen.", - "Total Channels": "Gesamtzahl der Kanäle", - "Total EPG Channels": "Gesamtzahl der EPG-Kanäle", - "Total Programmes": "Gesamtprogramme", - "Total number of channels available for this mapping.": "Gesamtzahl der für diese Zuordnung verfügbaren Kanäle.", - "Total number of channels checked in the last run.": "Gesamtzahl der im letzten Lauf überprüften Kanäle.", - "Total streams available for this playlist (∞ indicates no limit)": "Gesamtzahl der für diese Playlist verfügbaren Streams (∞ bedeutet keine Begrenzung)", - "Total time to sync playlist (in seconds)": "Gesamtzeit zum Synchronisieren der Playlist (in Sekunden)", - "Transcode": "Transkodieren", - "Transcode Mode": "Transkodierungsmodus", - "Transcode this channel using the selected profile. Overrides the playlist-level stream profile for this channel. Leave empty for direct stream proxying.": "Transkodieren Sie diesen Kanal mit dem ausgewählten Profil. Überschreibt das Stream-Profil auf Wiedergabelistenebene für diesen Kanal. Für direktes Stream-Proxying leer lassen.", - "Transcoding": "Transkodierung", - "Transcoding Settings (optional)": "Transkodierungseinstellungen (optional)", - "Trust": "Vertrauen", - "Trust Plugin": "Trust-Plugin", - "Trust blocked": "Vertrauen blockiert", - "Trust posture": "Vertrauenshaltung", - "Trusted": "Vertrauenswürdig", - "Trusted Plugins": "Vertrauenswürdige Plugins", - "Trusted by": "Vertrauenswürdig von", - "Trusting a plugin locks its current files as the approved version and sets up any database tables or storage the plugin needs.": "Wenn Sie einem Plugin vertrauen, werden seine aktuellen Dateien als genehmigte Version gesperrt und alle Datenbanktabellen oder Speicher eingerichtet, die das Plugin benötigt.", - "Tuner": "Tuner", - "Tuner Registered": "Tuner registriert", - "Tuner Removed": "Tuner entfernt", - "Tunes In": "Schaltet ein", - "Type": "Typ", - "Type of Playlist": "Art der Playlist", - "URL": "URL", - "URL & Connection": "URL und Verbindung", - "URL Override": "URL-Überschreibung", - "URL Settings": "URL-Einstellungen", - "URL Type": "URL-Typ", - "URL or Local file path": "URL oder lokaler Dateipfad", - "URL to Kinopoisk page.": "URL zur Kinopoisk-Seite.", - "URL to large cover image.": "URL zum großen Titelbild.", - "URL to movie poster/image.": "URL zum Filmplakat/Bild.", - "URL/XML File": "URL/XML-Datei", - "USA, UK, etc.": "USA, Großbritannien usw.", - "UTC": "koordinierte Weltzeit", - "Uncategorized": "Nicht kategorisiert", - "Undo EPG Map": "EPG-Karte rückgängig machen", - "Undo Find & Replace": "Machen Sie „Suchen und Ersetzen“ rückgängig", - "Unhealthy Streams": "Ungesunde Streams", - "Uninstall Plugin": "Plugin deinstallieren", - "Uninstall blocked": "Deinstallation blockiert", - "Uninstall plugin": "Plugin deinstallieren", - "Uninstalled": "Deinstalliert", - "Uninstalling disables the plugin immediately. You can keep the plugin\\'s data for a future reinstall, or delete everything it created. Active jobs will be cancelled first.": "Durch die Deinstallation wird das Plugin sofort deaktiviert. Sie können die Daten des Plugins für eine zukünftige Neuinstallation behalten oder alles löschen, was es erstellt hat. Aktive Jobs werden zunächst gelöscht.", - "Unique Identifier": "Eindeutiger Bezeichner", - "Unknown Plugin": "Unbekanntes Plugin", - "Unknown plugin": "Unbekanntes Plugin", - "Unmerging channels for this group in the background. You will be notified once the process is complete.": "Zusammenführen der Kanäle für diese Gruppe im Hintergrund. Sobald der Vorgang abgeschlossen ist, werden Sie benachrichtigt.", - "Unmerging channels in the background. You will be notified once the process is complete.": "Kanäle im Hintergrund auflösen. Sobald der Vorgang abgeschlossen ist, werden Sie benachrichtigt.", - "Up to date": "Auf dem neuesten Stand", - "Update": "Aktualisieren", - "Update Password": "Passwort aktualisieren", - "Update available": "Update verfügbar", - "Update check failed": "Die Aktualisierungsprüfung ist fehlgeschlagen", - "Update failed": "Update fehlgeschlagen", - "Update now": "Jetzt aktualisieren", - "Update preferred icon": "Bevorzugtes Symbol aktualisieren", - "Update staged for review": "Update zur Überprüfung bereitgestellt", - "Update staging failed": "Update-Staging fehlgeschlagen", - "Update the preferred icon for the selected channel(s).": "Aktualisieren Sie das bevorzugte Symbol für die ausgewählten Kanäle.", - "Update to :version": "Update auf :version", - "Update to latest release from GitHub": "Update auf die neueste Version von GitHub", - "Update your profile information": "Aktualisieren Sie Ihre Profilinformationen", - "Updates Available": "Updates verfügbar", - "Upload": "Hochladen", - "Upload Asset": "Asset hochladen", - "Upload Plugin Archive": "Plugin-Archiv hochladen", - "Upload a plugin zip, tar, or tar.gz archive. The server will stage and validate it through plugin installs.": "Laden Sie ein Plugin-Zip-, Tar- oder Tar.gz-Archiv hoch. Der Server wird es durch Plugin-Installationen bereitstellen und validieren.", - "Upload a plugin zip, tar, or tar.gz archive. The server will stage, validate, and scan it through plugin installs.": "Laden Sie ein Plugin-Zip-, Tar- oder Tar.gz-Archiv hoch. Der Server stellt es bereit, validiert und scannt es über Plugin-Installationen.", - "Upload now": "Jetzt hochladen", - "Upload the XMLTV file for the EPG. This will be used to import the guide data.": "Laden Sie die XMLTV-Datei für den EPG hoch. Dies wird zum Importieren der Führungsdaten verwendet.", - "Upload the playlist file. This will be used to import groups and channels.": "Laden Sie die Playlist-Datei hoch. Dies wird zum Importieren von Gruppen und Kanälen verwendet.", - "Uploaded plugin archive staged": "Hochgeladenes Plugin-Archiv bereitgestellt", - "Uploads waiting for security scan or admin approval.": "Uploads warten auf Sicherheitsscan oder Administratorgenehmigung.", - "Use \"Test\" to auto-detect from provider.": "Verwenden Sie „Test“, um die automatische Erkennung vom Anbieter durchzuführen.", - "Use HTTPS": "Verwenden Sie HTTPS", - "Use Proxy User Agent for Playlists (M3U8/MPD)": "Verwenden Sie den Proxy-Benutzeragenten für Wiedergabelisten (M3U8/MPD)", - "Use Regex": "Verwenden Sie Regex", - "Use Short URLs": "Verwenden Sie kurze URLs", - "Use playlist user agent": "Verwenden Sie den Playlist-Benutzeragenten", - "Use regex for filtering": "Verwenden Sie Regex zum Filtern", - "Use regex patterns to find and replace. If disabled, will use direct string comparison.": "Verwenden Sie Regex-Muster zum Suchen und Ersetzen. Wenn deaktiviert, wird der direkte String-Vergleich verwendet.", - "Use the GitHub release asset URL from the published release.": "Verwenden Sie die GitHub-Release-Asset-URL aus der veröffentlichten Version.", - "Use the header actions to run this plugin once, then track the job from Live Activity and Run History.": "Verwenden Sie die Header-Aktionen, um dieses Plugin einmal auszuführen, und verfolgen Sie dann den Job über die Live-Aktivität und den Ausführungsverlauf.", - "Use the last completed run as your baseline. If the candidate count looks right, queue an apply run or tighten the thresholds from the Settings tab.": "Verwenden Sie den letzten abgeschlossenen Lauf als Basislinie. Wenn die Anzahl der Kandidaten stimmt, stellen Sie einen Bewerbungslauf in die Warteschlange oder verschärfen Sie die Schwellenwerte auf der Registerkarte „Einstellungen“.", - "Use this image": "Verwenden Sie dieses Bild", - "Use this playlist only": "Verwenden Sie nur diese Playlist", - "Use to enable advanced failover checking and resolution (Resolver URL is required).": "Verwenden Sie diese Option, um die erweiterte Failover-Überprüfung und -Lösung zu aktivieren (Resolver-URL ist erforderlich).", - "Use with caution": "Mit Vorsicht verwenden", - "Used to reference this auth internally.": "Wird verwendet, um intern auf diese Authentifizierung zu verweisen.", - "Useful for multi-host access (VPN/Tailscale/etc.)": "Nützlich für Multi-Host-Zugriff (VPN/Tailscale/etc.)", - "User": "Benutzer", - "User Permissions": "Benutzerberechtigungen", - "User agent string to use for fetching the EPG.": "Benutzeragentenzeichenfolge, die zum Abrufen des EPG verwendet werden soll.", - "User agent string to use for fetching the playlist.": "Benutzeragentenzeichenfolge, die zum Abrufen der Wiedergabeliste verwendet werden soll.", - "User agent string to use for making requests.": "Benutzeragentenzeichenfolge, die zum Stellen von Anfragen verwendet werden soll.", - "Username": "Benutzername", - "Username for WebDAV authentication": "Benutzername für die WebDAV-Authentifizierung", - "Username for playlist access.": "Benutzername für den Zugriff auf die Playlist.", - "Users": "Benutzer", - "VARIABLE_NAME": "VARIABLE_NAME", - "VLC/3.0.21 LibVLC/3.0.21": "VLC/3.0.21 LibVLC/3.0.21", - "VOD": "VOD", - "VOD .strm file is being synced now": "Die VOD-STRM-Datei wird jetzt synchronisiert", - "VOD Channels": "VOD-Kanäle", - "VOD Group": "VOD-Gruppe", - "VOD Groups": "VOD-Gruppen", - "VOD Processing": "VOD-Verarbeitung", - "VOD Settings": "VOD-Einstellungen", - "VOD Sorted": "VOD sortiert", - "VOD Sync": "VOD-Synchronisierung", - "VOD and Series Streaming Profile": "VOD- und Serien-Streaming-Profil", - "VOD and Series Transcoding Profile": "VOD- und Serien-Transkodierungsprofil", - "VOD groups to import": "Zu importierende VOD-Gruppen", - "VOD processing": "VOD-Verarbeitung", - "VOD record not found.": "VOD-Eintrag nicht gefunden.", - "VOD stream file settings": "Einstellungen für VOD-Stream-Dateien", - "VOD/Series poster placeholder": "Platzhalter für VOD/Serienplakat", - "VODs moved to group": "VODs wurden in die Gruppe verschoben", - "Validate": "Validieren", - "Validate the plugin before you enable it or queue any work. The system should treat this plugin as untrusted until the contract checks pass.": "Validieren Sie das Plugin, bevor Sie es aktivieren oder Arbeiten in die Warteschlange stellen. Das System sollte dieses Plugin als nicht vertrauenswürdig behandeln, bis die Vertragsprüfungen erfolgreich sind.", - "Validation": "Validierung", - "Validation Error": "Validierungsfehler", - "Validation Errors": "Validierungsfehler", - "Validation Failed": "Validierung fehlgeschlagen", - "Validation completed": "Validierung abgeschlossen", - "Value": "Wert", - "Value for this header.": "Wert für diesen Header.", - "Value must be between 3 and 36 characters.": "Der Wert muss zwischen 3 und 36 Zeichen lang sein.", - "Value to compare against (not needed for true/false/empty conditions).": "Wert, mit dem verglichen werden soll (nicht erforderlich für Wahr/Falsch/Leer-Bedingungen).", - "Value to include in the email.": "Wert, der in die E-Mail aufgenommen werden soll.", - "Value to use for this variable.": "Für diese Variable zu verwendender Wert.", - "Variable name": "Variablenname", - "Version :version is available (current: :current).": "Version :version ist verfügbar (aktuell: :current).", - "Version, source, and type of this plugin.": "Version, Quelle und Typ dieses Plugins.", - "Video Bitrate": "Video-Bitrate", - "Video Codec": "Video-Codec", - "Video File Extensions": "Videodateierweiterungen", - "Video bitrate": "Videobitrate", - "Video bitrate in kbps.": "Videobitrate in kbps.", - "Video codec": "Video-Codec", - "View": "Sicht", - "View Docs": "Dokumente anzeigen", - "View Lineups": "Senderlisten anzeigen", - "View Logo Repository": "Logo-Repository anzeigen", - "View Logs": "Protokolle anzeigen", - "View Playlist": "Playlist ansehen", - "View Queue": "Warteschlange anzeigen", - "View Review": "Review ansehen", - "View Series": "Serie ansehen", - "View Sync Logs": "Synchronisierungsprotokolle anzeigen", - "View and manage Plex DVR recording subscriptions.": "Plex DVR-Aufnahmeabonnements anzeigen und verwalten.", - "View enhanced details": "Erweiterte Details anzeigen", - "View log details": "Protokolldetails anzeigen", - "View scrubber logs": "Scrubber-Protokolle anzeigen", - "View the EPG channel mapping jobs and progress here.": "Sehen Sie sich hier die EPG-Kanalzuordnungsaufträge und den Fortschritt an.", - "View/Update Unique Identifier": "Eindeutige Kennung anzeigen/aktualisieren", - "Viewer ID": "Zuschauer-ID", - "Wait this many seconds after sync completes before triggering the library refresh": "Warten Sie nach Abschluss der Synchronisierung so viele Sekunden, bevor Sie die Aktualisierung der Bibliothek auslösen", - "Wait until a specific date/time before starting the broadcast.": "Warten Sie bis zu einem bestimmten Datum/einer bestimmten Uhrzeit, bevor Sie mit der Übertragung beginnen.", - "Warning": "Warnung", - "Warning: this can result in a very large number of connections to the provider and significantly longer run times.": "Achtung: Dies kann zu sehr vielen Verbindungen zum Provider und deutlich längeren Laufzeiten führen.", - "Warnings": "Warnungen", - "Watch Records": "Aufzeichnungen ansehen", - "WebDAV Password": "WebDAV-Passwort", - "WebDAV Username": "WebDAV-Benutzername", - "WebSocket Connection Test": "WebSocket-Verbindungstest", - "Weight": "Gewicht", - "Weight (for shuffle)": "Gewicht (zum Mischen)", - "What does this plugin do?": "Was macht dieses Plugin?", - "What this plugin can participate in inside the platform.": "Woran dieses Plugin innerhalb der Plattform teilnehmen kann.", - "What to do next.": "Was als nächstes zu tun ist.", - "What to do with plugin data": "Was tun mit Plugin-Daten?", - "What your plugin can do": "Was Ihr Plugin kann", - "When enabled and configured, the AI Copilot assistant will appear in the top navigation bar.": "Wenn der AI Copilot-Assistent aktiviert und konfiguriert ist, wird er in der oberen Navigationsleiste angezeigt.", - "When enabled you can access the API documentation using the \"API Docs\" button. When disabled, the docs endpoint will return a 403 (Unauthorized). NOTE: The API will respond regardless of this setting. You do not need to enable it to use the API.": "Wenn diese Option aktiviert ist, können Sie über die Schaltfläche „API-Dokumente“ auf die API-Dokumentation zugreifen. Wenn die Option deaktiviert ist, gibt der Endpunkt „Docs“ eine 403 (nicht autorisiert) zurück. HINWEIS: Die API reagiert unabhängig von dieser Einstellung. Sie müssen es nicht aktivieren, um die API zu verwenden.", - "When enabled you can access the queue manager using the \"Queue Manager\" button. When disabled, the queue manager endpoint will return a 403 (Unauthorized).": "Wenn diese Option aktiviert ist, können Sie über die Schaltfläche „Warteschlangenmanager“ auf den Warteschlangenmanager zugreifen. Bei Deaktivierung gibt der Warteschlangenmanager-Endpunkt eine 403 (nicht autorisiert) zurück.", - "When enabled, /logo-repository endpoints are publicly accessible for apps like UHF.": "Wenn diese Option aktiviert ist, sind /logo-repository-Endpunkte für Apps wie UHF öffentlich zugänglich.", - "When enabled, VOD channels will be included in the M3U output.": "Wenn diese Option aktiviert ist, werden VOD-Kanäle in die M3U-Ausgabe einbezogen.", - "When enabled, a backup will be created before syncing.": "Wenn diese Option aktiviert ist, wird vor der Synchronisierung ein Backup erstellt.", - "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs.": "Wenn diese Option aktiviert ist, wird zwischen Anfragen an den Anbieter während der Synchronisierung von Wiedergabelisten und EPGs eine Verzögerung hinzugefügt.", - "When enabled, all channels will be re-evaluated during merge, including existing failover relationships.": "Wenn diese Option aktiviert ist, werden alle Kanäle während der Zusammenführung neu bewertet, einschließlich vorhandener Failover-Beziehungen.", - "When enabled, all streams will be proxied through the application. This allows for better compatibility with various clients and enables features such as stream limiting and output format selection.": "Wenn diese Option aktiviert ist, werden alle Streams über die Anwendung weitergeleitet. Dies ermöglicht eine bessere Kompatibilität mit verschiedenen Clients und ermöglicht Funktionen wie Stream-Begrenzung und Auswahl des Ausgabeformats.", - "When enabled, automatic database backups will be created based on the specified schedule.": "Wenn diese Option aktiviert ist, werden automatische Datenbanksicherungen basierend auf dem angegebenen Zeitplan erstellt.", - "When enabled, broadcast waits for a viewer connection before starting automatically. Manual Start still forces immediate startup.": "Wenn diese Option aktiviert ist, wartet die Übertragung auf eine Zuschauerverbindung, bevor sie automatisch startet. Der manuelle Start erzwingt weiterhin einen sofortigen Start.", - "When enabled, channel attributes will be cleaned based on regex pattern instead of prefix before matching.": "Wenn diese Option aktiviert ist, werden Kanalattribute vor dem Abgleich anhand des Regex-Musters statt des Präfixes bereinigt.", - "When enabled, channel logos will be proxied through the application. Logos will be cached for up to 30 days to reduce bandwidth and speed up loading times.": "Wenn diese Option aktiviert ist, werden Kanallogos über die Anwendung weitergeleitet. Logos werden bis zu 30 Tage lang zwischengespeichert, um die Bandbreite zu reduzieren und die Ladezeiten zu verkürzen.", - "When enabled, channels that do not have \"epg_channel_id\" or \"tvg-id\" will be skipped during the mapping process. Disable this to attempt to match all channels, even those without an EPG ID.": "Wenn diese Option aktiviert ist, werden Kanäle, die nicht über „epg_channel_id“ oder „tvg-id“ verfügen, während des Zuordnungsprozesses übersprungen. Deaktivieren Sie dies, um zu versuchen, alle Kanäle abzugleichen, auch solche ohne EPG-ID.", - "When enabled, channels will be probed with ffprobe after sync to collect stream metadata (codec, resolution, bitrate) and store it to the database for fast retrieval.": "Wenn diese Option aktiviert ist, werden Kanäle nach der Synchronisierung mit ffprobe geprüft, um Stream-Metadaten (Codec, Auflösung, Bitrate) zu sammeln und zum schnellen Abruf in der Datenbank zu speichern.", - "When enabled, channels with higher resolution will be prioritized as master.": "Wenn diese Option aktiviert ist, werden Kanäle mit höherer Auflösung als Master priorisiert.", - "When enabled, channels with the same stream ID will be automatically merged with failover relationships after each sync.": "Wenn diese Option aktiviert ist, werden Kanäle mit derselben Stream-ID nach jeder Synchronisierung automatisch mit Failover-Beziehungen zusammengeführt.", - "When enabled, dummy EPG data will be generated for the next 5 days. Thus, it is possible to assign channels for which no EPG data is available. As program information, the channel name and the set program length are used.": "Wenn diese Option aktiviert ist, werden Dummy-EPG-Daten für die nächsten 5 Tage generiert. Somit ist es möglich, Sender zuzuordnen, für die keine EPG-Daten verfügbar sind. Als Programminformationen werden der Sendername und die eingestellte Programmlänge verwendet.", - "When enabled, dummy EPG data will be generated for the next 5 days. Thus, it is possible to assign channels for which no EPG data is available. As program information, the channel title and the set program length are used.": "Wenn diese Option aktiviert ist, werden Dummy-EPG-Daten für die nächsten 5 Tage generiert. Somit ist es möglich, Sender zuzuordnen, für die keine EPG-Daten verfügbar sind. Als Programminformationen werden der Sendertitel und die eingestellte Programmlänge verwendet.", - "When enabled, exact matches on channel name/display name will be prioritized over channel_id matches. Enable this if your EPG has duplicate channel_ids for different quality versions (e.g., BBCOHD for \"BBC One HD\", \"BBC One HD²\", etc.). Disable if your EPG uses unique channel_ids.": "Wenn diese Option aktiviert ist, haben genaue Übereinstimmungen mit dem Kanalnamen/Anzeigenamen Vorrang vor Übereinstimmungen mit der Kanal-ID. Aktivieren Sie dies, wenn Ihr EPG über doppelte Kanal-IDs für Versionen unterschiedlicher Qualität verfügt (z. B. BBCOHD für „BBC One HD“, „BBC One HD²“ usw.). Deaktivieren Sie diese Option, wenn Ihr EPG eindeutige Kanal-IDs verwendet.", - "When enabled, expired cache cleanup will skip deletion. You can still refresh/clear cache manually.": "Wenn diese Option aktiviert ist, überspringt die Bereinigung abgelaufener Caches das Löschen. Sie können den Cache weiterhin manuell aktualisieren/löschen.", - "When enabled, groups will be included based on regex pattern match instead of prefix.": "Wenn diese Option aktiviert ist, werden Gruppen basierend auf der Regex-Musterübereinstimmung statt auf dem Präfix einbezogen.", - "When enabled, matched channels will have their preferred icon set to \"EPG\" instead of \"Channel\". This uses the EPG channel icon as the preferred logo source.": "Wenn diese Option aktiviert ist, wird bei übereinstimmenden Kanälen das bevorzugte Symbol auf „EPG“ anstelle von „Kanal“ eingestellt. Dabei wird das EPG-Kanalsymbol als bevorzugte Logoquelle verwendet.", - "When enabled, newly added Live channels will be enabled by default.": "Wenn diese Option aktiviert ist, werden neu hinzugefügte Live-Kanäle standardmäßig aktiviert.", - "When enabled, newly added VOD channels will be enabled by default.": "Wenn diese Option aktiviert ist, werden neu hinzugefügte VOD-Kanäle standardmäßig aktiviert.", - "When enabled, newly added VOD channels will have merging enabled by default on sync.": "Wenn diese Option aktiviert ist, ist die Zusammenführung neu hinzugefügter VOD-Kanäle bei der Synchronisierung standardmäßig aktiviert.", - "When enabled, newly added channels will be included in automatic stream probing after sync.": "Wenn diese Option aktiviert ist, werden neu hinzugefügte Kanäle nach der Synchronisierung in die automatische Stream-Prüfung einbezogen.", - "When enabled, newly added channels will have EPG mapping enabled by default on sync.": "Wenn diese Option aktiviert ist, ist die EPG-Zuordnung für neu hinzugefügte Kanäle bei der Synchronisierung standardmäßig aktiviert.", - "When enabled, newly added channels will have merging enabled by default on sync.": "Wenn diese Option aktiviert ist, ist die Zusammenführung neu hinzugefügter Kanäle bei der Synchronisierung standardmäßig aktiviert.", - "When enabled, newly added series will be enabled by default on sync.": "Wenn diese Option aktiviert ist, werden neu hinzugefügte Serien standardmäßig bei der Synchronisierung aktiviert.", - "When enabled, quality indicators (HD, FHD, UHD, 4K, 720p, 1080p, etc.) will be removed during fuzzy matching. Disable this if channels have similar names but different quality levels (e.g., \"Sport HD\" vs \"Sport FHD\").": "Wenn diese Option aktiviert ist, werden Qualitätsindikatoren (HD, FHD, UHD, 4K, 720p, 1080p usw.) während des Fuzzy-Matchings entfernt. Deaktivieren Sie dies, wenn Kanäle ähnliche Namen, aber unterschiedliche Qualitätsstufen haben (z. B. „Sport HD“ vs. „Sport FHD“).", - "When enabled, series will be included in the M3U output. It is recommended to enable the \"Fetch metadata\" option when enabled.": "Wenn diese Option aktiviert ist, werden Serien in die M3U-Ausgabe einbezogen. Es wird empfohlen, die Option „Metadaten abrufen“ zu aktivieren, wenn sie aktiviert ist.", - "When enabled, short URLs will be used for the playlist links. Save changes to generate the short URLs (or remove them).": "Wenn diese Option aktiviert ist, werden kurze URLs für die Playlist-Links verwendet. Speichern Sie die Änderungen, um die Kurz-URLs zu generieren (oder entfernen Sie sie).", - "When enabled, the EPG will be automatically re-synced at the specified interval.": "Wenn diese Option aktiviert ist, wird der EPG im angegebenen Intervall automatisch neu synchronisiert.", - "When enabled, the POST request will be sent without any body content. Useful for APIs that only need a POST trigger (e.g., Emby/Jellyfin scheduled tasks).": "Wenn diese Option aktiviert ist, wird die POST-Anfrage ohne Textinhalt gesendet. Nützlich für APIs, die nur einen POST-Trigger benötigen (z. B. geplante Emby/Jellyfin-Aufgaben).", - "When enabled, the application will output the WAN address of the server m3u-editor is currently running on.": "Wenn diese Option aktiviert ist, gibt die Anwendung die WAN-Adresse des Servers aus, auf dem m3u-editor derzeit ausgeführt wird.", - "When enabled, the backup will include your uploaded Playlist and EPG files.": "Wenn diese Option aktiviert ist, umfasst die Sicherung Ihre hochgeladenen Playlist- und EPG-Dateien.", - "When enabled, the channel group will be assigned to the dummy EPG as a tag.": "Wenn diese Option aktiviert ist, wird die Kanalgruppe dem Dummy-EPG als -Tag zugewiesen.", - "When enabled, the merged EPG will be automatically regenerated at the specified interval.": "Wenn diese Option aktiviert ist, wird der zusammengeführte EPG automatisch im angegebenen Intervall neu generiert.", - "When enabled, the playlist will be automatically re-synced at the specified interval.": "Wenn diese Option aktiviert ist, wird die Wiedergabeliste im angegebenen Intervall automatisch neu synchronisiert.", - "When enabled, the playlist will be preprocessed before importing. You can then select which groups you would like to import.": "Wenn diese Option aktiviert ist, wird die Wiedergabeliste vor dem Import vorverarbeitet. Anschließend können Sie auswählen, welche Gruppen Sie importieren möchten.", - "When enabled, the playlist will fetch items by category.": "Wenn diese Option aktiviert ist, ruft die Wiedergabeliste Elemente nach Kategorie ab.", - "When enabled, the playlist will fetch items by category. This may slow down the import process but can help with larger playlists that time out when fetching all items at once.": "Wenn diese Option aktiviert ist, ruft die Wiedergabeliste Elemente nach Kategorie ab. Dies verlangsamt möglicherweise den Importvorgang, kann jedoch bei größeren Wiedergabelisten hilfreich sein, bei denen beim gleichzeitigen Abrufen aller Elemente eine Zeitüberschreitung auftritt.", - "When enabled, the proxy will attempt to start streams even if the provider\\'s reported connection limit has been reached.": "Wenn diese Option aktiviert ist, versucht der Proxy, Streams zu starten, selbst wenn das vom Anbieter gemeldete Verbindungslimit erreicht wurde.", - "When enabled, the user will be prompted to set a new password before they can use the application.": "Wenn diese Option aktiviert ist, wird der Benutzer aufgefordert, ein neues Passwort festzulegen, bevor er die Anwendung verwenden kann.", - "When enabled, there will be an additional navigation item (Logs) to view the log file content.": "Wenn diese Option aktiviert ist, gibt es ein zusätzliches Navigationselement (Protokolle), um den Inhalt der Protokolldatei anzuzeigen.", - "When enabled, this network will continuously broadcast content according to the schedule.": "Wenn es aktiviert ist, sendet dieses Netzwerk kontinuierlich Inhalte gemäß dem Zeitplan.", - "When enabled, variables will be sent as a JSON body instead of form data. Only applies to POST requests.": "Wenn diese Option aktiviert ist, werden Variablen als JSON-Body statt als Formulardaten gesendet. Gilt nur für POST-Anfragen.", - "When enabled, worker waits for viewer activity before auto-starting. Manual Start still starts immediately.": "Wenn diese Option aktiviert ist, wartet der Worker auf die Aktivität des Betrachters, bevor er automatisch startet. Der manuelle Start startet immer noch sofort.", - "When enabled, you can manage your Plex server from this integration.": "Wenn diese Integration aktiviert ist, können Sie Ihren Plex-Server über diese Integration verwalten.", - "Where to fetch metadata for discovered content (requires TMDB API key in Settings)": "Wo werden Metadaten für erkannte Inhalte abgerufen (erfordert TMDB-API-Schlüssel in den Einstellungen)", - "Whether or not to use the URL override for logos and images too (default is enabled).": "Ob die URL-Überschreibung auch für Logos und Bilder verwendet werden soll oder nicht (Standard ist aktiviert).", - "Whether the plugin files are currently present.": "Ob die Plugin-Dateien aktuell vorhanden sind.", - "X-Emby-Token": "X-Emby-Token", - "XMLTV EPG guide URL. Must also be reachable from Plex.": "URL des XMLTV-EPG-Leitfadens. Muss auch von Plex aus erreichbar sein.", - "XMLTV File, URL or Path": "XMLTV-Datei, URL oder Pfad", - "XMLTV Format": "XMLTV-Format", - "Xtream": "Xtream", - "Xtream API": "Xtream-API", - "Xtream API Info": "Xtream-API-Informationen", - "Xtream API Panel Settings": "Xtream-API-Panel-Einstellungen", - "Xtream API Password": "Xtream-API-Passwort", - "Xtream API URL": "Xtream-API-URL", - "Xtream API Username": "Xtream-API-Benutzername", - "Xtream API connection details.": "Details zur Xtream-API-Verbindung.", - "Xtream API panel message": "Meldung im Xtream-API-Panel", - "YYYY or YYYY-MM-DD": "JJJJ oder JJJJ-MM-TT", - "YYYY-MM-DD": "JJJJ-MM-TT", - "Year": "Jahr", - "Year (optional)": "Jahr (optional)", - "Yes": "Ja", - "Yes, add to category": "Ja, zur Kategorie hinzufügen", - "Yes, add to group": "Ja, zur Gruppe hinzufügen", - "Yes, delete VOD": "Ja, VOD löschen", - "Yes, delete VODs": "Ja, VODs löschen", - "Yes, delete series": "Ja, Serie löschen", - "Yes, disable now": "Ja, jetzt deaktivieren", - "Yes, duplicate now": "Ja, jetzt duplizieren", - "Yes, enable now": "Ja, jetzt aktivieren", - "Yes, fetch IDs now": "Ja, jetzt IDs abrufen", - "Yes, generate cache now": "Ja, jetzt Cache generieren", - "Yes, process now": "Ja, jetzt bearbeiten", - "Yes, refresh now": "Ja, jetzt aktualisieren", - "Yes, reset now": "Ja, jetzt zurücksetzen", - "Yes, sync now": "Ja, jetzt synchronisieren", - "You are a helpful AI assistant integrated into m3u editor. You help users manage playlists, EPG data, streams, channels, and other features. Be concise and accurate.": "Sie sind ein hilfreicher KI-Assistent, der in den m3u-Editor integriert ist. Sie helfen Benutzern bei der Verwaltung von Playlists, EPG-Daten, Streams, Kanälen und anderen Funktionen. Seien Sie prägnant und genau.", - "You are using the latest version": "Sie verwenden die neueste Version", - "You can either upload an XMLTV file or provide a URL to an XMLTV file. File should conform to the XMLTV format.": "Sie können entweder eine XMLTV-Datei hochladen oder eine URL zu einer XMLTV-Datei angeben. Die Datei sollte dem XMLTV-Format entsprechen.", - "You can now assign Playlists or EPGs.": "Sie können jetzt Playlists oder EPGs zuweisen.", - "You can now assign Playlists to this Auth.": "Sie können diesem Auth nun Playlists zuweisen.", - "You can now assign channels to this group from the Channels section.": "Sie können dieser Gruppe jetzt im Abschnitt „Kanäle“ Kanäle zuweisen.", - "You can now assign channels to this group from the Channels tab.": "Sie können dieser Gruppe jetzt über die Registerkarte „Kanäle“ Kanäle zuweisen.", - "You will be notified once complete.": "Sie werden benachrichtigt, sobald der Vorgang abgeschlossen ist.", - "You will be notified when complete.": "Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.", - "You will be notified when the process is complete.": "Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.", - "You will need to save and refresh the page after changing settings for them to take effect.": "Sie müssen die Seite speichern und aktualisieren, nachdem Sie die Einstellungen geändert haben, damit sie wirksam werden.", - "YouTube Trailer": "YouTube-Trailer", - "YouTube Trailer ID": "YouTube-Trailer-ID", - "YouTube trailer URL or ID.": "URL oder ID des YouTube-Trailers.", - "Your API key for the selected provider. Stored in the database.": "Ihr API-Schlüssel für den ausgewählten Anbieter. In der Datenbank gespeichert.", - "Your TMDB API key (v3 auth). You can get one for free at themoviedb.org.": "Ihr TMDB-API-Schlüssel (v3-Authentifizierung). Sie können eines kostenlos bei themoviedb.org erhalten.", - "Your m3u proxy API key": "Ihr m3u-Proxy-API-Schlüssel", - "Your preferences have been saved successfully.": "Ihre Einstellungen wurden erfolgreich gespeichert.", - "aac": "aac", - "and how to use it": "und wie man es benutzt", - "e.g. 2024": "z.B. 2024", - "e.g. 403, 404, 502, 503": "z.B. 403, 404, 502, 503", - "e.g. Authorization": "z.B. Genehmigung", - "e.g. Bearer abc123": "z.B. Inhaber abc123", - "e.g. Help me find a channel": "z.B. Hilf mir, einen Kanal zu finden", - "e.g. Help me find a channel by name.": "z.B. Hilf mir, einen Kanal anhand des Namens zu finden.", - "e.g. Remove country prefix": "z.B. Länderpräfix entfernen", - "e.g. a1b2c3d4...": "z.B. a1b23d4...", - "e.g. aac": "z.B. aac", - "e.g. d/m/Y H:i:s": "z.B. T/M/J H:i:s", - "e.g. libx264, h264_nvenc": "z.B. libx264, h264_nvenc", - "e.g. veryfast, fast, medium": "z.B. sehr schnell, schnell, mittel", - "e.g., 100": "z.B. 100", - "e.g., Movie Classics, 80s TV, Kids Zone": "z. B. Filmklassiker, 80er-Jahre-TV, Kids Zone", - "e.g., Movies, TV Shows": "z. B. Filme, Fernsehsendungen", - "e.g., My Networks": "z. B. „Meine Netzwerke“.", - "en": "en", - "group-title": "Gruppentitel", - "http://192.168.0.123:36400": "http://192.168.0.123:36400", - "https://example.com/backdrop.jpg": "https://example.com/backdrop.jpg", - "https://example.com/cover.jpg": "https://example.com/cover.jpg", - "https://example.com/logo.png": "https://example.com/logo.png", - "https://example.com/poster.jpg": "https://example.com/poster.jpg", - "https://www.kinopoisk.ru/film/123456/": "https://www.kinopoisk.ru/film/123456/", - "https://www.youtube.com/watch?v=abc123": "https://www.youtube.com/watch?v=abc123", - "libx264": "libx264", - "m3u editor proxy url.": "M3U-Editor-Proxy-URL.", - "mp4": "mp4", - "of :n total": "von :n insgesamt", - "recorded progress.": "aufgezeichnete Fortschritte.", - "shown": "gezeigt", - "socks5://user:pass@host:port or http://user:pass@host:port": "socks5://user:pass@host:port oder http://user:pass@host:port", - "timeshift": "Zeitverschiebung", - "tvc-guide-stationid": "tvc-guide-stationid", - "tvg-chno": "tvg-chno", - "tvg-id": "tvg-id", - "tvg-logo": "tvg-Logo", - "tvg-name": "tvg-name", - "tvg-shift": "tvg-shift", - "unknown source": "unbekannte Quelle", - "username": "Benutzername", - "variable_name": "Variablenname", - "veryfast": "sehr schnell", - "your-api-key-here": "Ihr-API-Schlüssel-hier" + ":count smart channel(s) were skipped — smart channels can't be used as failovers themselves.": ":count Smart Channel(s) wurden übersprungen – Smart Channels können selbst nicht als Failover verwendet werden.", + "A custom channel was created with the selected sources attached as failovers, ranked by quality.": "Es wurde ein benutzerdefinierter Kanal erstellt, an den die ausgewählten Quellen als Failover angehängt wurden, sortiert nach Qualität.", + "Add at least one failover channel below — the smart channel takes its stream URL from the highest-ranked failover at stream time.": "Fügen Sie unten mindestens einen Failover-Kanal hinzu – der Smart-Kanal bezieht seine Stream-URL vom höchstrangigen Failover zur Stream-Zeit.", + "A descriptive name for this profile (e.g., \"720p Standard\", \"Twitch Stream\")": "Ein beschreibender Name für dieses Profil (z. B. „720p Standard“, „Twitch Stream“)", + "Allowed live groups": "Erlaubte Live-Gruppen", + "Allowed series categories": "Zulässige Serienkategorien", + "Allowed VOD groups": "Zulässige VOD-Gruppen", + "Are you sure you want to clear all selected series categories?": "Möchten Sie wirklich alle ausgewählten Serienkategorien löschen?", + "Auto-create groups/categories from TMDB genres": "Erstellen Sie automatisch Gruppen/Kategorien aus TMDB-Genres", + "Auto-streams the highest-ranked failover. URL field is locked while on. Custom channels only.": "Automatisches Streamen des höchstrangigen Failovers. Das URL-Feld ist gesperrt, solange es aktiviert ist. Nur benutzerdefinierte Kanäle.", + "Backend": "Backend", + "Catchup Source": "Aufholquelle", + "Category sort order": "Sortierreihenfolge der Kategorie", + "Channel Filter (optional)": "Kanalfilter (optional)", + "Cookies (Netscape format)": "Cookies (Netscape-Format)", + "Could not create smart channel": "Smart-Kanal konnte nicht erstellt werden", + "Create a custom \"smart channel\" from the selected channels. The highest-scoring source's title, logo, and EPG mapping will be copied. All selected channels become failovers, sorted by score, and the playlist will stream the top failover automatically.": "Erstellen Sie aus den ausgewählten Kanälen einen benutzerdefinierten „Smart Channel“. Der Titel, das Logo und die EPG-Zuordnung der Quelle mit der höchsten Punktzahl werden kopiert. Alle ausgewählten Kanäle werden zu Failovers, sortiert nach Punktzahl, und die Playlist streamt automatisch das Top-Failover.", + "Create smart channel": "Erstellen Sie einen intelligenten Kanal", + "Daily": "Täglich", + "Database: Execute Query": "Datenbank: Abfrage ausführen", + "Database: Get Schema": "Datenbank: Schema abrufen", + "Disable source channels": "Quellkanäle deaktivieren", + "During scheduled or manual rescoring, channels with stats older than this are re-probed first. Set to 0 to always re-probe. The \"Make smart channel\" action uses existing stats only and does not consult this setting.": "Bei der geplanten oder manuellen Neubewertung werden Kanäle mit älteren Statistiken zuerst erneut überprüft. Auf 0 einstellen, um immer erneut zu prüfen. Die Aktion „Intelligenten Kanal erstellen“ verwendet nur vorhandene Statistiken und berücksichtigt diese Einstellung nicht.", + "EPG Shift updated": "EPG Shift aktualisiert", + "EPG Shift value": "EPG-Shift-Wert", + "Failover groups will be re-scored in the background. You can keep using the app while this runs.": "Failovergruppen werden im Hintergrund neu bewertet. Sie können die App während der Ausführung weiterhin verwenden.", + "Failover Ranking": "Failover-Ranking", + "Failover Rescoring": "Failover-Neubewertung", + "Failover rescoring queued": "Failover-Neubewertung in der Warteschlange", + "Failovers ranked by score. Stored from the last merge or rescore — click \"Rescore now\" to recalculate against current stream stats.": "Failover nach Punktzahl sortiert. Gespeichert von der letzten Zusammenführung oder Neubewertung – klicken Sie auf „Jetzt neu bewerten“, um eine Neuberechnung anhand der aktuellen Stream-Statistiken durchzuführen.", + "Failovers will be re-scored in the background. Refresh this page in a moment to see the updated ranking.": "Failover werden im Hintergrund neu bewertet. Aktualisieren Sie diese Seite gleich, um das aktualisierte Ranking zu sehen.", + "FFmpeg arguments for transcoding. Use placeholders like {crf|23} for configurable parameters with defaults. Hardware acceleration will be applied automatically by the proxy server.": "FFmpeg-Argumente für die Transkodierung. Verwenden Sie Platzhalter wie {crf|23} für konfigurierbare Parameter mit Standardwerten. Die Hardwarebeschleunigung wird automatisch vom Proxyserver angewendet.", + "FFmpeg re-encodes the stream. Streamlink and yt-dlp extract and deliver streams directly from supported platforms (Twitch, YouTube, etc.) without re-encoding.": "FFmpeg kodiert den Stream neu. Streamlink und yt-dlp extrahieren und liefern Streams direkt von unterstützten Plattformen (Twitch, YouTube usw.) ohne Neukodierung.", + "Format Selector & Options": "Formatauswahl und Optionen", + "Keeps failover ordering in sync with current stream quality. Affects three places: scheduled rescoring (the interval below), the per-channel \"Rescore now\" action, and the \"Make smart channel\" bulk action. The Priority Order under Auto-Merge above is reused for the actual scoring in all three.": "Hält die Failover-Reihenfolge mit der aktuellen Stream-Qualität synchronisiert. Betrifft drei Stellen: die geplante Neubewertung (das Intervall unten), die Aktion „Jetzt neu bewerten“ pro Kanal und die Massenaktion „Intelligenten Kanal erstellen“. Die oben unter „Automatische Zusammenführung“ angegebene Prioritätsreihenfolge wird für die tatsächliche Wertung in allen drei Fällen wiederverwendet.", + "Leave empty to copy the highest-scoring source's title.": "Lassen Sie das Feld leer, um den Titel der Quelle mit der höchsten Bewertung zu kopieren.", + "Live channel groups": "Live-Kanalgruppen", + "Make smart channel": "Erstellen Sie einen intelligenten Kanal", + "Minimum delay between provider requests, in milliseconds.": "Minimale Verzögerung zwischen Anbieteranfragen in Millisekunden.", + "Mixed playlists not supported": "Gemischte Wiedergabelisten werden nicht unterstützt", + "Not yet probed — run a probe on this channel to capture stream details.": "Noch nicht geprüft – führen Sie eine Prüfung auf diesem Kanal durch, um Stream-Details zu erfassen.", + "Off": "Aus", + "Only live channels in these groups will be accessible. Leave empty to allow all live groups.": "Nur Live-Kanäle in diesen Gruppen sind zugänglich. Lassen Sie das Feld leer, um alle Live-Gruppen zuzulassen.", + "Only series in these categories will be accessible. Leave empty to allow all series categories.": "Nur Serien in diesen Kategorien sind zugänglich. Lassen Sie das Feld leer, um alle Serienkategorien zuzulassen.", + "Only VOD channels in these groups will be accessible. Leave empty to allow all VOD groups.": "Nur VOD-Kanäle in diesen Gruppen sind zugänglich. Lassen Sie das Feld leer, um alle VOD-Gruppen zuzulassen.", + "Paste cookies.txt content for authenticated streams (e.g. YouTube members-only, age-gated). Get cookies using a browser extension like \"Get cookies.txt LOCALLY\".": "Fügen Sie Cookies.txt-Inhalte für authentifizierte Streams ein (z. B. nur für YouTube-Mitglieder, mit Altersbeschränkung). Holen Sie sich Cookies mit einer Browsererweiterung wie „Cookies.txt LOKAL abrufen“.", + "Periodic rescoring": "Regelmäßige Neubewertung", + "Probe ran but returned no usable details.": "Die Probe wurde ausgeführt, lieferte jedoch keine verwertbaren Details zurück.", + "Probing is disabled for this channel.": "Die Prüfung ist für diesen Kanal deaktiviert.", + "Quality & Options": "Qualität & Optionen", + "Quality selector (best, worst, 720p, etc.) followed by optional Streamlink flags. Example: best --hls-live-edge 3": "Qualitätsauswahl (Beste, Schlechteste, 720p usw.), gefolgt von optionalen Streamlink-Flags. Beispiel: best --hls-live-edge 3", + "Queue a one-off failover rescore for this playlist? Stale channels will be re-probed (subject to the configured staleness window) and failovers re-sorted so the highest-quality source sits first.": "Einen einmaligen Failover-Rescore für diese Playlist in die Warteschlange stellen? Veraltete Kanäle werden erneut überprüft (vorbehaltlich des konfigurierten Veraltungsfensters) und Failovers neu sortiert, sodass die Quelle mit der höchsten Qualität zuerst angezeigt wird.", + "Ranked sources": "Bewertete Quellen", + "Re-probe channels older than (days)": "Kanäle, die älter als (Tage) sind, erneut prüfen", + "Re-score failovers now": "Jetzt Failover neu bewerten", + "Re-score this channel's failovers against current stream stats. Stale channels may be re-probed (subject to the playlist's staleness window). The master channel is never altered — only the failover order changes.": "Bewerten Sie die Failovers dieses Kanals erneut anhand der aktuellen Stream-Statistiken. Veraltete Kanäle können erneut überprüft werden (vorbehaltlich des Veraltungsfensters der Wiedergabeliste). Der Master-Kanal wird nie geändert – nur die Failover-Reihenfolge ändert sich.", + "Rescore": "Neubewertung", + "Rescore now": "Jetzt neu bewerten", + "Rescoring queued": "Neubewertung in der Warteschlange", + "Schedule a recurring rescore for every failover group in this playlist. Master channels are never promoted or replaced — only failover sort order changes. Off = rescore manually only via the \"Rescore now\" button.": "Planen Sie eine wiederkehrende Neubewertung für jede Failover-Gruppe in dieser Playlist. Master-Kanäle werden niemals hochgestuft oder ersetzt – nur die Failover-Sortierreihenfolge wird geändert. Aus = Nur manuell neu bewerten über die Schaltfläche „Jetzt neu bewerten“.", + "Search series categories": "Suchen Sie nach Serienkategorien", + "Select series categories": "Wählen Sie Serienkategorien aus", + "Series categories": "Serienkategorien", + "Set EPG shift": "Stellen Sie die EPG-Verschiebung ein", + "Set the EPG time shift (tvg-shift) for the selected channels. This shifts the EPG program schedule by the specified number of hours.": "Stellen Sie die EPG-Zeitverschiebung (tvg-shift) für die ausgewählten Kanäle ein. Dadurch wird der EPG-Programmplan um die angegebene Stundenzahl verschoben.", + "Shift the EPG time for the selected channels by this many hours. Use values like -2, -1, 0, 1, 2, etc. Use 0 to reset.": "Verschieben Sie die EPG-Zeit für die ausgewählten Kanäle um diese viele Stunden. Verwenden Sie Werte wie -2, -1, 0, 1, 2 usw. Verwenden Sie 0 zum Zurücksetzen.", + "Smart": "Schlau", + "Smart channel": "Intelligenter Kanal", + "Smart channel created": "Smart-Kanal erstellt", + "Smart channels cannot be sources": "Intelligente Kanäle können keine Quellen sein", + "Smart channels must be created from sources within a single playlist. Narrow your selection and try again.": "Intelligente Kanäle müssen aus Quellen innerhalb einer einzelnen Playlist erstellt werden. Grenzen Sie Ihre Auswahl ein und versuchen Sie es erneut.", + "Smart channel without failovers won't stream.": "Smart Channel ohne Failover wird nicht gestreamt.", + "Smart channel — streams the highest-ranked failover automatically": "Intelligenter Kanal: Streamt automatisch das höchstrangige Failover", + "Some channels were skipped": "Einige Kanäle wurden übersprungen", + "Sort now": "Jetzt sortieren", + "Stream Backend": "Stream-Backend", + "The container format FFmpeg will produce. Must match the -f muxer argument in your FFmpeg template above.": "Das Containerformat FFmpeg wird erzeugt. Muss mit dem Argument -f muxer in Ihrer FFmpeg-Vorlage oben übereinstimmen.", + "The container format Streamlink will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format Streamlink actually produces for the selected quality.": "Das Containerformat Streamlink wird ausgegeben. Dadurch wird die URL-Erweiterung (z. B. .ts, .mp4) festgelegt, damit Spieler wissen, wie sie mit dem Stream umgehen sollen. Muss mit dem Format übereinstimmen, das Streamlink tatsächlich für die ausgewählte Qualität erzeugt.", + "The container format yt-dlp will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format produced by your yt-dlp format selector.": "Es wird das Containerformat yt-dlp ausgegeben. Dadurch wird die URL-Erweiterung (z. B. .ts, .mp4) festgelegt, damit Spieler wissen, wie sie mit dem Stream umgehen sollen. Muss mit dem von Ihrem yt-dlp-Formatselektor erstellten Format übereinstimmen.", + "This URL must be reachable from your Plex server. Uses the Proxy URL Override or APP_URL. Adjust if Plex reaches m3u-editor via a different address (e.g. Docker internal IP).": "Diese URL muss von Ihrem Plex-Server aus erreichbar sein. Verwendet die Proxy-URL-Überschreibung oder APP_URL. Passen Sie an, ob Plex den m3u-editor über eine andere Adresse erreicht (z. B. die interne IP von Docker).", + "Virtual channel title": "Titel des virtuellen Kanals", + "VOD groups": "VOD-Gruppen", + "Weekly": "Wöchentlich", + "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs and other stream processing tasks.": "Wenn diese Option aktiviert ist, wird eine Verzögerung zwischen Anfragen an den Anbieter während Playlist- und EPG-Synchronisierungen und anderen Stream-Verarbeitungsaufgaben hinzugefügt.", + "When enabled, the selected source channels will be disabled after being attached as failovers. They'll only be reachable via the new smart channel.": "Wenn diese Option aktiviert ist, werden die ausgewählten Quellkanäle deaktiviert, nachdem sie als Failover hinzugefügt wurden. Sie werden nur über den neuen Smart-Kanal erreichbar sein.", + "When enabled, TMDB metadata fetching will automatically create new groups (for VOD) and categories (for Series) based on TMDB genres. When disabled, only existing groups/categories will be used.": "Wenn die Funktion zum Abrufen von TMDB-Metadaten aktiviert ist, werden automatisch neue Gruppen (für VOD) und Kategorien (für Serien) basierend auf TMDB-Genres erstellt. Bei Deaktivierung werden nur vorhandene Gruppen/Kategorien verwendet.", + "XMLTV EPG guide URL. Must also be reachable from Plex. Adjust if needed.": "URL des XMLTV-EPG-Leitfadens. Muss auch von Plex aus erreichbar sein. Bei Bedarf anpassen.", + "Yes, rescore now": "Ja, jetzt neu bewerten", + "your-api-key-here": "Ihr-API-Schlüssel-hier", + "Your selection includes one or more existing smart channels — pick raw provider channels instead, or remove the smart-channel flag first.": "Ihre Auswahl umfasst einen oder mehrere vorhandene Smart-Kanäle. Wählen Sie stattdessen reine Anbieterkanäle aus oder entfernen Sie zuerst die Smart-Channel-Flagge.", + "yt-dlp format selector followed by optional flags. Example: bestvideo+bestaudio/best --no-playlist": "yt-dlp-Formatauswahl, gefolgt von optionalen Flags. Beispiel: bestvideo+bestaudio/best --no-playlist" } diff --git a/lang/es.json b/lang/es.json index 266f4ea1c..6d3481ce8 100644 --- a/lang/es.json +++ b/lang/es.json @@ -3,9 +3,9 @@ "# Netscape HTTP Cookie File\\n.youtube.com\\tTRUE\\t/\\tTRUE\\t0\\tCOOKIE_NAME\\tCOOKIE_VALUE": "# Netscape HTTP Cookie File\\n.youtube.com\\tTRUE\\t/\\tTRUE\\t0\\tCOOKIE_NAME\\tCOOKIE_VALUE", "-": "-", ".strm files are being synced for current category series. Only enabled series will be synced.": "Los archivos .strm se están sincronizando para la serie de categorías actual. Solo se sincronizarán las series habilitadas.", - ".strm files are being synced for selected VOD channels": "Los archivos .strm se están sincronizando para canales VOD seleccionados", ".strm files are being synced for selected category series. Only enabled series will be synced.": "Los archivos .strm se están sincronizando para las series de categorías seleccionadas. Solo se sincronizarán las series habilitadas.", ".strm files are being synced for selected series": "Los archivos .strm se están sincronizando para las series seleccionadas", + ".strm files are being synced for selected VOD channels": "Los archivos .strm se están sincronizando para canales VOD seleccionados", ".strm files are being synced for the group channels. Only enabled channels will be synced.": "Los archivos .strm se están sincronizando para los canales del grupo. Sólo se sincronizarán los canales habilitados.", ".strm files are being synced for the selected group channels. Only enabled channels will be synced.": "Los archivos .strm se están sincronizando para los canales del grupo seleccionados. Sólo se sincronizarán los canales habilitados.", "/Series": "/Serie", @@ -13,10 +13,9 @@ "0": "0", "0 */6 * * *": "0 */6 * * *", "0 0 * * *": "0 0 * * *", - "01:30:00": "01:30:00", "1": "1", "1-1000, higher = more preferred": "1-1000, mayor = más preferido", - "10 based rating of the VOD content.": "Clasificación basada en 10 del contenido VOD.", + "01:30:00": "01:30:00", "2": "2", "3": "3", "4": "4", @@ -27,30 +26,14 @@ "8.7": "8.7", "9": "9", "10": "10", + "10 based rating of the VOD content.": "Clasificación basada en 10 del contenido VOD.", + ":count smart channel(s) were skipped — smart channels can't be used as failovers themselves.": ":count se omitieron los canales inteligentes: los canales inteligentes no se pueden utilizar como conmutación por error en sí mismos.", ":name installed": ":name instalado", ":name updated": ":name actualizado", - "A SHA-256 checksum is required to stage this update.": "Se requiere una suma de comprobación SHA-256 para preparar esta actualización.", - "A channel dedicated to classic movies from the golden age of cinema": "Un canal dedicado a películas clásicas de la época dorada del cine.", - "A descriptive name for this post process.": "Un nombre descriptivo para este proceso de publicación.", - "A descriptive name for this stream file setting profile": "Un nombre descriptivo para este perfil de configuración de archivo continuo", - "A descriptive name for this transcoding profile (e.g., \"720p Standard\", \"1080p High Quality\")": "Un nombre descriptivo para este perfil de transcodificación (por ejemplo, \"Estándar 720p\", \"Alta calidad 1080p\")", - "A new version is available": "Una nueva versión está disponible", - "A recommendation based on the current plugin state.": "Una recomendación basada en el estado actual del complemento.", - "A test email will be sent to this address using the entered SMTP settings.": "Se enviará un correo electrónico de prueba a esta dirección utilizando la configuración SMTP ingresada.", - "AI Copilot": "Copiloto de IA", - "AI Provider": "Proveedor de IA", - "API": "API", - "API Docs": "Documentos API", - "API Key": "Clave API", - "API Key Required": "Clave API requerida", - "API Key/Token": "Clave API/Token", - "API Settings": "Configuración de API", - "API Token Created": "Token API creado", - "API Tokens": "Fichas API", - "API docs": "Documentos API", - "API key": "clave API", + "aac": "acac", "Accepted Values": "Valores aceptados", "Access your media server content directly within M3U Editor by integrating with popular media servers like Emby and Jellyfin, or directly via mount points. An associated playlist will be automatically created for each integration to manage content like you would for any other playlist.": "Acceda al contenido de su servidor de medios directamente desde M3U Editor integrándolo con servidores de medios populares como Emby y Jellyfin, o directamente a través de puntos de montaje. Se creará automáticamente una lista de reproducción asociada para cada integración para administrar el contenido como lo haría con cualquier otra lista de reproducción.", + "A channel dedicated to classic movies from the golden age of cinema": "Un canal dedicado a películas clásicas de la época dorada del cine.", "Action, Drama, Comedy": "Acción, Drama, Comedia", "Actions": "Comportamiento", "Active Sessions": "Sesiones activas", @@ -59,40 +42,46 @@ "Activity stream": "Flujo de actividad", "Actor 1, Actor 2, Actor 3": "Actor 1, Actor 2, Actor 3", "Actors": "actores", - "Add Episodes": "Agregar episodios", - "Add Lineup to Account": "Agregar alineación a la cuenta", - "Add Media Server": "Agregar servidor de medios", - "Add Movies": "Agregar películas", - "Add Quick Action": "Agregar acción rápida", - "Add Series": "Agregar serie", + "A custom channel was created with the selected sources attached as failovers, ranked by quality.": "Se creó un canal personalizado con las fuentes seleccionadas adjuntas como conmutación por error, clasificadas por calidad.", "Add a delay between requests to providers to avoid rate limiting.": "Agregue un retraso entre las solicitudes a los proveedores para evitar la limitación de tarifas.", "Add and manage authentication.": "Agregue y administre la autenticación.", "Add any custom headers to include when streaming a channel/episode.": "Agregue encabezados personalizados para incluirlos al transmitir un canal/episodio.", "Add as failover": "Agregar como conmutación por error", + "Add at least one failover channel below — the smart channel takes its stream URL from the highest-ranked failover at stream time.": "Agregue al menos un canal de conmutación por error a continuación: el canal inteligente toma su URL de transmisión de la conmutación por error mejor clasificada en el momento de la transmisión.", "Add auto-add rule": "Agregar regla de adición automática", "Add available subtitle languages for this content.": "Agregue los idiomas de subtítulos disponibles para este contenido.", "Add backdrop/poster image URLs for this content.": "Agregue URL de imágenes de fondo/póster para este contenido.", "Add conditions that must be met for this post process to execute. All conditions must be true for execution.": "Agregue las condiciones que deben cumplirse para que se ejecute este proceso de publicación. Todas las condiciones deben ser verdaderas para la ejecución.", + "Added Channels": "Canales agregados", + "Added Groups": "Grupos agregados", + "Added to category": "Agregado a la categoría", + "Added to group": "Agregado al grupo", + "Added to the title folder name": "Agregado al nombre de la carpeta del título.", + "Add Episodes": "Agregar episodios", "Add extension...": "Agregar extensión...", "Add failovers now": "Agregue conmutación por error ahora", + "Additional Failover Playlists (optional)": "Listas de reproducción de conmutación por error adicionales (opcional)", + "Additional Profiles": "Perfiles adicionales", "Add keyword...": "Añadir palabra clave...", + "Add Lineup to Account": "Agregar alineación a la cuenta", + "Add Media Server": "Agregar servidor de medios", + "Add Movies": "Agregar películas", "Add multiple EPG sources and map them to your playlists. Multiple EPG sources can be mapped to the same playlist, and the guide data will be merged together.": "Agregue múltiples fuentes de EPG y asígnelas a sus listas de reproducción. Se pueden asignar varias fuentes de EPG a la misma lista de reproducción y los datos de la guía se fusionarán.", "Add new API Token": "Agregar nuevo token API", "Add or create additional authentication methods for this playlist.": "Agregue o cree métodos de autenticación adicionales para esta lista de reproducción.", "Add pattern (e.g. \"DE • \" or \"EN |\")": "Agregar patrón (por ejemplo, \"DE • \" o \"EN |\")", + "Add Quick Action": "Agregar acción rápida", + "Adds an uninstall() method for custom cleanup logic beyond what the manifest declares.": "Agrega un método uninstall() para una lógica de limpieza personalizada más allá de lo que declara el manifiesto.", + "Add Series": "Agregar serie", "Add the selected channel(s) to the chosen channel as failover sources.": "Agregue los canales seleccionados al canal elegido como fuentes de conmutación por error.", "Add to category": "Añadir a categoría", "Add to custom category": "Agregar a categoría personalizada", "Add to custom group": "Agregar al grupo personalizado", "Add to group": "Agregar al grupo", - "Added Channels": "Canales agregados", - "Added Groups": "Grupos agregados", - "Added to category": "Agregado a la categoría", - "Added to group": "Agregado al grupo", - "Added to the title folder name": "Agregado al nombre de la carpeta del título.", - "Additional Failover Playlists (optional)": "Listas de reproducción de conmutación por error adicionales (opcional)", - "Additional Profiles": "Perfiles adicionales", - "Adds an uninstall() method for custom cleanup logic beyond what the manifest declares.": "Agrega un método uninstall() para una lógica de limpieza personalizada más allá de lo que declara el manifiesto.", + "A descriptive name for this post process.": "Un nombre descriptivo para este proceso de publicación.", + "A descriptive name for this profile (e.g., \"720p Standard\", \"Twitch Stream\")": "Un nombre descriptivo para este perfil (por ejemplo, \"Estándar 720p\", \"Transmisión de Twitch\")", + "A descriptive name for this stream file setting profile": "Un nombre descriptivo para este perfil de configuración de archivo continuo", + "A descriptive name for this transcoding profile (e.g., \"720p Standard\", \"1080p High Quality\")": "Un nombre descriptivo para este perfil de transcodificación (por ejemplo, \"Estándar 720p\", \"Alta calidad 1080p\")", "Admin": "Administración", "Admin viewers cannot be deleted": "Los espectadores administradores no se pueden eliminar", "Advanced": "Avanzado", @@ -100,99 +89,117 @@ "Advanced Settings": "Configuración avanzada", "Age Rating": "Clasificación por edad", "Age rating or classification.": "Clasificación o clasificación por edades.", + "AI Copilot": "Copiloto de IA", + "AI Provider": "Proveedor de IA", "All": "Todo", "All Activity": "Toda la actividad", "All Attributes": "Todos los atributos", "All EPGs": "Todas las EPG", "All Live Channels": "Todos los canales en vivo", - "All Playlists": "Todas las listas de reproducción", - "All Runs": "Todas las carreras", - "All Series": "Todas las series", - "All VOD Channels": "Todos los canales VOD", - "All streams": "Todas las transmisiones", "Allow access to API docs": "Permitir el acceso a documentos API", + "Allowed domains": "Dominios permitidos", + "Allowed live groups": "Grupos en vivo permitidos", + "Allowed Playlist Domains": "Dominios de listas de reproducción permitidos", + "Allowed series categories": "Categorías de series permitidas", + "Allowed VOD groups": "Grupos VOD permitidos", "Allow mapping EPG to selected channels when running EPG mapping jobs.": "Permitir asignar EPG a canales seleccionados al ejecutar trabajos de asignación de EPG.", "Allow mapping EPG to this channel when running EPG mapping jobs.": "Permitir asignar EPG a este canal cuando se ejecutan trabajos de asignación de EPG.", "Allow merging for selected channels when running \"Merge Same ID\" jobs.": "Permitir la fusión de canales seleccionados cuando se ejecutan trabajos de \"Fusionar el mismo ID\".", "Allow probing this channel when running playlist channel probe jobs.": "Permitir sondear este canal cuando se ejecutan trabajos de sondeo de canales de lista de reproducción.", "Allow queue manager access": "Permitir el acceso al administrador de colas", "Allow this channel to be merged during \"Merge Same ID\" jobs.": "Permita que este canal se combine durante los trabajos \"Fusionar el mismo ID\".", - "Allowed Playlist Domains": "Dominios de listas de reproducción permitidos", - "Allowed domains": "Dominios permitidos", + "All Playlists": "Todas las listas de reproducción", + "All Runs": "Todas las carreras", + "All Series": "Todas las series", + "All streams": "Todas las transmisiones", + "All VOD Channels": "Todos los canales VOD", "Also check VOD channel links in addition to live channels.": "Consulte también los enlaces de los canales VOD además de los canales en vivo.", - "Alternative URLs": "URL alternativas", - "Alternative Xtream API URLs. If the primary URL fails during a sync, these will be tried in order (same credentials are used for all URLs).": "URL de API de Xtream alternativas. Si la URL principal falla durante una sincronización, se intentarán en orden (se utilizan las mismas credenciales para todas las URL).", "Alternative password if not specified in URL. Not commonly used.": "Contraseña alternativa si no se especifica en la URL. No se usa comúnmente.", "Alternative port if not specified in URL. Not commonly used.": "Puerto alternativo si no se especifica en la URL. No se usa comúnmente.", "Alternative release date field.": "Campo de fecha de lanzamiento alternativa.", + "Alternative URLs": "URL alternativas", + "Alternative Xtream API URLs. If the primary URL fails during a sync, these will be tried in order (same credentials are used for all URLs).": "URL de API de Xtream alternativas. Si la URL principal falla durante una sincronización, se intentarán en orden (se utilizan las mismas credenciales para todas las URL).", "An administrator still needs to trust this plugin. Review the declared permissions, owned schema, and file integrity before enabling it.": "Un administrador aún necesita confiar en este complemento. Revise los permisos declarados, el esquema de propiedad y la integridad del archivo antes de habilitarlo.", + "and how to use it": "y como usarlo", + "A new version is available": "Una nueva versión está disponible", + "API": "API", + "API Docs": "Documentos API", + "API docs": "Documentos API", + "API Key": "Clave API", + "API key": "clave API", + "API Key/Token": "Clave API/Token", + "API Key Required": "Clave API requerida", + "API Settings": "Configuración de API", + "API Token Created": "Token API creado", + "API Tokens": "Fichas API", "Application Timezone": "Zona horaria de la aplicación", - "Apply TMDB ID to": "Aplicar ID de TMDB a", - "Apply URL": "Aplicar URL", - "Apply a single logo URL to all selected networks. Leave empty to remove logos.": "Aplique una única URL de logotipo a todas las redes seleccionadas. Déjelo vacío para eliminar logotipos.", - "Apply a single logo override URL to all selected VOD channels. Leave empty to remove overrides.": "Aplique una única URL de anulación de logotipo a todos los canales VOD seleccionados. Déjelo vacío para eliminar las anulaciones.", "Apply a single logo override URL to all selected channels. Leave empty to remove overrides.": "Aplique una única URL de anulación de logotipo a todos los canales seleccionados. Déjelo vacío para eliminar las anulaciones.", + "Apply a single logo override URL to all selected VOD channels. Leave empty to remove overrides.": "Aplique una única URL de anulación de logotipo a todos los canales VOD seleccionados. Déjelo vacío para eliminar las anulaciones.", + "Apply a single logo URL to all selected networks. Leave empty to remove logos.": "Aplique una única URL de logotipo a todas las redes seleccionadas. Déjelo vacío para eliminar logotipos.", "Apply a single poster URL to all selected series. Leave empty to remove custom posters.": "Aplicar una única URL de póster a todas las series seleccionadas. Déjelo vacío para eliminar carteles personalizados.", "Apply find and replace to all EPGs? If disabled, it will only apply to the selected EPG.": "¿Aplicar buscar y reemplazar a todas las EPG? Si está deshabilitado, solo se aplicará a la EPG seleccionada.", - "Apply find and replace to all Series? If disabled, it will only apply to the selected Series.": "¿Aplicar buscar y reemplazar a todas las series? Si está deshabilitado, solo se aplicará a la Serie seleccionada.", "Apply find and replace to all playlists? If disabled, it will only apply to the selected playlist.": "¿Aplicar buscar y reemplazar a todas las listas de reproducción? Si está deshabilitado, solo se aplicará a la lista de reproducción seleccionada.", + "Apply find and replace to all Series? If disabled, it will only apply to the selected Series.": "¿Aplicar buscar y reemplazar a todas las series? Si está deshabilitado, solo se aplicará a la Serie seleccionada.", "Apply reset to all EPGs? If disabled, it will only apply to the selected EPG.": "¿Aplicar reinicio a todas las EPG? Si está deshabilitado, solo se aplicará a la EPG seleccionada.", "Apply reset to all playlists? If disabled, it will only apply to the selected playlist.": "¿Aplicar reinicio a todas las listas de reproducción? Si está deshabilitado, solo se aplicará a la lista de reproducción seleccionada.", + "Apply TMDB ID to": "Aplicar ID de TMDB a", + "Apply URL": "Aplicar URL", "Archive Path": "Ruta de archivo", - "Are you sure you want to clear all selected VOD groups?": "¿Está seguro de que desea borrar todos los grupos VOD seleccionados?", + "A recommendation based on the current plugin state.": "Una recomendación basada en el estado actual del complemento.", "Are you sure you want to clear all selected categories?": "¿Está seguro de que desea borrar todas las categorías seleccionadas?", "Are you sure you want to clear all selected live groups?": "¿Estás seguro de que deseas borrar todos los grupos en vivo seleccionados?", + "Are you sure you want to clear all selected series categories?": "¿Está seguro de que desea borrar todas las categorías de series seleccionadas?", + "Are you sure you want to clear all selected VOD groups?": "¿Está seguro de que desea borrar todos los grupos VOD seleccionados?", "Are you sure you want to delete the selected VOD channels? This action cannot be undone.": "¿Está seguro de que desea eliminar los canales VOD seleccionados? Esta acción no se puede deshacer.", - "Are you sure you want to delete this VOD channel? This action cannot be undone.": "¿Estás seguro de que deseas eliminar este canal VOD? Esta acción no se puede deshacer.", "Are you sure you want to delete this series? This will delete all episodes and seasons for this series. This action cannot be undone.": "¿Estás seguro de que deseas eliminar esta serie? Esto eliminará todos los episodios y temporadas de esta serie. Esta acción no se puede deshacer.", "Are you sure you want to delete this token? This action cannot be undone.": "¿Está seguro de que desea eliminar este token? Esta acción no se puede deshacer.", + "Are you sure you want to delete this VOD channel? This action cannot be undone.": "¿Estás seguro de que deseas eliminar este canal VOD? Esta acción no se puede deshacer.", "Are you sure you want to manually trigger this EPG mapping to run again? This will not modify the \"Recurring\" setting.": "¿Está seguro de que desea activar manualmente esta asignación de EPG para que se ejecute nuevamente? Esto no modificará la configuración \"Recurrente\".", "Are you sure you want to manually trigger this scrubber to run? This will not modify the \"Recurring\" setting.": "¿Está seguro de que desea activar manualmente la ejecución de este depurador? Esto no modificará la configuración \"Recurrente\".", "Artifact": "Artefacto", + "A SHA-256 checksum is required to stage this update.": "Se requiere una suma de comprobación SHA-256 para preparar esta actualización.", "Asset": "Activo", "Asset deleted": "Activo eliminado", "Asset file": "Archivo de activos", + "Assets": "Activos", "Asset scan complete": "Escaneo de activos completo", "Asset uploaded": "Activo subido", - "Assets": "Activos", "Assign Auth to Playlist": "Asignar autenticación a la lista de reproducción", + "Assigned Auths": "Autenticaciones asignadas", + "Assigned To": "Asignado a", + "Assigned to Playlist": "Asignado a la lista de reproducción", "Assign priority weights to specific groups. Higher weight = more preferred as master. Leave empty for default behavior.": "Asigne ponderaciones de prioridad a grupos específicos. Mayor peso = más preferido como maestro. Déjelo vacío para ver el comportamiento predeterminado.", "Assign processing to item": "Asignar procesamiento al artículo", "Assign this auth to a specific playlist. Each auth can only be assigned to one playlist at a time.": "Asigne esta autenticación a una lista de reproducción específica. Cada autenticación solo se puede asignar a una lista de reproducción a la vez.", "Assign this network to a playlist for M3U/EPG output. Create one if none exist.": "Asigne esta red a una lista de reproducción para salida M3U/EPG. Cree uno si no existe ninguno.", "Assign to a network playlist for M3U/EPG output.": "Asigne a una lista de reproducción de red para salida M3U/EPG.", - "Assigned Auths": "Autenticaciones asignadas", - "Assigned To": "Asignado a", - "Assigned to Playlist": "Asignado a la lista de reproducción", + "A test email will be sent to this address using the entered SMTP settings.": "Se enviará un correo electrónico de prueba a esta dirección utilizando la configuración SMTP ingresada.", "Audio Bitrate": "Velocidad de bits de audio", - "Audio Codec": "Códec de audio", "Audio bitrate": "tasa de bits de audio", "Audio channels": "Canales de audio", + "Audio Codec": "Códec de audio", "Audio codec": "Códec de audio", "Audio language": "Idioma de audio", "Audio level (in dB) below which audio is considered silent. Default: -50 dB.": "Nivel de audio (en dB) por debajo del cual el audio se considera silencioso. Valor predeterminado: -50 dB.", "Auth": "autenticación", "Auth (optional)": "Autenticación (opcional)", - "Auth Name": "Nombre de autenticación", - "Auth for My Playlist": "Autenticación para mi lista de reproducción", "Authentication Option": "Opción de autenticación", - "Auto Enable": "Habilitación automática", - "Auto Enable New Channels": "Habilitar automáticamente nuevos canales", - "Auto Sync": "Sincronización automática", - "Auto channel number increment": "Incremento automático del número de canal", - "Auto enable newly added category series": "Habilitar automáticamente series de categorías recién agregadas", - "Auto enable newly added group channels": "Habilitar automáticamente los canales de grupo recién agregados", - "Auto scan on EPG cache: disabled": "Escaneo automático en caché EPG: deshabilitado", - "Auto scan on EPG cache: enabled": "Escaneo automático en caché EPG: habilitado", - "Auto sync and scheduling options": "Opciones de programación y sincronización automática", - "Auto trigger": "Disparador automático", + "Auth for My Playlist": "Autenticación para mi lista de reproducción", + "Auth Name": "Nombre de autenticación", "Auto-Add to Custom Playlist": "Auto-agregar a lista personalizada", + "Auto-create groups/categories from TMDB genres": "Crear automáticamente grupos/categorías a partir de géneros TMDB", "Auto-Enable Settings": "Configuración de habilitación automática", "Auto-Fetch Metadata": "Obtener metadatos automáticamente", - "Auto-Merge Processing": "Procesamiento de fusión automática", "Auto-lookup on metadata fetch": "Búsqueda automática en la recuperación de metadatos", + "Auto-Merge Processing": "Procesamiento de fusión automática", "Auto-regenerate Schedule": "Programación de regeneración automática", + "Auto-streams the highest-ranked failover. URL field is locked while on. Custom channels only.": "Transmite automáticamente la conmutación por error mejor clasificada. El campo URL está bloqueado mientras está activado. Solo canales personalizados.", "Auto/Default": "Automático/predeterminado", + "Auto channel number increment": "Incremento automático del número de canal", + "Auto Enable": "Habilitación automática", + "Auto Enable New Channels": "Habilitar automáticamente nuevos canales", + "Auto enable newly added category series": "Habilitar automáticamente series de categorías recién agregadas", + "Auto enable newly added group channels": "Habilitar automáticamente los canales de grupo recién agregados", "Automated backups": "Copias de seguridad automatizadas", "Automatically assign sort number based on playlist order": "Asigne automáticamente un número de clasificación según el orden de la lista de reproducción", "Automatically disable channels whose stream URL is unreachable.": "Deshabilitar automáticamente los canales cuya URL de stream no sea accesible.", @@ -204,30 +211,35 @@ "Automatically regenerate when schedule is about to expire.": "Regenerar automáticamente cuando el programa esté a punto de expirar.", "Automatically run this scrubber after each playlist sync.": "Ejecute automáticamente este depurador después de cada sincronización de lista de reproducción.", "Automatically set when selecting a category.": "Se establece automáticamente al seleccionar una categoría.", - "Automatically sync EPG": "Sincronizar automáticamente EPG", "Automatically sync content on schedule": "Sincronizar contenido automáticamente según lo programado", + "Automatically sync EPG": "Sincronizar automáticamente EPG", "Automatically sync merged EPG": "Sincronizar automáticamente la EPG fusionada", "Automatically sync playlist": "Sincronizar automáticamente la lista de reproducción", "Automatically trigger a library scan on your media server after .strm files are synced": "Active automáticamente un escaneo de biblioteca en su servidor de medios después de sincronizar los archivos .strm", "Automatically trigger failover when a stream\\'s audio goes silent. Disabled by default.": "Activa automáticamente la conmutación por error cuando el audio de una transmisión se silencia. Deshabilitado por defecto.", "Automation": "Automatización", + "Auto scan on EPG cache: disabled": "Escaneo automático en caché EPG: deshabilitado", + "Auto scan on EPG cache: enabled": "Escaneo automático en caché EPG: habilitado", + "Auto Sync": "Sincronización automática", + "Auto sync and scheduling options": "Opciones de programación y sincronización automática", + "Auto trigger": "Disparador automático", "Availability": "Disponibilidad", "Available Actions": "Acciones disponibles", "Available Streams": "Transmisiones disponibles", "Avatar": "Avatar", + "Backdrop Images": "Imágenes de fondo", + "Backend": "backend", "Back to Playlist": "Volver a la lista de reproducción", "Back to Plugin": "Volver al complemento", "Back to Scrubber": "Volver a Depurador", "Back to Scrubbers": "Volver a Depuradores", "Back to Series": "Volver a la serie", + "Back to series": "volver a la serie", "Back to Sync Statuses": "Volver a estados de sincronización", "Back to VOD": "Volver a VOD", - "Back to series": "volver a la serie", - "Backdrop Images": "Imágenes de fondo", "Backup & Restore": "Copia de seguridad y restauración", "Backup Account": "Cuenta de respaldo", "Backup Before Sync": "Copia de seguridad antes de sincronizar", - "Backup Schedule": "Programación de respaldo", "Backup file": "Archivo de copia de seguridad", "Backup file (.ZIP files only)": "Archivo de copia de seguridad (solo archivos .ZIP)", "Backup file has been uploaded, you can now restore it if needed.": "Se ha subido el archivo de copia de seguridad, ahora puede restaurarlo si es necesario.", @@ -237,13 +249,14 @@ "Backup is being restored": "Se está restaurando la copia de seguridad", "Backup is being restored in the background. Depending on the size of the backup, this could take a while.": "La copia de seguridad se está restaurando en segundo plano. Dependiendo del tamaño de la copia de seguridad, esto podría llevar un tiempo.", "Backups": "Copias de seguridad", + "Backup Schedule": "Programación de respaldo", "Bare scaffold": "andamio desnudo", "Base URL": "URL base", "Bit depth": "Profundidad de bits", "Bitrate": "tasa de bits", - "Block Plugin": "Complemento de bloque", "Blocked": "Obstruido", "Blocking disables the plugin immediately and prevents execution until an administrator trusts it again.": "El bloqueo desactiva el complemento inmediatamente y evita su ejecución hasta que un administrador vuelva a confiar en él.", + "Block Plugin": "Complemento de bloque", "Body": "Cuerpo", "Body content for the email (optional).": "Contenido del cuerpo del correo electrónico (opcional).", "Brief description...": "Breve descripción...", @@ -256,70 +269,72 @@ "Broadcast will wait until this time to start. Leave empty to start immediately.": "La transmisión esperará hasta esta hora para comenzar. Déjelo vacío para comenzar inmediatamente.", "Browse Library": "Explorar biblioteca", "Bulk Actions": "Acciones masivas", - "Bulk VOD actions": "Acciones VOD masivas", "Bulk channel actions": "Acciones masivas del canal", "Bulk series actions": "Acciones de series masivas", + "Bulk VOD actions": "Acciones VOD masivas", "Bundled plugins cannot be deleted.": "Los complementos incluidos no se pueden eliminar.", "Bypass Provider Connection Limits": "Omitir los límites de conexión del proveedor", - "CRON Example": "Ejemplo de CRON", - "Cache Metadata": "Metadatos de caché", - "Cache Progress": "Progreso de la caché", "Cached": "En caché", "Cached logos removed": "Se eliminaron los logotipos almacenados en caché", + "Cache Metadata": "Metadatos de caché", + "Cache Progress": "Progreso de la caché", "Call webhooks, or run local scripts, after playlist sync completion.": "Llame a webhooks o ejecute scripts locales una vez completada la sincronización de la lista de reproducción.", "Cancel": "Cancelar", + "Cancellation requested": "Cancelación solicitada", + "Cancelled": "Cancelado", "Cancel Run": "Cancelar ejecución", "Cancel the in-progress scrubber run.": "Cancele la ejecución del depurador en curso.", "Cancel this scrubber run? The current run will be abandoned. Any channels already disabled during this run will remain disabled.": "¿Cancelar esta ejecución de depuración? La ejecución actual será abandonada. Cualquier canal que ya esté deshabilitado durante esta ejecución permanecerá deshabilitado.", - "Cancellation requested": "Cancelación solicitada", - "Cancelled": "Cancelado", "Capabilities": "Capacidades", "Capability Map": "Mapa de Capacidad", "Cast": "Elenco", "Catchup": "Ketchup", + "Catchup Source": "Fuente de actualización", "Categories": "Categorías", "Categories to import": "Categorías para importar", "Category": "Categoría", "Category Name": "Nombre de categoría", "Category Settings": "Configuración de categoría", + "Category sort order": "Orden de clasificación de categorías", "Ch #": "Capítulo #", "Channel": "Canal", "Channel Attributes to Copy": "Atributos del canal para copiar", "Channel Details": "Detalles del canal", + "Channel Filter (optional)": "Filtro de canales (opcional)", + "Channel group as category": "Grupo de canales como categoría", "Channel ID": "ID de canal", + "Channel mapping removed for the selected channels.": "Se eliminó la asignación de canales para los canales seleccionados.", + "Channel mapping removed for the selected Playlist.": "Se eliminó la asignación de canales para la lista de reproducción seleccionada.", + "Channel mapping started, you will be notified when the process is complete.": "Se inició el mapeo de canales, se le notificará cuando se complete el proceso.", "Channel Match Attributes": "Atributos de coincidencia de canales", + "Channel merge started": "Se inició la fusión de canales", "Channel Name": "Nombre del canal", "Channel No.": "Canal No.", "Channel Number": "Número de canal", + "Channels": "Canales", + "Channels as failover": "Canales como conmutación por error", + "Channels Checked": "Canales marcados", "Channel Scrubber": "Depurador de canales", - "Channel Scrubbers": "Depuradores de canales", - "Channel Title": "Título del canal", - "Channel group as category": "Grupo de canales como categoría", - "Channel mapping removed for the selected Playlist.": "Se eliminó la asignación de canales para la lista de reproducción seleccionada.", - "Channel mapping removed for the selected channels.": "Se eliminó la asignación de canales para los canales seleccionados.", - "Channel mapping started, you will be notified when the process is complete.": "Se inició el mapeo de canales, se le notificará cuando se complete el proceso.", - "Channel merge started": "Se inició la fusión de canales", "Channel scrubber restarted": "Se reinició el depurador de canales", - "Channel scrubber started": "Se inició el depurador de canales", + "Channel Scrubbers": "Depuradores de canales", "Channel scrubbers started": "Se iniciaron los depuradores de canales", - "Channel unmerge started": "Se ha iniciado la separación del canal.", - "Channels": "Canales", - "Channels Checked": "Canales marcados", + "Channel scrubber started": "Se inició el depurador de canales", "Channels Disabled": "Canales deshabilitados", - "Channels Recounted": "Canales contados", - "Channels Sorted": "Canales ordenados", - "Channels as failover": "Canales como conmutación por error", "Channels moved to group": "Canales movidos al grupo", "Channels only": "Solo canales", + "Channels Recounted": "Canales contados", + "Channels Sorted": "Canales ordenados", "Channels to process per call (default: 50, max: 100). Use with offset for pagination.": "Canales a procesar por llamada (predeterminado: 50, máximo: 100). Úselo con desplazamiento para paginación.", "Channels to skip (default: 0). Increment by limit to page through a large group.": "Canales a omitir (predeterminado: 0). Incrementar por límite para desplazarse por un grupo grande.", "Channels with these keywords in their name will be prioritized (e.g., \"RAW\", \"LOCAL\", \"HD\").": "Se dará prioridad a los canales con estas palabras clave en su nombre (por ejemplo, \"RAW\", \"LOCAL\", \"HD\").", - "Check Method": "Método de verificación", - "Check Plugin Updates": "Verificar actualizaciones de complementos", + "Channel Title": "Título del canal", + "Channel unmerge started": "Se ha iniciado la separación del canal.", + "Checked": "Comprobado", "Check for File Changes": "Verificar cambios en archivos", "Check for Updates": "Buscar actualizaciones", "Check interval (seconds)": "Intervalo de comprobación (segundos)", - "Checked": "Comprobado", + "Check Method": "Método de verificación", + "Check Plugin Updates": "Verificar actualizaciones de complementos", "Choose between URL/file upload or SchedulesDirect integration": "Elija entre URL/carga de archivos o integración con SchedulesDirect", "Choose if and where transcoding should occur. Restart the broadcast after changing this setting.": "Elija si debe realizarse la transcodificación y dónde. Reinicie la transmisión después de cambiar esta configuración.", "Choose master from?": "¿Elegir maestro?", @@ -327,32 +342,32 @@ "Choose whether to retain or remove any database tables and storage files the plugin created during its lifetime.": "Elija si desea conservar o eliminar las tablas de bases de datos y los archivos de almacenamiento que el complemento creó durante su vida útil.", "Clean special characters": "Limpiar caracteres especiales", "Cleanup Complete": "Limpieza completa", - "Cleanup Duplicate Series": "Limpieza de series duplicadas", - "Cleanup Duplicates": "Limpieza de duplicados", - "Cleanup Streams": "Corrientes de limpieza", "Cleanup default": "Valor predeterminado de limpieza", + "Cleanup Duplicates": "Limpieza de duplicados", + "Cleanup Duplicate Series": "Limpieza de series duplicadas", "Cleanup requested.": "Limpieza solicitada.", + "Cleanup Streams": "Corrientes de limpieza", "Clear": "Claro", - "Clear All Logo Cache": "Borrar todo el caché de logotipos", - "Clear EPG mappings for all channels of the selected playlist.": "Borre las asignaciones de EPG para todos los canales de la lista de reproducción seleccionada.", - "Clear EPG mappings for the selected channels.": "Borre las asignaciones de EPG para los canales seleccionados.", - "Clear Expired Logo Cache": "Borrar caché de logotipo caducado", - "Clear History": "Borrar historial", - "Clear Watch Progress": "Borrar progreso de visualización", "Clear all": "Borrar todo", "Clear all cached logos": "Borrar todos los logotipos almacenados en caché", + "Clear All Logo Cache": "Borrar todo el caché de logotipos", "Clear cached logos and poster images for selected VOD channels so they are fetched again on the next request.": "Borre logotipos e imágenes de carteles almacenados en caché para canales VOD seleccionados para que se recuperen nuevamente en la siguiente solicitud.", "Clear cached logos for selected channels so they are fetched again on the next request.": "Borre los logotipos almacenados en caché para los canales seleccionados para que se recuperen en la siguiente solicitud.", "Clear cached logos for selected networks so they are fetched again on the next request.": "Borre los logotipos almacenados en caché para las redes seleccionadas para que se recuperen en la siguiente solicitud.", "Clear cached poster images for selected series so they are fetched again on the next request.": "Borre las imágenes de carteles almacenadas en caché de las series seleccionadas para que se recuperen en la siguiente solicitud.", + "Clear EPG mappings for all channels of the selected playlist.": "Borre las asignaciones de EPG para todos los canales de la lista de reproducción seleccionada.", + "Clear EPG mappings for the selected channels.": "Borre las asignaciones de EPG para los canales seleccionados.", "Clear expired cache": "Borrar caché caducado", + "Clear Expired Logo Cache": "Borrar caché de logotipo caducado", "Clear failed playlists": "Borrar listas de reproducción fallidas", + "Clear History": "Borrar historial", "Clear history": "Borrar historial", + "Clearing the logo cache will remove all cached logo images. If permanent cache is enabled, it will be ignored. This action cannot be undone.": "Al borrar el caché del logotipo, se eliminarán todas las imágenes del logotipo almacenadas en caché. Si el caché permanente está habilitado, se ignorará. Esta acción no se puede deshacer.", "Clear log": "Borrar registro", "Clear log file?": "¿Borrar archivo de registro?", "Clear run history": "Borrar historial de ejecución", "Clear selection": "Borrar selección", - "Clearing the logo cache will remove all cached logo images. If permanent cache is enabled, it will be ignored. This action cannot be undone.": "Al borrar el caché del logotipo, se eliminarán todas las imágenes del logotipo almacenadas en caché. Si el caché permanente está habilitado, se ignorará. Esta acción no se puede deshacer.", + "Clear Watch Progress": "Borrar progreso de visualización", "Click on a result to apply the TMDB IDs": "Haga clic en un resultado para aplicar los ID de TMDB", "Close": "Cerca", "Codec long name": "Nombre largo del códec", @@ -362,13 +377,11 @@ "Complete cast list": "Lista completa de reparto", "Completed": "Terminado", "Condition": "Condición", - "Condition to check.": "Estado para comprobar.", "Conditional Settings": "Configuraciones condicionales", "Conditions": "Condiciones", + "Condition to check.": "Estado para comprobar.", "Config": "configuración", "Configuration": "Configuración", - "Configure SMTP settings to send emails from the application.": "Configure los ajustes SMTP para enviar correos electrónicos desde la aplicación.", - "Configure The Movie Database (TMDB) integration to automatically lookup and populate metadata IDs (TMDB, TVDB, IMDB) for your VOD content and Series.": "Configure la integración de Movie Database (TMDB) para buscar y completar automáticamente ID de metadatos (TMDB, TVDB, IMDB) para su contenido VOD y series.", "Configure automatic stream probing after each playlist sync.": "Configurar el sondeo automático de transmisiones después de cada sincronización de lista de reproducción.", "Configure automatic sync schedule": "Configurar el horario de sincronización automática", "Configure groups to automatically sync into Custom Playlists after each successful sync. Each rule syncs the selected source group(s) into one Custom Playlist.": "Configure grupos para sincronizar automáticamente en listas personalizadas después de cada sincronización exitosa. Cada regla sincroniza los grupos de origen seleccionados en una lista personalizada.", @@ -376,26 +389,30 @@ "Configure how the proxy handles stream failures, including advanced resolver logic and fail conditions.": "Configure cómo el proxy maneja los errores de transmisión, incluida la lógica de resolución avanzada y las condiciones de error.", "Configure how the proxy is accessed and how stream URLs are resolved.": "Configure cómo se accede al proxy y cómo se resuelven las URL de transmisión.", "Configure scaffold options": "Configurar opciones de andamio", + "Configure SMTP settings to send emails from the application.": "Configure los ajustes SMTP para enviar correos electrónicos desde la aplicación.", + "Configure The Movie Database (TMDB) integration to automatically lookup and populate metadata IDs (TMDB, TVDB, IMDB) for your VOD content and Series.": "Configure la integración de Movie Database (TMDB) para buscar y completar automáticamente ID de metadatos (TMDB, TVDB, IMDB) para su contenido VOD y series.", "Configure your SchedulesDirect account settings": "Configure los ajustes de su cuenta SchedulesDirect", "Confirm selection": "Confirmar selección", "Connected but No Libraries Found": "Conectado pero no se encontraron bibliotecas", "Connection Failed": "Conexión fallida", - "Connection Successful": "Conexión exitosa", "Connection failed": "La conexión falló", + "Connection Successful": "Conexión exitosa", "Connection successful!": "¡Conexión exitosa!", "Consecutive silent checks before failover": "Comprobaciones silenciosas consecutivas antes de la conmutación por error", "Container Extension": "Extensión de contenedor", "Content": "Contenido", - "Content Type": "Tipo de contenido", "Content not found": "Contenido no encontrado", + "Content Type": "Tipo de contenido", "Control how media is transcoded": "Controlar cómo se transcodifican los medios", "Control request concurrency for parallel processing and add delays between requests to avoid provider rate limiting.": "Controle la concurrencia de solicitudes para el procesamiento paralelo y añada retrasos entre solicitudes para evitar la limitación de velocidad del proveedor.", "Control what content is synced from the media server": "Controle qué contenido se sincroniza desde el servidor de medios", + "Cookies (Netscape format)": "Cookies (formato Netscape)", "Copy Changes": "Copiar cambios", "Copy now": "Copiar ahora", + "Copy the file hash from the GitHub release page.": "Copie el hash del archivo de la página de lanzamiento de GitHub.", "Copy the file hash from the GitHub release page to verify the download hasn't been tampered with.": "Copie el hash del archivo de la página de lanzamiento de GitHub para verificar que la descarga no haya sido manipulada.", "Copy the file hash from the GitHub release page to verify the download hasn\\'t been tampered with.": "Copie el hash del archivo de la página de lanzamiento de GitHub para verificar que la descarga no haya sido manipulada.", - "Copy the file hash from the GitHub release page.": "Copie el hash del archivo de la página de lanzamiento de GitHub.", + "Could not create smart channel": "No se pudo crear el canal inteligente", "Could not determine the record to update. Please close the modal and try again.": "No se pudo determinar el registro para actualizar. Cierra el modal y vuelve a intentarlo.", "Could not fetch release": "No se pudo obtener la versión", "Country": "País", @@ -403,46 +420,46 @@ "Country of origin.": "País natal.", "Cover": "Cubrir", "Cover Image (Large)": "Imagen de portada (grande)", + "Create a custom \"smart channel\" from the selected channels. The highest-scoring source's title, logo, and EPG mapping will be copied. All selected channels become failovers, sorted by score, and the playlist will stream the top failover automatically.": "Cree un \"canal inteligente\" personalizado a partir de los canales seleccionados. Se copiarán el título, el logotipo y la asignación de EPG de la fuente con la puntuación más alta. Todos los canales seleccionados se convierten en conmutación por error, ordenados por puntuación, y la lista de reproducción transmitirá la conmutación por error superior automáticamente.", + "Create an alias of an existing playlist or custom playlist to use a different Xtream API credentials, while still using the same underlying Channel, VOD and Series configurations of the linked playlist.": "Cree un alias de una lista de reproducción existente o una lista de reproducción personalizada para usar credenciales de API de Xtream diferentes, mientras sigue usando las mismas configuraciones subyacentes de canal, VOD y serie de la lista de reproducción vinculada.", + "Create credentials and assign them to your Playlist for simple authentication. They can also be used to access the Xtream API for the assigned Playlists.": "Cree credenciales y asígnelas a su lista de reproducción para una autenticación sencilla. También se pueden utilizar para acceder a la API de Xtream para las listas de reproducción asignadas.", "Create Custom Channel": "Crear canal personalizado", "Create Custom VOD": "Crear VOD personalizado", + "Create live TV channels from your media server content": "Cree canales de TV en vivo a partir del contenido de su servidor de medios", "Create Missing Channels": "Crear canales faltantes", "Create Network": "Crear red", "Create Networks in the Networks section to build pseudo-live channels": "Cree redes en la sección Redes para crear canales pseudo-en vivo", - "Create Plugin": "Crear complemento", - "Create Token": "Crear ficha", - "Create an alias of an existing playlist or custom playlist to use a different Xtream API credentials, while still using the same underlying Channel, VOD and Series configurations of the linked playlist.": "Cree un alias de una lista de reproducción existente o una lista de reproducción personalizada para usar credenciales de API de Xtream diferentes, mientras sigue usando las mismas configuraciones subyacentes de canal, VOD y serie de la lista de reproducción vinculada.", - "Create credentials and assign them to your Playlist for simple authentication. They can also be used to access the Xtream API for the assigned Playlists.": "Cree credenciales y asígnelas a su lista de reproducción para una autenticación sencilla. También se pueden utilizar para acceder a la API de Xtream para las listas de reproducción asignadas.", - "Create live TV channels from your media server content": "Cree canales de TV en vivo a partir del contenido de su servidor de medios", "Create now": "Crear ahora", "Create playlists composed of channels from your other playlists. Head to channels to bulk add channels to your custom playlist.": "Crea listas de reproducción compuestas de canales de tus otras listas de reproducción. Dirígete a canales para agregar canales de forma masiva a tu lista de reproducción personalizada.", + "Create Plugin": "Crear complemento", "Creates a new security review of this plugin\\'s current files. Use this after updating plugin files on disk or after a failed install to re-trigger the review process without re-uploading.": "Crea una nueva revisión de seguridad de los archivos actuales de este complemento. Úselo después de actualizar los archivos del complemento en el disco o después de una instalación fallida para reactivar el proceso de revisión sin volver a cargarlos.", + "Create smart channel": "Crear canal inteligente", + "Create Token": "Crear ficha", "Credentials": "Cartas credenciales", - "Current IDs": "ID actuales", - "Current Provider Timezone": "Zona horaria actual del proveedor", - "Current Run": "Ejecución actual", - "Current Status": "Estado actual", + "CRON Example": "Ejemplo de CRON", "Current category series disabled": "Serie de categoría actual deshabilitada", "Current category series enabled": "Serie de categoría actual habilitada", - "Current signal": "Señal actual", + "Current IDs": "ID actuales", "Currently Mapped": "Actualmente mapeado", - "Currently stored external IDs for this VOD": "ID externos almacenados actualmente para este VOD", "Currently stored external IDs for this series": "ID externos almacenados actualmente para esta serie", + "Currently stored external IDs for this VOD": "ID externos almacenados actualmente para este VOD", + "Current Provider Timezone": "Zona horaria actual del proveedor", + "Current Run": "Ejecución actual", + "Current signal": "Señal actual", + "Current Status": "Estado actual", "Custom": "Costumbre", "Custom Category": "Categoría personalizada", "Custom Date Format String": "Cadena de formato de fecha personalizada", "Custom Group": "Grupo personalizado", "Custom Headers": "Encabezados personalizados", + "Custom headers to use when streaming via the proxy.": "Encabezados personalizados para usar al transmitir a través del proxy.", "Custom Playlist": "Lista de reproducción personalizada", "Custom Playlist Channels Recounted": "Canales de lista de reproducción personalizados contados", "Custom Playlists": "Listas de reproducción personalizadas", - "Custom headers to use when streaming via the proxy.": "Encabezados personalizados para usar al transmitir a través del proxy.", - "DNS failover URLs": "URL de conmutación por error de DNS", - "DVR / Live TV Tuner": "DVR/Sintonizador de TV en vivo", - "DVR Channels": "Canales DVR", - "DVR Removed": "DVR eliminado", - "DVR Status": "Estado del DVR", - "DVR Sync Status": "Estado de sincronización del DVR", + "Daily": "A diario", "Dashboard": "Panel", + "Database: Execute Query": "Base de datos: ejecutar consulta", + "Database: Get Schema": "Base de datos: obtener esquema", "Data Ownership": "Propiedad de los datos", "Date Format": "Formato de fecha", "Days of schedule to generate": "Días de cronograma a generar", @@ -450,46 +467,46 @@ "Deactivate failover channels": "Desactivar canales de conmutación por error", "Dead Links": "Enlaces muertos", "Dead Links Found": "Enlaces muertos encontrados", - "Debug Logs": "Registros de depuración", "Debugging": "Depuración", + "Debug Logs": "Registros de depuración", "Default EPG": "EPG predeterminada", "Default ID": "ID predeterminado", "Default Live Transcoding Profile": "Perfil de transcodificación en vivo predeterminado", "Default Name": "Nombre predeterminado", - "Default Series Stream File Setting": "Configuración predeterminada del archivo de secuencia de series", - "Default Title": "Título predeterminado", - "Default URL": "URL predeterminada", - "Default Uninstall Behavior": "Comportamiento de desinstalación predeterminado", - "Default VOD Stream File Setting": "Configuración predeterminada del archivo de transmisión VOD", "Default name": "Nombre predeterminado", "Default options for new Live channels": "Opciones predeterminadas para nuevos canales en vivo", "Default options for new VOD channels": "Opciones predeterminadas para nuevos canales VOD", "Default playlist": "Lista de reproducción predeterminada", "Default routes through M3U Editor for dynamic routing.": "Rutas predeterminadas a través del Editor M3U para enrutamiento dinámico.", - "Default stream profiles have been generated!": "¡Se han generado perfiles de transmisión predeterminados!", "Defaults": "Valores predeterminados", - "Defaults and schedules used by the plugin.": "Valores predeterminados y horarios utilizados por el complemento.", "Defaults, schedules, and automatic entry points.": "Valores predeterminados, horarios y puntos de entrada automáticos.", + "Defaults and schedules used by the plugin.": "Valores predeterminados y horarios utilizados por el complemento.", + "Default Series Stream File Setting": "Configuración predeterminada del archivo de secuencia de series", + "Default stream profiles have been generated!": "¡Se han generado perfiles de transmisión predeterminados!", + "Default Title": "Título predeterminado", + "Default Uninstall Behavior": "Comportamiento de desinstalación predeterminado", + "Default URL": "URL predeterminada", + "Default VOD Stream File Setting": "Configuración predeterminada del archivo de transmisión VOD", "Define find & replace rules that automatically run after each playlist sync. Rules execute in order.": "Defina reglas de búsqueda y reemplazo que se ejecuten automáticamente después de cada sincronización de lista de reproducción. Las reglas se ejecutan en orden.", "Define sort configurations that automatically run after each playlist sync. Configurations execute in order.": "Defina configuraciones de clasificación que se ejecuten automáticamente después de cada sincronización de lista de reproducción. Las configuraciones se ejecutan en orden.", "Delay after stream start before silence monitoring begins. Allows for initial buffering and audio decoder startup. Default: 15 seconds.": "Retraso después del inicio de la transmisión antes de que comience la supervisión del silencio. Permite el almacenamiento en búfer inicial y el inicio del decodificador de audio. Predeterminado: 15 segundos.", "Delay before refresh (seconds)": "Retraso antes de la actualización (segundos)", "Delay in milliseconds between requests.": "Retraso en milisegundos entre solicitudes.", "Delete": "Borrar", - "Delete Plugin": "Eliminar complemento", - "Delete Record": "Eliminar registro", "Delete blocked": "Eliminar bloqueado", "Delete now": "Eliminar ahora", "Delete permanently": "Eliminar permanentemente", + "Delete Plugin": "Eliminar complemento", "Delete plugin from disk": "Eliminar complemento del disco", + "Delete Record": "Eliminar registro", "Delete selected": "Eliminar seleccionado", "Delete selected files": "Eliminar archivos seleccionados", "Delete this sync log?": "¿Eliminar este registro de sincronización?", "Description": "Descripción", + "Detached from playlist": "Separado de la lista de reproducción", "Detach Selected": "Separar seleccionado", "Detach selected channels from custom playlist": "Separar canales seleccionados de la lista de reproducción personalizada", "Detach selected series from custom playlist": "Separar series seleccionadas de la lista de reproducción personalizada", - "Detached from playlist": "Separado de la lista de reproducción", "Detailed plot summary.": "Resumen detallado de la trama.", "Detailed plot summary...": "Resumen detallado de la trama...", "Details": "Detalles", @@ -499,22 +516,24 @@ "Director": "Director", "Director(s) of the content.": "Director(es) del contenido.", "Disable": "Desactivar", - "Disable Categories": "Desactivar categorías", - "Disable Category Series": "Deshabilitar serie de categorías", - "Disable EPG mapping": "Deshabilitar el mapeo EPG", - "Disable Group Channels": "Deshabilitar canales de grupo", - "Disable Groups": "Desactivar grupos", - "Disable Merge": "Deshabilitar fusión", - "Disable Probing": "Deshabilitar sondeo", - "Disable SSL verification": "Deshabilitar la verificación SSL", "Disable all episodes": "Desactivar todos los episodios", "Disable catch-up": "Deshabilitar la puesta al día", + "Disable Categories": "Desactivar categorías", + "Disable Category Series": "Deshabilitar serie de categorías", "Disable category series": "Desactivar serie de categorías", + "Disabled": "Desactivado", "Disable dead channels": "Deshabilitar canales muertos", + "Disable EPG mapping": "Deshabilitar el mapeo EPG", + "Disable Group Channels": "Deshabilitar canales de grupo", "Disable group channels": "Desactivar canales de grupo", "Disable group channels now?": "¿Desactivar canales grupales ahora?", + "Disable Groups": "Desactivar grupos", + "Disable Merge": "Deshabilitar fusión", "Disable now": "Desactivar ahora", + "Disable Probing": "Deshabilitar sondeo", "Disable selected": "Desactivar seleccionado", + "Disable source channels": "Deshabilitar canales de origen", + "Disable SSL verification": "Deshabilitar la verificación SSL", "Disable stream probing for the selected channels. They will be excluded from stream probing jobs.": "Deshabilite el sondeo de flujo para los canales seleccionados. Serán excluidos de los trabajos de sondeo de corrientes.", "Disable the current category series now?": "¿Desactivar la serie de categorías actual ahora?", "Disable the selected categories now?": "¿Desactivar las categorías seleccionadas ahora?", @@ -525,22 +544,22 @@ "Disable the series episodes now?": "¿Desactivar los episodios de la serie ahora?", "Disable to pause syncing without deleting the integration": "Desactivar para pausar la sincronización sin eliminar la integración", "Disable to stop generating schedule without deleting": "Deshabilitar para dejar de generar programación sin eliminar", - "Disabled": "Desactivado", "Disabling is reversible. Uninstalling changes the plugin\\'s status and optionally removes its database tables, files, and reports.": "La desactivación es reversible. La desinstalación cambia el estado del complemento y, opcionalmente, elimina las tablas, archivos e informes de su base de datos.", "Discard Review": "Descartar revisión", "Discard review failed": "Error al descartar la revisión", "Discord": "Discord", "Discover Plugins": "Descubrir complementos", "Disk": "Disco", - "Display Name": "Nombre para mostrar", "Display aspect ratio": "Relación de aspecto de la pantalla", + "Display Name": "Nombre para mostrar", + "DNS failover URLs": "URL de conmutación por error de DNS", "Documentation": "Documentación", "Does not have metadata": "No tiene metadatos", - "Don\\'t allow merging for selected channels when running \"Merge Same ID\" jobs.": "No permita la fusión de canales seleccionados cuando ejecute trabajos de \"Fusionar mismo ID\".", - "Don\\'t map EPG to selected channels when running EPG mapping jobs.": "No asigne EPG a canales seleccionados cuando ejecute trabajos de mapeo de EPG.", "Donate now": "Donar ahora", "Donate via Ko-fi": "Donar a través de Ko-fi", "Done": "Hecho", + "Don\\'t allow merging for selected channels when running \"Merge Same ID\" jobs.": "No permita la fusión de canales seleccionados cuando ejecute trabajos de \"Fusionar mismo ID\".", + "Don\\'t map EPG to selected channels when running EPG mapping jobs.": "No asigne EPG a canales seleccionados cuando ejecute trabajos de mapeo de EPG.", "Download": "Descargar", "Download EPG": "Descargar EPG", "Download M3U": "Descargar M3U", @@ -555,99 +574,89 @@ "Duration (Seconds)": "Duración (segundos)", "Duration in HH:MM:SS format.": "Duración en formato HH:MM:SS.", "Duration in seconds.": "Duración en segundos.", - "EPG": "EPG", - "EPG Cache is being generated": "Se está generando caché EPG", - "EPG Cache is being generated for selected EPGs": "Se está generando caché de EPG para EPG seleccionadas", - "EPG Cache is being generated in the background for the selected EPGs. You will be notified when complete.": "La caché de EPG se genera en segundo plano para las EPG seleccionadas. Se le notificará cuando esté completo.", - "EPG Cache is being generated in the background. You will be notified when complete.": "La caché de EPG se genera en segundo plano. Se le notificará cuando esté completo.", - "EPG Channel": "Canal EPG", - "EPG Channel mapping removed": "Se eliminó el mapeo de canales EPG", - "EPG Channels": "Canales EPG", - "EPG File Cache Cleared": "Caché de archivos EPG borrada", - "EPG File Cache Not Found": "Caché de archivos EPG no encontrado", - "EPG Information": "Información EPG", - "EPG Map": "Mapa EPG", - "EPG Mapped Channels": "Canales mapeados EPG", - "EPG Mapper: Apply Mappings": "Mapeador EPG: Aplicar asignaciones", - "EPG Mapper: Channel Matcher": "Mapeador EPG: Emparejador de canales", - "EPG Mapper: Mapping State": "Mapeador EPG: Estado del mapeo", - "EPG Maps": "Mapas EPG", - "EPG Output": "Salida EPG", - "EPG Settings": "Configuración de EPG", - "EPG Shift": "Cambio de EPG", - "EPG URL": "URL de la EPG", - "EPG data for your Networks": "Datos EPG para tus Redes", - "EPG is being processed in the background. Depending on the size of the guide data, this may take a while. You will be notified on completion.": "La EPG se está procesando en segundo plano. Dependiendo del tamaño de los datos de la guía, esto puede tardar un poco. Se le notificará al finalizar.", - "EPG is being processed in the background. The view will update when complete.": "La EPG se está procesando en segundo plano. La vista se actualizará cuando esté completa.", - "EPG is mapped": "EPG está mapeado", - "EPG is not mapped": "La EPG no está asignada", - "EPG is processing": "EPG está procesando", - "EPG map disabled for selected channels": "Mapa EPG deshabilitado para canales seleccionados", - "EPG map re-enabled for selected channels": "Mapa EPG reactivado para canales seleccionados", - "EPG mapping restarted": "Se reinició el mapeo EPG", - "EPG mapping started": "Se inició el mapeo EPG", - "EPG output options": "Opciones de salida EPG", - "EPG status has been reset.": "El estado de la EPG se ha restablecido.", - "EPG status reset": "Restablecimiento del estado de la EPG", - "EPG to Channel mapping": "Mapeo de EPG a canal", - "EPG type": "tipo EPG", - "EPGs": "EPG", + "During scheduled or manual rescoring, channels with stats older than this are re-probed first. Set to 0 to always re-probe. The \"Make smart channel\" action uses existing stats only and does not consult this setting.": "Durante la recuperación programada o manual, los canales con estadísticas anteriores a esta se vuelven a sondear primero. Establezca en 0 para volver a sondear siempre. La acción \"Crear canal inteligente\" utiliza únicamente estadísticas existentes y no consulta esta configuración.", + "DVR / Live TV Tuner": "DVR/Sintonizador de TV en vivo", + "DVR Channels": "Canales DVR", + "DVR Removed": "DVR eliminado", + "DVR Status": "Estado del DVR", + "DVR Sync Status": "Estado de sincronización del DVR", + "e.g., 100": "por ejemplo, 100", + "e.g., Movie Classics, 80s TV, Kids Zone": "por ejemplo, películas clásicas, televisión de los 80, zona infantil", + "e.g., Movies, TV Shows": "por ejemplo, películas, programas de televisión", + "e.g., My Networks": "por ejemplo, Mis redes", + "e.g. 403, 404, 502, 503": "p.ej. 403, 404, 502, 503", + "e.g. 2024": "p.ej. 2024", + "e.g. a1b2c3d4...": "p.ej. a1b23d4...", + "e.g. aac": "p.ej. acac", + "e.g. Authorization": "p.ej. Autorización", + "e.g. Bearer abc123": "p.ej. Portador abc123", + "e.g. d/m/Y H:i:s": "p.ej. d/m/A H:i:s", + "e.g. Help me find a channel": "p.ej. Ayúdame a encontrar un canal.", + "e.g. Help me find a channel by name.": "p.ej. Ayúdame a encontrar un canal por nombre.", + "e.g. libx264, h264_nvenc": "p.ej. libx264, h264_nvenc", + "e.g. Remove country prefix": "p.ej. Quitar prefijo de país", + "e.g. veryfast, fast, medium": "p.ej. muy rápido, rápido, medio", + "Edit or add the series details": "Editar o agregar los detalles de la serie.", "Edit Playlist": "Editar lista de reproducción", "Edit Series": "Editar serie", "Edit VOD": "Editar VOD", - "Edit or add the series details": "Editar o agregar los detalles de la serie.", + "Email address": "Dirección de correo electrónico", "Email Body": "Cuerpo del correo electrónico", "Email Options": "Opciones de correo electrónico", "Email Subject": "Asunto del correo electrónico", - "Email address": "Dirección de correo electrónico", "Email variables": "Variables de correo electrónico", "Emby": "emby", + "en": "en", "Enable": "Permitir", "Enable .strm file generation": "Habilitar la generación de archivos .strm", + "Enable advanced failover logic": "Habilitar la lógica de conmutación por error avanzada", "Enable AI Copilot": "Habilitar copiloto AI", "Enable AI Copilot Management": "Habilitar la gestión de copiloto de IA", + "Enable all episodes": "Habilitar todos los episodios", + "Enable auto-merge after sync": "Habilitar la fusión automática después de la sincronización", "Enable Automatic Database Backups": "Habilitar copias de seguridad automáticas de bases de datos", "Enable Broadcasting": "Habilitar transmisión", "Enable Categories": "Habilitar categorías", "Enable Category Series": "Habilitar serie de categorías", + "Enable category series": "Habilitar serie de categorías", + "Enabled": "Activado", + "Enabled Channels": "Canales habilitados", "Enable Debugging": "Habilitar la depuración", + "Enabled Tools": "Herramientas habilitadas", + "Enable dummy EPG": "Habilitar EPG ficticia", "Enable EPG mapping": "Habilitar mapeo EPG", "Enable EPG mapping by default": "Habilitar el mapeo EPG de forma predeterminada", "Enable Group Channels": "Habilitar canales de grupo", - "Enable Groups": "Habilitar grupos", - "Enable Logo Proxy": "Habilitar proxy de logotipo", - "Enable Logo Repository endpoint": "Habilitar punto final del repositorio de logotipos", - "Enable Merge": "Habilitar fusión", - "Enable Plex Management": "Habilitar la administración de Plex", - "Enable Probing": "Habilitar sondeo", - "Enable Provider Affinity": "Habilitar afinidad de proveedor", - "Enable Provider Profiles": "Habilitar perfiles de proveedor", - "Enable Sticky Session Handler": "Habilitar el controlador de sesiones fijas", - "Enable Stream Proxy": "Habilitar proxy de transmisión", - "Enable Strict Live TS Handling": "Habilitar el manejo estricto de Live TS", - "Enable Sync Logs": "Habilitar registros de sincronización", - "Enable advanced failover logic": "Habilitar la lógica de conmutación por error avanzada", - "Enable all episodes": "Habilitar todos los episodios", - "Enable auto-merge after sync": "Habilitar la fusión automática después de la sincronización", - "Enable category series": "Habilitar serie de categorías", - "Enable dummy EPG": "Habilitar EPG ficticia", "Enable group channels": "Habilitar canales grupales", "Enable group channels now?": "¿Habilitar canales grupales ahora?", + "Enable Groups": "Habilitar grupos", "Enable if your server uses SSL/TLS": "Habilítelo si su servidor usa SSL/TLS", "Enable live broadcasting to stream content like a real TV channel. This is optional - you can enable it later.": "Habilite la transmisión en vivo para transmitir contenido como un canal de televisión real. Esto es opcional; puedes habilitarlo más tarde.", + "Enable Logo Proxy": "Habilitar proxy de logotipo", + "Enable Logo Repository endpoint": "Habilitar punto final del repositorio de logotipos", + "Enable Merge": "Habilitar fusión", "Enable merging by default": "Habilitar la fusión de forma predeterminada", "Enable name filtering": "Habilitar filtrado de nombres", "Enable new Live channels": "Habilitar nuevos canales en vivo", - "Enable new VOD channels": "Habilitar nuevos canales VOD", "Enable new series": "Habilitar nueva serie", + "Enable new VOD channels": "Habilitar nuevos canales VOD", "Enable now": "Habilitar ahora", "Enable playlist fail conditions": "Habilitar condiciones de error de lista de reproducción", + "Enable Plex Management": "Habilitar la administración de Plex", + "Enable Probing": "Habilitar sondeo", + "Enable Provider Affinity": "Habilitar afinidad de proveedor", + "Enable Provider Profiles": "Habilitar perfiles de proveedor", "Enable request delay": "Habilitar retraso de solicitud", + "Enables audit log, custom rate limits, conversation history, and other management features for the AI Copilot assistant.": "Habilita el registro de auditoría, límites de velocidad personalizados, historial de conversaciones y otras funciones de administración para el asistente AI Copilot.", "Enable selected": "Habilitar seleccionado", "Enable silence detection": "Habilitar la detección de silencio", + "Enable Sticky Session Handler": "Habilitar el controlador de sesiones fijas", "Enable stream probing by default": "Habilitar el sondeo de flujo de forma predeterminada", "Enable stream probing for the selected channels. They will be included in stream probing jobs.": "Habilite la prueba de flujo para los canales seleccionados. Se incluirán en trabajos de sondeo de corrientes.", + "Enable Stream Proxy": "Habilitar proxy de transmisión", + "Enable Strict Live TS Handling": "Habilitar el manejo estricto de Live TS", "Enable sync invalidation": "Habilitar invalidación de sincronización", + "Enable Sync Logs": "Habilitar registros de sincronización", "Enable the current category series now?": "¿Habilitar la serie de categorías actual ahora?", "Enable the selected categories now?": "¿Habilitar las categorías seleccionadas ahora?", "Enable the selected category series now?": "¿Habilitar la serie de categorías seleccionada ahora?", @@ -659,57 +668,92 @@ "Enable this post process": "Habilitar este proceso de publicación", "Enable to allow new stream requests to automatically stop the oldest stream when a playlist reaches its connection limit. Disabled by default.": "Habilite esta opción para permitir que las solicitudes de nueva transmisión detengan automáticamente la transmisión más antigua cuando una lista de reproducción alcance su límite de conexión. Deshabilitado por defecto.", "Enable to import additional program images (NOTE: this can significantly increase import time)": "Habilite la importación de imágenes de programas adicionales (NOTA: esto puede aumentar significativamente el tiempo de importación)", - "Enabled": "Activado", - "Enabled Channels": "Canales habilitados", - "Enabled Tools": "Herramientas habilitadas", - "Enables audit log, custom rate limits, conversation history, and other management features for the AI Copilot assistant.": "Habilita el registro de auditoría, límites de velocidad personalizados, historial de conversaciones y otras funciones de administración para el asistente AI Copilot.", "Encoder Preset": "Preajuste del codificador", "English, Spanish, French, etc.": "Inglés, español, francés, etc.", "Enhanced stability for live MPEG-TS streams with PVR clients like Kodi and HDHomeRun (only used when not using transcoding profiles).": "Estabilidad mejorada para transmisiones MPEG-TS en vivo con clientes PVR como Kodi y HDHomeRun (solo se usa cuando no se usan perfiles de transcodificación).", - "Enter SMTP From Address": "Ingrese la dirección SMTP de", - "Enter SMTP Host": "Ingrese al servidor SMTP", - "Enter SMTP Password": "Ingrese la contraseña SMTP", - "Enter SMTP Port": "Ingrese el puerto SMTP", - "Enter SMTP Username": "Ingrese el nombre de usuario SMTP", - "Enter To Email Address": "Ingrese a la dirección de correo electrónico", - "Enter Token Name": "Ingrese el nombre del token", "Enter a group title": "Introduce un título de grupo", "Enter a name for the new API token, and select the permissions it should have. Permissions can be changed later.": "Ingrese un nombre para el nuevo token de API y seleccione los permisos que debería tener. Los permisos se pueden cambiar más tarde.", "Enter a number to define the sort order (e.g., 1, 2, 3). Lower numbers appear first.": "Ingrese un número para definir el orden de clasificación (por ejemplo, 1, 2, 3). Los números más bajos aparecen primero.", "Enter a path on your server. This reads files from the server directly, not from your browser.": "Ingrese una ruta en su servidor. Esto lee archivos directamente desde el servidor, no desde su navegador.", + "Entered your desired locale - if you\\'re not sure what to put here, look at your EPG source. If you see entries like \"CHANNEL.en\", then \"en\" would be a good choice if you prefer english. This is used when mapping the EPG to a playlist. If the EPG has multiple locales, this will be used as the preferred locale when a direct match is not found.": "Ingresó la configuración regional deseada; si no está seguro de qué poner aquí, consulte la fuente EPG. Si ve entradas como \"CHANNEL.en\", entonces \"en\" sería una buena opción si prefiere el inglés. Esto se utiliza al asignar la EPG a una lista de reproducción. Si la EPG tiene varias configuraciones regionales, ésta se utilizará como la configuración regional preferida cuando no se encuentre una coincidencia directa.", "Enter movie name...": "Introduce el nombre de la película...", "Enter series name...": "Introduzca el nombre de la serie...", - "Enter the URL of the XMLTV guide data. If this is a local file, you can enter a full or relative path. If changing URL, the guide data will be re-imported. Use with caution as this could lead to data loss if the new guide differs from the old one.": "Ingrese la URL de los datos de la guía XMLTV. Si se trata de un archivo local, puede ingresar una ruta completa o relativa. Si cambia la URL, se volverán a importar los datos de la guía. Úselo con precaución ya que esto podría provocar la pérdida de datos si la nueva guía difiere de la anterior.", - "Enter the URL of the playlist file. If this is a local file, you can enter a full or relative path. If changing URL, the playlist will be re-imported. Use with caution as this could lead to data loss if the new playlist differs from the old one.": "Ingrese la URL del archivo de la lista de reproducción. Si se trata de un archivo local, puede ingresar una ruta completa o relativa. Si cambia la URL, la lista de reproducción se volverá a importar. Úselo con precaución, ya que esto podría provocar la pérdida de datos si la nueva lista de reproducción difiere de la anterior.", + "Enter SMTP From Address": "Ingrese la dirección SMTP de", + "Enter SMTP Host": "Ingrese al servidor SMTP", + "Enter SMTP Password": "Ingrese la contraseña SMTP", + "Enter SMTP Port": "Ingrese el puerto SMTP", + "Enter SMTP Username": "Ingrese el nombre de usuario SMTP", "Enter the archive path on your server. This reads the file directly, not from your browser.": "Ingrese la ruta del archivo en su servidor. Esto lee el archivo directamente, no desde su navegador.", "Enter the full url, using : format - without trailing slash (/).": "Ingrese la URL completa, usando el formato :, sin barra diagonal (/).", - "Enter the name of the EPG. Internal use only.": "Introduzca el nombre de la EPG. Sólo uso interno.", "Enter the name of the alias. Internal use only.": "Introduzca el nombre del alias. Sólo uso interno.", + "Enter the name of the EPG. Internal use only.": "Introduzca el nombre de la EPG. Sólo uso interno.", "Enter the name of the merged EPG. Internal use only.": "Introduzca el nombre de la EPG fusionada. Sólo uso interno.", "Enter the name of the playlist. Internal use only.": "Ingrese el nombre de la lista de reproducción. Sólo uso interno.", + "Enter the URL of the playlist file. If this is a local file, you can enter a full or relative path. If changing URL, the playlist will be re-imported. Use with caution as this could lead to data loss if the new playlist differs from the old one.": "Ingrese la URL del archivo de la lista de reproducción. Si se trata de un archivo local, puede ingresar una ruta completa o relativa. Si cambia la URL, la lista de reproducción se volverá a importar. Úselo con precaución, ya que esto podría provocar la pérdida de datos si la nueva lista de reproducción difiere de la anterior.", + "Enter the URL of the XMLTV guide data. If this is a local file, you can enter a full or relative path. If changing URL, the guide data will be re-imported. Use with caution as this could lead to data loss if the new guide differs from the old one.": "Ingrese la URL de los datos de la guía XMLTV. Si se trata de un archivo local, puede ingresar una ruta completa o relativa. Si cambia la URL, se volverán a importar los datos de la guía. Úselo con precaución ya que esto podría provocar la pérdida de datos si la nueva guía difiere de la anterior.", + "Enter To Email Address": "Ingrese a la dirección de correo electrónico", + "Enter Token Name": "Ingrese el nombre del token", "Enter words, symbols or prefixes to remove. Press Enter after each pattern.": "Ingrese palabras, símbolos o prefijos para eliminar. Presione Enter después de cada patrón.", "Enter your TMDB API Key (v3 auth)": "Ingrese su clave API de TMDB (autenticación v3)", - "Entered your desired locale - if you\\'re not sure what to put here, look at your EPG source. If you see entries like \"CHANNEL.en\", then \"en\" would be a good choice if you prefer english. This is used when mapping the EPG to a playlist. If the EPG has multiple locales, this will be used as the preferred locale when a direct match is not found.": "Ingresó la configuración regional deseada; si no está seguro de qué poner aquí, consulte la fuente EPG. Si ve entradas como \"CHANNEL.en\", entonces \"en\" sería una buena opción si prefiere el inglés. Esto se utiliza al asignar la EPG a una lista de reproducción. Si la EPG tiene varias configuraciones regionales, ésta se utilizará como la configuración regional preferida cuando no se encuentre una coincidencia directa.", "Ep #": "Episodio #", + "EPG": "EPG", + "EPG Cache is being generated": "Se está generando caché EPG", + "EPG Cache is being generated for selected EPGs": "Se está generando caché de EPG para EPG seleccionadas", + "EPG Cache is being generated in the background. You will be notified when complete.": "La caché de EPG se genera en segundo plano. Se le notificará cuando esté completo.", + "EPG Cache is being generated in the background for the selected EPGs. You will be notified when complete.": "La caché de EPG se genera en segundo plano para las EPG seleccionadas. Se le notificará cuando esté completo.", + "EPG Channel": "Canal EPG", + "EPG Channel mapping removed": "Se eliminó el mapeo de canales EPG", + "EPG Channels": "Canales EPG", + "EPG data for your Networks": "Datos EPG para tus Redes", + "EPG File Cache Cleared": "Caché de archivos EPG borrada", + "EPG File Cache Not Found": "Caché de archivos EPG no encontrado", + "EPG Information": "Información EPG", + "EPG is being processed in the background. Depending on the size of the guide data, this may take a while. You will be notified on completion.": "La EPG se está procesando en segundo plano. Dependiendo del tamaño de los datos de la guía, esto puede tardar un poco. Se le notificará al finalizar.", + "EPG is being processed in the background. The view will update when complete.": "La EPG se está procesando en segundo plano. La vista se actualizará cuando esté completa.", + "EPG is mapped": "EPG está mapeado", + "EPG is not mapped": "La EPG no está asignada", + "EPG is processing": "EPG está procesando", + "EPG Map": "Mapa EPG", + "EPG map disabled for selected channels": "Mapa EPG deshabilitado para canales seleccionados", + "EPG Mapped Channels": "Canales mapeados EPG", + "EPG Mapper: Apply Mappings": "Mapeador EPG: Aplicar asignaciones", + "EPG Mapper: Channel Matcher": "Mapeador EPG: Emparejador de canales", + "EPG Mapper: Mapping State": "Mapeador EPG: Estado del mapeo", + "EPG mapping restarted": "Se reinició el mapeo EPG", + "EPG mapping started": "Se inició el mapeo EPG", + "EPG map re-enabled for selected channels": "Mapa EPG reactivado para canales seleccionados", + "EPG Maps": "Mapas EPG", + "EPG Output": "Salida EPG", + "EPG output options": "Opciones de salida EPG", + "EPGs": "EPG", + "EPG Settings": "Configuración de EPG", + "EPG Shift": "Cambio de EPG", + "EPG Shift updated": "Cambio EPG actualizado", + "EPG Shift value": "Valor de cambio EPG", + "EPG status has been reset.": "El estado de la EPG se ha restablecido.", + "EPG status reset": "Restablecimiento del estado de la EPG", + "EPG to Channel mapping": "Mapeo de EPG a canal", + "EPG type": "tipo EPG", + "EPG URL": "URL de la EPG", "Episode Details": "Detalles del episodio", "Episode Image": "Imagen del episodio", "Episode Metadata": "Metadatos del episodio", "Episode Number": "Número de episodio", - "Episode Runtime": "Tiempo de ejecución del episodio", - "Episode Title": "Título del episodio", "Episode preview placeholder": "Marcador de posición de vista previa del episodio", + "Episode Runtime": "Tiempo de ejecución del episodio", "Episode runtime in minutes.": "Duración del episodio en minutos.", "Episodes": "Episodios", "Episodes added": "Episodios agregados", "Episodes added successfully": "Episodios agregados exitosamente", + "Episode Title": "Título del episodio", "Error": "Error", + "Errors": "Errores", "Error Sending Test Email": "Error al enviar el correo electrónico de prueba", "Error stopping stream.": "Error al detener la transmisión.", "Error triggering failover.": "Error al activar la conmutación por error.", - "Errors": "Errores", "Etc/UTC": "Etc/UTC", - "Event Triggers": "Activadores de eventos", "Events that automatically run this plugin in the background.": "Eventos que ejecutan automáticamente este complemento en segundo plano.", + "Event Triggers": "Activadores de eventos", "Exact Match Distance": "Distancia de coincidencia exacta", "Exclude disabled groups from master selection": "Excluir grupos discapacitados de la selección maestra", "Execution is now disabled until an administrator reviews and trusts this plugin again.": "La ejecución ahora está deshabilitada hasta que un administrador revise y confíe nuevamente en este complemento.", @@ -723,46 +767,54 @@ "Export channels to a CSV or XLSX file. NOTE: Only enabled channels will be exported.": "Exporte canales a un archivo CSV o XLSX. NOTA: Sólo se exportarán los canales habilitados.", "Export name": "Nombre de exportación", "Export variables": "Exportar variables", - "FFmpeg Template": "Plantilla FFmpeg", "Failed": "Fallido", "Failed playlists cleared": "Listas de reproducción fallidas borradas", - "Failed to Start": "No se pudo iniciar", "Failed to add lineup": "No se pudo agregar la alineación", "Failed to apply TMDB selection.": "No se pudo aplicar la selección de TMDB.", + "Failed to fetch lineups": "No se han podido recuperar las alineaciones", "Failed to fetch TMDB data for this movie.": "No se pudieron recuperar los datos TMDB para esta película.", "Failed to fetch TMDB data for this series.": "No se pudieron recuperar los datos de TMDB para esta serie.", - "Failed to fetch lineups": "No se han podido recuperar las alineaciones", "Failed to refresh release logs": "No se pudieron actualizar los registros de lanzamiento", + "Failed to Start": "No se pudo iniciar", "Failover": "Conmutación por error", "Failover & Recovery": "Conmutación por error y recuperación", "Failover Channel": "Canal de conmutación por error", "Failover Channels": "Canales de conmutación por error", + "Failover groups will be re-scored in the background. You can keep using the app while this runs.": "Los grupos de conmutación por error se volverán a calificar en segundo plano. Puedes seguir usando la aplicación mientras se ejecuta.", "Failover Playlist": "Lista de reproducción de conmutación por error", + "Failover Ranking": "Clasificación de conmutación por error", + "Failover Rescoring": "Restauración de conmutación por error", + "Failover rescoring queued": "Recuperación de conmutación por error en cola", "Failovers": "Conmutaciones por error", + "Failovers ranked by score. Stored from the last merge or rescore — click \"Rescore now\" to recalculate against current stream stats.": "Conmutaciones por error clasificadas por puntuación. Almacenado desde la última fusión o repuntuación: haga clic en \"Volver a puntuar ahora\" para volver a calcular con las estadísticas de transmisión actuales.", + "Failovers will be re-scored in the background. Refresh this page in a moment to see the updated ranking.": "Las conmutaciones por error se volverán a calificar en segundo plano. Actualiza esta página en un momento para ver la clasificación actualizada.", "Fetch & Install": "Obtener e instalar", "Fetch & Update": "Buscar y actualizar", - "Fetch IDs for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "¿Obtener ID para todas las series de listas de reproducción habilitadas? Si está deshabilitado, solo se buscará para las series de la lista de reproducción seleccionada.", - "Fetch IDs now": "Obtener identificaciones ahora", - "Fetch Metadata": "Obtener metadatos", - "Fetch Series Metadata": "Obtener metadatos de la serie", - "Fetch Series metadata for this playlist now? Only enabled Series will be included.": "¿Obtener metadatos de series para esta lista de reproducción ahora? Sólo se incluirán las series habilitadas.", - "Fetch TMDB IDs": "Obtener ID de TMDB", - "Fetch TMDB, TVDB, and IMDB IDs for this series from The Movie Database.": "Obtenga los ID de TMDB, TVDB e IMDB para esta serie en The Movie Database.", - "Fetch TMDB/TVDB IDs": "Obtener ID de TMDB/TVDB", - "Fetch VOD Metadata": "Obtener metadatos de VOD", - "Fetch VOD metadata for this playlist now? Only enabled VOD channels will be included.": "¿Obtener metadatos VOD para esta lista de reproducción ahora? Solo se incluirán los canales VOD habilitados.", "Fetch and process VOD metadata for the group channels.": "Obtenga y procese metadatos VOD para los canales del grupo.", - "Fetch and process VOD metadata for the selected Playlist? Only enabled VOD channels will be processed.": "¿Recuperar y procesar metadatos VOD para la lista de reproducción seleccionada? Sólo se procesarán los canales VOD habilitados.", "Fetch and process VOD metadata for the selected channel.": "Obtenga y procese metadatos VOD para el canal seleccionado.", "Fetch and process VOD metadata for the selected channels? Only enabled VOD channels will be processed.": "¿Obtener y procesar metadatos VOD para los canales seleccionados? Sólo se procesarán los canales VOD habilitados.", "Fetch and process VOD metadata for the selected group channels.": "Obtenga y procese metadatos VOD para los canales del grupo seleccionados.", + "Fetch and process VOD metadata for the selected Playlist? Only enabled VOD channels will be processed.": "¿Recuperar y procesar metadatos VOD para la lista de reproducción seleccionada? Sólo se procesarán los canales VOD habilitados.", "Fetch by category": "Buscar por categoría", - "Fetch metadata": "Obtener metadatos", - "Fetch metadata for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "¿Obtener metadatos para todas las series de listas de reproducción habilitadas? Si está deshabilitado, solo se buscará para las series de la lista de reproducción seleccionada.", "Fetches episode metadata for enabled series after each sync. Required for stream file sync.": "Obtiene metadatos de episodios de series habilitadas después de cada sincronización. Requerido para la sincronización de archivos de transmisión.", + "Fetch IDs for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "¿Obtener ID para todas las series de listas de reproducción habilitadas? Si está deshabilitado, solo se buscará para las series de la lista de reproducción seleccionada.", + "Fetch IDs now": "Obtener identificaciones ahora", "Fetching VOD metadata for channel": "Obteniendo metadatos de VOD para el canal", "Fetching VOD metadata for playlist": "Obteniendo metadatos de VOD para la lista de reproducción", "Fetching VOD metadata for selected group channels": "Obteniendo metadatos de VOD para canales de grupo seleccionados", + "Fetch Metadata": "Obtener metadatos", + "Fetch metadata": "Obtener metadatos", + "Fetch metadata for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "¿Obtener metadatos para todas las series de listas de reproducción habilitadas? Si está deshabilitado, solo se buscará para las series de la lista de reproducción seleccionada.", + "Fetch Series Metadata": "Obtener metadatos de la serie", + "Fetch Series metadata for this playlist now? Only enabled Series will be included.": "¿Obtener metadatos de series para esta lista de reproducción ahora? Sólo se incluirán las series habilitadas.", + "Fetch TMDB, TVDB, and IMDB IDs for this series from The Movie Database.": "Obtenga los ID de TMDB, TVDB e IMDB para esta serie en The Movie Database.", + "Fetch TMDB/TVDB IDs": "Obtener ID de TMDB/TVDB", + "Fetch TMDB IDs": "Obtener ID de TMDB", + "Fetch VOD Metadata": "Obtener metadatos de VOD", + "Fetch VOD metadata for this playlist now? Only enabled VOD channels will be included.": "¿Obtener metadatos VOD para esta lista de reproducción ahora? Solo se incluirán los canales VOD habilitados.", + "FFmpeg arguments for transcoding. Use placeholders like {crf|23} for configurable parameters with defaults. Hardware acceleration will be applied automatically by the proxy server.": "Argumentos de FFmpeg para la transcodificación. Utilice marcadores de posición como {crf|23} para parámetros configurables con valores predeterminados. El servidor proxy aplicará automáticamente la aceleración de hardware.", + "FFmpeg re-encodes the stream. Streamlink and yt-dlp extract and deliver streams directly from supported platforms (Twitch, YouTube, etc.) without re-encoding.": "FFmpeg vuelve a codificar la transmisión. Streamlink y yt-dlp extraen y entregan transmisiones directamente desde plataformas compatibles (Twitch, YouTube, etc.) sin volver a codificarlas.", + "FFmpeg Template": "Plantilla FFmpeg", "Field": "Campo", "Field to check condition against.": "Campo para comprobar la condición.", "File": "Archivo", @@ -772,42 +824,43 @@ "Filename metadata": "Metadatos del nombre de archivo", "Files": "Archivos", "Files Changed": "Archivos cambiados", - "Filter to a specific group within the playlist. Omit to show all groups.": "Filtrar a un grupo específico dentro de la lista de reproducción. Omitir para mostrar todos los grupos.", "Filters": "Filtros", + "Filter to a specific group within the playlist. Omit to show all groups.": "Filtrar a un grupo específico dentro de la lista de reproducción. Omitir para mostrar todos los grupos.", "Find & Replace": "Buscar y reemplazar", - "Find & Replace Rules": "Buscar y reemplazar reglas", "Find & Replace reset started": "Se inició el restablecimiento de Buscar y reemplazar", "Find & Replace reset working in the background. You will be notified once the process is complete.": "El reinicio de Buscar y reemplazar funciona en segundo plano. Se le notificará una vez que se complete el proceso.", + "Find & Replace Rules": "Buscar y reemplazar reglas", "Find & Replace started": "Buscar y reemplazar iniciado", "Find & Replace working in the background. You will be notified once the process is complete.": "Find & Replace working in the background. Se le notificará una vez que se complete el proceso.", "Finished": "Finalizado", "Focus run": "carrera de enfoque", - "Force Sync Channels": "Forzar canales de sincronización", "Force complete re-merge": "Forzar la refusión completa", "Force password change on next login": "Forzar cambio de contraseña en el próximo inicio de sesión", + "Force Sync Channels": "Forzar canales de sincronización", "Format": "Formato", "Format applied to dates throughout the application (e.g. next sync, last synced).": "Formato aplicado a las fechas en toda la aplicación (por ejemplo, siguiente sincronización, última sincronización).", + "Format Selector & Options": "Selector de formato y opciones", "Found and loaded :count plugin(s).": "Se encontraron y cargaron :count complemento(s).", "Frame rate": "Velocidad de fotogramas", "From the selected channels": "De los canales seleccionados", "Full cast information.": "Información completa del reparto.", - "GET/POST variables": "OBTENER/POST variables", "Gap Between Programmes": "Brecha entre programas", "General": "General", "General Settings": "Configuraciones generales", "Generate": "Generar", + "Generate a new plugin scaffold with all the files you need to get started.": "Genere una nueva estructura de complementos con todos los archivos que necesita para comenzar.", "Generate Cache": "Generar caché", "Generate Default Profiles": "Generar perfiles predeterminados", "Generate EPG Cache now? This will create a cache for the EPG data.": "¿Generar caché EPG ahora? Esto creará un caché para los datos de la EPG.", "Generate NFO files": "Generar archivos NFO", - "Generate Schedule": "Generar horario", - "Generate Schedules": "Generar horarios", - "Generate a new plugin scaffold with all the files you need to get started.": "Genere una nueva estructura de complementos con todos los archivos que necesita para comenzar.", "Generate only plugin.json and Plugin.php — skip README, CI workflow, scripts, and AI guidance files.": "Genere solo plugin.json y Plugin.php: omita el archivo README, el flujo de trabajo de CI, los scripts y los archivos de guía de IA.", "Generates .strm files for enabled series after metadata fetch completes. Requires \"Fetch metadata\" to be enabled.": "Genera archivos .strm para series habilitadas una vez que se completa la recuperación de metadatos. Requiere que esté habilitado \"Obtener metadatos\".", + "Generate Schedule": "Generar horario", + "Generate Schedules": "Generar horarios", "Genre": "Género", "Genre Handling": "Manejo de género", "Genre of the content.": "Género del contenido.", + "GET/POST variables": "OBTENER/POST variables", "Get API Key": "Obtener clave API", "Get Available Tools": "Obtenga herramientas disponibles", "Get from playlist status": "Obtener del estado de la lista de reproducción", @@ -819,44 +872,40 @@ "Global Tools": "Herramientas globales", "Gracenote station ID": "ID de estación Gracenote", "Group": "Grupo", + "group-title": "título de grupo", "Group Assignment": "Asignación de grupo", - "Group Details": "Detalles del grupo", - "Group Name": "Nombre del grupo", - "Group Priority Weights": "Ponderaciones de prioridad de grupo", - "Group Settings": "Configuración de grupo", "Group channels added to custom playlist": "Canales grupales agregados a una lista de reproducción personalizada", "Group channels disabled": "Canales grupales deshabilitados", "Group channels enabled": "Canales grupales habilitados", "Group created": "Grupo creado", + "Group Details": "Detalles del grupo", + "Group Name": "Nombre del grupo", "Group name used in the M3U playlist. Defaults to \"Networks\" if left empty.": "Nombre del grupo utilizado en la lista de reproducción M3U. El valor predeterminado es \"Redes\" si se deja vacío.", + "Group Priority Weights": "Ponderaciones de prioridad de grupo", "Groups": "Grupos", "Groups and Streams to Import": "Grupos y transmisiones para importar", + "Group Settings": "Configuración de grupo", "Groups only": "Sólo grupos", "Guide Refreshed": "Guía actualizada", - "HDHR Base URL": "URL base de HDHR", - "HDHR/Xtream API Streams": "Secuencias de API HDHR/Xtream", - "HDHomeRun URL": "URL de ejecución de HDHome", - "HLS Playlist URL": "URL de la lista de reproducción HLS", - "HLS provides better compatibility": "HLS proporciona una mejor compatibilidad", - "HLS segment length (6s recommended)": "Longitud del segmento HLS (se recomienda 6 s)", - "HTTP Headers (optional)": "Encabezados HTTP (opcional)", - "HTTP Port": "Puerto HTTP", - "HTTP response codes that should mark a playlist as temporarily unavailable. All channels from the affected playlist will be skipped during failover resolution.": "Códigos de respuesta HTTP que deberían marcar una lista de reproducción como no disponible temporalmente. Todos los canales de la lista de reproducción afectada se omitirán durante la resolución de conmutación por error.", - "HTTP status codes": "Códigos de estado HTTP", - "HTTPS Port": "Puerto HTTPS", "Hardware Acceleration": "Aceleración de hardware", + "Has metadata": "Tiene metadatos", "Has TMDB/IMDB ID": "Tiene ID de TMDB/IMDB", "Has TMDB/TVDB/IMDB ID": "Tiene ID de TMDB/TVDB/IMDB", - "Has metadata": "Tiene metadatos", + "HDHomeRun URL": "URL de ejecución de HDHome", + "HDHR/Xtream API Streams": "Secuencias de API HDHR/Xtream", + "HDHR Base URL": "URL base de HDHR", "Header": "Encabezamiento", "Header name": "Nombre del encabezado", - "Header value": "valor del encabezado", "Headers": "Encabezados", + "Header value": "valor del encabezado", "Healthy": "Saludable", "Help support this project by donating! Any amount is appreciated.": "¡Ayuda a apoyar este proyecto donando! Se agradece cualquier cantidad.", "High-Risk Permissions": "Permisos de alto riesgo", "Higher weight = more likely to appear when shuffling": "Mayor peso = es más probable que aparezca al barajar", "Hint for proxy to enable hardware acceleration if available": "Sugerencia para que el proxy habilite la aceleración de hardware si está disponible", + "HLS Playlist URL": "URL de la lista de reproducción HLS", + "HLS provides better compatibility": "HLS proporciona una mejor compatibilidad", + "HLS segment length (6s recommended)": "Longitud del segmento HLS (se recomienda 6 s)", "Hooks": "Manos", "Host / IP Address": "Anfitrión/Dirección IP", "How content is ordered in the schedule. Manual lets you place items on a visual timeline.": "Cómo se ordena el contenido en el cronograma. Manual le permite colocar elementos en una línea de tiempo visual.", @@ -868,13 +917,20 @@ "How the manual schedule repeats across the schedule window": "Cómo se repite la programación manual en la ventana de programación", "How to handle content with multiple genres": "Cómo manejar contenido con múltiples géneros", "How you would like to ID your channels in the EPG.": "Cómo le gustaría identificar sus canales en la EPG.", - "I understand, clear now": "Entiendo, claro ahora", - "I understand, reset now": "Entiendo, reinicie ahora", - "ID": "IDENTIFICACIÓN", - "IMDB ID": "ID IMDB", - "ISO country code for the DVR guide (e.g. us, de, gb).": "Código de país ISO para la guía del DVR (por ejemplo, us, de, gb).", - "ISO language code for the DVR guide (e.g. en, de, fr).": "Código de idioma ISO para la guía del DVR (por ejemplo, en, de, fr).", + "http://192.168.0.123:36400": "http://192.168.0.123:36400", + "HTTP Headers (optional)": "Encabezados HTTP (opcional)", + "HTTP Port": "Puerto HTTP", + "HTTP response codes that should mark a playlist as temporarily unavailable. All channels from the affected playlist will be skipped during failover resolution.": "Códigos de respuesta HTTP que deberían marcar una lista de reproducción como no disponible temporalmente. Todos los canales de la lista de reproducción afectada se omitirán durante la resolución de conmutación por error.", + "https://example.com/backdrop.jpg": "https://ejemplo.com/backdrop.jpg", + "https://example.com/cover.jpg": "https://ejemplo.com/cover.jpg", + "https://example.com/logo.png": "https://ejemplo.com/logo.png", + "https://example.com/poster.jpg": "https://ejemplo.com/poster.jpg", + "https://www.kinopoisk.ru/film/123456/": "https://www.kinopoisk.ru/film/123456/", + "https://www.youtube.com/watch?v=abc123": "https://www.youtube.com/watch?v=abc123", + "HTTPS Port": "Puerto HTTPS", + "HTTP status codes": "Códigos de estado HTTP", "Icon": "Icono", + "ID": "IDENTIFICACIÓN", "Idle Streams": "Flujos inactivos", "If enabled, all series in the selected category will be imported. Use with caution as this will make a lot of requests to your provider to fetch metadata and episodes. It is recomended to import only the series you want to watch. You can also enable the series option on your playlist under the \"Groups and Streams to Import\" to import all the base data for all available series.": "Si está habilitado, se importarán todas las series de la categoría seleccionada. Úselo con precaución, ya que esto generará muchas solicitudes a su proveedor para obtener metadatos y episodios. Se recomienda importar solo las series que deseas ver. También puedes habilitar la opción de series en tu lista de reproducción en \"Grupos y transmisiones para importar\" para importar todos los datos base de todas las series disponibles.", "If enabled, the User Agent will also be used for fetching playlist files. Otherwise, the default FFmpeg User Agent is used for playlists.": "Si está habilitado, el agente de usuario también se utilizará para recuperar archivos de listas de reproducción. De lo contrario, se utiliza el agente de usuario FFmpeg predeterminado para las listas de reproducción.", @@ -886,41 +942,42 @@ "If you have MediaFlow Proxy installed, you can use it to proxy your m3u editor playlist streams. When enabled, the app will auto-generate URLs for you to use via MediaFlow Proxy.": "Si tiene instalado MediaFlow Proxy, puede usarlo para representar las transmisiones de listas de reproducción del editor m3u. Cuando esté habilitada, la aplicación generará automáticamente URL para que las utilice a través de MediaFlow Proxy.", "If your provider supports EPG, you can import it automatically.": "Si su proveedor admite EPG, puede importarlo automáticamente.", "Ignored file types": "Tipos de archivos ignorados", - "Image URL": "URL de la imagen", "Images only": "Sólo imágenes", + "Image URL": "URL de la imagen", + "IMDB ID": "ID IMDB", "Img": "imagen", "Implementation": "Implementación", - "Import Metadata": "Importar metadatos", "Import All Series": "Importar todas las series", "Import Channels": "Importar canales", + "Import channels from a CSV or XLSX file.": "Importe canales desde un archivo CSV o XLSX.", "Import EPG": "Importar EPG", + "Import Metadata": "Importar metadatos", "Import Movies": "Importar películas", "Import Series": "Serie de importación", "Import Series Episodes & Metadata": "Importar episodios de series y metadatos", "Import Settings": "Importar configuración", - "Import channels from a CSV or XLSX file.": "Importe canales desde un archivo CSV o XLSX.", "In-App Player Transcoding": "Transcodificación del reproductor en la aplicación", "Include Files": "Incluir archivos", - "Include Metadata": "Incluir metadatos", - "Include VOD": "Incluir VOD", - "Include VOD channels in the scrub.": "Incluya canales VOD en el fregado.", - "Include VOD in M3U output": "Incluir VOD en la salida M3U", "Include lifecycle hook": "Incluir gancho de ciclo de vida", "Include logos in proxy URL override": "Incluir logotipos en la anulación de URL de proxy", + "Include Metadata": "Incluir metadatos", "Include series in M3U output": "Incluir series en la salida M3U", "Includes VOD": "Incluye VOD", + "Include VOD": "Incluir VOD", + "Include VOD channels in the scrub.": "Incluya canales VOD en el fregado.", + "Include VOD in M3U output": "Incluir VOD en la salida M3U", "Indicates the shift of the program schedule, use the values -2,-1,0,1,2,.. and so on.": "Indica el cambio de horario del programa, utilice los valores -2,-1,0,1,2,.. y así sucesivamente.", "Info": "Información", "Information about the last sync operation": "Información sobre la última operación de sincronización", "Input Stream Format": "Formato de flujo de entrada", "Install": "Instalar", "Install And Trust": "Instalar y confiar", - "Install failed": "La instalación falló", - "Install latest release from GitHub": "Instale la última versión de GitHub", "Installed": "Instalado", "Installed Plugins": "Complementos instalados", "Installed plugins that passed validation, are trusted, and haven't been modified.": "Complementos instalados que pasaron la validación, son confiables y no han sido modificados.", "Installed plugins with a newer version available on GitHub.": "Complementos instalados con una versión más reciente disponible en GitHub.", + "Install failed": "La instalación falló", + "Install latest release from GitHub": "Instale la última versión de GitHub", "Installs": "Instalaciones", "Integration EPG URL": "URL de EPG de integración", "Integration Playlist URL": "URL de la lista de reproducción de integración", @@ -931,18 +988,23 @@ "Invalid Time": "Hora no válida", "Invalid timeout (minutes)": "Tiempo de espera no válido (minutos)", "Invocation": "Invocación", + "ISO country code for the DVR guide (e.g. us, de, gb).": "Código de país ISO para la guía del DVR (por ejemplo, us, de, gb).", + "ISO language code for the DVR guide (e.g. en, de, fr).": "Código de idioma ISO para la guía del DVR (por ejemplo, en, de, fr).", "Item Details": "Detalles del artículo", - "Item Name": "Nombre del artículo", "Item is added": "Se agrega el artículo", "Item is removed": "El artículo se elimina", - "Item type": "tipo de artículo", + "Item Name": "Nombre del artículo", "Items": "Elementos", "Items per page (default: 15, max: 50)": "Elementos por página (predeterminado: 15, máximo: 50)", - "JSON object containing key-value pairs for an update action.": "Objeto JSON con pares clave-valor para una acción de actualización.", + "Item type": "tipo de artículo", + "I understand, clear now": "Entiendo, claro ahora", + "I understand, reset now": "Entiendo, reinicie ahora", "Jellyfin": "Jellyfin", "John Doe, Jane Smith": "John Doe, Jane Smith", "Join us on Discord": "Únete a nosotros en Discord", + "JSON object containing key-value pairs for an update action.": "Objeto JSON con pares clave-valor para una acción de actualización.", "Keep cache permanently (disable expiry cleanup)": "Mantener el caché permanentemente (deshabilitar la limpieza de caducidad)", + "Keeps failover ordering in sync with current stream quality. Affects three places: scheduled rescoring (the interval below), the per-channel \"Rescore now\" action, and the \"Make smart channel\" bulk action. The Priority Order under Auto-Merge above is reused for the actual scoring in all three.": "Mantiene los pedidos de conmutación por error sincronizados con la calidad de la transmisión actual. Afecta a tres lugares: la repuntuación programada (el intervalo a continuación), la acción por canal \"Volver a puntuar ahora\" y la acción masiva \"Crear canal inteligente\". El orden de prioridad de la combinación automática anterior se reutiliza para la puntuación real en los tres.", "Kinopoisk Rating Count": "Recuento de calificaciones de Kinopoisk", "Kinopoisk URL": "URL de cinepoisk", "Label": "Etiqueta", @@ -950,17 +1012,17 @@ "Language Code": "Código de idioma", "Last Channels Checked": "Últimos canales comprobados", "Last Dead Links": "Últimos enlaces muertos", - "Last Ran": "Última ejecución", - "Last Runtime": "Último tiempo de ejecución", - "Last Sync Stats": "Estadísticas de la última sincronización", - "Last Synced": "Última sincronización", - "Last Watched": "Visto por última vez", "Last heartbeat": "último latido", - "Last probe returned no data — the stream may have been unreachable.": "La última sonda no arrojó datos; es posible que no se haya podido acceder a la transmisión.", "Last probed": "Última sonda", + "Last probe returned no data — the stream may have been unreachable.": "La última sonda no arrojó datos; es posible que no se haya podido acceder a la transmisión.", + "Last Ran": "Última ejecución", "Last ran": "Última ejecución", + "Last Runtime": "Último tiempo de ejecución", "Last sync :date": "Última sincronización :date", + "Last Synced": "Última sincronización", + "Last Sync Stats": "Estadísticas de la última sincronización", "Last validation": "Última validación", + "Last Watched": "Visto por última vez", "Latest persisted log messages for this run.": "Últimos mensajes de registro persistentes para esta ejecución.", "Latest version: :version": "Última versión: :version", "Layout & Display Options": "Opciones de diseño y visualización", @@ -969,18 +1031,19 @@ "Leave blank to keep the current password": "Déjelo en blanco para mantener la contraseña actual", "Leave blank to use the same provider as the primary account.": "Déjelo en blanco para utilizar el mismo proveedor que la cuenta principal.", "Leave empty for direct stream proxying": "Déjelo vacío para proxy de transmisión directa", - "Leave empty to disable .strm file generation for VOD. Priority: VOD > Group > Global.": "Déjelo vacío para deshabilitar la generación de archivos .strm para VOD. Prioridad: VOD > Grupo > Global.", + "Leave empty to copy the highest-scoring source's title.": "Déjelo vacío para copiar el título de la fuente con la puntuación más alta.", "Leave empty to disable .strm file generation for series. Priority: Series > Category > Global.": "Déjelo vacío para deshabilitar la generación de archivos .strm para series. Prioridad: Serie > Categoría > Global.", + "Leave empty to disable .strm file generation for VOD. Priority: VOD > Group > Global.": "Déjelo vacío para deshabilitar la generación de archivos .strm para VOD. Prioridad: VOD > Grupo > Global.", "Leave empty to remove": "Dejar vacío para eliminar", "Leave empty to remove custom poster URL and use placeholder fallback.": "Deje vacío para eliminar la URL del póster personalizado y usar el marcador de posición predeterminado.", "Leave empty to remove the custom logo and use provider/EPG logo.": "Déjelo vacío para eliminar el logotipo personalizado y utilizar el logotipo de proveedor/EPG.", "Leave empty to remove the logo.": "Déjelo vacío para eliminar el logo.", "Leave empty to use default value.": "Déjelo vacío para usar el valor predeterminado.", - "Leave empty to use provider URL.": "Déjelo vacío para usar la URL del proveedor.", "Leave empty to use provider display name.": "Déjelo vacío para usar el nombre para mostrar del proveedor.", "Leave empty to use provider icon.": "Déjelo vacío para usar el ícono del proveedor.", "Leave empty to use provider logo.": "Déjelo vacío para usar el logotipo del proveedor.", "Leave empty to use provider name.": "Déjelo vacío para usar el nombre del proveedor.", + "Leave empty to use provider URL.": "Déjelo vacío para usar la URL del proveedor.", "Leave empty to use the default.": "Déjelo vacío para usar el valor predeterminado.", "Level": "Nivel", "Libraries": "Bibliotecas", @@ -989,23 +1052,25 @@ "Libraries to Import": "Bibliotecas para importar", "Library Name": "Nombre de la biblioteca", "Library Selection": "Selección de biblioteca", + "libx264": "libx264", "Lifecycle": "Ciclo vital", "Lineup": "Póngase en fila", "Lineup added successfully!": "¡Alineación agregada exitosamente!", "Links": "Campo de golf", + "List of allowed domains (supports wildcards, e.g. *.example.com*). Press [tab] or [return] to add item. When set, playlist URLs must match one of these patterns.": "Lista de dominios permitidos (admite comodines, por ejemplo, *.example.com*). Presione [tab] o [regresar] para agregar un elemento. Cuando se configuran, las URL de las listas de reproducción deben coincidir con uno de estos patrones.", "List Pages": "Listar páginas", "List Resources": "Listar recursos", "List Widgets": "Lista de widgets", - "List of allowed domains (supports wildcards, e.g. *.example.com*). Press [tab] or [return] to add item. When set, playlist URLs must match one of these patterns.": "Lista de dominios permitidos (admite comodines, por ejemplo, *.example.com*). Presione [tab] o [regresar] para agregar un elemento. Cuando se configuran, las URL de las listas de reproducción deben coincidir con uno de estos patrones.", "Live": "Vivir", "Live Activity Feed": "Feed de actividad en vivo", + "Live channel groups": "Grupos de canales en vivo", + "Live channel processing": "Procesamiento de canales en vivo", "Live Channels": "Canales en vivo", + "Live groups to import": "Grupos en vivo para importar", + "Live streaming (optional)": "Transmisión en vivo (opcional)", "Live Streaming Profile": "Perfil de transmisión en vivo", "Live Sync": "Sincronización en vivo", "Live TV": "Televisión en vivo", - "Live channel processing": "Procesamiento de canales en vivo", - "Live groups to import": "Grupos en vivo para importar", - "Live streaming (optional)": "Transmisión en vivo (opcional)", "Load Avg": "Carga promedio", "Load saved pattern": "Cargar patrón guardado", "Local": "Local", @@ -1019,154 +1084,146 @@ "Login as this user": "Inicia sesión como este usuario", "Logo": "Logo", "Logo Cache": "Logo Cache", - "Logo Override": "Anulación de logotipo", - "Logo URL": "Logo URL", "Logo cache cleared": "Se borró la caché del logotipo", "Logo image": "Imagen del logotipo", - "Logo override URL": "URL de anulación de logotipo", + "Logo Override": "Anulación de logotipo", "Logo override updated": "Anulación de logotipo actualizada", + "Logo override URL": "URL de anulación de logotipo", "Logo placeholder": "Marcador de posición del logotipo", "Logo repository refreshed": "Repositorio de logotipos actualizado", "Logo updated": "Logotipo actualizado", + "Logo URL": "Logo URL", "Loop Content": "Contenido en bucle", "Lower = tried first": "Inferior = probado primero", "M3U": "con", + "m3u editor proxy url.": "URL del proxy del editor m3u.", + "M3U playlist containing all your Networks as live channels": "Lista de reproducción M3U que contiene todas tus redes como canales en vivo", "M3U Playlist URL": "URL de la lista de reproducción M3U", "M3U Proxy Stream Monitor": "Monitor de flujo proxy M3U", "M3U URL": "URL M3U", - "M3U playlist containing all your Networks as live channels": "Lista de reproducción M3U que contiene todas tus redes como canales en vivo", - "MPAA Rating": "Clasificación MPAA", - "MPAA rating classification.": "Clasificación de calificación MPAA.", "Main actors in the content.": "Actores principales del contenido.", "Make log files viewable": "Hacer visibles los archivos de registro", + "Make smart channel": "Hacer canal inteligente", "Manage": "Administrar", "Manage API Tokens": "Administrar tokens API", "Manage Assets": "Administrar activos", "Manage Backups": "Administrar copias de seguridad", - "Manage Plex libraries and trigger scans.": "Administre bibliotecas Plex y active análisis.", - "Manage Profiles": "Administrar perfiles", - "Manage Stream File Settings": "Administrar la configuración del archivo de transmisión", - "Manage VOD groups.": "Administrar grupos de VOD.", "Manage cached logos and uploaded media assets. Placeholder images can be updated in Settings > Assets.": "Administre logotipos almacenados en caché y recursos multimedia cargados. Las imágenes de marcador de posición se pueden actualizar en Configuración > Activos.", "Manage installed plugins, review new installs, and check security status from one place.": "Administre complementos instalados, revise nuevas instalaciones y verifique el estado de seguridad desde un solo lugar.", "Manage live groups.": "Administrar grupos en vivo.", "Manage logo cache behavior and storage used by logo proxy URLs.": "Administre el comportamiento de la caché del logotipo y el almacenamiento utilizado por las URL del proxy del logotipo.", "Manage playlist links and URL options.": "Administre enlaces de listas de reproducción y opciones de URL.", + "Manage Plex libraries and trigger scans.": "Administre bibliotecas Plex y active análisis.", + "Manage Profiles": "Administrar perfiles", "Manage series categories. Only enabled series will be automatically updated on Playlist sync, this includes fetching episodes and metadata. You can also manually sync series to update episodes and metadata.": "Gestionar categorías de series. Solo las series habilitadas se actualizarán automáticamente en la sincronización de la lista de reproducción, esto incluye la obtención de episodios y metadatos. También puedes sincronizar series manualmente para actualizar episodios y metadatos.", + "Manages M3U playlists, including live streams, VOD, and series. Supports Xtream API.": "Administra listas de reproducción M3U, incluidas transmisiones en vivo, VOD y series. Soporta API Xtream.", + "Manage Stream File Settings": "Administrar la configuración del archivo de transmisión", "Manage users that can access and use the application. Each user will have their own playlists, channels, series, and other resources. Some features may be restricted based on user roles (such as global settings).": "Administrar usuarios que pueden acceder y utilizar la aplicación. Cada usuario tendrá sus propias listas de reproducción, canales, series y otros recursos. Algunas funciones pueden estar restringidas según los roles de los usuarios (como la configuración global).", + "Manage VOD groups.": "Administrar grupos de VOD.", "Manage your API tokens. Tokens allow you to authenticate API requests for certain API actions.": "Administre sus tokens API. Los tokens le permiten autenticar solicitudes de API para determinadas acciones de API.", "Manage your Plex server directly from m3u-editor — register DVR tuners, monitor sessions, and control libraries.": "Administre su servidor Plex directamente desde m3u-editor: registre sintonizadores DVR, monitoree sesiones y controle bibliotecas.", - "Manages M3U playlists, including live streams, VOD, and series. Supports Xtream API.": "Administra listas de reproducción M3U, incluidas transmisiones en vivo, VOD y series. Soporta API Xtream.", "Manual": "Manual", - "Manual TMDB Search": "Búsqueda manual en TMDB", - "Manual actions available from the page header.": "Acciones manuales disponibles desde el encabezado de la página.", "Manual actions, hook-triggered automation, and scheduled jobs. Open a run to inspect payload, metrics, and live activity.": "Acciones manuales, automatización activada por gancho y trabajos programados. Abra una ejecución para inspeccionar la carga útil, las métricas y la actividad en vivo.", + "Manual actions available from the page header.": "Acciones manuales disponibles desde el encabezado de la página.", "Manually restart this EPG mapping? This will restart the existing mapping process.": "¿Reiniciar manualmente este mapeo EPG? Esto reiniciará el proceso de mapeo existente.", "Manually trigger this EPG mapping to run again. This will not modify the \"Recurring\" setting.": "Active manualmente esta asignación de EPG para que se ejecute nuevamente. Esto no modificará la configuración \"Recurrente\".", "Manually trigger this scrubber to run.": "Active manualmente este depurador para que se ejecute.", + "Manual TMDB Search": "Búsqueda manual en TMDB", "Map EPG to Playlist": "Asignar EPG a lista de reproducción", "Map EPG to selected": "Mapear EPG al seleccionado", "Map now": "Mapa ahora", - "Map the selected EPG to the selected Playlist channels.": "Asigne la EPG seleccionada a los canales de la lista de reproducción seleccionados.", - "Map the selected EPG to the selected channel(s).": "Asigne la EPG seleccionada a los canales seleccionados.", "Mapping": "Cartografía", "Mapping Enabled": "Mapeo habilitado", "Mapping started, you will be notified when the process is complete.": "Se inició el mapeo, se le notificará cuando se complete el proceso.", + "Map the selected EPG to the selected channel(s).": "Asigne la EPG seleccionada a los canales seleccionados.", + "Map the selected EPG to the selected Playlist channels.": "Asigne la EPG seleccionada a los canales de la lista de reproducción seleccionados.", "Mark playlists as temporarily unavailable when specific HTTP errors are encountered during failover.": "Marque las listas de reproducción como no disponibles temporalmente cuando se encuentren errores HTTP específicos durante la conmutación por error.", "Match Confidence Threshold (%)": "Umbral de confianza del partido (%)", "Matching Thresholds": "Umbrales coincidentes", "Max Backups": "Copias de seguridad máximas", "Max Concurrent Players": "Máximo de reproductores simultáneos", - "Max Streams": "Flujos máximos", "Max concurrent requests": "Máximo de solicitudes simultáneas", - "Max width of the page content": "Ancho máximo del contenido de la página.", + "Maximum distance for exact matches. Lower = stricter exact matching. Default: 8": "Distancia máxima para coincidencias exactas. Inferior = coincidencia exacta más estricta. Predeterminado: 8", "Maximum Fuzzy Distance": "Distancia difusa máxima", "Maximum Levenshtein distance allowed for fuzzy matching. Lower = stricter matching. Default: 25": "Distancia máxima de Levenshtein permitida para coincidencias difusas. Inferior = coincidencia más estricta. Predeterminado: 25", - "Maximum TMDB API requests per second. TMDB allows ~40 req/s for free accounts.": "Solicitudes máximas de API de TMDB por segundo. TMDB permite ~40 solicitudes/s para cuentas gratuitas.", - "Maximum distance for exact matches. Lower = stricter exact matching. Default: 8": "Distancia máxima para coincidencias exactas. Inferior = coincidencia exacta más estricta. Predeterminado: 8", "Maximum number of players that can be open at once.": "Número máximo de reproductores que se pueden abrir a la vez.", "Maximum number of simultaneous requests allowed. Also controls the level of parallelism for batch operations such as stream probing and channel scrubbing.": "Número máximo de solicitudes simultáneas permitidas. También controla el nivel de paralelismo para operaciones por lotes como el sondeo de flujos y la depuración de canales.", "Maximum number of simultaneous requests to the provider.": "Número máximo de solicitudes simultáneas al proveedor.", "Maximum proxy streams allowed. Applies regardless of Provider Profiles — set to 0 for unlimited. When Provider Profiles are enabled, this is the authoritative proxy-level limit while provider limits control routing.": "Máximos flujos de proxy permitidos. Se aplica independientemente de los perfiles de proveedor: establecido en 0 para ilimitado. Cuando los perfiles de proveedor están habilitados, este es el límite de nivel de proxy autorizado, mientras que el proveedor limita el enrutamiento de control.", "Maximum results to return (default: 10, max: 50)": "Máximo de resultados a devolver (predeterminado: 10, máximo: 50)", + "Maximum TMDB API requests per second. TMDB allows ~40 req/s for free accounts.": "Solicitudes máximas de API de TMDB por segundo. TMDB permite ~40 solicitudes/s para cuentas gratuitas.", + "Max Streams": "Flujos máximos", + "Max width of the page content": "Ancho máximo del contenido de la página.", + "MediaFlow Proxy": "Proxy de flujo de medios", "Media Library Paths": "Rutas de la biblioteca multimedia", "Media Server": "Servidor de medios", "Media Server Library Refresh": "Actualización de la biblioteca del servidor multimedia", "Media Servers": "Servidores de medios", "Media server status has been reset.": "Se ha restablecido el estado del servidor de medios.", "Media server status reset": "Restablecer el estado del servidor multimedia", - "MediaFlow Proxy": "Proxy de flujo de medios", "Memory": "Memoria", "Memory Usage": "Uso de la memoria", - "Merge Enabled": "Fusión habilitada", "Merge behavior": "Comportamiento de fusión", - "Merge disabled for selected channels": "Fusión deshabilitada para canales seleccionados", - "Merge only new channels": "Fusionar solo canales nuevos", - "Merge re-enabled for selected channels": "Fusión reactivada para canales seleccionados", - "Merge source configuration": "Fusionar configuración de origen", "Merged EPG": "EPG fusionada", "Merged EPG is being processed in the background. You will be notified on completion.": "La EPG fusionada se está procesando en segundo plano. Se le notificará al finalizar.", "Merged EPG is processing": "La EPG fusionada se está procesando", "Merged EPGs": "EPG fusionadas", + "Merge disabled for selected channels": "Fusión deshabilitada para canales seleccionados", "Merged Playlist": "Lista de reproducción fusionada", "Merged Playlists": "Listas de reproducción fusionadas", - "Merging channels in the background for this group only. You will be notified once the process is complete.": "Fusionar canales en segundo plano solo para este grupo. Se le notificará una vez que se complete el proceso.", + "Merge Enabled": "Fusión habilitada", + "Merge only new channels": "Fusionar solo canales nuevos", + "Merge re-enabled for selected channels": "Fusión reactivada para canales seleccionados", + "Merge source configuration": "Fusionar configuración de origen", "Merging channels in the background. You will be notified once the process is complete.": "Fusionando canales en segundo plano. Se le notificará una vez que se complete el proceso.", + "Merging channels in the background for this group only. You will be notified once the process is complete.": "Fusionar canales en segundo plano solo para este grupo. Se le notificará una vez que se complete el proceso.", "Message": "Mensaje", "Metadata": "Metadatos", "Metadata Source": "Fuente de metadatos", "Method": "Método", - "Minimum Similarity (%)": "Similitud mínima (%)", "Minimum continuous silence within a check window to count as a silent check. Default: 3 seconds.": "Silencio continuo mínimo dentro de una ventana de verificación para contar como una verificación silenciosa. Predeterminado: 3 segundos.", + "Minimum delay between provider requests, in milliseconds.": "Retraso mínimo entre solicitudes de proveedores, en milisegundos.", + "Minimum Similarity (%)": "Similitud mínima (%)", "Minimum similarity percentage required for a match (0-100). Higher = stricter matching. Default: 70%": "Porcentaje de similitud mínimo requerido para una coincidencia (0-100). Mayor = coincidencia más estricta. Predeterminado: 70%", "Minimum title similarity percentage (50-100) required to accept a match. Higher values = stricter matching.": "Porcentaje mínimo de similitud de títulos (50-100) requerido para aceptar una coincidencia. Valores más altos = coincidencia más estricta.", + "Missing checksum": "Suma de comprobación faltante", "Missing Credentials": "Credenciales faltantes", + "Missing credentials": "Credenciales faltantes", "Missing Files": "Archivos faltantes", + "Missing information": "Información faltante", "Missing SMTP Fields": "Faltan campos SMTP", "Missing TMDB/IMDB ID": "Falta ID de TMDB/IMDB", "Missing TMDB/TVDB/IMDB ID": "Falta el ID de TMDB/TVDB/IMDB", "Missing URL": "URL faltante", - "Missing checksum": "Suma de comprobación faltante", - "Missing credentials": "Credenciales faltantes", - "Missing information": "Información faltante", + "Mixed playlists not supported": "No se admiten listas de reproducción mixtas", "Mode": "Modo", "Model": "Modelo", "Modified": "Modificado", "Monitoring grace period (seconds)": "Período de gracia de seguimiento (segundos)", "Move Channels to Group": "Mover canales al grupo", - "Move Series to Category": "Mover serie a categoría", "Move now": "Muévete ahora", + "Move Series to Category": "Mover serie a categoría", "Move the category series to another category.": "Mueva la serie de categorías a otra categoría.", "Move the group channels to the another group.": "Mueva los canales del grupo a otro grupo.", - "Move the selected VOD(s) to the chosen group.": "Mueva los VOD seleccionados al grupo elegido.", "Move the selected channel(s) to the chosen group.": "Mueva los canales seleccionados al grupo elegido.", + "Move the selected VOD(s) to the chosen group.": "Mueva los VOD seleccionados al grupo elegido.", "Move the series to another category.": "Mueve la serie a otra categoría.", "Move to Group": "Mover al grupo", "Movie": "Película", "Movie Image": "Imagen de película", - "Movie Sync": "Sincronización de películas", - "Movie Title": "Título de la película", "Movies": "Cine", "Movies added": "Películas agregadas", "Movies added successfully": "Películas agregadas exitosamente", + "Movie Sync": "Sincronización de películas", + "Movie Title": "Título de la película", + "mp4": "mpch", + "MPAA Rating": "Clasificación MPAA", + "MPAA rating classification.": "Clasificación de calificación MPAA.", "My Awesome Plugin": "Mi complemento impresionante", - "NFO File Generation": "Generación de archivos NFO", - "NOTE: Custom VOD need to be associated with a Playlist or Custom Playlist.": "NOTA: El VOD personalizado debe estar asociado con una lista de reproducción o una lista de reproducción personalizada.", - "NOTE: Custom channels need to be associated with a Playlist or Custom Playlist.": "NOTA: Los canales personalizados deben estar asociados con una lista de reproducción o una lista de reproducción personalizada.", - "NOTE: If the list is empty, sync the playlist and check again once complete.": "NOTA: Si la lista está vacía, sincronice la lista de reproducción y verifique nuevamente una vez completada.", - "NOTE: Only properly formatted backups will be accepted. If the backup is not valid, you will receive an error when attempting to restore.": "NOTA: Sólo se aceptarán copias de seguridad formateadas correctamente. Si la copia de seguridad no es válida, recibirá un error al intentar restaurarla.", - "NOTE: Only the database will be restored, which will overwrite any existing data with the backup data. Files will not be automatically restored, you will need to manually re-upload them where needed.": "NOTA: Solo se restaurará la base de datos, lo que sobrescribirá cualquier dato existente con los datos de la copia de seguridad. Los archivos no se restaurarán automáticamente; deberá volver a cargarlos manualmente cuando sea necesario.", - "NOTE: Playlist channel output order is based on: 1 Sort order, 2 Channel no. and 3 Channel title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "NOTA: El orden de salida de los canales de la lista de reproducción se basa en: 1 Orden de clasificación, 2 Número de canal. y título de 3 canales, en ese orden. También puede editar la salida de su lista de reproducción para ordenarla automáticamente, lo que definirá el orden de clasificación según el orden de la lista de reproducción.", - "NOTE: Playlist series can be managed in the Series section. You will need to enabled the VOD channels and Series you wish to import metadata for as it will only be imported for enabled channels and series.": "NOTA: Las series de listas de reproducción se pueden administrar en la sección Series. Deberá habilitar los canales y series VOD para los que desea importar metadatos, ya que solo se importarán para canales y series habilitados.", - "NOTE: Restoring a backup will overwrite any existing data. Your manually uploaded EPG and Playlist files will NOT be restored. You will need to download the backup and manually re-upload where needed.": "NOTA: Al restaurar una copia de seguridad se sobrescribirán todos los datos existentes. Los archivos EPG y de lista de reproducción cargados manualmente NO se restaurarán. Deberá descargar la copia de seguridad y volver a cargarla manualmente cuando sea necesario.", - "NOTE: VOD output order is based on: 1 Sort order, 2 Channel no. and 3 Title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "NOTA: El orden de salida de VOD se basa en: 1 Orden de clasificación, 2 N.º de canal. y 3 Título, en ese orden. También puede editar la salida de su lista de reproducción para ordenarla automáticamente, lo que definirá el orden de clasificación según el orden de la lista de reproducción.", - "NOTE: When enabled, proxy mode is required for accurate connection tracking.": "NOTA: Cuando está habilitado, se requiere el modo proxy para un seguimiento preciso de la conexión.", - "NOTE: When restoring a backup, only the database will be restored, files will not be automatically restored. You will need to manually re-upload them where needed.": "NOTA: Al restaurar una copia de seguridad, solo se restaurará la base de datos; los archivos no se restaurarán automáticamente. Deberá volver a cargarlos manualmente cuando sea necesario.", - "NOTE: You will need to re-sync your playlist, or wait for the next scheduled sync, if changing this. This will overwrite any existing channel sort order customization for this playlist.": "NOTA: Deberá volver a sincronizar su lista de reproducción o esperar la siguiente sincronización programada, si cambia esto. Esto sobrescribirá cualquier personalización del orden de clasificación de canales existente para esta lista de reproducción.", "Name": "Nombre", - "Name Filtering": "Filtrado de nombres", "Name and branding": "Nombre y marca", "Name and describe your plugin": "Nombra y describe tu complemento", + "Name Filtering": "Filtrado de nombres", "Name of the HTTP header.": "Nombre del encabezado HTTP.", "Name of the variable to send as GET/POST variable to your webhook URL.": "Nombre de la variable que se enviará como variable GET/POST a la URL de su webhook.", "Navigation position": "Posición de navegación", @@ -1176,38 +1233,40 @@ "Network Name": "Nombre de la red", "Networks": "Redes", "Networks (Pseudo-Live Channels)": "Redes (canales pseudo-en vivo)", + "Networks are pseudo-TV channels built from media server content (Jellyfin/Emby/etc.) You can create M3U playlists and stream them to your IPTV apps and devices. A media server is required to use networks.": "Las redes son pseudocanales de TV creados a partir del contenido del servidor de medios (Jellyfin/Emby/etc.). Puede crear listas de reproducción M3U y transmitirlas a sus aplicaciones y dispositivos IPTV. Se requiere un servidor de medios para utilizar redes.", "Networks EPG URL": "URL de la EPG de redes", "Networks Playlist URL": "URL de la lista de reproducción de redes", - "Networks are pseudo-TV channels built from media server content (Jellyfin/Emby/etc.) You can create M3U playlists and stream them to your IPTV apps and devices. A media server is required to use networks.": "Las redes son pseudocanales de TV creados a partir del contenido del servidor de medios (Jellyfin/Emby/etc.). Puede crear listas de reproducción M3U y transmitirlas a sus aplicaciones y dispositivos IPTV. Se requiere un servidor de medios para utilizar redes.", - "Networks pull VOD content from the linked media server.": "Las redes extraen contenido VOD del servidor de medios vinculado.", "Networks pull their content from a media server integration. Select which media server to use.": "Las redes extraen su contenido de una integración de servidor de medios. Seleccione qué servidor de medios usar.", + "Networks pull VOD content from the linked media server.": "Las redes extraen contenido VOD del servidor de medios vinculado.", "Never": "Nunca", "New Custom Channel": "Nuevo canal personalizado", "New Custom VOD": "Nuevo VOD personalizado", "New Group Name": "Nuevo nombre de grupo", + "Newly Mapped": "Recién mapeado", "New Profile": "Nuevo perfil", "New Setting": "Nueva configuración", - "Newly Mapped": "Recién mapeado", "Next Sync": "Siguiente sincronización", + "NFO File Generation": "Generación de archivos NFO", "No": "No", - "No Duplicates Found": "No se encontraron duplicados", - "No EPG cache files found.": "No se encontraron archivos de caché EPG.", - "No Libraries Found": "No se encontraron bibliotecas", - "No Media Found": "No se encontraron medios", - "No Paths Configured": "No hay rutas configuradas", - "No VOD channels found": "No se encontraron canales VOD", "No actions were declared for this plugin.": "No se declararon acciones para este complemento.", "No aggregate totals were returned by this run.": "Esta ejecución no devolvió totales agregados.", "No checksum was found for this release. Please provide the SHA-256 hash to verify the download.": "No se encontró ninguna suma de comprobación para esta versión. Proporcione el hash SHA-256 para verificar la descarga.", "No description available": "No hay descripción disponible", "No description provided.": "No se proporciona descripción.", "No duplicate series were found for this media server.": "No se encontraron series duplicadas para este servidor de medios.", - "No enabled VOD channels found in the selected playlist.": "No se encontraron canales VOD habilitados en la lista de reproducción seleccionada.", + "No Duplicates Found": "No se encontraron duplicados", "No enabled series found matching the criteria.": "No se encontraron series habilitadas que coincidan con los criterios.", + "No enabled VOD channels found in the selected playlist.": "No se encontraron canales VOD habilitados en la lista de reproducción seleccionada.", + "No EPG cache files found.": "No se encontraron archivos de caché EPG.", "No heartbeat yet": "Aún no hay latidos", + "No Libraries Found": "No se encontraron bibliotecas", "No live activity yet": "Aún no hay actividad en vivo", "No log messages yet": "Aún no hay mensajes de registro", + "No Media Found": "No se encontraron medios", "No movie or TV show libraries were found on the server.": "No se encontraron bibliotecas de películas o programas de televisión en el servidor.", + "None": "Ninguno", + "None declared": "Ninguno declarado", + "No Paths Configured": "No hay rutas configuradas", "No plugin installs yet.": "Aún no se ha instalado ningún complemento.", "No plugin record loaded.": "No se ha cargado ningún registro de complemento.", "No plugin runs recorded yet.": "Aún no se han registrado ejecuciones de complementos.", @@ -1223,23 +1282,35 @@ "No structured context was attached to this activity line.": "No se adjuntó ningún contexto estructurado a esta línea de actividad.", "No summary has been written yet.": "Aún no se ha escrito ningún resumen.", "No syncs yet": "Aún no hay sincronizaciones", - "No template programmes found in the first week": "No se encontraron programas de plantilla en la primera semana.", - "No trailer ID set.": "No se ha establecido ningún ID de remolque.", - "No video files were found in the configured paths.": "No se encontraron archivos de video en las rutas configuradas.", - "None": "Ninguno", - "None declared": "Ninguno declarado", - "Not Configured": "No configurado", "Not authorized to manage this stream.": "No autorizado para gestionar esta transmisión.", - "Not set": "No establecido", - "Not started": "No iniciado", + "Not Configured": "No configurado", + "NOTE: Custom channels need to be associated with a Playlist or Custom Playlist.": "NOTA: Los canales personalizados deben estar asociados con una lista de reproducción o una lista de reproducción personalizada.", + "NOTE: Custom VOD need to be associated with a Playlist or Custom Playlist.": "NOTA: El VOD personalizado debe estar asociado con una lista de reproducción o una lista de reproducción personalizada.", + "NOTE: If the list is empty, sync the playlist and check again once complete.": "NOTA: Si la lista está vacía, sincronice la lista de reproducción y verifique nuevamente una vez completada.", + "NOTE: Only properly formatted backups will be accepted. If the backup is not valid, you will receive an error when attempting to restore.": "NOTA: Sólo se aceptarán copias de seguridad formateadas correctamente. Si la copia de seguridad no es válida, recibirá un error al intentar restaurarla.", + "NOTE: Only the database will be restored, which will overwrite any existing data with the backup data. Files will not be automatically restored, you will need to manually re-upload them where needed.": "NOTA: Solo se restaurará la base de datos, lo que sobrescribirá cualquier dato existente con los datos de la copia de seguridad. Los archivos no se restaurarán automáticamente; deberá volver a cargarlos manualmente cuando sea necesario.", + "NOTE: Playlist channel output order is based on: 1 Sort order, 2 Channel no. and 3 Channel title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "NOTA: El orden de salida de los canales de la lista de reproducción se basa en: 1 Orden de clasificación, 2 Número de canal. y título de 3 canales, en ese orden. También puede editar la salida de su lista de reproducción para ordenarla automáticamente, lo que definirá el orden de clasificación según el orden de la lista de reproducción.", + "NOTE: Playlist series can be managed in the Series section. You will need to enabled the VOD channels and Series you wish to import metadata for as it will only be imported for enabled channels and series.": "NOTA: Las series de listas de reproducción se pueden administrar en la sección Series. Deberá habilitar los canales y series VOD para los que desea importar metadatos, ya que solo se importarán para canales y series habilitados.", + "NOTE: Restoring a backup will overwrite any existing data. Your manually uploaded EPG and Playlist files will NOT be restored. You will need to download the backup and manually re-upload where needed.": "NOTA: Al restaurar una copia de seguridad se sobrescribirán todos los datos existentes. Los archivos EPG y de lista de reproducción cargados manualmente NO se restaurarán. Deberá descargar la copia de seguridad y volver a cargarla manualmente cuando sea necesario.", + "NOTE: VOD output order is based on: 1 Sort order, 2 Channel no. and 3 Title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "NOTA: El orden de salida de VOD se basa en: 1 Orden de clasificación, 2 N.º de canal. y 3 Título, en ese orden. También puede editar la salida de su lista de reproducción para ordenarla automáticamente, lo que definirá el orden de clasificación según el orden de la lista de reproducción.", + "NOTE: When enabled, proxy mode is required for accurate connection tracking.": "NOTA: Cuando está habilitado, se requiere el modo proxy para un seguimiento preciso de la conexión.", + "NOTE: When restoring a backup, only the database will be restored, files will not be automatically restored. You will need to manually re-upload them where needed.": "NOTA: Al restaurar una copia de seguridad, solo se restaurará la base de datos; los archivos no se restaurarán automáticamente. Deberá volver a cargarlos manualmente cuando sea necesario.", + "NOTE: You will need to re-sync your playlist, or wait for the next scheduled sync, if changing this. This will overwrite any existing channel sort order customization for this playlist.": "NOTA: Deberá volver a sincronizar su lista de reproducción o esperar la siguiente sincronización programada, si cambia esto. Esto sobrescribirá cualquier personalización del orden de clasificación de canales existente para esta lista de reproducción.", + "No template programmes found in the first week": "No se encontraron programas de plantilla en la primera semana.", "Notification Message": "Mensaje de notificación", + "Notifications Sent": "Notificaciones enviadas", "Notification Subject": "Asunto de la notificación", "Notification Type": "Tipo de notificación", - "Notifications Sent": "Notificaciones enviadas", "Notify All Users": "Notificar a todos los usuarios", "Notify Myself": "Notificarme a mí mismo", "Notify User": "Notificar al usuario", "Notify Users": "Notificar a los usuarios", + "No trailer ID set.": "No se ha establecido ningún ID de remolque.", + "Not set": "No establecido", + "Not started": "No iniciado", + "Not yet probed — run a probe on this channel to capture stream details.": "Aún no sondeado: ejecute un sondeo en este canal para capturar los detalles de la transmisión.", + "No video files were found in the configured paths.": "No se encontraron archivos de video en las rutas configuradas.", + "No VOD channels found": "No se encontraron canales VOD", "Number of channels that were already mapped to an EPG entry.": "Número de canales que ya estaban asignados a una entrada de EPG.", "Number of channels that were searched for a matching EPG entry in this mapping. If the \"Override\" option is enabled, this will also include channels that were previously mapped. If the \"Override\" option is disabled, this will only include channels that were not previously mapped.": "Número de canales en los que se buscó una entrada EPG coincidente en esta asignación. Si la opción \"Anular\" está habilitada, esto también incluirá los canales que se asignaron previamente. Si la opción \"Anular\" está deshabilitada, esto solo incluirá canales que no fueron asignados previamente.", "Number of channels that were successfully matched to an EPG entry in this mapping. When \"Override\" is disabled, it is normal for this count to be 0 on subsequent syncs.": "Número de canales que coincidieron exitosamente con una entrada de EPG en esta asignación. Cuando \"Anular\" está deshabilitado, es normal que este recuento sea 0 en sincronizaciones posteriores.", @@ -1250,6 +1321,8 @@ "Number of streams available for HDHR and Xtream API service (if using).": "Número de transmisiones disponibles para el servicio HDHR y Xtream API (si se usa).", "Number of streams available for this playlist (only applies to custom channels assigned to this Custom Playlist).": "Número de transmisiones disponibles para esta lista de reproducción (solo se aplica a canales personalizados asignados a esta lista de reproducción personalizada).", "Number of streams available for this provider. If set to a value other than 0, will prevent any streams from starting if the number of active streams exceeds this value.": "Número de transmisiones disponibles para este proveedor. Si se establece en un valor distinto de 0, evitará que se inicie cualquier transmisión si el número de transmisiones activas excede este valor.", + "of :n total": "de :n total", + "Off": "Apagado", "Offline": "Desconectado", "Online": "En línea", "Only check this for plugins you're actively developing locally. Don't use for production installs.": "Marque esto solo para los complementos que esté desarrollando activamente localmente. No lo use para instalaciones de producción.", @@ -1258,181 +1331,186 @@ "Only enabled series will be automatically updated on Playlist sync, this includes fetching episodes and metadata. You can also manually sync series to update episodes and metadata.": "Solo las series habilitadas se actualizarán automáticamente en la sincronización de la lista de reproducción, esto incluye la obtención de episodios y metadatos. También puedes sincronizar series manualmente para actualizar episodios y metadatos.", "Only expired logo cache entries (those older than 30 days). If permanent cache is enabled, nothing will be removed.": "Solo entradas de caché de logotipos caducadas (aquellas con más de 30 días). Si el caché permanente está habilitado, no se eliminará nada.", "Only export enabled channels?": "¿Solo exportar canales habilitados?", + "Only live channels in these groups will be accessible. Leave empty to allow all live groups.": "Solo se podrá acceder a los canales en vivo de estos grupos. Déjelo vacío para permitir todos los grupos en vivo.", + "Only series in these categories will be accessible. Leave empty to allow all series categories.": "Sólo se podrá acceder a series de estas categorías. Déjelo vacío para permitir todas las categorías de series.", "Only unassigned auths are available. Each auth can only be assigned to one playlist at a time.": "Solo están disponibles las autenticaciones no asignadas. Cada autenticación solo se puede asignar a una lista de reproducción a la vez.", + "Only VOD channels in these groups will be accessible. Leave empty to allow all VOD groups.": "Solo se podrá acceder a los canales VOD de estos grupos. Déjelo vacío para permitir todos los grupos VOD.", "Open": "Abierto", - "Open Discord": "Abrir discordia", "Open action menu": "Abrir menú de acciones", "Open bulk action menu": "Abrir menú de acciones masivas", + "Open Discord": "Abrir discordia", "Open run": "carrera abierta", "Open the current run and watch the activity stream. If the run stalls, inspect the payload to confirm the target playlist and EPG pair.": "Abra la carrera actual y observe el flujo de actividad. Si la ejecución se detiene, inspeccione la carga útil para confirmar la lista de reproducción de destino y el par EPG.", - "Optional JSON array of columns to return for a select query. Defaults to [\"*\"].": "Array JSON opcional de columnas a devolver en una consulta de selección. Por defecto [\"*\"].", + "Optional. The name of a specific table to get the schema for. If omitted, returns all accessible tables.": "Opcional. Nombre de una tabla específica para obtener su esquema. Si se omite, devuelve todas las tablas accesibles.", + "Optional: Set credentials to access this alias via Xtream API. Must be unique across all aliases and playlist auths.": "Opcional: establezca las credenciales para acceder a este alias a través de Xtream API. Debe ser único en todos los alias y autorizaciones de listas de reproducción.", "Optional channel number for EPG": "Número de canal opcional para EPG", "Optional channel number for EPG ordering": "Número de canal opcional para pedidos de EPG", "Optional description for your reference.": "Descripción opcional para su referencia.", "Optional description of this profile": "Descripción opcional de este perfil.", "Optional description of what this profile does": "Descripción opcional de lo que hace este perfil", + "Optional JSON array of columns to return for a select query. Defaults to [\"*\"].": "Array JSON opcional de columnas a devolver en una consulta de selección. Por defecto [\"*\"].", "Optional limit for select queries. Defaults to 50.": "Límite opcional para consultas de selección. Por defecto 50.", - "Optional. The name of a specific table to get the schema for. If omitted, returns all accessible tables.": "Opcional. Nombre de una tabla específica para obtener su esquema. Si se omite, devuelve todas las tablas accesibles.", - "Optional: Set credentials to access this alias via Xtream API. Must be unique across all aliases and playlist auths.": "Opcional: establezca las credenciales para acceder a este alias a través de Xtream API. Debe ser único en todos los alias y autorizaciones de listas de reproducción.", "Options": "Opciones", "Original Movie Title": "Título original de la película", "Original Title": "Título original", "Output": "Producción", "Output Format": "Formato de salida", "Output Playlist": "Lista de reproducción de salida", - "Output WAN address in menu": "Dirección WAN de salida en el menú", "Output processing options": "Opciones de procesamiento de salida", - "Override URL": "Anular URL", + "Output WAN address in menu": "Dirección WAN de salida en el menú", "Override app-wide placeholder images for logos, episode previews, and VOD/Series poster fallbacks.": "Anule las imágenes de marcador de posición de toda la aplicación para logotipos, vistas previas de episodios y respaldos de carteles de series/VOD.", "Override global .strm file generation settings for this series.": "Anule la configuración global de generación de archivos .strm para esta serie.", "Override the application timezone. Leave empty to use the server default (UTC). Takes effect for all date/time output throughout the app.": "Anule la zona horaria de la aplicación. Déjelo vacío para usar el servidor predeterminado (UTC). Tiene efecto para todos los resultados de fecha y hora en toda la aplicación.", "Override the default API base URL. Leave blank to use the provider default. Useful for self-hosted models or proxy endpoints.": "Anule la URL base de API predeterminada. Déjelo en blanco para utilizar el proveedor predeterminado. Útil para modelos autohospedados o puntos finales proxy.", "Override the sync location from the profile. Leave empty to use profile location.": "Anula la ubicación de sincronización del perfil. Déjelo vacío para usar la ubicación del perfil.", + "Override URL": "Anular URL", "Overview": "Descripción general", "Overwrite": "Exagerar", + "Overwrite channels with existing mappings?": "¿Sobrescribir canales con asignaciones existentes?", "Overwrite Existing Attributes": "Sobrescribir atributos existentes", "Overwrite Existing IDs": "Sobrescribir ID existentes", "Overwrite Existing Metadata": "Sobrescribir metadatos existentes", - "Overwrite channels with existing mappings?": "¿Sobrescribir canales con asignaciones existentes?", + "Overwrite existing metadata? Episodes and seasons will always be fetched/updated.": "¿Sobrescribir metadatos existentes? Los episodios y temporadas siempre se recuperarán/actualizarán.", + "Overwrite existing metadata? If disabled, it will only fetch and process episodes for the Series.": "¿Sobrescribir metadatos existentes? Si está deshabilitado, solo buscará y procesará episodios de la Serie.", + "Overwrite existing metadata? If disabled, it will only fetch and process metadata if it does not already exist.": "¿Sobrescribir metadatos existentes? Si está deshabilitado, solo buscará y procesará metadatos si aún no existen.", "Overwrite existing TMDB/IMDB IDs? If disabled, it will only fetch IDs for items that don\\'t already have them.": "¿Sobrescribir los ID de TMDB/IMDB existentes? Si está deshabilitado, solo obtendrá los ID de los elementos que aún no los tienen.", "Overwrite existing TMDB/IMDB IDs? If disabled, it will only fetch IDs for items that don\\'t have them.": "¿Sobrescribir los ID de TMDB/IMDB existentes? Si está deshabilitado, solo obtendrá los ID de los elementos que no los tengan.", "Overwrite existing TMDB/TVDB/IMDB IDs? If disabled, it will only fetch IDs for series that don\\'t already have them.": "¿Sobrescribir los ID de TMDB/TVDB/IMDB existentes? Si está deshabilitado, solo obtendrá los ID de las series que aún no los tienen.", "Overwrite existing TMDB/TVDB/IMDB IDs? If disabled, it will only fetch IDs for series that don\\'t have them.": "¿Sobrescribir los ID de TMDB/TVDB/IMDB existentes? Si está deshabilitado, solo obtendrá los ID de las series que no los tengan.", - "Overwrite existing metadata? Episodes and seasons will always be fetched/updated.": "¿Sobrescribir metadatos existentes? Los episodios y temporadas siempre se recuperarán/actualizarán.", - "Overwrite existing metadata? If disabled, it will only fetch and process episodes for the Series.": "¿Sobrescribir metadatos existentes? Si está deshabilitado, solo buscará y procesará episodios de la Serie.", - "Overwrite existing metadata? If disabled, it will only fetch and process metadata if it does not already exist.": "¿Sobrescribir metadatos existentes? Si está deshabilitado, solo buscará y procesará metadatos si aún no existen.", - "PG, PG-13, R, NC-17": "PG, PG-13, R, NC-17", - "PG-13, R, etc.": "PG-13, R, etcétera.", - "PHP Date Formats": "Formatos de fecha PHP", "Page number (default: 1)": "Número de página (predeterminado: 1)", "Parallel processing": "Procesamiento paralelo", "Password": "Contraseña", "Password for playlist access.": "Contraseña para acceder a la lista de reproducción.", - "Path Validation Failed": "Error de validación de ruta", + "Paste cookies.txt content for authenticated streams (e.g. YouTube members-only, age-gated). Get cookies using a browser extension like \"Get cookies.txt LOCALLY\".": "Pegue el contenido de cookies.txt para transmisiones autenticadas (por ejemplo, solo para miembros de YouTube, con restricción de edad). Obtenga cookies utilizando una extensión del navegador como \"Obtener cookies.txt LOCALMENTE\".", "Path structure (folders)": "Estructura de ruta (carpetas)", + "Path Validation Failed": "Error de validación de ruta", "Patterns to remove": "Patrones para eliminar", "Pending": "Pendiente", "Pending Plugin Installs": "Instalaciones de complementos pendientes", "Pending Review": "Revisión pendiente", "Pending Trust": "Confianza pendiente", "Performance": "Rendimiento", + "Periodic rescoring": "Repunte periódico", "Permanently removes the plugin files from the server and deletes its registry record, settings, and run history. This cannot be undone.": "Elimina permanentemente los archivos del complemento del servidor y elimina su registro, configuración e historial de ejecución. Esto no se puede deshacer.", "Permanently removes this install log entry. The plugin itself (if installed) is not affected.": "Elimina permanentemente esta entrada del registro de instalación. El complemento en sí (si está instalado) no se ve afectado.", "Permissions": "Permisos", "Personal Access Token": "Token de acceso personal", "Personal Access Tokens": "Fichas de acceso personal", + "PG, PG-13, R, NC-17": "PG, PG-13, R, NC-17", + "PG-13, R, etc.": "PG-13, R, etcétera.", + "PHP Date Formats": "Formatos de fecha PHP", "Placeholder Images": "Imágenes de marcador de posición", "Play": "Jugar", + "Playback settings": "Configuración de reproducción", "Play Channel": "Reproducir canal", "Play Episode": "Reproducir episodio", - "Play Video": "Reproducir vídeo", - "Playback settings": "Configuración de reproducción", "Playlist": "Lista de reproducción", "Playlist Alias": "Alias ​​de lista de reproducción", "Playlist Aliases": "Alias ​​de listas de reproducción", "Playlist Auth": "Autenticación de lista de reproducción", - "Playlist Auth ID": "ID de autenticación de lista de reproducción", "Playlist Auth created": "Autenticación de lista de reproducción creada", + "Playlist Auth ID": "ID de autenticación de lista de reproducción", "Playlist Auths": "Autenticaciones de listas de reproducción", "Playlist Category": "Categoría de lista de reproducción", - "Playlist Group": "Grupo de lista de reproducción", - "Playlist Name": "Nombre de la lista de reproducción", - "Playlist Output": "Salida de lista de reproducción", - "Playlist Processing": "Procesamiento de listas de reproducción", - "Playlist Series are being processed in the background. Depending on the number of enabled Series, this may take a while. You will be notified on completion.": "Las series de listas de reproducción se están procesando en segundo plano. Dependiendo de la cantidad de Series habilitadas, esto puede demorar un poco. Se le notificará al finalizar.", - "Playlist Settings": "Configuración de lista de reproducción", - "Playlist Type": "Tipo de lista de reproducción", - "Playlist Type (choose one)": "Tipo de lista de reproducción (elija uno)", - "Playlist URL": "URL de la lista de reproducción", - "Playlist VOD channels are being processed in the background. Depending on the number of enabled VOD channels, this may take a while. You will be notified on completion.": "Los canales VOD de la lista de reproducción se están procesando en segundo plano. Dependiendo de la cantidad de canales VOD habilitados, esto puede demorar un poco. Se le notificará al finalizar.", - "Playlist Viewer": "Visor de listas de reproducción", - "Playlist Viewers": "Visores de listas de reproducción", "Playlist fail conditions": "Condiciones de falla de la lista de reproducción", + "Playlist Group": "Grupo de lista de reproducción", "Playlist is being duplicated": "La lista de reproducción se está duplicando.", "Playlist is being duplicated in the background. You will be notified on completion.": "La lista de reproducción se duplica en segundo plano. Se le notificará al finalizar.", "Playlist is fetching metadata for Series": "La lista de reproducción está obteniendo metadatos para la serie", "Playlist is fetching metadata for VOD channels": "La lista de reproducción está obteniendo metadatos para canales VOD", + "Playlist Name": "Nombre de la lista de reproducción", "Playlist name": "Nombre de la lista de reproducción", + "Playlist Output": "Salida de lista de reproducción", + "Playlist Processing": "Procesamiento de listas de reproducción", + "Playlists": "Listas de reproducción", + "Playlist Series are being processed in the background. Depending on the number of enabled Series, this may take a while. You will be notified on completion.": "Las series de listas de reproducción se están procesando en segundo plano. Dependiendo de la cantidad de Series habilitadas, esto puede demorar un poco. Se le notificará al finalizar.", + "Playlist Settings": "Configuración de lista de reproducción", "Playlist settings are being copied": "Se están copiando las configuraciones de la lista de reproducción", "Playlist settings are being copied in the background. You will be notified on completion.": "La configuración de la lista de reproducción se está copiando en segundo plano. Se le notificará al finalizar.", "Playlist status has been reset.": "El estado de la lista de reproducción se ha restablecido.", "Playlist status reset": "Restablecer el estado de la lista de reproducción", + "Playlist Type": "Tipo de lista de reproducción", "Playlist type": "Tipo de lista de reproducción", + "Playlist Type (choose one)": "Tipo de lista de reproducción (elija uno)", + "Playlist URL": "URL de la lista de reproducción", + "Playlist Viewer": "Visor de listas de reproducción", + "Playlist Viewers": "Visores de listas de reproducción", "Playlist viewers are used for in app viewing and M3U TV access. Viewers are created automatically via username used to access playlist or start playback.": "Los visores de listas de reproducción se utilizan para ver aplicaciones y acceder a M3U TV. Los espectadores se crean automáticamente a través del nombre de usuario utilizado para acceder a la lista de reproducción o iniciar la reproducción.", - "Playlists": "Listas de reproducción", + "Playlist VOD channels are being processed in the background. Depending on the number of enabled VOD channels, this may take a while. You will be notified on completion.": "Los canales VOD de la lista de reproducción se están procesando en segundo plano. Dependiendo de la cantidad de canales VOD habilitados, esto puede demorar un poco. Se le notificará al finalizar.", "Plays": "juega", + "Play Video": "Reproducir vídeo", "Please add at least one media library path before scanning.": "Agregue al menos una ruta de biblioteca multimedia antes de escanear.", "Please configure Xtream credentials first.": "Primero configure las credenciales de Xtream.", "Please configure your TMDB API key in Settings > TMDB before using this feature.": "Configure su clave API de TMDB en Configuración > TMDB antes de utilizar esta función.", - "Please enter a TMDB API key to test the connection.": "Ingrese una clave API de TMDB para probar la conexión.", "Please enter a search query": "Por favor ingrese una consulta de búsqueda", + "Please enter a TMDB API key to test the connection.": "Ingrese una clave API de TMDB para probar la conexión.", "Please enter credentials and select a lineup first": "Por favor, introduce las credenciales y selecciona una alineación primero.", "Please enter username and password first": "Por favor ingrese primero el nombre de usuario y la contraseña", "Please enter username and password first.": "Por favor ingrese primero el nombre de usuario y la contraseña.", - "Please fill in all required SMTP fields before sending a test email.": "Complete todos los campos SMTP obligatorios antes de enviar un correo electrónico de prueba.", "Please fill in all required connection fields before testing the connection.": "Complete todos los campos de conexión requeridos antes de probar la conexión.", "Please fill in all required fields first": "Por favor complete todos los campos obligatorios primero", + "Please fill in all required SMTP fields before sending a test email.": "Complete todos los campos SMTP obligatorios antes de enviar un correo electrónico de prueba.", "Please provide a provider URL or configure the playlist Xtream URL.": "Proporcione la URL del proveedor o configure la URL de la lista de reproducción Xtream.", "Plex": "plexo", "Plex Server Management": "Gestión de servidores Plex", "Plot": "Trama", "Plugin": "Complemento", "Plugin Archive": "Archivo de complementos", - "Plugin Directory Path": "Ruta del directorio de complementos", - "Plugin Info": "Información del complemento", - "Plugin Install": "Instalación del complemento", - "Plugin Installs": "Instalaciones de complementos", - "Plugin Name": "Nombre del complemento", - "Plugin Update Check Complete": "Comprobación de actualización del complemento completa", "Plugin archive staged": "Archivo de complementos preparado", "Plugin archive staging failed": "Error en la preparación del archivo del complemento", "Plugin blocked": "Complemento bloqueado", "Plugin creation failed": "Falló la creación del complemento", "Plugin deleted": "Complemento eliminado", + "Plugin Directory Path": "Ruta del directorio de complementos", "Plugin disabled": "Complemento deshabilitado", "Plugin discovery completed": "Descubrimiento de complementos completado", "Plugin enabled": "Complemento habilitado", - "Plugin install #:id installed [:plugin_id].": "Instalación del complemento #:id instalado [:plugin_id].", + "Plugin Info": "Información del complemento", + "Plugin Install": "Instalación del complemento", "Plugin install #:id installed and trusted [:plugin_id].": "Instalación del complemento #:id instalado y de confianza [:plugin_id].", + "Plugin install #:id installed [:plugin_id].": "Instalación del complemento #:id instalado [:plugin_id].", "Plugin install #:id was rejected.": "Instalación del complemento #:id fue rechazada.", "Plugin install discarded": "Instalación del complemento descartada", + "Plugin installed": "Complemento instalado", + "Plugin installed and trusted": "Complemento instalado y confiable", "Plugin install failed": "La instalación del complemento falló", "Plugin install rejected": "Instalación del complemento rechazada", + "Plugin Installs": "Instalaciones de complementos", "Plugin install staged": "Instalación del complemento por etapas", - "Plugin installed": "Complemento instalado", - "Plugin installed and trusted": "Complemento instalado y confiable", + "Plugin Name": "Nombre del complemento", "Plugin reinstalled": "Complemento reinstalado", "Plugin run": "Ejecución del complemento", "Plugin run detail": "Detalle de ejecución del complemento", - "Plugin staging failed": "Error en la preparación del complemento", - "Plugin trusted": "Complemento confiable", - "Plugin uninstalled": "Complemento desinstalado", - "Plugin upload failed": "La carga del complemento falló", "Plugins": "Complementos", "Plugins Needing Attention": "Complementos que necesitan atención", + "Plugin staging failed": "Error en la preparación del complemento", "Plugins that are blocked, modified, invalid, or not fully installed.": "Complementos que están bloqueados, modificados, no válidos o no instalados completamente.", "Plugins that are currently installed and available to operate.": "Complementos que están actualmente instalados y disponibles para operar.", - "Pool Status": "Estado de la piscina", + "Plugin trusted": "Complemento confiable", + "Plugin uninstalled": "Complemento desinstalado", + "Plugin Update Check Complete": "Comprobación de actualización del complemento completa", + "Plugin upload failed": "La carga del complemento falló", "Pool multiple Xtream accounts from this provider to increase concurrent stream capacity.": "Agrupe varias cuentas Xtream de este proveedor para aumentar la capacidad de transmisión simultánea.", + "Pool Status": "Estado de la piscina", "Port": "Puerto", "Position / Duration": "Posición / Duración", + "Postal Code": "Código Postal", + "Poster URL updated": "URL del póster actualizada", "Post Process": "Postproceso", - "Post Process ID": "ID del proceso posterior", "Post Process created": "Postproceso creado", + "Post Process ID": "ID del proceso posterior", "Post Processing": "Postprocesamiento", - "Postal Code": "Código Postal", - "Poster URL updated": "URL del póster actualizada", "Pre-defined prompts displayed as buttons in the Copilot chat window.": "Mensajes predefinidos que se muestran como botones en la ventana de chat de Copilot.", "Prefer catch-up as primary": "Prefiero ponerse al día como principal", "Prefer icon from channel or EPG.": "Prefiere icono de canal o EPG.", "Prefer logo from channel or EPG.": "Prefiere el logotipo del canal o EPG.", "Preferred Codec": "Códec preferido", "Preferred Icon": "Icono preferido", + "Preferred icon updated": "Icono preferido actualizado", + "Preferred language for TMDB searches.": "Idioma preferido para búsquedas en TMDB.", "Preferred Locale": "Configuración regional preferida", "Preferred Playlist (optional)": "Lista de reproducción preferida (opcional)", "Preferred TVG ID output": "Salida de ID de TVG preferida", - "Preferred icon updated": "Icono preferido actualizado", - "Preferred language for TMDB searches.": "Idioma preferido para búsquedas en TMDB.", "Preprocess playlist": "Lista de reproducción previa al proceso", "Press [tab] or [return] to add item.": "Presione [tab] o [regresar] para agregar un elemento.", "Press [tab] or [return] to add item. Leave empty to disable.": "Presione [tab] o [regresar] para agregar un elemento. Déjelo vacío para desactivarlo.", @@ -1449,24 +1527,30 @@ "Priority": "Prioridad", "Priority Keywords": "Palabras clave prioritarias", "Priority Order": "Orden de prioridad", + "Probed": "sondeado", "Probe Enabled": "Sonda habilitada", - "Probe Streams": "Corrientes de sonda", "Probe now": "Sondear ahora", + "Probe ran but returned no usable details.": "La sonda se ejecutó pero no arrojó detalles utilizables.", + "Probe Streams": "Corrientes de sonda", "Probe streams after sync": "Transmisiones de sonda después de la sincronización", "Probe the selected channels with ffprobe to collect stream metadata (codec, resolution, bitrate). This data enables fast channel switching in Emby.": "Sondee los canales seleccionados con ffprobe para recopilar metadatos de transmisión (códec, resolución, tasa de bits). Estos datos permiten un cambio rápido de canal en Emby.", "Probe timeout (seconds)": "Tiempo de espera de sondeo (segundos)", - "Probed": "sondeado", + "Probing is disabled for this channel.": "El sondeo está deshabilitado para este canal.", "Probing is disabled for this channel. Enable it in the channel's edit form to allow probe data collection.": "El sondeo está deshabilitado para este canal. Habilítelo en el formulario de edición del canal para permitir la recopilación de datos de la sonda.", "Probing started": "Se inició el sondeo", "Process": "Proceso", "Process EPG now?": "¿Procesar EPG ahora?", "Process EPG now? This will reload the EPG data from the source.": "¿Procesar EPG ahora? Esto recargará los datos de la EPG desde la fuente.", "Process Event": "Evento de proceso", - "Process Message": "Mensaje de proceso", - "Process Status": "Estado del proceso", "Process failed": "El proceso falló", + "Processing": "Tratamiento", + "Processing options for playlist series": "Opciones de procesamiento para series de listas de reproducción", + "Processing options for playlist VOD": "Opciones de procesamiento para listas de reproducción VOD", + "Processing settings for the playlist": "Configuración de procesamiento para la lista de reproducción", + "Processing state reset": "Restablecimiento del estado de procesamiento", "Process in parallel rather than one-at-a-time for significantly faster results.": "Procesar en paralelo en lugar de uno a la vez para resultados significativamente más rápidos.", "Process merged EPG now?": "¿Proceso fusionado EPG ahora?", + "Process Message": "Mensaje de proceso", "Process now? This will fetch all episodes and seasons for the enabled series.": "¿Procesar ahora? Esto recuperará todos los episodios y temporadas de la serie habilitada.", "Process on failed syncs too (default is only successful syncs).": "Procese también las sincronizaciones fallidas (el valor predeterminado es solo sincronizaciones exitosas).", "Process selected": "Proceso seleccionado", @@ -1474,14 +1558,10 @@ "Process series for selected category now? Only enabled series will be processed. This will fetch all episodes and seasons for the category series. This may take a while depending on the number of series in the category.": "¿Procesar series para la categoría seleccionada ahora? Sólo se procesarán las series habilitadas. Esto buscará todos los episodios y temporadas de la categoría de serie. Esto puede tardar un poco dependiendo de la cantidad de series de la categoría.", "Process series for this category now? Only enabled series will be processed. This will fetch all episodes and seasons for the category series. This may take a while depending on the number of series in the category.": "¿Serie de procesos para esta categoría ahora? Sólo se procesarán las series habilitadas. Esto buscará todos los episodios y temporadas de la categoría de serie. Esto puede tardar un poco dependiendo de la cantidad de series de la categoría.", "Process series now? This will fetch all episodes and seasons for this series.": "¿Serie de procesos ahora? Esto recuperará todos los episodios y temporadas de esta serie.", + "Process Status": "Estado del proceso", "Process the selected epg(s) now?": "¿Procesar los epg seleccionados ahora?", "Process the selected merged EPG(s) now?": "¿Procesar ahora las EPG fusionadas seleccionadas?", "Process the selected playlist(s) now?": "¿Procesar las listas de reproducción seleccionadas ahora?", - "Processing": "Tratamiento", - "Processing options for playlist VOD": "Opciones de procesamiento para listas de reproducción VOD", - "Processing options for playlist series": "Opciones de procesamiento para series de listas de reproducción", - "Processing settings for the playlist": "Configuración de procesamiento para la lista de reproducción", - "Processing state reset": "Restablecimiento del estado de procesamiento", "Profile Name": "Nombre del perfil", "Profile Test Failed": "Prueba de perfil fallida", "Profile Valid ✓": "Perfil Válido ✓", @@ -1491,11 +1571,12 @@ "Progress": "Progreso", "Progress of EPG cache generation": "Progreso de la generación de caché EPG", "Progress of EPG import/sync": "Progreso de la importación/sincronización de EPG", - "Progress of SchedulesDirect import (if using)": "Progreso de la importación de SchedulesDirect (si se usa)", "Progress of merged EPG import/sync": "Progreso de la importación/sincronización de EPG fusionada", + "Progress of SchedulesDirect import (if using)": "Progreso de la importación de SchedulesDirect (si se usa)", "Prompt": "Prompt", "Provider": "Proveedor", "Provider Credentials": "Credenciales de proveedor", + "Provider credentials to use for this alias. At least one set of credentials is required.": "Credenciales del proveedor que se utilizarán para este alias. Se requiere al menos un conjunto de credenciales.", "Provider Limits Warning": "Advertencia de límites del proveedor", "Provider Profiles": "Perfiles de proveedores", "Provider Rate Limiting & Concurrency": "Limitación de velocidad y concurrencia del proveedor", @@ -1503,12 +1584,12 @@ "Provider Streams": "Flujos de proveedores", "Provider Timezone": "Zona horaria del proveedor", "Provider Timezone Not Found": "Zona horaria del proveedor no encontrada", - "Provider URL": "URL del proveedor", - "Provider credentials to use for this alias. At least one set of credentials is required.": "Credenciales del proveedor que se utilizarán para este alias. Se requiere al menos un conjunto de credenciales.", "Provider timezone not found in playlist status. Make sure the playlist is connected and has synced at least once to retrieve this information.": "La zona horaria del proveedor no se encuentra en el estado de la lista de reproducción. Asegúrese de que la lista de reproducción esté conectada y se haya sincronizado al menos una vez para recuperar esta información.", + "Provider URL": "URL del proveedor", "Proxied M3U URL": "URL M3U proxy", "Proxy": "Proxy", "Proxy Enabled": "Proxy habilitado", + "Proxy mode was automatically enabled because this playlist now contains channels from source playlists with Provider Profiles enabled.": "El modo proxy se habilitó automáticamente porque esta lista de reproducción ahora contiene canales de listas de reproducción de origen con perfiles de proveedor habilitados.", "Proxy Options": "Opciones de proxy", "Proxy Password (Alternative)": "Contraseña de proxy (alternativa)", "Proxy Port (Alternative)": "Puerto proxy (alternativo)", @@ -1516,20 +1597,23 @@ "Proxy Streams": "Flujos de proxy", "Proxy URL": "URL de proxy", "Proxy User Agent for Media Streams": "Agente de usuario proxy para transmisiones multimedia", - "Proxy mode was automatically enabled because this playlist now contains channels from source playlists with Provider Profiles enabled.": "El modo proxy se habilitó automáticamente porque esta lista de reproducción ahora contiene canales de listas de reproducción de origen con perfiles de proveedor habilitados.", "Public URL": "URL pública", - "Purge Series": "Serie de purga", "Purge now": "Purgar ahora", + "Purge Series": "Serie de purga", "QR Code": "Código QR", - "Queue Manager": "Administrador de colas", + "Quality & Options": "Calidad y opciones", + "Quality selector (best, worst, 720p, etc.) followed by optional Streamlink flags. Example: best --hls-live-edge 3": "Selector de calidad (mejor, peor, 720p, etc.) seguido de indicadores Streamlink opcionales. Ejemplo: mejor --hls-live-edge 3", + "Queue a one-off failover rescore for this playlist? Stale channels will be re-probed (subject to the configured staleness window) and failovers re-sorted so the highest-quality source sits first.": "¿Poner en cola una recuperación de conmutación por error única para esta lista de reproducción? Los canales obsoletos se volverán a sondear (sujetos a la ventana de obsolescencia configurada) y las conmutaciones por error se reordenarán para que la fuente de mayor calidad ocupe el primer lugar.", "Queue a plugin action from the page header to create the first run.": "Ponga en cola una acción de complemento desde el encabezado de la página para crear la primera ejecución.", "Queue a scan from the header to generate the first run. That will populate Live Activity, Run History, and the run detail screen.": "Ponga en cola un escaneo desde el encabezado para generar la primera ejecución. Eso completará la Actividad en vivo, el Historial de ejecución y la pantalla de detalles de la ejecución.", - "Queue reset": "Reinicio de cola", "Queued": "En cola", "Queued by": "En cola por", + "Queue Manager": "Administrador de colas", + "Queue reset": "Reinicio de cola", "Quick Actions": "Acciones rápidas", "Ran At": "corrió y", "Ran at": "corrió y", + "Ranked sources": "Fuentes clasificadas", "Rate Limit (requests/second)": "Límite de tasa (solicitudes/segundo)", "Rating": "Clasificación", "Rating (5 based)": "Calificación (basada en 5)", @@ -1537,16 +1621,20 @@ "Re-enable disabled channels that are found to be live. Requires \"Scan all channels\" to be on.": "Reactivar canales deshabilitados que se encuentren en vivo. Requiere que \"Escanear todos los canales\" esté activado.", "Re-enable live channels": "Reactivar canales en vivo", "Re-probe": "Volver a sondear", + "Re-probe channels older than (days)": "Vuelva a sondear canales con más de (días)", "Re-run this mapping everytime the EPG is synced?": "¿Volver a ejecutar este mapeo cada vez que se sincroniza la EPG?", + "Re-score failovers now": "Vuelva a calificar las conmutaciones por error ahora", + "Re-score this channel's failovers against current stream stats. Stale channels may be re-probed (subject to the playlist's staleness window). The master channel is never altered — only the failover order changes.": "Vuelva a calificar las conmutaciones por error de este canal con las estadísticas de transmisión actuales. Los canales obsoletos se pueden volver a sondear (sujeto a la ventana de obsolescencia de la lista de reproducción). El canal maestro nunca se modifica, solo cambia el orden de conmutación por error.", "Recall Memories": "Recuperar recuerdos", "Recent Plugin Installs": "Instalaciones recientes de complementos", - "Recent Runs": "Ejecuciones recientes", "Recent plugin uploads — pending approval, approved, or rejected.": "Cargas de complementos recientes: pendientes de aprobación, aprobados o rechazados.", + "Recent Runs": "Ejecuciones recientes", "Recommended Next Step": "Siguiente paso recomendado", + "recorded progress.": "avances registrados.", "Recordings / DVR Subscriptions": "Grabaciones / Suscripciones DVR", - "Recount Channels": "Canales de recuento", "Recount all channels in this group sequentially?": "¿Contar todos los canales de este grupo de forma secuencial?", "Recount all channels in this group sequentially? Channel numbers will be assigned based on the current sort order.": "¿Contar todos los canales de este grupo de forma secuencial? Los números de canal se asignarán según el orden de clasificación actual.", + "Recount Channels": "Canales de recuento", "Recount channels across selected groups? This will renumber channels sequentially starting from the top-most selected group down to the bottom-most.": "¿Contar canales en grupos seleccionados? Esto renumerará los canales secuencialmente comenzando desde el grupo seleccionado más alto hasta el más bajo.", "Recount now": "contar ahora", "Recount the selected channels only inside this custom playlist. The original channel numbers will not change.": "Vuelva a contar los canales seleccionados solo dentro de esta lista de reproducción personalizada. Los números de canales originales no cambiarán.", @@ -1561,17 +1649,17 @@ "Refresh EPG Guide": "Actualizar guía EPG", "Refresh Failed": "Error al actualizar", "Refresh Libraries": "Actualizar bibliotecas", - "Refresh Logo Repository": "Actualizar el repositorio de logotipos", "Refresh logo cache (selected)": "Actualizar caché del logotipo (seleccionado)", + "Refresh Logo Repository": "Actualizar el repositorio de logotipos", "Refresh media server library after sync": "Actualizar la biblioteca del servidor de medios después de la sincronización", "Refresh poster cache (selected)": "Actualizar caché de carteles (seleccionado)", "Refresh selected cache": "Actualizar caché seleccionado", "Regex merge patterns": "Patrones de fusión de expresiones regulares", "Regex patterns for failover grouping. Useful when the same channel has different names within and across providers.": "Patrones de expresiones regulares para agrupación de conmutación por error. Útil cuando el mismo canal tiene diferentes nombres dentro y entre proveedores.", - "Register HDHomeRun Tuner": "Registrar sintonizador HDHomeRun", "Register a DVR tuner first.": "Primero registre un sintonizador DVR.", - "Register this playlist as an HDHomeRun tuner in Plex for Live TV & DVR.": "Registre esta lista de reproducción como sintonizador HDHomeRun en Plex para Live TV y DVR.", "Registered Tuners": "Sintonizadores registrados", + "Register HDHomeRun Tuner": "Registrar sintonizador HDHomeRun", + "Register this playlist as an HDHomeRun tuner in Plex for Live TV & DVR.": "Registre esta lista de reproducción como sintonizador HDHomeRun en Plex para Live TV y DVR.", "Registration Failed": "Registro fallido", "Reinstall": "Reinstalar", "Reinstalling makes this plugin eligible to run again. Settings are preserved unless you deleted its data during uninstall.": "La reinstalación hace que este complemento sea elegible para ejecutarse nuevamente. La configuración se conserva a menos que elimine sus datos durante la desinstalación.", @@ -1580,8 +1668,8 @@ "Release Asset URL": "URL de lanzamiento de recurso", "Release Date": "Fecha de lanzamiento", "Release Date (Alt)": "Fecha de lanzamiento (alt.)", - "Release Logs": "Registros de lanzamiento", "Release info missing": "Falta información de lanzamiento", + "Release Logs": "Registros de lanzamiento", "Release logs": "Registros de lanzamiento", "Release logs refreshed": "Registros de versiones actualizados", "Releases": "Lanzamientos", @@ -1590,14 +1678,15 @@ "Removal Failed": "Eliminación fallida", "Remove": "Eliminar", "Remove Auth": "Eliminar autenticación", - "Remove DVR": "Quitar DVR", - "Remove Entire DVR": "Eliminar todo el DVR", - "Remove Tuner": "Quitar sintonizador", "Remove auth": "Eliminar autenticación", "Remove auth from Playlist": "Eliminar autenticación de la lista de reproducción", "Remove auth from Playlist?": "¿Eliminar la autenticación de la lista de reproducción?", "Remove auth from selected Playlist?": "¿Eliminar la autenticación de la lista de reproducción seleccionada?", "Remove consecutive replacement characters": "Eliminar caracteres de reemplazo consecutivos", + "Removed Channels": "Canales eliminados", + "Removed Groups": "Grupos eliminados", + "Remove DVR": "Quitar DVR", + "Remove Entire DVR": "Eliminar todo el DVR", "Remove inactive streams and clients": "Eliminar transmisiones y clientes inactivos", "Remove or replace special characters in filenames": "Eliminar o reemplazar caracteres especiales en nombres de archivos", "Remove post processing": "Eliminar posprocesamiento", @@ -1606,46 +1695,48 @@ "Remove post processing from selected item?": "¿Eliminar el posprocesamiento del elemento seleccionado?", "Remove quality indicators": "Eliminar indicadores de calidad", "Remove specific words or symbols from folder and file names": "Eliminar palabras o símbolos específicos de los nombres de carpetas y archivos", - "Removed Channels": "Canales eliminados", - "Removed Groups": "Grupos eliminados", "Removes the selected reviews from the system. This does not affect the installed plugins or their files on disk.": "Elimina las reseñas seleccionadas del sistema. Esto no afecta los complementos instalados ni sus archivos en el disco.", + "Remove Tuner": "Quitar sintonizador", "Replace now": "Reemplazar ahora", "Replace with": "Reemplazar con", "Replace with (optional)": "Reemplazar con (opcional)", - "Request Options": "Opciones de solicitud", "Request delay": "Retraso de solicitud", "Request delay (milliseconds)": "Retraso de solicitud (milisegundos)", - "Request type": "Tipo de solicitud", "Requested Access": "Acceso solicitado", + "Request Options": "Opciones de solicitud", + "Request type": "Tipo de solicitud", "Required to send emails, if your provider requires authentication.": "Requerido para enviar correos electrónicos, si su proveedor requiere autenticación.", "Required to send emails.": "Requerido para enviar correos electrónicos.", "Rescan storage": "Volver a escanear el almacenamiento", + "Rescore": "volver a puntuar", + "Rescore now": "Resucitar ahora", + "Rescoring queued": "Recuperando en cola", "Reset": "Reiniciar", + "Reset category names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Restablezca los nombres de las categorías a sus valores importados originales. Esto deshará cualquier cambio de búsqueda y reemplazo de la lista de reproducción seleccionada.", + "Reset category names back to their original imported values? This will undo any find & replace changes.": "¿Restablecer los nombres de las categorías a sus valores importados originales? Esto deshará cualquier cambio de búsqueda y reemplazo.", "Reset EPG status so it can be processed again. Only perform this action if you are having problems with the EPG syncing.": "Restablezca el estado de la EPG para que pueda procesarse nuevamente. Realice esta acción solo si tiene problemas con la sincronización de la EPG.", "Reset Find & Replace results back to EPG defaults. This will remove any custom values set in the selected column.": "Restablezca los resultados de Buscar y reemplazar a los valores predeterminados de EPG. Esto eliminará cualquier valor personalizado establecido en la columna seleccionada.", "Reset Find & Replace results back to epg defaults for the selected epg channels. This will remove any custom values set in the selected column.": "Restablezca los resultados de Buscar y reemplazar a los valores predeterminados de epg para los canales de epg seleccionados. Esto eliminará cualquier valor personalizado establecido en la columna seleccionada.", - "Reset Find & Replace results back to playlist defaults for the selected channels. This will remove any custom values set in the selected column.": "Restablezca los resultados de Buscar y reemplazar a los valores predeterminados de la lista de reproducción para los canales seleccionados. Esto eliminará cualquier valor personalizado establecido en la columna seleccionada.", "Reset Find & Replace results back to playlist defaults. This will remove any custom values set in the selected column.": "Restablezca los resultados de Buscar y reemplazar a los valores predeterminados de la lista de reproducción. Esto eliminará cualquier valor personalizado establecido en la columna seleccionada.", - "Reset Processing State": "Restablecer el estado de procesamiento", - "Reset Queue": "Restablecer cola", - "Reset VOD group names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Restablezca los nombres de los grupos VOD a sus valores importados originales. Esto deshará cualquier cambio de búsqueda y reemplazo de la lista de reproducción seleccionada.", - "Reset category names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Restablezca los nombres de las categorías a sus valores importados originales. Esto deshará cualquier cambio de búsqueda y reemplazo de la lista de reproducción seleccionada.", - "Reset category names back to their original imported values? This will undo any find & replace changes.": "¿Restablecer los nombres de las categorías a sus valores importados originales? Esto deshará cualquier cambio de búsqueda y reemplazo.", + "Reset Find & Replace results back to playlist defaults for the selected channels. This will remove any custom values set in the selected column.": "Restablezca los resultados de Buscar y reemplazar a los valores predeterminados de la lista de reproducción para los canales seleccionados. Esto eliminará cualquier valor personalizado establecido en la columna seleccionada.", "Reset group names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Restablezca los nombres de los grupos a sus valores importados originales. Esto deshará cualquier cambio de búsqueda y reemplazo de la lista de reproducción seleccionada.", "Reset group names back to their original imported values? This will undo any find & replace changes.": "¿Restablecer los nombres de los grupos a sus valores importados originales? Esto deshará cualquier cambio de búsqueda y reemplazo.", "Reset media server status so it can be synced again. Only perform this action if you are having problems with the media server syncing.": "Restablezca el estado del servidor de medios para que pueda sincronizarse nuevamente. Realice esta acción solo si tiene problemas con la sincronización del servidor de medios.", "Reset now": "Reiniciar ahora", "Reset playlist status so it can be processed again. Only perform this action if you are having problems with the playlist syncing.": "Restablece el estado de la lista de reproducción para que pueda procesarse nuevamente. Realice esta acción solo si tiene problemas con la sincronización de la lista de reproducción.", + "Reset Processing State": "Restablecer el estado de procesamiento", + "Reset Queue": "Restablecer cola", "Reset status": "Restablecer estado", - "Reset status for the selected Playlists so they can be processed again. Only perform this action if you are having problems with the playlist syncing.": "Restablece el estado de las listas de reproducción seleccionadas para que puedan procesarse nuevamente. Realice esta acción solo si tiene problemas con la sincronización de la lista de reproducción.", "Reset status for the selected media servers so they can be synced again.": "Restablezca el estado de los servidores de medios seleccionados para que puedan sincronizarse nuevamente.", + "Reset status for the selected Playlists so they can be processed again. Only perform this action if you are having problems with the playlist syncing.": "Restablece el estado de las listas de reproducción seleccionadas para que puedan procesarse nuevamente. Realice esta acción solo si tiene problemas con la sincronización de la lista de reproducción.", "Resetting the queue will restart the queue workers and flush any pending jobs. Any syncs or background processes will be stopped and removed. Only perform this action if you are having sync issues.": "Al restablecer la cola, se reiniciarán los trabajadores de la cola y se eliminarán los trabajos pendientes. Cualquier sincronización o proceso en segundo plano se detendrá y eliminará. Realice esta acción solo si tiene problemas de sincronización.", + "Reset VOD group names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Restablezca los nombres de los grupos VOD a sus valores importados originales. Esto deshará cualquier cambio de búsqueda y reemplazo de la lista de reproducción seleccionada.", "Resolution": "Resolución", "Resolve proxy public URL dynamically at request time": "Resolver la URL pública del proxy dinámicamente en el momento de la solicitud", "Resolver URL": "URL de resolución", - "Restart Now": "Reiniciar ahora", "Restart existing mapping process.": "Reinicie el proceso de mapeo existente.", "Restart from beginning when all content has played": "Reiniciar desde el principio cuando se haya reproducido todo el contenido", + "Restart Now": "Reiniciar ahora", "Restart the in-progress scrubber run.": "Reinicie la ejecución del depurador en curso.", "Restart this scrubber? The existing run will be abandoned and a new one will begin.": "¿Reiniciar este depurador? La ejecución existente se abandonará y comenzará una nueva.", "Restore now": "Restaurar ahora", @@ -1653,106 +1744,99 @@ "Resume Run": "Reanudar ejecución", "Retain logs of playlist syncs. This is useful for debugging and tracking changes to the playlist. This can lead to increased sync time and storage usage depending on the size of the playlist.": "Conservar registros de sincronizaciones de listas de reproducción. Esto es útil para depurar y rastrear cambios en la lista de reproducción. Esto puede provocar un mayor tiempo de sincronización y uso de almacenamiento según el tamaño de la lista de reproducción.", "Retry probe": "Reintentar sonda", - "Returned Metrics": "Métricas devueltas", - "Returned as \"server_info.http_port\" in \"player_api.php\" responses. Leave empty to use APP_PORT (default).": "Devuelto como \"server_info.http_port\" en las respuestas de \"player_api.php\". Déjelo vacío para usar APP_PORT (predeterminado).", "Returned as \"server_info.https_port\" in \"player_api.php\" responses. Leave empty to use 443 (default).": "Devuelto como \"server_info.https_port\" en las respuestas de \"player_api.php\". Déjelo vacío para usar 443 (predeterminado).", + "Returned as \"server_info.http_port\" in \"player_api.php\" responses. Leave empty to use APP_PORT (default).": "Devuelto como \"server_info.http_port\" en las respuestas de \"player_api.php\". Déjelo vacío para usar APP_PORT (predeterminado).", "Returned as \"user_info.message\" in \"player_api.php\" responses.": "Devuelto como \"user_info.message\" en las respuestas de \"player_api.php\".", + "Returned Metrics": "Métricas devueltas", "Returned totals": "Totales devueltos", "Review #:id is queued for approval.": "Revisión #:id está en cola para aprobación.", "Review #:id is queued for security scan and approval.": "La revisión #:id está en cola para análisis de seguridad y aprobación.", "Review #:id is queued — check Plugin Installs to scan and approve it.": "Revisión #:id está en cola: marque Instalaciones de complementos para escanearlo y aprobarlo.", "Review #:id is ready - check Plugin Installs to scan and approve it.": "Revisión #:id está listo: verifique Instalaciones de complementos para escanearlo y aprobarlo.", + "Review and create your plugin": "Revisa y crea tu complemento", "Review Notes": "Notas de revisión", "Review Summary": "Resumen de revisión", - "Review and create your plugin": "Revisa y crea tu complemento", "Review the failed run, check the activity stream for the error context, and correct the target playlist, EPG, or thresholds before trying again.": "Revise la ejecución fallida, verifique el flujo de actividad para conocer el contexto del error y corrija la lista de reproducción, la EPG o los umbrales de destino antes de volver a intentarlo.", "Rule Name": "Nombre de la regla", "Run": "Correr", + "Run a plugin action to see step-by-step activity appear here.": "Ejecute una acción de complemento para ver la actividad paso a paso aquí.", + "Run automatically after each playlist sync.": "Se ejecuta automáticamente después de cada sincronización de lista de reproducción.", "Run ClamAV Scan": "Ejecute el escaneo ClamAV", "Run History": "Historial de ejecución", "Run Log": "Registro de ejecución", "Run Logs": "Registros de ejecución", + "Running": "Correr", "Run Now": "Ejecutar ahora", - "Run Summary": "Resumen de ejecución", - "Run Tool": "Ejecutar herramienta", - "Run a plugin action to see step-by-step activity appear here.": "Ejecute una acción de complemento para ver la actividad paso a paso aquí.", - "Run automatically after each playlist sync.": "Se ejecuta automáticamente después de cada sincronización de lista de reproducción.", "Run resumed": "Ejecución reanudada", "Run status": "Estado de ejecución", + "Run Summary": "Resumen de ejecución", "Run the selected scrubbers now? This will not modify the \"Recurring\" setting.": "¿Ejecutar los depuradores seleccionados ahora? Esto no modificará la configuración \"Recurrente\".", - "Running": "Correr", "Runtime": "Tiempo de ejecución", - "SD Progress": "Progreso SD", - "SHA-256 Checksum": "Suma de comprobación SHA-256", - "SMTP": "SMTP", - "SMTP Encryption": "Cifrado SMTP", - "SMTP From Address": "SMTP de dirección", - "SMTP Host": "Anfitrión SMTP", - "SMTP Password": "Contraseña SMTP", - "SMTP Port": "Puerto SMTP", - "SMTP Settings": "Configuración SMTP", - "SMTP Username": "Nombre de usuario SMTP", + "Run Tool": "Ejecutar herramienta", "Sample rate": "Frecuencia de muestreo", "Saved targets used for manual defaults and automation.": "Objetivos guardados utilizados para la automatización y los valores predeterminados manuales.", "Scan": "Escanear", "Scan & Discover Libraries": "Escanear y descubrir bibliotecas", + "Scan all channels (including disabled)": "Escanear todos los canales (incluidos los deshabilitados)", "Scan All Libraries": "Escanear todas las bibliotecas", "Scan Complete": "Escaneo completo", + "Scan completed": "Escaneo completado", "Scan Details": "Detalles del escaneo", "Scan Failed": "Error de escaneo", + "Scan failed": "Error de escaneo", "Scan Recursively": "Escanear recursivamente", + "Scans All Channels": "Escanea todos los canales", "Scan Scope": "Alcance del escaneo", "Scan Started": "Escaneo iniciado", - "Scan all channels (including disabled)": "Escanear todos los canales (incluidos los deshabilitados)", - "Scan completed": "Escaneo completado", - "Scan failed": "Error de escaneo", "Scan subdirectories for media files": "Escanear subdirectorios en busca de archivos multimedia", - "Scans All Channels": "Escanea todos los canales", "Schedule": "Cronograma", + "Schedule a recurring rescore for every failover group in this playlist. Master channels are never promoted or replaced — only failover sort order changes. Off = rescore manually only via the \"Rescore now\" button.": "Programe una nueva puntuación recurrente para cada grupo de conmutación por error en esta lista de reproducción. Los canales maestros nunca se promocionan ni reemplazan, solo cambios en el orden de clasificación de conmutación por error. Desactivado = volver a puntuar manualmente sólo mediante el botón \"Rescore ahora\".", "Schedule Builder": "Generador de horarios", + "Scheduled": "Programado", + "Scheduled Recordings": "Grabaciones programadas", + "Scheduled scans: disabled": "Escaneos programados: deshabilitados", + "Scheduled Start Time": "Hora de inicio programada", + "Scheduled start time must be in the future.": "La hora de inicio programada debe ser en el futuro.", "Schedule Generated": "Horario generado", "Schedule Info": "Información del horario", + "SchedulesDirect": "Horarios directos", + "SchedulesDirect Configuration": "HorariosConfiguración directa", "Schedule Settings": "Configuración de programación", + "Schedules Generated": "Horarios generados", "Schedule Start Time": "Programar hora de inicio", "Schedule Type": "Tipo de horario", "Schedule Window": "Ventana de programación", "Schedule window is already one week": "La ventana de programación ya es de una semana.", - "Scheduled": "Programado", - "Scheduled Recordings": "Grabaciones programadas", - "Scheduled Start Time": "Hora de inicio programada", - "Scheduled scans: disabled": "Escaneos programados: deshabilitados", - "Scheduled start time must be in the future.": "La hora de inicio programada debe ser en el futuro.", - "Schedules Generated": "Horarios generados", - "SchedulesDirect": "Horarios directos", - "SchedulesDirect Configuration": "HorariosConfiguración directa", "Scheduling": "Programación", "Schema": "Esquema", "Script Options": "Opciones de secuencia de comandos", "Scrubber Details": "Detalles del depurador", "Scrubber run cancelled": "Ejecución de depuradora cancelada", "Scrubber tasks run after Playlist sync to check for dead URLs and automatically disable failing channels based on the configuration.": "Las tareas de limpieza se ejecutan después de la sincronización de la lista de reproducción para verificar si hay URL inactivas y deshabilitar automáticamente los canales defectuosos según la configuración.", + "SD Progress": "Progreso SD", "Search & Map": "Buscar y mapa", + "Search and Select Episodes": "Buscar y seleccionar episodios", + "Search and Select Movies": "Buscar y seleccionar películas", + "Search by filename...": "Buscar por nombre de archivo...", + "Search categories": "Buscar categorías", "Search Documentation": "Buscar documentación", "Search Error": "Error de búsqueda", + "Search for master channel": "Buscar canal maestro", + "Searching for TMDB/TVDB IDs. Check the logs or refresh the page in a few seconds.": "Buscando ID de TMDB/TVDB. Verifique los registros o actualice la página en unos segundos.", "Search Language": "Idioma de búsqueda", + "Search live groups": "Buscar grupos en vivo", "Search Query": "Consulta de búsqueda", "Search Results": "Resultados de la búsqueda", + "Search series categories": "Buscar categorías de series", + "Search term or question to look up in the docs": "Término de búsqueda o pregunta para buscar en los documentos", + "Search The Movie Database for this movie": "Busque en la base de datos de películas esta película", + "Search The Movie Database for this series": "Busque en la base de datos de películas esta serie", "Search TMDB": "Buscar en TMDB", - "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs for the selected series? This enables Trash Guides compatibility for Sonarr.": "¿Buscar en TMDB series de TV coincidentes y completar los ID de TMDB/TVDB/IMDB para la serie seleccionada? Esto habilita la compatibilidad de Trash Guides para Sonarr.", - "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs? This enables Trash Guides compatibility for Sonarr.": "¿Buscar en TMDB series de TV coincidentes y completar los ID de TMDB/TVDB/IMDB? Esto habilita la compatibilidad de Trash Guides para Sonarr.", "Search TMDB for matching movies and populate TMDB/IMDB IDs for all VOD channels in the selected playlist? This enables Trash Guides compatibility for Radarr.": "¿Buscar en TMDB películas coincidentes y completar los ID de TMDB/IMDB para todos los canales VOD en la lista de reproducción seleccionada? Esto habilita la compatibilidad de Trash Guides para Radarr.", "Search TMDB for matching movies and populate TMDB/IMDB IDs for the selected VOD channels? This enables Trash Guides compatibility for Radarr/Sonarr.": "¿Buscar en TMDB películas coincidentes y completar los ID de TMDB/IMDB para los canales VOD seleccionados? Esto habilita la compatibilidad de Trash Guides para Radarr/Sonarr.", - "Search The Movie Database for this movie": "Busque en la base de datos de películas esta película", - "Search The Movie Database for this series": "Busque en la base de datos de películas esta serie", - "Search VOD groups": "Buscar grupos de VOD", - "Search and Select Episodes": "Buscar y seleccionar episodios", - "Search and Select Movies": "Buscar y seleccionar películas", - "Search by filename...": "Buscar por nombre de archivo...", - "Search categories": "Buscar categorías", - "Search for master channel": "Buscar canal maestro", - "Search live groups": "Buscar grupos en vivo", - "Search term or question to look up in the docs": "Término de búsqueda o pregunta para buscar en los documentos", - "Searching for TMDB/TVDB IDs. Check the logs or refresh the page in a few seconds.": "Buscando ID de TMDB/TVDB. Verifique los registros o actualice la página en unos segundos.", + "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs? This enables Trash Guides compatibility for Sonarr.": "¿Buscar en TMDB series de TV coincidentes y completar los ID de TMDB/TVDB/IMDB? Esto habilita la compatibilidad de Trash Guides para Sonarr.", + "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs for the selected series? This enables Trash Guides compatibility for Sonarr.": "¿Buscar en TMDB series de TV coincidentes y completar los ID de TMDB/TVDB/IMDB para la serie seleccionada? Esto habilita la compatibilidad de Trash Guides para Sonarr.", + "Search VOD groups": "Buscar grupos de VOD", "Season": "Estación", "Season #": "Estación #", "Season (Metadata)": "Temporada (Metadatos)", @@ -1765,59 +1849,74 @@ "Security scan failed": "Error en el análisis de seguridad", "Seen": "Visto", "Segment Duration": "Duración del segmento", - "Select Episodes": "Seleccionar episodios", - "Select Existing Auth": "Seleccionar autenticación existente", - "Select Expiration Date, or leave empty for no expiration": "Seleccione Fecha de vencimiento o déjelo vacío para que no expire", - "Select Group": "Seleccionar grupo", - "Select Movies": "Seleccionar películas", - "Select Permissions": "Seleccionar permisos", - "Select VOD groups": "Seleccionar grupos de VOD", "Select a Custom Playlist (multiple provider credentials can be configured to match source providers).": "Seleccione una lista de reproducción personalizada (se pueden configurar varias credenciales de proveedor para que coincidan con los proveedores de origen).", - "Select a Stream File Setting for VOD .strm file generation. ": "Seleccione una configuración de archivo de transmisión para la generación de archivos VOD .strm.", - "Select a Stream File Setting for series .strm file generation.": "Seleccione una configuración de archivo continuo para la generación de archivos .strm de la serie.", - "Select a Stream File Setting profile for all VOD channels in this group. VOD-level settings take priority. Leave empty to use global settings.": "Seleccione un perfil de configuración de archivo de transmisión para todos los canales VOD de este grupo. La configuración a nivel de VOD tiene prioridad. Déjelo vacío para usar la configuración global.", - "Select a Stream File Setting profile for all series in this category. Series-level settings take priority. Leave empty to use global settings.": "Seleccione un perfil de configuración de archivos de transmisión para todas las series de esta categoría. La configuración a nivel de serie tiene prioridad. Déjelo vacío para usar la configuración global.", - "Select a Stream File Setting profile to override global/category settings for this series. Leave empty to use category or global settings.": "Seleccione un perfil de configuración de archivo de transmisión para anular la configuración global/de categoría para esta serie. Déjelo vacío para usar la categoría o la configuración global.", - "Select a Stream File Setting profile to override global/group settings for this VOD channel. Leave empty to use group or global settings. Priority: VOD > Group > Global.": "Seleccione un perfil de configuración de archivo de transmisión para anular la configuración global/de grupo para este canal VOD. Déjelo vacío para usar la configuración global o de grupo. Prioridad: VOD > Grupo > Global.", + "Select additional playlists to include as failover sources. Leave empty to only merge channels within this playlist.": "Seleccione listas de reproducción adicionales para incluirlas como fuentes de conmutación por error. Déjelo vacío para fusionar solo canales dentro de esta lista de reproducción.", "Select a group": "Seleccione un grupo", "Select a media server...": "Seleccione un servidor de medios...", - "Select a playlist - only VODs in the selected playlist will be moved. Any VODs selected from another playlist will be ignored.": "Seleccione una lista de reproducción: solo se moverán los VOD de la lista de reproducción seleccionada. Se ignorarán todos los VOD seleccionados de otra lista de reproducción.", + "Select an associated EPG channel for this channel.": "Seleccione un canal EPG asociado para este canal.", + "Select an auth to assign": "Seleccione una autenticación para asignar", "Select a playlist - only channels in the selected playlist will be moved. Any channels selected from another playlist will be ignored.": "Seleccione una lista de reproducción: solo se moverán los canales de la lista de reproducción seleccionada. Se ignorarán todos los canales seleccionados de otra lista de reproducción.", + "Select a playlist - only VODs in the selected playlist will be moved. Any VODs selected from another playlist will be ignored.": "Seleccione una lista de reproducción: solo se moverán los VOD de la lista de reproducción seleccionada. Se ignorarán todos los VOD seleccionados de otra lista de reproducción.", "Select a playlist or leave empty": "Selecciona una lista de reproducción o déjala vacía", "Select a saved pattern...": "Seleccione un patrón guardado...", "Select a standard Playlist (only one set of alternative credentials can be configured).": "Seleccione una lista de reproducción estándar (solo se puede configurar un conjunto de credenciales alternativas).", + "Select a Stream File Setting for series .strm file generation.": "Seleccione una configuración de archivo continuo para la generación de archivos .strm de la serie.", + "Select a Stream File Setting for VOD .strm file generation. ": "Seleccione una configuración de archivo de transmisión para la generación de archivos VOD .strm.", + "Select a Stream File Setting profile for all series in this category. Series-level settings take priority. Leave empty to use global settings.": "Seleccione un perfil de configuración de archivos de transmisión para todas las series de esta categoría. La configuración a nivel de serie tiene prioridad. Déjelo vacío para usar la configuración global.", + "Select a Stream File Setting profile for all VOD channels in this group. VOD-level settings take priority. Leave empty to use global settings.": "Seleccione un perfil de configuración de archivo de transmisión para todos los canales VOD de este grupo. La configuración a nivel de VOD tiene prioridad. Déjelo vacío para usar la configuración global.", + "Select a Stream File Setting profile to override global/category settings for this series. Leave empty to use category or global settings.": "Seleccione un perfil de configuración de archivo de transmisión para anular la configuración global/de categoría para esta serie. Déjelo vacío para usar la categoría o la configuración global.", + "Select a Stream File Setting profile to override global/group settings for this VOD channel. Leave empty to use group or global settings. Priority: VOD > Group > Global.": "Seleccione un perfil de configuración de archivo de transmisión para anular la configuración global/de grupo para este canal VOD. Déjelo vacío para usar la configuración global o de grupo. Prioridad: VOD > Grupo > Global.", "Select a transcoding profile to apply to Live streams for external clients (VLC, Kodi, etc.). Does not affect the in-app player. Leave empty for direct stream proxying.": "Seleccione un perfil de transcodificación para aplicarlo a transmisiones en vivo para clientes externos (VLC, Kodi, etc.). No afecta al reproductor de la aplicación. Déjelo vacío para el proxy de transmisión directa.", "Select a transcoding profile to apply to VOD and Series streams for external clients (VLC, Kodi, etc.). Does not affect the in-app player. Leave empty for direct stream proxying.": "Seleccione un perfil de transcodificación para aplicar a transmisiones VOD y Series para clientes externos (VLC, Kodi, etc.). No afecta al reproductor de la aplicación. Déjelo vacío para el proxy de transmisión directa.", "Select a tuner to remove from the DVR. If it is the last tuner, the entire DVR will be removed.": "Seleccione un sintonizador para eliminarlo del DVR. Si es el último sintonizador, se eliminará todo el DVR.", - "Select additional playlists to include as failover sources. Leave empty to only merge channels within this playlist.": "Seleccione listas de reproducción adicionales para incluirlas como fuentes de conmutación por error. Déjelo vacío para fusionar solo canales dentro de esta lista de reproducción.", - "Select an associated EPG channel for this channel.": "Seleccione un canal EPG asociado para este canal.", - "Select an auth to assign": "Seleccione una autenticación para asignar", "Select auths or leave empty": "Seleccione autenticaciones o déjelo vacío", "Select categories": "Seleccionar categorías", "Select category": "Seleccionar categoría", "Select content source": "Seleccionar fuente de contenido", + "Selected assets deleted": "Activos seleccionados eliminados", + "Selected categories disabled": "Categorías seleccionadas deshabilitadas", + "Selected categories enabled": "Categorías seleccionadas habilitadas", + "Selected category series disabled": "Serie de categoría seleccionada deshabilitada", + "Selected category series enabled": "Serie de categoría seleccionada habilitada", + "Selected channels disabled": "Canales seleccionados deshabilitados", + "Selected channels enabled": "Canales seleccionados habilitados", + "Selected EPGs are processing": "Las EPG seleccionadas se están procesando", + "Selected episodes disabled": "Episodios seleccionados deshabilitados", + "Selected episodes enabled": "Episodios seleccionados habilitados", + "Selected group channels disabled": "Canales de grupo seleccionados deshabilitados", + "Selected group channels enabled": "Canales de grupo seleccionados habilitados", + "Selected groups disabled": "Grupos seleccionados deshabilitados", + "Selected groups enabled": "Grupos seleccionados habilitados", + "Selected logo cache refreshed": "Caché del logotipo seleccionado actualizado", + "Selected merged EPGs are processing": "Las EPG fusionadas seleccionadas se están procesando", + "Selected playlists are processing": "Las listas de reproducción seleccionadas se están procesando", + "Selected series cache refreshed": "Caché de series seleccionadas actualizado", + "Selected series disabled": "Serie seleccionada deshabilitada", + "Selected series enabled": "Serie seleccionada habilitada", + "Selected VOD cache refreshed": "Caché de VOD seleccionado actualizado", "Select encryption type (optional)": "Seleccione el tipo de cifrado (opcional)", + "Select Episodes": "Seleccionar episodios", "Select episodes to add to this network. Once added, you can sort them using drag and drop in the main table.": "Seleccione episodios para agregar a esta red. Una vez agregados, puede ordenarlos arrastrando y soltando en la tabla principal.", + "Select Existing Auth": "Seleccionar autenticación existente", + "Select Expiration Date, or leave empty for no expiration": "Seleccione Fecha de vencimiento o déjelo vacío para que no expire", + "Select Group": "Seleccionar grupo", "Select group": "Seleccionar grupo", "Select image": "Seleccionar imagen", "Select live groups": "Seleccionar grupos en vivo", "Select master channel": "Seleccionar canal maestro", + "Select Movies": "Seleccionar películas", "Select movies to add to this network. Once added, you can sort them using drag and drop in the main table.": "Seleccione películas para agregar a esta red. Una vez agregados, puede ordenarlos arrastrando y soltando en la tabla principal.", - "Select the EPG you would like to apply changes to.": "Seleccione la EPG a la que le gustaría aplicar cambios.", - "Select the EPG you would like to apply the reset to.": "Seleccione la EPG a la que le gustaría aplicar el reinicio.", - "Select the EPG you would like to assign this post process to.": "Seleccione la EPG a la que le gustaría asignar este proceso de publicación.", - "Select the EPG you would like to map from.": "Seleccione la EPG desde la que desea realizar el mapeo.", - "Select the Playlist you would like to assign this post process to.": "Seleccione la lista de reproducción a la que le gustaría asignar este proceso de publicación.", - "Select the Playlist you would like to fetch Series metadata for.": "Seleccione la lista de reproducción para la que desea recuperar los metadatos de la serie.", - "Select the Playlist you would like to fetch TMDB IDs for.": "Seleccione la lista de reproducción para la que desea obtener los ID de TMDB.", - "Select the Playlist you would like to fetch VOD metadata for.": "Seleccione la lista de reproducción para la que desea obtener metadatos de VOD.", - "Select the Playlist you would like to sync Series stream files for.": "Seleccione la lista de reproducción para la que desea sincronizar los archivos de transmisión de la serie.", - "Select the Series you would like to apply changes to.": "Seleccione la serie a la que le gustaría aplicar cambios.", + "Select Permissions": "Seleccionar permisos", + "Select series categories": "Seleccionar categorías de series", "Select the backup file you would like to upload.": "Seleccione el archivo de copia de seguridad que desea cargar.", "Select the backup you would like to restore.": "Seleccione la copia de seguridad que desea restaurar.", "Select the category you would like to move the series to.": "Seleccione la categoría a la que desea mover la serie.", "Select the channel attributes you want to copy to the target playlist.": "Seleccione los atributos del canal que desea copiar a la lista de reproducción de destino.", "Select the default transcoding profiles used when playing streams in the in-app player.": "Seleccione los perfiles de transcodificación predeterminados utilizados al reproducir transmisiones en el reproductor de la aplicación.", + "Select the EPG you would like to apply changes to.": "Seleccione la EPG a la que le gustaría aplicar cambios.", + "Select the EPG you would like to apply the reset to.": "Seleccione la EPG a la que le gustaría aplicar el reinicio.", + "Select the EPG you would like to assign this post process to.": "Seleccione la EPG a la que le gustaría asignar este proceso de publicación.", + "Select the EPG you would like to map from.": "Seleccione la EPG desde la que desea realizar el mapeo.", "Select the group you would like to move the channels to.": "Seleccione el grupo al que desea mover los canales.", "Select the playlist Series you would like to add.": "Seleccione la serie de lista de reproducción que desea agregar.", "Select the playlist this import is associated with.": "Seleccione la lista de reproducción a la que está asociada esta importación.", @@ -1827,19 +1926,26 @@ "Select the playlist you would like to apply changes to.": "Seleccione la lista de reproducción a la que le gustaría aplicar cambios.", "Select the playlist you would like to apply the reset to.": "Seleccione la lista de reproducción a la que le gustaría aplicar el restablecimiento.", "Select the playlist you would like to assign this auth to.": "Seleccione la lista de reproducción a la que le gustaría asignar esta autenticación.", + "Select the Playlist you would like to assign this post process to.": "Seleccione la lista de reproducción a la que le gustaría asignar este proceso de publicación.", "Select the playlist you would like to export channels for.": "Seleccione la lista de reproducción para la que desea exportar canales.", + "Select the Playlist you would like to fetch Series metadata for.": "Seleccione la lista de reproducción para la que desea recuperar los metadatos de la serie.", + "Select the Playlist you would like to fetch TMDB IDs for.": "Seleccione la lista de reproducción para la que desea obtener los ID de TMDB.", + "Select the Playlist you would like to fetch VOD metadata for.": "Seleccione la lista de reproducción para la que desea obtener metadatos de VOD.", "Select the playlist you would like to import series from.": "Seleccione la lista de reproducción desde la que desea importar series.", "Select the playlist you would like to map to.": "Seleccione la lista de reproducción a la que desea asignarla.", + "Select the Playlist you would like to sync Series stream files for.": "Seleccione la lista de reproducción para la que desea sincronizar los archivos de transmisión de la serie.", + "Select the Series you would like to apply changes to.": "Seleccione la serie a la que le gustaría aplicar cambios.", "Select the target playlist and channel attributes to copy": "Seleccione la lista de reproducción de destino y los atributos del canal para copiar", + "Select VOD groups": "Seleccionar grupos de VOD", + "Select what your plugin will participate in. Each capability adds a required PHP interface to your Plugin class.": "Seleccione en qué participará su complemento. Cada capacidad agrega una interfaz PHP requerida a su clase de complemento.", "Select what you would like to find and replace in the selected category names.": "Seleccione lo que le gustaría buscar y reemplazar en los nombres de las categorías seleccionadas.", "Select what you would like to find and replace in the selected channels.": "Seleccione lo que le gustaría buscar y reemplazar en los canales seleccionados.", "Select what you would like to find and replace in the selected epg channels.": "Seleccione lo que le gustaría buscar y reemplazar en los canales epg seleccionados.", "Select what you would like to find and replace in the selected group names.": "Seleccione lo que le gustaría buscar y reemplazar en los nombres de los grupos seleccionados.", - "Select what you would like to find and replace in your VOD group names.": "Seleccione lo que le gustaría buscar y reemplazar en los nombres de sus grupos VOD.", "Select what you would like to find and replace in your channels list.": "Seleccione lo que le gustaría buscar y reemplazar en su lista de canales.", "Select what you would like to find and replace in your live group names.": "Seleccione lo que le gustaría buscar y reemplazar en los nombres de sus grupos en vivo.", "Select what you would like to find and replace in your series category names.": "Seleccione lo que le gustaría buscar y reemplazar en los nombres de las categorías de su serie.", - "Select what your plugin will participate in. Each capability adds a required PHP interface to your Plugin class.": "Seleccione en qué participará su complemento. Cada capacidad agrega una interfaz PHP requerida a su clase de complemento.", + "Select what you would like to find and replace in your VOD group names.": "Seleccione lo que le gustaría buscar y reemplazar en los nombres de sus grupos VOD.", "Select whether to send a request to a URL, execute a local script, or send an email.": "Seleccione si desea enviar una solicitud a una URL, ejecutar un script local o enviar un correo electrónico.", "Select which additional tools the AI assistant can use. Core tools (navigation, memory) are always available.": "Seleccione qué herramientas adicionales puede utilizar el asistente de IA. Las herramientas principales (navegación, memoria) siempre están disponibles.", "Select which libraries to import from your media server": "Seleccione qué bibliotecas importar desde su servidor de medios", @@ -1847,85 +1953,88 @@ "Select which tools the AI assistant can use.": "Seleccione qué herramientas puede utilizar el asistente de IA.", "Select your AI provider and configure the API credentials.": "Seleccione su proveedor de IA y configure las credenciales de API.", "Select your SchedulesDirect lineup": "Selecciona tu programación de Horarios Directos", - "Selected EPGs are processing": "Las EPG seleccionadas se están procesando", - "Selected VOD cache refreshed": "Caché de VOD seleccionado actualizado", - "Selected assets deleted": "Activos seleccionados eliminados", - "Selected categories disabled": "Categorías seleccionadas deshabilitadas", - "Selected categories enabled": "Categorías seleccionadas habilitadas", - "Selected category series disabled": "Serie de categoría seleccionada deshabilitada", - "Selected category series enabled": "Serie de categoría seleccionada habilitada", - "Selected channels disabled": "Canales seleccionados deshabilitados", - "Selected channels enabled": "Canales seleccionados habilitados", - "Selected episodes disabled": "Episodios seleccionados deshabilitados", - "Selected episodes enabled": "Episodios seleccionados habilitados", - "Selected group channels disabled": "Canales de grupo seleccionados deshabilitados", - "Selected group channels enabled": "Canales de grupo seleccionados habilitados", - "Selected groups disabled": "Grupos seleccionados deshabilitados", - "Selected groups enabled": "Grupos seleccionados habilitados", - "Selected logo cache refreshed": "Caché del logotipo seleccionado actualizado", - "Selected merged EPGs are processing": "Las EPG fusionadas seleccionadas se están procesando", - "Selected playlists are processing": "Las listas de reproducción seleccionadas se están procesando", - "Selected series cache refreshed": "Caché de series seleccionadas actualizado", - "Selected series disabled": "Serie seleccionada deshabilitada", - "Selected series enabled": "Serie seleccionada habilitada", - "Send Test Email": "Enviar correo electrónico de prueba", "Send as GET or POST request.": "Enviar como solicitud GET o POST.", "Send as JSON body": "Enviar como cuerpo JSON", + "Send Test Email": "Enviar correo electrónico de prueba", "Send the notification to yourself as well (for testing purposes)": "Envíese la notificación a usted mismo también (para fines de prueba)", "Send without body": "enviar sin cuerpo", "Series": "Serie", "Series .strm files are being synced": "Los archivos .strm de la serie se están sincronizando", + "Series are being processed": "Las series están en proceso.", + "Series categories": "Categorías de series", "Series Category": "Categoría de serie", "Series Details": "Detalles de la serie", - "Series Processing": "Procesamiento en serie", - "Series Sync": "Sincronización de series", - "Series are being processed": "Las series están en proceso.", "Series episodes disabled": "Episodios de la serie deshabilitados", "Series episodes enabled": "Episodios de series habilitados", "Series have been added and are being processed.": "Se han agregado series y se están procesando.", "Series is being processed": "La serie se está procesando.", "Series moved to category": "Serie movida a categoría", "Series poster URL": "URL del póster de la serie", + "Series Processing": "Procesamiento en serie", "Series processing": "Procesamiento en serie", "Series record not found.": "Registro de serie no encontrado.", "Series stream file settings": "Configuración del archivo de transmisión de series", + "Series Sync": "Sincronización de series", "Series to Import": "Serie para importar", "Server": "Servidor", "Server Configuration": "Configuración del servidor", "Server Info": "Información del servidor", "Server Type": "Tipo de servidor", - "Set Timeshift": "Establecer cambio de tiempo", - "Set logo URL": "Establecer URL del logotipo", + "Set EPG shift": "Establecer cambio de EPG", "Set logo override URL": "Establecer URL de anulación de logotipo", + "Set logo URL": "Establecer URL del logotipo", "Set poster URL": "Establecer URL del cartel", "Set preferred icon to EPG": "Establecer icono preferido en EPG", + "Set the EPG time shift (tvg-shift) for the selected channels. This shifts the EPG program schedule by the specified number of hours.": "Configure el cambio de tiempo de EPG (tvg-shift) para los canales seleccionados. Esto cambia el horario del programa EPG en el número de horas especificado.", "Set the timeshift (in hours) for the selected channels. Use 0 to disable catch-up.": "Establezca el timeshift (en horas) para los canales seleccionados. Utilice 0 para desactivar la puesta al día.", "Set the timeshift value for the selected channels. Use 0 to disable catch-up.": "Establezca el valor de Timeshift para los canales seleccionados. Utilice 0 para desactivar la puesta al día.", + "Set Timeshift": "Establecer cambio de tiempo", "Set timeshift": "Establecer cambio de hora", - "Set to 0 (or clear value) for unlimited.": "Establezca en 0 (o borre el valor) para ilimitado.", - "Set to 0 for unlimited streams.": "Establezca en 0 para transmisiones ilimitadas.", "Settings": "Ajustes", "Settings for automatically enabling new content": "Configuraciones para habilitar automáticamente contenido nuevo", "Settings saved": "Configuración guardada", "Settings used when mapping EPG to a Playlist.": "Configuraciones utilizadas al asignar EPG a una lista de reproducción.", + "Set to 0 (or clear value) for unlimited.": "Establezca en 0 (o borre el valor) para ilimitado.", + "Set to 0 for unlimited streams.": "Establezca en 0 para transmisiones ilimitadas.", + "SHA-256 Checksum": "Suma de comprobación SHA-256", + "Shift the EPG time for the selected channels by this many hours. Use values like -2, -1, 0, 1, 2, etc. Use 0 to reset.": "Cambie el tiempo de EPG para los canales seleccionados en esta cantidad de horas. Utilice valores como -2, -1, 0, 1, 2, etc. Utilice 0 para restablecer.", "Short description for the plugin manifest. Leave blank for a default.": "Breve descripción del manifiesto del complemento. Déjelo en blanco por defecto.", "Short description of the content.": "Breve descripción del contenido.", "Show breadcrumbs": "Mostrar migas de pan", "Show breadcrumbs under the page titles": "Mostrar rutas de navegación debajo de los títulos de las páginas", + "shown": "mostrado", "Silence Detection Settings": "Configuración de detección de silencio", "Silence duration (seconds)": "Duración del silencio (segundos)", "Silence threshold (dB)": "Umbral de silencio (dB)", "Simple authentication for playlist access.": "Autenticación simple para acceder a la lista de reproducción.", "Size": "Tamaño", "Skip channels without EPG ID": "Saltar canales sin ID de EPG", + "Smart": "Elegante", + "Smart channel": "canal inteligente", + "Smart channel created": "Canal inteligente creado", + "Smart channels cannot be sources": "Los canales inteligentes no pueden ser fuentes", + "Smart channels must be created from sources within a single playlist. Narrow your selection and try again.": "Los canales inteligentes deben crearse a partir de fuentes dentro de una única lista de reproducción. Limite su selección y vuelva a intentarlo.", + "Smart channel without failovers won't stream.": "El canal inteligente sin conmutación por error no se transmitirá.", + "Smart channel — streams the highest-ranked failover automatically": "Canal inteligente: transmite automáticamente la conmutación por error mejor clasificada", + "SMTP": "SMTP", + "SMTP Encryption": "Cifrado SMTP", + "SMTP From Address": "SMTP de dirección", + "SMTP Host": "Anfitrión SMTP", + "SMTP Password": "Contraseña SMTP", + "SMTP Port": "Puerto SMTP", + "SMTP Settings": "Configuración SMTP", + "SMTP Username": "Nombre de usuario SMTP", + "socks5://user:pass@host:port or http://user:pass@host:port": "socks5://user:pass@host:port or http://user:pass@host:port", + "Some channels were skipped": "Algunos canales fueron saltados", "Sort": "Clasificar", + "Sort all channels in this group alphabetically? This will update the sort order.": "¿Ordenar alfabéticamente todos los canales de este grupo? Esto actualizará el orden de clasificación.", "Sort Alpha": "Ordenar alfa", "Sort Alpha Configs": "Ordenar configuraciones alfa", "Sort By": "Ordenar por", + "Sort now": "Ordenar ahora", "Sort Order": "Orden de clasificación", - "Sort all channels in this group alphabetically? This will update the sort order.": "¿Ordenar alfabéticamente todos los canales de este grupo? Esto actualizará el orden de clasificación.", - "Sort the selected VOD alphabetically? This will update their sort order within this custom playlist.": "¿Ordenar el VOD seleccionado alfabéticamente? Esto actualizará su orden en esta lista personalizada.", "Sort the selected channels alphabetically? This will update their sort order within this custom playlist.": "¿Ordenar los canales seleccionados alfabéticamente? Esto actualizará su orden en esta lista personalizada.", + "Sort the selected VOD alphabetically? This will update their sort order within this custom playlist.": "¿Ordenar el VOD seleccionado alfabéticamente? Esto actualizará su orden en esta lista personalizada.", "Source": "Fuente", "Source EPGs": "EPG de origen", "Source Metadata": "Metadatos de origen", @@ -1940,39 +2049,39 @@ "Standard Playlist": "Lista de reproducción estándar", "Start Broadcast": "Iniciar transmisión", "Start Broadcasting": "Empezar a transmitir", - "Start Number": "Número de inicio", - "Start On Viewer Connection": "Iniciar con la conexión del espectador", "Start broadcasting for the selected networks.": "Comience a transmitir para las redes seleccionadas.", "Start continuous HLS broadcasting": "Iniciar la transmisión HLS continua", - "Start probing": "Empezar a sondear", "Started": "Comenzó", "Started At": "Comenzó en", + "Start Number": "Número de inicio", + "Start On Viewer Connection": "Iniciar con la conexión del espectador", + "Start probing": "Empezar a sondear", "Station ID": "ID de estación", "Status": "Estado", - "Status has been reset for the selected Playlists.": "Se ha restablecido el estado de las listas de reproducción seleccionadas.", "Status has been reset for the selected media servers.": "Se ha restablecido el estado de los servidores de medios seleccionados.", + "Status has been reset for the selected Playlists.": "Se ha restablecido el estado de las listas de reproducción seleccionadas.", "Still running": "Todavía corriendo", "Stop Broadcast": "Detener transmisión", "Stop Broadcasting": "Dejar de transmitir", - "Stop Run": "Detener Ejecutar", "Stop broadcasting for the selected networks.": "Deja de transmitir para las redes seleccionadas.", "Stop oldest stream when limit reached": "Detener la transmisión más antigua cuando se alcance el límite", + "Stop Run": "Detener Ejecutar", "Stop the current broadcast": "Detener la transmisión actual", "Stop the current broadcast. Viewers will be disconnected.": "Detener la transmisión actual. Los espectadores serán desconectados.", + "Stream Backend": "Servidor de transmisión", "Stream File Setting": "Configuración del archivo de transmisión", "Stream File Setting Profile": "Perfil de configuración de archivos de transmisión", "Stream File Settings": "Configuración de archivos de transmisión", - "Stream Format": "Formato de transmisión", - "Stream Monitor": "Monitor de transmisión", - "Stream Output": "Salida de flujo", - "Stream Probing": "Sondeo de flujo", - "Stream Profile": "Perfil de transmisión", - "Stream Profiles": "Perfiles de transmisión", - "Stream URL": "URL de transmisión", "Stream file settings": "Configuración del archivo de transmisión", "Stream file settings define how .strm files are generated and organized. They can be assigned globally in Settings, to Groups/Categories, or directly to individual Series/VOD channels. Priority: Direct > Group/Category > Global.": "La configuración del archivo de transmisión define cómo se generan y organizan los archivos .strm. Se pueden asignar globalmente en Configuración, a Grupos/Categorías, o directamente a Series/canales VOD individuales. Prioridad: Directo > Grupo/Categoría > Global.", + "Stream Format": "Formato de transmisión", + "Streaming notes from running and recent jobs. Open any run to inspect the payload, result snapshot, and full trail.": "Transmisión de notas de trabajos recientes y en ejecución. Abra cualquier ejecución para inspeccionar la carga útil, la instantánea del resultado y el recorrido completo.", + "Streaming Output": "Salida de transmisión", + "Stream Monitor": "Monitor de transmisión", "Stream not probed": "Corriente no sondeada", + "Stream Output": "Salida de flujo", "Stream probed": "Corriente sondeada", + "Stream Probing": "Sondeo de flujo", "Stream probing completed": "Sondeo de flujo completado", "Stream probing disabled": "Sondeo de flujo deshabilitado", "Stream probing enabled": "Sondeo de flujo habilitado", @@ -1981,10 +2090,11 @@ "Stream probing has been enabled for the selected channels.": "La prueba de transmisión se ha habilitado para los canales seleccionados.", "Stream probing is running in the background. You will be notified once the process is complete.": "El sondeo de flujo se está ejecutando en segundo plano. Se le notificará una vez que se complete el proceso.", "Stream probing started": "Se inició el sondeo de corriente", + "Stream Profile": "Perfil de transmisión", + "Stream Profiles": "Perfiles de transmisión", "Stream profiles are used to define how streams are transcoded by the proxy. They can be assigned to playlists to enable transcoding for those playlists. If a playlist does not have a stream profile assigned, direct stream proxying will be used.": "Los perfiles de transmisión se utilizan para definir cómo el proxy transcodifica las transmisiones. Se pueden asignar a listas de reproducción para permitir la transcodificación de esas listas de reproducción. Si una lista de reproducción no tiene un perfil de transmisión asignado, se utilizará el proxy de transmisión directa.", - "Streaming Output": "Salida de transmisión", - "Streaming notes from running and recent jobs. Open any run to inspect the payload, result snapshot, and full trail.": "Transmisión de notas de trabajos recientes y en ejecución. Abra cualquier ejecución para inspeccionar la carga útil, la instantánea del resultado y el recorrido completo.", "Streams": "Corrientes", + "Stream URL": "URL de transmisión", "Strip all catch-up related attributes from the playlist output and Xtream API. Useful when your provider\\'s catch-up doesn\\'t work or is unreliable.": "Elimine todos los atributos relacionados con la actualización de la salida de la lista de reproducción y de la API de Xtream. Útil cuando la actualización de su proveedor no funciona o no es confiable.", "Structured Context": "Contexto estructurado", "Subject line for the email (optional).": "Línea de asunto del correo electrónico (opcional).", @@ -1995,57 +2105,46 @@ "Successfully connected to TMDB API!": "¡Conectado exitosamente a la API TMDB!", "Summary": "Resumen", "Sync .strm files now? This will generate .strm files for enabled series.": "¿Sincronizar archivos .strm ahora? Esto generará archivos .strm para las series habilitadas.", + "Sync and Process": "Sincronización y proceso", + "Sync category series .strm files now? This will generate .strm files for the enabled series at the path set for the series.": "¿Sincronizar archivos .strm de series de categorías ahora? Esto generará archivos .strm para la serie habilitada en la ruta establecida para la serie.", + "Synced": "Sincronizado", + "Synced at": "Sincronizado en", "Sync Failed": "Error de sincronización", + "Sync group VOD channels .strm files now? This will generate .strm files for the group channels.": "¿Sincronizar archivos .strm de canales VOD de grupo ahora? Esto generará archivos .strm para los canales del grupo.", "Sync Information": "Información de sincronización", "Sync Interval": "Intervalo de sincronización", "Sync Invalidation": "Invalidación de sincronización", + "Sync invalidation threshold": "Umbral de invalidación de sincronización", "Sync Location": "Ubicación de sincronización", "Sync Logs": "Registros de sincronización", "Sync Media Server": "Sincronizar servidor de medios", "Sync Mode": "Modo de sincronización", + "Sync movies as VOD channels": "Sincronizar películas como canales VOD", "Sync Now": "Sincronizar ahora", "Sync Options": "Opciones de sincronización", "Sync Progress": "Progreso de sincronización", "Sync Schedule": "Programación de sincronización", "Sync Selected": "Sincronización seleccionada", - "Sync Series .strm files": "Sincronizar archivos .strm de la serie", - "Sync Started": "Sincronización iniciada", - "Sync Status": "Estado de sincronización", - "Sync TV series with episodes": "Sincronizar series de TV con episodios", - "Sync Time": "Hora de sincronización", - "Sync VOD .strm file": "Sincronizar archivo VOD .strm", - "Sync VOD .strm files": "Sincronizar archivos VOD .strm", - "Sync VOD .strm files now? This will generate .strm files for this VOD channel at the path set for this channel.": "¿Sincronizar archivos VOD .strm ahora? Esto generará archivos .strm para este canal VOD en la ruta establecida para este canal.", - "Sync and Process": "Sincronización y proceso", - "Sync category series .strm files now? This will generate .strm files for the enabled series at the path set for the series.": "¿Sincronizar archivos .strm de series de categorías ahora? Esto generará archivos .strm para la serie habilitada en la ruta establecida para la serie.", - "Sync group VOD channels .strm files now? This will generate .strm files for the group channels.": "¿Sincronizar archivos .strm de canales VOD de grupo ahora? Esto generará archivos .strm para los canales del grupo.", - "Sync invalidation threshold": "Umbral de invalidación de sincronización", - "Sync movies as VOD channels": "Sincronizar películas como canales VOD", - "Sync selected VOD .strm files now? This will generate .strm files for the selected VOD channels at the path set for the channels.": "¿Sincronizar archivos VOD .strm seleccionados ahora? Esto generará archivos .strm para los canales VOD seleccionados en la ruta establecida para los canales.", "Sync selected category series .strm files now? This will generate .strm files for the enabled series at the path set for the series.": "¿Sincronizar archivos .strm de la serie de categorías seleccionadas ahora? Esto generará archivos .strm para la serie habilitada en la ruta establecida para la serie.", "Sync selected category series .strm files now? This will generate .strm files for the selected series at the path set for the series.": "¿Sincronizar archivos .strm de la serie de categorías seleccionadas ahora? Esto generará archivos .strm para la serie seleccionada en la ruta establecida para la serie.", "Sync selected group VOD channels .strm files now? This will generate .strm files for the group channels.": "¿Sincronizar archivos .strm de canales VOD del grupo seleccionado ahora? Esto generará archivos .strm para los canales del grupo.", "Sync selected series .strm files now? This will generate .strm files for the selected series at the path set for the series.": "¿Sincronizar archivos .strm de la serie seleccionada ahora? Esto generará archivos .strm para la serie seleccionada en la ruta establecida para la serie.", + "Sync selected VOD .strm files now? This will generate .strm files for the selected VOD channels at the path set for the channels.": "¿Sincronizar archivos VOD .strm seleccionados ahora? Esto generará archivos .strm para los canales VOD seleccionados en la ruta establecida para los canales.", + "Sync Series .strm files": "Sincronizar archivos .strm de la serie", "Sync series .strm files now? This will generate .strm files for this series at the path set for this series.": "¿Sincronizar archivos .strm de la serie ahora? Esto generará archivos .strm para esta serie en la ruta establecida para esta serie.", + "Sync Started": "Sincronización iniciada", + "Sync Status": "Estado de sincronización", "Sync stream files": "Sincronizar archivos de flujo", "Sync stream files for all enabled Playlist Series? If disabled, it will only sync for Series of the selected Playlist.": "¿Sincronizar archivos de transmisión para todas las series de listas de reproducción habilitadas? Si está deshabilitado, solo se sincronizará para las series de la lista de reproducción seleccionada.", + "Sync Time": "Hora de sincronización", "Sync time": "tiempo de sincronización", - "Synced": "Sincronizado", - "Synced at": "Sincronizado en", + "Sync TV series with episodes": "Sincronizar series de TV con episodios", + "Sync VOD .strm file": "Sincronizar archivo VOD .strm", + "Sync VOD .strm files": "Sincronizar archivos VOD .strm", + "Sync VOD .strm files now? This will generate .strm files for this VOD channel at the path set for this channel.": "¿Sincronizar archivos VOD .strm ahora? Esto generará archivos .strm para este canal VOD en la ruta establecida para este canal.", "System": "Sistema", "System Prompt": "Aviso del sistema", "System Resources": "Recursos del sistema", - "TMDB": "TMDB", - "TMDB API Key": "Clave API de TMDB", - "TMDB API Key Required": "Se requiere clave API de TMDB", - "TMDB ID": "ID de TMDB", - "TMDB ID format": "Formato de identificación TMDB", - "TMDB Integration": "Integración TMDB", - "TMDB Metadata Applied": "Metadatos TMDB aplicados", - "TMDB Search Started": "Búsqueda TMDB iniciada", - "TMDB/TVDB": "TMDB/TVDB", - "TVDB ID": "ID de TVDB", - "TVG ID/Stream ID (default)": "ID de TVG/ID de transmisión (predeterminado)", "Tags": "Etiquetas", "Target": "Objetivo", "Target Playlist": "Lista de reproducción objetivo", @@ -2053,40 +2152,38 @@ "Technical Details": "Detalles técnicos", "Test": "Prueba", "Test Connection": "Conexión de prueba", + "Test connection": "Conexión de prueba", "Test Connection & Discover Libraries": "Probar conexión y descubrir bibliotecas", + "Test credentials and auto-detect max connections": "Pruebe las credenciales y detecte automáticamente el máximo de conexiones", "Test Email Sent": "Correo electrónico de prueba enviado", "Test Primary": "Prueba Primaria", - "Test WebSocket": "Probar WebSocket", - "Test connection": "Conexión de prueba", - "Test credentials and auto-detect max connections": "Pruebe las credenciales y detecte automáticamente el máximo de conexiones", "Test primary account credentials and detect max connections": "Pruebe las credenciales de la cuenta principal y detecte el máximo de conexiones", "Test resolver connection": "Conexión de resolución de prueba", + "Test WebSocket": "Probar WebSocket", "The \"From\" email address for outgoing emails. Defaults to no-reply@m3u-editor.dev.": "La dirección de correo electrónico \"De\" para los correos electrónicos salientes. El valor predeterminado es no-reply@m3u-editor.dev.", - "The AI provider to use for the Copilot assistant.": "El proveedor de IA que se utilizará para el asistente del copiloto.", - "The EPG file cache has been successfully cleared.": "La caché del archivo EPG se ha borrado correctamente.", - "The EPG map has been disabled for the selected channels.": "El mapa EPG se ha desactivado para los canales seleccionados.", - "The EPG map has been re-enabled for the selected channels.": "El mapa EPG se ha vuelto a habilitar para los canales seleccionados.", - "The EPG mapping process has been initiated for the selected mappings.": "El proceso de asignación de EPG se ha iniciado para las asignaciones seleccionadas.", - "The EPG mapping process has been initiated.": "Se ha iniciado el proceso de mapeo de la EPG.", - "The EPG mapping process has been re-initiated.": "Se ha reiniciado el proceso de mapeo de la EPG.", - "The EPG source ID to match against. Always ask the user which EPG source to use before calling this tool.": "El ID de origen de la EPG con el que comparar. Pregunte siempre al usuario qué fuente de EPG utilizar antes de llamar a esta herramienta.", - "The Movie Database ID.": "El ID de la base de datos de películas.", - "The TMDB ID lookup has been started. You will be notified when it is complete.": "Se ha iniciado la búsqueda de ID de TMDB. Se le notificará cuando esté completo.", - "The VOD metadata fetching and processing has been started for the group channels. Only enabled channels will be processed. You will be notified when it is complete.": "Se ha iniciado la obtención y el procesamiento de metadatos VOD para los canales del grupo. Sólo se procesarán los canales habilitados. Se le notificará cuando esté completo.", - "The VOD metadata fetching and processing has been started for the selected group channels. Only enabled channels will be processed. You will be notified when it is complete.": "Se ha iniciado la obtención y el procesamiento de metadatos VOD para los canales del grupo seleccionados. Sólo se procesarán los canales habilitados. Se le notificará cuando esté completo.", - "The VOD metadata fetching and processing has been started. You will be notified when it is complete.": "Se ha iniciado la obtención y el procesamiento de metadatos de VOD. Se le notificará cuando esté completo.", "The action to perform: \"select\", \"update\", or \"delete\".": "La acción a realizar: \"select\", \"update\" o \"delete\".", + "The AI provider to use for the Copilot assistant.": "El proveedor de IA que se utilizará para el asistente del copiloto.", "The category series have been moved to the chosen category.": "La serie de categorías se ha movido a la categoría elegida.", "The channel group name to process (e.g. \"UNITED STATES\").": "El nombre del grupo de canales a procesar (por ejemplo, \"ESTADOS UNIDOS\").", "The channels in the selected groups have been recounted sequentially.": "Los canales de los grupos seleccionados se han contado secuencialmente.", "The channels in this group have been recounted.": "Se han contado los canales de este grupo.", "The channels in this group have been sorted alphabetically.": "Los canales de este grupo se han ordenado alfabéticamente.", + "The container format FFmpeg will produce. Must match the -f muxer argument in your FFmpeg template above.": "El formato de contenedor que producirá FFmpeg. Debe coincidir con el argumento -f muxer en su plantilla FFmpeg anterior.", "The container format for the output stream.": "El formato contenedor para el flujo de salida.", + "The container format Streamlink will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format Streamlink actually produces for the selected quality.": "Se generará el formato de contenedor Streamlink. Esto establece la extensión de la URL (por ejemplo, .ts, .mp4) para que los jugadores sepan cómo manejar la transmisión. Debe coincidir con el formato que Streamlink realmente produce para la calidad seleccionada.", + "The container format yt-dlp will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format produced by your yt-dlp format selector.": "Se generará el formato de contenedor yt-dlp. Esto establece la extensión de la URL (por ejemplo, .ts, .mp4) para que los jugadores sepan cómo manejar la transmisión. Debe coincidir con el formato producido por su selector de formato yt-dlp.", "The current category series have been disabled.": "Las series de categorías actuales han sido deshabilitadas.", "The current category series have been enabled.": "Se han habilitado las series de categorías actuales.", "The database table to query.": "La tabla de base de datos a consultar.", "The default transcoding profile used for the in-app player for Live content. Leave empty to disable transcoding (some streams may not be playable in the player).": "El perfil de transcodificación predeterminado utilizado para el reproductor en la aplicación para contenido en vivo. Déjelo vacío para deshabilitar la transcodificación (es posible que algunas transmisiones no se puedan reproducir en el reproductor).", "The default transcoding profile used for the in-app player for VOD/Series content. Leave empty to disable transcoding (some streams may not be playable in the player).": "El perfil de transcodificación predeterminado utilizado para el reproductor en la aplicación para contenido VOD/Series. Déjelo vacío para deshabilitar la transcodificación (es posible que algunas transmisiones no se puedan reproducir en el reproductor).", + "The EPG file cache has been successfully cleared.": "La caché del archivo EPG se ha borrado correctamente.", + "The EPG map has been disabled for the selected channels.": "El mapa EPG se ha desactivado para los canales seleccionados.", + "The EPG map has been re-enabled for the selected channels.": "El mapa EPG se ha vuelto a habilitar para los canales seleccionados.", + "The EPG mapping process has been initiated.": "Se ha iniciado el proceso de mapeo de la EPG.", + "The EPG mapping process has been initiated for the selected mappings.": "El proceso de asignación de EPG se ha iniciado para las asignaciones seleccionadas.", + "The EPG mapping process has been re-initiated.": "Se ha reiniciado el proceso de mapeo de la EPG.", + "The EPG source ID to match against. Always ask the user which EPG source to use before calling this tool.": "El ID de origen de la EPG con el que comparar. Pregunte siempre al usuario qué fuente de EPG utilizar antes de llamar a esta herramienta.", "The event that will trigger this post process.": "El evento que desencadenará este proceso de publicación.", "The file extension of the VOD container (e.g., mp4, mkv, etc.).": "La extensión de archivo del contenedor VOD (por ejemplo, mp4, mkv, etc.).", "The group channels have been disabled.": "Los canales del grupo han sido desactivados.", @@ -2096,14 +2193,15 @@ "The groups channels have been disabled.": "Los canales del grupo han sido deshabilitados.", "The latest execution and its immediate outcome.": "La última ejecución y su resultado inmediato.", "The latest plugin executions across all installed plugins.": "Las últimas ejecuciones de complementos en todos los complementos instalados.", - "The logo URL has been updated for the selected networks.": "La URL del logotipo se ha actualizado para las redes seleccionadas.", "The logo cache has been cleared. Logos will be fetched again on next request wherever logo proxy is enabled.": "Se ha borrado el caché del logotipo. Los logotipos se recuperarán nuevamente en la próxima solicitud siempre que esté habilitado el proxy de logotipo.", - "The logo override URL has been updated for the selected VOD channels.": "La URL de anulación del logotipo se actualizó para los canales VOD seleccionados.", "The logo override URL has been updated for the selected channels.": "La URL de anulación del logotipo se ha actualizado para los canales seleccionados.", + "The logo override URL has been updated for the selected VOD channels.": "La URL de anulación del logotipo se actualizó para los canales VOD seleccionados.", + "The logo URL has been updated for the selected networks.": "La URL del logotipo se ha actualizado para las redes seleccionadas.", "The merge has been disabled for the selected channels. They will not be merged during \"Merge Same ID\" jobs.": "La combinación se ha desactivado para los canales seleccionados. No se fusionarán durante los trabajos de \"Fusionar el mismo ID\".", "The merge has been re-enabled for the selected channels. They can now be merged during \"Merge Same ID\" jobs.": "La combinación se ha vuelto a habilitar para los canales seleccionados. Ahora se pueden fusionar durante los trabajos \"Fusionar el mismo ID\".", "The model to use. Leave blank to use the provider default.": "El modelo a utilizar. Déjelo en blanco para utilizar el proveedor predeterminado.", "The most recent plugin job and where to inspect it.": "El trabajo del complemento más reciente y dónde inspeccionarlo.", + "The Movie Database ID.": "El ID de la base de datos de películas.", "The original title in the source language.": "El título original en el idioma de origen.", "The playlist ID chosen by the user. Omit on the first call — you must list playlists first so the user can select one.": "El ID de la lista de reproducción elegido por el usuario. Omitir en la primera llamada: primero debe enumerar las listas de reproducción para que el usuario pueda seleccionar una.", "The playlist ID containing the channels to match.": "El ID de la lista de reproducción que contiene los canales que deben coincidir.", @@ -2127,10 +2225,6 @@ "The scrubber has been initiated and will run in the background.": "El depurador se ha iniciado y se ejecutará en segundo plano.", "The scrubber has been re-initiated.": "Se ha reiniciado el depurador.", "The search term to look for": "El término de búsqueda a buscar", - "The selected EPGs are being processed in the background. Depending on the size of the guide data, this may take a while.": "Las EPG seleccionadas se procesan en segundo plano. Dependiendo del tamaño de los datos de la guía, esto puede tardar un poco.", - "The selected VOD have been added to the custom group.": "El VOD seleccionado se ha agregado al grupo personalizado.", - "The selected VOD have been sorted alphabetically.": "El VOD seleccionado ha sido ordenado alfabéticamente.", - "The selected VODs have been moved to the chosen group.": "Los VOD seleccionados se han movido al grupo elegido.", "The selected categories have been disabled.": "Las categorías seleccionadas han sido deshabilitadas.", "The selected categories have been enabled.": "Las categorías seleccionadas han sido habilitadas.", "The selected category series have been disabled.": "Las series de categorías seleccionadas han sido deshabilitadas.", @@ -2144,6 +2238,7 @@ "The selected channels have been recounted.": "Se han contado los canales seleccionados.", "The selected channels have been sorted alphabetically.": "Los canales seleccionados han sido ordenados alfabéticamente.", "The selected channels were recounted for this custom playlist only.": "Los canales seleccionados se contaron únicamente para esta lista de reproducción personalizada.", + "The selected EPGs are being processed in the background. Depending on the size of the guide data, this may take a while.": "Las EPG seleccionadas se procesan en segundo plano. Dependiendo del tamaño de los datos de la guía, esto puede tardar un poco.", "The selected episodes have been disabled.": "Los episodios seleccionados han sido desactivados.", "The selected episodes have been enabled.": "Los episodios seleccionados han sido habilitados.", "The selected group channels have been disabled.": "Los canales del grupo seleccionado han sido desactivados.", @@ -2159,20 +2254,26 @@ "The selected series have been detached from the custom playlist.": "Las series seleccionadas se han eliminado de la lista de reproducción personalizada.", "The selected series have been disabled.": "Las series seleccionadas han sido deshabilitadas.", "The selected series have been enabled.": "Las series seleccionadas han sido habilitadas.", + "The selected VOD have been added to the custom group.": "El VOD seleccionado se ha agregado al grupo personalizado.", + "The selected VOD have been sorted alphabetically.": "El VOD seleccionado ha sido ordenado alfabéticamente.", + "The selected VODs have been moved to the chosen group.": "Los VOD seleccionados se han movido al grupo elegido.", + "These plugins have issues that need your attention — they may be blocked, modified, invalid, or incomplete.": "Estos complementos tienen problemas que requieren su atención: pueden estar bloqueados, modificados, no válidos o incompletos.", "The series episodes have been disabled.": "Los episodios de la serie han sido desactivados.", "The series episodes have been enabled.": "Los episodios de la serie han sido habilitados.", "The series has been moved to the chosen category.": "La serie ha sido trasladada a la categoría elegida.", "The series have been moved to the chosen category.": "La serie ha sido trasladada a la categoría elegida.", + "These settings are used by hook-triggered runs, scheduled runs, and as defaults for manual actions.": "Estas configuraciones se utilizan en ejecuciones activadas por gancho, ejecuciones programadas y como valores predeterminados para acciones manuales.", "The starting channel number.": "El número del canal inicial.", "The system prompt sent to the AI on every conversation to configure its behaviour.": "El aviso del sistema enviado a la IA en cada conversación para configurar su comportamiento.", "The title from metadata info.": "El título de la información de metadatos.", + "The TMDB ID lookup has been started. You will be notified when it is complete.": "Se ha iniciado la búsqueda de ID de TMDB. Se le notificará cuando esté completo.", "The type of item to assign this post process to.": "El tipo de elemento al que asignar este proceso de publicación.", "The type of playlist to assign this auth to.": "El tipo de lista de reproducción a la que asignar esta autenticación.", - "The worker will stop the run at the next safe checkpoint.": "El trabajador detendrá la carrera en el siguiente punto de control seguro.", - "The year of the VOD content.": "El año del contenido VOD.", - "These plugins have issues that need your attention — they may be blocked, modified, invalid, or incomplete.": "Estos complementos tienen problemas que requieren su atención: pueden estar bloqueados, modificados, no válidos o incompletos.", - "These settings are used by hook-triggered runs, scheduled runs, and as defaults for manual actions.": "Estas configuraciones se utilizan en ejecuciones activadas por gancho, ejecuciones programadas y como valores predeterminados para acciones manuales.", - "This URL must be reachable from your Plex server. Use your machine\\'s LAN IP, not localhost.": "Esta URL debe ser accesible desde su servidor Plex. Utilice la IP LAN de su máquina, no el host local.", + "The VOD metadata fetching and processing has been started. You will be notified when it is complete.": "Se ha iniciado la obtención y el procesamiento de metadatos de VOD. Se le notificará cuando esté completo.", + "The VOD metadata fetching and processing has been started for the group channels. Only enabled channels will be processed. You will be notified when it is complete.": "Se ha iniciado la obtención y el procesamiento de metadatos VOD para los canales del grupo. Sólo se procesarán los canales habilitados. Se le notificará cuando esté completo.", + "The VOD metadata fetching and processing has been started for the selected group channels. Only enabled channels will be processed. You will be notified when it is complete.": "Se ha iniciado la obtención y el procesamiento de metadatos VOD para los canales del grupo seleccionados. Sólo se procesarán los canales habilitados. Se le notificará cuando esté completo.", + "The worker will stop the run at the next safe checkpoint.": "El trabajador detendrá la carrera en el siguiente punto de control seguro.", + "The year of the VOD content.": "El año del contenido VOD.", "This action will permanently delete all series associated with the playlist. Proceed with caution.": "Esta acción eliminará permanentemente todas las series asociadas con la lista de reproducción. Proceda con precaución.", "This channel hasn't been probed yet. Run a probe to capture stream details.": "Este canal aún no ha sido sondeado. Ejecute una sonda para capturar los detalles de la transmisión.", "This is a development/testing plugin": "Este es un complemento de desarrollo/prueba.", @@ -2184,6 +2285,8 @@ "This run has no summary yet. Use the payload, result, and log stream below to inspect what happened.": "Esta ejecución aún no tiene resumen. Utilice la carga útil, el resultado y el flujo de registro a continuación para inspeccionar lo que sucedió.", "This run has not written a summary yet.": "Esta ejecución aún no ha escrito un resumen.", "This should be disabled unless directed by SchedulesDirect support": "Esto debe desactivarse a menos que lo indique el soporte de SchedulesDirect.", + "This URL must be reachable from your Plex server. Uses the Proxy URL Override or APP_URL. Adjust if Plex reaches m3u-editor via a different address (e.g. Docker internal IP).": "Esta URL debe ser accesible desde su servidor Plex. Utiliza la anulación de URL de proxy o APP_URL. Ajuste si Plex llega al editor m3u a través de una dirección diferente (por ejemplo, IP interna de Docker).", + "This URL must be reachable from your Plex server. Use your machine\\'s LAN IP, not localhost.": "Esta URL debe ser accesible desde su servidor Plex. Utilice la IP LAN de su máquina, no el host local.", "This will be the name of the duplicated playlist.": "Este será el nombre de la lista de reproducción duplicada.", "This will clear all playlists currently marked as invalid, allowing them to be used for failover again immediately.": "Esto borrará todas las listas de reproducción actualmente marcadas como no válidas, lo que permitirá que se puedan usar nuevamente para la conmutación por error de inmediato.", "This will clear any stuck processing locks and allow new syncs to run. Use this if syncs appear stuck.": "Esto eliminará cualquier bloqueo de procesamiento bloqueado y permitirá que se ejecuten nuevas sincronizaciones. Utilízalo si las sincronizaciones parecen atascadas.", @@ -2199,14 +2302,23 @@ "This will sync all content from the media server. For large libraries, this may take several minutes.": "Esto sincronizará todo el contenido del servidor de medios. Para bibliotecas grandes, esto puede tardar varios minutos.", "This will trigger Plex to re-fetch your EPG guide data and configure automatic refreshes.": "Esto hará que Plex vuelva a buscar los datos de su guía EPG y configure actualizaciones automáticas.", "Time Shift": "Cambio de tiempo", + "timeshift": "cambio de tiempo", "Timeshift updated": "Timeshift actualizado", "Timeshift value": "Valor de cambio de tiempo", "Timing": "Momento", "Title": "Título", "Title (Info)": "Título (Información)", "Title folder metadata": "Metadatos de la carpeta de título", + "TMDB": "TMDB", + "TMDB/TVDB": "TMDB/TVDB", + "TMDB API Key": "Clave API de TMDB", + "TMDB API Key Required": "Se requiere clave API de TMDB", + "TMDB ID": "ID de TMDB", + "TMDB ID format": "Formato de identificación TMDB", + "TMDB Integration": "Integración TMDB", + "TMDB Metadata Applied": "Metadatos TMDB aplicados", + "TMDB Search Started": "Búsqueda TMDB iniciada", "To Email Address": "A la dirección de correo electrónico", - "To use as the master for the selected channel.": "Para utilizar como maestro para el canal seleccionado.", "Toggle auth status": "Alternar estado de autenticación", "Toggle auto-sync status": "Alternar estado de sincronización automática", "Toggle proxy status": "Alternar estado de proxy", @@ -2215,89 +2327,110 @@ "Tools available to the Copilot assistant across all pages.": "Herramientas disponibles para el asistente Copilot en todas las páginas.", "Total Channels": "Canales totales", "Total EPG Channels": "Canales EPG totales", - "Total Programmes": "Programas totales", "Total number of channels available for this mapping.": "Número total de canales disponibles para este mapeo.", "Total number of channels checked in the last run.": "Número total de canales comprobados en la última ejecución.", + "Total Programmes": "Programas totales", "Total streams available for this playlist (∞ indicates no limit)": "Total de transmisiones disponibles para esta lista de reproducción (∞ indica que no hay límite)", "Total time to sync playlist (in seconds)": "Tiempo total para sincronizar la lista de reproducción (en segundos)", + "To use as the master for the selected channel.": "Para utilizar como maestro para el canal seleccionado.", "Transcode": "Transcodificar", "Transcode Mode": "Modo de transcodificación", "Transcode this channel using the selected profile. Overrides the playlist-level stream profile for this channel. Leave empty for direct stream proxying.": "Transcodifica este canal usando el perfil seleccionado. Anula el perfil de transmisión a nivel de lista de reproducción para este canal. Déjelo vacío para el proxy de transmisión directa.", "Transcoding": "Transcodificación", "Transcoding Settings (optional)": "Configuración de transcodificación (opcional)", "Trust": "Confianza", - "Trust Plugin": "Complemento de confianza", "Trust blocked": "Confianza bloqueada", - "Trust posture": "Postura de confianza", "Trusted": "Confiable", - "Trusted Plugins": "Complementos confiables", "Trusted by": "Confiado por", + "Trusted Plugins": "Complementos confiables", "Trusting a plugin locks its current files as the approved version and sets up any database tables or storage the plugin needs.": "Confiar en un complemento bloquea sus archivos actuales como la versión aprobada y configura las tablas de base de datos o el almacenamiento que necesita el complemento.", + "Trust Plugin": "Complemento de confianza", + "Trust posture": "Postura de confianza", "Tuner": "Sintonizador", "Tuner Registered": "Sintonizador registrado", "Tuner Removed": "Sintonizador eliminado", "Tunes In": "Sintoniza", + "tvc-guide-stationid": "tvc-guide-stationid", + "TVDB ID": "ID de TVDB", + "tvg-chno": "tvg-chno", + "tvg-id": "id-tvg", + "tvg-logo": "logotipo-tvg", + "tvg-name": "nombre-tvg", + "tvg-shift": "cambio de tvg", + "TVG ID/Stream ID (default)": "ID de TVG/ID de transmisión (predeterminado)", "Type": "Tipo", "Type of Playlist": "Tipo de lista de reproducción", - "URL": "URL", - "URL & Connection": "URL y conexión", - "URL Override": "Anulación de URL", - "URL Settings": "Configuración de URL", - "URL Type": "Tipo de URL", - "URL or Local file path": "URL o ruta del archivo local", - "URL to Kinopoisk page.": "URL a la página de Kinopoisk.", - "URL to large cover image.": "URL a la imagen de portada grande.", - "URL to movie poster/image.": "URL al póster/imagen de la película.", - "URL/XML File": "Archivo URL/XML", - "USA, UK, etc.": "Estados Unidos, Reino Unido, etc.", - "UTC": "UTC", "Uncategorized": "Sin categoría", "Undo EPG Map": "Deshacer mapa EPG", "Undo Find & Replace": "Deshacer buscar y reemplazar", "Unhealthy Streams": "Corrientes no saludables", - "Uninstall Plugin": "Desinstalar complemento", "Uninstall blocked": "Desinstalación bloqueada", - "Uninstall plugin": "Desinstalar complemento", "Uninstalled": "Desinstalado", "Uninstalling disables the plugin immediately. You can keep the plugin\\'s data for a future reinstall, or delete everything it created. Active jobs will be cancelled first.": "La desinstalación desactiva el complemento inmediatamente. Puede conservar los datos del complemento para una futura reinstalación o eliminar todo lo que creó. Los trabajos activos se cancelarán primero.", + "Uninstall Plugin": "Desinstalar complemento", + "Uninstall plugin": "Desinstalar complemento", "Unique Identifier": "Identificador único", "Unknown Plugin": "Complemento desconocido", "Unknown plugin": "Complemento desconocido", + "unknown source": "fuente desconocida", "Unmerging channels for this group in the background. You will be notified once the process is complete.": "Canales que se separan de este grupo en segundo plano. Se le notificará una vez que se complete el proceso.", "Unmerging channels in the background. You will be notified once the process is complete.": "Canales que se separan en segundo plano. Se le notificará una vez que se complete el proceso.", - "Up to date": "A hoy", "Update": "Actualizar", - "Update Password": "Actualizar contraseña", "Update available": "Actualización disponible", "Update check failed": "Error en la comprobación de actualización", "Update failed": "La actualización falló", "Update now": "Actualizar ahora", + "Update Password": "Actualizar contraseña", "Update preferred icon": "Actualizar icono preferido", + "Updates Available": "Actualizaciones disponibles", "Update staged for review": "Actualización preparada para revisión", "Update staging failed": "Error en la preparación de la actualización", "Update the preferred icon for the selected channel(s).": "Actualice el icono preferido para los canales seleccionados.", "Update to :version": "Actualizar a :version", "Update to latest release from GitHub": "Actualizar a la última versión de GitHub", "Update your profile information": "Actualiza la información de tu perfil", - "Updates Available": "Actualizaciones disponibles", "Upload": "Subir", - "Upload Asset": "Cargar recurso", - "Upload Plugin Archive": "Cargar archivo de complementos", - "Upload a plugin zip, tar, or tar.gz archive. The server will stage and validate it through plugin installs.": "Cargue un archivo zip, tar o tar.gz del complemento. El servidor lo preparará y validará mediante la instalación de complementos.", "Upload a plugin zip, tar, or tar.gz archive. The server will stage, validate, and scan it through plugin installs.": "Cargue un archivo zip, tar o tar.gz del complemento. El servidor lo preparará, validará y escaneará mediante la instalación de complementos.", - "Upload now": "Subir ahora", - "Upload the XMLTV file for the EPG. This will be used to import the guide data.": "Cargue el archivo XMLTV para la EPG. Esto se utilizará para importar los datos de la guía.", - "Upload the playlist file. This will be used to import groups and channels.": "Sube el archivo de la lista de reproducción. Esto se utilizará para importar grupos y canales.", + "Upload a plugin zip, tar, or tar.gz archive. The server will stage and validate it through plugin installs.": "Cargue un archivo zip, tar o tar.gz del complemento. El servidor lo preparará y validará mediante la instalación de complementos.", + "Upload Asset": "Cargar recurso", "Uploaded plugin archive staged": "Archivo de complementos cargado en etapa de preparación", + "Upload now": "Subir ahora", + "Upload Plugin Archive": "Cargar archivo de complementos", "Uploads waiting for security scan or admin approval.": "Cargas en espera de análisis de seguridad o aprobación del administrador.", + "Upload the playlist file. This will be used to import groups and channels.": "Sube el archivo de la lista de reproducción. Esto se utilizará para importar grupos y canales.", + "Upload the XMLTV file for the EPG. This will be used to import the guide data.": "Cargue el archivo XMLTV para la EPG. Esto se utilizará para importar los datos de la guía.", + "Up to date": "A hoy", + "URL": "URL", + "URL & Connection": "URL y conexión", + "URL/XML File": "Archivo URL/XML", + "URL or Local file path": "URL o ruta del archivo local", + "URL Override": "Anulación de URL", + "URL Settings": "Configuración de URL", + "URL to Kinopoisk page.": "URL a la página de Kinopoisk.", + "URL to large cover image.": "URL a la imagen de portada grande.", + "URL to movie poster/image.": "URL al póster/imagen de la película.", + "URL Type": "Tipo de URL", + "USA, UK, etc.": "Estados Unidos, Reino Unido, etc.", "Use \"Test\" to auto-detect from provider.": "Utilice \"Prueba\" para detectar automáticamente al proveedor.", + "Used to reference this auth internally.": "Se utiliza para hacer referencia a esta autenticación internamente.", + "Useful for multi-host access (VPN/Tailscale/etc.)": "Útil para acceso a múltiples hosts (VPN/Tailscale/etc.)", "Use HTTPS": "Usar HTTPS", + "Use playlist user agent": "Usar agente de usuario de lista de reproducción", "Use Proxy User Agent for Playlists (M3U8/MPD)": "Utilice el agente de usuario proxy para listas de reproducción (M3U8/MPD)", + "User": "Usuario", + "User agent string to use for fetching the EPG.": "Cadena de agente de usuario que se utilizará para recuperar la EPG.", + "User agent string to use for fetching the playlist.": "Cadena de agente de usuario que se utilizará para recuperar la lista de reproducción.", + "User agent string to use for making requests.": "Cadena de agente de usuario que se utilizará para realizar solicitudes.", "Use Regex": "Usar expresiones regulares", - "Use Short URLs": "Utilice URL cortas", - "Use playlist user agent": "Usar agente de usuario de lista de reproducción", "Use regex for filtering": "Utilice expresiones regulares para filtrar", "Use regex patterns to find and replace. If disabled, will use direct string comparison.": "Utilice patrones de expresiones regulares para buscar y reemplazar. Si está deshabilitado, utilizará la comparación directa de cadenas.", + "Username": "Nombre de usuario", + "username": "nombre de usuario", + "Username for playlist access.": "Nombre de usuario para acceder a la lista de reproducción.", + "Username for WebDAV authentication": "Nombre de usuario para la autenticación WebDAV", + "User Permissions": "Permisos de usuario", + "Users": "Usuarios", + "Use Short URLs": "Utilice URL cortas", "Use the GitHub release asset URL from the published release.": "Utilice la URL del activo de la versión de GitHub de la versión publicada.", "Use the header actions to run this plugin once, then track the job from Live Activity and Run History.": "Utilice las acciones del encabezado para ejecutar este complemento una vez, luego realice un seguimiento del trabajo desde Actividad en vivo y Historial de ejecución.", "Use the last completed run as your baseline. If the candidate count looks right, queue an apply run or tighten the thresholds from the Settings tab.": "Utilice la última ejecución completada como punto de referencia. Si el recuento de candidatos parece correcto, ponga en cola una ejecución de solicitud o ajuste los umbrales desde la pestaña Configuración.", @@ -2305,43 +2438,14 @@ "Use this playlist only": "Usar solo esta lista de reproducción", "Use to enable advanced failover checking and resolution (Resolver URL is required).": "Úselo para habilitar la verificación y resolución avanzadas de conmutación por error (se requiere la URL del solucionador).", "Use with caution": "Usar con precaución", - "Used to reference this auth internally.": "Se utiliza para hacer referencia a esta autenticación internamente.", - "Useful for multi-host access (VPN/Tailscale/etc.)": "Útil para acceso a múltiples hosts (VPN/Tailscale/etc.)", - "User": "Usuario", - "User Permissions": "Permisos de usuario", - "User agent string to use for fetching the EPG.": "Cadena de agente de usuario que se utilizará para recuperar la EPG.", - "User agent string to use for fetching the playlist.": "Cadena de agente de usuario que se utilizará para recuperar la lista de reproducción.", - "User agent string to use for making requests.": "Cadena de agente de usuario que se utilizará para realizar solicitudes.", - "Username": "Nombre de usuario", - "Username for WebDAV authentication": "Nombre de usuario para la autenticación WebDAV", - "Username for playlist access.": "Nombre de usuario para acceder a la lista de reproducción.", - "Users": "Usuarios", - "VARIABLE_NAME": "VARIABLE_NOMBRE", - "VLC/3.0.21 LibVLC/3.0.21": "VLC/3.0.21 LibVLC/3.0.21", - "VOD": "VOD", - "VOD .strm file is being synced now": "El archivo VOD .strm se está sincronizando ahora", - "VOD Channels": "Canales VOD", - "VOD Group": "Grupo VOD", - "VOD Groups": "Grupos VOD", - "VOD Processing": "Procesamiento de VOD", - "VOD Settings": "Configuración de VOD", - "VOD Sorted": "VOD ordenado", - "VOD Sync": "Sincronización de VOD", - "VOD and Series Streaming Profile": "Perfil de VOD y Streaming de Series", - "VOD and Series Transcoding Profile": "Perfil de transcodificación de series y VOD", - "VOD groups to import": "Grupos VOD para importar", - "VOD processing": "Procesamiento de VOD", - "VOD record not found.": "Registro VOD no encontrado.", - "VOD stream file settings": "Configuración del archivo de transmisión VOD", - "VOD/Series poster placeholder": "Marcador de posición de póster de VOD/Series", - "VODs moved to group": "VOD movidos al grupo", + "UTC": "UTC", "Validate": "Validar", "Validate the plugin before you enable it or queue any work. The system should treat this plugin as untrusted until the contract checks pass.": "Valide el complemento antes de habilitarlo o poner en cola cualquier trabajo. El sistema debe tratar este complemento como no confiable hasta que pasen las verificaciones del contrato.", "Validation": "Validación", + "Validation completed": "Validación completada", "Validation Error": "Error de validación", "Validation Errors": "Errores de validación", "Validation Failed": "Validación fallida", - "Validation completed": "Validación completada", "Value": "Valor", "Value for this header.": "Valor para este encabezado.", "Value must be between 3 and 36 characters.": "El valor debe tener entre 3 y 36 caracteres.", @@ -2349,31 +2453,54 @@ "Value to include in the email.": "Valor a incluir en el correo electrónico.", "Value to use for this variable.": "Valor a utilizar para esta variable.", "Variable name": "Nombre de la variable", - "Version :version is available (current: :current).": "Versión :version está disponible (actual: :current).", + "VARIABLE_NAME": "VARIABLE_NOMBRE", + "variable_name": "nombre_variable", "Version, source, and type of this plugin.": "Versión, fuente y tipo de este complemento.", + "Version :version is available (current: :current).": "Versión :version está disponible (actual: :current).", + "veryfast": "muy rápido", "Video Bitrate": "Velocidad de bits de vídeo", - "Video Codec": "Códec de vídeo", - "Video File Extensions": "Extensiones de archivos de vídeo", "Video bitrate": "tasa de bits de vídeo", "Video bitrate in kbps.": "Tasa de bits de vídeo en kbps.", + "Video Codec": "Códec de vídeo", "Video codec": "Códec de vídeo", + "Video File Extensions": "Extensiones de archivos de vídeo", "View": "Vista", + "View/Update Unique Identifier": "Ver/actualizar identificador único", + "View and manage Plex DVR recording subscriptions.": "Vea y administre las suscripciones de grabación de Plex DVR.", "View Docs": "Ver documentos", + "View enhanced details": "Ver detalles mejorados", + "Viewer ID": "ID de espectador", "View Lineups": "Ver alineaciones", + "View log details": "Ver detalles del registro", "View Logo Repository": "Ver repositorio de logotipos", "View Logs": "Ver registros", "View Playlist": "Ver lista de reproducción", "View Queue": "Ver cola", "View Review": "Ver revisión", + "View scrubber logs": "Ver registros de depuración", "View Series": "Ver serie", "View Sync Logs": "Ver registros de sincronización", - "View and manage Plex DVR recording subscriptions.": "Vea y administre las suscripciones de grabación de Plex DVR.", - "View enhanced details": "Ver detalles mejorados", - "View log details": "Ver detalles del registro", - "View scrubber logs": "Ver registros de depuración", "View the EPG channel mapping jobs and progress here.": "Vea los trabajos y el progreso de mapeo de canales de EPG aquí.", - "View/Update Unique Identifier": "Ver/actualizar identificador único", - "Viewer ID": "ID de espectador", + "Virtual channel title": "Título del canal virtual", + "VLC/3.0.21 LibVLC/3.0.21": "VLC/3.0.21 LibVLC/3.0.21", + "VOD": "VOD", + "VOD .strm file is being synced now": "El archivo VOD .strm se está sincronizando ahora", + "VOD/Series poster placeholder": "Marcador de posición de póster de VOD/Series", + "VOD and Series Streaming Profile": "Perfil de VOD y Streaming de Series", + "VOD and Series Transcoding Profile": "Perfil de transcodificación de series y VOD", + "VOD Channels": "Canales VOD", + "VOD Group": "Grupo VOD", + "VOD Groups": "Grupos VOD", + "VOD groups": "Grupos VOD", + "VOD groups to import": "Grupos VOD para importar", + "VOD Processing": "Procesamiento de VOD", + "VOD processing": "Procesamiento de VOD", + "VOD record not found.": "Registro VOD no encontrado.", + "VOD Settings": "Configuración de VOD", + "VODs moved to group": "VOD movidos al grupo", + "VOD Sorted": "VOD ordenado", + "VOD stream file settings": "Configuración del archivo de transmisión VOD", + "VOD Sync": "Sincronización de VOD", "Wait this many seconds after sync completes before triggering the library refresh": "Espere tantos segundos después de que se complete la sincronización antes de activar la actualización de la biblioteca", "Wait until a specific date/time before starting the broadcast.": "Espere hasta una fecha/hora específica antes de comenzar la transmisión.", "Warning": "Advertencia", @@ -2383,6 +2510,7 @@ "WebDAV Password": "Contraseña WebDAV", "WebDAV Username": "Nombre de usuario WebDAV", "WebSocket Connection Test": "Prueba de conexión WebSocket", + "Weekly": "Semanalmente", "Weight": "Peso", "Weight (for shuffle)": "Peso (para reproducción aleatoria)", "What does this plugin do?": "¿Qué hace este complemento?", @@ -2390,13 +2518,10 @@ "What to do next.": "Qué hacer a continuación.", "What to do with plugin data": "Qué hacer con los datos del complemento", "What your plugin can do": "Qué puede hacer tu complemento", - "When enabled and configured, the AI Copilot assistant will appear in the top navigation bar.": "Cuando esté habilitado y configurado, el asistente AI Copilot aparecerá en la barra de navegación superior.", - "When enabled you can access the API documentation using the \"API Docs\" button. When disabled, the docs endpoint will return a 403 (Unauthorized). NOTE: The API will respond regardless of this setting. You do not need to enable it to use the API.": "Cuando está habilitado, puede acceder a la documentación de la API utilizando el botón \"API Docs\". Cuando está deshabilitado, el punto final de documentos devolverá un 403 (no autorizado). NOTA: La API responderá independientemente de esta configuración. No es necesario habilitarlo para utilizar la API.", - "When enabled you can access the queue manager using the \"Queue Manager\" button. When disabled, the queue manager endpoint will return a 403 (Unauthorized).": "Cuando está habilitado, puede acceder al administrador de colas usando el botón \"Administrador de colas\". Cuando está deshabilitado, el punto final del administrador de colas devolverá un 403 (no autorizado).", "When enabled, /logo-repository endpoints are publicly accessible for apps like UHF.": "Cuando están habilitados, los puntos finales /logo-repository son accesibles públicamente para aplicaciones como UHF.", - "When enabled, VOD channels will be included in the M3U output.": "Cuando esté habilitado, los canales VOD se incluirán en la salida M3U.", "When enabled, a backup will be created before syncing.": "Cuando esté habilitado, se creará una copia de seguridad antes de la sincronización.", "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs.": "Cuando está habilitado, se agregará un retraso entre las solicitudes al proveedor durante las sincronizaciones de listas de reproducción y EPG.", + "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs and other stream processing tasks.": "Cuando está habilitado, se agregará un retraso entre las solicitudes al proveedor durante las sincronizaciones de listas de reproducción y EPG y otras tareas de procesamiento de transmisiones.", "When enabled, all channels will be re-evaluated during merge, including existing failover relationships.": "Cuando esté habilitado, todos los canales se reevaluarán durante la combinación, incluidas las relaciones de conmutación por error existentes.", "When enabled, all streams will be proxied through the application. This allows for better compatibility with various clients and enables features such as stream limiting and output format selection.": "Cuando esté habilitado, todas las transmisiones se enviarán mediante proxy a través de la aplicación. Esto permite una mejor compatibilidad con varios clientes y habilita funciones como la limitación de flujo y la selección de formato de salida.", "When enabled, automatic database backups will be created based on the specified schedule.": "Cuando esté habilitado, se crearán copias de seguridad automáticas de la base de datos según el cronograma especificado.", @@ -2413,59 +2538,64 @@ "When enabled, expired cache cleanup will skip deletion. You can still refresh/clear cache manually.": "Cuando está habilitada, la limpieza de caché caducada omitirá la eliminación. Aún puedes actualizar/borrar el caché manualmente.", "When enabled, groups will be included based on regex pattern match instead of prefix.": "Cuando esté habilitado, los grupos se incluirán según la coincidencia del patrón de expresiones regulares en lugar del prefijo.", "When enabled, matched channels will have their preferred icon set to \"EPG\" instead of \"Channel\". This uses the EPG channel icon as the preferred logo source.": "Cuando esté habilitado, los canales coincidentes tendrán su ícono preferido configurado en \"EPG\" en lugar de \"Canal\". Esto utiliza el ícono del canal EPG como fuente de logotipo preferida.", - "When enabled, newly added Live channels will be enabled by default.": "Cuando esté habilitado, los canales en vivo recién agregados se habilitarán de forma predeterminada.", - "When enabled, newly added VOD channels will be enabled by default.": "Cuando esté habilitado, los canales VOD recién agregados se habilitarán de forma predeterminada.", - "When enabled, newly added VOD channels will have merging enabled by default on sync.": "Cuando esté habilitado, los canales VOD recién agregados tendrán la fusión habilitada de forma predeterminada en la sincronización.", "When enabled, newly added channels will be included in automatic stream probing after sync.": "Cuando está habilitado, los canales recién agregados se incluirán en la prueba de transmisión automática después de la sincronización.", "When enabled, newly added channels will have EPG mapping enabled by default on sync.": "Cuando esté habilitado, los canales recién agregados tendrán el mapeo EPG habilitado de forma predeterminada en la sincronización.", "When enabled, newly added channels will have merging enabled by default on sync.": "Cuando esté habilitado, los canales recién agregados tendrán la combinación habilitada de forma predeterminada en la sincronización.", + "When enabled, newly added Live channels will be enabled by default.": "Cuando esté habilitado, los canales en vivo recién agregados se habilitarán de forma predeterminada.", "When enabled, newly added series will be enabled by default on sync.": "Cuando esté habilitado, las series recién agregadas se habilitarán de forma predeterminada en la sincronización.", + "When enabled, newly added VOD channels will be enabled by default.": "Cuando esté habilitado, los canales VOD recién agregados se habilitarán de forma predeterminada.", + "When enabled, newly added VOD channels will have merging enabled by default on sync.": "Cuando esté habilitado, los canales VOD recién agregados tendrán la fusión habilitada de forma predeterminada en la sincronización.", "When enabled, quality indicators (HD, FHD, UHD, 4K, 720p, 1080p, etc.) will be removed during fuzzy matching. Disable this if channels have similar names but different quality levels (e.g., \"Sport HD\" vs \"Sport FHD\").": "Cuando esté habilitado, los indicadores de calidad (HD, FHD, UHD, 4K, 720p, 1080p, etc.) se eliminarán durante la coincidencia aproximada. Desactívelo si los canales tienen nombres similares pero diferentes niveles de calidad (por ejemplo, \"Sport HD\" frente a \"Sport FHD\").", "When enabled, series will be included in the M3U output. It is recommended to enable the \"Fetch metadata\" option when enabled.": "Cuando esté habilitado, la serie se incluirá en la salida M3U. Se recomienda habilitar la opción \"Obtener metadatos\" cuando esté habilitada.", "When enabled, short URLs will be used for the playlist links. Save changes to generate the short URLs (or remove them).": "Cuando esté habilitado, se utilizarán URL cortas para los enlaces de la lista de reproducción. Guarde los cambios para generar las URL cortas (o elimínelas).", - "When enabled, the EPG will be automatically re-synced at the specified interval.": "Cuando está habilitado, la EPG se resincronizará automáticamente en el intervalo especificado.", - "When enabled, the POST request will be sent without any body content. Useful for APIs that only need a POST trigger (e.g., Emby/Jellyfin scheduled tasks).": "Cuando esté habilitado, la solicitud POST se enviará sin ningún contenido corporal. Útil para API que solo necesitan un activador POST (por ejemplo, tareas programadas de Emby/Jellyfin).", "When enabled, the application will output the WAN address of the server m3u-editor is currently running on.": "Cuando está habilitada, la aplicación generará la dirección WAN del servidor en el que se está ejecutando m3u-editor actualmente.", "When enabled, the backup will include your uploaded Playlist and EPG files.": "Cuando esté habilitado, la copia de seguridad incluirá la lista de reproducción y los archivos EPG cargados.", "When enabled, the channel group will be assigned to the dummy EPG as a tag.": "Cuando esté habilitado, el grupo de canales se asignará a la EPG ficticia como una etiqueta .", + "When enabled, the EPG will be automatically re-synced at the specified interval.": "Cuando está habilitado, la EPG se resincronizará automáticamente en el intervalo especificado.", "When enabled, the merged EPG will be automatically regenerated at the specified interval.": "Cuando está habilitado, la EPG fusionada se regenerará automáticamente en el intervalo especificado.", "When enabled, the playlist will be automatically re-synced at the specified interval.": "Cuando esté habilitado, la lista de reproducción se resincronizará automáticamente en el intervalo especificado.", "When enabled, the playlist will be preprocessed before importing. You can then select which groups you would like to import.": "Cuando esté habilitado, la lista de reproducción se procesará previamente antes de importarla. Luego puede seleccionar qué grupos desea importar.", "When enabled, the playlist will fetch items by category.": "Cuando está habilitado, la lista de reproducción buscará elementos por categoría.", "When enabled, the playlist will fetch items by category. This may slow down the import process but can help with larger playlists that time out when fetching all items at once.": "Cuando está habilitado, la lista de reproducción buscará elementos por categoría. Esto puede ralentizar el proceso de importación, pero puede ayudar con listas de reproducción más grandes cuyo tiempo de espera se agota al recuperar todos los elementos a la vez.", + "When enabled, the POST request will be sent without any body content. Useful for APIs that only need a POST trigger (e.g., Emby/Jellyfin scheduled tasks).": "Cuando esté habilitado, la solicitud POST se enviará sin ningún contenido corporal. Útil para API que solo necesitan un activador POST (por ejemplo, tareas programadas de Emby/Jellyfin).", "When enabled, the proxy will attempt to start streams even if the provider\\'s reported connection limit has been reached.": "Cuando está habilitado, el proxy intentará iniciar transmisiones incluso si se ha alcanzado el límite de conexión informado por el proveedor.", - "When enabled, the user will be prompted to set a new password before they can use the application.": "Cuando esté habilitado, se le pedirá al usuario que establezca una nueva contraseña antes de poder usar la aplicación.", "When enabled, there will be an additional navigation item (Logs) to view the log file content.": "Cuando esté habilitado, habrá un elemento de navegación adicional (Registros) para ver el contenido del archivo de registro.", + "When enabled, the selected source channels will be disabled after being attached as failovers. They'll only be reachable via the new smart channel.": "Cuando está habilitado, los canales de origen seleccionados se deshabilitarán después de conectarse como conmutación por error. Solo serán accesibles a través del nuevo canal inteligente.", + "When enabled, the user will be prompted to set a new password before they can use the application.": "Cuando esté habilitado, se le pedirá al usuario que establezca una nueva contraseña antes de poder usar la aplicación.", "When enabled, this network will continuously broadcast content according to the schedule.": "Cuando esté habilitada, esta red transmitirá contenido continuamente según el horario.", + "When enabled, TMDB metadata fetching will automatically create new groups (for VOD) and categories (for Series) based on TMDB genres. When disabled, only existing groups/categories will be used.": "Cuando está habilitada, la recuperación de metadatos de TMDB creará automáticamente nuevos grupos (para VOD) y categorías (para Series) basados ​​en los géneros de TMDB. Cuando está deshabilitado, solo se utilizarán los grupos/categorías existentes.", "When enabled, variables will be sent as a JSON body instead of form data. Only applies to POST requests.": "Cuando está habilitado, las variables se enviarán como un cuerpo JSON en lugar de datos de formulario. Solo se aplica a solicitudes POST.", + "When enabled, VOD channels will be included in the M3U output.": "Cuando esté habilitado, los canales VOD se incluirán en la salida M3U.", "When enabled, worker waits for viewer activity before auto-starting. Manual Start still starts immediately.": "Cuando está habilitado, el trabajador espera la actividad del espectador antes de iniciarse automáticamente. El inicio manual aún comienza inmediatamente.", "When enabled, you can manage your Plex server from this integration.": "Cuando está habilitado, puede administrar su servidor Plex desde esta integración.", + "When enabled and configured, the AI Copilot assistant will appear in the top navigation bar.": "Cuando esté habilitado y configurado, el asistente AI Copilot aparecerá en la barra de navegación superior.", + "When enabled you can access the API documentation using the \"API Docs\" button. When disabled, the docs endpoint will return a 403 (Unauthorized). NOTE: The API will respond regardless of this setting. You do not need to enable it to use the API.": "Cuando está habilitado, puede acceder a la documentación de la API utilizando el botón \"API Docs\". Cuando está deshabilitado, el punto final de documentos devolverá un 403 (no autorizado). NOTA: La API responderá independientemente de esta configuración. No es necesario habilitarlo para utilizar la API.", + "When enabled you can access the queue manager using the \"Queue Manager\" button. When disabled, the queue manager endpoint will return a 403 (Unauthorized).": "Cuando está habilitado, puede acceder al administrador de colas usando el botón \"Administrador de colas\". Cuando está deshabilitado, el punto final del administrador de colas devolverá un 403 (no autorizado).", "Where to fetch metadata for discovered content (requires TMDB API key in Settings)": "Dónde obtener metadatos para el contenido descubierto (requiere clave API TMDB en Configuración)", "Whether or not to use the URL override for logos and images too (default is enabled).": "Si se utiliza o no la anulación de URL para logotipos e imágenes también (el valor predeterminado está habilitado).", "Whether the plugin files are currently present.": "Si los archivos del complemento están presentes actualmente.", "X-Emby-Token": "Token X-Emby", "XMLTV EPG guide URL. Must also be reachable from Plex.": "URL de la guía XMLTV EPG. También debe ser accesible desde Plex.", + "XMLTV EPG guide URL. Must also be reachable from Plex. Adjust if needed.": "URL de la guía XMLTV EPG. También debe ser accesible desde Plex. Ajústelo si es necesario.", "XMLTV File, URL or Path": "Archivo XMLTV, URL o ruta", "XMLTV Format": "Formato XMLTV", "Xtream": "Xtream", "Xtream API": "API Xtream", + "Xtream API connection details.": "Detalles de conexión de la API de Xtream.", "Xtream API Info": "Información de la API de Xtream", + "Xtream API panel message": "Mensaje del panel API de Xtream", "Xtream API Panel Settings": "Configuración del panel API de Xtream", "Xtream API Password": "Contraseña de API de Xtream", "Xtream API URL": "URL de la API de Xtream", "Xtream API Username": "Nombre de usuario de la API de Xtream", - "Xtream API connection details.": "Detalles de conexión de la API de Xtream.", - "Xtream API panel message": "Mensaje del panel API de Xtream", - "YYYY or YYYY-MM-DD": "AAAA o AAAA-MM-DD", - "YYYY-MM-DD": "AAAA-MM-DD", "Year": "Año", "Year (optional)": "Año (opcional)", "Yes": "Sí", "Yes, add to category": "Sí, agregar a la categoría", "Yes, add to group": "Sí, agregar al grupo", + "Yes, delete series": "Si, eliminar serie", "Yes, delete VOD": "Sí, eliminar VOD", "Yes, delete VODs": "Sí, eliminar VOD", - "Yes, delete series": "Si, eliminar serie", "Yes, disable now": "Sí, desactivar ahora", "Yes, duplicate now": "Sí, duplicar ahora", "Yes, enable now": "Sí, habilitar ahora", @@ -2473,70 +2603,30 @@ "Yes, generate cache now": "Sí, generar caché ahora", "Yes, process now": "Sí, procesar ahora", "Yes, refresh now": "Sí, actualiza ahora", + "Yes, rescore now": "Sí, vuelve a puntuar ahora", "Yes, reset now": "Sí, restablecer ahora", "Yes, sync now": "Sí, sincroniza ahora", "You are a helpful AI assistant integrated into m3u editor. You help users manage playlists, EPG data, streams, channels, and other features. Be concise and accurate.": "Eres un útil asistente de IA integrado en el editor m3u. Ayuda a los usuarios a administrar listas de reproducción, datos EPG, transmisiones, canales y otras funciones. Sea conciso y preciso.", "You are using the latest version": "Estás usando la última versión.", "You can either upload an XMLTV file or provide a URL to an XMLTV file. File should conform to the XMLTV format.": "Puede cargar un archivo XMLTV o proporcionar una URL a un archivo XMLTV. El archivo debe ajustarse al formato XMLTV.", - "You can now assign Playlists or EPGs.": "Ahora puedes asignar listas de reproducción o EPG.", - "You can now assign Playlists to this Auth.": "Ahora puede asignar listas de reproducción a esta autenticación.", "You can now assign channels to this group from the Channels section.": "Ahora puede asignar canales a este grupo desde la sección Canales.", "You can now assign channels to this group from the Channels tab.": "Ahora puede asignar canales a este grupo desde la pestaña Canales.", + "You can now assign Playlists or EPGs.": "Ahora puedes asignar listas de reproducción o EPG.", + "You can now assign Playlists to this Auth.": "Ahora puede asignar listas de reproducción a esta autenticación.", + "your-api-key-here": "tu-clave-api-aquí", + "Your API key for the selected provider. Stored in the database.": "Su clave API para el proveedor seleccionado. Almacenado en la base de datos.", + "Your m3u proxy API key": "Su clave API de proxy m3u", + "Your preferences have been saved successfully.": "Tus preferencias se han guardado correctamente.", + "Your selection includes one or more existing smart channels — pick raw provider channels instead, or remove the smart-channel flag first.": "Su selección incluye uno o más canales inteligentes existentes; elija canales de proveedores sin procesar o elimine primero la marca de canal inteligente.", + "Your TMDB API key (v3 auth). You can get one for free at themoviedb.org.": "Su clave API de TMDB (autenticación v3). Puede obtener uno gratis en themoviedb.org.", + "YouTube Trailer": "Tráiler de YouTube", + "YouTube Trailer ID": "ID del tráiler de YouTube", + "YouTube trailer URL or ID.": "URL o ID del avance de YouTube.", "You will be notified once complete.": "Se le notificará una vez completado.", "You will be notified when complete.": "Se le notificará cuando esté completo.", "You will be notified when the process is complete.": "Se le notificará cuando se complete el proceso.", "You will need to save and refresh the page after changing settings for them to take effect.": "Deberá guardar y actualizar la página después de cambiar la configuración para que surta efecto.", - "YouTube Trailer": "Tráiler de YouTube", - "YouTube Trailer ID": "ID del tráiler de YouTube", - "YouTube trailer URL or ID.": "URL o ID del avance de YouTube.", - "Your API key for the selected provider. Stored in the database.": "Su clave API para el proveedor seleccionado. Almacenado en la base de datos.", - "Your TMDB API key (v3 auth). You can get one for free at themoviedb.org.": "Su clave API de TMDB (autenticación v3). Puede obtener uno gratis en themoviedb.org.", - "Your m3u proxy API key": "Su clave API de proxy m3u", - "Your preferences have been saved successfully.": "Tus preferencias se han guardado correctamente.", - "aac": "acac", - "and how to use it": "y como usarlo", - "e.g. 2024": "p.ej. 2024", - "e.g. 403, 404, 502, 503": "p.ej. 403, 404, 502, 503", - "e.g. Authorization": "p.ej. Autorización", - "e.g. Bearer abc123": "p.ej. Portador abc123", - "e.g. Help me find a channel": "p.ej. Ayúdame a encontrar un canal.", - "e.g. Help me find a channel by name.": "p.ej. Ayúdame a encontrar un canal por nombre.", - "e.g. Remove country prefix": "p.ej. Quitar prefijo de país", - "e.g. a1b2c3d4...": "p.ej. a1b23d4...", - "e.g. aac": "p.ej. acac", - "e.g. d/m/Y H:i:s": "p.ej. d/m/A H:i:s", - "e.g. libx264, h264_nvenc": "p.ej. libx264, h264_nvenc", - "e.g. veryfast, fast, medium": "p.ej. muy rápido, rápido, medio", - "e.g., 100": "por ejemplo, 100", - "e.g., Movie Classics, 80s TV, Kids Zone": "por ejemplo, películas clásicas, televisión de los 80, zona infantil", - "e.g., Movies, TV Shows": "por ejemplo, películas, programas de televisión", - "e.g., My Networks": "por ejemplo, Mis redes", - "en": "en", - "group-title": "título de grupo", - "http://192.168.0.123:36400": "http://192.168.0.123:36400", - "https://example.com/backdrop.jpg": "https://ejemplo.com/backdrop.jpg", - "https://example.com/cover.jpg": "https://ejemplo.com/cover.jpg", - "https://example.com/logo.png": "https://ejemplo.com/logo.png", - "https://example.com/poster.jpg": "https://ejemplo.com/poster.jpg", - "https://www.kinopoisk.ru/film/123456/": "https://www.kinopoisk.ru/film/123456/", - "https://www.youtube.com/watch?v=abc123": "https://www.youtube.com/watch?v=abc123", - "libx264": "libx264", - "m3u editor proxy url.": "URL del proxy del editor m3u.", - "mp4": "mpch", - "of :n total": "de :n total", - "recorded progress.": "avances registrados.", - "shown": "mostrado", - "socks5://user:pass@host:port or http://user:pass@host:port": "socks5://user:pass@host:port or http://user:pass@host:port", - "timeshift": "cambio de tiempo", - "tvc-guide-stationid": "tvc-guide-stationid", - "tvg-chno": "tvg-chno", - "tvg-id": "id-tvg", - "tvg-logo": "logotipo-tvg", - "tvg-name": "nombre-tvg", - "tvg-shift": "cambio de tvg", - "unknown source": "fuente desconocida", - "username": "nombre de usuario", - "variable_name": "nombre_variable", - "veryfast": "muy rápido", - "your-api-key-here": "tu-clave-api-aquí" + "yt-dlp format selector followed by optional flags. Example: bestvideo+bestaudio/best --no-playlist": "Selector de formato yt-dlp seguido de indicadores opcionales. Ejemplo: mejor video+mejor audio/mejor --no-playlist", + "YYYY-MM-DD": "AAAA-MM-DD", + "YYYY or YYYY-MM-DD": "AAAA o AAAA-MM-DD" } diff --git a/lang/fr.json b/lang/fr.json index 3d530fd76..0dd6a1174 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -3,9 +3,9 @@ "# Netscape HTTP Cookie File\\n.youtube.com\\tTRUE\\t/\\tTRUE\\t0\\tCOOKIE_NAME\\tCOOKIE_VALUE": "# Netscape HTTP Cookie File\\n.youtube.com\\tTRUE\\t/\\tTRUE\\t0\\tCOOKIE_NAME\\tCOOKIE_VALUE", "-": "-", ".strm files are being synced for current category series. Only enabled series will be synced.": "Les fichiers .strm sont en cours de synchronisation pour les séries de catégories actuelles. Seules les séries activées seront synchronisées.", - ".strm files are being synced for selected VOD channels": "Les fichiers .strm sont en cours de synchronisation pour les chaînes VOD sélectionnées", ".strm files are being synced for selected category series. Only enabled series will be synced.": "Les fichiers .strm sont en cours de synchronisation pour les séries de catégories sélectionnées. Seules les séries activées seront synchronisées.", ".strm files are being synced for selected series": "Les fichiers .strm sont en cours de synchronisation pour les séries sélectionnées", + ".strm files are being synced for selected VOD channels": "Les fichiers .strm sont en cours de synchronisation pour les chaînes VOD sélectionnées", ".strm files are being synced for the group channels. Only enabled channels will be synced.": "Les fichiers .strm sont en cours de synchronisation pour les canaux de groupe. Seules les chaînes activées seront synchronisées.", ".strm files are being synced for the selected group channels. Only enabled channels will be synced.": "Les fichiers .strm sont en cours de synchronisation pour les canaux de groupe sélectionnés. Seules les chaînes activées seront synchronisées.", "/Series": "/Série", @@ -13,10 +13,9 @@ "0": "0", "0 */6 * * *": "0 */6 * * *", "0 0 * * *": "0 0 * * *", - "01:30:00": "01:30:00", "1": "1", "1-1000, higher = more preferred": "1-1000, plus élevé = plus préféré", - "10 based rating of the VOD content.": "Classement basé sur 10 du contenu VOD.", + "01:30:00": "01:30:00", "2": "2", "3": "3", "4": "4", @@ -27,30 +26,14 @@ "8.7": "8.7", "9": "9", "10": "10", + "10 based rating of the VOD content.": "Classement basé sur 10 du contenu VOD.", + ":count smart channel(s) were skipped — smart channels can't be used as failovers themselves.": ":count canaux intelligents ont été ignorés – les canaux intelligents ne peuvent pas être utilisés eux-mêmes comme basculements.", ":name installed": ":name installé", ":name updated": ":name mis à jour", - "A SHA-256 checksum is required to stage this update.": "Une somme de contrôle SHA-256 est requise pour effectuer cette mise à jour.", - "A channel dedicated to classic movies from the golden age of cinema": "Une chaîne dédiée aux films classiques de l'âge d'or du cinéma", - "A descriptive name for this post process.": "Un nom descriptif pour ce post-processus.", - "A descriptive name for this stream file setting profile": "Un nom descriptif pour ce profil de paramètres de fichier de flux", - "A descriptive name for this transcoding profile (e.g., \"720p Standard\", \"1080p High Quality\")": "Un nom descriptif pour ce profil de transcodage (par exemple, \"720p Standard\", \"1080p High Quality\")", - "A new version is available": "Une nouvelle version est disponible", - "A recommendation based on the current plugin state.": "Une recommandation basée sur l'état actuel du plugin.", - "A test email will be sent to this address using the entered SMTP settings.": "Un e-mail de test sera envoyé à cette adresse en utilisant les paramètres SMTP saisis.", - "AI Copilot": "Copilote IA", - "AI Provider": "Fournisseur d'IA", - "API": "API", - "API Docs": "Documentation sur l'API", - "API Key": "Clé API", - "API Key Required": "Clé API requise", - "API Key/Token": "Clé/jeton API", - "API Settings": "Paramètres de l'API", - "API Token Created": "Jeton API créé", - "API Tokens": "Jetons API", - "API docs": "Documents sur l'API", - "API key": "Clé API", + "aac": "aaa", "Accepted Values": "Valeurs acceptées", "Access your media server content directly within M3U Editor by integrating with popular media servers like Emby and Jellyfin, or directly via mount points. An associated playlist will be automatically created for each integration to manage content like you would for any other playlist.": "Accédez au contenu de votre serveur multimédia directement dans M3U Editor en l'intégrant à des serveurs multimédias populaires tels que Emby et Jellyfin, ou directement via des points de montage. Une playlist associée sera automatiquement créée pour chaque intégration afin de gérer le contenu comme vous le feriez pour n'importe quelle autre playlist.", + "A channel dedicated to classic movies from the golden age of cinema": "Une chaîne dédiée aux films classiques de l'âge d'or du cinéma", "Action, Drama, Comedy": "Action, Drame, Comédie", "Actions": "Actes", "Active Sessions": "Séances actives", @@ -59,40 +42,46 @@ "Activity stream": "Flux d'activité", "Actor 1, Actor 2, Actor 3": "Acteur 1, Acteur 2, Acteur 3", "Actors": "Acteurs", - "Add Episodes": "Ajouter des épisodes", - "Add Lineup to Account": "Ajouter une programmation au compte", - "Add Media Server": "Ajouter un serveur multimédia", - "Add Movies": "Ajouter des films", - "Add Quick Action": "Ajouter une action rapide", - "Add Series": "Ajouter une série", + "A custom channel was created with the selected sources attached as failovers, ranked by quality.": "Un canal personnalisé a été créé avec les sources sélectionnées attachées en tant que basculements, classées par qualité.", "Add a delay between requests to providers to avoid rate limiting.": "Ajoutez un délai entre les demandes adressées aux fournisseurs pour éviter toute limitation de débit.", "Add and manage authentication.": "Ajoutez et gérez l'authentification.", "Add any custom headers to include when streaming a channel/episode.": "Ajoutez tous les en-têtes personnalisés à inclure lors de la diffusion d’une chaîne/d’un épisode.", "Add as failover": "Ajouter comme basculement", + "Add at least one failover channel below — the smart channel takes its stream URL from the highest-ranked failover at stream time.": "Ajoutez au moins un canal de basculement ci-dessous : le canal intelligent prend son URL de flux à partir du basculement le mieux classé au moment du flux.", "Add auto-add rule": "Ajouter une règle d'ajout automatique", "Add available subtitle languages for this content.": "Ajoutez les langues de sous-titres disponibles pour ce contenu.", "Add backdrop/poster image URLs for this content.": "Ajoutez des URL d’images de toile de fond/d’affiche pour ce contenu.", "Add conditions that must be met for this post process to execute. All conditions must be true for execution.": "Ajoutez les conditions qui doivent être remplies pour que ce post-processus s'exécute. Toutes les conditions doivent être vraies pour l'exécution.", + "Added Channels": "Chaînes ajoutées", + "Added Groups": "Groupes ajoutés", + "Added to category": "Ajouté à la catégorie", + "Added to group": "Ajouté au groupe", + "Added to the title folder name": "Ajouté au nom du dossier titre", + "Add Episodes": "Ajouter des épisodes", "Add extension...": "Ajouter une extension...", "Add failovers now": "Ajouter des basculements maintenant", + "Additional Failover Playlists (optional)": "Listes de lecture de basculement supplémentaires (facultatif)", + "Additional Profiles": "Profils supplémentaires", "Add keyword...": "Ajouter un mot clé...", + "Add Lineup to Account": "Ajouter une programmation au compte", + "Add Media Server": "Ajouter un serveur multimédia", + "Add Movies": "Ajouter des films", "Add multiple EPG sources and map them to your playlists. Multiple EPG sources can be mapped to the same playlist, and the guide data will be merged together.": "Ajoutez plusieurs sources EPG et mappez-les à vos listes de lecture. Plusieurs sources EPG peuvent être mappées sur la même liste de lecture et les données du guide seront fusionnées.", "Add new API Token": "Ajouter un nouveau jeton API", "Add or create additional authentication methods for this playlist.": "Ajoutez ou créez des méthodes d'authentification supplémentaires pour cette playlist.", "Add pattern (e.g. \"DE • \" or \"EN |\")": "Ajoutez un motif (par exemple \"DE • \" ou \"EN |\")", + "Add Quick Action": "Ajouter une action rapide", + "Adds an uninstall() method for custom cleanup logic beyond what the manifest declares.": "Ajoute une méthode uninstall() pour une logique de nettoyage personnalisée au-delà de ce que déclare le manifeste.", + "Add Series": "Ajouter une série", "Add the selected channel(s) to the chosen channel as failover sources.": "Ajoutez le(s) canal(s) sélectionné(s) au canal choisi en tant que sources de basculement.", "Add to category": "Ajouter à la catégorie", "Add to custom category": "Ajouter à la catégorie personnalisée", "Add to custom group": "Ajouter au groupe personnalisé", "Add to group": "Ajouter au groupe", - "Added Channels": "Chaînes ajoutées", - "Added Groups": "Groupes ajoutés", - "Added to category": "Ajouté à la catégorie", - "Added to group": "Ajouté au groupe", - "Added to the title folder name": "Ajouté au nom du dossier titre", - "Additional Failover Playlists (optional)": "Listes de lecture de basculement supplémentaires (facultatif)", - "Additional Profiles": "Profils supplémentaires", - "Adds an uninstall() method for custom cleanup logic beyond what the manifest declares.": "Ajoute une méthode uninstall() pour une logique de nettoyage personnalisée au-delà de ce que déclare le manifeste.", + "A descriptive name for this post process.": "Un nom descriptif pour ce post-processus.", + "A descriptive name for this profile (e.g., \"720p Standard\", \"Twitch Stream\")": "Un nom descriptif pour ce profil (par exemple, \"720p Standard\", \"Twitch Stream\")", + "A descriptive name for this stream file setting profile": "Un nom descriptif pour ce profil de paramètres de fichier de flux", + "A descriptive name for this transcoding profile (e.g., \"720p Standard\", \"1080p High Quality\")": "Un nom descriptif pour ce profil de transcodage (par exemple, \"720p Standard\", \"1080p High Quality\")", "Admin": "Administrateur", "Admin viewers cannot be deleted": "Les spectateurs administrateurs ne peuvent pas être supprimés", "Advanced": "Avancé", @@ -100,99 +89,117 @@ "Advanced Settings": "Paramètres avancés", "Age Rating": "Classe d'âge", "Age rating or classification.": "Classement ou classification par âge.", + "AI Copilot": "Copilote IA", + "AI Provider": "Fournisseur d'IA", "All": "Tous", "All Activity": "Toutes les activités", "All Attributes": "Tous les attributs", "All EPGs": "Tous les EPG", "All Live Channels": "Toutes les chaînes en direct", - "All Playlists": "Toutes les listes de lecture", - "All Runs": "Toutes les courses", - "All Series": "Toutes les séries", - "All VOD Channels": "Toutes les chaînes VOD", - "All streams": "Tous les flux", "Allow access to API docs": "Autoriser l'accès aux documents de l'API", + "Allowed domains": "Domaines autorisés", + "Allowed live groups": "Groupes en direct autorisés", + "Allowed Playlist Domains": "Domaines de playlist autorisés", + "Allowed series categories": "Catégories de séries autorisées", + "Allowed VOD groups": "Groupes VOD autorisés", "Allow mapping EPG to selected channels when running EPG mapping jobs.": "Autoriser le mappage de l'EPG sur les canaux sélectionnés lors de l'exécution de tâches de mappage EPG.", "Allow mapping EPG to this channel when running EPG mapping jobs.": "Autoriser le mappage de l'EPG sur ce canal lors de l'exécution de tâches de mappage EPG.", "Allow merging for selected channels when running \"Merge Same ID\" jobs.": "Autoriser la fusion des canaux sélectionnés lors de l'exécution des tâches « Fusionner le même ID ».", "Allow probing this channel when running playlist channel probe jobs.": "Autoriser l'analyse de cette chaîne lors de l'exécution de tâches d'analyse de chaîne de liste de lecture.", "Allow queue manager access": "Autoriser l'accès au gestionnaire de files d'attente", "Allow this channel to be merged during \"Merge Same ID\" jobs.": "Autorisez la fusion de ce canal lors des tâches « Fusionner le même ID ».", - "Allowed Playlist Domains": "Domaines de playlist autorisés", - "Allowed domains": "Domaines autorisés", + "All Playlists": "Toutes les listes de lecture", + "All Runs": "Toutes les courses", + "All Series": "Toutes les séries", + "All streams": "Tous les flux", + "All VOD Channels": "Toutes les chaînes VOD", "Also check VOD channel links in addition to live channels.": "Vérifiez également les liens des chaînes VOD en plus des chaînes en direct.", - "Alternative URLs": "URL alternatives", - "Alternative Xtream API URLs. If the primary URL fails during a sync, these will be tried in order (same credentials are used for all URLs).": "URL alternatives de l'API Xtream. Si l'URL principale échoue lors d'une synchronisation, celles-ci seront essayées dans l'ordre (les mêmes informations d'identification sont utilisées pour toutes les URL).", "Alternative password if not specified in URL. Not commonly used.": "Mot de passe alternatif s'il n'est pas spécifié dans l'URL. Pas couramment utilisé.", "Alternative port if not specified in URL. Not commonly used.": "Port alternatif s’il n’est pas spécifié dans l’URL. Pas couramment utilisé.", "Alternative release date field.": "Champ de date de sortie alternative.", + "Alternative URLs": "URL alternatives", + "Alternative Xtream API URLs. If the primary URL fails during a sync, these will be tried in order (same credentials are used for all URLs).": "URL alternatives de l'API Xtream. Si l'URL principale échoue lors d'une synchronisation, celles-ci seront essayées dans l'ordre (les mêmes informations d'identification sont utilisées pour toutes les URL).", "An administrator still needs to trust this plugin. Review the declared permissions, owned schema, and file integrity before enabling it.": "Un administrateur doit toujours faire confiance à ce plugin. Vérifiez les autorisations déclarées, le schéma détenu et l'intégrité des fichiers avant de l'activer.", + "and how to use it": "et comment l'utiliser", + "A new version is available": "Une nouvelle version est disponible", + "API": "API", + "API Docs": "Documentation sur l'API", + "API docs": "Documents sur l'API", + "API Key": "Clé API", + "API key": "Clé API", + "API Key/Token": "Clé/jeton API", + "API Key Required": "Clé API requise", + "API Settings": "Paramètres de l'API", + "API Token Created": "Jeton API créé", + "API Tokens": "Jetons API", "Application Timezone": "Fuseau horaire de l'application", - "Apply TMDB ID to": "Appliquer l'ID TMDB à", - "Apply URL": "Appliquer l'URL", - "Apply a single logo URL to all selected networks. Leave empty to remove logos.": "Appliquez une seule URL de logo à tous les réseaux sélectionnés. Laissez vide pour supprimer les logos.", - "Apply a single logo override URL to all selected VOD channels. Leave empty to remove overrides.": "Appliquez une seule URL de remplacement de logo à toutes les chaînes VOD sélectionnées. Laissez vide pour supprimer les remplacements.", "Apply a single logo override URL to all selected channels. Leave empty to remove overrides.": "Appliquez une seule URL de remplacement de logo à toutes les chaînes sélectionnées. Laissez vide pour supprimer les remplacements.", + "Apply a single logo override URL to all selected VOD channels. Leave empty to remove overrides.": "Appliquez une seule URL de remplacement de logo à toutes les chaînes VOD sélectionnées. Laissez vide pour supprimer les remplacements.", + "Apply a single logo URL to all selected networks. Leave empty to remove logos.": "Appliquez une seule URL de logo à tous les réseaux sélectionnés. Laissez vide pour supprimer les logos.", "Apply a single poster URL to all selected series. Leave empty to remove custom posters.": "Appliquez une seule URL d’affiche à toutes les séries sélectionnées. Laissez vide pour supprimer les affiches personnalisées.", "Apply find and replace to all EPGs? If disabled, it will only apply to the selected EPG.": "Appliquer la recherche et le remplacement à tous les EPG ? S'il est désactivé, il s'appliquera uniquement à l'EPG sélectionné.", - "Apply find and replace to all Series? If disabled, it will only apply to the selected Series.": "Appliquer la recherche et le remplacement à toutes les séries ? S'il est désactivé, il s'appliquera uniquement à la série sélectionnée.", "Apply find and replace to all playlists? If disabled, it will only apply to the selected playlist.": "Appliquer la recherche et le remplacement à toutes les playlists ? S'il est désactivé, il ne s'appliquera qu'à la liste de lecture sélectionnée.", + "Apply find and replace to all Series? If disabled, it will only apply to the selected Series.": "Appliquer la recherche et le remplacement à toutes les séries ? S'il est désactivé, il s'appliquera uniquement à la série sélectionnée.", "Apply reset to all EPGs? If disabled, it will only apply to the selected EPG.": "Appliquer la réinitialisation à tous les EPG ? S'il est désactivé, il s'appliquera uniquement à l'EPG sélectionné.", "Apply reset to all playlists? If disabled, it will only apply to the selected playlist.": "Appliquer la réinitialisation à toutes les playlists ? S'il est désactivé, il ne s'appliquera qu'à la liste de lecture sélectionnée.", + "Apply TMDB ID to": "Appliquer l'ID TMDB à", + "Apply URL": "Appliquer l'URL", "Archive Path": "Chemin d'archive", - "Are you sure you want to clear all selected VOD groups?": "Êtes-vous sûr de vouloir effacer tous les groupes VOD sélectionnés ?", + "A recommendation based on the current plugin state.": "Une recommandation basée sur l'état actuel du plugin.", "Are you sure you want to clear all selected categories?": "Êtes-vous sûr de vouloir effacer toutes les catégories sélectionnées ?", "Are you sure you want to clear all selected live groups?": "Êtes-vous sûr de vouloir effacer tous les groupes en direct sélectionnés ?", + "Are you sure you want to clear all selected series categories?": "Êtes-vous sûr de vouloir effacer toutes les catégories de séries sélectionnées ?", + "Are you sure you want to clear all selected VOD groups?": "Êtes-vous sûr de vouloir effacer tous les groupes VOD sélectionnés ?", "Are you sure you want to delete the selected VOD channels? This action cannot be undone.": "Êtes-vous sûr de vouloir supprimer les chaînes VOD sélectionnées ? Cette action ne peut pas être annulée.", - "Are you sure you want to delete this VOD channel? This action cannot be undone.": "Êtes-vous sûr de vouloir supprimer cette chaîne VOD ? Cette action ne peut pas être annulée.", "Are you sure you want to delete this series? This will delete all episodes and seasons for this series. This action cannot be undone.": "Etes-vous sûr de vouloir supprimer cette série ? Cela supprimera tous les épisodes et saisons de cette série. Cette action ne peut pas être annulée.", "Are you sure you want to delete this token? This action cannot be undone.": "Êtes-vous sûr de vouloir supprimer ce jeton ? Cette action ne peut pas être annulée.", + "Are you sure you want to delete this VOD channel? This action cannot be undone.": "Êtes-vous sûr de vouloir supprimer cette chaîne VOD ? Cette action ne peut pas être annulée.", "Are you sure you want to manually trigger this EPG mapping to run again? This will not modify the \"Recurring\" setting.": "Êtes-vous sûr de vouloir déclencher manuellement la réexécution de ce mappage EPG ? Cela ne modifiera pas le paramètre « Récurrent ».", "Are you sure you want to manually trigger this scrubber to run? This will not modify the \"Recurring\" setting.": "Êtes-vous sûr de vouloir déclencher manuellement l'exécution de ce nettoyeur ? Cela ne modifiera pas le paramètre « Récurrent ».", "Artifact": "Artefact", + "A SHA-256 checksum is required to stage this update.": "Une somme de contrôle SHA-256 est requise pour effectuer cette mise à jour.", "Asset": "Actif", "Asset deleted": "Élément supprimé", "Asset file": "Fichier d'actif", + "Assets": "Actifs", "Asset scan complete": "Analyse des actifs terminée", "Asset uploaded": "Élément téléchargé", - "Assets": "Actifs", "Assign Auth to Playlist": "Attribuer l'authentification à la liste de lecture", + "Assigned Auths": "Auteurs attribués", + "Assigned To": "Attribué à", + "Assigned to Playlist": "Attribué à la liste de lecture", "Assign priority weights to specific groups. Higher weight = more preferred as master. Leave empty for default behavior.": "Attribuez des pondérations de priorité à des groupes spécifiques. Poids plus élevé = plus préféré en tant que maître. Laissez vide pour le comportement par défaut.", "Assign processing to item": "Attribuer le traitement à l'article", "Assign this auth to a specific playlist. Each auth can only be assigned to one playlist at a time.": "Attribuez cette authentification à une playlist spécifique. Chaque authentification ne peut être attribuée qu'à une seule playlist à la fois.", "Assign this network to a playlist for M3U/EPG output. Create one if none exist.": "Attribuez ce réseau à une liste de lecture pour la sortie M3U/EPG. Créez-en un s’il n’en existe pas.", "Assign to a network playlist for M3U/EPG output.": "Attribuez-le à une liste de lecture réseau pour la sortie M3U/EPG.", - "Assigned Auths": "Auteurs attribués", - "Assigned To": "Attribué à", - "Assigned to Playlist": "Attribué à la liste de lecture", + "A test email will be sent to this address using the entered SMTP settings.": "Un e-mail de test sera envoyé à cette adresse en utilisant les paramètres SMTP saisis.", "Audio Bitrate": "Débit audio", - "Audio Codec": "Codec audio", "Audio bitrate": "Débit audio", "Audio channels": "Canaux audio", + "Audio Codec": "Codec audio", "Audio codec": "Codec audio", "Audio language": "Langue audio", "Audio level (in dB) below which audio is considered silent. Default: -50 dB.": "Niveau audio (en dB) en dessous duquel l'audio est considéré comme silencieux. Par défaut : -50 dB.", "Auth": "Authentification", "Auth (optional)": "Authentification (facultatif)", - "Auth Name": "Nom d'authentification", - "Auth for My Playlist": "Authentification pour ma liste de lecture", "Authentication Option": "Option d'authentification", - "Auto Enable": "Activation automatique", - "Auto Enable New Channels": "Activer automatiquement les nouvelles chaînes", - "Auto Sync": "Synchronisation automatique", - "Auto channel number increment": "Incrémentation automatique du numéro de chaîne", - "Auto enable newly added category series": "Activer automatiquement les séries de catégories nouvellement ajoutées", - "Auto enable newly added group channels": "Activer automatiquement les canaux de groupe nouvellement ajoutés", - "Auto scan on EPG cache: disabled": "Analyse automatique sur le cache EPG : désactivée", - "Auto scan on EPG cache: enabled": "Analyse automatique sur le cache EPG : activée", - "Auto sync and scheduling options": "Options de synchronisation et de planification automatiques", - "Auto trigger": "Déclenchement automatique", + "Auth for My Playlist": "Authentification pour ma liste de lecture", + "Auth Name": "Nom d'authentification", "Auto-Add to Custom Playlist": "Ajout automatique à la liste personnalisée", + "Auto-create groups/categories from TMDB genres": "Créez automatiquement des groupes/catégories à partir des genres TMDB", "Auto-Enable Settings": "Paramètres d'activation automatique", "Auto-Fetch Metadata": "Récupération automatique des métadonnées", - "Auto-Merge Processing": "Traitement de fusion automatique", "Auto-lookup on metadata fetch": "Recherche automatique lors de la récupération des métadonnées", + "Auto-Merge Processing": "Traitement de fusion automatique", "Auto-regenerate Schedule": "Calendrier de régénération automatique", + "Auto-streams the highest-ranked failover. URL field is locked while on. Custom channels only.": "Diffuse automatiquement le basculement le mieux classé. Le champ URL est verrouillé lorsqu'il est activé. Chaînes personnalisées uniquement.", "Auto/Default": "Automatique/Par défaut", + "Auto channel number increment": "Incrémentation automatique du numéro de chaîne", + "Auto Enable": "Activation automatique", + "Auto Enable New Channels": "Activer automatiquement les nouvelles chaînes", + "Auto enable newly added category series": "Activer automatiquement les séries de catégories nouvellement ajoutées", + "Auto enable newly added group channels": "Activer automatiquement les canaux de groupe nouvellement ajoutés", "Automated backups": "Sauvegardes automatisées", "Automatically assign sort number based on playlist order": "Attribuer automatiquement un numéro de tri en fonction de l'ordre de la liste de lecture", "Automatically disable channels whose stream URL is unreachable.": "Désactiver automatiquement les chaînes dont l'URL de flux est inaccessible.", @@ -204,30 +211,35 @@ "Automatically regenerate when schedule is about to expire.": "Régénérez automatiquement lorsque la planification est sur le point d'expirer.", "Automatically run this scrubber after each playlist sync.": "Exécutez automatiquement ce nettoyeur après chaque synchronisation de playlist.", "Automatically set when selecting a category.": "Défini automatiquement lors de la sélection d'une catégorie.", - "Automatically sync EPG": "Synchroniser automatiquement l'EPG", "Automatically sync content on schedule": "Synchronisez automatiquement le contenu selon le calendrier", + "Automatically sync EPG": "Synchroniser automatiquement l'EPG", "Automatically sync merged EPG": "Synchroniser automatiquement l'EPG fusionné", "Automatically sync playlist": "Synchroniser automatiquement la liste de lecture", "Automatically trigger a library scan on your media server after .strm files are synced": "Déclenchez automatiquement une analyse de bibliothèque sur votre serveur multimédia après la synchronisation des fichiers .strm", "Automatically trigger failover when a stream\\'s audio goes silent. Disabled by default.": "Déclenchez automatiquement le basculement lorsque l'audio d'un flux devient silencieux. Désactivé par défaut.", "Automation": "Automation", + "Auto scan on EPG cache: disabled": "Analyse automatique sur le cache EPG : désactivée", + "Auto scan on EPG cache: enabled": "Analyse automatique sur le cache EPG : activée", + "Auto Sync": "Synchronisation automatique", + "Auto sync and scheduling options": "Options de synchronisation et de planification automatiques", + "Auto trigger": "Déclenchement automatique", "Availability": "Disponibilité", "Available Actions": "Actions disponibles", "Available Streams": "Flux disponibles", "Avatar": "Avatar", + "Backdrop Images": "Images de toile de fond", + "Backend": "Back-end", "Back to Playlist": "Retour à la liste de lecture", "Back to Plugin": "Retour au plugin", "Back to Scrubber": "Retour à Épurateur", "Back to Scrubbers": "Retour à Épurateurs", "Back to Series": "Retour à la série", + "Back to series": "Retour à la série", "Back to Sync Statuses": "Retour aux statuts de synchronisation", "Back to VOD": "Retour à la VOD", - "Back to series": "Retour à la série", - "Backdrop Images": "Images de toile de fond", "Backup & Restore": "Sauvegarde et restauration", "Backup Account": "Compte de sauvegarde", "Backup Before Sync": "Sauvegarde avant la synchronisation", - "Backup Schedule": "Planification de sauvegarde", "Backup file": "Fichier de sauvegarde", "Backup file (.ZIP files only)": "Fichier de sauvegarde (fichiers .ZIP uniquement)", "Backup file has been uploaded, you can now restore it if needed.": "Le fichier de sauvegarde a été téléchargé, vous pouvez maintenant le restaurer si nécessaire.", @@ -237,13 +249,14 @@ "Backup is being restored": "La sauvegarde est en cours de restauration", "Backup is being restored in the background. Depending on the size of the backup, this could take a while.": "La sauvegarde est en cours de restauration en arrière-plan. Selon la taille de la sauvegarde, cela peut prendre un certain temps.", "Backups": "Sauvegardes", + "Backup Schedule": "Planification de sauvegarde", "Bare scaffold": "Échafaudage nu", "Base URL": "URL de base", "Bit depth": "Profondeur de bits", "Bitrate": "Débit", - "Block Plugin": "Bloquer le plugin", "Blocked": "Bloqué", "Blocking disables the plugin immediately and prevents execution until an administrator trusts it again.": "Le blocage désactive immédiatement le plugin et empêche son exécution jusqu'à ce qu'un administrateur lui fasse à nouveau confiance.", + "Block Plugin": "Bloquer le plugin", "Body": "Corps", "Body content for the email (optional).": "Contenu du corps de l'e-mail (facultatif).", "Brief description...": "Brève description...", @@ -256,70 +269,72 @@ "Broadcast will wait until this time to start. Leave empty to start immediately.": "La diffusion attendra cette heure pour démarrer. Laissez vide pour démarrer immédiatement.", "Browse Library": "Parcourir la bibliothèque", "Bulk Actions": "Actions groupées", - "Bulk VOD actions": "Actions VOD en masse", "Bulk channel actions": "Actions de canal groupées", "Bulk series actions": "Actions en série en masse", + "Bulk VOD actions": "Actions VOD en masse", "Bundled plugins cannot be deleted.": "Les plugins groupés ne peuvent pas être supprimés.", "Bypass Provider Connection Limits": "Contourner les limites de connexion du fournisseur", - "CRON Example": "Exemple CRON", - "Cache Metadata": "Métadonnées du cache", - "Cache Progress": "Progression du cache", "Cached": "En cache", "Cached logos removed": "Logos mis en cache supprimés", + "Cache Metadata": "Métadonnées du cache", + "Cache Progress": "Progression du cache", "Call webhooks, or run local scripts, after playlist sync completion.": "Appelez des webhooks ou exécutez des scripts locaux une fois la synchronisation de la playlist terminée.", "Cancel": "Annuler", + "Cancellation requested": "Annulation demandée", + "Cancelled": "Annulé", "Cancel Run": "Annuler l'exécution", "Cancel the in-progress scrubber run.": "Annulez l’exécution du nettoyeur en cours.", "Cancel this scrubber run? The current run will be abandoned. Any channels already disabled during this run will remain disabled.": "Annuler cette exécution du laveur ? L'exécution en cours sera abandonnée. Tous les canaux déjà désactivés pendant cette exécution resteront désactivés.", - "Cancellation requested": "Annulation demandée", - "Cancelled": "Annulé", "Capabilities": "Capacités", "Capability Map": "Carte des capacités", "Cast": "Casting", "Catchup": "Ketchup", + "Catchup Source": "Source de rattrapage", "Categories": "Catégories", "Categories to import": "Catégories à importer", "Category": "Catégorie", "Category Name": "Nom de la catégorie", "Category Settings": "Paramètres de catégorie", + "Category sort order": "Ordre de tri des catégories", "Ch #": "Numéro de ch.", "Channel": "Canal", "Channel Attributes to Copy": "Attributs de canal à copier", "Channel Details": "Détails de la chaîne", + "Channel Filter (optional)": "Filtre de canal (en option)", + "Channel group as category": "Groupe de chaînes en tant que catégorie", "Channel ID": "ID de chaîne", + "Channel mapping removed for the selected channels.": "Mappage des canaux supprimé pour les canaux sélectionnés.", + "Channel mapping removed for the selected Playlist.": "Mappage des canaux supprimé pour la liste de lecture sélectionnée.", + "Channel mapping started, you will be notified when the process is complete.": "Le mappage des canaux a commencé, vous serez averti lorsque le processus sera terminé.", "Channel Match Attributes": "Attributs de correspondance de chaîne", + "Channel merge started": "La fusion des chaînes a commencé", "Channel Name": "Nom de la chaîne", "Channel No.": "Numéro de chaîne", "Channel Number": "Numéro de chaîne", + "Channels": "Canaux", + "Channels as failover": "Canaux comme basculement", + "Channels Checked": "Chaînes vérifiées", "Channel Scrubber": "Épurateur de canaux", - "Channel Scrubbers": "Épurateurs de canaux", - "Channel Title": "Titre de la chaîne", - "Channel group as category": "Groupe de chaînes en tant que catégorie", - "Channel mapping removed for the selected Playlist.": "Mappage des canaux supprimé pour la liste de lecture sélectionnée.", - "Channel mapping removed for the selected channels.": "Mappage des canaux supprimé pour les canaux sélectionnés.", - "Channel mapping started, you will be notified when the process is complete.": "Le mappage des canaux a commencé, vous serez averti lorsque le processus sera terminé.", - "Channel merge started": "La fusion des chaînes a commencé", "Channel scrubber restarted": "Le nettoyeur de canaux a redémarré", - "Channel scrubber started": "Le nettoyeur de canaux a démarré", + "Channel Scrubbers": "Épurateurs de canaux", "Channel scrubbers started": "Les épurateurs de canaux ont démarré", - "Channel unmerge started": "La fusion des chaînes a commencé", - "Channels": "Canaux", - "Channels Checked": "Chaînes vérifiées", + "Channel scrubber started": "Le nettoyeur de canaux a démarré", "Channels Disabled": "Canaux désactivés", - "Channels Recounted": "Chaînes racontées", - "Channels Sorted": "Chaînes triées", - "Channels as failover": "Canaux comme basculement", "Channels moved to group": "Chaînes déplacées vers le groupe", "Channels only": "Chaînes uniquement", + "Channels Recounted": "Chaînes racontées", + "Channels Sorted": "Chaînes triées", "Channels to process per call (default: 50, max: 100). Use with offset for pagination.": "Canaux à traiter par appel (par défaut : 50, max : 100). Utiliser avec décalage pour la pagination.", "Channels to skip (default: 0). Increment by limit to page through a large group.": "Chaînes à ignorer (par défaut : 0). Incrémentation par limite pour parcourir un grand groupe.", "Channels with these keywords in their name will be prioritized (e.g., \"RAW\", \"LOCAL\", \"HD\").": "Les chaînes avec ces mots-clés dans leur nom seront prioritaires (par exemple, \"RAW\", \"LOCAL\", \"HD\").", - "Check Method": "Méthode de vérification", - "Check Plugin Updates": "Vérifier les mises à jour du plugin", + "Channel Title": "Titre de la chaîne", + "Channel unmerge started": "La fusion des chaînes a commencé", + "Checked": "À carreaux", "Check for File Changes": "Vérifier les modifications de fichiers", "Check for Updates": "Vérifier les mises à jour", "Check interval (seconds)": "Intervalle de vérification (secondes)", - "Checked": "À carreaux", + "Check Method": "Méthode de vérification", + "Check Plugin Updates": "Vérifier les mises à jour du plugin", "Choose between URL/file upload or SchedulesDirect integration": "Choisissez entre le téléchargement d'URL/de fichier ou l'intégration de SchedulesDirect", "Choose if and where transcoding should occur. Restart the broadcast after changing this setting.": "Choisissez si et où le transcodage doit avoir lieu. Redémarrez la diffusion après avoir modifié ce paramètre.", "Choose master from?": "Choisir le maître parmi ?", @@ -327,32 +342,32 @@ "Choose whether to retain or remove any database tables and storage files the plugin created during its lifetime.": "Choisissez de conserver ou de supprimer les tables de base de données et les fichiers de stockage créés par le plugin au cours de sa durée de vie.", "Clean special characters": "Nettoyer les caractères spéciaux", "Cleanup Complete": "Nettoyage terminé", - "Cleanup Duplicate Series": "Nettoyage des séries en double", - "Cleanup Duplicates": "Nettoyer les doublons", - "Cleanup Streams": "Flux de nettoyage", "Cleanup default": "Nettoyage par défaut", + "Cleanup Duplicates": "Nettoyer les doublons", + "Cleanup Duplicate Series": "Nettoyage des séries en double", "Cleanup requested.": "Nettoyage demandé.", + "Cleanup Streams": "Flux de nettoyage", "Clear": "Clair", - "Clear All Logo Cache": "Effacer tout le cache des logos", - "Clear EPG mappings for all channels of the selected playlist.": "Effacez les mappages EPG pour toutes les chaînes de la liste de lecture sélectionnée.", - "Clear EPG mappings for the selected channels.": "Effacez les mappages EPG pour les chaînes sélectionnées.", - "Clear Expired Logo Cache": "Effacer le cache des logos expirés", - "Clear History": "Effacer l'historique", - "Clear Watch Progress": "Effacer la progression de la montre", "Clear all": "Tout effacer", "Clear all cached logos": "Effacer tous les logos en cache", + "Clear All Logo Cache": "Effacer tout le cache des logos", "Clear cached logos and poster images for selected VOD channels so they are fetched again on the next request.": "Effacez les logos et les images d'affiche mis en cache pour les chaînes VOD sélectionnées afin qu'ils soient à nouveau récupérés lors de la prochaine demande.", "Clear cached logos for selected channels so they are fetched again on the next request.": "Effacez les logos mis en cache pour les chaînes sélectionnées afin qu'ils soient à nouveau récupérés lors de la prochaine demande.", "Clear cached logos for selected networks so they are fetched again on the next request.": "Effacez les logos mis en cache pour les réseaux sélectionnés afin qu'ils soient à nouveau récupérés lors de la prochaine demande.", "Clear cached poster images for selected series so they are fetched again on the next request.": "Effacez les images d'affiches mises en cache pour les séries sélectionnées afin qu'elles soient à nouveau récupérées lors de la prochaine demande.", + "Clear EPG mappings for all channels of the selected playlist.": "Effacez les mappages EPG pour toutes les chaînes de la liste de lecture sélectionnée.", + "Clear EPG mappings for the selected channels.": "Effacez les mappages EPG pour les chaînes sélectionnées.", "Clear expired cache": "Effacer le cache expiré", + "Clear Expired Logo Cache": "Effacer le cache des logos expirés", "Clear failed playlists": "Effacer les listes de lecture ayant échoué", + "Clear History": "Effacer l'historique", "Clear history": "Effacer l'historique", + "Clearing the logo cache will remove all cached logo images. If permanent cache is enabled, it will be ignored. This action cannot be undone.": "Effacer le cache du logo supprimera toutes les images de logo mises en cache. Si le cache permanent est activé, il sera ignoré. Cette action ne peut pas être annulée.", "Clear log": "Effacer le journal", "Clear log file?": "Effacer le fichier journal ?", "Clear run history": "Effacer l'historique des exécutions", "Clear selection": "Effacer la sélection", - "Clearing the logo cache will remove all cached logo images. If permanent cache is enabled, it will be ignored. This action cannot be undone.": "Effacer le cache du logo supprimera toutes les images de logo mises en cache. Si le cache permanent est activé, il sera ignoré. Cette action ne peut pas être annulée.", + "Clear Watch Progress": "Effacer la progression de la montre", "Click on a result to apply the TMDB IDs": "Cliquez sur un résultat pour appliquer les identifiants TMDB", "Close": "Fermer", "Codec long name": "Nom long du codec", @@ -362,13 +377,11 @@ "Complete cast list": "Liste complète des acteurs", "Completed": "Complété", "Condition": "Condition", - "Condition to check.": "État à vérifier.", "Conditional Settings": "Paramètres conditionnels", "Conditions": "Conditions", + "Condition to check.": "État à vérifier.", "Config": "Configuration", "Configuration": "Configuration", - "Configure SMTP settings to send emails from the application.": "Configurez les paramètres SMTP pour envoyer des e-mails depuis l'application.", - "Configure The Movie Database (TMDB) integration to automatically lookup and populate metadata IDs (TMDB, TVDB, IMDB) for your VOD content and Series.": "Configurez l'intégration de The Movie Database (TMDB) pour rechercher et remplir automatiquement les ID de métadonnées (TMDB, TVDB, IMDB) pour votre contenu et votre série VOD.", "Configure automatic stream probing after each playlist sync.": "Configurer le sondage automatique des flux après chaque synchronisation de liste de lecture.", "Configure automatic sync schedule": "Configurer la planification de synchronisation automatique", "Configure groups to automatically sync into Custom Playlists after each successful sync. Each rule syncs the selected source group(s) into one Custom Playlist.": "Configurez des groupes pour qu'ils se synchronisent automatiquement dans des listes personnalisées après chaque synchronisation réussie. Chaque règle synchronise le(s) groupe(s) source sélectionné(s) dans une liste personnalisée.", @@ -376,26 +389,30 @@ "Configure how the proxy handles stream failures, including advanced resolver logic and fail conditions.": "Configurez la façon dont le proxy gère les échecs de flux, y compris la logique de résolution avancée et les conditions d'échec.", "Configure how the proxy is accessed and how stream URLs are resolved.": "Configurez la manière dont le proxy est accédé et la manière dont les URL de flux sont résolues.", "Configure scaffold options": "Configurer les options d'échafaudage", + "Configure SMTP settings to send emails from the application.": "Configurez les paramètres SMTP pour envoyer des e-mails depuis l'application.", + "Configure The Movie Database (TMDB) integration to automatically lookup and populate metadata IDs (TMDB, TVDB, IMDB) for your VOD content and Series.": "Configurez l'intégration de The Movie Database (TMDB) pour rechercher et remplir automatiquement les ID de métadonnées (TMDB, TVDB, IMDB) pour votre contenu et votre série VOD.", "Configure your SchedulesDirect account settings": "Configurez les paramètres de votre compte SchedulesDirect", "Confirm selection": "Confirmer la sélection", "Connected but No Libraries Found": "Connecté mais aucune bibliothèque trouvée", "Connection Failed": "Échec de la connexion", - "Connection Successful": "Connexion réussie", "Connection failed": "La connexion a échoué", + "Connection Successful": "Connexion réussie", "Connection successful!": "Connexion réussie !", "Consecutive silent checks before failover": "Vérifications silencieuses consécutives avant le basculement", "Container Extension": "Extension de conteneur", "Content": "Contenu", - "Content Type": "Type de contenu", "Content not found": "Contenu introuvable", + "Content Type": "Type de contenu", "Control how media is transcoded": "Contrôler la façon dont les médias sont transcodés", "Control request concurrency for parallel processing and add delays between requests to avoid provider rate limiting.": "Contrôlez la simultanéité des requêtes pour le traitement parallèle et ajoutez des délais entre les requêtes pour éviter la limitation de débit du fournisseur.", "Control what content is synced from the media server": "Contrôler quel contenu est synchronisé depuis le serveur multimédia", + "Cookies (Netscape format)": "Cookies (format Netscape)", "Copy Changes": "Copier les modifications", "Copy now": "Copier maintenant", + "Copy the file hash from the GitHub release page.": "Copiez le hachage du fichier depuis la page de version de GitHub.", "Copy the file hash from the GitHub release page to verify the download hasn't been tampered with.": "Copiez le hachage du fichier depuis la page de version de GitHub pour vérifier que le téléchargement n'a pas été falsifié.", "Copy the file hash from the GitHub release page to verify the download hasn\\'t been tampered with.": "Copiez le hachage du fichier depuis la page de version de GitHub pour vérifier que le téléchargement n'a pas été falsifié.", - "Copy the file hash from the GitHub release page.": "Copiez le hachage du fichier depuis la page de version de GitHub.", + "Could not create smart channel": "Impossible de créer une chaîne intelligente", "Could not determine the record to update. Please close the modal and try again.": "Impossible de déterminer l'enregistrement à mettre à jour. Veuillez fermer le modal et réessayer.", "Could not fetch release": "Impossible de récupérer la version", "Country": "Pays", @@ -403,46 +420,46 @@ "Country of origin.": "Pays d'origine.", "Cover": "Couverture", "Cover Image (Large)": "Image de couverture (grande)", + "Create a custom \"smart channel\" from the selected channels. The highest-scoring source's title, logo, and EPG mapping will be copied. All selected channels become failovers, sorted by score, and the playlist will stream the top failover automatically.": "Créez un « canal intelligent » personnalisé à partir des canaux sélectionnés. Le titre, le logo et le mappage EPG de la source ayant obtenu le score le plus élevé seront copiés. Tous les canaux sélectionnés deviennent des basculements, triés par score, et la playlist diffusera automatiquement le basculement le plus important.", + "Create an alias of an existing playlist or custom playlist to use a different Xtream API credentials, while still using the same underlying Channel, VOD and Series configurations of the linked playlist.": "Créez un alias d'une playlist existante ou d'une playlist personnalisée pour utiliser des informations d'identification d'API Xtream différentes, tout en utilisant les mêmes configurations sous-jacentes de chaîne, de VOD et de série de la playlist liée.", + "Create credentials and assign them to your Playlist for simple authentication. They can also be used to access the Xtream API for the assigned Playlists.": "Créez des informations d'identification et attribuez-les à votre liste de lecture pour une authentification simple. Ils peuvent également être utilisés pour accéder à l'API Xtream pour les playlists attribuées.", "Create Custom Channel": "Créer une chaîne personnalisée", "Create Custom VOD": "Créer une VOD personnalisée", + "Create live TV channels from your media server content": "Créez des chaînes de télévision en direct à partir du contenu de votre serveur multimédia", "Create Missing Channels": "Créer des chaînes manquantes", "Create Network": "Créer un réseau", "Create Networks in the Networks section to build pseudo-live channels": "Créez des réseaux dans la section Réseaux pour créer des chaînes pseudo-live", - "Create Plugin": "Créer un plugin", - "Create Token": "Créer un jeton", - "Create an alias of an existing playlist or custom playlist to use a different Xtream API credentials, while still using the same underlying Channel, VOD and Series configurations of the linked playlist.": "Créez un alias d'une playlist existante ou d'une playlist personnalisée pour utiliser des informations d'identification d'API Xtream différentes, tout en utilisant les mêmes configurations sous-jacentes de chaîne, de VOD et de série de la playlist liée.", - "Create credentials and assign them to your Playlist for simple authentication. They can also be used to access the Xtream API for the assigned Playlists.": "Créez des informations d'identification et attribuez-les à votre liste de lecture pour une authentification simple. Ils peuvent également être utilisés pour accéder à l'API Xtream pour les playlists attribuées.", - "Create live TV channels from your media server content": "Créez des chaînes de télévision en direct à partir du contenu de votre serveur multimédia", "Create now": "Créer maintenant", "Create playlists composed of channels from your other playlists. Head to channels to bulk add channels to your custom playlist.": "Créez des listes de lecture composées de chaînes de vos autres listes de lecture. Accédez aux chaînes pour ajouter en masse des chaînes à votre liste de lecture personnalisée.", + "Create Plugin": "Créer un plugin", "Creates a new security review of this plugin\\'s current files. Use this after updating plugin files on disk or after a failed install to re-trigger the review process without re-uploading.": "Crée un nouvel examen de sécurité des fichiers actuels de ce plugin. Utilisez-le après la mise à jour des fichiers du plugin sur le disque ou après un échec d'installation pour relancer le processus de révision sans nouveau téléchargement.", + "Create smart channel": "Créer un canal intelligent", + "Create Token": "Créer un jeton", "Credentials": "Informations d'identification", - "Current IDs": "Identifiants actuels", - "Current Provider Timezone": "Fuseau horaire du fournisseur actuel", - "Current Run": "Exécution en cours", - "Current Status": "Statut actuel", + "CRON Example": "Exemple CRON", "Current category series disabled": "Série de catégories actuelles désactivée", "Current category series enabled": "Série de catégories actuelle activée", - "Current signal": "Signal actuel", + "Current IDs": "Identifiants actuels", "Currently Mapped": "Actuellement mappé", - "Currently stored external IDs for this VOD": "ID externes actuellement stockés pour cette VOD", "Currently stored external IDs for this series": "ID externes actuellement stockés pour cette série", + "Currently stored external IDs for this VOD": "ID externes actuellement stockés pour cette VOD", + "Current Provider Timezone": "Fuseau horaire du fournisseur actuel", + "Current Run": "Exécution en cours", + "Current signal": "Signal actuel", + "Current Status": "Statut actuel", "Custom": "Coutume", "Custom Category": "Catégorie personnalisée", "Custom Date Format String": "Chaîne de format de date personnalisée", "Custom Group": "Groupe personnalisé", "Custom Headers": "En-têtes personnalisés", + "Custom headers to use when streaming via the proxy.": "En-têtes personnalisés à utiliser lors de la diffusion via le proxy.", "Custom Playlist": "Liste de lecture personnalisée", "Custom Playlist Channels Recounted": "Chaînes de playlist personnalisées racontées", "Custom Playlists": "Listes de lecture personnalisées", - "Custom headers to use when streaming via the proxy.": "En-têtes personnalisés à utiliser lors de la diffusion via le proxy.", - "DNS failover URLs": "URL de basculement DNS", - "DVR / Live TV Tuner": "DVR / Tuner TV en direct", - "DVR Channels": "Chaînes DVR", - "DVR Removed": "DVR supprimé", - "DVR Status": "Statut du DVR", - "DVR Sync Status": "État de synchronisation du DVR", + "Daily": "Tous les jours", "Dashboard": "Tableau de bord", + "Database: Execute Query": "Base de données : exécuter la requête", + "Database: Get Schema": "Base de données : Obtenir le schéma", "Data Ownership": "Propriété des données", "Date Format": "Format des dates", "Days of schedule to generate": "Jours de planning à générer", @@ -450,46 +467,46 @@ "Deactivate failover channels": "Désactiver les canaux de basculement", "Dead Links": "Liens morts", "Dead Links Found": "Liens morts trouvés", - "Debug Logs": "Journaux de débogage", "Debugging": "Débogage", + "Debug Logs": "Journaux de débogage", "Default EPG": "EPG par défaut", "Default ID": "ID par défaut", "Default Live Transcoding Profile": "Profil de transcodage en direct par défaut", "Default Name": "Nom par défaut", - "Default Series Stream File Setting": "Paramètre de fichier de flux de série par défaut", - "Default Title": "Titre par défaut", - "Default URL": "URL par défaut", - "Default Uninstall Behavior": "Comportement de désinstallation par défaut", - "Default VOD Stream File Setting": "Paramètre de fichier de flux VOD par défaut", "Default name": "Nom par défaut", "Default options for new Live channels": "Options par défaut pour les nouvelles chaînes en direct", "Default options for new VOD channels": "Options par défaut pour les nouvelles chaînes VOD", "Default playlist": "Liste de lecture par défaut", "Default routes through M3U Editor for dynamic routing.": "Itinéraires par défaut via M3U Editor pour le routage dynamique.", - "Default stream profiles have been generated!": "Des profils de flux par défaut ont été générés !", "Defaults": "Valeurs par défaut", - "Defaults and schedules used by the plugin.": "Valeurs par défaut et horaires utilisés par le plugin.", "Defaults, schedules, and automatic entry points.": "Valeurs par défaut, horaires et points d'entrée automatiques.", + "Defaults and schedules used by the plugin.": "Valeurs par défaut et horaires utilisés par le plugin.", + "Default Series Stream File Setting": "Paramètre de fichier de flux de série par défaut", + "Default stream profiles have been generated!": "Des profils de flux par défaut ont été générés !", + "Default Title": "Titre par défaut", + "Default Uninstall Behavior": "Comportement de désinstallation par défaut", + "Default URL": "URL par défaut", + "Default VOD Stream File Setting": "Paramètre de fichier de flux VOD par défaut", "Define find & replace rules that automatically run after each playlist sync. Rules execute in order.": "Définissez des règles de recherche et de remplacement qui s'exécutent automatiquement après chaque synchronisation de playlist. Les règles s'exécutent dans l'ordre.", "Define sort configurations that automatically run after each playlist sync. Configurations execute in order.": "Définissez des configurations de tri qui s'exécutent automatiquement après chaque synchronisation de playlist. Les configurations s'exécutent dans l'ordre.", "Delay after stream start before silence monitoring begins. Allows for initial buffering and audio decoder startup. Default: 15 seconds.": "Délai après le début du flux avant le début de la surveillance du silence. Permet la mise en mémoire tampon initiale et le démarrage du décodeur audio. Par défaut : 15 secondes.", "Delay before refresh (seconds)": "Délai avant actualisation (secondes)", "Delay in milliseconds between requests.": "Délai en millisecondes entre les requêtes.", "Delete": "Supprimer", - "Delete Plugin": "Supprimer le plugin", - "Delete Record": "Supprimer l'enregistrement", "Delete blocked": "Supprimer bloqué", "Delete now": "Supprimer maintenant", "Delete permanently": "Supprimer définitivement", + "Delete Plugin": "Supprimer le plugin", "Delete plugin from disk": "Supprimer le plugin du disque", + "Delete Record": "Supprimer l'enregistrement", "Delete selected": "Supprimer la sélection", "Delete selected files": "Supprimer les fichiers sélectionnés", "Delete this sync log?": "Supprimer ce journal de synchronisation ?", "Description": "Description", + "Detached from playlist": "Détaché de la playlist", "Detach Selected": "Détacher la sélection", "Detach selected channels from custom playlist": "Détacher les chaînes sélectionnées de la liste de lecture personnalisée", "Detach selected series from custom playlist": "Détacher la série sélectionnée de la liste de lecture personnalisée", - "Detached from playlist": "Détaché de la playlist", "Detailed plot summary.": "Résumé détaillé de l'intrigue.", "Detailed plot summary...": "Résumé détaillé de l'intrigue...", "Details": "Détails", @@ -499,22 +516,24 @@ "Director": "Directeur", "Director(s) of the content.": "Directeur(s) du contenu.", "Disable": "Désactiver", - "Disable Categories": "Désactiver les catégories", - "Disable Category Series": "Désactiver la série de catégories", - "Disable EPG mapping": "Désactiver le mappage EPG", - "Disable Group Channels": "Désactiver les chaînes de groupe", - "Disable Groups": "Désactiver les groupes", - "Disable Merge": "Désactiver la fusion", - "Disable Probing": "Désactiver le sondage", - "Disable SSL verification": "Désactiver la vérification SSL", "Disable all episodes": "Désactiver tous les épisodes", "Disable catch-up": "Désactiver le rattrapage", + "Disable Categories": "Désactiver les catégories", + "Disable Category Series": "Désactiver la série de catégories", "Disable category series": "Désactiver les séries de catégories", + "Disabled": "Désactivé", "Disable dead channels": "Désactiver les chaînes mortes", + "Disable EPG mapping": "Désactiver le mappage EPG", + "Disable Group Channels": "Désactiver les chaînes de groupe", "Disable group channels": "Désactiver les chaînes de groupe", "Disable group channels now?": "Désactiver les chaînes de groupe maintenant ?", + "Disable Groups": "Désactiver les groupes", + "Disable Merge": "Désactiver la fusion", "Disable now": "Désactiver maintenant", + "Disable Probing": "Désactiver le sondage", "Disable selected": "Désactiver la sélection", + "Disable source channels": "Désactiver les chaînes sources", + "Disable SSL verification": "Désactiver la vérification SSL", "Disable stream probing for the selected channels. They will be excluded from stream probing jobs.": "Désactivez la détection de flux pour les canaux sélectionnés. Ils seront exclus des tâches de sondage de flux.", "Disable the current category series now?": "Désactiver la série de catégories actuelle maintenant ?", "Disable the selected categories now?": "Désactiver les catégories sélectionnées maintenant ?", @@ -525,22 +544,22 @@ "Disable the series episodes now?": "Désactiver les épisodes de la série maintenant ?", "Disable to pause syncing without deleting the integration": "Désactiver la suspension de la synchronisation sans supprimer l'intégration", "Disable to stop generating schedule without deleting": "Désactiver pour arrêter de générer le planning sans supprimer", - "Disabled": "Désactivé", "Disabling is reversible. Uninstalling changes the plugin\\'s status and optionally removes its database tables, files, and reports.": "La désactivation est réversible. La désinstallation modifie l'état du plugin et supprime éventuellement ses tables de base de données, ses fichiers et ses rapports.", "Discard Review": "Supprimer l'examen", "Discard review failed": "Échec de l'examen de rejet", "Discord": "Discord", "Discover Plugins": "Découvrez les plugins", "Disk": "Disque", - "Display Name": "Nom d'affichage", "Display aspect ratio": "Format d'affichage", + "Display Name": "Nom d'affichage", + "DNS failover URLs": "URL de basculement DNS", "Documentation": "Documentation", "Does not have metadata": "N'a pas de métadonnées", - "Don\\'t allow merging for selected channels when running \"Merge Same ID\" jobs.": "N'autorisez pas la fusion des canaux sélectionnés lors de l'exécution de tâches \"Fusionner le même ID\".", - "Don\\'t map EPG to selected channels when running EPG mapping jobs.": "Ne mappez pas l'EPG aux canaux sélectionnés lors de l'exécution de tâches de mappage EPG.", "Donate now": "Faites un don maintenant", "Donate via Ko-fi": "Faire un don via Ko-fi", "Done": "Fait", + "Don\\'t allow merging for selected channels when running \"Merge Same ID\" jobs.": "N'autorisez pas la fusion des canaux sélectionnés lors de l'exécution de tâches \"Fusionner le même ID\".", + "Don\\'t map EPG to selected channels when running EPG mapping jobs.": "Ne mappez pas l'EPG aux canaux sélectionnés lors de l'exécution de tâches de mappage EPG.", "Download": "Télécharger", "Download EPG": "Télécharger l'EPG", "Download M3U": "Télécharger M3U", @@ -555,99 +574,89 @@ "Duration (Seconds)": "Durée (secondes)", "Duration in HH:MM:SS format.": "Durée au format HH:MM:SS.", "Duration in seconds.": "Durée en secondes.", - "EPG": "EPG", - "EPG Cache is being generated": "Le cache EPG est en cours de génération", - "EPG Cache is being generated for selected EPGs": "Le cache EPG est généré pour les EPG sélectionnés", - "EPG Cache is being generated in the background for the selected EPGs. You will be notified when complete.": "Le cache EPG est généré en arrière-plan pour les EPG sélectionnés. Vous serez averti une fois terminé.", - "EPG Cache is being generated in the background. You will be notified when complete.": "Le cache EPG est généré en arrière-plan. Vous serez averti une fois terminé.", - "EPG Channel": "Chaîne EPG", - "EPG Channel mapping removed": "Mappage des canaux EPG supprimé", - "EPG Channels": "Chaînes EPG", - "EPG File Cache Cleared": "Cache de fichier EPG effacé", - "EPG File Cache Not Found": "Cache de fichier EPG introuvable", - "EPG Information": "Informations EPG", - "EPG Map": "Carte EPG", - "EPG Mapped Channels": "Canaux mappés EPG", - "EPG Mapper: Apply Mappings": "EPG Mapper : appliquer des mappages", - "EPG Mapper: Channel Matcher": "Mappeur EPG : Matcheur de chaînes", - "EPG Mapper: Mapping State": "Mappeur EPG : état de mappage", - "EPG Maps": "Cartes EPG", - "EPG Output": "Sortie EPG", - "EPG Settings": "Paramètres EPG", - "EPG Shift": "Changement EPG", - "EPG URL": "URL du guide EPG", - "EPG data for your Networks": "Données EPG pour vos réseaux", - "EPG is being processed in the background. Depending on the size of the guide data, this may take a while. You will be notified on completion.": "L'EPG est traité en arrière-plan. En fonction de la taille des données du guide, cela peut prendre un certain temps. Vous serez informé à la fin.", - "EPG is being processed in the background. The view will update when complete.": "L'EPG est traité en arrière-plan. La vue sera mise à jour une fois terminée.", - "EPG is mapped": "L'EPG est mappé", - "EPG is not mapped": "L'EPG n'est pas mappé", - "EPG is processing": "L'EPG est en cours de traitement", - "EPG map disabled for selected channels": "Carte EPG désactivée pour les chaînes sélectionnées", - "EPG map re-enabled for selected channels": "Carte EPG réactivée pour les chaînes sélectionnées", - "EPG mapping restarted": "Le mappage EPG a redémarré", - "EPG mapping started": "Le mappage EPG a démarré", - "EPG output options": "Options de sortie EPG", - "EPG status has been reset.": "Le statut EPG a été réinitialisé.", - "EPG status reset": "Réinitialisation du statut EPG", - "EPG to Channel mapping": "Mappage EPG vers canal", - "EPG type": "Type EPG", - "EPGs": "EPG", + "During scheduled or manual rescoring, channels with stats older than this are re-probed first. Set to 0 to always re-probe. The \"Make smart channel\" action uses existing stats only and does not consult this setting.": "Lors d'une nouvelle évaluation programmée ou manuelle, les chaînes dont les statistiques sont plus anciennes sont d'abord réévaluées. Réglez-le sur 0 pour toujours re-sonder. L'action « Créer une chaîne intelligente » utilise uniquement les statistiques existantes et ne consulte pas ce paramètre.", + "DVR / Live TV Tuner": "DVR / Tuner TV en direct", + "DVR Channels": "Chaînes DVR", + "DVR Removed": "DVR supprimé", + "DVR Status": "Statut du DVR", + "DVR Sync Status": "État de synchronisation du DVR", + "e.g., 100": "par exemple, 100", + "e.g., Movie Classics, 80s TV, Kids Zone": "Par exemple, films classiques, séries télévisées des années 80, zone enfants", + "e.g., Movies, TV Shows": "par exemple, films, émissions de télévision", + "e.g., My Networks": "par exemple, Mes réseaux", + "e.g. 403, 404, 502, 503": "par ex. 403, 404, 502, 503", + "e.g. 2024": "par ex. 2024", + "e.g. a1b2c3d4...": "par ex. a1b23d4...", + "e.g. aac": "par ex. aaa", + "e.g. Authorization": "par ex. Autorisation", + "e.g. Bearer abc123": "par ex. Porteur abc123", + "e.g. d/m/Y H:i:s": "par ex. j/m/A H:i:s", + "e.g. Help me find a channel": "par ex. Aide-moi à trouver une chaîne", + "e.g. Help me find a channel by name.": "par ex. Aidez-moi à trouver une chaîne par son nom.", + "e.g. libx264, h264_nvenc": "par ex. libx264, h264_nvenc", + "e.g. Remove country prefix": "par ex. Supprimer le préfixe du pays", + "e.g. veryfast, fast, medium": "par ex. très rapide, rapide, moyen", + "Edit or add the series details": "Modifier ou ajouter les détails de la série", "Edit Playlist": "Modifier la liste de lecture", "Edit Series": "Modifier la série", "Edit VOD": "Modifier la VOD", - "Edit or add the series details": "Modifier ou ajouter les détails de la série", + "Email address": "Adresse email", "Email Body": "Corps de l'e-mail", "Email Options": "Options de courrier électronique", "Email Subject": "Objet de l'e-mail", - "Email address": "Adresse email", "Email variables": "Variables de courrier électronique", "Emby": "Emby", + "en": "dans", "Enable": "Activer", "Enable .strm file generation": "Activer la génération de fichiers .strm", + "Enable advanced failover logic": "Activer la logique de basculement avancée", "Enable AI Copilot": "Activer AI Copilot", "Enable AI Copilot Management": "Activer la gestion du copilote IA", + "Enable all episodes": "Activer tous les épisodes", + "Enable auto-merge after sync": "Activer la fusion automatique après la synchronisation", "Enable Automatic Database Backups": "Activer les sauvegardes automatiques de base de données", "Enable Broadcasting": "Activer la diffusion", "Enable Categories": "Activer les catégories", "Enable Category Series": "Activer la série de catégories", + "Enable category series": "Activer les séries de catégories", + "Enabled": "Activé", + "Enabled Channels": "Canaux activés", "Enable Debugging": "Activer le débogage", + "Enabled Tools": "Outils activés", + "Enable dummy EPG": "Activer l'EPG factice", "Enable EPG mapping": "Activer le mappage EPG", "Enable EPG mapping by default": "Activer le mappage EPG par défaut", "Enable Group Channels": "Activer les canaux de groupe", - "Enable Groups": "Activer les groupes", - "Enable Logo Proxy": "Activer le proxy de logo", - "Enable Logo Repository endpoint": "Activer le point de terminaison du référentiel de logos", - "Enable Merge": "Activer la fusion", - "Enable Plex Management": "Activer la gestion Plex", - "Enable Probing": "Activer le sondage", - "Enable Provider Affinity": "Activer l'affinité avec le fournisseur", - "Enable Provider Profiles": "Activer les profils de fournisseur", - "Enable Sticky Session Handler": "Activer le gestionnaire de session persistante", - "Enable Stream Proxy": "Activer le proxy de flux", - "Enable Strict Live TS Handling": "Activer la gestion stricte des Live TS", - "Enable Sync Logs": "Activer les journaux de synchronisation", - "Enable advanced failover logic": "Activer la logique de basculement avancée", - "Enable all episodes": "Activer tous les épisodes", - "Enable auto-merge after sync": "Activer la fusion automatique après la synchronisation", - "Enable category series": "Activer les séries de catégories", - "Enable dummy EPG": "Activer l'EPG factice", "Enable group channels": "Activer les canaux de groupe", "Enable group channels now?": "Activer les chaînes de groupe maintenant ?", + "Enable Groups": "Activer les groupes", "Enable if your server uses SSL/TLS": "Activer si votre serveur utilise SSL/TLS", "Enable live broadcasting to stream content like a real TV channel. This is optional - you can enable it later.": "Activez la diffusion en direct pour diffuser du contenu comme une vraie chaîne de télévision. Ceci est facultatif – vous pourrez l’activer plus tard.", + "Enable Logo Proxy": "Activer le proxy de logo", + "Enable Logo Repository endpoint": "Activer le point de terminaison du référentiel de logos", + "Enable Merge": "Activer la fusion", "Enable merging by default": "Activer la fusion par défaut", "Enable name filtering": "Activer le filtrage des noms", "Enable new Live channels": "Activer de nouvelles chaînes en direct", - "Enable new VOD channels": "Activer de nouvelles chaînes VOD", "Enable new series": "Activer une nouvelle série", + "Enable new VOD channels": "Activer de nouvelles chaînes VOD", "Enable now": "Activer maintenant", "Enable playlist fail conditions": "Activer les conditions d'échec de la playlist", + "Enable Plex Management": "Activer la gestion Plex", + "Enable Probing": "Activer le sondage", + "Enable Provider Affinity": "Activer l'affinité avec le fournisseur", + "Enable Provider Profiles": "Activer les profils de fournisseur", "Enable request delay": "Activer le délai de demande", + "Enables audit log, custom rate limits, conversation history, and other management features for the AI Copilot assistant.": "Active le journal d'audit, les limites de débit personnalisées, l'historique des conversations et d'autres fonctionnalités de gestion pour l'assistant AI Copilot.", "Enable selected": "Activer la sélection", "Enable silence detection": "Activer la détection des silences", + "Enable Sticky Session Handler": "Activer le gestionnaire de session persistante", "Enable stream probing by default": "Activer la détection de flux par défaut", "Enable stream probing for the selected channels. They will be included in stream probing jobs.": "Activez la détection de flux pour les canaux sélectionnés. Ils seront inclus dans les travaux de sondage des flux.", + "Enable Stream Proxy": "Activer le proxy de flux", + "Enable Strict Live TS Handling": "Activer la gestion stricte des Live TS", "Enable sync invalidation": "Activer l'invalidation de la synchronisation", + "Enable Sync Logs": "Activer les journaux de synchronisation", "Enable the current category series now?": "Activer la série de catégories actuelle maintenant ?", "Enable the selected categories now?": "Activer les catégories sélectionnées maintenant ?", "Enable the selected category series now?": "Activer la série de catégories sélectionnée maintenant ?", @@ -659,57 +668,92 @@ "Enable this post process": "Activer ce post-processus", "Enable to allow new stream requests to automatically stop the oldest stream when a playlist reaches its connection limit. Disabled by default.": "Activez cette option pour autoriser les nouvelles demandes de flux à arrêter automatiquement le flux le plus ancien lorsqu'une liste de lecture atteint sa limite de connexion. Désactivé par défaut.", "Enable to import additional program images (NOTE: this can significantly increase import time)": "Activer l'importation d'images de programme supplémentaires (REMARQUE : cela peut augmenter considérablement le temps d'importation)", - "Enabled": "Activé", - "Enabled Channels": "Canaux activés", - "Enabled Tools": "Outils activés", - "Enables audit log, custom rate limits, conversation history, and other management features for the AI Copilot assistant.": "Active le journal d'audit, les limites de débit personnalisées, l'historique des conversations et d'autres fonctionnalités de gestion pour l'assistant AI Copilot.", "Encoder Preset": "Préréglage de l'encodeur", "English, Spanish, French, etc.": "Anglais, espagnol, français, etc.", "Enhanced stability for live MPEG-TS streams with PVR clients like Kodi and HDHomeRun (only used when not using transcoding profiles).": "Stabilité améliorée pour les flux MPEG-TS en direct avec des clients PVR comme Kodi et HDHomeRun (utilisé uniquement lorsque vous n'utilisez pas de profils de transcodage).", - "Enter SMTP From Address": "Entrez l'adresse SMTP de", - "Enter SMTP Host": "Entrez l'hôte SMTP", - "Enter SMTP Password": "Entrez le mot de passe SMTP", - "Enter SMTP Port": "Entrez le port SMTP", - "Enter SMTP Username": "Entrez le nom d'utilisateur SMTP", - "Enter To Email Address": "Entrez l'adresse e-mail", - "Enter Token Name": "Entrez le nom du jeton", "Enter a group title": "Entrez un titre de groupe", "Enter a name for the new API token, and select the permissions it should have. Permissions can be changed later.": "Saisissez un nom pour le nouveau jeton API et sélectionnez les autorisations dont il doit disposer. Les autorisations peuvent être modifiées ultérieurement.", "Enter a number to define the sort order (e.g., 1, 2, 3). Lower numbers appear first.": "Entrez un nombre pour définir l'ordre de tri (par exemple, 1, 2, 3). Les nombres inférieurs apparaissent en premier.", "Enter a path on your server. This reads files from the server directly, not from your browser.": "Entrez un chemin sur votre serveur. Cela lit les fichiers directement depuis le serveur, pas depuis votre navigateur.", + "Entered your desired locale - if you\\'re not sure what to put here, look at your EPG source. If you see entries like \"CHANNEL.en\", then \"en\" would be a good choice if you prefer english. This is used when mapping the EPG to a playlist. If the EPG has multiple locales, this will be used as the preferred locale when a direct match is not found.": "Entrez les paramètres régionaux souhaités. Si vous ne savez pas quoi mettre ici, consultez votre source EPG. Si vous voyez des entrées telles que « CHANNEL.en », alors « en » serait un bon choix si vous préférez l'anglais. Ceci est utilisé lors du mappage de l’EPG à une liste de lecture. Si l'EPG comporte plusieurs paramètres régionaux, ceux-ci seront utilisés comme paramètres régionaux préférés lorsqu'aucune correspondance directe n'est trouvée.", "Enter movie name...": "Entrez le nom du film...", "Enter series name...": "Entrez le nom de la série...", - "Enter the URL of the XMLTV guide data. If this is a local file, you can enter a full or relative path. If changing URL, the guide data will be re-imported. Use with caution as this could lead to data loss if the new guide differs from the old one.": "Entrez l'URL des données du guide XMLTV. S'il s'agit d'un fichier local, vous pouvez saisir un chemin complet ou relatif. En cas de changement d'URL, les données du guide seront réimportées. À utiliser avec prudence car cela pourrait entraîner une perte de données si le nouveau guide diffère de l'ancien.", - "Enter the URL of the playlist file. If this is a local file, you can enter a full or relative path. If changing URL, the playlist will be re-imported. Use with caution as this could lead to data loss if the new playlist differs from the old one.": "Saisissez l'URL du fichier de playlist. S'il s'agit d'un fichier local, vous pouvez saisir un chemin complet ou relatif. En cas de changement d'URL, la playlist sera réimportée. À utiliser avec prudence car cela pourrait entraîner une perte de données si la nouvelle liste de lecture diffère de l'ancienne.", + "Enter SMTP From Address": "Entrez l'adresse SMTP de", + "Enter SMTP Host": "Entrez l'hôte SMTP", + "Enter SMTP Password": "Entrez le mot de passe SMTP", + "Enter SMTP Port": "Entrez le port SMTP", + "Enter SMTP Username": "Entrez le nom d'utilisateur SMTP", "Enter the archive path on your server. This reads the file directly, not from your browser.": "Entrez le chemin de l'archive sur votre serveur. Cela lit le fichier directement, et non depuis votre navigateur.", "Enter the full url, using : format - without trailing slash (/).": "Entrez l'URL complète, en utilisant le format : - sans barre oblique finale (/).", - "Enter the name of the EPG. Internal use only.": "Saisissez le nom de l'EPG. Usage interne uniquement.", "Enter the name of the alias. Internal use only.": "Saisissez le nom de l'alias. Usage interne uniquement.", + "Enter the name of the EPG. Internal use only.": "Saisissez le nom de l'EPG. Usage interne uniquement.", "Enter the name of the merged EPG. Internal use only.": "Saisissez le nom de l'EPG fusionné. Usage interne uniquement.", "Enter the name of the playlist. Internal use only.": "Entrez le nom de la liste de lecture. Usage interne uniquement.", + "Enter the URL of the playlist file. If this is a local file, you can enter a full or relative path. If changing URL, the playlist will be re-imported. Use with caution as this could lead to data loss if the new playlist differs from the old one.": "Saisissez l'URL du fichier de playlist. S'il s'agit d'un fichier local, vous pouvez saisir un chemin complet ou relatif. En cas de changement d'URL, la playlist sera réimportée. À utiliser avec prudence car cela pourrait entraîner une perte de données si la nouvelle liste de lecture diffère de l'ancienne.", + "Enter the URL of the XMLTV guide data. If this is a local file, you can enter a full or relative path. If changing URL, the guide data will be re-imported. Use with caution as this could lead to data loss if the new guide differs from the old one.": "Entrez l'URL des données du guide XMLTV. S'il s'agit d'un fichier local, vous pouvez saisir un chemin complet ou relatif. En cas de changement d'URL, les données du guide seront réimportées. À utiliser avec prudence car cela pourrait entraîner une perte de données si le nouveau guide diffère de l'ancien.", + "Enter To Email Address": "Entrez l'adresse e-mail", + "Enter Token Name": "Entrez le nom du jeton", "Enter words, symbols or prefixes to remove. Press Enter after each pattern.": "Saisissez les mots, symboles ou préfixes à supprimer. Appuyez sur Entrée après chaque modèle.", "Enter your TMDB API Key (v3 auth)": "Entrez votre clé API TMDB (authentification v3)", - "Entered your desired locale - if you\\'re not sure what to put here, look at your EPG source. If you see entries like \"CHANNEL.en\", then \"en\" would be a good choice if you prefer english. This is used when mapping the EPG to a playlist. If the EPG has multiple locales, this will be used as the preferred locale when a direct match is not found.": "Entrez les paramètres régionaux souhaités. Si vous ne savez pas quoi mettre ici, consultez votre source EPG. Si vous voyez des entrées telles que « CHANNEL.en », alors « en » serait un bon choix si vous préférez l'anglais. Ceci est utilisé lors du mappage de l’EPG à une liste de lecture. Si l'EPG comporte plusieurs paramètres régionaux, ceux-ci seront utilisés comme paramètres régionaux préférés lorsqu'aucune correspondance directe n'est trouvée.", "Ep #": "Épisode #", + "EPG": "EPG", + "EPG Cache is being generated": "Le cache EPG est en cours de génération", + "EPG Cache is being generated for selected EPGs": "Le cache EPG est généré pour les EPG sélectionnés", + "EPG Cache is being generated in the background. You will be notified when complete.": "Le cache EPG est généré en arrière-plan. Vous serez averti une fois terminé.", + "EPG Cache is being generated in the background for the selected EPGs. You will be notified when complete.": "Le cache EPG est généré en arrière-plan pour les EPG sélectionnés. Vous serez averti une fois terminé.", + "EPG Channel": "Chaîne EPG", + "EPG Channel mapping removed": "Mappage des canaux EPG supprimé", + "EPG Channels": "Chaînes EPG", + "EPG data for your Networks": "Données EPG pour vos réseaux", + "EPG File Cache Cleared": "Cache de fichier EPG effacé", + "EPG File Cache Not Found": "Cache de fichier EPG introuvable", + "EPG Information": "Informations EPG", + "EPG is being processed in the background. Depending on the size of the guide data, this may take a while. You will be notified on completion.": "L'EPG est traité en arrière-plan. En fonction de la taille des données du guide, cela peut prendre un certain temps. Vous serez informé à la fin.", + "EPG is being processed in the background. The view will update when complete.": "L'EPG est traité en arrière-plan. La vue sera mise à jour une fois terminée.", + "EPG is mapped": "L'EPG est mappé", + "EPG is not mapped": "L'EPG n'est pas mappé", + "EPG is processing": "L'EPG est en cours de traitement", + "EPG Map": "Carte EPG", + "EPG map disabled for selected channels": "Carte EPG désactivée pour les chaînes sélectionnées", + "EPG Mapped Channels": "Canaux mappés EPG", + "EPG Mapper: Apply Mappings": "EPG Mapper : appliquer des mappages", + "EPG Mapper: Channel Matcher": "Mappeur EPG : Matcheur de chaînes", + "EPG Mapper: Mapping State": "Mappeur EPG : état de mappage", + "EPG mapping restarted": "Le mappage EPG a redémarré", + "EPG mapping started": "Le mappage EPG a démarré", + "EPG map re-enabled for selected channels": "Carte EPG réactivée pour les chaînes sélectionnées", + "EPG Maps": "Cartes EPG", + "EPG Output": "Sortie EPG", + "EPG output options": "Options de sortie EPG", + "EPGs": "EPG", + "EPG Settings": "Paramètres EPG", + "EPG Shift": "Changement EPG", + "EPG Shift updated": "EPG Shift mis à jour", + "EPG Shift value": "Valeur de décalage EPG", + "EPG status has been reset.": "Le statut EPG a été réinitialisé.", + "EPG status reset": "Réinitialisation du statut EPG", + "EPG to Channel mapping": "Mappage EPG vers canal", + "EPG type": "Type EPG", + "EPG URL": "URL du guide EPG", "Episode Details": "Détails de l'épisode", "Episode Image": "Image de l'épisode", "Episode Metadata": "Métadonnées de l'épisode", "Episode Number": "Numéro de l'épisode", - "Episode Runtime": "Durée de l'épisode", - "Episode Title": "Titre de l'épisode", "Episode preview placeholder": "Espace réservé pour l'aperçu de l'épisode", + "Episode Runtime": "Durée de l'épisode", "Episode runtime in minutes.": "Durée de l'épisode en minutes.", "Episodes": "Épisodes", "Episodes added": "Épisodes ajoutés", "Episodes added successfully": "Épisodes ajoutés avec succès", + "Episode Title": "Titre de l'épisode", "Error": "Erreur", + "Errors": "Erreurs", "Error Sending Test Email": "Erreur lors de l'envoi de l'e-mail de test", "Error stopping stream.": "Erreur lors de l'arrêt du flux.", "Error triggering failover.": "Erreur lors du déclenchement du basculement.", - "Errors": "Erreurs", "Etc/UTC": "Etc/UTC", - "Event Triggers": "Déclencheurs d'événements", "Events that automatically run this plugin in the background.": "Événements qui exécutent automatiquement ce plugin en arrière-plan.", + "Event Triggers": "Déclencheurs d'événements", "Exact Match Distance": "Distance de correspondance exacte", "Exclude disabled groups from master selection": "Exclure les groupes désactivés de la sélection principale", "Execution is now disabled until an administrator reviews and trusts this plugin again.": "L'exécution est désormais désactivée jusqu'à ce qu'un administrateur examine et fasse à nouveau confiance à ce plugin.", @@ -723,46 +767,54 @@ "Export channels to a CSV or XLSX file. NOTE: Only enabled channels will be exported.": "Exportez les chaînes vers un fichier CSV ou XLSX. REMARQUE : Seules les chaînes activées seront exportées.", "Export name": "Nom de l'exportation", "Export variables": "Exporter des variables", - "FFmpeg Template": "Modèle FFmpeg", "Failed": "Échoué", "Failed playlists cleared": "Listes de lecture ayant échoué effacées", - "Failed to Start": "Échec du démarrage", "Failed to add lineup": "Échec de l'ajout de la programmation", "Failed to apply TMDB selection.": "Échec de l'application de la sélection TMDB.", + "Failed to fetch lineups": "Échec de la récupération des files d'attente", "Failed to fetch TMDB data for this movie.": "Échec de la récupération des données TMDB pour ce film.", "Failed to fetch TMDB data for this series.": "Échec de la récupération des données TMDB pour cette série.", - "Failed to fetch lineups": "Échec de la récupération des files d'attente", "Failed to refresh release logs": "Échec de l'actualisation des journaux de version", + "Failed to Start": "Échec du démarrage", "Failover": "Basculement", "Failover & Recovery": "Basculement et récupération", "Failover Channel": "Canal de basculement", "Failover Channels": "Canaux de basculement", + "Failover groups will be re-scored in the background. You can keep using the app while this runs.": "Les groupes de basculement seront réévalués en arrière-plan. Vous pouvez continuer à utiliser l'application pendant son exécution.", "Failover Playlist": "Liste de lecture de basculement", + "Failover Ranking": "Classement de basculement", + "Failover Rescoring": "Réévaluation du basculement", + "Failover rescoring queued": "Réévaluation du basculement en file d'attente", "Failovers": "Basculements", + "Failovers ranked by score. Stored from the last merge or rescore — click \"Rescore now\" to recalculate against current stream stats.": "Basculements classés par score. Stocké à partir de la dernière fusion ou nouvelle évaluation : cliquez sur \"Rescore maintenant\" pour recalculer par rapport aux statistiques de flux actuelles.", + "Failovers will be re-scored in the background. Refresh this page in a moment to see the updated ranking.": "Les basculements seront réévalués en arrière-plan. Actualisez cette page dans un instant pour voir le classement mis à jour.", "Fetch & Install": "Récupérer et installer", "Fetch & Update": "Récupérer et mettre à jour", - "Fetch IDs for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "Récupérer les identifiants de toutes les séries de playlists activées ? S'il est désactivé, il ne sera récupéré que pour les séries de la liste de lecture sélectionnée.", - "Fetch IDs now": "Récupérer les identifiants maintenant", - "Fetch Metadata": "Récupérer les métadonnées", - "Fetch Series Metadata": "Récupérer les métadonnées de la série", - "Fetch Series metadata for this playlist now? Only enabled Series will be included.": "Récupérer les métadonnées de la série pour cette playlist maintenant ? Seules les séries activées seront incluses.", - "Fetch TMDB IDs": "Récupérer les identifiants TMDB", - "Fetch TMDB, TVDB, and IMDB IDs for this series from The Movie Database.": "Récupérez les identifiants TMDB, TVDB et IMDB pour cette série à partir de The Movie Database.", - "Fetch TMDB/TVDB IDs": "Récupérer les identifiants TMDB/TVDB", - "Fetch VOD Metadata": "Récupérer les métadonnées VOD", - "Fetch VOD metadata for this playlist now? Only enabled VOD channels will be included.": "Récupérer les métadonnées VOD de cette playlist maintenant ? Seules les chaînes VOD activées seront incluses.", "Fetch and process VOD metadata for the group channels.": "Récupérez et traitez les métadonnées VOD pour les chaînes du groupe.", - "Fetch and process VOD metadata for the selected Playlist? Only enabled VOD channels will be processed.": "Récupérer et traiter les métadonnées VOD pour la playlist sélectionnée ? Seules les chaînes VOD activées seront traitées.", "Fetch and process VOD metadata for the selected channel.": "Récupérez et traitez les métadonnées VOD pour la chaîne sélectionnée.", "Fetch and process VOD metadata for the selected channels? Only enabled VOD channels will be processed.": "Récupérer et traiter les métadonnées VOD pour les chaînes sélectionnées ? Seules les chaînes VOD activées seront traitées.", "Fetch and process VOD metadata for the selected group channels.": "Récupérez et traitez les métadonnées VOD pour les chaînes du groupe sélectionnées.", + "Fetch and process VOD metadata for the selected Playlist? Only enabled VOD channels will be processed.": "Récupérer et traiter les métadonnées VOD pour la playlist sélectionnée ? Seules les chaînes VOD activées seront traitées.", "Fetch by category": "Récupérer par catégorie", - "Fetch metadata": "Récupérer les métadonnées", - "Fetch metadata for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "Récupérer les métadonnées de toutes les séries de playlists activées ? S'il est désactivé, il ne sera récupéré que pour les séries de la liste de lecture sélectionnée.", "Fetches episode metadata for enabled series after each sync. Required for stream file sync.": "Récupère les métadonnées des épisodes pour les séries activées après chaque synchronisation. Requis pour la synchronisation des fichiers de flux.", + "Fetch IDs for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "Récupérer les identifiants de toutes les séries de playlists activées ? S'il est désactivé, il ne sera récupéré que pour les séries de la liste de lecture sélectionnée.", + "Fetch IDs now": "Récupérer les identifiants maintenant", "Fetching VOD metadata for channel": "Récupération des métadonnées VOD pour la chaîne", "Fetching VOD metadata for playlist": "Récupération des métadonnées VOD pour la playlist", "Fetching VOD metadata for selected group channels": "Récupération des métadonnées VOD pour les chaînes du groupe sélectionné", + "Fetch Metadata": "Récupérer les métadonnées", + "Fetch metadata": "Récupérer les métadonnées", + "Fetch metadata for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "Récupérer les métadonnées de toutes les séries de playlists activées ? S'il est désactivé, il ne sera récupéré que pour les séries de la liste de lecture sélectionnée.", + "Fetch Series Metadata": "Récupérer les métadonnées de la série", + "Fetch Series metadata for this playlist now? Only enabled Series will be included.": "Récupérer les métadonnées de la série pour cette playlist maintenant ? Seules les séries activées seront incluses.", + "Fetch TMDB, TVDB, and IMDB IDs for this series from The Movie Database.": "Récupérez les identifiants TMDB, TVDB et IMDB pour cette série à partir de The Movie Database.", + "Fetch TMDB/TVDB IDs": "Récupérer les identifiants TMDB/TVDB", + "Fetch TMDB IDs": "Récupérer les identifiants TMDB", + "Fetch VOD Metadata": "Récupérer les métadonnées VOD", + "Fetch VOD metadata for this playlist now? Only enabled VOD channels will be included.": "Récupérer les métadonnées VOD de cette playlist maintenant ? Seules les chaînes VOD activées seront incluses.", + "FFmpeg arguments for transcoding. Use placeholders like {crf|23} for configurable parameters with defaults. Hardware acceleration will be applied automatically by the proxy server.": "Arguments FFmpeg pour le transcodage. Utilisez des espaces réservés comme {crf|23} pour les paramètres configurables avec les valeurs par défaut. L'accélération matérielle sera appliquée automatiquement par le serveur proxy.", + "FFmpeg re-encodes the stream. Streamlink and yt-dlp extract and deliver streams directly from supported platforms (Twitch, YouTube, etc.) without re-encoding.": "FFmpeg réencode le flux. Streamlink et yt-dlp extraient et diffusent des flux directement à partir des plateformes prises en charge (Twitch, YouTube, etc.) sans réencodage.", + "FFmpeg Template": "Modèle FFmpeg", "Field": "Champ", "Field to check condition against.": "Champ pour vérifier l’état.", "File": "Déposer", @@ -772,42 +824,43 @@ "Filename metadata": "Métadonnées du nom de fichier", "Files": "Fichiers", "Files Changed": "Fichiers modifiés", - "Filter to a specific group within the playlist. Omit to show all groups.": "Filtrez sur un groupe spécifique dans la liste de lecture. Omettre pour afficher tous les groupes.", "Filters": "Filtres", + "Filter to a specific group within the playlist. Omit to show all groups.": "Filtrez sur un groupe spécifique dans la liste de lecture. Omettre pour afficher tous les groupes.", "Find & Replace": "Rechercher et remplacer", - "Find & Replace Rules": "Rechercher et remplacer des règles", "Find & Replace reset started": "La réinitialisation de Rechercher et remplacer a commencé", "Find & Replace reset working in the background. You will be notified once the process is complete.": "La réinitialisation Rechercher et remplacer fonctionne en arrière-plan. Vous serez averti une fois le processus terminé.", + "Find & Replace Rules": "Rechercher et remplacer des règles", "Find & Replace started": "Rechercher et remplacer démarré", "Find & Replace working in the background. You will be notified once the process is complete.": "Rechercher et remplacer en arrière-plan. Vous serez averti une fois le processus terminé.", "Finished": "Fini", "Focus run": "Course de concentration", - "Force Sync Channels": "Forcer les canaux de synchronisation", "Force complete re-merge": "Forcer la refusion complète", "Force password change on next login": "Forcer le changement de mot de passe à la prochaine connexion", + "Force Sync Channels": "Forcer les canaux de synchronisation", "Format": "Format", "Format applied to dates throughout the application (e.g. next sync, last synced).": "Format appliqué aux dates dans toute l'application (par exemple, prochaine synchronisation, dernière synchronisation).", + "Format Selector & Options": "Sélecteur de format et options", "Found and loaded :count plugin(s).": "Trouvé et chargé :count plugin(s).", "Frame rate": "Fréquence d'images", "From the selected channels": "À partir des chaînes sélectionnées", "Full cast information.": "Informations complètes sur le casting.", - "GET/POST variables": "Variables GET/POST", "Gap Between Programmes": "Écart entre les programmes", "General": "Général", "General Settings": "Paramètres généraux", "Generate": "Générer", + "Generate a new plugin scaffold with all the files you need to get started.": "Générez un nouvel échafaudage de plugins avec tous les fichiers dont vous avez besoin pour commencer.", "Generate Cache": "Générer du cache", "Generate Default Profiles": "Générer des profils par défaut", "Generate EPG Cache now? This will create a cache for the EPG data.": "Générer le cache EPG maintenant ? Cela créera un cache pour les données EPG.", "Generate NFO files": "Générer des fichiers NFO", - "Generate Schedule": "Générer un calendrier", - "Generate Schedules": "Générer des horaires", - "Generate a new plugin scaffold with all the files you need to get started.": "Générez un nouvel échafaudage de plugins avec tous les fichiers dont vous avez besoin pour commencer.", "Generate only plugin.json and Plugin.php — skip README, CI workflow, scripts, and AI guidance files.": "Générez uniquement plugin.json et Plugin.php – ignorez README, le flux de travail CI, les scripts et les fichiers de guidage IA.", "Generates .strm files for enabled series after metadata fetch completes. Requires \"Fetch metadata\" to be enabled.": "Génère des fichiers .strm pour les séries activées une fois la récupération des métadonnées terminée. Nécessite que « Récupérer les métadonnées » soit activé.", + "Generate Schedule": "Générer un calendrier", + "Generate Schedules": "Générer des horaires", "Genre": "Genre", "Genre Handling": "Gestion des genres", "Genre of the content.": "Genre du contenu.", + "GET/POST variables": "Variables GET/POST", "Get API Key": "Obtenir la clé API", "Get Available Tools": "Obtenez les outils disponibles", "Get from playlist status": "Obtenir du statut de la playlist", @@ -819,44 +872,40 @@ "Global Tools": "Outils mondiaux", "Gracenote station ID": "Identifiant de la station Gracenote", "Group": "Groupe", + "group-title": "titre-groupe", "Group Assignment": "Attribution de groupe", - "Group Details": "Détails du groupe", - "Group Name": "Nom du groupe", - "Group Priority Weights": "Pondérations de priorité de groupe", - "Group Settings": "Paramètres du groupe", "Group channels added to custom playlist": "Chaînes de groupe ajoutées à la liste de lecture personnalisée", "Group channels disabled": "Canaux de groupe désactivés", "Group channels enabled": "Canaux de groupe activés", "Group created": "Groupe créé", + "Group Details": "Détails du groupe", + "Group Name": "Nom du groupe", "Group name used in the M3U playlist. Defaults to \"Networks\" if left empty.": "Nom du groupe utilisé dans la playlist M3U. La valeur par défaut est \"Réseaux\" si elle est laissée vide.", + "Group Priority Weights": "Pondérations de priorité de groupe", "Groups": "Groupes", "Groups and Streams to Import": "Groupes et flux à importer", + "Group Settings": "Paramètres du groupe", "Groups only": "Groupes uniquement", "Guide Refreshed": "Guide actualisé", - "HDHR Base URL": "URL de base HDHR", - "HDHR/Xtream API Streams": "Flux d'API HDHR/Xtream", - "HDHomeRun URL": "URL HDHomeRun", - "HLS Playlist URL": "URL de la liste de lecture HLS", - "HLS provides better compatibility": "HLS offre une meilleure compatibilité", - "HLS segment length (6s recommended)": "Longueur du segment HLS (6 s recommandé)", - "HTTP Headers (optional)": "En-têtes HTTP (facultatif)", - "HTTP Port": "Port HTTP", - "HTTP response codes that should mark a playlist as temporarily unavailable. All channels from the affected playlist will be skipped during failover resolution.": "Codes de réponse HTTP qui doivent marquer une playlist comme temporairement indisponible. Toutes les chaînes de la liste de lecture concernée seront ignorées lors de la résolution du basculement.", - "HTTP status codes": "Codes d'état HTTP", - "HTTPS Port": "Port HTTPS", "Hardware Acceleration": "Accélération matérielle", + "Has metadata": "Possède des métadonnées", "Has TMDB/IMDB ID": "Possède un identifiant TMDB/IMDB", "Has TMDB/TVDB/IMDB ID": "Possède un identifiant TMDB/TVDB/IMDB", - "Has metadata": "Possède des métadonnées", + "HDHomeRun URL": "URL HDHomeRun", + "HDHR/Xtream API Streams": "Flux d'API HDHR/Xtream", + "HDHR Base URL": "URL de base HDHR", "Header": "En-tête", "Header name": "Nom de l'en-tête", - "Header value": "Valeur d'en-tête", "Headers": "En-têtes", + "Header value": "Valeur d'en-tête", "Healthy": "En bonne santé", "Help support this project by donating! Any amount is appreciated.": "Aidez à soutenir ce projet en faisant un don ! Tout montant est apprécié.", "High-Risk Permissions": "Autorisations à haut risque", "Higher weight = more likely to appear when shuffling": "Poids plus élevé = plus susceptible d'apparaître lors du mélange", "Hint for proxy to enable hardware acceleration if available": "Astuce pour le proxy pour activer l'accélération matérielle si disponible", + "HLS Playlist URL": "URL de la liste de lecture HLS", + "HLS provides better compatibility": "HLS offre une meilleure compatibilité", + "HLS segment length (6s recommended)": "Longueur du segment HLS (6 s recommandé)", "Hooks": "Crochets", "Host / IP Address": "Hôte/Adresse IP", "How content is ordered in the schedule. Manual lets you place items on a visual timeline.": "Comment le contenu est ordonné dans le planning. Manuel vous permet de placer des éléments sur une chronologie visuelle.", @@ -868,13 +917,20 @@ "How the manual schedule repeats across the schedule window": "Comment la planification manuelle se répète dans la fenêtre de planification", "How to handle content with multiple genres": "Comment gérer du contenu avec plusieurs genres", "How you would like to ID your channels in the EPG.": "Comment souhaitez-vous identifier vos chaînes dans l'EPG.", - "I understand, clear now": "Je comprends, c'est clair maintenant", - "I understand, reset now": "Je comprends, réinitialise maintenant", - "ID": "IDENTIFIANT", - "IMDB ID": "Identifiant IMDB", - "ISO country code for the DVR guide (e.g. us, de, gb).": "Code pays ISO pour le guide DVR (par exemple us, de, gb).", - "ISO language code for the DVR guide (e.g. en, de, fr).": "Code de langue ISO pour le guide DVR (par exemple en, de, fr).", + "http://192.168.0.123:36400": "http://192.168.0.123:36400", + "HTTP Headers (optional)": "En-têtes HTTP (facultatif)", + "HTTP Port": "Port HTTP", + "HTTP response codes that should mark a playlist as temporarily unavailable. All channels from the affected playlist will be skipped during failover resolution.": "Codes de réponse HTTP qui doivent marquer une playlist comme temporairement indisponible. Toutes les chaînes de la liste de lecture concernée seront ignorées lors de la résolution du basculement.", + "https://example.com/backdrop.jpg": "https://example.com/backdrop.jpg", + "https://example.com/cover.jpg": "https://exemple.com/cover.jpg", + "https://example.com/logo.png": "https://exemple.com/logo.png", + "https://example.com/poster.jpg": "https://exemple.com/poster.jpg", + "https://www.kinopoisk.ru/film/123456/": "https://www.kinopoisk.ru/film/123456/", + "https://www.youtube.com/watch?v=abc123": "https://www.youtube.com/watch?v=abc123", + "HTTPS Port": "Port HTTPS", + "HTTP status codes": "Codes d'état HTTP", "Icon": "Icône", + "ID": "IDENTIFIANT", "Idle Streams": "Flux inactifs", "If enabled, all series in the selected category will be imported. Use with caution as this will make a lot of requests to your provider to fetch metadata and episodes. It is recomended to import only the series you want to watch. You can also enable the series option on your playlist under the \"Groups and Streams to Import\" to import all the base data for all available series.": "Si cette option est activée, toutes les séries de la catégorie sélectionnée seront importées. À utiliser avec prudence, car cela entraînera de nombreuses requêtes auprès de votre fournisseur pour récupérer des métadonnées et des épisodes. Il est recommandé d'importer uniquement les séries que vous souhaitez regarder. Vous pouvez également activer l'option série sur votre playlist sous « Groupes et flux à importer » pour importer toutes les données de base de toutes les séries disponibles.", "If enabled, the User Agent will also be used for fetching playlist files. Otherwise, the default FFmpeg User Agent is used for playlists.": "S'il est activé, l'agent utilisateur sera également utilisé pour récupérer les fichiers de playlist. Sinon, l'agent utilisateur FFmpeg par défaut est utilisé pour les listes de lecture.", @@ -886,41 +942,42 @@ "If you have MediaFlow Proxy installed, you can use it to proxy your m3u editor playlist streams. When enabled, the app will auto-generate URLs for you to use via MediaFlow Proxy.": "Si MediaFlow Proxy est installé, vous pouvez l'utiliser pour proxy les flux de playlist de votre éditeur m3u. Lorsqu'elle est activée, l'application générera automatiquement des URL que vous pourrez utiliser via MediaFlow Proxy.", "If your provider supports EPG, you can import it automatically.": "Si votre fournisseur prend en charge EPG, vous pouvez l'importer automatiquement.", "Ignored file types": "Types de fichiers ignorés", - "Image URL": "URL de l'image", "Images only": "Images uniquement", + "Image URL": "URL de l'image", + "IMDB ID": "Identifiant IMDB", "Img": "Img", "Implementation": "Mise en œuvre", - "Import Metadata": "Importer des métadonnées", "Import All Series": "Importer toutes les séries", "Import Channels": "Canaux d'importation", + "Import channels from a CSV or XLSX file.": "Importez des chaînes à partir d'un fichier CSV ou XLSX.", "Import EPG": "Importer un EPG", + "Import Metadata": "Importer des métadonnées", "Import Movies": "Importer des films", "Import Series": "Série d'importation", "Import Series Episodes & Metadata": "Importer des épisodes et des métadonnées de séries", "Import Settings": "Paramètres d'importation", - "Import channels from a CSV or XLSX file.": "Importez des chaînes à partir d'un fichier CSV ou XLSX.", "In-App Player Transcoding": "Transcodage du lecteur intégré à l'application", "Include Files": "Inclure des fichiers", - "Include Metadata": "Inclure les métadonnées", - "Include VOD": "Inclure la VOD", - "Include VOD channels in the scrub.": "Incluez les chaînes VOD dans le gommage.", - "Include VOD in M3U output": "Inclure la VOD dans la sortie M3U", "Include lifecycle hook": "Inclure un crochet de cycle de vie", "Include logos in proxy URL override": "Inclure des logos dans le remplacement de l'URL du proxy", + "Include Metadata": "Inclure les métadonnées", "Include series in M3U output": "Inclure les séries dans la sortie M3U", "Includes VOD": "Inclut la VOD", + "Include VOD": "Inclure la VOD", + "Include VOD channels in the scrub.": "Incluez les chaînes VOD dans le gommage.", + "Include VOD in M3U output": "Inclure la VOD dans la sortie M3U", "Indicates the shift of the program schedule, use the values -2,-1,0,1,2,.. and so on.": "Indique le décalage de la grille du programme, utilisez les valeurs -2,-1,0,1,2,.. et ainsi de suite.", "Info": "Informations", "Information about the last sync operation": "Informations sur la dernière opération de synchronisation", "Input Stream Format": "Format du flux d'entrée", "Install": "Installer", "Install And Trust": "Installer et faire confiance", - "Install failed": "L'installation a échoué", - "Install latest release from GitHub": "Installer la dernière version de GitHub", "Installed": "Installé", "Installed Plugins": "Plugins installés", "Installed plugins that passed validation, are trusted, and haven't been modified.": "Les plugins installés qui ont réussi la validation, sont fiables et n'ont pas été modifiés.", "Installed plugins with a newer version available on GitHub.": "Plugins installés avec une version plus récente disponible sur GitHub.", + "Install failed": "L'installation a échoué", + "Install latest release from GitHub": "Installer la dernière version de GitHub", "Installs": "Installations", "Integration EPG URL": "URL EPG d’intégration", "Integration Playlist URL": "URL de la liste de lecture d'intégration", @@ -931,18 +988,23 @@ "Invalid Time": "Heure invalide", "Invalid timeout (minutes)": "Délai d'expiration non valide (minutes)", "Invocation": "Invocation", + "ISO country code for the DVR guide (e.g. us, de, gb).": "Code pays ISO pour le guide DVR (par exemple us, de, gb).", + "ISO language code for the DVR guide (e.g. en, de, fr).": "Code de langue ISO pour le guide DVR (par exemple en, de, fr).", "Item Details": "Détails de l'article", - "Item Name": "Nom de l'article", "Item is added": "L'article est ajouté", "Item is removed": "L'élément est supprimé", - "Item type": "Type d'article", + "Item Name": "Nom de l'article", "Items": "Articles", "Items per page (default: 15, max: 50)": "Éléments par page (par défaut : 15, maximum : 50)", - "JSON object containing key-value pairs for an update action.": "Objet JSON contenant des paires clé-valeur pour une action de mise à jour.", + "Item type": "Type d'article", + "I understand, clear now": "Je comprends, c'est clair maintenant", + "I understand, reset now": "Je comprends, réinitialise maintenant", "Jellyfin": "Jellyfin", "John Doe, Jane Smith": "John Doe, Jane Smith", "Join us on Discord": "Rejoignez-nous sur Discord", + "JSON object containing key-value pairs for an update action.": "Objet JSON contenant des paires clé-valeur pour une action de mise à jour.", "Keep cache permanently (disable expiry cleanup)": "Conserver le cache en permanence (désactiver le nettoyage à l'expiration)", + "Keeps failover ordering in sync with current stream quality. Affects three places: scheduled rescoring (the interval below), the per-channel \"Rescore now\" action, and the \"Make smart channel\" bulk action. The Priority Order under Auto-Merge above is reused for the actual scoring in all three.": "Maintient l’ordre de basculement en synchronisation avec la qualité actuelle du flux. Affecte trois emplacements : la nouvelle évaluation planifiée (l'intervalle ci-dessous), l'action « Réenregistrer maintenant » par canal et l'action groupée « Créer une chaîne intelligente ». L'ordre de priorité sous Fusion automatique ci-dessus est réutilisé pour le score réel dans les trois.", "Kinopoisk Rating Count": "Nombre de notes Kinopoisk", "Kinopoisk URL": "URL du Kinopoisk", "Label": "Étiquette", @@ -950,17 +1012,17 @@ "Language Code": "Code de langue", "Last Channels Checked": "Dernières chaînes vérifiées", "Last Dead Links": "Derniers liens morts", - "Last Ran": "Dernière course", - "Last Runtime": "Dernière exécution", - "Last Sync Stats": "Statistiques de la dernière synchronisation", - "Last Synced": "Dernière synchronisation", - "Last Watched": "Dernier visionné", "Last heartbeat": "Dernier battement de coeur", - "Last probe returned no data — the stream may have been unreachable.": "La dernière sonde n'a renvoyé aucune donnée : le flux était peut-être inaccessible.", "Last probed": "Dernière sonde", + "Last probe returned no data — the stream may have been unreachable.": "La dernière sonde n'a renvoyé aucune donnée : le flux était peut-être inaccessible.", + "Last Ran": "Dernière course", "Last ran": "Dernière exécution", + "Last Runtime": "Dernière exécution", "Last sync :date": "Dernière synchronisation :date", + "Last Synced": "Dernière synchronisation", + "Last Sync Stats": "Statistiques de la dernière synchronisation", "Last validation": "Dernière validation", + "Last Watched": "Dernier visionné", "Latest persisted log messages for this run.": "Derniers messages de journal persistants pour cette exécution.", "Latest version: :version": "Dernière version : :version", "Layout & Display Options": "Options de mise en page et d'affichage", @@ -969,18 +1031,19 @@ "Leave blank to keep the current password": "Laisser vide pour conserver le mot de passe actuel", "Leave blank to use the same provider as the primary account.": "Laissez vide pour utiliser le même fournisseur que le compte principal.", "Leave empty for direct stream proxying": "Laisser vide pour le proxy de flux direct", - "Leave empty to disable .strm file generation for VOD. Priority: VOD > Group > Global.": "Laissez vide pour désactiver la génération de fichiers .strm pour la VOD. Priorité : VOD > Groupe > Global.", + "Leave empty to copy the highest-scoring source's title.": "Laissez vide pour copier le titre de la source ayant obtenu le score le plus élevé.", "Leave empty to disable .strm file generation for series. Priority: Series > Category > Global.": "Laissez vide pour désactiver la génération de fichiers .strm pour les séries. Priorité : Série > Catégorie > Global.", + "Leave empty to disable .strm file generation for VOD. Priority: VOD > Group > Global.": "Laissez vide pour désactiver la génération de fichiers .strm pour la VOD. Priorité : VOD > Groupe > Global.", "Leave empty to remove": "Laisser vide pour supprimer", "Leave empty to remove custom poster URL and use placeholder fallback.": "Laissez vide pour supprimer l’URL de l’affiche personnalisée et utiliser l’espace réservé de remplacement.", "Leave empty to remove the custom logo and use provider/EPG logo.": "Laissez vide pour supprimer le logo personnalisé et utiliser le logo du fournisseur/EPG.", "Leave empty to remove the logo.": "Laissez vide pour supprimer le logo.", "Leave empty to use default value.": "Laissez vide pour utiliser la valeur par défaut.", - "Leave empty to use provider URL.": "Laissez vide pour utiliser l’URL du fournisseur.", "Leave empty to use provider display name.": "Laissez vide pour utiliser le nom d’affichage du fournisseur.", "Leave empty to use provider icon.": "Laissez vide pour utiliser l’icône du fournisseur.", "Leave empty to use provider logo.": "Laissez vide pour utiliser le logo du fournisseur.", "Leave empty to use provider name.": "Laissez vide pour utiliser le nom du fournisseur.", + "Leave empty to use provider URL.": "Laissez vide pour utiliser l’URL du fournisseur.", "Leave empty to use the default.": "Laissez vide pour utiliser la valeur par défaut.", "Level": "Niveau", "Libraries": "Bibliothèques", @@ -989,23 +1052,25 @@ "Libraries to Import": "Bibliothèques à importer", "Library Name": "Nom de la bibliothèque", "Library Selection": "Sélection de bibliothèque", + "libx264": "libx264", "Lifecycle": "Cycle de vie", "Lineup": "S'aligner", "Lineup added successfully!": "Programmation ajoutée avec succès !", "Links": "Links", + "List of allowed domains (supports wildcards, e.g. *.example.com*). Press [tab] or [return] to add item. When set, playlist URLs must match one of these patterns.": "Liste des domaines autorisés (prend en charge les caractères génériques, par exemple *.example.com*). Appuyez sur [tab] ou [return] pour ajouter un élément. Lorsqu'elles sont définies, les URL de playlist doivent correspondre à l'un de ces modèles.", "List Pages": "Pages de liste", "List Resources": "Liste des ressources", "List Widgets": "Liste des widgets", - "List of allowed domains (supports wildcards, e.g. *.example.com*). Press [tab] or [return] to add item. When set, playlist URLs must match one of these patterns.": "Liste des domaines autorisés (prend en charge les caractères génériques, par exemple *.example.com*). Appuyez sur [tab] ou [return] pour ajouter un élément. Lorsqu'elles sont définies, les URL de playlist doivent correspondre à l'un de ces modèles.", "Live": "En direct", "Live Activity Feed": "Flux d'activité en direct", + "Live channel groups": "Groupes de chaînes en direct", + "Live channel processing": "Traitement des canaux en direct", "Live Channels": "Chaînes en direct", + "Live groups to import": "Groupes en direct à importer", + "Live streaming (optional)": "Diffusion en direct (facultatif)", "Live Streaming Profile": "Profil de diffusion en direct", "Live Sync": "Synchronisation en direct", "Live TV": "Télévision en direct", - "Live channel processing": "Traitement des canaux en direct", - "Live groups to import": "Groupes en direct à importer", - "Live streaming (optional)": "Diffusion en direct (facultatif)", "Load Avg": "Charge moyenne", "Load saved pattern": "Charger le motif enregistré", "Local": "Locale", @@ -1019,154 +1084,146 @@ "Login as this user": "Connectez-vous en tant qu'utilisateur", "Logo": "Logo", "Logo Cache": "Cache de logos", - "Logo Override": "Remplacement du logo", - "Logo URL": "URL du logo", "Logo cache cleared": "Cache du logo vidé", "Logo image": "Image du logo", - "Logo override URL": "URL de remplacement du logo", + "Logo Override": "Remplacement du logo", "Logo override updated": "Remplacement du logo mis à jour", + "Logo override URL": "URL de remplacement du logo", "Logo placeholder": "Espace réservé au logo", "Logo repository refreshed": "Référentiel de logos actualisé", "Logo updated": "Logo mis à jour", + "Logo URL": "URL du logo", "Loop Content": "Contenu de la boucle", "Lower = tried first": "Inférieur = essayé en premier", "M3U": "avec", + "m3u editor proxy url.": "URL proxy de l'éditeur m3u.", + "M3U playlist containing all your Networks as live channels": "Playlist M3U contenant tous vos réseaux sous forme de chaînes en direct", "M3U Playlist URL": "URL de la liste de lecture M3U", "M3U Proxy Stream Monitor": "Moniteur de flux proxy M3U", "M3U URL": "URL M3U", - "M3U playlist containing all your Networks as live channels": "Playlist M3U contenant tous vos réseaux sous forme de chaînes en direct", - "MPAA Rating": "Classement MPAA", - "MPAA rating classification.": "Classement MPAA.", "Main actors in the content.": "Principaux acteurs du contenu.", "Make log files viewable": "Rendre les fichiers journaux visibles", + "Make smart channel": "Créer une chaîne intelligente", "Manage": "Gérer", "Manage API Tokens": "Gérer les jetons API", "Manage Assets": "Gérer les actifs", "Manage Backups": "Gérer les sauvegardes", - "Manage Plex libraries and trigger scans.": "Gérez les bibliothèques Plex et déclenchez des analyses.", - "Manage Profiles": "Gérer les profils", - "Manage Stream File Settings": "Gérer les paramètres des fichiers de flux", - "Manage VOD groups.": "Gérer les groupes VOD.", "Manage cached logos and uploaded media assets. Placeholder images can be updated in Settings > Assets.": "Gérez les logos mis en cache et les ressources multimédias téléchargées. Les images d’espace réservé peuvent être mises à jour dans Paramètres > Actifs.", "Manage installed plugins, review new installs, and check security status from one place.": "Gérez les plugins installés, examinez les nouvelles installations et vérifiez l'état de sécurité à partir d'un seul endroit.", "Manage live groups.": "Gérez les groupes en direct.", "Manage logo cache behavior and storage used by logo proxy URLs.": "Gérez le comportement du cache de logo et le stockage utilisé par les URL de proxy de logo.", "Manage playlist links and URL options.": "Gérez les liens de playlist et les options d'URL.", + "Manage Plex libraries and trigger scans.": "Gérez les bibliothèques Plex et déclenchez des analyses.", + "Manage Profiles": "Gérer les profils", "Manage series categories. Only enabled series will be automatically updated on Playlist sync, this includes fetching episodes and metadata. You can also manually sync series to update episodes and metadata.": "Gérer les catégories de séries. Seules les séries activées seront automatiquement mises à jour lors de la synchronisation de la playlist, cela inclut la récupération des épisodes et des métadonnées. Vous pouvez également synchroniser manuellement les séries pour mettre à jour les épisodes et les métadonnées.", + "Manages M3U playlists, including live streams, VOD, and series. Supports Xtream API.": "Gère les listes de lecture M3U, y compris les flux en direct, la VOD et les séries. Prend en charge l'API Xtream.", + "Manage Stream File Settings": "Gérer les paramètres des fichiers de flux", "Manage users that can access and use the application. Each user will have their own playlists, channels, series, and other resources. Some features may be restricted based on user roles (such as global settings).": "Gérez les utilisateurs qui peuvent accéder et utiliser l'application. Chaque utilisateur aura ses propres listes de lecture, chaînes, séries et autres ressources. Certaines fonctionnalités peuvent être restreintes en fonction des rôles d'utilisateur (tels que les paramètres globaux).", + "Manage VOD groups.": "Gérer les groupes VOD.", "Manage your API tokens. Tokens allow you to authenticate API requests for certain API actions.": "Gérez vos jetons API. Les jetons vous permettent d'authentifier les requêtes API pour certaines actions API.", "Manage your Plex server directly from m3u-editor — register DVR tuners, monitor sessions, and control libraries.": "Gérez votre serveur Plex directement depuis m3u-editor : enregistrez les tuners DVR, surveillez les sessions et contrôlez les bibliothèques.", - "Manages M3U playlists, including live streams, VOD, and series. Supports Xtream API.": "Gère les listes de lecture M3U, y compris les flux en direct, la VOD et les séries. Prend en charge l'API Xtream.", "Manual": "Manuel", - "Manual TMDB Search": "Recherche manuelle dans la TMDB", - "Manual actions available from the page header.": "Actions manuelles disponibles depuis l'en-tête de la page.", "Manual actions, hook-triggered automation, and scheduled jobs. Open a run to inspect payload, metrics, and live activity.": "Actions manuelles, automatisation déclenchée par hook et tâches planifiées. Ouvrez une exécution pour inspecter la charge utile, les métriques et l'activité en direct.", + "Manual actions available from the page header.": "Actions manuelles disponibles depuis l'en-tête de la page.", "Manually restart this EPG mapping? This will restart the existing mapping process.": "Redémarrer manuellement ce mappage EPG ? Cela redémarrera le processus de mappage existant.", "Manually trigger this EPG mapping to run again. This will not modify the \"Recurring\" setting.": "Déclenchez manuellement la réexécution de ce mappage EPG. Cela ne modifiera pas le paramètre « Récurrent ».", "Manually trigger this scrubber to run.": "Déclenchez manuellement l’exécution de ce nettoyeur.", + "Manual TMDB Search": "Recherche manuelle dans la TMDB", "Map EPG to Playlist": "Mapper l'EPG à la liste de lecture", "Map EPG to selected": "Mapper l'EPG à la sélection", "Map now": "Carte maintenant", - "Map the selected EPG to the selected Playlist channels.": "Mappez l'EPG sélectionné aux chaînes de la liste de lecture sélectionnées.", - "Map the selected EPG to the selected channel(s).": "Mappez l’EPG sélectionné sur le(s) canal(s) sélectionné(s).", "Mapping": "Cartographie", "Mapping Enabled": "Cartographie activée", "Mapping started, you will be notified when the process is complete.": "Cartographie démarrée, vous serez averti lorsque le processus sera terminé.", + "Map the selected EPG to the selected channel(s).": "Mappez l’EPG sélectionné sur le(s) canal(s) sélectionné(s).", + "Map the selected EPG to the selected Playlist channels.": "Mappez l'EPG sélectionné aux chaînes de la liste de lecture sélectionnées.", "Mark playlists as temporarily unavailable when specific HTTP errors are encountered during failover.": "Marquez les listes de lecture comme temporairement indisponibles lorsque des erreurs HTTP spécifiques sont rencontrées lors du basculement.", "Match Confidence Threshold (%)": "Seuil de confiance de correspondance (%)", "Matching Thresholds": "Seuils de correspondance", "Max Backups": "Sauvegardes maximales", "Max Concurrent Players": "Nombre maximum de lecteurs simultanés", - "Max Streams": "Flux maximum", "Max concurrent requests": "Nombre maximal de requêtes simultanées", - "Max width of the page content": "Largeur maximale du contenu de la page", + "Maximum distance for exact matches. Lower = stricter exact matching. Default: 8": "Distance maximale pour des correspondances exactes. Inférieur = correspondance exacte plus stricte. Par défaut : 8", "Maximum Fuzzy Distance": "Distance floue maximale", "Maximum Levenshtein distance allowed for fuzzy matching. Lower = stricter matching. Default: 25": "Distance de Levenshtein maximale autorisée pour la correspondance floue. Inférieur = correspondance plus stricte. Par défaut : 25", - "Maximum TMDB API requests per second. TMDB allows ~40 req/s for free accounts.": "Nombre maximal de requêtes API TMDB par seconde. TMDB autorise environ 40 demandes/s pour les comptes gratuits.", - "Maximum distance for exact matches. Lower = stricter exact matching. Default: 8": "Distance maximale pour des correspondances exactes. Inférieur = correspondance exacte plus stricte. Par défaut : 8", "Maximum number of players that can be open at once.": "Nombre maximum de lecteurs pouvant être ouverts en même temps.", "Maximum number of simultaneous requests allowed. Also controls the level of parallelism for batch operations such as stream probing and channel scrubbing.": "Nombre maximum de requêtes simultanées autorisées. Contrôle également le niveau de parallélisme pour les opérations par lot telles que le sondage de flux et le nettoyage des chaînes.", "Maximum number of simultaneous requests to the provider.": "Nombre maximum de requêtes simultanées au fournisseur.", "Maximum proxy streams allowed. Applies regardless of Provider Profiles — set to 0 for unlimited. When Provider Profiles are enabled, this is the authoritative proxy-level limit while provider limits control routing.": "Flux proxy maximum autorisés. S'applique quels que soient les profils de fournisseur - défini sur 0 pour un nombre illimité. Lorsque les profils de fournisseur sont activés, il s'agit de la limite faisant autorité au niveau du proxy, tandis que les limites du fournisseur contrôlent le routage.", "Maximum results to return (default: 10, max: 50)": "Résultats maximum à renvoyer (par défaut : 10, max : 50)", + "Maximum TMDB API requests per second. TMDB allows ~40 req/s for free accounts.": "Nombre maximal de requêtes API TMDB par seconde. TMDB autorise environ 40 demandes/s pour les comptes gratuits.", + "Max Streams": "Flux maximum", + "Max width of the page content": "Largeur maximale du contenu de la page", + "MediaFlow Proxy": "Proxy MediaFlow", "Media Library Paths": "Chemins de la médiathèque", "Media Server": "Serveur multimédia", "Media Server Library Refresh": "Actualisation de la bibliothèque du serveur multimédia", "Media Servers": "Serveurs multimédias", "Media server status has been reset.": "L'état du serveur multimédia a été réinitialisé.", "Media server status reset": "Réinitialisation de l'état du serveur multimédia", - "MediaFlow Proxy": "Proxy MediaFlow", "Memory": "Mémoire", "Memory Usage": "Utilisation de la mémoire", - "Merge Enabled": "Fusion activée", "Merge behavior": "Comportement de fusion", - "Merge disabled for selected channels": "Fusion désactivée pour les chaînes sélectionnées", - "Merge only new channels": "Fusionner uniquement les nouvelles chaînes", - "Merge re-enabled for selected channels": "Fusion réactivée pour les chaînes sélectionnées", - "Merge source configuration": "Fusionner la configuration des sources", "Merged EPG": "EPG fusionné", "Merged EPG is being processed in the background. You will be notified on completion.": "L'EPG fusionné est en cours de traitement en arrière-plan. Vous serez informé à la fin.", "Merged EPG is processing": "L'EPG fusionné est en cours de traitement", "Merged EPGs": "EPG fusionnés", + "Merge disabled for selected channels": "Fusion désactivée pour les chaînes sélectionnées", "Merged Playlist": "Liste de lecture fusionnée", "Merged Playlists": "Listes de lecture fusionnées", - "Merging channels in the background for this group only. You will be notified once the process is complete.": "Fusion des chaînes en arrière-plan pour ce groupe uniquement. Vous serez averti une fois le processus terminé.", + "Merge Enabled": "Fusion activée", + "Merge only new channels": "Fusionner uniquement les nouvelles chaînes", + "Merge re-enabled for selected channels": "Fusion réactivée pour les chaînes sélectionnées", + "Merge source configuration": "Fusionner la configuration des sources", "Merging channels in the background. You will be notified once the process is complete.": "Fusionner les chaînes en arrière-plan. Vous serez averti une fois le processus terminé.", + "Merging channels in the background for this group only. You will be notified once the process is complete.": "Fusion des chaînes en arrière-plan pour ce groupe uniquement. Vous serez averti une fois le processus terminé.", "Message": "Message", "Metadata": "Métadonnées", "Metadata Source": "Source des métadonnées", "Method": "Méthode", - "Minimum Similarity (%)": "Similitude minimale (%)", "Minimum continuous silence within a check window to count as a silent check. Default: 3 seconds.": "Silence continu minimum dans une fenêtre de contrôle pour compter comme un contrôle silencieux. Par défaut : 3 secondes.", + "Minimum delay between provider requests, in milliseconds.": "Délai minimum entre les requêtes du fournisseur, en millisecondes.", + "Minimum Similarity (%)": "Similitude minimale (%)", "Minimum similarity percentage required for a match (0-100). Higher = stricter matching. Default: 70%": "Pourcentage de similarité minimum requis pour une correspondance (0-100). Plus élevé = correspondance plus stricte. Par défaut : 70 %", "Minimum title similarity percentage (50-100) required to accept a match. Higher values = stricter matching.": "Pourcentage minimum de similarité de titre (50-100) requis pour accepter une correspondance. Des valeurs plus élevées = une correspondance plus stricte.", + "Missing checksum": "Somme de contrôle manquante", "Missing Credentials": "Informations d'identification manquantes", + "Missing credentials": "Informations d'identification manquantes", "Missing Files": "Fichiers manquants", + "Missing information": "Informations manquantes", "Missing SMTP Fields": "Champs SMTP manquants", "Missing TMDB/IMDB ID": "ID TMDB/IMDB manquant", "Missing TMDB/TVDB/IMDB ID": "ID TMDB/TVDB/IMDB manquant", "Missing URL": "URL manquante", - "Missing checksum": "Somme de contrôle manquante", - "Missing credentials": "Informations d'identification manquantes", - "Missing information": "Informations manquantes", + "Mixed playlists not supported": "Listes de lecture mixtes non prises en charge", "Mode": "Mode", "Model": "Modèle", "Modified": "Modifié", "Monitoring grace period (seconds)": "Période de grâce de surveillance (secondes)", "Move Channels to Group": "Déplacer les chaînes vers le groupe", - "Move Series to Category": "Déplacer la série vers la catégorie", "Move now": "Déplacez-vous maintenant", + "Move Series to Category": "Déplacer la série vers la catégorie", "Move the category series to another category.": "Déplacez la série de catégories vers une autre catégorie.", "Move the group channels to the another group.": "Déplacez les canaux du groupe vers un autre groupe.", - "Move the selected VOD(s) to the chosen group.": "Déplacez la ou les VOD sélectionnées vers le groupe choisi.", "Move the selected channel(s) to the chosen group.": "Déplacez le(s) canal(s) sélectionné(s) vers le groupe choisi.", + "Move the selected VOD(s) to the chosen group.": "Déplacez la ou les VOD sélectionnées vers le groupe choisi.", "Move the series to another category.": "Déplacez la série vers une autre catégorie.", "Move to Group": "Déplacer vers le groupe", "Movie": "Film", "Movie Image": "Image du film", - "Movie Sync": "Synchronisation de films", - "Movie Title": "Titre du film", "Movies": "Films", "Movies added": "Films ajoutés", "Movies added successfully": "Films ajoutés avec succès", + "Movie Sync": "Synchronisation de films", + "Movie Title": "Titre du film", + "mp4": "mpch", + "MPAA Rating": "Classement MPAA", + "MPAA rating classification.": "Classement MPAA.", "My Awesome Plugin": "Mon plugin génial", - "NFO File Generation": "Génération de fichiers NFO", - "NOTE: Custom VOD need to be associated with a Playlist or Custom Playlist.": "REMARQUE : La VOD personnalisée doit être associée à une liste de lecture ou à une liste de lecture personnalisée.", - "NOTE: Custom channels need to be associated with a Playlist or Custom Playlist.": "REMARQUE : les chaînes personnalisées doivent être associées à une liste de lecture ou à une liste de lecture personnalisée.", - "NOTE: If the list is empty, sync the playlist and check again once complete.": "REMARQUE : Si la liste est vide, synchronisez la liste de lecture et vérifiez à nouveau une fois terminée.", - "NOTE: Only properly formatted backups will be accepted. If the backup is not valid, you will receive an error when attempting to restore.": "REMARQUE : Seules les sauvegardes correctement formatées seront acceptées. Si la sauvegarde n'est pas valide, vous recevrez une erreur lors de la tentative de restauration.", - "NOTE: Only the database will be restored, which will overwrite any existing data with the backup data. Files will not be automatically restored, you will need to manually re-upload them where needed.": "REMARQUE : Seule la base de données sera restaurée, ce qui écrasera toutes les données existantes par les données de sauvegarde. Les fichiers ne seront pas automatiquement restaurés, vous devrez les télécharger à nouveau manuellement si nécessaire.", - "NOTE: Playlist channel output order is based on: 1 Sort order, 2 Channel no. and 3 Channel title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "REMARQUE : L'ordre de sortie des canaux de la liste de lecture est basé sur : 1 ordre de tri, 2 numéro de canal. et le titre de 3 chaînes - dans cet ordre. Vous pouvez également modifier la sortie de votre liste de lecture pour effectuer un tri automatique, ce qui définira l'ordre de tri en fonction de l'ordre de la liste de lecture.", - "NOTE: Playlist series can be managed in the Series section. You will need to enabled the VOD channels and Series you wish to import metadata for as it will only be imported for enabled channels and series.": "REMARQUE : Les séries de playlists peuvent être gérées dans la section Série. Vous devrez activer les chaînes et séries VOD pour lesquelles vous souhaitez importer des métadonnées, car elles ne seront importées que pour les chaînes et séries activées.", - "NOTE: Restoring a backup will overwrite any existing data. Your manually uploaded EPG and Playlist files will NOT be restored. You will need to download the backup and manually re-upload where needed.": "REMARQUE : La restauration d'une sauvegarde écrasera toutes les données existantes. Vos fichiers EPG et playlist téléchargés manuellement ne seront PAS restaurés. Vous devrez télécharger la sauvegarde et la télécharger à nouveau manuellement si nécessaire.", - "NOTE: VOD output order is based on: 1 Sort order, 2 Channel no. and 3 Title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "REMARQUE : l'ordre de sortie VOD est basé sur : 1 ordre de tri, 2 numéro de chaîne. et 3 Titre - dans cet ordre. Vous pouvez également modifier la sortie de votre liste de lecture pour effectuer un tri automatique, ce qui définira l'ordre de tri en fonction de l'ordre de la liste de lecture.", - "NOTE: When enabled, proxy mode is required for accurate connection tracking.": "REMARQUE : Lorsqu'il est activé, le mode proxy est requis pour un suivi précis des connexions.", - "NOTE: When restoring a backup, only the database will be restored, files will not be automatically restored. You will need to manually re-upload them where needed.": "REMARQUE : Lors de la restauration d'une sauvegarde, seule la base de données sera restaurée, les fichiers ne seront pas automatiquement restaurés. Vous devrez les télécharger à nouveau manuellement si nécessaire.", - "NOTE: You will need to re-sync your playlist, or wait for the next scheduled sync, if changing this. This will overwrite any existing channel sort order customization for this playlist.": "REMARQUE : vous devrez resynchroniser votre liste de lecture ou attendre la prochaine synchronisation programmée si vous modifiez cela. Cela écrasera toute personnalisation de l'ordre de tri des chaînes existante pour cette playlist.", "Name": "Nom", - "Name Filtering": "Filtrage des noms", "Name and branding": "Nom et image de marque", "Name and describe your plugin": "Nommez et décrivez votre plugin", + "Name Filtering": "Filtrage des noms", "Name of the HTTP header.": "Nom de l'en-tête HTTP.", "Name of the variable to send as GET/POST variable to your webhook URL.": "Nom de la variable à envoyer en tant que variable GET/POST à ​​l'URL de votre webhook.", "Navigation position": "Position de navigation", @@ -1176,38 +1233,40 @@ "Network Name": "Nom du réseau", "Networks": "Réseaux", "Networks (Pseudo-Live Channels)": "Réseaux (chaînes pseudo-live)", + "Networks are pseudo-TV channels built from media server content (Jellyfin/Emby/etc.) You can create M3U playlists and stream them to your IPTV apps and devices. A media server is required to use networks.": "Les réseaux sont des pseudo-chaînes de télévision créées à partir du contenu d'un serveur multimédia (Jellyfin/Emby/etc.). Vous pouvez créer des listes de lecture M3U et les diffuser sur vos applications et appareils IPTV. Un serveur multimédia est requis pour utiliser les réseaux.", "Networks EPG URL": "URL EPG des réseaux", "Networks Playlist URL": "URL de la liste de lecture des réseaux", - "Networks are pseudo-TV channels built from media server content (Jellyfin/Emby/etc.) You can create M3U playlists and stream them to your IPTV apps and devices. A media server is required to use networks.": "Les réseaux sont des pseudo-chaînes de télévision créées à partir du contenu d'un serveur multimédia (Jellyfin/Emby/etc.). Vous pouvez créer des listes de lecture M3U et les diffuser sur vos applications et appareils IPTV. Un serveur multimédia est requis pour utiliser les réseaux.", - "Networks pull VOD content from the linked media server.": "Les réseaux extraient le contenu VOD du serveur multimédia lié.", "Networks pull their content from a media server integration. Select which media server to use.": "Les réseaux extraient leur contenu d'une intégration de serveur multimédia. Sélectionnez le serveur multimédia à utiliser.", + "Networks pull VOD content from the linked media server.": "Les réseaux extraient le contenu VOD du serveur multimédia lié.", "Never": "Jamais", "New Custom Channel": "Nouvelle chaîne personnalisée", "New Custom VOD": "Nouvelle VOD personnalisée", "New Group Name": "Nouveau nom de groupe", + "Newly Mapped": "Nouvellement cartographié", "New Profile": "Nouveau profil", "New Setting": "Nouveau paramètre", - "Newly Mapped": "Nouvellement cartographié", "Next Sync": "Synchronisation suivante", + "NFO File Generation": "Génération de fichiers NFO", "No": "Non", - "No Duplicates Found": "Aucun doublon trouvé", - "No EPG cache files found.": "Aucun fichier de cache EPG trouvé.", - "No Libraries Found": "Aucune bibliothèque trouvée", - "No Media Found": "Aucun média trouvé", - "No Paths Configured": "Aucun chemin configuré", - "No VOD channels found": "Aucune chaîne VOD trouvée", "No actions were declared for this plugin.": "Aucune action n'a été déclarée pour ce plugin.", "No aggregate totals were returned by this run.": "Aucun total global n’a été renvoyé par cette exécution.", "No checksum was found for this release. Please provide the SHA-256 hash to verify the download.": "Aucune somme de contrôle n'a été trouvée pour cette version. Veuillez fournir le hachage SHA-256 pour vérifier le téléchargement.", "No description available": "Aucune description disponible", "No description provided.": "Aucune description fournie.", "No duplicate series were found for this media server.": "Aucune série en double n'a été trouvée pour ce serveur multimédia.", - "No enabled VOD channels found in the selected playlist.": "Aucune chaîne VOD activée trouvée dans la playlist sélectionnée.", + "No Duplicates Found": "Aucun doublon trouvé", "No enabled series found matching the criteria.": "Aucune série activée trouvée correspondant aux critères.", + "No enabled VOD channels found in the selected playlist.": "Aucune chaîne VOD activée trouvée dans la playlist sélectionnée.", + "No EPG cache files found.": "Aucun fichier de cache EPG trouvé.", "No heartbeat yet": "Pas encore de battement de coeur", + "No Libraries Found": "Aucune bibliothèque trouvée", "No live activity yet": "Aucune activité en direct pour l'instant", "No log messages yet": "Aucun message de journal pour l'instant", + "No Media Found": "Aucun média trouvé", "No movie or TV show libraries were found on the server.": "Aucune bibliothèque de films ou d'émissions de télévision n'a été trouvée sur le serveur.", + "None": "Aucun", + "None declared": "Aucun déclaré", + "No Paths Configured": "Aucun chemin configuré", "No plugin installs yet.": "Aucun plugin n'est encore installé.", "No plugin record loaded.": "Aucun enregistrement de plugin chargé.", "No plugin runs recorded yet.": "Aucune exécution de plugin enregistrée pour le moment.", @@ -1223,23 +1282,35 @@ "No structured context was attached to this activity line.": "Aucun contexte structuré n'a été rattaché à cette ligne d'activité.", "No summary has been written yet.": "Aucun résumé n’a encore été rédigé.", "No syncs yet": "Aucune synchronisation pour le moment", - "No template programmes found in the first week": "Aucun programme modèle trouvé au cours de la première semaine", - "No trailer ID set.": "Aucun identifiant de remorque défini.", - "No video files were found in the configured paths.": "Aucun fichier vidéo n'a été trouvé dans les chemins configurés.", - "None": "Aucun", - "None declared": "Aucun déclaré", - "Not Configured": "Non configuré", "Not authorized to manage this stream.": "Non autorisé à gérer ce flux.", - "Not set": "Non défini", - "Not started": "Pas commencé", + "Not Configured": "Non configuré", + "NOTE: Custom channels need to be associated with a Playlist or Custom Playlist.": "REMARQUE : les chaînes personnalisées doivent être associées à une liste de lecture ou à une liste de lecture personnalisée.", + "NOTE: Custom VOD need to be associated with a Playlist or Custom Playlist.": "REMARQUE : La VOD personnalisée doit être associée à une liste de lecture ou à une liste de lecture personnalisée.", + "NOTE: If the list is empty, sync the playlist and check again once complete.": "REMARQUE : Si la liste est vide, synchronisez la liste de lecture et vérifiez à nouveau une fois terminée.", + "NOTE: Only properly formatted backups will be accepted. If the backup is not valid, you will receive an error when attempting to restore.": "REMARQUE : Seules les sauvegardes correctement formatées seront acceptées. Si la sauvegarde n'est pas valide, vous recevrez une erreur lors de la tentative de restauration.", + "NOTE: Only the database will be restored, which will overwrite any existing data with the backup data. Files will not be automatically restored, you will need to manually re-upload them where needed.": "REMARQUE : Seule la base de données sera restaurée, ce qui écrasera toutes les données existantes par les données de sauvegarde. Les fichiers ne seront pas automatiquement restaurés, vous devrez les télécharger à nouveau manuellement si nécessaire.", + "NOTE: Playlist channel output order is based on: 1 Sort order, 2 Channel no. and 3 Channel title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "REMARQUE : L'ordre de sortie des canaux de la liste de lecture est basé sur : 1 ordre de tri, 2 numéro de canal. et le titre de 3 chaînes - dans cet ordre. Vous pouvez également modifier la sortie de votre liste de lecture pour effectuer un tri automatique, ce qui définira l'ordre de tri en fonction de l'ordre de la liste de lecture.", + "NOTE: Playlist series can be managed in the Series section. You will need to enabled the VOD channels and Series you wish to import metadata for as it will only be imported for enabled channels and series.": "REMARQUE : Les séries de playlists peuvent être gérées dans la section Série. Vous devrez activer les chaînes et séries VOD pour lesquelles vous souhaitez importer des métadonnées, car elles ne seront importées que pour les chaînes et séries activées.", + "NOTE: Restoring a backup will overwrite any existing data. Your manually uploaded EPG and Playlist files will NOT be restored. You will need to download the backup and manually re-upload where needed.": "REMARQUE : La restauration d'une sauvegarde écrasera toutes les données existantes. Vos fichiers EPG et playlist téléchargés manuellement ne seront PAS restaurés. Vous devrez télécharger la sauvegarde et la télécharger à nouveau manuellement si nécessaire.", + "NOTE: VOD output order is based on: 1 Sort order, 2 Channel no. and 3 Title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "REMARQUE : l'ordre de sortie VOD est basé sur : 1 ordre de tri, 2 numéro de chaîne. et 3 Titre - dans cet ordre. Vous pouvez également modifier la sortie de votre liste de lecture pour effectuer un tri automatique, ce qui définira l'ordre de tri en fonction de l'ordre de la liste de lecture.", + "NOTE: When enabled, proxy mode is required for accurate connection tracking.": "REMARQUE : Lorsqu'il est activé, le mode proxy est requis pour un suivi précis des connexions.", + "NOTE: When restoring a backup, only the database will be restored, files will not be automatically restored. You will need to manually re-upload them where needed.": "REMARQUE : Lors de la restauration d'une sauvegarde, seule la base de données sera restaurée, les fichiers ne seront pas automatiquement restaurés. Vous devrez les télécharger à nouveau manuellement si nécessaire.", + "NOTE: You will need to re-sync your playlist, or wait for the next scheduled sync, if changing this. This will overwrite any existing channel sort order customization for this playlist.": "REMARQUE : vous devrez resynchroniser votre liste de lecture ou attendre la prochaine synchronisation programmée si vous modifiez cela. Cela écrasera toute personnalisation de l'ordre de tri des chaînes existante pour cette playlist.", + "No template programmes found in the first week": "Aucun programme modèle trouvé au cours de la première semaine", "Notification Message": "Message de notification", + "Notifications Sent": "Notifications envoyées", "Notification Subject": "Objet de la notification", "Notification Type": "Type de notification", - "Notifications Sent": "Notifications envoyées", "Notify All Users": "Notifier tous les utilisateurs", "Notify Myself": "Me prévenir", "Notify User": "Avertir l'utilisateur", "Notify Users": "Avertir les utilisateurs", + "No trailer ID set.": "Aucun identifiant de remorque défini.", + "Not set": "Non défini", + "Not started": "Pas commencé", + "Not yet probed — run a probe on this channel to capture stream details.": "Pas encore sondé : exécutez une sonde sur ce canal pour capturer les détails du flux.", + "No video files were found in the configured paths.": "Aucun fichier vidéo n'a été trouvé dans les chemins configurés.", + "No VOD channels found": "Aucune chaîne VOD trouvée", "Number of channels that were already mapped to an EPG entry.": "Nombre de chaînes déjà mappées à une entrée EPG.", "Number of channels that were searched for a matching EPG entry in this mapping. If the \"Override\" option is enabled, this will also include channels that were previously mapped. If the \"Override\" option is disabled, this will only include channels that were not previously mapped.": "Nombre de chaînes recherchées pour une entrée EPG correspondante dans ce mappage. Si l'option « Remplacer » est activée, cela inclura également les canaux précédemment mappés. Si l'option « Remplacer » est désactivée, cela inclura uniquement les canaux qui n'étaient pas précédemment mappés.", "Number of channels that were successfully matched to an EPG entry in this mapping. When \"Override\" is disabled, it is normal for this count to be 0 on subsequent syncs.": "Nombre de chaînes qui ont été mises en correspondance avec succès avec une entrée EPG dans ce mappage. Lorsque « Override » est désactivé, il est normal que ce décompte soit de 0 lors des synchronisations suivantes.", @@ -1250,6 +1321,8 @@ "Number of streams available for HDHR and Xtream API service (if using).": "Nombre de flux disponibles pour le service HDHR et Xtream API (le cas échéant).", "Number of streams available for this playlist (only applies to custom channels assigned to this Custom Playlist).": "Nombre de flux disponibles pour cette playlist (s'applique uniquement aux chaînes personnalisées attribuées à cette playlist personnalisée).", "Number of streams available for this provider. If set to a value other than 0, will prevent any streams from starting if the number of active streams exceeds this value.": "Nombre de flux disponibles pour ce fournisseur. S'il est défini sur une valeur autre que 0, empêchera tout flux de démarrer si le nombre de flux actifs dépasse cette valeur.", + "of :n total": "de :n au total", + "Off": "Désactivé", "Offline": "Hors ligne", "Online": "En ligne", "Only check this for plugins you're actively developing locally. Don't use for production installs.": "Cochez cette case uniquement pour les plugins que vous développez activement localement. Ne pas utiliser pour les installations de production.", @@ -1258,181 +1331,186 @@ "Only enabled series will be automatically updated on Playlist sync, this includes fetching episodes and metadata. You can also manually sync series to update episodes and metadata.": "Seules les séries activées seront automatiquement mises à jour lors de la synchronisation de la playlist, cela inclut la récupération des épisodes et des métadonnées. Vous pouvez également synchroniser manuellement les séries pour mettre à jour les épisodes et les métadonnées.", "Only expired logo cache entries (those older than 30 days). If permanent cache is enabled, nothing will be removed.": "Uniquement les entrées de cache de logo expirées (celles datant de plus de 30 jours). Si le cache permanent est activé, rien ne sera supprimé.", "Only export enabled channels?": "Exporter uniquement les chaînes activées ?", + "Only live channels in these groups will be accessible. Leave empty to allow all live groups.": "Seules les chaînes en direct de ces groupes seront accessibles. Laissez vide pour autoriser tous les groupes en direct.", + "Only series in these categories will be accessible. Leave empty to allow all series categories.": "Seules les séries de ces catégories seront accessibles. Laissez vide pour autoriser toutes les catégories de séries.", "Only unassigned auths are available. Each auth can only be assigned to one playlist at a time.": "Seules les autorisations non attribuées sont disponibles. Chaque authentification ne peut être attribuée qu'à une seule playlist à la fois.", + "Only VOD channels in these groups will be accessible. Leave empty to allow all VOD groups.": "Seules les chaînes VOD de ces groupes seront accessibles. Laissez vide pour autoriser tous les groupes VOD.", "Open": "Ouvrir", - "Open Discord": "Ouvrir Discorde", "Open action menu": "Ouvrir le menu d'actions", "Open bulk action menu": "Ouvrir le menu d'actions groupées", + "Open Discord": "Ouvrir Discorde", "Open run": "Exécution ouverte", "Open the current run and watch the activity stream. If the run stalls, inspect the payload to confirm the target playlist and EPG pair.": "Ouvrez l'exécution en cours et regardez le flux d'activité. Si l’exécution s’arrête, inspectez la charge utile pour confirmer la liste de lecture cible et la paire EPG.", - "Optional JSON array of columns to return for a select query. Defaults to [\"*\"].": "Tableau JSON facultatif des colonnes à retourner pour une requête de sélection. Par défaut [\"*\"].", + "Optional. The name of a specific table to get the schema for. If omitted, returns all accessible tables.": "Facultatif. Le nom d'une table spécifique pour obtenir son schéma. Si omis, retourne toutes les tables accessibles.", + "Optional: Set credentials to access this alias via Xtream API. Must be unique across all aliases and playlist auths.": "Facultatif : définissez les informations d'identification pour accéder à cet alias via l'API Xtream. Doit être unique pour tous les alias et autorisations de playlist.", "Optional channel number for EPG": "Numéro de canal optionnel pour EPG", "Optional channel number for EPG ordering": "Numéro de chaîne optionnel pour la commande EPG", "Optional description for your reference.": "Description facultative pour votre référence.", "Optional description of this profile": "Description facultative de ce profil", "Optional description of what this profile does": "Description facultative de ce que fait ce profil", + "Optional JSON array of columns to return for a select query. Defaults to [\"*\"].": "Tableau JSON facultatif des colonnes à retourner pour une requête de sélection. Par défaut [\"*\"].", "Optional limit for select queries. Defaults to 50.": "Limite facultative pour les requêtes de sélection. Par défaut 50.", - "Optional. The name of a specific table to get the schema for. If omitted, returns all accessible tables.": "Facultatif. Le nom d'une table spécifique pour obtenir son schéma. Si omis, retourne toutes les tables accessibles.", - "Optional: Set credentials to access this alias via Xtream API. Must be unique across all aliases and playlist auths.": "Facultatif : définissez les informations d'identification pour accéder à cet alias via l'API Xtream. Doit être unique pour tous les alias et autorisations de playlist.", "Options": "Possibilités", "Original Movie Title": "Titre original du film", "Original Title": "Titre original", "Output": "Sortir", "Output Format": "Format de sortie", "Output Playlist": "Liste de lecture de sortie", - "Output WAN address in menu": "Adresse WAN de sortie dans le menu", "Output processing options": "Options de traitement de sortie", - "Override URL": "Remplacer l'URL", + "Output WAN address in menu": "Adresse WAN de sortie dans le menu", "Override app-wide placeholder images for logos, episode previews, and VOD/Series poster fallbacks.": "Remplacez les images d'espace réservé à l'échelle de l'application pour les logos, les aperçus d'épisodes et les remplacements d'affiches VOD/série.", "Override global .strm file generation settings for this series.": "Remplacez les paramètres globaux de génération de fichiers .strm pour cette série.", "Override the application timezone. Leave empty to use the server default (UTC). Takes effect for all date/time output throughout the app.": "Remplacez le fuseau horaire de l’application. Laissez vide pour utiliser la valeur par défaut du serveur (UTC). Prend effet pour toutes les sorties date/heure dans l’application.", "Override the default API base URL. Leave blank to use the provider default. Useful for self-hosted models or proxy endpoints.": "Remplacez l'URL de base de l'API par défaut. Laissez vide pour utiliser la valeur par défaut du fournisseur. Utile pour les modèles auto-hébergés ou les points de terminaison proxy.", "Override the sync location from the profile. Leave empty to use profile location.": "Remplacez l'emplacement de synchronisation du profil. Laissez vide pour utiliser l’emplacement du profil.", + "Override URL": "Remplacer l'URL", "Overview": "Aperçu", "Overwrite": "Écraser", + "Overwrite channels with existing mappings?": "Remplacer les canaux par les mappages existants ?", "Overwrite Existing Attributes": "Remplacer les attributs existants", "Overwrite Existing IDs": "Écraser les identifiants existants", "Overwrite Existing Metadata": "Écraser les métadonnées existantes", - "Overwrite channels with existing mappings?": "Remplacer les canaux par les mappages existants ?", + "Overwrite existing metadata? Episodes and seasons will always be fetched/updated.": "Remplacer les métadonnées existantes ? Les épisodes et les saisons seront toujours récupérés/mis à jour.", + "Overwrite existing metadata? If disabled, it will only fetch and process episodes for the Series.": "Remplacer les métadonnées existantes ? S'il est désactivé, il récupérera et traitera uniquement les épisodes de la série.", + "Overwrite existing metadata? If disabled, it will only fetch and process metadata if it does not already exist.": "Remplacer les métadonnées existantes ? S'il est désactivé, il récupérera et traitera les métadonnées uniquement si elles n'existent pas déjà.", "Overwrite existing TMDB/IMDB IDs? If disabled, it will only fetch IDs for items that don\\'t already have them.": "Remplacer les identifiants TMDB/IMDB existants ? S'il est désactivé, il récupérera uniquement les identifiants des éléments qui n'en ont pas déjà.", "Overwrite existing TMDB/IMDB IDs? If disabled, it will only fetch IDs for items that don\\'t have them.": "Remplacer les identifiants TMDB/IMDB existants ? S'il est désactivé, il récupérera uniquement les identifiants des éléments qui n'en ont pas.", "Overwrite existing TMDB/TVDB/IMDB IDs? If disabled, it will only fetch IDs for series that don\\'t already have them.": "Remplacer les identifiants TMDB/TVDB/IMDB existants ? S'il est désactivé, il récupérera uniquement les identifiants des séries qui n'en ont pas déjà.", "Overwrite existing TMDB/TVDB/IMDB IDs? If disabled, it will only fetch IDs for series that don\\'t have them.": "Remplacer les identifiants TMDB/TVDB/IMDB existants ? S'il est désactivé, il récupérera uniquement les identifiants des séries qui n'en ont pas.", - "Overwrite existing metadata? Episodes and seasons will always be fetched/updated.": "Remplacer les métadonnées existantes ? Les épisodes et les saisons seront toujours récupérés/mis à jour.", - "Overwrite existing metadata? If disabled, it will only fetch and process episodes for the Series.": "Remplacer les métadonnées existantes ? S'il est désactivé, il récupérera et traitera uniquement les épisodes de la série.", - "Overwrite existing metadata? If disabled, it will only fetch and process metadata if it does not already exist.": "Remplacer les métadonnées existantes ? S'il est désactivé, il récupérera et traitera les métadonnées uniquement si elles n'existent pas déjà.", - "PG, PG-13, R, NC-17": "PG, PG-13, R, NC-17", - "PG-13, R, etc.": "PG-13, R, etc.", - "PHP Date Formats": "Formats de dates PHP", "Page number (default: 1)": "Numéro de page (par défaut : 1)", "Parallel processing": "Traitement parallèle", "Password": "Mot de passe", "Password for playlist access.": "Mot de passe pour accéder à la playlist.", - "Path Validation Failed": "Échec de la validation du chemin", + "Paste cookies.txt content for authenticated streams (e.g. YouTube members-only, age-gated). Get cookies using a browser extension like \"Get cookies.txt LOCALLY\".": "Collez le contenu cookies.txt pour les flux authentifiés (par exemple, réservés aux membres YouTube, limités par âge). Obtenez des cookies en utilisant une extension de navigateur telle que « Obtenir cookies.txt LOCALEMENT ».", "Path structure (folders)": "Structure du chemin (dossiers)", + "Path Validation Failed": "Échec de la validation du chemin", "Patterns to remove": "Modèles à supprimer", "Pending": "En attente", "Pending Plugin Installs": "Installations de plugins en attente", "Pending Review": "En attente d'examen", "Pending Trust": "En attente de confiance", "Performance": "Performance", + "Periodic rescoring": "Nouvelle notation périodique", "Permanently removes the plugin files from the server and deletes its registry record, settings, and run history. This cannot be undone.": "Supprime définitivement les fichiers du plugin du serveur et supprime son enregistrement de registre, ses paramètres et son historique d'exécution. Cela ne peut pas être annulé.", "Permanently removes this install log entry. The plugin itself (if installed) is not affected.": "Supprime définitivement cette entrée du journal d’installation. Le plugin lui-même (s'il est installé) n'est pas affecté.", "Permissions": "Autorisations", "Personal Access Token": "Jeton d'accès personnel", "Personal Access Tokens": "Jetons d'accès personnels", + "PG, PG-13, R, NC-17": "PG, PG-13, R, NC-17", + "PG-13, R, etc.": "PG-13, R, etc.", + "PHP Date Formats": "Formats de dates PHP", "Placeholder Images": "Images d'espace réservé", "Play": "Jouer", + "Playback settings": "Paramètres de lecture", "Play Channel": "Lire la chaîne", "Play Episode": "Lire l'épisode", - "Play Video": "Lire la vidéo", - "Playback settings": "Paramètres de lecture", "Playlist": "Liste de lecture", "Playlist Alias": "Alias ​​de la liste de lecture", "Playlist Aliases": "Alias ​​de liste de lecture", "Playlist Auth": "Authentification de la liste de lecture", - "Playlist Auth ID": "ID d'authentification de la liste de lecture", "Playlist Auth created": "Auth. de playlist créée", + "Playlist Auth ID": "ID d'authentification de la liste de lecture", "Playlist Auths": "Auteurs de la liste de lecture", "Playlist Category": "Catégorie de liste de lecture", - "Playlist Group": "Groupe de listes de lecture", - "Playlist Name": "Nom de la liste de lecture", - "Playlist Output": "Sortie de la liste de lecture", - "Playlist Processing": "Traitement de la liste de lecture", - "Playlist Series are being processed in the background. Depending on the number of enabled Series, this may take a while. You will be notified on completion.": "Les séries de playlists sont traitées en arrière-plan. En fonction du nombre de séries activées, cela peut prendre un certain temps. Vous serez informé à la fin.", - "Playlist Settings": "Paramètres de la liste de lecture", - "Playlist Type": "Type de liste de lecture", - "Playlist Type (choose one)": "Type de liste de lecture (choisissez-en un)", - "Playlist URL": "URL de la liste de lecture", - "Playlist VOD channels are being processed in the background. Depending on the number of enabled VOD channels, this may take a while. You will be notified on completion.": "Les chaînes VOD de la playlist sont traitées en arrière-plan. En fonction du nombre de chaînes VOD activées, cela peut prendre un certain temps. Vous serez informé à la fin.", - "Playlist Viewer": "Visionneuse de liste de lecture", - "Playlist Viewers": "Visionneuses de listes de lecture", "Playlist fail conditions": "Conditions d'échec de la liste de lecture", + "Playlist Group": "Groupe de listes de lecture", "Playlist is being duplicated": "La playlist est en cours de duplication", "Playlist is being duplicated in the background. You will be notified on completion.": "La playlist est dupliquée en arrière-plan. Vous serez informé à la fin.", "Playlist is fetching metadata for Series": "La playlist récupère les métadonnées de la série", "Playlist is fetching metadata for VOD channels": "La playlist récupère les métadonnées des chaînes VOD", + "Playlist Name": "Nom de la liste de lecture", "Playlist name": "Nom de la liste de lecture", + "Playlist Output": "Sortie de la liste de lecture", + "Playlist Processing": "Traitement de la liste de lecture", + "Playlists": "Listes de lecture", + "Playlist Series are being processed in the background. Depending on the number of enabled Series, this may take a while. You will be notified on completion.": "Les séries de playlists sont traitées en arrière-plan. En fonction du nombre de séries activées, cela peut prendre un certain temps. Vous serez informé à la fin.", + "Playlist Settings": "Paramètres de la liste de lecture", "Playlist settings are being copied": "Les paramètres de la playlist sont en cours de copie", "Playlist settings are being copied in the background. You will be notified on completion.": "Les paramètres de la playlist sont copiés en arrière-plan. Vous serez informé à la fin.", "Playlist status has been reset.": "L'état de la liste de lecture a été réinitialisé.", "Playlist status reset": "Réinitialisation de l'état de la liste de lecture", + "Playlist Type": "Type de liste de lecture", "Playlist type": "Type de liste de lecture", + "Playlist Type (choose one)": "Type de liste de lecture (choisissez-en un)", + "Playlist URL": "URL de la liste de lecture", + "Playlist Viewer": "Visionneuse de liste de lecture", + "Playlist Viewers": "Visionneuses de listes de lecture", "Playlist viewers are used for in app viewing and M3U TV access. Viewers are created automatically via username used to access playlist or start playback.": "Les visionneuses de listes de lecture sont utilisées pour la visualisation dans l'application et l'accès à la télévision M3U. Les visionneuses sont créées automatiquement via le nom d'utilisateur utilisé pour accéder à la liste de lecture ou démarrer la lecture.", - "Playlists": "Listes de lecture", + "Playlist VOD channels are being processed in the background. Depending on the number of enabled VOD channels, this may take a while. You will be notified on completion.": "Les chaînes VOD de la playlist sont traitées en arrière-plan. En fonction du nombre de chaînes VOD activées, cela peut prendre un certain temps. Vous serez informé à la fin.", "Plays": "Pièces", + "Play Video": "Lire la vidéo", "Please add at least one media library path before scanning.": "Veuillez ajouter au moins un chemin de bibliothèque multimédia avant de numériser.", "Please configure Xtream credentials first.": "Veuillez d'abord configurer les informations d'identification Xtream.", "Please configure your TMDB API key in Settings > TMDB before using this feature.": "Veuillez configurer votre clé API TMDB dans Paramètres > TMDB avant d'utiliser cette fonctionnalité.", - "Please enter a TMDB API key to test the connection.": "Veuillez saisir une clé API TMDB pour tester la connexion.", "Please enter a search query": "Veuillez saisir une requête de recherche", + "Please enter a TMDB API key to test the connection.": "Veuillez saisir une clé API TMDB pour tester la connexion.", "Please enter credentials and select a lineup first": "Veuillez saisir vos informations d'identification et sélectionner d'abord une file d'attente", "Please enter username and password first": "Veuillez d'abord saisir votre nom d'utilisateur et votre mot de passe", "Please enter username and password first.": "Veuillez d'abord saisir votre nom d'utilisateur et votre mot de passe.", - "Please fill in all required SMTP fields before sending a test email.": "Veuillez remplir tous les champs SMTP requis avant d'envoyer un e-mail de test.", "Please fill in all required connection fields before testing the connection.": "Veuillez remplir tous les champs de connexion requis avant de tester la connexion.", "Please fill in all required fields first": "Veuillez d'abord remplir tous les champs obligatoires", + "Please fill in all required SMTP fields before sending a test email.": "Veuillez remplir tous les champs SMTP requis avant d'envoyer un e-mail de test.", "Please provide a provider URL or configure the playlist Xtream URL.": "Veuillez fournir une URL de fournisseur ou configurer l'URL de la playlist Xtream.", "Plex": "Plex", "Plex Server Management": "Gestion du serveur Plex", "Plot": "Parcelle", "Plugin": "Plugin", "Plugin Archive": "Archives des plugins", - "Plugin Directory Path": "Chemin du répertoire des plugins", - "Plugin Info": "Informations sur le plugin", - "Plugin Install": "Installation du plugin", - "Plugin Installs": "Installations de plugins", - "Plugin Name": "Nom du plugin", - "Plugin Update Check Complete": "Vérification de la mise à jour du plugin terminée", "Plugin archive staged": "Archive du plugin mise en scène", "Plugin archive staging failed": "Échec de la préparation de l'archive du plugin", "Plugin blocked": "Plugin bloqué", "Plugin creation failed": "La création du plugin a échoué", "Plugin deleted": "Plugin supprimé", + "Plugin Directory Path": "Chemin du répertoire des plugins", "Plugin disabled": "Plugin désactivé", "Plugin discovery completed": "Découverte du plugin terminée", "Plugin enabled": "Plugin activé", - "Plugin install #:id installed [:plugin_id].": "Installation du plugin #:id installée [:plugin_id].", + "Plugin Info": "Informations sur le plugin", + "Plugin Install": "Installation du plugin", "Plugin install #:id installed and trusted [:plugin_id].": "Installation du plugin #:id installée et approuvée [:plugin_id].", + "Plugin install #:id installed [:plugin_id].": "Installation du plugin #:id installée [:plugin_id].", "Plugin install #:id was rejected.": "L'installation du plugin #:id a été rejetée.", "Plugin install discarded": "Installation du plugin abandonnée", + "Plugin installed": "Plugin installé", + "Plugin installed and trusted": "Plugin installé et approuvé", "Plugin install failed": "L'installation du plugin a échoué", "Plugin install rejected": "Installation du plugin rejetée", + "Plugin Installs": "Installations de plugins", "Plugin install staged": "Installation du plugin étape par étape", - "Plugin installed": "Plugin installé", - "Plugin installed and trusted": "Plugin installé et approuvé", + "Plugin Name": "Nom du plugin", "Plugin reinstalled": "Plugin réinstallé", "Plugin run": "Exécution du plugin", "Plugin run detail": "Détails de l'exécution du plugin", - "Plugin staging failed": "Échec de la préparation du plugin", - "Plugin trusted": "Plugin fiable", - "Plugin uninstalled": "Plugin désinstallé", - "Plugin upload failed": "Échec du téléchargement du plugin", "Plugins": "Plugins", "Plugins Needing Attention": "Plugins nécessitant une attention particulière", + "Plugin staging failed": "Échec de la préparation du plugin", "Plugins that are blocked, modified, invalid, or not fully installed.": "Plugins bloqués, modifiés, invalides ou pas complètement installés.", "Plugins that are currently installed and available to operate.": "Plugins actuellement installés et disponibles pour fonctionner.", - "Pool Status": "Statut de la piscine", + "Plugin trusted": "Plugin fiable", + "Plugin uninstalled": "Plugin désinstallé", + "Plugin Update Check Complete": "Vérification de la mise à jour du plugin terminée", + "Plugin upload failed": "Échec du téléchargement du plugin", "Pool multiple Xtream accounts from this provider to increase concurrent stream capacity.": "Regroupez plusieurs comptes Xtream de ce fournisseur pour augmenter la capacité de flux simultané.", + "Pool Status": "Statut de la piscine", "Port": "Port", "Position / Duration": "Poste / Durée", + "Postal Code": "Code Postal", + "Poster URL updated": "URL de l'affiche mise à jour", "Post Process": "Post-traitement", - "Post Process ID": "ID de post-traitement", "Post Process created": "Post-traitement créé", + "Post Process ID": "ID de post-traitement", "Post Processing": "Post-traitement", - "Postal Code": "Code Postal", - "Poster URL updated": "URL de l'affiche mise à jour", "Pre-defined prompts displayed as buttons in the Copilot chat window.": "Invites prédéfinies affichées sous forme de boutons dans la fenêtre de discussion Copilot.", "Prefer catch-up as primary": "Préférer le rattrapage en primaire", "Prefer icon from channel or EPG.": "Préférer l'icône de la chaîne ou de l'EPG.", "Prefer logo from channel or EPG.": "Préférez le logo de la chaîne ou de l'EPG.", "Preferred Codec": "Codec préféré", "Preferred Icon": "Icône préférée", + "Preferred icon updated": "Icône préférée mise à jour", + "Preferred language for TMDB searches.": "Langue préférée pour les recherches TMDB.", "Preferred Locale": "Paramètres régionaux préférés", "Preferred Playlist (optional)": "Liste de lecture préférée (facultatif)", "Preferred TVG ID output": "Sortie ID TVG préférée", - "Preferred icon updated": "Icône préférée mise à jour", - "Preferred language for TMDB searches.": "Langue préférée pour les recherches TMDB.", "Preprocess playlist": "Liste de lecture de prétraitement", "Press [tab] or [return] to add item.": "Appuyez sur [tab] ou [return] pour ajouter un élément.", "Press [tab] or [return] to add item. Leave empty to disable.": "Appuyez sur [tab] ou [return] pour ajouter un élément. Laissez vide pour désactiver.", @@ -1449,24 +1527,30 @@ "Priority": "Priorité", "Priority Keywords": "Mots clés prioritaires", "Priority Order": "Ordre prioritaire", + "Probed": "Sondé", "Probe Enabled": "Sonde activée", - "Probe Streams": "Flux de sonde", "Probe now": "Sondez maintenant", + "Probe ran but returned no usable details.": "La sonde s'est exécutée mais n'a renvoyé aucun détail utilisable.", + "Probe Streams": "Flux de sonde", "Probe streams after sync": "Sonder les flux après la synchronisation", "Probe the selected channels with ffprobe to collect stream metadata (codec, resolution, bitrate). This data enables fast channel switching in Emby.": "Sondez les canaux sélectionnés avec ffprobe pour collecter les métadonnées du flux (codec, résolution, débit). Ces données permettent un changement de canal rapide dans Emby.", "Probe timeout (seconds)": "Délai de détection (secondes)", - "Probed": "Sondé", + "Probing is disabled for this channel.": "Le sondage est désactivé pour ce canal.", "Probing is disabled for this channel. Enable it in the channel's edit form to allow probe data collection.": "Le sondage est désactivé pour ce canal. Activez-le dans le formulaire d'édition du canal pour autoriser la collecte de données de sonde.", "Probing started": "Le sondage a commencé", "Process": "Processus", "Process EPG now?": "Traiter l'EPG maintenant ?", "Process EPG now? This will reload the EPG data from the source.": "Traiter l'EPG maintenant ? Cela rechargera les données EPG à partir de la source.", "Process Event": "Événement de processus", - "Process Message": "Message de processus", - "Process Status": "Statut du processus", "Process failed": "Le processus a échoué", + "Processing": "Traitement", + "Processing options for playlist series": "Options de traitement pour les séries de playlists", + "Processing options for playlist VOD": "Options de traitement pour la playlist VOD", + "Processing settings for the playlist": "Paramètres de traitement de la liste de lecture", + "Processing state reset": "Réinitialisation de l'état de traitement", "Process in parallel rather than one-at-a-time for significantly faster results.": "Traiter en parallèle plutôt qu'un par un pour des résultats nettement plus rapides.", "Process merged EPG now?": "Processus EPG fusionné maintenant ?", + "Process Message": "Message de processus", "Process now? This will fetch all episodes and seasons for the enabled series.": "Processus maintenant ? Cela récupérera tous les épisodes et saisons de la série activée.", "Process on failed syncs too (default is only successful syncs).": "Traitez également les synchronisations ayant échoué (par défaut, seules les synchronisations réussies).", "Process selected": "Processus sélectionné", @@ -1474,14 +1558,10 @@ "Process series for selected category now? Only enabled series will be processed. This will fetch all episodes and seasons for the category series. This may take a while depending on the number of series in the category.": "Traiter la série pour la catégorie sélectionnée maintenant ? Seules les séries activées seront traitées. Cela récupérera tous les épisodes et saisons de la catégorie série. Cela peut prendre un certain temps en fonction du nombre de séries dans la catégorie.", "Process series for this category now? Only enabled series will be processed. This will fetch all episodes and seasons for the category series. This may take a while depending on the number of series in the category.": "Série de processus pour cette catégorie maintenant ? Seules les séries activées seront traitées. Cela récupérera tous les épisodes et saisons de la catégorie série. Cela peut prendre un certain temps en fonction du nombre de séries dans la catégorie.", "Process series now? This will fetch all episodes and seasons for this series.": "Traiter les séries maintenant ? Cela récupérera tous les épisodes et saisons de cette série.", + "Process Status": "Statut du processus", "Process the selected epg(s) now?": "Traiter le ou les epg sélectionnés maintenant ?", "Process the selected merged EPG(s) now?": "Traiter les EPG fusionnés sélectionnés maintenant ?", "Process the selected playlist(s) now?": "Traiter la ou les playlists sélectionnées maintenant ?", - "Processing": "Traitement", - "Processing options for playlist VOD": "Options de traitement pour la playlist VOD", - "Processing options for playlist series": "Options de traitement pour les séries de playlists", - "Processing settings for the playlist": "Paramètres de traitement de la liste de lecture", - "Processing state reset": "Réinitialisation de l'état de traitement", "Profile Name": "Nom du profil", "Profile Test Failed": "Échec du test de profil", "Profile Valid ✓": "Profil Valide ✓", @@ -1491,11 +1571,12 @@ "Progress": "Progrès", "Progress of EPG cache generation": "Progression de la génération du cache EPG", "Progress of EPG import/sync": "Progression de l'importation/synchronisation de l'EPG", - "Progress of SchedulesDirect import (if using)": "Progression de l’import SchedulesDirect (si utilisé)", "Progress of merged EPG import/sync": "Progression de l'importation/synchronisation de l'EPG fusionné", + "Progress of SchedulesDirect import (if using)": "Progression de l’import SchedulesDirect (si utilisé)", "Prompt": "Prompt", "Provider": "Fournisseur", "Provider Credentials": "Informations d'identification du fournisseur", + "Provider credentials to use for this alias. At least one set of credentials is required.": "Informations d’identification du fournisseur à utiliser pour cet alias. Au moins un ensemble d’informations d’identification est requis.", "Provider Limits Warning": "Avertissement concernant les limites du fournisseur", "Provider Profiles": "Profils de fournisseurs", "Provider Rate Limiting & Concurrency": "Limitation de débit et concurrence du fournisseur", @@ -1503,12 +1584,12 @@ "Provider Streams": "Flux de fournisseurs", "Provider Timezone": "Fuseau horaire du fournisseur", "Provider Timezone Not Found": "Fuseau horaire du fournisseur introuvable", - "Provider URL": "URL du fournisseur", - "Provider credentials to use for this alias. At least one set of credentials is required.": "Informations d’identification du fournisseur à utiliser pour cet alias. Au moins un ensemble d’informations d’identification est requis.", "Provider timezone not found in playlist status. Make sure the playlist is connected and has synced at least once to retrieve this information.": "Le fuseau horaire du fournisseur est introuvable dans l'état de la playlist. Assurez-vous que la playlist est connectée et synchronisée au moins une fois pour récupérer ces informations.", + "Provider URL": "URL du fournisseur", "Proxied M3U URL": "URL M3U proxy", "Proxy": "Proxy", "Proxy Enabled": "Proxy activé", + "Proxy mode was automatically enabled because this playlist now contains channels from source playlists with Provider Profiles enabled.": "Le mode proxy a été automatiquement activé car cette liste de lecture contient désormais des chaînes provenant de listes de lecture sources avec les profils de fournisseur activés.", "Proxy Options": "Options de proxy", "Proxy Password (Alternative)": "Mot de passe proxy (alternatif)", "Proxy Port (Alternative)": "Port proxy (alternatif)", @@ -1516,20 +1597,23 @@ "Proxy Streams": "Flux proxy", "Proxy URL": "URL du proxy", "Proxy User Agent for Media Streams": "Agent utilisateur proxy pour les flux multimédias", - "Proxy mode was automatically enabled because this playlist now contains channels from source playlists with Provider Profiles enabled.": "Le mode proxy a été automatiquement activé car cette liste de lecture contient désormais des chaînes provenant de listes de lecture sources avec les profils de fournisseur activés.", "Public URL": "URL publique", - "Purge Series": "Série de purges", "Purge now": "Purger maintenant", + "Purge Series": "Série de purges", "QR Code": "Code QR", - "Queue Manager": "Gestionnaire de files d'attente", + "Quality & Options": "Qualité et options", + "Quality selector (best, worst, 720p, etc.) followed by optional Streamlink flags. Example: best --hls-live-edge 3": "Sélecteur de qualité (meilleur, pire, 720p, etc.) suivi d'indicateurs Streamlink facultatifs. Exemple : meilleur --hls-live-edge 3", + "Queue a one-off failover rescore for this playlist? Stale channels will be re-probed (subject to the configured staleness window) and failovers re-sorted so the highest-quality source sits first.": "Mettre en file d'attente une restauration de basculement unique pour cette playlist ? Les canaux obsolètes seront à nouveau sondés (sous réserve de la fenêtre d'obsolescence configurée) et les basculements seront triés à nouveau afin que la source de la plus haute qualité soit placée en premier.", "Queue a plugin action from the page header to create the first run.": "Mettez en file d'attente une action de plugin à partir de l'en-tête de la page pour créer la première exécution.", "Queue a scan from the header to generate the first run. That will populate Live Activity, Run History, and the run detail screen.": "Mettez en file d'attente une analyse à partir de l'en-tête pour générer la première exécution. Cela remplira l'activité en direct, l'historique des exécutions et l'écran de détails de l'exécution.", - "Queue reset": "Réinitialisation de la file d'attente", "Queued": "En file d'attente", "Queued by": "Mis en file d'attente par", + "Queue Manager": "Gestionnaire de files d'attente", + "Queue reset": "Réinitialisation de la file d'attente", "Quick Actions": "Actions rapides", "Ran At": "Ran et", "Ran at": "J'ai couru et", + "Ranked sources": "Sources classées", "Rate Limit (requests/second)": "Limite de débit (requêtes/seconde)", "Rating": "Notation", "Rating (5 based)": "Note (sur base 5)", @@ -1537,16 +1621,20 @@ "Re-enable disabled channels that are found to be live. Requires \"Scan all channels\" to be on.": "Réactiver les chaînes désactivées qui s'avèrent être en direct. Nécessite que \"Scanner toutes les chaînes\" soit activé.", "Re-enable live channels": "Réactiver les chaînes en direct", "Re-probe": "Re-sondez", + "Re-probe channels older than (days)": "Réinterroger les canaux datant de plus de (jours)", "Re-run this mapping everytime the EPG is synced?": "Réexécuter ce mappage à chaque fois que l'EPG est synchronisé ?", + "Re-score failovers now": "Réévaluer les basculements maintenant", + "Re-score this channel's failovers against current stream stats. Stale channels may be re-probed (subject to the playlist's staleness window). The master channel is never altered — only the failover order changes.": "Réévaluez les basculements de cette chaîne par rapport aux statistiques de flux actuelles. Les chaînes obsolètes peuvent être à nouveau sondées (sous réserve de la fenêtre d'obsolescence de la liste de lecture). Le canal maître n'est jamais modifié : seul l'ordre de basculement change.", "Recall Memories": "Rappeler des souvenirs", "Recent Plugin Installs": "Installations récentes de plugins", - "Recent Runs": "Exécutions récentes", "Recent plugin uploads — pending approval, approved, or rejected.": "Téléchargements récents de plugins : en attente d'approbation, approuvés ou rejetés.", + "Recent Runs": "Exécutions récentes", "Recommended Next Step": "Étape suivante recommandée", + "recorded progress.": "progrès enregistrés.", "Recordings / DVR Subscriptions": "Enregistrements / Abonnements DVR", - "Recount Channels": "Recompter les chaînes", "Recount all channels in this group sequentially?": "Compter séquentiellement toutes les chaînes de ce groupe ?", "Recount all channels in this group sequentially? Channel numbers will be assigned based on the current sort order.": "Compter séquentiellement toutes les chaînes de ce groupe ? Les numéros de chaîne seront attribués en fonction de l'ordre de tri actuel.", + "Recount Channels": "Recompter les chaînes", "Recount channels across selected groups? This will renumber channels sequentially starting from the top-most selected group down to the bottom-most.": "Recompter les chaînes dans les groupes sélectionnés ? Cela renumérotera les chaînes de manière séquentielle, en commençant par le groupe sélectionné le plus haut jusqu'au groupe le plus bas.", "Recount now": "Racontez maintenant", "Recount the selected channels only inside this custom playlist. The original channel numbers will not change.": "Racontez les chaînes sélectionnées uniquement dans cette liste de lecture personnalisée. Les numéros de chaînes d'origine ne changeront pas.", @@ -1561,17 +1649,17 @@ "Refresh EPG Guide": "Actualiser le guide EPG", "Refresh Failed": "Échec de l'actualisation", "Refresh Libraries": "Actualiser les bibliothèques", - "Refresh Logo Repository": "Actualiser le référentiel de logos", "Refresh logo cache (selected)": "Actualiser le cache du logo (sélectionné)", + "Refresh Logo Repository": "Actualiser le référentiel de logos", "Refresh media server library after sync": "Actualiser la bibliothèque du serveur multimédia après la synchronisation", "Refresh poster cache (selected)": "Actualiser le cache des affiches (sélectionné)", "Refresh selected cache": "Actualiser le cache sélectionné", "Regex merge patterns": "Modèles de fusion Regex", "Regex patterns for failover grouping. Useful when the same channel has different names within and across providers.": "Modèles Regex pour le regroupement de basculement. Utile lorsque le même canal porte des noms différents au sein et entre les fournisseurs.", - "Register HDHomeRun Tuner": "Enregistrer le tuner HDHomeRun", "Register a DVR tuner first.": "Enregistrez d'abord un tuner DVR.", - "Register this playlist as an HDHomeRun tuner in Plex for Live TV & DVR.": "Enregistrez cette liste de lecture en tant que tuner HDHomeRun dans Plex pour Live TV et DVR.", "Registered Tuners": "Accordeurs enregistrés", + "Register HDHomeRun Tuner": "Enregistrer le tuner HDHomeRun", + "Register this playlist as an HDHomeRun tuner in Plex for Live TV & DVR.": "Enregistrez cette liste de lecture en tant que tuner HDHomeRun dans Plex pour Live TV et DVR.", "Registration Failed": "Échec de l'inscription", "Reinstall": "Réinstaller", "Reinstalling makes this plugin eligible to run again. Settings are preserved unless you deleted its data during uninstall.": "La réinstallation rend ce plugin éligible pour une nouvelle exécution. Les paramètres sont conservés sauf si vous supprimez ses données lors de la désinstallation.", @@ -1580,8 +1668,8 @@ "Release Asset URL": "Publier l'URL de l'élément", "Release Date": "Date de sortie", "Release Date (Alt)": "Date de sortie (Alt)", - "Release Logs": "Journaux de version", "Release info missing": "Informations sur la version manquantes", + "Release Logs": "Journaux de version", "Release logs": "Journaux de publication", "Release logs refreshed": "Journaux de version actualisés", "Releases": "Sorties", @@ -1590,14 +1678,15 @@ "Removal Failed": "Échec de la suppression", "Remove": "Retirer", "Remove Auth": "Supprimer l'authentification", - "Remove DVR": "Supprimer le DVR", - "Remove Entire DVR": "Supprimer tout le DVR", - "Remove Tuner": "Supprimer le tuner", "Remove auth": "Supprimer l'authentification", "Remove auth from Playlist": "Supprimer l'authentification de la liste de lecture", "Remove auth from Playlist?": "Supprimer l'authentification de la playlist ?", "Remove auth from selected Playlist?": "Supprimer l'authentification de la playlist sélectionnée ?", "Remove consecutive replacement characters": "Supprimer les caractères de remplacement consécutifs", + "Removed Channels": "Chaînes supprimées", + "Removed Groups": "Groupes supprimés", + "Remove DVR": "Supprimer le DVR", + "Remove Entire DVR": "Supprimer tout le DVR", "Remove inactive streams and clients": "Supprimer les flux et les clients inactifs", "Remove or replace special characters in filenames": "Supprimer ou remplacer les caractères spéciaux dans les noms de fichiers", "Remove post processing": "Supprimer le post-traitement", @@ -1606,46 +1695,48 @@ "Remove post processing from selected item?": "Supprimer le post-traitement de l'élément sélectionné ?", "Remove quality indicators": "Supprimer les indicateurs de qualité", "Remove specific words or symbols from folder and file names": "Supprimez des mots ou des symboles spécifiques des noms de dossiers et de fichiers", - "Removed Channels": "Chaînes supprimées", - "Removed Groups": "Groupes supprimés", "Removes the selected reviews from the system. This does not affect the installed plugins or their files on disk.": "Supprime les avis sélectionnés du système. Cela n'affecte pas les plugins installés ni leurs fichiers sur le disque.", + "Remove Tuner": "Supprimer le tuner", "Replace now": "Remplacer maintenant", "Replace with": "Remplacer par", "Replace with (optional)": "Remplacer par (facultatif)", - "Request Options": "Options de demande", "Request delay": "Délai de demande", "Request delay (milliseconds)": "Délai de demande (millisecondes)", - "Request type": "Type de demande", "Requested Access": "Accès demandé", + "Request Options": "Options de demande", + "Request type": "Type de demande", "Required to send emails, if your provider requires authentication.": "Obligatoire pour envoyer des e-mails, si votre fournisseur exige une authentification.", "Required to send emails.": "Obligatoire pour envoyer des e-mails.", "Rescan storage": "Réanalyser le stockage", + "Rescore": "Noter", + "Rescore now": "Recommencez maintenant", + "Rescoring queued": "Réévaluation en file d'attente", "Reset": "Réinitialiser", + "Reset category names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Réinitialisez les noms de catégories à leurs valeurs importées d’origine. Cela annulera toutes les modifications de recherche et de remplacement pour la liste de lecture sélectionnée.", + "Reset category names back to their original imported values? This will undo any find & replace changes.": "Réinitialiser les noms de catégories à leurs valeurs importées d'origine ? Cela annulera toutes les modifications de recherche et de remplacement.", "Reset EPG status so it can be processed again. Only perform this action if you are having problems with the EPG syncing.": "Réinitialisez le statut de l'EPG afin qu'il puisse être traité à nouveau. N'effectuez cette action que si vous rencontrez des problèmes avec la synchronisation EPG.", "Reset Find & Replace results back to EPG defaults. This will remove any custom values set in the selected column.": "Réinitialisez les résultats Rechercher et remplacer aux valeurs par défaut de l'EPG. Cela supprimera toutes les valeurs personnalisées définies dans la colonne sélectionnée.", "Reset Find & Replace results back to epg defaults for the selected epg channels. This will remove any custom values set in the selected column.": "Réinitialisez les résultats de recherche et de remplacement aux valeurs par défaut epg pour les chaînes epg sélectionnées. Cela supprimera toutes les valeurs personnalisées définies dans la colonne sélectionnée.", - "Reset Find & Replace results back to playlist defaults for the selected channels. This will remove any custom values set in the selected column.": "Réinitialisez les résultats de recherche et de remplacement aux valeurs par défaut de la liste de lecture pour les chaînes sélectionnées. Cela supprimera toutes les valeurs personnalisées définies dans la colonne sélectionnée.", "Reset Find & Replace results back to playlist defaults. This will remove any custom values set in the selected column.": "Réinitialisez les résultats Rechercher et remplacer aux valeurs par défaut de la liste de lecture. Cela supprimera toutes les valeurs personnalisées définies dans la colonne sélectionnée.", - "Reset Processing State": "Réinitialiser l'état de traitement", - "Reset Queue": "Réinitialiser la file d'attente", - "Reset VOD group names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Réinitialisez les noms des groupes VOD à leurs valeurs importées d’origine. Cela annulera toutes les modifications de recherche et de remplacement pour la liste de lecture sélectionnée.", - "Reset category names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Réinitialisez les noms de catégories à leurs valeurs importées d’origine. Cela annulera toutes les modifications de recherche et de remplacement pour la liste de lecture sélectionnée.", - "Reset category names back to their original imported values? This will undo any find & replace changes.": "Réinitialiser les noms de catégories à leurs valeurs importées d'origine ? Cela annulera toutes les modifications de recherche et de remplacement.", + "Reset Find & Replace results back to playlist defaults for the selected channels. This will remove any custom values set in the selected column.": "Réinitialisez les résultats de recherche et de remplacement aux valeurs par défaut de la liste de lecture pour les chaînes sélectionnées. Cela supprimera toutes les valeurs personnalisées définies dans la colonne sélectionnée.", "Reset group names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Réinitialisez les noms de groupe à leurs valeurs importées d’origine. Cela annulera toutes les modifications de recherche et de remplacement pour la liste de lecture sélectionnée.", "Reset group names back to their original imported values? This will undo any find & replace changes.": "Réinitialiser les noms de groupe à leurs valeurs importées d'origine ? Cela annulera toutes les modifications de recherche et de remplacement.", "Reset media server status so it can be synced again. Only perform this action if you are having problems with the media server syncing.": "Réinitialisez l'état du serveur multimédia afin qu'il puisse être à nouveau synchronisé. N'effectuez cette action que si vous rencontrez des problèmes avec la synchronisation du serveur multimédia.", "Reset now": "Réinitialiser maintenant", "Reset playlist status so it can be processed again. Only perform this action if you are having problems with the playlist syncing.": "Réinitialisez l’état de la liste de lecture afin qu’elle puisse être à nouveau traitée. N'effectuez cette action que si vous rencontrez des problèmes avec la synchronisation de la playlist.", + "Reset Processing State": "Réinitialiser l'état de traitement", + "Reset Queue": "Réinitialiser la file d'attente", "Reset status": "Réinitialiser l'état", - "Reset status for the selected Playlists so they can be processed again. Only perform this action if you are having problems with the playlist syncing.": "Réinitialisez l'état des listes de lecture sélectionnées afin qu'elles puissent être traitées à nouveau. N'effectuez cette action que si vous rencontrez des problèmes avec la synchronisation de la playlist.", "Reset status for the selected media servers so they can be synced again.": "Réinitialisez l'état des serveurs multimédias sélectionnés afin qu'ils puissent être à nouveau synchronisés.", + "Reset status for the selected Playlists so they can be processed again. Only perform this action if you are having problems with the playlist syncing.": "Réinitialisez l'état des listes de lecture sélectionnées afin qu'elles puissent être traitées à nouveau. N'effectuez cette action que si vous rencontrez des problèmes avec la synchronisation de la playlist.", "Resetting the queue will restart the queue workers and flush any pending jobs. Any syncs or background processes will be stopped and removed. Only perform this action if you are having sync issues.": "La réinitialisation de la file d'attente redémarrera les travailleurs de file d'attente et videra toutes les tâches en attente. Toutes les synchronisations ou processus en arrière-plan seront arrêtés et supprimés. N'effectuez cette action que si vous rencontrez des problèmes de synchronisation.", + "Reset VOD group names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "Réinitialisez les noms des groupes VOD à leurs valeurs importées d’origine. Cela annulera toutes les modifications de recherche et de remplacement pour la liste de lecture sélectionnée.", "Resolution": "Résolution", "Resolve proxy public URL dynamically at request time": "Résoudre dynamiquement l'URL publique du proxy au moment de la demande", "Resolver URL": "URL du résolveur", - "Restart Now": "Redémarrer maintenant", "Restart existing mapping process.": "Redémarrez le processus de mappage existant.", "Restart from beginning when all content has played": "Redémarrer depuis le début lorsque tout le contenu a été lu", + "Restart Now": "Redémarrer maintenant", "Restart the in-progress scrubber run.": "Redémarrez l’exécution du nettoyeur en cours.", "Restart this scrubber? The existing run will be abandoned and a new one will begin.": "Redémarrer ce laveur ? La course existante sera abandonnée et une nouvelle commencera.", "Restore now": "Restaurer maintenant", @@ -1653,106 +1744,99 @@ "Resume Run": "Reprendre l'exécution", "Retain logs of playlist syncs. This is useful for debugging and tracking changes to the playlist. This can lead to increased sync time and storage usage depending on the size of the playlist.": "Conservez les journaux des synchronisations de playlist. Ceci est utile pour le débogage et le suivi des modifications apportées à la liste de lecture. Cela peut entraîner une augmentation du temps de synchronisation et de l'utilisation du stockage en fonction de la taille de la liste de lecture.", "Retry probe": "Réessayer la sonde", - "Returned Metrics": "Métriques renvoyées", - "Returned as \"server_info.http_port\" in \"player_api.php\" responses. Leave empty to use APP_PORT (default).": "Renvoyé sous la forme \"server_info.http_port\" dans les réponses \"player_api.php\". Laissez vide pour utiliser APP_PORT (par défaut).", "Returned as \"server_info.https_port\" in \"player_api.php\" responses. Leave empty to use 443 (default).": "Renvoyé sous la forme \"server_info.https_port\" dans les réponses \"player_api.php\". Laissez vide pour utiliser 443 (par défaut).", + "Returned as \"server_info.http_port\" in \"player_api.php\" responses. Leave empty to use APP_PORT (default).": "Renvoyé sous la forme \"server_info.http_port\" dans les réponses \"player_api.php\". Laissez vide pour utiliser APP_PORT (par défaut).", "Returned as \"user_info.message\" in \"player_api.php\" responses.": "Renvoyé sous la forme \"user_info.message\" dans les réponses \"player_api.php\".", + "Returned Metrics": "Métriques renvoyées", "Returned totals": "Totaux renvoyés", "Review #:id is queued for approval.": "La révision #:id est en file d’attente pour approbation.", "Review #:id is queued for security scan and approval.": "La révision #:id est en file d’attente pour analyse de sécurité et approbation.", "Review #:id is queued — check Plugin Installs to scan and approve it.": "La révision #:id est en file d’attente – vérifiez les installations de plug-in pour l’analyser et l’approuver.", "Review #:id is ready - check Plugin Installs to scan and approve it.": "La révision #:id est prête - vérifiez les installations de plugin pour l'analyser et l'approuver.", + "Review and create your plugin": "Vérifiez et créez votre plugin", "Review Notes": "Notes de révision", "Review Summary": "Résumé de l'examen", - "Review and create your plugin": "Vérifiez et créez votre plugin", "Review the failed run, check the activity stream for the error context, and correct the target playlist, EPG, or thresholds before trying again.": "Examinez l'exécution ayant échoué, vérifiez le flux d'activité pour le contexte d'erreur et corrigez la liste de lecture cible, l'EPG ou les seuils avant de réessayer.", "Rule Name": "Nom de la règle", "Run": "Courir", + "Run a plugin action to see step-by-step activity appear here.": "Exécutez une action de plug-in pour voir l'activité étape par étape apparaître ici.", + "Run automatically after each playlist sync.": "Exécuté automatiquement après chaque synchronisation de playlist.", "Run ClamAV Scan": "Exécutez l'analyse ClamAV", "Run History": "Historique d'exécution", "Run Log": "Journal d'exécution", "Run Logs": "Journaux d'exécution", + "Running": "En cours d'exécution", "Run Now": "Courez maintenant", - "Run Summary": "Exécuter le résumé", - "Run Tool": "Exécuter l'outil", - "Run a plugin action to see step-by-step activity appear here.": "Exécutez une action de plug-in pour voir l'activité étape par étape apparaître ici.", - "Run automatically after each playlist sync.": "Exécuté automatiquement après chaque synchronisation de playlist.", "Run resumed": "L'exécution a repris", "Run status": "Statut d'exécution", + "Run Summary": "Exécuter le résumé", "Run the selected scrubbers now? This will not modify the \"Recurring\" setting.": "Exécuter les épurateurs sélectionnés maintenant ? Cela ne modifiera pas le paramètre « Récurrent ».", - "Running": "En cours d'exécution", "Runtime": "Durée d'exécution", - "SD Progress": "Progrès du DD", - "SHA-256 Checksum": "Somme de contrôle SHA-256", - "SMTP": "SMTP", - "SMTP Encryption": "Cryptage SMTP", - "SMTP From Address": "Adresse de départ SMTP", - "SMTP Host": "Hôte SMTP", - "SMTP Password": "Mot de passe SMTP", - "SMTP Port": "Port SMTP", - "SMTP Settings": "Paramètres SMTP", - "SMTP Username": "Nom d'utilisateur SMTP", + "Run Tool": "Exécuter l'outil", "Sample rate": "Taux d'échantillonnage", "Saved targets used for manual defaults and automation.": "Cibles enregistrées utilisées pour les paramètres manuels par défaut et l'automatisation.", "Scan": "Balayage", "Scan & Discover Libraries": "Scanner et découvrir les bibliothèques", + "Scan all channels (including disabled)": "Scanner toutes les chaînes (y compris les chaînes désactivées)", "Scan All Libraries": "Analyser toutes les bibliothèques", "Scan Complete": "Analyse terminée", + "Scan completed": "Analyse terminée", "Scan Details": "Détails de l'analyse", "Scan Failed": "Échec de l'analyse", + "Scan failed": "Échec de l'analyse", "Scan Recursively": "Numériser de manière récursive", + "Scans All Channels": "Scanne toutes les chaînes", "Scan Scope": "Portée de l'analyse", "Scan Started": "Analyse démarrée", - "Scan all channels (including disabled)": "Scanner toutes les chaînes (y compris les chaînes désactivées)", - "Scan completed": "Analyse terminée", - "Scan failed": "Échec de l'analyse", "Scan subdirectories for media files": "Analyser les sous-répertoires à la recherche de fichiers multimédias", - "Scans All Channels": "Scanne toutes les chaînes", "Schedule": "Calendrier", + "Schedule a recurring rescore for every failover group in this playlist. Master channels are never promoted or replaced — only failover sort order changes. Off = rescore manually only via the \"Rescore now\" button.": "Planifiez une restauration récurrente pour chaque groupe de basculement de cette liste de lecture. Les canaux principaux ne sont jamais promus ni remplacés ; seuls les changements dans l'ordre de tri des basculements sont effectués. Off = refaire le score manuellement uniquement via le bouton \"Rescore maintenant\".", "Schedule Builder": "Générateur d'horaires", + "Scheduled": "Programmé", + "Scheduled Recordings": "Enregistrements programmés", + "Scheduled scans: disabled": "Analyses planifiées : désactivées", + "Scheduled Start Time": "Heure de début programmée", + "Scheduled start time must be in the future.": "L’heure de début prévue doit être ultérieure.", "Schedule Generated": "Calendrier généré", "Schedule Info": "Informations sur l'horaire", + "SchedulesDirect": "Horaires directs", + "SchedulesDirect Configuration": "Configuration des horaires directs", "Schedule Settings": "Paramètres de planification", + "Schedules Generated": "Horaires générés", "Schedule Start Time": "Programmer l'heure de début", "Schedule Type": "Type d'horaire", "Schedule Window": "Fenêtre de planification", "Schedule window is already one week": "La fenêtre de planification est déjà d'une semaine", - "Scheduled": "Programmé", - "Scheduled Recordings": "Enregistrements programmés", - "Scheduled Start Time": "Heure de début programmée", - "Scheduled scans: disabled": "Analyses planifiées : désactivées", - "Scheduled start time must be in the future.": "L’heure de début prévue doit être ultérieure.", - "Schedules Generated": "Horaires générés", - "SchedulesDirect": "Horaires directs", - "SchedulesDirect Configuration": "Configuration des horaires directs", "Scheduling": "Planification", "Schema": "Schéma", "Script Options": "Options de script", "Scrubber Details": "Détails de l'épurateur", "Scrubber run cancelled": "Exécution du laveur annulée", "Scrubber tasks run after Playlist sync to check for dead URLs and automatically disable failing channels based on the configuration.": "Les tâches de nettoyage s'exécutent après la synchronisation de la playlist pour vérifier les URL mortes et désactiver automatiquement les canaux défaillants en fonction de la configuration.", + "SD Progress": "Progrès du DD", "Search & Map": "Recherche et carte", + "Search and Select Episodes": "Rechercher et sélectionner des épisodes", + "Search and Select Movies": "Rechercher et sélectionner des films", + "Search by filename...": "Rechercher par nom de fichier...", + "Search categories": "Catégories de recherche", "Search Documentation": "Rechercher dans la documentation", "Search Error": "Erreur de recherche", + "Search for master channel": "Rechercher la chaîne principale", + "Searching for TMDB/TVDB IDs. Check the logs or refresh the page in a few seconds.": "Recherche des identifiants TMDB/TVDB. Vérifiez les journaux ou actualisez la page en quelques secondes.", "Search Language": "Langue de recherche", + "Search live groups": "Rechercher des groupes en direct", "Search Query": "Requête de recherche", "Search Results": "Résultats de la recherche", + "Search series categories": "Rechercher des catégories de séries", + "Search term or question to look up in the docs": "Terme de recherche ou question à rechercher dans la documentation", + "Search The Movie Database for this movie": "Rechercher ce film dans la base de données de films", + "Search The Movie Database for this series": "Rechercher dans la base de données de films cette série", "Search TMDB": "Rechercher dans la TMDB", - "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs for the selected series? This enables Trash Guides compatibility for Sonarr.": "Rechercher dans TMDB les séries télévisées correspondantes et renseigner les identifiants TMDB/TVDB/IMDB pour la série sélectionnée ? Cela permet la compatibilité des Trash Guides pour Sonarr.", - "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs? This enables Trash Guides compatibility for Sonarr.": "Rechercher dans TMDB les séries télévisées correspondantes et renseigner les identifiants TMDB/TVDB/IMDB ? Cela permet la compatibilité des Trash Guides pour Sonarr.", "Search TMDB for matching movies and populate TMDB/IMDB IDs for all VOD channels in the selected playlist? This enables Trash Guides compatibility for Radarr.": "Rechercher dans TMDB les films correspondants et renseigner les identifiants TMDB/IMDB pour toutes les chaînes VOD dans la playlist sélectionnée ? Cela permet la compatibilité des Trash Guides pour Radarr.", "Search TMDB for matching movies and populate TMDB/IMDB IDs for the selected VOD channels? This enables Trash Guides compatibility for Radarr/Sonarr.": "Rechercher dans TMDB les films correspondants et renseigner les identifiants TMDB/IMDB pour les chaînes VOD sélectionnées ? Cela permet la compatibilité des Trash Guides pour Radarr/Sonarr.", - "Search The Movie Database for this movie": "Rechercher ce film dans la base de données de films", - "Search The Movie Database for this series": "Rechercher dans la base de données de films cette série", - "Search VOD groups": "Rechercher des groupes VOD", - "Search and Select Episodes": "Rechercher et sélectionner des épisodes", - "Search and Select Movies": "Rechercher et sélectionner des films", - "Search by filename...": "Rechercher par nom de fichier...", - "Search categories": "Catégories de recherche", - "Search for master channel": "Rechercher la chaîne principale", - "Search live groups": "Rechercher des groupes en direct", - "Search term or question to look up in the docs": "Terme de recherche ou question à rechercher dans la documentation", - "Searching for TMDB/TVDB IDs. Check the logs or refresh the page in a few seconds.": "Recherche des identifiants TMDB/TVDB. Vérifiez les journaux ou actualisez la page en quelques secondes.", + "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs? This enables Trash Guides compatibility for Sonarr.": "Rechercher dans TMDB les séries télévisées correspondantes et renseigner les identifiants TMDB/TVDB/IMDB ? Cela permet la compatibilité des Trash Guides pour Sonarr.", + "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs for the selected series? This enables Trash Guides compatibility for Sonarr.": "Rechercher dans TMDB les séries télévisées correspondantes et renseigner les identifiants TMDB/TVDB/IMDB pour la série sélectionnée ? Cela permet la compatibilité des Trash Guides pour Sonarr.", + "Search VOD groups": "Rechercher des groupes VOD", "Season": "Saison", "Season #": "Saison #", "Season (Metadata)": "Saison (métadonnées)", @@ -1765,59 +1849,74 @@ "Security scan failed": "L'analyse de sécurité a échoué", "Seen": "Vu", "Segment Duration": "Durée des segments", - "Select Episodes": "Sélectionnez les épisodes", - "Select Existing Auth": "Sélectionnez l'authentification existante", - "Select Expiration Date, or leave empty for no expiration": "Sélectionnez Date d'expiration ou laissez vide pour aucune expiration.", - "Select Group": "Sélectionner un groupe", - "Select Movies": "Sélectionnez des films", - "Select Permissions": "Sélectionnez les autorisations", - "Select VOD groups": "Sélectionnez les groupes VOD", "Select a Custom Playlist (multiple provider credentials can be configured to match source providers).": "Sélectionnez une liste de lecture personnalisée (plusieurs informations d'identification de fournisseur peuvent être configurées pour correspondre aux fournisseurs sources).", - "Select a Stream File Setting for VOD .strm file generation. ": "Sélectionnez un paramètre de fichier de flux pour la génération de fichiers VOD .strm.", - "Select a Stream File Setting for series .strm file generation.": "Sélectionnez un paramètre de fichier de flux pour la génération de fichiers .strm de série.", - "Select a Stream File Setting profile for all VOD channels in this group. VOD-level settings take priority. Leave empty to use global settings.": "Sélectionnez un profil Stream File Setting pour toutes les chaînes VOD de ce groupe. Les paramètres au niveau VOD sont prioritaires. Laissez vide pour utiliser les paramètres globaux.", - "Select a Stream File Setting profile for all series in this category. Series-level settings take priority. Leave empty to use global settings.": "Sélectionnez un profil de paramètres de fichier de flux pour toutes les séries de cette catégorie. Les paramètres au niveau de la série sont prioritaires. Laissez vide pour utiliser les paramètres globaux.", - "Select a Stream File Setting profile to override global/category settings for this series. Leave empty to use category or global settings.": "Sélectionnez un profil de paramètres de fichier de flux pour remplacer les paramètres globaux/de catégorie pour cette série. Laissez vide pour utiliser la catégorie ou les paramètres globaux.", - "Select a Stream File Setting profile to override global/group settings for this VOD channel. Leave empty to use group or global settings. Priority: VOD > Group > Global.": "Sélectionnez un profil de paramètres de fichier de flux pour remplacer les paramètres globaux/de groupe pour cette chaîne VOD. Laissez vide pour utiliser les paramètres de groupe ou globaux. Priorité : VOD > Groupe > Global.", + "Select additional playlists to include as failover sources. Leave empty to only merge channels within this playlist.": "Sélectionnez des listes de lecture supplémentaires à inclure comme sources de basculement. Laissez vide pour fusionner uniquement les chaînes de cette playlist.", "Select a group": "Sélectionnez un groupe", "Select a media server...": "Sélectionnez un serveur multimédia...", - "Select a playlist - only VODs in the selected playlist will be moved. Any VODs selected from another playlist will be ignored.": "Sélectionnez une playlist - seules les VOD de la playlist sélectionnée seront déplacées. Toutes les VOD sélectionnées dans une autre playlist seront ignorées.", + "Select an associated EPG channel for this channel.": "Sélectionnez une chaîne EPG associée à cette chaîne.", + "Select an auth to assign": "Sélectionnez une authentification à attribuer", "Select a playlist - only channels in the selected playlist will be moved. Any channels selected from another playlist will be ignored.": "Sélectionnez une liste de lecture - seules les chaînes de la liste de lecture sélectionnée seront déplacées. Toutes les chaînes sélectionnées dans une autre liste de lecture seront ignorées.", + "Select a playlist - only VODs in the selected playlist will be moved. Any VODs selected from another playlist will be ignored.": "Sélectionnez une playlist - seules les VOD de la playlist sélectionnée seront déplacées. Toutes les VOD sélectionnées dans une autre playlist seront ignorées.", "Select a playlist or leave empty": "Sélectionnez une playlist ou laissez vide", "Select a saved pattern...": "Sélectionnez un modèle enregistré...", "Select a standard Playlist (only one set of alternative credentials can be configured).": "Sélectionnez une liste de lecture standard (un seul ensemble d'informations d'identification alternatives peut être configuré).", + "Select a Stream File Setting for series .strm file generation.": "Sélectionnez un paramètre de fichier de flux pour la génération de fichiers .strm de série.", + "Select a Stream File Setting for VOD .strm file generation. ": "Sélectionnez un paramètre de fichier de flux pour la génération de fichiers VOD .strm.", + "Select a Stream File Setting profile for all series in this category. Series-level settings take priority. Leave empty to use global settings.": "Sélectionnez un profil de paramètres de fichier de flux pour toutes les séries de cette catégorie. Les paramètres au niveau de la série sont prioritaires. Laissez vide pour utiliser les paramètres globaux.", + "Select a Stream File Setting profile for all VOD channels in this group. VOD-level settings take priority. Leave empty to use global settings.": "Sélectionnez un profil Stream File Setting pour toutes les chaînes VOD de ce groupe. Les paramètres au niveau VOD sont prioritaires. Laissez vide pour utiliser les paramètres globaux.", + "Select a Stream File Setting profile to override global/category settings for this series. Leave empty to use category or global settings.": "Sélectionnez un profil de paramètres de fichier de flux pour remplacer les paramètres globaux/de catégorie pour cette série. Laissez vide pour utiliser la catégorie ou les paramètres globaux.", + "Select a Stream File Setting profile to override global/group settings for this VOD channel. Leave empty to use group or global settings. Priority: VOD > Group > Global.": "Sélectionnez un profil de paramètres de fichier de flux pour remplacer les paramètres globaux/de groupe pour cette chaîne VOD. Laissez vide pour utiliser les paramètres de groupe ou globaux. Priorité : VOD > Groupe > Global.", "Select a transcoding profile to apply to Live streams for external clients (VLC, Kodi, etc.). Does not affect the in-app player. Leave empty for direct stream proxying.": "Sélectionnez un profil de transcodage à appliquer aux flux Live pour les clients externes (VLC, Kodi, etc.). N'affecte pas le lecteur intégré à l'application. Laissez vide pour le proxy de flux direct.", "Select a transcoding profile to apply to VOD and Series streams for external clients (VLC, Kodi, etc.). Does not affect the in-app player. Leave empty for direct stream proxying.": "Sélectionnez un profil de transcodage à appliquer aux flux VOD et Séries pour les clients externes (VLC, Kodi, etc.). N'affecte pas le lecteur intégré à l'application. Laissez vide pour le proxy de flux direct.", "Select a tuner to remove from the DVR. If it is the last tuner, the entire DVR will be removed.": "Sélectionnez un tuner à supprimer du DVR. S'il s'agit du dernier tuner, l'intégralité du DVR sera supprimée.", - "Select additional playlists to include as failover sources. Leave empty to only merge channels within this playlist.": "Sélectionnez des listes de lecture supplémentaires à inclure comme sources de basculement. Laissez vide pour fusionner uniquement les chaînes de cette playlist.", - "Select an associated EPG channel for this channel.": "Sélectionnez une chaîne EPG associée à cette chaîne.", - "Select an auth to assign": "Sélectionnez une authentification à attribuer", "Select auths or leave empty": "Sélectionnez les autorisations ou laissez vide", "Select categories": "Sélectionnez les catégories", "Select category": "Sélectionnez la catégorie", "Select content source": "Sélectionnez la source de contenu", + "Selected assets deleted": "Actifs sélectionnés supprimés", + "Selected categories disabled": "Catégories sélectionnées désactivées", + "Selected categories enabled": "Catégories sélectionnées activées", + "Selected category series disabled": "Série de catégories sélectionnées désactivée", + "Selected category series enabled": "Série de catégories sélectionnées activée", + "Selected channels disabled": "Chaînes sélectionnées désactivées", + "Selected channels enabled": "Chaînes sélectionnées activées", + "Selected EPGs are processing": "Les EPG sélectionnés sont en cours de traitement", + "Selected episodes disabled": "Épisodes sélectionnés désactivés", + "Selected episodes enabled": "Épisodes sélectionnés activés", + "Selected group channels disabled": "Canaux de groupe sélectionnés désactivés", + "Selected group channels enabled": "Canaux de groupe sélectionnés activés", + "Selected groups disabled": "Groupes sélectionnés désactivés", + "Selected groups enabled": "Groupes sélectionnés activés", + "Selected logo cache refreshed": "Cache du logo sélectionné actualisé", + "Selected merged EPGs are processing": "Les EPG fusionnés sélectionnés sont en cours de traitement", + "Selected playlists are processing": "Les playlists sélectionnées sont en cours de traitement", + "Selected series cache refreshed": "Cache des séries sélectionnées actualisé", + "Selected series disabled": "Série sélectionnée désactivée", + "Selected series enabled": "Série sélectionnée activée", + "Selected VOD cache refreshed": "Cache VOD sélectionné actualisé", "Select encryption type (optional)": "Sélectionnez le type de cryptage (facultatif)", + "Select Episodes": "Sélectionnez les épisodes", "Select episodes to add to this network. Once added, you can sort them using drag and drop in the main table.": "Sélectionnez les épisodes à ajouter à ce réseau. Une fois ajoutés, vous pouvez les trier par glisser-déposer dans le tableau principal.", + "Select Existing Auth": "Sélectionnez l'authentification existante", + "Select Expiration Date, or leave empty for no expiration": "Sélectionnez Date d'expiration ou laissez vide pour aucune expiration.", + "Select Group": "Sélectionner un groupe", "Select group": "Sélectionner un groupe", "Select image": "Sélectionner une image", "Select live groups": "Sélectionnez des groupes en direct", "Select master channel": "Sélectionnez le canal principal", + "Select Movies": "Sélectionnez des films", "Select movies to add to this network. Once added, you can sort them using drag and drop in the main table.": "Sélectionnez les films à ajouter à ce réseau. Une fois ajoutés, vous pouvez les trier par glisser-déposer dans le tableau principal.", - "Select the EPG you would like to apply changes to.": "Sélectionnez l'EPG auquel vous souhaitez appliquer les modifications.", - "Select the EPG you would like to apply the reset to.": "Sélectionnez l'EPG auquel vous souhaitez appliquer la réinitialisation.", - "Select the EPG you would like to assign this post process to.": "Sélectionnez l'EPG auquel vous souhaitez attribuer ce post-processus.", - "Select the EPG you would like to map from.": "Sélectionnez l'EPG à partir duquel vous souhaitez effectuer une cartographie.", - "Select the Playlist you would like to assign this post process to.": "Sélectionnez la playlist à laquelle vous souhaitez attribuer ce post-processus.", - "Select the Playlist you would like to fetch Series metadata for.": "Sélectionnez la playlist pour laquelle vous souhaitez récupérer les métadonnées de la série.", - "Select the Playlist you would like to fetch TMDB IDs for.": "Sélectionnez la playlist pour laquelle vous souhaitez récupérer les identifiants TMDB.", - "Select the Playlist you would like to fetch VOD metadata for.": "Sélectionnez la playlist pour laquelle vous souhaitez récupérer les métadonnées VOD.", - "Select the Playlist you would like to sync Series stream files for.": "Sélectionnez la liste de lecture pour laquelle vous souhaitez synchroniser les fichiers de flux de série.", - "Select the Series you would like to apply changes to.": "Sélectionnez la série à laquelle vous souhaitez appliquer les modifications.", + "Select Permissions": "Sélectionnez les autorisations", + "Select series categories": "Sélectionnez les catégories de séries", "Select the backup file you would like to upload.": "Sélectionnez le fichier de sauvegarde que vous souhaitez télécharger.", "Select the backup you would like to restore.": "Sélectionnez la sauvegarde que vous souhaitez restaurer.", "Select the category you would like to move the series to.": "Sélectionnez la catégorie vers laquelle vous souhaitez déplacer la série.", "Select the channel attributes you want to copy to the target playlist.": "Sélectionnez les attributs de chaîne que vous souhaitez copier dans la playlist cible.", "Select the default transcoding profiles used when playing streams in the in-app player.": "Sélectionnez les profils de transcodage par défaut utilisés lors de la lecture de flux dans le lecteur intégré à l'application.", + "Select the EPG you would like to apply changes to.": "Sélectionnez l'EPG auquel vous souhaitez appliquer les modifications.", + "Select the EPG you would like to apply the reset to.": "Sélectionnez l'EPG auquel vous souhaitez appliquer la réinitialisation.", + "Select the EPG you would like to assign this post process to.": "Sélectionnez l'EPG auquel vous souhaitez attribuer ce post-processus.", + "Select the EPG you would like to map from.": "Sélectionnez l'EPG à partir duquel vous souhaitez effectuer une cartographie.", "Select the group you would like to move the channels to.": "Sélectionnez le groupe vers lequel vous souhaitez déplacer les chaînes.", "Select the playlist Series you would like to add.": "Sélectionnez la série de playlist que vous souhaitez ajouter.", "Select the playlist this import is associated with.": "Sélectionnez la playlist à laquelle cette importation est associée.", @@ -1827,19 +1926,26 @@ "Select the playlist you would like to apply changes to.": "Sélectionnez la playlist à laquelle vous souhaitez appliquer les modifications.", "Select the playlist you would like to apply the reset to.": "Sélectionnez la playlist à laquelle vous souhaitez appliquer la réinitialisation.", "Select the playlist you would like to assign this auth to.": "Sélectionnez la playlist à laquelle vous souhaitez attribuer cette authentification.", + "Select the Playlist you would like to assign this post process to.": "Sélectionnez la playlist à laquelle vous souhaitez attribuer ce post-processus.", "Select the playlist you would like to export channels for.": "Sélectionnez la playlist pour laquelle vous souhaitez exporter les chaînes.", + "Select the Playlist you would like to fetch Series metadata for.": "Sélectionnez la playlist pour laquelle vous souhaitez récupérer les métadonnées de la série.", + "Select the Playlist you would like to fetch TMDB IDs for.": "Sélectionnez la playlist pour laquelle vous souhaitez récupérer les identifiants TMDB.", + "Select the Playlist you would like to fetch VOD metadata for.": "Sélectionnez la playlist pour laquelle vous souhaitez récupérer les métadonnées VOD.", "Select the playlist you would like to import series from.": "Sélectionnez la playlist à partir de laquelle vous souhaitez importer des séries.", "Select the playlist you would like to map to.": "Sélectionnez la playlist à laquelle vous souhaitez mapper.", + "Select the Playlist you would like to sync Series stream files for.": "Sélectionnez la liste de lecture pour laquelle vous souhaitez synchroniser les fichiers de flux de série.", + "Select the Series you would like to apply changes to.": "Sélectionnez la série à laquelle vous souhaitez appliquer les modifications.", "Select the target playlist and channel attributes to copy": "Sélectionnez la playlist cible et les attributs de la chaîne à copier", + "Select VOD groups": "Sélectionnez les groupes VOD", + "Select what your plugin will participate in. Each capability adds a required PHP interface to your Plugin class.": "Sélectionnez à quoi votre plugin participera. Chaque fonctionnalité ajoute une interface PHP requise à votre classe Plugin.", "Select what you would like to find and replace in the selected category names.": "Sélectionnez ce que vous souhaitez rechercher et remplacer dans les noms de catégories sélectionnés.", "Select what you would like to find and replace in the selected channels.": "Sélectionnez ce que vous souhaitez rechercher et remplacer dans les chaînes sélectionnées.", "Select what you would like to find and replace in the selected epg channels.": "Sélectionnez ce que vous souhaitez rechercher et remplacer dans les chaînes epg sélectionnées.", "Select what you would like to find and replace in the selected group names.": "Sélectionnez ce que vous souhaitez rechercher et remplacer dans les noms de groupes sélectionnés.", - "Select what you would like to find and replace in your VOD group names.": "Sélectionnez ce que vous souhaitez rechercher et remplacer dans les noms de vos groupes VOD.", "Select what you would like to find and replace in your channels list.": "Sélectionnez ce que vous souhaitez rechercher et remplacer dans votre liste de chaînes.", "Select what you would like to find and replace in your live group names.": "Sélectionnez ce que vous souhaitez rechercher et remplacer dans les noms de vos groupes en direct.", "Select what you would like to find and replace in your series category names.": "Sélectionnez ce que vous souhaitez rechercher et remplacer dans les noms de catégories de vos séries.", - "Select what your plugin will participate in. Each capability adds a required PHP interface to your Plugin class.": "Sélectionnez à quoi votre plugin participera. Chaque fonctionnalité ajoute une interface PHP requise à votre classe Plugin.", + "Select what you would like to find and replace in your VOD group names.": "Sélectionnez ce que vous souhaitez rechercher et remplacer dans les noms de vos groupes VOD.", "Select whether to send a request to a URL, execute a local script, or send an email.": "Choisissez d'envoyer une demande à une URL, d'exécuter un script local ou d'envoyer un e-mail.", "Select which additional tools the AI assistant can use. Core tools (navigation, memory) are always available.": "Sélectionnez les outils supplémentaires que l'assistant IA peut utiliser. Les outils de base (navigation, mémoire) sont toujours disponibles.", "Select which libraries to import from your media server": "Sélectionnez les bibliothèques à importer depuis votre serveur multimédia", @@ -1847,85 +1953,88 @@ "Select which tools the AI assistant can use.": "Sélectionnez les outils que l'assistant IA peut utiliser.", "Select your AI provider and configure the API credentials.": "Sélectionnez votre fournisseur d'IA et configurez les informations d'identification de l'API.", "Select your SchedulesDirect lineup": "Sélectionnez votre programmation Schedules Direct", - "Selected EPGs are processing": "Les EPG sélectionnés sont en cours de traitement", - "Selected VOD cache refreshed": "Cache VOD sélectionné actualisé", - "Selected assets deleted": "Actifs sélectionnés supprimés", - "Selected categories disabled": "Catégories sélectionnées désactivées", - "Selected categories enabled": "Catégories sélectionnées activées", - "Selected category series disabled": "Série de catégories sélectionnées désactivée", - "Selected category series enabled": "Série de catégories sélectionnées activée", - "Selected channels disabled": "Chaînes sélectionnées désactivées", - "Selected channels enabled": "Chaînes sélectionnées activées", - "Selected episodes disabled": "Épisodes sélectionnés désactivés", - "Selected episodes enabled": "Épisodes sélectionnés activés", - "Selected group channels disabled": "Canaux de groupe sélectionnés désactivés", - "Selected group channels enabled": "Canaux de groupe sélectionnés activés", - "Selected groups disabled": "Groupes sélectionnés désactivés", - "Selected groups enabled": "Groupes sélectionnés activés", - "Selected logo cache refreshed": "Cache du logo sélectionné actualisé", - "Selected merged EPGs are processing": "Les EPG fusionnés sélectionnés sont en cours de traitement", - "Selected playlists are processing": "Les playlists sélectionnées sont en cours de traitement", - "Selected series cache refreshed": "Cache des séries sélectionnées actualisé", - "Selected series disabled": "Série sélectionnée désactivée", - "Selected series enabled": "Série sélectionnée activée", - "Send Test Email": "Envoyer un e-mail de test", "Send as GET or POST request.": "Envoyer sous forme de requête GET ou POST.", "Send as JSON body": "Envoyer en tant que corps JSON", + "Send Test Email": "Envoyer un e-mail de test", "Send the notification to yourself as well (for testing purposes)": "Envoyez-vous également la notification (à des fins de test)", "Send without body": "Envoyer sans corps", "Series": "Série", "Series .strm files are being synced": "Les fichiers de la série .strm sont en cours de synchronisation", + "Series are being processed": "Les séries sont en cours de traitement", + "Series categories": "Catégories de séries", "Series Category": "Catégorie de série", "Series Details": "Détails de la série", - "Series Processing": "Traitement en série", - "Series Sync": "Synchronisation des séries", - "Series are being processed": "Les séries sont en cours de traitement", "Series episodes disabled": "Épisodes de séries désactivés", "Series episodes enabled": "Épisodes de séries activés", "Series have been added and are being processed.": "Des séries ont été ajoutées et sont en cours de traitement.", "Series is being processed": "La série est en cours de traitement", "Series moved to category": "Série déplacée vers la catégorie", "Series poster URL": "URL de l'affiche de la série", + "Series Processing": "Traitement en série", "Series processing": "Traitement en série", "Series record not found.": "Enregistrement de la série introuvable.", "Series stream file settings": "Paramètres du fichier de flux de série", + "Series Sync": "Synchronisation des séries", "Series to Import": "Séries à importer", "Server": "Serveur", "Server Configuration": "Configuration du serveur", "Server Info": "Informations sur le serveur", "Server Type": "Type de serveur", - "Set Timeshift": "Définir le décalage horaire", - "Set logo URL": "Définir l'URL du logo", + "Set EPG shift": "Définir le décalage EPG", "Set logo override URL": "Définir l'URL de remplacement du logo", + "Set logo URL": "Définir l'URL du logo", "Set poster URL": "Définir l'URL de l'affiche", "Set preferred icon to EPG": "Définir l'icône préférée sur EPG", + "Set the EPG time shift (tvg-shift) for the selected channels. This shifts the EPG program schedule by the specified number of hours.": "Réglez le décalage temporel EPG (tvg-shift) pour les chaînes sélectionnées. Cela décale la programmation du programme EPG du nombre d’heures spécifié.", "Set the timeshift (in hours) for the selected channels. Use 0 to disable catch-up.": "Définissez le décalage horaire (en heures) pour les chaînes sélectionnées. Utilisez 0 pour désactiver le rattrapage.", "Set the timeshift value for the selected channels. Use 0 to disable catch-up.": "Définissez la valeur du timeshift pour les canaux sélectionnés. Utilisez 0 pour désactiver le rattrapage.", + "Set Timeshift": "Définir le décalage horaire", "Set timeshift": "Définir le décalage horaire", - "Set to 0 (or clear value) for unlimited.": "Réglez sur 0 (ou effacez la valeur) pour un nombre illimité.", - "Set to 0 for unlimited streams.": "Réglez sur 0 pour des flux illimités.", "Settings": "Paramètres", "Settings for automatically enabling new content": "Paramètres pour activer automatiquement le nouveau contenu", "Settings saved": "Paramètres enregistrés", "Settings used when mapping EPG to a Playlist.": "Paramètres utilisés lors du mappage de l'EPG à une liste de lecture.", + "Set to 0 (or clear value) for unlimited.": "Réglez sur 0 (ou effacez la valeur) pour un nombre illimité.", + "Set to 0 for unlimited streams.": "Réglez sur 0 pour des flux illimités.", + "SHA-256 Checksum": "Somme de contrôle SHA-256", + "Shift the EPG time for the selected channels by this many hours. Use values like -2, -1, 0, 1, 2, etc. Use 0 to reset.": "Décalez la durée EPG des chaînes sélectionnées de ce nombre d'heures. Utilisez des valeurs telles que -2, -1, 0, 1, 2, etc. Utilisez 0 pour réinitialiser.", "Short description for the plugin manifest. Leave blank for a default.": "Brève description du manifeste du plugin. Laissez vide pour une valeur par défaut.", "Short description of the content.": "Brève description du contenu.", "Show breadcrumbs": "Afficher le fil d'Ariane", "Show breadcrumbs under the page titles": "Afficher le fil d'Ariane sous les titres des pages", + "shown": "montré", "Silence Detection Settings": "Paramètres de détection du silence", "Silence duration (seconds)": "Durée du silence (secondes)", "Silence threshold (dB)": "Seuil de silence (dB)", "Simple authentication for playlist access.": "Authentification simple pour l'accès à la playlist.", "Size": "Taille", "Skip channels without EPG ID": "Ignorer les chaînes sans identifiant EPG", + "Smart": "Intelligent", + "Smart channel": "Canal intelligent", + "Smart channel created": "Chaîne intelligente créée", + "Smart channels cannot be sources": "Les chaînes intelligentes ne peuvent pas être des sources", + "Smart channels must be created from sources within a single playlist. Narrow your selection and try again.": "Les chaînes intelligentes doivent être créées à partir de sources au sein d’une seule playlist. Affinez votre sélection et réessayez.", + "Smart channel without failovers won't stream.": "Le canal intelligent sans basculement ne diffusera pas.", + "Smart channel — streams the highest-ranked failover automatically": "Canal intelligent : diffuse automatiquement le basculement le mieux classé", + "SMTP": "SMTP", + "SMTP Encryption": "Cryptage SMTP", + "SMTP From Address": "Adresse de départ SMTP", + "SMTP Host": "Hôte SMTP", + "SMTP Password": "Mot de passe SMTP", + "SMTP Port": "Port SMTP", + "SMTP Settings": "Paramètres SMTP", + "SMTP Username": "Nom d'utilisateur SMTP", + "socks5://user:pass@host:port or http://user:pass@host:port": "chaussettes5://user:pass@host:port ou http://user:pass@host:port", + "Some channels were skipped": "Certaines chaînes ont été ignorées", "Sort": "Trier", + "Sort all channels in this group alphabetically? This will update the sort order.": "Trier toutes les chaînes de ce groupe par ordre alphabétique ? Cela mettra à jour l’ordre de tri.", "Sort Alpha": "Trier Alpha", "Sort Alpha Configs": "Trier les configurations Alpha", "Sort By": "Trier par", + "Sort now": "Trier maintenant", "Sort Order": "Ordre de tri", - "Sort all channels in this group alphabetically? This will update the sort order.": "Trier toutes les chaînes de ce groupe par ordre alphabétique ? Cela mettra à jour l’ordre de tri.", - "Sort the selected VOD alphabetically? This will update their sort order within this custom playlist.": "Trier les VOD sélectionnés alphabétiquement ? Cela mettra à jour leur ordre de tri dans cette liste personnalisée.", "Sort the selected channels alphabetically? This will update their sort order within this custom playlist.": "Trier les chaînes sélectionnées alphabétiquement ? Cela mettra à jour leur ordre de tri dans cette liste personnalisée.", + "Sort the selected VOD alphabetically? This will update their sort order within this custom playlist.": "Trier les VOD sélectionnés alphabétiquement ? Cela mettra à jour leur ordre de tri dans cette liste personnalisée.", "Source": "Source", "Source EPGs": "EPG sources", "Source Metadata": "Métadonnées sources", @@ -1940,39 +2049,39 @@ "Standard Playlist": "Liste de lecture standard", "Start Broadcast": "Démarrer la diffusion", "Start Broadcasting": "Commencer la diffusion", - "Start Number": "Numéro de départ", - "Start On Viewer Connection": "Démarrer à la connexion du visualiseur", "Start broadcasting for the selected networks.": "Démarrez la diffusion pour les réseaux sélectionnés.", "Start continuous HLS broadcasting": "Démarrer la diffusion HLS continue", - "Start probing": "Commencer à sonder", "Started": "Commencé", "Started At": "Commencé à", + "Start Number": "Numéro de départ", + "Start On Viewer Connection": "Démarrer à la connexion du visualiseur", + "Start probing": "Commencer à sonder", "Station ID": "Identifiant de la station", "Status": "Statut", - "Status has been reset for the selected Playlists.": "Le statut a été réinitialisé pour les listes de lecture sélectionnées.", "Status has been reset for the selected media servers.": "L'état a été réinitialisé pour les serveurs multimédias sélectionnés.", + "Status has been reset for the selected Playlists.": "Le statut a été réinitialisé pour les listes de lecture sélectionnées.", "Still running": "Toujours en cours d'exécution", "Stop Broadcast": "Arrêter la diffusion", "Stop Broadcasting": "Arrêter la diffusion", - "Stop Run": "Arrêter de courir", "Stop broadcasting for the selected networks.": "Arrêtez la diffusion pour les réseaux sélectionnés.", "Stop oldest stream when limit reached": "Arrêter le flux le plus ancien lorsque la limite est atteinte", + "Stop Run": "Arrêter de courir", "Stop the current broadcast": "Arrêter la diffusion en cours", "Stop the current broadcast. Viewers will be disconnected.": "Arrêtez la diffusion en cours. Les téléspectateurs seront déconnectés.", + "Stream Backend": "Backend de flux", "Stream File Setting": "Paramètres du fichier de flux", "Stream File Setting Profile": "Profil de paramètre de fichier de flux", "Stream File Settings": "Paramètres du fichier de flux", - "Stream Format": "Format du flux", - "Stream Monitor": "Moniteur de flux", - "Stream Output": "Sortie de flux", - "Stream Probing": "Sondage de flux", - "Stream Profile": "Profil de flux", - "Stream Profiles": "Profils de flux", - "Stream URL": "URL du flux", "Stream file settings": "Paramètres du fichier de flux", "Stream file settings define how .strm files are generated and organized. They can be assigned globally in Settings, to Groups/Categories, or directly to individual Series/VOD channels. Priority: Direct > Group/Category > Global.": "Les paramètres des fichiers de flux définissent la manière dont les fichiers .strm sont générés et organisés. Ils peuvent être attribués globalement dans Paramètres, à des groupes/catégories ou directement à des chaînes de séries/VOD individuelles. Priorité : Direct > Groupe/Catégorie > Global.", + "Stream Format": "Format du flux", + "Streaming notes from running and recent jobs. Open any run to inspect the payload, result snapshot, and full trail.": "Notes en streaming des tâches en cours et récentes. Ouvrez n’importe quelle exécution pour inspecter la charge utile, l’instantané du résultat et la trace complète.", + "Streaming Output": "Sortie en streaming", + "Stream Monitor": "Moniteur de flux", "Stream not probed": "Flux non sondé", + "Stream Output": "Sortie de flux", "Stream probed": "Flux sondé", + "Stream Probing": "Sondage de flux", "Stream probing completed": "Sondage de flux terminé", "Stream probing disabled": "Sondage de flux désactivé", "Stream probing enabled": "Sondage de flux activé", @@ -1981,10 +2090,11 @@ "Stream probing has been enabled for the selected channels.": "Le sondage de flux a été activé pour les canaux sélectionnés.", "Stream probing is running in the background. You will be notified once the process is complete.": "Le sondage de flux s'exécute en arrière-plan. Vous serez averti une fois le processus terminé.", "Stream probing started": "L'analyse du flux a commencé", + "Stream Profile": "Profil de flux", + "Stream Profiles": "Profils de flux", "Stream profiles are used to define how streams are transcoded by the proxy. They can be assigned to playlists to enable transcoding for those playlists. If a playlist does not have a stream profile assigned, direct stream proxying will be used.": "Les profils de flux sont utilisés pour définir la manière dont les flux sont transcodés par le proxy. Ils peuvent être attribués à des listes de lecture pour activer le transcodage de ces listes de lecture. Si aucun profil de flux n’est attribué à une liste de lecture, le proxy de flux direct sera utilisé.", - "Streaming Output": "Sortie en streaming", - "Streaming notes from running and recent jobs. Open any run to inspect the payload, result snapshot, and full trail.": "Notes en streaming des tâches en cours et récentes. Ouvrez n’importe quelle exécution pour inspecter la charge utile, l’instantané du résultat et la trace complète.", "Streams": "Flux", + "Stream URL": "URL du flux", "Strip all catch-up related attributes from the playlist output and Xtream API. Useful when your provider\\'s catch-up doesn\\'t work or is unreliable.": "Supprimez tous les attributs liés au rattrapage de la sortie de la playlist et de l'API Xtream. Utile lorsque le rattrapage de votre fournisseur ne fonctionne pas ou n'est pas fiable.", "Structured Context": "Contexte structuré", "Subject line for the email (optional).": "Ligne d'objet de l'e-mail (facultatif).", @@ -1995,57 +2105,46 @@ "Successfully connected to TMDB API!": "Connexion réussie à l'API TMDB !", "Summary": "Résumé", "Sync .strm files now? This will generate .strm files for enabled series.": "Synchroniser les fichiers .strm maintenant ? Cela générera des fichiers .strm pour les séries activées.", + "Sync and Process": "Synchronisation et traitement", + "Sync category series .strm files now? This will generate .strm files for the enabled series at the path set for the series.": "Synchroniser les fichiers .strm de la série de catégories maintenant ? Cela générera des fichiers .strm pour la série activée au chemin défini pour la série.", + "Synced": "Synchronisé", + "Synced at": "Synchronisé à", "Sync Failed": "Échec de la synchronisation", + "Sync group VOD channels .strm files now? This will generate .strm files for the group channels.": "Synchroniser les fichiers .strm des chaînes VOD de groupe maintenant ? Cela générera des fichiers .strm pour les canaux de groupe.", "Sync Information": "Informations de synchronisation", "Sync Interval": "Intervalle de synchronisation", "Sync Invalidation": "Invalidation de la synchronisation", + "Sync invalidation threshold": "Seuil d'invalidation de synchronisation", "Sync Location": "Emplacement de synchronisation", "Sync Logs": "Journaux de synchronisation", "Sync Media Server": "Synchroniser le serveur multimédia", "Sync Mode": "Mode de synchronisation", + "Sync movies as VOD channels": "Synchronisez les films en tant que chaînes VOD", "Sync Now": "Synchroniser maintenant", "Sync Options": "Options de synchronisation", "Sync Progress": "Progression de la synchronisation", "Sync Schedule": "Calendrier de synchronisation", "Sync Selected": "Synchronisation sélectionnée", - "Sync Series .strm files": "Synchroniser les fichiers .strm de la série", - "Sync Started": "Synchronisation démarrée", - "Sync Status": "Statut de synchronisation", - "Sync TV series with episodes": "Synchronisez les séries télévisées avec les épisodes", - "Sync Time": "Heure de synchronisation", - "Sync VOD .strm file": "Synchroniser le fichier .strm VOD", - "Sync VOD .strm files": "Synchroniser les fichiers VOD .strm", - "Sync VOD .strm files now? This will generate .strm files for this VOD channel at the path set for this channel.": "Synchroniser les fichiers VOD .strm maintenant ? Cela générera des fichiers .strm pour cette chaîne VOD au chemin défini pour cette chaîne.", - "Sync and Process": "Synchronisation et traitement", - "Sync category series .strm files now? This will generate .strm files for the enabled series at the path set for the series.": "Synchroniser les fichiers .strm de la série de catégories maintenant ? Cela générera des fichiers .strm pour la série activée au chemin défini pour la série.", - "Sync group VOD channels .strm files now? This will generate .strm files for the group channels.": "Synchroniser les fichiers .strm des chaînes VOD de groupe maintenant ? Cela générera des fichiers .strm pour les canaux de groupe.", - "Sync invalidation threshold": "Seuil d'invalidation de synchronisation", - "Sync movies as VOD channels": "Synchronisez les films en tant que chaînes VOD", - "Sync selected VOD .strm files now? This will generate .strm files for the selected VOD channels at the path set for the channels.": "Synchroniser les fichiers VOD .strm sélectionnés maintenant ? Cela générera des fichiers .strm pour les chaînes VOD sélectionnées au chemin défini pour les chaînes.", "Sync selected category series .strm files now? This will generate .strm files for the enabled series at the path set for the series.": "Synchroniser les fichiers .strm de la série de catégories sélectionnées maintenant ? Cela générera des fichiers .strm pour la série activée au chemin défini pour la série.", "Sync selected category series .strm files now? This will generate .strm files for the selected series at the path set for the series.": "Synchroniser les fichiers .strm de la série de catégories sélectionnées maintenant ? Cela générera des fichiers .strm pour la série sélectionnée au chemin défini pour la série.", "Sync selected group VOD channels .strm files now? This will generate .strm files for the group channels.": "Synchroniser les fichiers .strm des chaînes VOD du groupe sélectionné maintenant ? Cela générera des fichiers .strm pour les canaux de groupe.", "Sync selected series .strm files now? This will generate .strm files for the selected series at the path set for the series.": "Synchroniser les fichiers .strm de la série sélectionnée maintenant ? Cela générera des fichiers .strm pour la série sélectionnée au chemin défini pour la série.", + "Sync selected VOD .strm files now? This will generate .strm files for the selected VOD channels at the path set for the channels.": "Synchroniser les fichiers VOD .strm sélectionnés maintenant ? Cela générera des fichiers .strm pour les chaînes VOD sélectionnées au chemin défini pour les chaînes.", + "Sync Series .strm files": "Synchroniser les fichiers .strm de la série", "Sync series .strm files now? This will generate .strm files for this series at the path set for this series.": "Synchroniser les fichiers .strm de la série maintenant ? Cela générera des fichiers .strm pour cette série au chemin défini pour cette série.", + "Sync Started": "Synchronisation démarrée", + "Sync Status": "Statut de synchronisation", "Sync stream files": "Synchroniser les fichiers de flux", "Sync stream files for all enabled Playlist Series? If disabled, it will only sync for Series of the selected Playlist.": "Synchroniser les fichiers de flux pour toutes les séries de listes de lecture activées ? S'il est désactivé, il ne sera synchronisé que pour les séries de la liste de lecture sélectionnée.", + "Sync Time": "Heure de synchronisation", "Sync time": "Heure de synchronisation", - "Synced": "Synchronisé", - "Synced at": "Synchronisé à", + "Sync TV series with episodes": "Synchronisez les séries télévisées avec les épisodes", + "Sync VOD .strm file": "Synchroniser le fichier .strm VOD", + "Sync VOD .strm files": "Synchroniser les fichiers VOD .strm", + "Sync VOD .strm files now? This will generate .strm files for this VOD channel at the path set for this channel.": "Synchroniser les fichiers VOD .strm maintenant ? Cela générera des fichiers .strm pour cette chaîne VOD au chemin défini pour cette chaîne.", "System": "Système", "System Prompt": "Invite système", "System Resources": "Ressources système", - "TMDB": "TMDB", - "TMDB API Key": "Clé API TMDB", - "TMDB API Key Required": "Clé API TMDB requise", - "TMDB ID": "ID TMDB", - "TMDB ID format": "Format d'identifiant TMDB", - "TMDB Integration": "Intégration TMDB", - "TMDB Metadata Applied": "Métadonnées TMDB appliquées", - "TMDB Search Started": "Recherche TMDB lancée", - "TMDB/TVDB": "TMDB/TVDB", - "TVDB ID": "ID TVDB", - "TVG ID/Stream ID (default)": "ID TVG/ID de flux (par défaut)", "Tags": "Balises", "Target": "Cible", "Target Playlist": "Liste de lecture cible", @@ -2053,40 +2152,38 @@ "Technical Details": "Détails techniques", "Test": "Test", "Test Connection": "Tester la connexion", + "Test connection": "Tester la connexion", "Test Connection & Discover Libraries": "Testez la connexion et découvrez les bibliothèques", + "Test credentials and auto-detect max connections": "Testez les informations d'identification et détectez automatiquement le nombre maximal de connexions", "Test Email Sent": "E-mail de test envoyé", "Test Primary": "Test primaire", - "Test WebSocket": "Tester WebSocket", - "Test connection": "Tester la connexion", - "Test credentials and auto-detect max connections": "Testez les informations d'identification et détectez automatiquement le nombre maximal de connexions", "Test primary account credentials and detect max connections": "Testez les informations d'identification du compte principal et détectez le nombre maximal de connexions", "Test resolver connection": "Tester la connexion du résolveur", + "Test WebSocket": "Tester WebSocket", "The \"From\" email address for outgoing emails. Defaults to no-reply@m3u-editor.dev.": "L'adresse e-mail « De » pour les e-mails sortants. La valeur par défaut est no-reply@m3u-editor.dev.", - "The AI provider to use for the Copilot assistant.": "Le fournisseur d’IA à utiliser pour l’assistant Copilot.", - "The EPG file cache has been successfully cleared.": "Le cache du fichier EPG a été vidé avec succès.", - "The EPG map has been disabled for the selected channels.": "La carte EPG a été désactivée pour les chaînes sélectionnées.", - "The EPG map has been re-enabled for the selected channels.": "La carte EPG a été réactivée pour les chaînes sélectionnées.", - "The EPG mapping process has been initiated for the selected mappings.": "Le processus de mappage EPG a été lancé pour les mappages sélectionnés.", - "The EPG mapping process has been initiated.": "Le processus de cartographie EPG a été lancé.", - "The EPG mapping process has been re-initiated.": "Le processus de cartographie EPG a été relancé.", - "The EPG source ID to match against. Always ask the user which EPG source to use before calling this tool.": "L’ID de la source EPG à comparer. Demandez toujours à l'utilisateur quelle source EPG utiliser avant d'appeler cet outil.", - "The Movie Database ID.": "L'ID de la base de données de films.", - "The TMDB ID lookup has been started. You will be notified when it is complete.": "La recherche d'ID TMDB a été lancée. Vous serez averti lorsqu'il sera terminé.", - "The VOD metadata fetching and processing has been started for the group channels. Only enabled channels will be processed. You will be notified when it is complete.": "La récupération et le traitement des métadonnées VOD ont été lancés pour les chaînes de groupe. Seules les chaînes activées seront traitées. Vous serez averti lorsqu'il sera terminé.", - "The VOD metadata fetching and processing has been started for the selected group channels. Only enabled channels will be processed. You will be notified when it is complete.": "La récupération et le traitement des métadonnées VOD ont été lancés pour les chaînes du groupe sélectionné. Seules les chaînes activées seront traitées. Vous serez averti lorsqu'il sera terminé.", - "The VOD metadata fetching and processing has been started. You will be notified when it is complete.": "La récupération et le traitement des métadonnées VOD ont commencé. Vous serez averti lorsqu'il sera terminé.", "The action to perform: \"select\", \"update\", or \"delete\".": "L'action à effectuer : \"select\", \"update\" ou \"delete\".", + "The AI provider to use for the Copilot assistant.": "Le fournisseur d’IA à utiliser pour l’assistant Copilot.", "The category series have been moved to the chosen category.": "Les séries de catégories ont été déplacées vers la catégorie choisie.", "The channel group name to process (e.g. \"UNITED STATES\").": "Le nom du groupe de canaux à traiter (par exemple \"ÉTATS-UNIS\").", "The channels in the selected groups have been recounted sequentially.": "Les chaînes des groupes sélectionnés ont été racontées séquentiellement.", "The channels in this group have been recounted.": "Les chaînes de ce groupe ont été racontées.", "The channels in this group have been sorted alphabetically.": "Les chaînes de ce groupe ont été triées par ordre alphabétique.", + "The container format FFmpeg will produce. Must match the -f muxer argument in your FFmpeg template above.": "Le format de conteneur que FFmpeg produira. Must match the -f muxer argument in your FFmpeg template above.", "The container format for the output stream.": "Le format du conteneur pour le flux de sortie.", + "The container format Streamlink will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format Streamlink actually produces for the selected quality.": "Le format de conteneur Streamlink sera affiché. Cela définit l'extension de l'URL (par exemple .ts, .mp4) afin que les joueurs sachent comment gérer le flux. Doit correspondre au format réellement produit par Streamlink pour la qualité sélectionnée.", + "The container format yt-dlp will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format produced by your yt-dlp format selector.": "Le format de conteneur yt-dlp sera affiché. Cela définit l'extension de l'URL (par exemple .ts, .mp4) afin que les joueurs sachent comment gérer le flux. Must match the format produced by your yt-dlp format selector.", "The current category series have been disabled.": "Les séries de catégories actuelles ont été désactivées.", "The current category series have been enabled.": "Les séries de catégories actuelles ont été activées.", "The database table to query.": "La table de base de données à interroger.", "The default transcoding profile used for the in-app player for Live content. Leave empty to disable transcoding (some streams may not be playable in the player).": "Le profil de transcodage par défaut utilisé pour le lecteur intégré à l'application pour le contenu Live. Laissez vide pour désactiver le transcodage (certains flux peuvent ne pas être lisibles dans le lecteur).", "The default transcoding profile used for the in-app player for VOD/Series content. Leave empty to disable transcoding (some streams may not be playable in the player).": "The default transcoding profile used for the in-app player for VOD/Series content. Laissez vide pour désactiver le transcodage (certains flux peuvent ne pas être lisibles dans le lecteur).", + "The EPG file cache has been successfully cleared.": "Le cache du fichier EPG a été vidé avec succès.", + "The EPG map has been disabled for the selected channels.": "La carte EPG a été désactivée pour les chaînes sélectionnées.", + "The EPG map has been re-enabled for the selected channels.": "La carte EPG a été réactivée pour les chaînes sélectionnées.", + "The EPG mapping process has been initiated.": "Le processus de cartographie EPG a été lancé.", + "The EPG mapping process has been initiated for the selected mappings.": "Le processus de mappage EPG a été lancé pour les mappages sélectionnés.", + "The EPG mapping process has been re-initiated.": "Le processus de cartographie EPG a été relancé.", + "The EPG source ID to match against. Always ask the user which EPG source to use before calling this tool.": "L’ID de la source EPG à comparer. Demandez toujours à l'utilisateur quelle source EPG utiliser avant d'appeler cet outil.", "The event that will trigger this post process.": "L'événement qui déclenchera ce post-processus.", "The file extension of the VOD container (e.g., mp4, mkv, etc.).": "L'extension de fichier du conteneur VOD (par exemple, mp4, mkv, etc.).", "The group channels have been disabled.": "Les canaux de groupe ont été désactivés.", @@ -2096,14 +2193,15 @@ "The groups channels have been disabled.": "Les canaux des groupes ont été désactivés.", "The latest execution and its immediate outcome.": "La dernière exécution et son résultat immédiat.", "The latest plugin executions across all installed plugins.": "Les dernières exécutions de plugins sur tous les plugins installés.", - "The logo URL has been updated for the selected networks.": "L'URL du logo a été mise à jour pour les réseaux sélectionnés.", "The logo cache has been cleared. Logos will be fetched again on next request wherever logo proxy is enabled.": "Le cache du logo a été vidé. Les logos seront récupérés à nouveau lors de la prochaine demande partout où le proxy de logo est activé.", - "The logo override URL has been updated for the selected VOD channels.": "L'URL de remplacement du logo a été mise à jour pour les chaînes VOD sélectionnées.", "The logo override URL has been updated for the selected channels.": "L'URL de remplacement du logo a été mise à jour pour les chaînes sélectionnées.", + "The logo override URL has been updated for the selected VOD channels.": "L'URL de remplacement du logo a été mise à jour pour les chaînes VOD sélectionnées.", + "The logo URL has been updated for the selected networks.": "L'URL du logo a été mise à jour pour les réseaux sélectionnés.", "The merge has been disabled for the selected channels. They will not be merged during \"Merge Same ID\" jobs.": "La fusion a été désactivée pour les chaînes sélectionnées. Ils ne seront pas fusionnés lors des tâches « Fusionner le même ID ».", "The merge has been re-enabled for the selected channels. They can now be merged during \"Merge Same ID\" jobs.": "La fusion a été réactivée pour les chaînes sélectionnées. Ils peuvent désormais être fusionnés lors des tâches « Fusionner le même ID ».", "The model to use. Leave blank to use the provider default.": "Le modèle à utiliser. Laissez vide pour utiliser la valeur par défaut du fournisseur.", "The most recent plugin job and where to inspect it.": "Le travail de plugin le plus récent et où l’inspecter.", + "The Movie Database ID.": "L'ID de la base de données de films.", "The original title in the source language.": "Le titre original dans la langue source.", "The playlist ID chosen by the user. Omit on the first call — you must list playlists first so the user can select one.": "L'ID de playlist choisi par l'utilisateur. Omettre lors du premier appel : vous devez d'abord répertorier les listes de lecture afin que l'utilisateur puisse en sélectionner une.", "The playlist ID containing the channels to match.": "L'ID de la playlist contenant les chaînes à rechercher.", @@ -2127,10 +2225,6 @@ "The scrubber has been initiated and will run in the background.": "Le nettoyeur a été lancé et s'exécutera en arrière-plan.", "The scrubber has been re-initiated.": "L'épurateur a été réinitialisé.", "The search term to look for": "Le terme de recherche à rechercher", - "The selected EPGs are being processed in the background. Depending on the size of the guide data, this may take a while.": "Les EPG sélectionnés sont traités en arrière-plan. En fonction de la taille des données du guide, cela peut prendre un certain temps.", - "The selected VOD have been added to the custom group.": "Les VOD sélectionnées ont été ajoutées au groupe personnalisé.", - "The selected VOD have been sorted alphabetically.": "Les VOD sélectionnées ont été triées alphabétiquement.", - "The selected VODs have been moved to the chosen group.": "Les VOD sélectionnées ont été déplacées vers le groupe choisi.", "The selected categories have been disabled.": "Les catégories sélectionnées ont été désactivées.", "The selected categories have been enabled.": "Les catégories sélectionnées ont été activées.", "The selected category series have been disabled.": "Les séries de catégories sélectionnées ont été désactivées.", @@ -2144,6 +2238,7 @@ "The selected channels have been recounted.": "Les chaînes sélectionnées ont été racontées.", "The selected channels have been sorted alphabetically.": "Les chaînes sélectionnées ont été triées alphabétiquement.", "The selected channels were recounted for this custom playlist only.": "Les chaînes sélectionnées ont été recensées pour cette playlist personnalisée uniquement.", + "The selected EPGs are being processed in the background. Depending on the size of the guide data, this may take a while.": "Les EPG sélectionnés sont traités en arrière-plan. En fonction de la taille des données du guide, cela peut prendre un certain temps.", "The selected episodes have been disabled.": "Les épisodes sélectionnés ont été désactivés.", "The selected episodes have been enabled.": "Les épisodes sélectionnés ont été activés.", "The selected group channels have been disabled.": "Les canaux de groupe sélectionnés ont été désactivés.", @@ -2159,20 +2254,26 @@ "The selected series have been detached from the custom playlist.": "Les séries sélectionnées ont été détachées de la playlist personnalisée.", "The selected series have been disabled.": "Les séries sélectionnées ont été désactivées.", "The selected series have been enabled.": "Les séries sélectionnées ont été activées.", + "The selected VOD have been added to the custom group.": "Les VOD sélectionnées ont été ajoutées au groupe personnalisé.", + "The selected VOD have been sorted alphabetically.": "Les VOD sélectionnées ont été triées alphabétiquement.", + "The selected VODs have been moved to the chosen group.": "Les VOD sélectionnées ont été déplacées vers le groupe choisi.", + "These plugins have issues that need your attention — they may be blocked, modified, invalid, or incomplete.": "Ces plugins présentent des problèmes qui nécessitent votre attention : ils peuvent être bloqués, modifiés, invalides ou incomplets.", "The series episodes have been disabled.": "Les épisodes de la série ont été désactivés.", "The series episodes have been enabled.": "Les épisodes de la série ont été activés.", "The series has been moved to the chosen category.": "La série a été déplacée vers la catégorie choisie.", "The series have been moved to the chosen category.": "Les séries ont été déplacées vers la catégorie choisie.", + "These settings are used by hook-triggered runs, scheduled runs, and as defaults for manual actions.": "Ces paramètres sont utilisés par les exécutions déclenchées par hook, les exécutions planifiées et comme valeurs par défaut pour les actions manuelles.", "The starting channel number.": "Le numéro de canal de départ.", "The system prompt sent to the AI on every conversation to configure its behaviour.": "L'invite système envoyée à l'IA à chaque conversation pour configurer son comportement.", "The title from metadata info.": "Le titre des informations sur les métadonnées.", + "The TMDB ID lookup has been started. You will be notified when it is complete.": "La recherche d'ID TMDB a été lancée. Vous serez averti lorsqu'il sera terminé.", "The type of item to assign this post process to.": "Type d'élément auquel attribuer ce post-traitement.", "The type of playlist to assign this auth to.": "Le type de playlist à laquelle attribuer cette authentification.", - "The worker will stop the run at the next safe checkpoint.": "Le travailleur arrêtera la course au prochain point de contrôle sécurisé.", - "The year of the VOD content.": "L’année du contenu VOD.", - "These plugins have issues that need your attention — they may be blocked, modified, invalid, or incomplete.": "Ces plugins présentent des problèmes qui nécessitent votre attention : ils peuvent être bloqués, modifiés, invalides ou incomplets.", - "These settings are used by hook-triggered runs, scheduled runs, and as defaults for manual actions.": "Ces paramètres sont utilisés par les exécutions déclenchées par hook, les exécutions planifiées et comme valeurs par défaut pour les actions manuelles.", - "This URL must be reachable from your Plex server. Use your machine\\'s LAN IP, not localhost.": "Cette URL doit être accessible depuis votre serveur Plex. Utilisez l'adresse IP LAN de votre machine, pas localhost.", + "The VOD metadata fetching and processing has been started. You will be notified when it is complete.": "La récupération et le traitement des métadonnées VOD ont commencé. Vous serez averti lorsqu'il sera terminé.", + "The VOD metadata fetching and processing has been started for the group channels. Only enabled channels will be processed. You will be notified when it is complete.": "La récupération et le traitement des métadonnées VOD ont été lancés pour les chaînes de groupe. Seules les chaînes activées seront traitées. Vous serez averti lorsqu'il sera terminé.", + "The VOD metadata fetching and processing has been started for the selected group channels. Only enabled channels will be processed. You will be notified when it is complete.": "La récupération et le traitement des métadonnées VOD ont été lancés pour les chaînes du groupe sélectionné. Seules les chaînes activées seront traitées. Vous serez averti lorsqu'il sera terminé.", + "The worker will stop the run at the next safe checkpoint.": "Le travailleur arrêtera la course au prochain point de contrôle sécurisé.", + "The year of the VOD content.": "L’année du contenu VOD.", "This action will permanently delete all series associated with the playlist. Proceed with caution.": "Cette action supprimera définitivement toutes les séries associées à la playlist. Procédez avec prudence.", "This channel hasn't been probed yet. Run a probe to capture stream details.": "Cette chaîne n'a pas encore été sondée. Exécutez une sonde pour capturer les détails du flux.", "This is a development/testing plugin": "Ceci est un plugin de développement/test", @@ -2184,6 +2285,8 @@ "This run has no summary yet. Use the payload, result, and log stream below to inspect what happened.": "Cette exécution n'a pas encore de résumé. Utilisez la charge utile, le résultat et le flux de journaux ci-dessous pour inspecter ce qui s'est passé.", "This run has not written a summary yet.": "Cette exécution n'a pas encore été rédigée en résumé.", "This should be disabled unless directed by SchedulesDirect support": "Ceci doit être désactivé sauf indication contraire du support SchedulesDirect", + "This URL must be reachable from your Plex server. Uses the Proxy URL Override or APP_URL. Adjust if Plex reaches m3u-editor via a different address (e.g. Docker internal IP).": "This URL must be reachable from your Plex server. Utilise le remplacement de l'URL du proxy ou APP_URL. Adjust if Plex reaches m3u-editor via a different address (e.g. Docker internal IP).", + "This URL must be reachable from your Plex server. Use your machine\\'s LAN IP, not localhost.": "Cette URL doit être accessible depuis votre serveur Plex. Utilisez l'adresse IP LAN de votre machine, pas localhost.", "This will be the name of the duplicated playlist.": "Ce sera le nom de la playlist dupliquée.", "This will clear all playlists currently marked as invalid, allowing them to be used for failover again immediately.": "Cela effacera toutes les listes de lecture actuellement marquées comme non valides, ce qui leur permettra d'être à nouveau utilisées immédiatement pour le basculement.", "This will clear any stuck processing locks and allow new syncs to run. Use this if syncs appear stuck.": "Cela effacera tous les verrous de traitement bloqués et permettra l’exécution de nouvelles synchronisations. Utilisez-le si les synchronisations semblent bloquées.", @@ -2199,14 +2302,23 @@ "This will sync all content from the media server. For large libraries, this may take several minutes.": "Cela synchronisera tout le contenu du serveur multimédia. Pour les grandes bibliothèques, cela peut prendre plusieurs minutes.", "This will trigger Plex to re-fetch your EPG guide data and configure automatic refreshes.": "Cela incitera Plex à récupérer les données de votre guide EPG et à configurer les actualisations automatiques.", "Time Shift": "Décalage temporel", + "timeshift": "décalage horaire", "Timeshift updated": "Timeshift mis à jour", "Timeshift value": "Valeur du décalage horaire", "Timing": "Timing", "Title": "Titre", "Title (Info)": "Titre (Informations)", "Title folder metadata": "Métadonnées du dossier titre", + "TMDB": "TMDB", + "TMDB/TVDB": "TMDB/TVDB", + "TMDB API Key": "Clé API TMDB", + "TMDB API Key Required": "Clé API TMDB requise", + "TMDB ID": "ID TMDB", + "TMDB ID format": "Format d'identifiant TMDB", + "TMDB Integration": "Intégration TMDB", + "TMDB Metadata Applied": "Métadonnées TMDB appliquées", + "TMDB Search Started": "Recherche TMDB lancée", "To Email Address": "À l'adresse e-mail", - "To use as the master for the selected channel.": "À utiliser comme maître pour le canal sélectionné.", "Toggle auth status": "Changer le statut d'authentification", "Toggle auto-sync status": "Basculer l'état de synchronisation automatique", "Toggle proxy status": "Changer le statut du proxy", @@ -2215,89 +2327,110 @@ "Tools available to the Copilot assistant across all pages.": "Outils disponibles pour l'assistant Copilot sur toutes les pages.", "Total Channels": "Nombre total de chaînes", "Total EPG Channels": "Nombre total de chaînes EPG", - "Total Programmes": "Programmes totaux", "Total number of channels available for this mapping.": "Nombre total de canaux disponibles pour ce mappage.", "Total number of channels checked in the last run.": "Nombre total de canaux vérifiés lors de la dernière exécution.", + "Total Programmes": "Programmes totaux", "Total streams available for this playlist (∞ indicates no limit)": "Nombre total de flux disponibles pour cette playlist (∞ indique aucune limite)", "Total time to sync playlist (in seconds)": "Temps total de synchronisation de la playlist (en secondes)", + "To use as the master for the selected channel.": "À utiliser comme maître pour le canal sélectionné.", "Transcode": "Transcoder", "Transcode Mode": "Transcode Mode", "Transcode this channel using the selected profile. Overrides the playlist-level stream profile for this channel. Leave empty for direct stream proxying.": "Transcodez cette chaîne en utilisant le profil sélectionné. Remplace le profil de flux au niveau de la playlist pour cette chaîne. Laissez vide pour le proxy de flux direct.", "Transcoding": "Transcodage", "Transcoding Settings (optional)": "Paramètres de transcodage (facultatif)", "Trust": "Confiance", - "Trust Plugin": "Plugin de confiance", "Trust blocked": "Confiance bloquée", - "Trust posture": "Posture de confiance", "Trusted": "Confiance", - "Trusted Plugins": "Plugins de confiance", "Trusted by": "Approuvé par", + "Trusted Plugins": "Plugins de confiance", "Trusting a plugin locks its current files as the approved version and sets up any database tables or storage the plugin needs.": "Faire confiance à un plugin verrouille ses fichiers actuels en tant que version approuvée et configure toutes les tables de base de données ou le stockage dont le plugin a besoin.", + "Trust Plugin": "Plugin de confiance", + "Trust posture": "Posture de confiance", "Tuner": "Tuner", "Tuner Registered": "Accordeur enregistré", "Tuner Removed": "Accordeur supprimé", "Tunes In": "À l'écoute", + "tvc-guide-stationid": "tvc-guide-stationid", + "TVDB ID": "ID TVDB", + "tvg-chno": "tvg-chno", + "tvg-id": "identifiant tvg", + "tvg-logo": "logo-tvg", + "tvg-name": "nom-tvg", + "tvg-shift": "tvg-shift", + "TVG ID/Stream ID (default)": "ID TVG/ID de flux (par défaut)", "Type": "Taper", "Type of Playlist": "Type de liste de lecture", - "URL": "URL", - "URL & Connection": "URL et connexion", - "URL Override": "Remplacement d'URL", - "URL Settings": "Paramètres d'URL", - "URL Type": "Type d'URL", - "URL or Local file path": "URL ou chemin du fichier local", - "URL to Kinopoisk page.": "URL vers la page Kinopoisk.", - "URL to large cover image.": "URL vers la grande image de couverture.", - "URL to movie poster/image.": "URL vers l'affiche/l'image du film.", - "URL/XML File": "URL/Fichier XML", - "USA, UK, etc.": "États-Unis, Royaume-Uni, etc.", - "UTC": "UTC", "Uncategorized": "Non classé", "Undo EPG Map": "Annuler la carte EPG", "Undo Find & Replace": "Annuler la recherche et le remplacement", "Unhealthy Streams": "Flux malsains", - "Uninstall Plugin": "Désinstaller le plugin", "Uninstall blocked": "Désinstallation bloquée", - "Uninstall plugin": "Désinstaller le plug-in", "Uninstalled": "Désinstallé", "Uninstalling disables the plugin immediately. You can keep the plugin\\'s data for a future reinstall, or delete everything it created. Active jobs will be cancelled first.": "La désinstallation désactive immédiatement le plugin. Vous pouvez conserver les données du plugin pour une future réinstallation, ou supprimer tout ce qu'il a créé. Les travaux actifs seront annulés en premier.", + "Uninstall Plugin": "Désinstaller le plugin", + "Uninstall plugin": "Désinstaller le plug-in", "Unique Identifier": "Identifiant unique", "Unknown Plugin": "Plugin inconnu", "Unknown plugin": "Plugin inconnu", + "unknown source": "source inconnue", "Unmerging channels for this group in the background. You will be notified once the process is complete.": "Dissociation des chaînes pour ce groupe en arrière-plan. Vous serez averti une fois le processus terminé.", "Unmerging channels in the background. You will be notified once the process is complete.": "Dissocier les chaînes en arrière-plan. Vous serez averti une fois le processus terminé.", - "Up to date": "À jour", "Update": "Mise à jour", - "Update Password": "Mettre à jour le mot de passe", "Update available": "Mise à jour disponible", "Update check failed": "La vérification de la mise à jour a échoué", "Update failed": "La mise à jour a échoué", "Update now": "Mettre à jour maintenant", + "Update Password": "Mettre à jour le mot de passe", "Update preferred icon": "Mettre à jour l'icône préférée", + "Updates Available": "Mises à jour disponibles", "Update staged for review": "Mise à jour en préparation pour examen", "Update staging failed": "Échec de la préparation de la mise à jour", "Update the preferred icon for the selected channel(s).": "Mettez à jour l'icône préférée pour les chaînes sélectionnées.", "Update to :version": "Mettre à jour vers :version", "Update to latest release from GitHub": "Mise à jour vers la dernière version de GitHub", "Update your profile information": "Mettez à jour les informations de votre profil", - "Updates Available": "Mises à jour disponibles", "Upload": "Télécharger", - "Upload Asset": "Télécharger l'élément", - "Upload Plugin Archive": "Télécharger les archives du plugin", - "Upload a plugin zip, tar, or tar.gz archive. The server will stage and validate it through plugin installs.": "Téléchargez une archive zip, tar ou tar.gz du plugin. Le serveur le mettra en scène et le validera via les installations de plugins.", "Upload a plugin zip, tar, or tar.gz archive. The server will stage, validate, and scan it through plugin installs.": "Téléchargez une archive zip, tar ou tar.gz du plugin. Le serveur le préparera, le validera et l’analysera via les installations de plugins.", - "Upload now": "Télécharger maintenant", - "Upload the XMLTV file for the EPG. This will be used to import the guide data.": "Téléchargez le fichier XMLTV pour l'EPG. Ceci sera utilisé pour importer les données du guide.", - "Upload the playlist file. This will be used to import groups and channels.": "Téléchargez le fichier de playlist. Ceci sera utilisé pour importer des groupes et des chaînes.", + "Upload a plugin zip, tar, or tar.gz archive. The server will stage and validate it through plugin installs.": "Téléchargez une archive zip, tar ou tar.gz du plugin. Le serveur le mettra en scène et le validera via les installations de plugins.", + "Upload Asset": "Télécharger l'élément", "Uploaded plugin archive staged": "Archive du plugin téléchargée", + "Upload now": "Télécharger maintenant", + "Upload Plugin Archive": "Télécharger les archives du plugin", "Uploads waiting for security scan or admin approval.": "Téléchargements en attente d'une analyse de sécurité ou de l'approbation de l'administrateur.", + "Upload the playlist file. This will be used to import groups and channels.": "Téléchargez le fichier de playlist. Ceci sera utilisé pour importer des groupes et des chaînes.", + "Upload the XMLTV file for the EPG. This will be used to import the guide data.": "Téléchargez le fichier XMLTV pour l'EPG. Ceci sera utilisé pour importer les données du guide.", + "Up to date": "À jour", + "URL": "URL", + "URL & Connection": "URL et connexion", + "URL/XML File": "URL/Fichier XML", + "URL or Local file path": "URL ou chemin du fichier local", + "URL Override": "Remplacement d'URL", + "URL Settings": "Paramètres d'URL", + "URL to Kinopoisk page.": "URL vers la page Kinopoisk.", + "URL to large cover image.": "URL vers la grande image de couverture.", + "URL to movie poster/image.": "URL vers l'affiche/l'image du film.", + "URL Type": "Type d'URL", + "USA, UK, etc.": "États-Unis, Royaume-Uni, etc.", "Use \"Test\" to auto-detect from provider.": "Utilisez « Test » pour détecter automatiquement le fournisseur.", + "Used to reference this auth internally.": "Utilisé pour référencer cette authentification en interne.", + "Useful for multi-host access (VPN/Tailscale/etc.)": "Utile pour l'accès multi-hôtes (VPN/Tailscale/etc.)", "Use HTTPS": "Utiliser HTTPS", + "Use playlist user agent": "Utiliser l'agent utilisateur de la playlist", "Use Proxy User Agent for Playlists (M3U8/MPD)": "Utiliser l'agent utilisateur proxy pour les listes de lecture (M3U8/MPD)", + "User": "Utilisateur", + "User agent string to use for fetching the EPG.": "Chaîne de l'agent utilisateur à utiliser pour récupérer l'EPG.", + "User agent string to use for fetching the playlist.": "Chaîne de l'agent utilisateur à utiliser pour récupérer la playlist.", + "User agent string to use for making requests.": "Chaîne de l'agent utilisateur à utiliser pour effectuer des requêtes.", "Use Regex": "Utiliser l'expression régulière", - "Use Short URLs": "Utiliser des URL courtes", - "Use playlist user agent": "Utiliser l'agent utilisateur de la playlist", "Use regex for filtering": "Utiliser l'expression régulière pour le filtrage", "Use regex patterns to find and replace. If disabled, will use direct string comparison.": "Utilisez des modèles d'expression régulière pour rechercher et remplacer. Si désactivé, utilisera la comparaison directe de chaînes.", + "Username": "Nom d'utilisateur", + "username": "nom d'utilisateur", + "Username for playlist access.": "Nom d'utilisateur pour accéder à la playlist.", + "Username for WebDAV authentication": "Nom d'utilisateur pour l'authentification WebDAV", + "User Permissions": "Autorisations utilisateur", + "Users": "Utilisateurs", + "Use Short URLs": "Utiliser des URL courtes", "Use the GitHub release asset URL from the published release.": "Utilisez l'URL de l'actif de la version GitHub de la version publiée.", "Use the header actions to run this plugin once, then track the job from Live Activity and Run History.": "Utilisez les actions d'en-tête pour exécuter ce plugin une fois, puis suivez le travail à partir de l'activité en direct et de l'historique d'exécution.", "Use the last completed run as your baseline. If the candidate count looks right, queue an apply run or tighten the thresholds from the Settings tab.": "Utilisez la dernière exécution terminée comme référence. Si le nombre de candidats semble correct, mettez une candidature en file d'attente ou resserrez les seuils à partir de l'onglet Paramètres.", @@ -2305,43 +2438,14 @@ "Use this playlist only": "Utiliser uniquement cette playlist", "Use to enable advanced failover checking and resolution (Resolver URL is required).": "À utiliser pour activer la vérification et la résolution avancées du basculement (l’URL du résolveur est requise).", "Use with caution": "A utiliser avec prudence", - "Used to reference this auth internally.": "Utilisé pour référencer cette authentification en interne.", - "Useful for multi-host access (VPN/Tailscale/etc.)": "Utile pour l'accès multi-hôtes (VPN/Tailscale/etc.)", - "User": "Utilisateur", - "User Permissions": "Autorisations utilisateur", - "User agent string to use for fetching the EPG.": "Chaîne de l'agent utilisateur à utiliser pour récupérer l'EPG.", - "User agent string to use for fetching the playlist.": "Chaîne de l'agent utilisateur à utiliser pour récupérer la playlist.", - "User agent string to use for making requests.": "Chaîne de l'agent utilisateur à utiliser pour effectuer des requêtes.", - "Username": "Nom d'utilisateur", - "Username for WebDAV authentication": "Nom d'utilisateur pour l'authentification WebDAV", - "Username for playlist access.": "Nom d'utilisateur pour accéder à la playlist.", - "Users": "Utilisateurs", - "VARIABLE_NAME": "VARIABLE_NAME", - "VLC/3.0.21 LibVLC/3.0.21": "VLC/3.0.21 LibVLC/3.0.21", - "VOD": "VOD", - "VOD .strm file is being synced now": "Le fichier VOD .strm est en cours de synchronisation", - "VOD Channels": "Chaînes VOD", - "VOD Group": "Groupe VOD", - "VOD Groups": "Groupes VOD", - "VOD Processing": "Traitement VOD", - "VOD Settings": "Paramètres VOD", - "VOD Sorted": "VOD triés", - "VOD Sync": "Synchronisation VOD", - "VOD and Series Streaming Profile": "Profil de streaming VOD et séries", - "VOD and Series Transcoding Profile": "Profil de transcodage VOD et série", - "VOD groups to import": "Groupes VOD à importer", - "VOD processing": "Traitement VOD", - "VOD record not found.": "Enregistrement VOD introuvable.", - "VOD stream file settings": "Paramètres du fichier de flux VOD", - "VOD/Series poster placeholder": "Espace réservé pour l'affiche VOD/Série", - "VODs moved to group": "VOD déplacées vers le groupe", + "UTC": "UTC", "Validate": "Valider", "Validate the plugin before you enable it or queue any work. The system should treat this plugin as untrusted until the contract checks pass.": "Validez le plugin avant de l'activer ou de mettre tout travail en file d'attente. Le système doit traiter ce plugin comme non fiable jusqu'à ce que les vérifications du contrat soient réussies.", "Validation": "Validation", + "Validation completed": "Validation terminée", "Validation Error": "Erreur de validation", "Validation Errors": "Erreurs de validation", "Validation Failed": "Échec de la validation", - "Validation completed": "Validation terminée", "Value": "Valeur", "Value for this header.": "Valeur pour cet en-tête.", "Value must be between 3 and 36 characters.": "La valeur doit être comprise entre 3 et 36 caractères.", @@ -2349,31 +2453,54 @@ "Value to include in the email.": "Valeur à inclure dans l'e-mail.", "Value to use for this variable.": "Valeur à utiliser pour cette variable.", "Variable name": "Nom de la variable", - "Version :version is available (current: :current).": "Version :version est disponible (actuelle : :current).", + "VARIABLE_NAME": "VARIABLE_NAME", + "variable_name": "nom_variable", "Version, source, and type of this plugin.": "Version, source et type de ce plugin.", + "Version :version is available (current: :current).": "Version :version est disponible (actuelle : :current).", + "veryfast": "très rapide", "Video Bitrate": "Débit vidéo", - "Video Codec": "Codec vidéo", - "Video File Extensions": "Extensions de fichiers vidéo", "Video bitrate": "Débit vidéo", "Video bitrate in kbps.": "Débit vidéo en kbps.", + "Video Codec": "Codec vidéo", "Video codec": "Codec vidéo", + "Video File Extensions": "Extensions de fichiers vidéo", "View": "Voir", + "View/Update Unique Identifier": "Afficher/mettre à jour l'identifiant unique", + "View and manage Plex DVR recording subscriptions.": "Affichez et gérez les abonnements à l'enregistrement Plex DVR.", "View Docs": "Afficher les documents", + "View enhanced details": "Afficher les détails améliorés", + "Viewer ID": "ID du spectateur", "View Lineups": "Voir les files d'attente", + "View log details": "Afficher les détails du journal", "View Logo Repository": "Voir le référentiel de logos", "View Logs": "Afficher les journaux", "View Playlist": "Voir la liste de lecture", "View Queue": "Afficher la file d'attente", "View Review": "Voir la révision", + "View scrubber logs": "Afficher les journaux du nettoyeur", "View Series": "Voir la série", "View Sync Logs": "Afficher les journaux de synchronisation", - "View and manage Plex DVR recording subscriptions.": "Affichez et gérez les abonnements à l'enregistrement Plex DVR.", - "View enhanced details": "Afficher les détails améliorés", - "View log details": "Afficher les détails du journal", - "View scrubber logs": "Afficher les journaux du nettoyeur", "View the EPG channel mapping jobs and progress here.": "Consultez les tâches et les progrès du mappage des canaux EPG ici.", - "View/Update Unique Identifier": "Afficher/mettre à jour l'identifiant unique", - "Viewer ID": "ID du spectateur", + "Virtual channel title": "Titre de la chaîne virtuelle", + "VLC/3.0.21 LibVLC/3.0.21": "VLC/3.0.21 LibVLC/3.0.21", + "VOD": "VOD", + "VOD .strm file is being synced now": "Le fichier VOD .strm est en cours de synchronisation", + "VOD/Series poster placeholder": "Espace réservé pour l'affiche VOD/Série", + "VOD and Series Streaming Profile": "Profil de streaming VOD et séries", + "VOD and Series Transcoding Profile": "Profil de transcodage VOD et série", + "VOD Channels": "Chaînes VOD", + "VOD Group": "Groupe VOD", + "VOD Groups": "Groupes VOD", + "VOD groups": "Groupes VOD", + "VOD groups to import": "Groupes VOD à importer", + "VOD Processing": "Traitement VOD", + "VOD processing": "Traitement VOD", + "VOD record not found.": "Enregistrement VOD introuvable.", + "VOD Settings": "Paramètres VOD", + "VODs moved to group": "VOD déplacées vers le groupe", + "VOD Sorted": "VOD triés", + "VOD stream file settings": "Paramètres du fichier de flux VOD", + "VOD Sync": "Synchronisation VOD", "Wait this many seconds after sync completes before triggering the library refresh": "Attendez autant de secondes après la fin de la synchronisation avant de déclencher l'actualisation de la bibliothèque", "Wait until a specific date/time before starting the broadcast.": "Attendez une date/heure précise avant de démarrer la diffusion.", "Warning": "Avertissement", @@ -2383,6 +2510,7 @@ "WebDAV Password": "Mot de passe WebDAV", "WebDAV Username": "Nom d'utilisateur WebDAV", "WebSocket Connection Test": "Test de connexion WebSocket", + "Weekly": "Hebdomadaire", "Weight": "Poids", "Weight (for shuffle)": "Poids (pour la lecture aléatoire)", "What does this plugin do?": "Que fait ce plugin ?", @@ -2390,13 +2518,10 @@ "What to do next.": "Que faire ensuite.", "What to do with plugin data": "Que faire des données du plugin", "What your plugin can do": "Ce que votre plugin peut faire", - "When enabled and configured, the AI Copilot assistant will appear in the top navigation bar.": "Une fois activé et configuré, l’assistant AI Copilot apparaîtra dans la barre de navigation supérieure.", - "When enabled you can access the API documentation using the \"API Docs\" button. When disabled, the docs endpoint will return a 403 (Unauthorized). NOTE: The API will respond regardless of this setting. You do not need to enable it to use the API.": "Lorsqu'il est activé, vous pouvez accéder à la documentation de l'API à l'aide du bouton \"API Docs\". Lorsqu'il est désactivé, le point de terminaison Docs renvoie un 403 (non autorisé). REMARQUE : L'API répondra quel que soit ce paramètre. Vous n'avez pas besoin de l'activer pour utiliser l'API.", - "When enabled you can access the queue manager using the \"Queue Manager\" button. When disabled, the queue manager endpoint will return a 403 (Unauthorized).": "Lorsqu'il est activé, vous pouvez accéder au gestionnaire de files d'attente à l'aide du bouton \"Queue Manager\". Lorsqu'il est désactivé, le point de terminaison du gestionnaire de files d'attente renvoie un 403 (non autorisé).", "When enabled, /logo-repository endpoints are publicly accessible for apps like UHF.": "Lorsqu'ils sont activés, les points de terminaison /logo-repository sont accessibles publiquement pour des applications telles que UHF.", - "When enabled, VOD channels will be included in the M3U output.": "Lorsqu'elles sont activées, les chaînes VOD seront incluses dans la sortie M3U.", "When enabled, a backup will be created before syncing.": "Lorsqu'elle est activée, une sauvegarde sera créée avant la synchronisation.", "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs.": "Lorsqu'il est activé, un délai sera ajouté entre les demandes adressées au fournisseur lors des synchronisations de playlist et d'EPG.", + "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs and other stream processing tasks.": "Lorsqu'il est activé, un délai sera ajouté entre les demandes adressées au fournisseur lors des synchronisations de playlist et d'EPG et d'autres tâches de traitement de flux.", "When enabled, all channels will be re-evaluated during merge, including existing failover relationships.": "Lorsqu'ils sont activés, tous les canaux seront réévalués lors de la fusion, y compris les relations de basculement existantes.", "When enabled, all streams will be proxied through the application. This allows for better compatibility with various clients and enables features such as stream limiting and output format selection.": "Lorsqu'il est activé, tous les flux seront transmis par proxy via l'application. Cela permet une meilleure compatibilité avec divers clients et active des fonctionnalités telles que la limitation du flux et la sélection du format de sortie.", "When enabled, automatic database backups will be created based on the specified schedule.": "Lorsqu'elles sont activées, des sauvegardes automatiques de la base de données seront créées en fonction du calendrier spécifié.", @@ -2413,59 +2538,64 @@ "When enabled, expired cache cleanup will skip deletion. You can still refresh/clear cache manually.": "Lorsqu'il est activé, le nettoyage du cache expiré ignorera la suppression. Vous pouvez toujours actualiser/vider le cache manuellement.", "When enabled, groups will be included based on regex pattern match instead of prefix.": "Lorsqu'ils sont activés, les groupes seront inclus en fonction de la correspondance du modèle d'expression régulière au lieu du préfixe.", "When enabled, matched channels will have their preferred icon set to \"EPG\" instead of \"Channel\". This uses the EPG channel icon as the preferred logo source.": "Lorsqu'elles sont activées, les chaînes correspondantes auront leur icône préférée définie sur « EPG » au lieu de « Chaîne ». Cela utilise l'icône de la chaîne EPG comme source de logo préférée.", - "When enabled, newly added Live channels will be enabled by default.": "Lorsqu'elles sont activées, les chaînes en direct nouvellement ajoutées seront activées par défaut.", - "When enabled, newly added VOD channels will be enabled by default.": "Lorsqu'elles sont activées, les chaînes VOD nouvellement ajoutées seront activées par défaut.", - "When enabled, newly added VOD channels will have merging enabled by default on sync.": "Lorsqu'elle est activée, la fusion des chaînes VOD nouvellement ajoutées sera activée par défaut lors de la synchronisation.", "When enabled, newly added channels will be included in automatic stream probing after sync.": "Lorsqu'elles sont activées, les chaînes nouvellement ajoutées seront incluses dans la détection automatique du flux après la synchronisation.", "When enabled, newly added channels will have EPG mapping enabled by default on sync.": "Lorsqu'il est activé, le mappage EPG des chaînes nouvellement ajoutées sera activé par défaut lors de la synchronisation.", "When enabled, newly added channels will have merging enabled by default on sync.": "Lorsqu'elle est activée, la fusion des chaînes nouvellement ajoutées sera activée par défaut lors de la synchronisation.", + "When enabled, newly added Live channels will be enabled by default.": "Lorsqu'elles sont activées, les chaînes en direct nouvellement ajoutées seront activées par défaut.", "When enabled, newly added series will be enabled by default on sync.": "Lorsqu'elles sont activées, les séries nouvellement ajoutées seront activées par défaut lors de la synchronisation.", + "When enabled, newly added VOD channels will be enabled by default.": "Lorsqu'elles sont activées, les chaînes VOD nouvellement ajoutées seront activées par défaut.", + "When enabled, newly added VOD channels will have merging enabled by default on sync.": "Lorsqu'elle est activée, la fusion des chaînes VOD nouvellement ajoutées sera activée par défaut lors de la synchronisation.", "When enabled, quality indicators (HD, FHD, UHD, 4K, 720p, 1080p, etc.) will be removed during fuzzy matching. Disable this if channels have similar names but different quality levels (e.g., \"Sport HD\" vs \"Sport FHD\").": "Lorsqu'ils sont activés, les indicateurs de qualité (HD, FHD, UHD, 4K, 720p, 1080p, etc.) seront supprimés lors de la correspondance floue. Désactivez cette option si les chaînes ont des noms similaires mais des niveaux de qualité différents (par exemple, « Sport HD » vs « Sport FHD »).", "When enabled, series will be included in the M3U output. It is recommended to enable the \"Fetch metadata\" option when enabled.": "Lorsqu'elle est activée, les séries seront incluses dans la sortie M3U. Il est recommandé d'activer l'option « Récupérer les métadonnées » lorsqu'elle est activée.", "When enabled, short URLs will be used for the playlist links. Save changes to generate the short URLs (or remove them).": "Lorsqu'elles sont activées, des URL courtes seront utilisées pour les liens de playlist. Enregistrez les modifications pour générer les URL courtes (ou supprimez-les).", - "When enabled, the EPG will be automatically re-synced at the specified interval.": "Lorsqu'il est activé, l'EPG sera automatiquement resynchronisé à l'intervalle spécifié.", - "When enabled, the POST request will be sent without any body content. Useful for APIs that only need a POST trigger (e.g., Emby/Jellyfin scheduled tasks).": "Lorsqu'elle est activée, la requête POST sera envoyée sans aucun contenu de corps. Utile pour les API qui n'ont besoin que d'un déclencheur POST (par exemple, tâches planifiées Emby/Jellyfin).", "When enabled, the application will output the WAN address of the server m3u-editor is currently running on.": "Lorsqu'elle est activée, l'application affichera l'adresse WAN du serveur sur lequel m3u-editor est actuellement exécuté.", "When enabled, the backup will include your uploaded Playlist and EPG files.": "Lorsqu'elle est activée, la sauvegarde inclura votre liste de lecture et vos fichiers EPG téléchargés.", "When enabled, the channel group will be assigned to the dummy EPG as a tag.": "Lorsqu'il est activé, le groupe de canaux sera attribué à l'EPG factice en tant que balise .", + "When enabled, the EPG will be automatically re-synced at the specified interval.": "Lorsqu'il est activé, l'EPG sera automatiquement resynchronisé à l'intervalle spécifié.", "When enabled, the merged EPG will be automatically regenerated at the specified interval.": "Lorsqu'il est activé, l'EPG fusionné sera automatiquement régénéré à l'intervalle spécifié.", "When enabled, the playlist will be automatically re-synced at the specified interval.": "Lorsqu'elle est activée, la liste de lecture sera automatiquement resynchronisée à l'intervalle spécifié.", "When enabled, the playlist will be preprocessed before importing. You can then select which groups you would like to import.": "Lorsqu'elle est activée, la liste de lecture sera prétraitée avant l'importation. Vous pouvez ensuite sélectionner les groupes que vous souhaitez importer.", "When enabled, the playlist will fetch items by category.": "Lorsqu'elle est activée, la liste de lecture récupérera les éléments par catégorie.", "When enabled, the playlist will fetch items by category. This may slow down the import process but can help with larger playlists that time out when fetching all items at once.": "Lorsqu'elle est activée, la liste de lecture récupérera les éléments par catégorie. Cela peut ralentir le processus d'importation, mais peut aider avec des listes de lecture plus volumineuses qui expirent lors de la récupération de tous les éléments en même temps.", + "When enabled, the POST request will be sent without any body content. Useful for APIs that only need a POST trigger (e.g., Emby/Jellyfin scheduled tasks).": "Lorsqu'elle est activée, la requête POST sera envoyée sans aucun contenu de corps. Utile pour les API qui n'ont besoin que d'un déclencheur POST (par exemple, tâches planifiées Emby/Jellyfin).", "When enabled, the proxy will attempt to start streams even if the provider\\'s reported connection limit has been reached.": "Lorsqu'il est activé, le proxy tentera de démarrer des flux même si la limite de connexion signalée par le fournisseur a été atteinte.", - "When enabled, the user will be prompted to set a new password before they can use the application.": "Lorsqu'il est activé, l'utilisateur sera invité à définir un nouveau mot de passe avant de pouvoir utiliser l'application.", "When enabled, there will be an additional navigation item (Logs) to view the log file content.": "Lorsqu'il est activé, il y aura un élément de navigation supplémentaire (Journaux) pour afficher le contenu du fichier journal.", + "When enabled, the selected source channels will be disabled after being attached as failovers. They'll only be reachable via the new smart channel.": "Lorsqu'ils sont activés, les canaux sources sélectionnés seront désactivés après avoir été attachés en tant que basculements. Ils ne seront accessibles que via le nouveau canal intelligent.", + "When enabled, the user will be prompted to set a new password before they can use the application.": "Lorsqu'il est activé, l'utilisateur sera invité à définir un nouveau mot de passe avant de pouvoir utiliser l'application.", "When enabled, this network will continuously broadcast content according to the schedule.": "Lorsqu'il est activé, ce réseau diffusera en continu du contenu selon le calendrier.", + "When enabled, TMDB metadata fetching will automatically create new groups (for VOD) and categories (for Series) based on TMDB genres. When disabled, only existing groups/categories will be used.": "Lorsqu'elle est activée, la récupération des métadonnées TMDB créera automatiquement de nouveaux groupes (pour la VOD) et catégories (pour les séries) basés sur les genres TMDB. Lorsqu'il est désactivé, seuls les groupes/catégories existants seront utilisés.", "When enabled, variables will be sent as a JSON body instead of form data. Only applies to POST requests.": "Lorsqu'elles sont activées, les variables seront envoyées sous forme de corps JSON au lieu de données de formulaire. S'applique uniquement aux requêtes POST.", + "When enabled, VOD channels will be included in the M3U output.": "Lorsqu'elles sont activées, les chaînes VOD seront incluses dans la sortie M3U.", "When enabled, worker waits for viewer activity before auto-starting. Manual Start still starts immediately.": "Lorsqu'il est activé, le travailleur attend l'activité du spectateur avant de démarrer automatiquement. Le démarrage manuel démarre toujours immédiatement.", "When enabled, you can manage your Plex server from this integration.": "Lorsqu'il est activé, vous pouvez gérer votre serveur Plex à partir de cette intégration.", + "When enabled and configured, the AI Copilot assistant will appear in the top navigation bar.": "Une fois activé et configuré, l’assistant AI Copilot apparaîtra dans la barre de navigation supérieure.", + "When enabled you can access the API documentation using the \"API Docs\" button. When disabled, the docs endpoint will return a 403 (Unauthorized). NOTE: The API will respond regardless of this setting. You do not need to enable it to use the API.": "Lorsqu'il est activé, vous pouvez accéder à la documentation de l'API à l'aide du bouton \"API Docs\". Lorsqu'il est désactivé, le point de terminaison Docs renvoie un 403 (non autorisé). REMARQUE : L'API répondra quel que soit ce paramètre. Vous n'avez pas besoin de l'activer pour utiliser l'API.", + "When enabled you can access the queue manager using the \"Queue Manager\" button. When disabled, the queue manager endpoint will return a 403 (Unauthorized).": "Lorsqu'il est activé, vous pouvez accéder au gestionnaire de files d'attente à l'aide du bouton \"Queue Manager\". Lorsqu'il est désactivé, le point de terminaison du gestionnaire de files d'attente renvoie un 403 (non autorisé).", "Where to fetch metadata for discovered content (requires TMDB API key in Settings)": "Où récupérer les métadonnées du contenu découvert (nécessite la clé API TMDB dans les paramètres)", "Whether or not to use the URL override for logos and images too (default is enabled).": "S'il faut ou non utiliser le remplacement d'URL pour les logos et les images également (la valeur par défaut est activée).", "Whether the plugin files are currently present.": "Si les fichiers du plugin sont actuellement présents.", "X-Emby-Token": "Jeton X-Emby", "XMLTV EPG guide URL. Must also be reachable from Plex.": "URL du guide EPG XMLTV. Doit également être accessible depuis Plex.", + "XMLTV EPG guide URL. Must also be reachable from Plex. Adjust if needed.": "URL du guide EPG XMLTV. Doit également être accessible depuis Plex. Ajustez si nécessaire.", "XMLTV File, URL or Path": "Fichier XMLTV, URL ou chemin", "XMLTV Format": "Format XMLTV", "Xtream": "Xtream", "Xtream API": "API Xtream", + "Xtream API connection details.": "Détails de la connexion à l'API Xtream.", "Xtream API Info": "Informations sur l'API Xtream", + "Xtream API panel message": "Message du panneau de l'API Xtream", "Xtream API Panel Settings": "Paramètres du panneau API Xtream", "Xtream API Password": "Mot de passe de l'API Xtream", "Xtream API URL": "URL de l'API Xtream", "Xtream API Username": "Nom d'utilisateur de l'API Xtream", - "Xtream API connection details.": "Détails de la connexion à l'API Xtream.", - "Xtream API panel message": "Message du panneau de l'API Xtream", - "YYYY or YYYY-MM-DD": "AAAA ou AAAA-MM-JJ", - "YYYY-MM-DD": "AAAA-MM-JJ", "Year": "Année", "Year (optional)": "Année (facultatif)", "Yes": "Oui", "Yes, add to category": "Oui, ajouter à la catégorie", "Yes, add to group": "Oui, ajouter au groupe", + "Yes, delete series": "Oui, supprimer la série", "Yes, delete VOD": "Oui, supprimer la VOD", "Yes, delete VODs": "Oui, supprimer les VOD", - "Yes, delete series": "Oui, supprimer la série", "Yes, disable now": "Oui, désactiver maintenant", "Yes, duplicate now": "Oui, dupliquez maintenant", "Yes, enable now": "Oui, activez maintenant", @@ -2473,70 +2603,30 @@ "Yes, generate cache now": "Oui, générez le cache maintenant", "Yes, process now": "Oui, procédez maintenant", "Yes, refresh now": "Oui, actualisez maintenant", + "Yes, rescore now": "Oui, recommence maintenant", "Yes, reset now": "Oui, réinitialisez maintenant", "Yes, sync now": "Oui, synchronise maintenant", "You are a helpful AI assistant integrated into m3u editor. You help users manage playlists, EPG data, streams, channels, and other features. Be concise and accurate.": "Vous êtes un assistant IA utile intégré à l'éditeur m3u. Vous aidez les utilisateurs à gérer les listes de lecture, les données EPG, les flux, les chaînes et d'autres fonctionnalités. Soyez concis et précis.", "You are using the latest version": "Vous utilisez la dernière version", "You can either upload an XMLTV file or provide a URL to an XMLTV file. File should conform to the XMLTV format.": "Vous pouvez soit télécharger un fichier XMLTV, soit fournir une URL vers un fichier XMLTV. Le fichier doit être conforme au format XMLTV.", - "You can now assign Playlists or EPGs.": "Vous pouvez désormais attribuer des listes de lecture ou des EPG.", - "You can now assign Playlists to this Auth.": "Vous pouvez maintenant attribuer des listes de lecture à cette authentification.", "You can now assign channels to this group from the Channels section.": "Vous pouvez maintenant attribuer des chaînes à ce groupe à partir de la section Chaînes.", "You can now assign channels to this group from the Channels tab.": "Vous pouvez maintenant attribuer des canaux à ce groupe à partir de l'onglet Canaux.", + "You can now assign Playlists or EPGs.": "Vous pouvez désormais attribuer des listes de lecture ou des EPG.", + "You can now assign Playlists to this Auth.": "Vous pouvez maintenant attribuer des listes de lecture à cette authentification.", + "your-api-key-here": "votre-clé-api-ici", + "Your API key for the selected provider. Stored in the database.": "Votre clé API pour le fournisseur sélectionné. Stocké dans la base de données.", + "Your m3u proxy API key": "Votre clé API proxy m3u", + "Your preferences have been saved successfully.": "Vos préférences ont été enregistrées avec succès.", + "Your selection includes one or more existing smart channels — pick raw provider channels instead, or remove the smart-channel flag first.": "Votre sélection inclut un ou plusieurs canaux intelligents existants : choisissez plutôt les canaux de fournisseur bruts ou supprimez d'abord l'indicateur de canal intelligent.", + "Your TMDB API key (v3 auth). You can get one for free at themoviedb.org.": "Votre clé API TMDB (authentification v3). Vous pouvez en obtenir un gratuitement sur themovedb.org.", + "YouTube Trailer": "Bande-annonce YouTube", + "YouTube Trailer ID": "Identifiant de la bande-annonce YouTube", + "YouTube trailer URL or ID.": "URL ou identifiant de la bande-annonce YouTube.", "You will be notified once complete.": "Vous serez averti une fois terminé.", "You will be notified when complete.": "Vous serez averti une fois terminé.", "You will be notified when the process is complete.": "Vous serez averti lorsque le processus sera terminé.", "You will need to save and refresh the page after changing settings for them to take effect.": "Vous devrez enregistrer et actualiser la page après avoir modifié les paramètres pour qu'ils prennent effet.", - "YouTube Trailer": "Bande-annonce YouTube", - "YouTube Trailer ID": "Identifiant de la bande-annonce YouTube", - "YouTube trailer URL or ID.": "URL ou identifiant de la bande-annonce YouTube.", - "Your API key for the selected provider. Stored in the database.": "Votre clé API pour le fournisseur sélectionné. Stocké dans la base de données.", - "Your TMDB API key (v3 auth). You can get one for free at themoviedb.org.": "Votre clé API TMDB (authentification v3). Vous pouvez en obtenir un gratuitement sur themovedb.org.", - "Your m3u proxy API key": "Votre clé API proxy m3u", - "Your preferences have been saved successfully.": "Vos préférences ont été enregistrées avec succès.", - "aac": "aaa", - "and how to use it": "et comment l'utiliser", - "e.g. 2024": "par ex. 2024", - "e.g. 403, 404, 502, 503": "par ex. 403, 404, 502, 503", - "e.g. Authorization": "par ex. Autorisation", - "e.g. Bearer abc123": "par ex. Porteur abc123", - "e.g. Help me find a channel": "par ex. Aide-moi à trouver une chaîne", - "e.g. Help me find a channel by name.": "par ex. Aidez-moi à trouver une chaîne par son nom.", - "e.g. Remove country prefix": "par ex. Supprimer le préfixe du pays", - "e.g. a1b2c3d4...": "par ex. a1b23d4...", - "e.g. aac": "par ex. aaa", - "e.g. d/m/Y H:i:s": "par ex. j/m/A H:i:s", - "e.g. libx264, h264_nvenc": "par ex. libx264, h264_nvenc", - "e.g. veryfast, fast, medium": "par ex. très rapide, rapide, moyen", - "e.g., 100": "par exemple, 100", - "e.g., Movie Classics, 80s TV, Kids Zone": "Par exemple, films classiques, séries télévisées des années 80, zone enfants", - "e.g., Movies, TV Shows": "par exemple, films, émissions de télévision", - "e.g., My Networks": "par exemple, Mes réseaux", - "en": "dans", - "group-title": "titre-groupe", - "http://192.168.0.123:36400": "http://192.168.0.123:36400", - "https://example.com/backdrop.jpg": "https://example.com/backdrop.jpg", - "https://example.com/cover.jpg": "https://exemple.com/cover.jpg", - "https://example.com/logo.png": "https://exemple.com/logo.png", - "https://example.com/poster.jpg": "https://exemple.com/poster.jpg", - "https://www.kinopoisk.ru/film/123456/": "https://www.kinopoisk.ru/film/123456/", - "https://www.youtube.com/watch?v=abc123": "https://www.youtube.com/watch?v=abc123", - "libx264": "libx264", - "m3u editor proxy url.": "URL proxy de l'éditeur m3u.", - "mp4": "mpch", - "of :n total": "de :n au total", - "recorded progress.": "progrès enregistrés.", - "shown": "montré", - "socks5://user:pass@host:port or http://user:pass@host:port": "chaussettes5://user:pass@host:port ou http://user:pass@host:port", - "timeshift": "décalage horaire", - "tvc-guide-stationid": "tvc-guide-stationid", - "tvg-chno": "tvg-chno", - "tvg-id": "identifiant tvg", - "tvg-logo": "logo-tvg", - "tvg-name": "nom-tvg", - "tvg-shift": "tvg-shift", - "unknown source": "source inconnue", - "username": "nom d'utilisateur", - "variable_name": "nom_variable", - "veryfast": "très rapide", - "your-api-key-here": "votre-clé-api-ici" + "yt-dlp format selector followed by optional flags. Example: bestvideo+bestaudio/best --no-playlist": "sélecteur de format yt-dlp suivi d'indicateurs facultatifs. Exemple : bestvideo+bestaudio/best --no-playlist", + "YYYY-MM-DD": "AAAA-MM-JJ", + "YYYY or YYYY-MM-DD": "AAAA ou AAAA-MM-JJ" } diff --git a/lang/zh_CN.json b/lang/zh_CN.json index ffc9ecd4a..92fd681d4 100644 --- a/lang/zh_CN.json +++ b/lang/zh_CN.json @@ -3,9 +3,9 @@ "# Netscape HTTP Cookie File\\n.youtube.com\\tTRUE\\t/\\tTRUE\\t0\\tCOOKIE_NAME\\tCOOKIE_VALUE": "# Netscape HTTP Cookie File\\n.youtube.com\\tTRUE\\t/\\tTRUE\\t0\\tCOOKIE_NAME\\tCOOKIE_VALUE", "-": "-", ".strm files are being synced for current category series. Only enabled series will be synced.": "正在为当前类型的剧集同步 .strm 文件,当前只会同步已启用的剧集。", - ".strm files are being synced for selected VOD channels": "正在为选择的 VOD 频道同步 .strm 文件", ".strm files are being synced for selected category series. Only enabled series will be synced.": "正在为选择类型的剧集的同步 .strm 文件,当前只会同步已启用的剧集。", ".strm files are being synced for selected series": "正在为当前剧集同步 .strm 文件", + ".strm files are being synced for selected VOD channels": "正在为选择的 VOD 频道同步 .strm 文件", ".strm files are being synced for the group channels. Only enabled channels will be synced.": "正在同步频道组的 .strm 文件,当前只会同步已启用的频道。", ".strm files are being synced for the selected group channels. Only enabled channels will be synced.": "正在为选择的频道组同步 .strm 文件,当前只会同步已启用的频道。", "/Series": "/剧集", @@ -13,10 +13,9 @@ "0": "0", "0 */6 * * *": "0 */6 * * *", "0 0 * * *": "0 0 * * *", - "01:30:00": "01:30:00", "1": "1", "1-1000, higher = more preferred": "1-1000,数字越大优先级越高", - "10 based rating of the VOD content.": "为 VOD 内容添加最高为 10 星的评价", + "01:30:00": "01:30:00", "2": "2", "3": "3", "4": "4", @@ -27,30 +26,14 @@ "8.7": "8.7", "9": "9", "10": "10", + "10 based rating of the VOD content.": "为 VOD 内容添加最高为 10 星的评价", + ":count smart channel(s) were skipped — smart channels can't be used as failovers themselves.": ":count 个智能通道被跳过 — 智能通道本身不能用作故障转移。", ":name installed": ":name 已安装", ":name updated": ":name 已更新", - "A SHA-256 checksum is required to stage this update.": "执行此更新需要 SHA-256 校验。", - "A channel dedicated to classic movies from the golden age of cinema": "专门播放电影黄金时代经典影片的频道", - "A descriptive name for this post process.": "后处理的名称。", - "A descriptive name for this stream file setting profile": "流文件的配置文件的名称", - "A descriptive name for this transcoding profile (e.g., \"720p Standard\", \"1080p High Quality\")": "转码配置文件的描述性名称(例如“720p 标准”、“1080p 高质量”)", - "A new version is available": "有新版本可用 🎉", - "A recommendation based on the current plugin state.": "基于当前插件状态的建议。", - "A test email will be sent to this address using the entered SMTP settings.": "使用 SMTP 设置将测试电子邮件发送到此地址。", - "AI Copilot": "AI 助手", - "AI Provider": "AI 提供商", - "API": "API", - "API Docs": "API 文档", - "API Key": "API 密钥", - "API Key Required": "需要 API 密钥", - "API Key/Token": "API 密钥/令牌", - "API Settings": "API 设置", - "API Token Created": "API 令牌已创建", - "API Tokens": "API 令牌", - "API docs": "API 文档", - "API key": "API 密钥", + "aac": "aac", "Accepted Values": "可接受的值", "Access your media server content directly within M3U Editor by integrating with popular media servers like Emby and Jellyfin, or directly via mount points. An associated playlist will be automatically created for each integration to manage content like you would for any other playlist.": "通过挂载点或直接与 Emby 和 Jellyfin 等媒体服务器集成,可直接在 M3U Editor 中访问媒体服务器内容。系统将为每项集成自动创建播放列表,方便像管理普通列表一样进行统一管理。", + "A channel dedicated to classic movies from the golden age of cinema": "专门播放电影黄金时代经典影片的频道", "Action, Drama, Comedy": "动作、戏剧、喜剧", "Actions": "操作", "Active Sessions": "活动会话", @@ -59,40 +42,46 @@ "Activity stream": "活动流", "Actor 1, Actor 2, Actor 3": "演员 1、演员 2、演员 3", "Actors": "演员", - "Add Episodes": "添加剧集", - "Add Lineup to Account": "将频道列表添加到帐户", - "Add Media Server": "添加媒体服务器", - "Add Movies": "添加电影", - "Add Quick Action": "添加快速操作", - "Add Series": "添加剧集", + "A custom channel was created with the selected sources attached as failovers, ranked by quality.": "创建了一个自定义通道,并将选定的源附加为故障转移,并按质量排名。", "Add a delay between requests to providers to avoid rate limiting.": "向提供商发出的请求之间添加延迟以避免速率限制。", "Add and manage authentication.": "添加或管理身份验证。", "Add any custom headers to include when streaming a channel/episode.": "在流/剧集时要包含的自定义标头。", "Add as failover": "添加故障转移", + "Add at least one failover channel below — the smart channel takes its stream URL from the highest-ranked failover at stream time.": "在下面添加至少一个故障转移通道 - 智能通道从流传输时排名最高的故障转移中获取其流 URL。", "Add auto-add rule": "添加自动添加规则", "Add available subtitle languages for this content.": "为此内容添加可用的字幕语言。", "Add backdrop/poster image URLs for this content.": "为此内容添加背景图片或海报图片的URL。", "Add conditions that must be met for this post process to execute. All conditions must be true for execution.": "添加执行后处理时需要的条件。所有条件都必须为 true,才会执行后处理。", + "Added Channels": "新增频道", + "Added Groups": "添加的组", + "Added to category": "添加到类别", + "Added to group": "已添加至分组", + "Added to the title folder name": "添加到标题文件夹名称", + "Add Episodes": "添加剧集", "Add extension...": "添加扩展...", "Add failovers now": "立即添加故障转移", + "Additional Failover Playlists (optional)": "附加故障转移播放列表(可选)", + "Additional Profiles": "附加配置文件", "Add keyword...": "添加关键字...", + "Add Lineup to Account": "将频道列表添加到帐户", + "Add Media Server": "添加媒体服务器", + "Add Movies": "添加电影", "Add multiple EPG sources and map them to your playlists. Multiple EPG sources can be mapped to the same playlist, and the guide data will be merged together.": "添加多个 EPG 源并将它们映射到您的播放列表。多个 EPG 源可以映射到同一个播放列表,并且多个 EPG 将合并在一起。", "Add new API Token": "添加新的 API 令牌", "Add or create additional authentication methods for this playlist.": "为此播放列表创建其他的验证方法。", "Add pattern (e.g. \"DE • \" or \"EN |\")": "添加模式(例如“DE • ”或“EN |”)", + "Add Quick Action": "添加快速操作", + "Adds an uninstall() method for custom cleanup logic beyond what the manifest declares.": "添加了一个 uninstall() 方法,用于在清单声明之外执行自定义清理逻辑。", + "Add Series": "添加剧集", "Add the selected channel(s) to the chosen channel as failover sources.": "将所选频道添加为当前频道的故障转移。", "Add to category": "添加到类别", "Add to custom category": "添加到自定义类别", "Add to custom group": "添加到自定义组", "Add to group": "添加到组", - "Added Channels": "新增频道", - "Added Groups": "添加的组", - "Added to category": "添加到类别", - "Added to group": "已添加至分组", - "Added to the title folder name": "添加到标题文件夹名称", - "Additional Failover Playlists (optional)": "附加故障转移播放列表(可选)", - "Additional Profiles": "附加配置文件", - "Adds an uninstall() method for custom cleanup logic beyond what the manifest declares.": "添加了一个 uninstall() 方法,用于在清单声明之外执行自定义清理逻辑。", + "A descriptive name for this post process.": "后处理的名称。", + "A descriptive name for this profile (e.g., \"720p Standard\", \"Twitch Stream\")": "此配置文件的描述性名称(例如“720p 标准”、“Twitch Stream”)", + "A descriptive name for this stream file setting profile": "流文件的配置文件的名称", + "A descriptive name for this transcoding profile (e.g., \"720p Standard\", \"1080p High Quality\")": "转码配置文件的描述性名称(例如“720p 标准”、“1080p 高质量”)", "Admin": "管理员", "Admin viewers cannot be deleted": "管理员用户不可删除", "Advanced": "先进的", @@ -100,99 +89,117 @@ "Advanced Settings": "高级设置", "Age Rating": "年龄分级", "Age rating or classification.": "年龄分级或分类。", + "AI Copilot": "AI 助手", + "AI Provider": "AI 提供商", "All": "全部", "All Activity": "所有活动", "All Attributes": "所有属性", "All EPGs": "所有电子节目指南", "All Live Channels": "所有直播频道", - "All Playlists": "所有播放列表", - "All Runs": "所有运行", - "All Series": "所有剧集", - "All VOD Channels": "所有 VOD 频道", - "All streams": "所有流", "Allow access to API docs": "允许访问 API 文档", + "Allowed domains": "允许的域", + "Allowed live groups": "允许的直播团体", + "Allowed Playlist Domains": "允许的播放列表域", + "Allowed series categories": "允许的系列类别", + "Allowed VOD groups": "允许的 VOD 组", "Allow mapping EPG to selected channels when running EPG mapping jobs.": "运行 EPG 映射任务时允许在将 EPG 映射到选择的频道。", "Allow mapping EPG to this channel when running EPG mapping jobs.": "运行 EPG 映射任务时允许将 EPG 映射到此频道。", "Allow merging for selected channels when running \"Merge Same ID\" jobs.": "运行“合并相同 ID”任务时允许合并所选通道。", "Allow probing this channel when running playlist channel probe jobs.": "运行播放列表频道探测任务时允许解析此频道。", "Allow queue manager access": "允许队列管理器访问", "Allow this channel to be merged during \"Merge Same ID\" jobs.": "运行“合并相同 ID”任务时合并此通道。", - "Allowed Playlist Domains": "允许的播放列表域", - "Allowed domains": "允许的域", + "All Playlists": "所有播放列表", + "All Runs": "所有运行", + "All Series": "所有剧集", + "All streams": "所有流", + "All VOD Channels": "所有 VOD 频道", "Also check VOD channel links in addition to live channels.": "除了直播频道外,还要检查 VOD 频道链接。", - "Alternative URLs": "替代网址", - "Alternative Xtream API URLs. If the primary URL fails during a sync, these will be tried in order (same credentials are used for all URLs).": "备用的 Xtream API URL。如果主 URL 在同步期间失败,将按顺序尝试这些(所有 URL 使用相同的凭据)。", "Alternative password if not specified in URL. Not commonly used.": "如果 URL 中未指定,则使用备用密码。不常用。", "Alternative port if not specified in URL. Not commonly used.": "如果 URL 中未指定,则使用备用端口。不常用。", "Alternative release date field.": "替代发布日期字段。", + "Alternative URLs": "替代网址", + "Alternative Xtream API URLs. If the primary URL fails during a sync, these will be tried in order (same credentials are used for all URLs).": "备用的 Xtream API URL。如果主 URL 在同步期间失败,将按顺序尝试这些(所有 URL 使用相同的凭据)。", "An administrator still needs to trust this plugin. Review the declared permissions, owned schema, and file integrity before enabling it.": "管理员需信任此插件。在启用该插件之前,请检查其声明的权限、所属模式以及文件完整性。", + "and how to use it": "以及如何使用它", + "A new version is available": "有新版本可用 🎉", + "API": "API", + "API Docs": "API 文档", + "API docs": "API 文档", + "API Key": "API 密钥", + "API key": "API 密钥", + "API Key/Token": "API 密钥/令牌", + "API Key Required": "需要 API 密钥", + "API Settings": "API 设置", + "API Token Created": "API 令牌已创建", + "API Tokens": "API 令牌", "Application Timezone": "应用程序时区", - "Apply TMDB ID to": "将 TMDB ID 应用到", - "Apply URL": "应用网址", - "Apply a single logo URL to all selected networks. Leave empty to remove logos.": "将统一的 Logo URL 应用到所有选择的网络。留空则删除图标。", - "Apply a single logo override URL to all selected VOD channels. Leave empty to remove overrides.": "将统一的 Logo URL 应用到所有选择的 VOD 频道。留空则删除图标。", "Apply a single logo override URL to all selected channels. Leave empty to remove overrides.": "将统一的 Logo URL 应用到所有选择的频道。留空则删除图标。", + "Apply a single logo override URL to all selected VOD channels. Leave empty to remove overrides.": "将统一的 Logo URL 应用到所有选择的 VOD 频道。留空则删除图标。", + "Apply a single logo URL to all selected networks. Leave empty to remove logos.": "将统一的 Logo URL 应用到所有选择的网络。留空则删除图标。", "Apply a single poster URL to all selected series. Leave empty to remove custom posters.": "将统一的海报 URL 应用到所有选择的剧集。留空以删除海报。", "Apply find and replace to all EPGs? If disabled, it will only apply to the selected EPG.": "将查找和替换应用到所有 EPG 吗?如果禁用,则仅应用到选择的 EPG。", - "Apply find and replace to all Series? If disabled, it will only apply to the selected Series.": "将查找和替换应用到所有剧集吗?如果禁用,则仅应用到选择的剧集。", "Apply find and replace to all playlists? If disabled, it will only apply to the selected playlist.": "将查找和替换应用到所有播放列表吗?如果禁用,则仅应用到选择的播放列表。", + "Apply find and replace to all Series? If disabled, it will only apply to the selected Series.": "将查找和替换应用到所有剧集吗?如果禁用,则仅应用到选择的剧集。", "Apply reset to all EPGs? If disabled, it will only apply to the selected EPG.": "对所有 EPG 进行重置吗?如果禁用,则仅应用到选择的 EPG。", "Apply reset to all playlists? If disabled, it will only apply to the selected playlist.": "对所有播放列表进行重置吗?如果禁用,则仅应用到选择的播放列表。", + "Apply TMDB ID to": "将 TMDB ID 应用到", + "Apply URL": "应用网址", "Archive Path": "存档路径", - "Are you sure you want to clear all selected VOD groups?": "确定要删除所有选择的 VOD 分组吗?", + "A recommendation based on the current plugin state.": "基于当前插件状态的建议。", "Are you sure you want to clear all selected categories?": "确定要删除所有选择的分类吗?", "Are you sure you want to clear all selected live groups?": "确定要删除所有选择的直播分组吗?", + "Are you sure you want to clear all selected series categories?": "您确定要清除所有选定的系列类别吗?", + "Are you sure you want to clear all selected VOD groups?": "确定要删除所有选择的 VOD 分组吗?", "Are you sure you want to delete the selected VOD channels? This action cannot be undone.": "确定要删除选择的 VOD 频道吗?此操作无法撤销。", - "Are you sure you want to delete this VOD channel? This action cannot be undone.": "确定要删除这个 VOD 频道吗?此操作无法撤销。", "Are you sure you want to delete this series? This will delete all episodes and seasons for this series. This action cannot be undone.": "确定要删除这个剧集吗?这将同时删除该剧集下的所有季度和剧集内容。此操作无法撤销。", "Are you sure you want to delete this token? This action cannot be undone.": "确定要删除这个令牌吗?此操作无法撤销。", + "Are you sure you want to delete this VOD channel? This action cannot be undone.": "确定要删除这个 VOD 频道吗?此操作无法撤销。", "Are you sure you want to manually trigger this EPG mapping to run again? This will not modify the \"Recurring\" setting.": "确定要手动再次触发这个 EPG 映射吗?这不会修改“自动重复”设置。", "Are you sure you want to manually trigger this scrubber to run? This will not modify the \"Recurring\" setting.": "确定要手动运行此链接清理工具吗?这不会修改“自动重复”设置。", "Artifact": "固件", + "A SHA-256 checksum is required to stage this update.": "执行此更新需要 SHA-256 校验。", "Asset": "资源", "Asset deleted": "资源已删除", "Asset file": "资源文件", + "Assets": "资源", "Asset scan complete": "资源扫描完成", "Asset uploaded": "资源已上传", - "Assets": "资源", "Assign Auth to Playlist": "将身份验证分配给播放列表", + "Assigned Auths": "分配的权限", + "Assigned To": "分配给", + "Assigned to Playlist": "分配到播放列表", "Assign priority weights to specific groups. Higher weight = more preferred as master. Leave empty for default behavior.": "为特定组分配优先级权重,数字越大权重越高。留空则默认。", "Assign processing to item": "将处理任务分配给项目", "Assign this auth to a specific playlist. Each auth can only be assigned to one playlist at a time.": "将这个授权分配给特定的播放列表。每个授权一次只能分配给一个播放列表。", "Assign this network to a playlist for M3U/EPG output. Create one if none exist.": "将这个虚拟频道(Network)分配到播放列表,以生成 M3U/EPG 输出。如果不存在播放列表,请创建一个", "Assign to a network playlist for M3U/EPG output.": "将这个虚拟频道(Network)分配到播放列表,以生成 M3U/EPG 输出", - "Assigned Auths": "分配的权限", - "Assigned To": "分配给", - "Assigned to Playlist": "分配到播放列表", + "A test email will be sent to this address using the entered SMTP settings.": "使用 SMTP 设置将测试电子邮件发送到此地址。", "Audio Bitrate": "音频比特率", - "Audio Codec": "音频编解码器", "Audio bitrate": "音频比特率", "Audio channels": "音频通道", + "Audio Codec": "音频编解码器", "Audio codec": "音频编解码器", "Audio language": "音频语言", "Audio level (in dB) below which audio is considered silent. Default: -50 dB.": "音频级别(以 dB 为单位),低于该级别的音频将被视为无声。默认值:-50 dB。", "Auth": "授权", "Auth (optional)": "身份验证(可选)", - "Auth Name": "授权名称", - "Auth for My Playlist": "验证我的播放列表", "Authentication Option": "身份验证选项", - "Auto Enable": "自动启用", - "Auto Enable New Channels": "自动启用新频道", - "Auto Sync": "自动同步", - "Auto channel number increment": "自动通道号递增", - "Auto enable newly added category series": "自动启用新添加的剧集类别", - "Auto enable newly added group channels": "自动启用新添加的频道组", - "Auto scan on EPG cache: disabled": "自动扫描 EPG 缓存:已禁用", - "Auto scan on EPG cache: enabled": "自动扫描 EPG 缓存:已启用", - "Auto sync and scheduling options": "自动同步和计划选项", - "Auto trigger": "自动触发", + "Auth for My Playlist": "验证我的播放列表", + "Auth Name": "授权名称", "Auto-Add to Custom Playlist": "自动添加到自定义播放列表", + "Auto-create groups/categories from TMDB genres": "根据 TMDB 流派自动创建组/类别", "Auto-Enable Settings": "自动启用设置", "Auto-Fetch Metadata": "自动获取元数据", - "Auto-Merge Processing": "自动合并处理", "Auto-lookup on metadata fetch": "获取元数据时自动查询", + "Auto-Merge Processing": "自动合并处理", "Auto-regenerate Schedule": "自动重新生成计划表", + "Auto-streams the highest-ranked failover. URL field is locked while on. Custom channels only.": "自动流式传输排名最高的故障转移。 URL 字段在打开时被锁定。仅限自定义频道。", "Auto/Default": "自动/默认", + "Auto channel number increment": "自动通道号递增", + "Auto Enable": "自动启用", + "Auto Enable New Channels": "自动启用新频道", + "Auto enable newly added category series": "自动启用新添加的剧集类别", + "Auto enable newly added group channels": "自动启用新添加的频道组", "Automated backups": "自动备份", "Automatically assign sort number based on playlist order": "根据播放列表顺序自动分配序号", "Automatically disable channels whose stream URL is unreachable.": "自动禁用流 URL 不可达的频道。", @@ -204,30 +211,35 @@ "Automatically regenerate when schedule is about to expire.": "计划表即将过期时自动重新生成。", "Automatically run this scrubber after each playlist sync.": "每次播放列表同步后自动运行此链接清理工具。", "Automatically set when selecting a category.": "选择分类时自动设置。", - "Automatically sync EPG": "自动同步 EPG", "Automatically sync content on schedule": "按计划自动同步内容", + "Automatically sync EPG": "自动同步 EPG", "Automatically sync merged EPG": "自动同步合并后的 EPG", "Automatically sync playlist": "自动同步播放列表", "Automatically trigger a library scan on your media server after .strm files are synced": ".strm 文件同步后自动触发媒体服务器的库扫描", "Automatically trigger failover when a stream\\'s audio goes silent. Disabled by default.": "当流音频无声时自动触发故障转移。默认禁用。", "Automation": "自动化", + "Auto scan on EPG cache: disabled": "自动扫描 EPG 缓存:已禁用", + "Auto scan on EPG cache: enabled": "自动扫描 EPG 缓存:已启用", + "Auto Sync": "自动同步", + "Auto sync and scheduling options": "自动同步和计划选项", + "Auto trigger": "自动触发", "Availability": "可用性", "Available Actions": "可用的操作", "Available Streams": "可用流", "Avatar": "头像", + "Backdrop Images": "背景图片", + "Backend": "后端", "Back to Playlist": "返回播放列表", "Back to Plugin": "返回插件", "Back to Scrubber": "返回链接清理工具", "Back to Scrubbers": "返回链接清理工具", "Back to Series": "返回剧集", + "Back to series": "返回剧集", "Back to Sync Statuses": "返回同步状态", "Back to VOD": "返回 VOD", - "Back to series": "返回剧集", - "Backdrop Images": "背景图片", "Backup & Restore": "备份与恢复", "Backup Account": "备份账户", "Backup Before Sync": "同步前备份", - "Backup Schedule": "备份计划", "Backup file": "备份文件", "Backup file (.ZIP files only)": "备份文件(仅限 .ZIP 文件)", "Backup file has been uploaded, you can now restore it if needed.": "备份文件已上传,可以根据需要进行恢复。", @@ -237,13 +249,14 @@ "Backup is being restored": "正在恢复备份", "Backup is being restored in the background. Depending on the size of the backup, this could take a while.": "正在后台恢复备份。根据备份的大小,这可能需要一段时间。", "Backups": "备份", + "Backup Schedule": "备份计划", "Bare scaffold": "基础脚手架", "Base URL": "基础 URL", "Bit depth": "位深度", "Bitrate": "比特率", - "Block Plugin": "屏蔽插件", "Blocked": "已屏蔽", "Blocking disables the plugin immediately and prevents execution until an administrator trusts it again.": "屏蔽操作会立即禁用该插件并阻止其执行,直到管理员再次信任该插件为止。", + "Block Plugin": "屏蔽插件", "Body": "正文", "Body content for the email (optional).": "电子邮件的正文内容(可选)。", "Brief description...": "简要描述...", @@ -256,70 +269,72 @@ "Broadcast will wait until this time to start. Leave empty to start immediately.": "推流将等待至此时间开始。留空则立即开始。", "Browse Library": "浏览库", "Bulk Actions": "批量操作", - "Bulk VOD actions": "批量 VOD 操作", "Bulk channel actions": "批量频道操作", "Bulk series actions": "批量剧集操作", + "Bulk VOD actions": "批量 VOD 操作", "Bundled plugins cannot be deleted.": "内置插件无法删除", "Bypass Provider Connection Limits": "绕过提供商连接限制", - "CRON Example": "Cron 示例", - "Cache Metadata": "缓存元数据", - "Cache Progress": "缓存进度", "Cached": "已缓存", "Cached logos removed": "已清除缓存的 Logo", + "Cache Metadata": "缓存元数据", + "Cache Progress": "缓存进度", "Call webhooks, or run local scripts, after playlist sync completion.": "播放列表同步完成后,调用 Webhook 或运行本地脚本。", "Cancel": "取消", + "Cancellation requested": "已请求取消", + "Cancelled": "已取消", "Cancel Run": "取消运行", "Cancel the in-progress scrubber run.": "取消正在进行的链接清理工具运行任务。", "Cancel this scrubber run? The current run will be abandoned. Any channels already disabled during this run will remain disabled.": "确定要取消此次链接清理工具的运行吗?当前任务将被放弃,在此次运行中已禁用的频道将保持禁用状态。", - "Cancellation requested": "已请求取消", - "Cancelled": "已取消", "Capabilities": "功能特性", "Capability Map": "功能映射图", "Cast": "演员阵容", "Catchup": "回看", + "Catchup Source": "追赶源", "Categories": "分类", "Categories to import": "要导入的分类", "Category": "分类", "Category Name": "分类名称", "Category Settings": "分类设置", + "Category sort order": "类别排序顺序", "Ch #": "频道编号", "Channel": "频道", "Channel Attributes to Copy": "要复制的频道属性", "Channel Details": "频道详情", + "Channel Filter (optional)": "通道滤波器(可选)", + "Channel group as category": "将频道分组作为分类", "Channel ID": "频道 ID", + "Channel mapping removed for the selected channels.": "已清除所选频道的频道映射。", + "Channel mapping removed for the selected Playlist.": "已清除所选播放列表的频道映射。", + "Channel mapping started, you will be notified when the process is complete.": "频道映射已开始,过程完成后将通知您。", "Channel Match Attributes": "频道匹配属性", + "Channel merge started": "频道合并已开始", "Channel Name": "频道名称", "Channel No.": "频道编号", "Channel Number": "频道编号", + "Channels": "频道", + "Channels as failover": "将频道作为故障转移", + "Channels Checked": "已检查频道", "Channel Scrubber": "频道链接清理工具", - "Channel Scrubbers": "频道链接清理工具", - "Channel Title": "频道标题", - "Channel group as category": "将频道分组作为分类", - "Channel mapping removed for the selected Playlist.": "已清除所选播放列表的频道映射。", - "Channel mapping removed for the selected channels.": "已清除所选频道的频道映射。", - "Channel mapping started, you will be notified when the process is complete.": "频道映射已开始,过程完成后将通知您。", - "Channel merge started": "频道合并已开始", "Channel scrubber restarted": "频道链接清理工具已重新启动", - "Channel scrubber started": "频道链接清理工具已启动", + "Channel Scrubbers": "频道链接清理工具", "Channel scrubbers started": "频道链接清理工具已启动", - "Channel unmerge started": "频道取消合并已开始", - "Channels": "频道", - "Channels Checked": "已检查频道", + "Channel scrubber started": "频道链接清理工具已启动", "Channels Disabled": "已禁用频道", - "Channels Recounted": "频道数已重新统计", - "Channels Sorted": "频道已排序", - "Channels as failover": "将频道作为故障转移", "Channels moved to group": "频道已移至分组", "Channels only": "仅频道", + "Channels Recounted": "频道数已重新统计", + "Channels Sorted": "频道已排序", "Channels to process per call (default: 50, max: 100). Use with offset for pagination.": "每次调用处理的频道数(默认:50,最大:100),配合偏移量用于分页。", "Channels to skip (default: 0). Increment by limit to page through a large group.": "要跳过的频道数(默认:0),按限制数递增以翻阅大分组。", "Channels with these keywords in their name will be prioritized (e.g., \"RAW\", \"LOCAL\", \"HD\").": "名称中包含这些关键字的频道将被优先考虑(例如 \"RAW\"、\"LOCAL\"、\"HD\")。", - "Check Method": "检查方法", - "Check Plugin Updates": "检查插件更新", + "Channel Title": "频道标题", + "Channel unmerge started": "频道取消合并已开始", + "Checked": "已检查", "Check for File Changes": "检查文件更改", "Check for Updates": "检查更新", "Check interval (seconds)": "检查间隔(秒)", - "Checked": "已检查", + "Check Method": "检查方法", + "Check Plugin Updates": "检查插件更新", "Choose between URL/file upload or SchedulesDirect integration": "在 URL/文件上传或使用 Schedules Direct ", "Choose if and where transcoding should occur. Restart the broadcast after changing this setting.": "选择是否以及在何处进行转码。更改此设置后请重新启动推流。", "Choose master from?": "从何处选择主频道?", @@ -327,32 +342,32 @@ "Choose whether to retain or remove any database tables and storage files the plugin created during its lifetime.": "选择保留还是移除该插件在运行期间创建的数据库表和存储文件。", "Clean special characters": "清理特殊字符", "Cleanup Complete": "清理完成", - "Cleanup Duplicate Series": "清理重复剧集", - "Cleanup Duplicates": "清理重复项", - "Cleanup Streams": "清理串流", "Cleanup default": "清理默认值", + "Cleanup Duplicates": "清理重复项", + "Cleanup Duplicate Series": "清理重复剧集", "Cleanup requested.": "已请求清理。", + "Cleanup Streams": "清理串流", "Clear": "清除", - "Clear All Logo Cache": "清除所有 Logo 缓存", - "Clear EPG mappings for all channels of the selected playlist.": "清除所选播放列表所有频道的 EPG 映射。", - "Clear EPG mappings for the selected channels.": "清除所选频道的 EPG 映射。", - "Clear Expired Logo Cache": "清除过期 Logo 缓存", - "Clear History": "清除历史记录", - "Clear Watch Progress": "清除观看进度", "Clear all": "清除全部", "Clear all cached logos": "清除所有缓存的 Logo", + "Clear All Logo Cache": "清除所有 Logo 缓存", "Clear cached logos and poster images for selected VOD channels so they are fetched again on the next request.": "清除所选 VOD 频道的缓存 Logo 和海报,以便在下次请求时重新获取。", "Clear cached logos for selected channels so they are fetched again on the next request.": "清除所选频道的缓存 Logo,以便在下次请求时重新获取。", "Clear cached logos for selected networks so they are fetched again on the next request.": "清除所选虚拟频道 的缓存 Logo,以便在下次请求时重新获取。", "Clear cached poster images for selected series so they are fetched again on the next request.": "清除所选剧集的缓存海报,以便在下次请求时重新获取。", + "Clear EPG mappings for all channels of the selected playlist.": "清除所选播放列表所有频道的 EPG 映射。", + "Clear EPG mappings for the selected channels.": "清除所选频道的 EPG 映射。", "Clear expired cache": "清除过期缓存", + "Clear Expired Logo Cache": "清除过期 Logo 缓存", "Clear failed playlists": "清除失败的播放列表", + "Clear History": "清除历史记录", "Clear history": "清除历史记录", + "Clearing the logo cache will remove all cached logo images. If permanent cache is enabled, it will be ignored. This action cannot be undone.": "清除 Logo 缓存将移除所有缓存的图标。即使启用了永久缓存,也会被忽略。此操作无法撤销。", "Clear log": "清除日志", "Clear log file?": "清除日志文件?", "Clear run history": "清除运行历史", "Clear selection": "清除选择", - "Clearing the logo cache will remove all cached logo images. If permanent cache is enabled, it will be ignored. This action cannot be undone.": "清除 Logo 缓存将移除所有缓存的图标。即使启用了永久缓存,也会被忽略。此操作无法撤销。", + "Clear Watch Progress": "清除观看进度", "Click on a result to apply the TMDB IDs": "点击结果以应用 TMDB ID", "Close": "关闭", "Codec long name": "编解码器长名称", @@ -362,13 +377,11 @@ "Complete cast list": "完整演员名单", "Completed": "已完成", "Condition": "条件", - "Condition to check.": "待检查的条件。", "Conditional Settings": "条件设置", "Conditions": "条件", + "Condition to check.": "待检查的条件。", "Config": "配置", "Configuration": "配置", - "Configure SMTP settings to send emails from the application.": "配置 SMTP 设置以通过应用程序发送电子邮件。", - "Configure The Movie Database (TMDB) integration to automatically lookup and populate metadata IDs (TMDB, TVDB, IMDB) for your VOD content and Series.": "配置 TMDB 集成,以便为您的 VOD 内容和剧集自动查找并填充元数据 ID(TMDB、TVDB、IMDB)。", "Configure automatic stream probing after each playlist sync.": "配置每次播放列表同步后的自动流探测。", "Configure automatic sync schedule": "配置自动同步计划", "Configure groups to automatically sync into Custom Playlists after each successful sync. Each rule syncs the selected source group(s) into one Custom Playlist.": "配置分组以在每次成功同步后自动同步到自定义播放列表。每条规则将选定的源分组同步到一个自定义播放列表。", @@ -376,26 +389,30 @@ "Configure how the proxy handles stream failures, including advanced resolver logic and fail conditions.": "配置代理如何处理流故障,包括高级解析器逻辑和失败条件。", "Configure how the proxy is accessed and how stream URLs are resolved.": "配置如何访问代理以及如何解析流的 URL。", "Configure scaffold options": "配置脚手架选项", + "Configure SMTP settings to send emails from the application.": "配置 SMTP 设置以通过应用程序发送电子邮件。", + "Configure The Movie Database (TMDB) integration to automatically lookup and populate metadata IDs (TMDB, TVDB, IMDB) for your VOD content and Series.": "配置 TMDB 集成,以便为您的 VOD 内容和剧集自动查找并填充元数据 ID(TMDB、TVDB、IMDB)。", "Configure your SchedulesDirect account settings": "配置您的 Schedules Direct 账户设置", "Confirm selection": "确认选择", "Connected but No Libraries Found": "已连接但未找到库", "Connection Failed": "连接失败", - "Connection Successful": "连接成功", "Connection failed": "连接失败", + "Connection Successful": "连接成功", "Connection successful!": "连接成功!", "Consecutive silent checks before failover": "触发故障转移前的连续无声检查次数", "Container Extension": "容器扩展名", "Content": "内容", - "Content Type": "内容类型", "Content not found": "未找到内容", + "Content Type": "内容类型", "Control how media is transcoded": "控制媒体转码方式", "Control request concurrency for parallel processing and add delays between requests to avoid provider rate limiting.": "控制并行处理的请求并发性,并在请求之间添加延迟以避免提供商限速。", "Control what content is synced from the media server": "控制从媒体服务器同步哪些内容", + "Cookies (Netscape format)": "Cookie(Netscape 格式)", "Copy Changes": "复制更改", "Copy now": "立即复制", + "Copy the file hash from the GitHub release page.": "从 GitHub 发布页面复制文件哈希值。", "Copy the file hash from the GitHub release page to verify the download hasn't been tampered with.": "从 GitHub 发布页面复制文件哈希值,以验证下载内容未被篡改。", "Copy the file hash from the GitHub release page to verify the download hasn\\'t been tampered with.": "从 GitHub 发布页面复制文件哈希值,以验证下载内容未被篡改。", - "Copy the file hash from the GitHub release page.": "从 GitHub 发布页面复制文件哈希值。", + "Could not create smart channel": "无法创建智能频道", "Could not determine the record to update. Please close the modal and try again.": "无法确定要更新的记录。请关闭弹窗并重试。", "Could not fetch release": "无法获取版本", "Country": "国家", @@ -403,46 +420,46 @@ "Country of origin.": "所属国家", "Cover": "封面", "Cover Image (Large)": "封面图片(大)", + "Create a custom \"smart channel\" from the selected channels. The highest-scoring source's title, logo, and EPG mapping will be copied. All selected channels become failovers, sorted by score, and the playlist will stream the top failover automatically.": "从所选渠道创建自定义“智能渠道”。得分最高的来源的标题、徽标和 EPG 映射将被复制。所有选定的频道都会成为故障转移,并按分数排序,并且播放列表将自动流式传输顶部的故障转移。", + "Create an alias of an existing playlist or custom playlist to use a different Xtream API credentials, while still using the same underlying Channel, VOD and Series configurations of the linked playlist.": "为现有播放列表或自定义播放列表创建别名,以便使用不同的 Xtream API 凭据,同时仍使用所链接播放列表的底层频道、VOD 和剧集配置。", + "Create credentials and assign them to your Playlist for simple authentication. They can also be used to access the Xtream API for the assigned Playlists.": "创建凭据并将其分配给您的播放列表进行简单身份验证。它们也可用于访问所分配播放列表的 Xtream API。", "Create Custom Channel": "创建自定义频道", "Create Custom VOD": "创建自定义 VOD", + "Create live TV channels from your media server content": "利用媒体服务器内容创建直播电视频道", "Create Missing Channels": "创建缺失频道", "Create Network": "创建虚拟频道", "Create Networks in the Networks section to build pseudo-live channels": "在虚拟频道页面创建虚拟频道,以构建伪直播频道", - "Create Plugin": "创建插件", - "Create Token": "创建令牌", - "Create an alias of an existing playlist or custom playlist to use a different Xtream API credentials, while still using the same underlying Channel, VOD and Series configurations of the linked playlist.": "为现有播放列表或自定义播放列表创建别名,以便使用不同的 Xtream API 凭据,同时仍使用所链接播放列表的底层频道、VOD 和剧集配置。", - "Create credentials and assign them to your Playlist for simple authentication. They can also be used to access the Xtream API for the assigned Playlists.": "创建凭据并将其分配给您的播放列表进行简单身份验证。它们也可用于访问所分配播放列表的 Xtream API。", - "Create live TV channels from your media server content": "利用媒体服务器内容创建直播电视频道", "Create now": "立即创建", "Create playlists composed of channels from your other playlists. Head to channels to bulk add channels to your custom playlist.": "创建由其他列表中的频道组成的播放列表。前往频道页面可批量将频道添加到您的自定义播放列表。", + "Create Plugin": "创建插件", "Creates a new security review of this plugin\\'s current files. Use this after updating plugin files on disk or after a failed install to re-trigger the review process without re-uploading.": "对该插件当前文件进行新的安全审查。在更新磁盘文件或安装失败后使用此功能,可重新触发审核流程而无需重新上传。", + "Create smart channel": "打造智能频道", + "Create Token": "创建令牌", "Credentials": "凭据", - "Current IDs": "当前 ID", - "Current Provider Timezone": "当前提供商时区", - "Current Run": "当前运行任务", - "Current Status": "当前状态", + "CRON Example": "Cron 示例", "Current category series disabled": "当前分类的剧集已禁用", "Current category series enabled": "当前分类的剧集已启用", - "Current signal": "当前信号", + "Current IDs": "当前 ID", "Currently Mapped": "当前已映射", - "Currently stored external IDs for this VOD": "当前存储的此 VOD 的外部 ID", "Currently stored external IDs for this series": "当前存储的此剧集的外部 ID", + "Currently stored external IDs for this VOD": "当前存储的此 VOD 的外部 ID", + "Current Provider Timezone": "当前提供商时区", + "Current Run": "当前运行任务", + "Current signal": "当前信号", + "Current Status": "当前状态", "Custom": "自定义", "Custom Category": "自定义分类", "Custom Date Format String": "自定义日期格式字符串", "Custom Group": "自定义分组", "Custom Headers": "自定义请求头", + "Custom headers to use when streaming via the proxy.": "通过代理串流时使用的自定义请求头。", "Custom Playlist": "自定义播放列表", "Custom Playlist Channels Recounted": "自定义播放列表频道数已重新统计", "Custom Playlists": "自定义播放列表", - "Custom headers to use when streaming via the proxy.": "通过代理串流时使用的自定义请求头。", - "DNS failover URLs": "DNS 故障转移 URL", - "DVR / Live TV Tuner": "DVR / 直播电视调谐器", - "DVR Channels": "DVR 频道", - "DVR Removed": "DVR 已移除", - "DVR Status": "DVR 状态", - "DVR Sync Status": "DVR 同步状态", + "Daily": "日常的", "Dashboard": "仪表板", + "Database: Execute Query": "数据库:执行查询", + "Database: Get Schema": "数据库:获取架构", "Data Ownership": "数据所有权", "Date Format": "日期格式", "Days of schedule to generate": "生成计划的天数", @@ -450,46 +467,46 @@ "Deactivate failover channels": "停用故障转移频道", "Dead Links": "失效链接", "Dead Links Found": "发现失效链接", - "Debug Logs": "调试日志", "Debugging": "调试", + "Debug Logs": "调试日志", "Default EPG": "默认 EPG", "Default ID": "默认 ID", "Default Live Transcoding Profile": "默认直播转码配置文件", "Default Name": "默认名称", - "Default Series Stream File Setting": "默认剧集流文件设置", - "Default Title": "默认标题", - "Default URL": "默认 URL", - "Default Uninstall Behavior": "默认卸载行为", - "Default VOD Stream File Setting": "默认 VOD 流文件设置", "Default name": "默认名称", "Default options for new Live channels": "新直播频道的默认选项", "Default options for new VOD channels": "新 VOD 频道的默认选项", "Default playlist": "默认播放列表", "Default routes through M3U Editor for dynamic routing.": "通过 M3U Editor 进行动态路由的默认路径。", - "Default stream profiles have been generated!": "默认流配置文件已生成!", "Defaults": "默认值", - "Defaults and schedules used by the plugin.": "插件使用的默认值和计划任务。", "Defaults, schedules, and automatic entry points.": "默认值、计划任务和自动入口点。", + "Defaults and schedules used by the plugin.": "插件使用的默认值和计划任务。", + "Default Series Stream File Setting": "默认剧集流文件设置", + "Default stream profiles have been generated!": "默认流配置文件已生成!", + "Default Title": "默认标题", + "Default Uninstall Behavior": "默认卸载行为", + "Default URL": "默认 URL", + "Default VOD Stream File Setting": "默认 VOD 流文件设置", "Define find & replace rules that automatically run after each playlist sync. Rules execute in order.": "定义每次播放列表同步后自动运行的查找与替换规则。规则按顺序执行。", "Define sort configurations that automatically run after each playlist sync. Configurations execute in order.": "定义在每次播放列表同步后自动运行的排序配置。配置按顺序执行。", "Delay after stream start before silence monitoring begins. Allows for initial buffering and audio decoder startup. Default: 15 seconds.": "流启动后到无声监测开始前的延迟。用于预留初始缓冲和音频解码器启动时间。默认值:15 秒。", "Delay before refresh (seconds)": "刷新前的延迟(秒)", "Delay in milliseconds between requests.": "请求之间的延迟(毫秒)。", "Delete": "删除", - "Delete Plugin": "删除插件", - "Delete Record": "删除记录", "Delete blocked": "删除已屏蔽内容", "Delete now": "立即删除", "Delete permanently": "永久删除", + "Delete Plugin": "删除插件", "Delete plugin from disk": "从磁盘删除插件", + "Delete Record": "删除记录", "Delete selected": "删除所选内容", "Delete selected files": "删除所选文件", "Delete this sync log?": "确定要删除此同步日志吗?", "Description": "描述", + "Detached from playlist": "已从播放列表分离", "Detach Selected": "分离所选内容", "Detach selected channels from custom playlist": "从自定义播放列表中分离所选频道", "Detach selected series from custom playlist": "从自定义播放列表中分离所选剧集", - "Detached from playlist": "已从播放列表分离", "Detailed plot summary.": "详细剧情简介。", "Detailed plot summary...": "详细剧情简介...", "Details": "详情", @@ -499,22 +516,24 @@ "Director": "导演", "Director(s) of the content.": "内容导演。", "Disable": "禁用", - "Disable Categories": "禁用分类", - "Disable Category Series": "禁用剧集分类", - "Disable EPG mapping": "禁用 EPG 映射", - "Disable Group Channels": "禁用分组频道", - "Disable Groups": "禁用分组", - "Disable Merge": "禁用合并", - "Disable Probing": "禁用侦测", - "Disable SSL verification": "禁用 SSL 验证", "Disable all episodes": "禁用所有剧集", "Disable catch-up": "禁用回看", + "Disable Categories": "禁用分类", + "Disable Category Series": "禁用剧集分类", "Disable category series": "禁用剧集分类", + "Disabled": "已禁用", "Disable dead channels": "禁用失效频道", + "Disable EPG mapping": "禁用 EPG 映射", + "Disable Group Channels": "禁用分组频道", "Disable group channels": "禁用频道分组", "Disable group channels now?": "立即禁用频道分组吗?", + "Disable Groups": "禁用分组", + "Disable Merge": "禁用合并", "Disable now": "立即禁用", + "Disable Probing": "禁用侦测", "Disable selected": "禁用所选内容", + "Disable source channels": "禁用源通道", + "Disable SSL verification": "禁用 SSL 验证", "Disable stream probing for the selected channels. They will be excluded from stream probing jobs.": "禁用所选频道的流检测。这些频道将从流检测任务中排除。", "Disable the current category series now?": "立即禁用当前分类的剧集吗?", "Disable the selected categories now?": "立即禁用所选分类吗?", @@ -525,22 +544,22 @@ "Disable the series episodes now?": "立即禁用该剧集的剧集内容吗?", "Disable to pause syncing without deleting the integration": "禁用此项可暂停同步,无需删除集成", "Disable to stop generating schedule without deleting": "禁用此项可停止生成计划,无需删除", - "Disabled": "已禁用", "Disabling is reversible. Uninstalling changes the plugin\\'s status and optionally removes its database tables, files, and reports.": "禁用操作是可逆的。卸载会改变插件状态,并可选择移除其数据库表、文件和报告。", "Discard Review": "放弃审查", "Discard review failed": "放弃审查失败", "Discord": "Discord", "Discover Plugins": "发现插件", "Disk": "磁盘", - "Display Name": "显示名称", "Display aspect ratio": "显示纵横比", + "Display Name": "显示名称", + "DNS failover URLs": "DNS 故障转移 URL", "Documentation": "文档", "Does not have metadata": "无元数据", - "Don\\'t allow merging for selected channels when running \"Merge Same ID\" jobs.": "运行“合并相同 ID”任务时,不允许合并所选频道。", - "Don\\'t map EPG to selected channels when running EPG mapping jobs.": "运行 EPG 映射任务时,不要将 EPG 映射到所选频道。", "Donate now": "立即捐赠", "Donate via Ko-fi": "通过 Ko-fi 捐赠", "Done": "完成", + "Don\\'t allow merging for selected channels when running \"Merge Same ID\" jobs.": "运行“合并相同 ID”任务时,不允许合并所选频道。", + "Don\\'t map EPG to selected channels when running EPG mapping jobs.": "运行 EPG 映射任务时,不要将 EPG 映射到所选频道。", "Download": "下载", "Download EPG": "下载 EPG", "Download M3U": "下载 M3U", @@ -555,99 +574,89 @@ "Duration (Seconds)": "时长(秒)", "Duration in HH:MM:SS format.": "HH:MM:SS 格式的时长。", "Duration in seconds.": "以秒为单位的时长。", - "EPG": "EPG", - "EPG Cache is being generated": "正在生成 EPG 缓存", - "EPG Cache is being generated for selected EPGs": "正在为选择的 EPG 生成缓存", - "EPG Cache is being generated in the background for the selected EPGs. You will be notified when complete.": "选定的 EPG 缓存正在后台生成,完成后将通知您。", - "EPG Cache is being generated in the background. You will be notified when complete.": "EPG 缓存正在后台生成,完成后将通知您。", - "EPG Channel": "EPG 频道", - "EPG Channel mapping removed": "EPG 频道映射已清除", - "EPG Channels": "EPG 频道", - "EPG File Cache Cleared": "EPG 文件缓存已清除", - "EPG File Cache Not Found": "未找到 EPG 文件缓存", - "EPG Information": "EPG 信息", - "EPG Map": "EPG 映射关系", - "EPG Mapped Channels": "已映射 EPG 的频道", - "EPG Mapper: Apply Mappings": "EPG 映射器:应用映射", - "EPG Mapper: Channel Matcher": "EPG 映射器:频道匹配器", - "EPG Mapper: Mapping State": "EPG 映射器:映射状态", - "EPG Maps": "EPG 映射关系", - "EPG Output": "EPG 输出", - "EPG Settings": "EPG 设置", - "EPG Shift": "EPG 偏移", - "EPG URL": "EPG 网址", - "EPG data for your Networks": "虚拟频道 的 EPG 数据", - "EPG is being processed in the background. Depending on the size of the guide data, this may take a while. You will be notified on completion.": "EPG 正在后台处理。根据指南数据的大小,可能需要一段时间,完成后将通知您。", - "EPG is being processed in the background. The view will update when complete.": "EPG 正在后台处理,完成后视图将自动更新。", - "EPG is mapped": "EPG 已映射", - "EPG is not mapped": "EPG 未映射", - "EPG is processing": "EPG 正在处理中", - "EPG map disabled for selected channels": "所选频道的 EPG 映射关系已禁用", - "EPG map re-enabled for selected channels": "所选频道已重新启用 EPG 映射关系", - "EPG mapping restarted": "EPG 映射已重新启动", - "EPG mapping started": "EPG 映射已开始", - "EPG output options": "EPG 输出选项", - "EPG status has been reset.": "EPG 状态已重置。", - "EPG status reset": "EPG 状态重置", - "EPG to Channel mapping": "EPG 与频道的映射", - "EPG type": "EPG 类型", - "EPGs": "EPG", + "During scheduled or manual rescoring, channels with stats older than this are re-probed first. Set to 0 to always re-probe. The \"Make smart channel\" action uses existing stats only and does not consult this setting.": "在计划或手动重新评分期间,首先会重新探测统计数据早于此的通道。设置为 0 始终重新探测。 “创建智能频道”操作仅使用现有统计数据,不参考此设置。", + "DVR / Live TV Tuner": "DVR / 直播电视调谐器", + "DVR Channels": "DVR 频道", + "DVR Removed": "DVR 已移除", + "DVR Status": "DVR 状态", + "DVR Sync Status": "DVR 同步状态", + "e.g., 100": "例如 100", + "e.g., Movie Classics, 80s TV, Kids Zone": "例如 Movie Classics, 80s TV, Kids Zone", + "e.g., Movies, TV Shows": "例如 电影、电视节目", + "e.g., My Networks": "例如 我的虚拟频道 (Network)", + "e.g. 403, 404, 502, 503": "例如 403, 404, 502, 503", + "e.g. 2024": "例如 2024", + "e.g. a1b2c3d4...": "例如 a1b2c3d4...", + "e.g. aac": "例如 aac", + "e.g. Authorization": "例如 Authorization", + "e.g. Bearer abc123": "例如 Bearer abc123", + "e.g. d/m/Y H:i:s": "例如 d/m/Y H:i:s", + "e.g. Help me find a channel": "例如 帮我找个频道", + "e.g. Help me find a channel by name.": "例如 帮我按名称查找频道。", + "e.g. libx264, h264_nvenc": "例如 libx264, h264_nvenc", + "e.g. Remove country prefix": "例如 清除国家前缀", + "e.g. veryfast, fast, medium": "例如 veryfast, fast, medium", + "Edit or add the series details": "编辑或添加剧集详情", "Edit Playlist": "编辑播放列表", "Edit Series": "编辑剧集", "Edit VOD": "编辑 VOD", - "Edit or add the series details": "编辑或添加剧集详情", + "Email address": "电子邮件地址", "Email Body": "电子邮件正文", "Email Options": "电子邮件选项", "Email Subject": "电子邮件主题", - "Email address": "电子邮件地址", "Email variables": "电子邮件变量", "Emby": "Emby", + "en": "en", "Enable": "启用", "Enable .strm file generation": "启用 .strm 文件生成", + "Enable advanced failover logic": "启用高级故障转移逻辑", "Enable AI Copilot": "启用 AI 助手", "Enable AI Copilot Management": "启用 AI 助手管理", + "Enable all episodes": "启用所有剧集", + "Enable auto-merge after sync": "同步后启用自动合并", "Enable Automatic Database Backups": "启用自动数据库备份", "Enable Broadcasting": "启用推流", "Enable Categories": "启用分类", "Enable Category Series": "启用剧集分类", + "Enable category series": "启用分类剧集", + "Enabled": "已启用", + "Enabled Channels": "已启用频道", "Enable Debugging": "启用调试", + "Enabled Tools": "已启用工具", + "Enable dummy EPG": "启用虚拟 EPG", "Enable EPG mapping": "启用 EPG 映射", "Enable EPG mapping by default": "默认启用 EPG 映射", "Enable Group Channels": "启用分组频道", - "Enable Groups": "启用分组", - "Enable Logo Proxy": "启用 Logo 代理", - "Enable Logo Repository endpoint": "启用 Logo 存储库端点", - "Enable Merge": "启用合并", - "Enable Plex Management": "启用 Plex 管理", - "Enable Probing": "启用侦测", - "Enable Provider Affinity": "启用提供商关联", - "Enable Provider Profiles": "启用提供商配置文件", - "Enable Sticky Session Handler": "启用粘性会话处理程序", - "Enable Stream Proxy": "启用串流代理", - "Enable Strict Live TS Handling": "启用严格的实时 TS 处理", - "Enable Sync Logs": "启用同步日志", - "Enable advanced failover logic": "启用高级故障转移逻辑", - "Enable all episodes": "启用所有剧集", - "Enable auto-merge after sync": "同步后启用自动合并", - "Enable category series": "启用分类剧集", - "Enable dummy EPG": "启用虚拟 EPG", "Enable group channels": "启用分组频道", "Enable group channels now?": "立即启用分组频道吗?", + "Enable Groups": "启用分组", "Enable if your server uses SSL/TLS": "如果服务器使用 SSL/TLS 请启用", "Enable live broadcasting to stream content like a real TV channel. This is optional - you can enable it later.": "启用直播功能,可以像真实电视频道一样传输内容。这是可选的,您可以稍后启用。", + "Enable Logo Proxy": "启用 Logo 代理", + "Enable Logo Repository endpoint": "启用 Logo 存储库端点", + "Enable Merge": "启用合并", "Enable merging by default": "默认启用合并", "Enable name filtering": "启用名称过滤", "Enable new Live channels": "启用新直播频道", - "Enable new VOD channels": "启用新 VOD 频道", "Enable new series": "启用新剧集", + "Enable new VOD channels": "启用新 VOD 频道", "Enable now": "立即启用", "Enable playlist fail conditions": "启用播放列表失败条件", + "Enable Plex Management": "启用 Plex 管理", + "Enable Probing": "启用侦测", + "Enable Provider Affinity": "启用提供商关联", + "Enable Provider Profiles": "启用提供商配置文件", "Enable request delay": "启用请求延迟", + "Enables audit log, custom rate limits, conversation history, and other management features for the AI Copilot assistant.": "为 AI 助手启用操作日志、自定义速率限制、对话历史记录及其他管理功能。", "Enable selected": "启用所选内容", "Enable silence detection": "启用无声检测", + "Enable Sticky Session Handler": "启用粘性会话处理程序", "Enable stream probing by default": "默认启用串流侦测", "Enable stream probing for the selected channels. They will be included in stream probing jobs.": "为所选频道启用串流侦测,它们将被包含在串流侦测任务中。", + "Enable Stream Proxy": "启用串流代理", + "Enable Strict Live TS Handling": "启用严格的实时 TS 处理", "Enable sync invalidation": "启用同步失效机制", + "Enable Sync Logs": "启用同步日志", "Enable the current category series now?": "立即启用当前分类的剧集吗?", "Enable the selected categories now?": "立即启用所选分类吗?", "Enable the selected category series now?": "立即启用所选分类的剧集吗?", @@ -659,57 +668,92 @@ "Enable this post process": "启用此后处理", "Enable to allow new stream requests to automatically stop the oldest stream when a playlist reaches its connection limit. Disabled by default.": "启用后,当播放列表达到连接限制时,当启动新的串流请求时自动停止最旧的串流。默认禁用。", "Enable to import additional program images (NOTE: this can significantly increase import time)": "启用以导入额外的节目图片(注:这会显著增加导入时间)", - "Enabled": "已启用", - "Enabled Channels": "已启用频道", - "Enabled Tools": "已启用工具", - "Enables audit log, custom rate limits, conversation history, and other management features for the AI Copilot assistant.": "为 AI 助手启用操作日志、自定义速率限制、对话历史记录及其他管理功能。", "Encoder Preset": "编码器预设", "English, Spanish, French, etc.": "英语、西班牙语、法语等", "Enhanced stability for live MPEG-TS streams with PVR clients like Kodi and HDHomeRun (only used when not using transcoding profiles).": "增强使用 Kodi 和 HDHomeRun 等 PVR 客户端的实时 MPEG-TS 流稳定性(仅在不使用转码配置文件时生效)。", - "Enter SMTP From Address": "输入 SMTP 发件人地址", - "Enter SMTP Host": "输入 SMTP 主机", - "Enter SMTP Password": "输入 SMTP 密码", - "Enter SMTP Port": "输入 SMTP 端口", - "Enter SMTP Username": "输入 SMTP 用户名", - "Enter To Email Address": "输入收件人电子邮件地址", - "Enter Token Name": "输入令牌名称", "Enter a group title": "输入分组标题", "Enter a name for the new API token, and select the permissions it should have. Permissions can be changed later.": "输入新 API 令牌的名称,并选择其应具备的权限。权限稍后可更改。", "Enter a number to define the sort order (e.g., 1, 2, 3). Lower numbers appear first.": "输入一个数字来定义排序顺序(如 1、2、3)。数字越小越靠前。", "Enter a path on your server. This reads files from the server directly, not from your browser.": "输入服务器路径。系统将直接读取服务器文件,而非通过浏览器读取。", + "Entered your desired locale - if you\\'re not sure what to put here, look at your EPG source. If you see entries like \"CHANNEL.en\", then \"en\" would be a good choice if you prefer english. This is used when mapping the EPG to a playlist. If the EPG has multiple locales, this will be used as the preferred locale when a direct match is not found.": "输入您所在的区域。如果不确定,请查看您的 EPG 源。如果您看到类似“CHANNEL.en”的条目,且您偏好英语,那么“en”是一个好选择。这用于将 EPG 映射到播放列表,当 EPG 包含多个区域设置且找不到直接匹配项时,将以此作为首选。", "Enter movie name...": "输入电影名称...", "Enter series name...": "输入剧集名称...", - "Enter the URL of the XMLTV guide data. If this is a local file, you can enter a full or relative path. If changing URL, the guide data will be re-imported. Use with caution as this could lead to data loss if the new guide differs from the old one.": "输入 XMLTV 指南数据的 URL。如果是本地文件,可以输入绝对路径或相对路径。更改 URL 将导致重新导入指南数据,请谨慎操作,因为新旧指南差异可能导致数据丢失。", - "Enter the URL of the playlist file. If this is a local file, you can enter a full or relative path. If changing URL, the playlist will be re-imported. Use with caution as this could lead to data loss if the new playlist differs from the old one.": "输入播放列表文件的 URL。如果是本地文件,可以输入绝对路径或相对路径。更改 URL 将导致重新导入播放列表,请谨慎操作,因为新旧列表差异可能导致数据丢失。", + "Enter SMTP From Address": "输入 SMTP 发件人地址", + "Enter SMTP Host": "输入 SMTP 主机", + "Enter SMTP Password": "输入 SMTP 密码", + "Enter SMTP Port": "输入 SMTP 端口", + "Enter SMTP Username": "输入 SMTP 用户名", "Enter the archive path on your server. This reads the file directly, not from your browser.": "输入服务器上的存档路径。系统将直接读取该文件。", "Enter the full url, using : format - without trailing slash (/).": "输入完整 URL,使用 : 格式 - 末尾不带斜杠 (/)。", - "Enter the name of the EPG. Internal use only.": "输入 EPG 名称。仅供内部使用。", "Enter the name of the alias. Internal use only.": "输入别名。仅供内部使用。", + "Enter the name of the EPG. Internal use only.": "输入 EPG 名称。仅供内部使用。", "Enter the name of the merged EPG. Internal use only.": "输入合并后的 EPG 名称。仅供内部使用。", "Enter the name of the playlist. Internal use only.": "输入播放列表名称。仅供内部使用。", + "Enter the URL of the playlist file. If this is a local file, you can enter a full or relative path. If changing URL, the playlist will be re-imported. Use with caution as this could lead to data loss if the new playlist differs from the old one.": "输入播放列表文件的 URL。如果是本地文件,可以输入绝对路径或相对路径。更改 URL 将导致重新导入播放列表,请谨慎操作,因为新旧列表差异可能导致数据丢失。", + "Enter the URL of the XMLTV guide data. If this is a local file, you can enter a full or relative path. If changing URL, the guide data will be re-imported. Use with caution as this could lead to data loss if the new guide differs from the old one.": "输入 XMLTV 指南数据的 URL。如果是本地文件,可以输入绝对路径或相对路径。更改 URL 将导致重新导入指南数据,请谨慎操作,因为新旧指南差异可能导致数据丢失。", + "Enter To Email Address": "输入收件人电子邮件地址", + "Enter Token Name": "输入令牌名称", "Enter words, symbols or prefixes to remove. Press Enter after each pattern.": "输入要删除的单词、符号或前缀。每个模式输入后按回车键。", "Enter your TMDB API Key (v3 auth)": "输入您的 TMDB API 密钥 (v3 认证)", - "Entered your desired locale - if you\\'re not sure what to put here, look at your EPG source. If you see entries like \"CHANNEL.en\", then \"en\" would be a good choice if you prefer english. This is used when mapping the EPG to a playlist. If the EPG has multiple locales, this will be used as the preferred locale when a direct match is not found.": "输入您所在的区域。如果不确定,请查看您的 EPG 源。如果您看到类似“CHANNEL.en”的条目,且您偏好英语,那么“en”是一个好选择。这用于将 EPG 映射到播放列表,当 EPG 包含多个区域设置且找不到直接匹配项时,将以此作为首选。", "Ep #": "剧集编号", + "EPG": "EPG", + "EPG Cache is being generated": "正在生成 EPG 缓存", + "EPG Cache is being generated for selected EPGs": "正在为选择的 EPG 生成缓存", + "EPG Cache is being generated in the background. You will be notified when complete.": "EPG 缓存正在后台生成,完成后将通知您。", + "EPG Cache is being generated in the background for the selected EPGs. You will be notified when complete.": "选定的 EPG 缓存正在后台生成,完成后将通知您。", + "EPG Channel": "EPG 频道", + "EPG Channel mapping removed": "EPG 频道映射已清除", + "EPG Channels": "EPG 频道", + "EPG data for your Networks": "虚拟频道 的 EPG 数据", + "EPG File Cache Cleared": "EPG 文件缓存已清除", + "EPG File Cache Not Found": "未找到 EPG 文件缓存", + "EPG Information": "EPG 信息", + "EPG is being processed in the background. Depending on the size of the guide data, this may take a while. You will be notified on completion.": "EPG 正在后台处理。根据指南数据的大小,可能需要一段时间,完成后将通知您。", + "EPG is being processed in the background. The view will update when complete.": "EPG 正在后台处理,完成后视图将自动更新。", + "EPG is mapped": "EPG 已映射", + "EPG is not mapped": "EPG 未映射", + "EPG is processing": "EPG 正在处理中", + "EPG Map": "EPG 映射关系", + "EPG map disabled for selected channels": "所选频道的 EPG 映射关系已禁用", + "EPG Mapped Channels": "已映射 EPG 的频道", + "EPG Mapper: Apply Mappings": "EPG 映射器:应用映射", + "EPG Mapper: Channel Matcher": "EPG 映射器:频道匹配器", + "EPG Mapper: Mapping State": "EPG 映射器:映射状态", + "EPG mapping restarted": "EPG 映射已重新启动", + "EPG mapping started": "EPG 映射已开始", + "EPG map re-enabled for selected channels": "所选频道已重新启用 EPG 映射关系", + "EPG Maps": "EPG 映射关系", + "EPG Output": "EPG 输出", + "EPG output options": "EPG 输出选项", + "EPGs": "EPG", + "EPG Settings": "EPG 设置", + "EPG Shift": "EPG 偏移", + "EPG Shift updated": "EPG 切换已更新", + "EPG Shift value": "EPG 移位值", + "EPG status has been reset.": "EPG 状态已重置。", + "EPG status reset": "EPG 状态重置", + "EPG to Channel mapping": "EPG 与频道的映射", + "EPG type": "EPG 类型", + "EPG URL": "EPG 网址", "Episode Details": "剧集详情", "Episode Image": "剧集图片", "Episode Metadata": "剧集元数据", "Episode Number": "集数", - "Episode Runtime": "剧集时长", - "Episode Title": "剧集标题", "Episode preview placeholder": "剧集预览占位符", + "Episode Runtime": "剧集时长", "Episode runtime in minutes.": "以分钟为单位的剧集时长。", "Episodes": "剧集", "Episodes added": "剧集已添加", "Episodes added successfully": "剧集已成功添加", + "Episode Title": "剧集标题", "Error": "错误", + "Errors": "错误", "Error Sending Test Email": "发送测试邮件时出错", "Error stopping stream.": "停止串流时出错。", "Error triggering failover.": "触发故障转移时出错。", - "Errors": "错误", "Etc/UTC": "Etc/UTC", - "Event Triggers": "事件触发器", "Events that automatically run this plugin in the background.": "在后台自动运行此插件的事件。", + "Event Triggers": "事件触发器", "Exact Match Distance": "精确匹配距离", "Exclude disabled groups from master selection": "从主频道选择中排除已禁用的分组", "Execution is now disabled until an administrator reviews and trusts this plugin again.": "在管理员重新审查并信任此插件前,执行已被禁用。", @@ -723,46 +767,54 @@ "Export channels to a CSV or XLSX file. NOTE: Only enabled channels will be exported.": "将频道导出为 CSV 或 XLSX 文件。注意:仅导出已启用的频道。", "Export name": "导出名称", "Export variables": "导出变量", - "FFmpeg Template": "FFmpeg 模板", "Failed": "失败", "Failed playlists cleared": "失败的播放列表已清除", - "Failed to Start": "启动失败", "Failed to add lineup": "添加频道方案失败", "Failed to apply TMDB selection.": "应用 TMDB 选择失败。", + "Failed to fetch lineups": "获取频道方案失败", "Failed to fetch TMDB data for this movie.": "获取该电影的 TMDB 数据失败。", "Failed to fetch TMDB data for this series.": "获取该剧集的 TMDB 数据失败。", - "Failed to fetch lineups": "获取频道方案失败", "Failed to refresh release logs": "刷新发布日志失败", + "Failed to Start": "启动失败", "Failover": "故障转移", "Failover & Recovery": "故障转移与恢复", "Failover Channel": "故障转移频道", "Failover Channels": "故障转移频道", + "Failover groups will be re-scored in the background. You can keep using the app while this runs.": "故障转移组将在后台重新评分。运行期间您可以继续使用该应用程序。", "Failover Playlist": "故障转移播放列表", + "Failover Ranking": "故障转移排名", + "Failover Rescoring": "故障转移重新评分", + "Failover rescoring queued": "故障转移重新评分已排队", "Failovers": "故障转移", + "Failovers ranked by score. Stored from the last merge or rescore — click \"Rescore now\" to recalculate against current stream stats.": "故障转移按分数排名。从上次合并或重新评分中存储 - 单击“立即重新评分”以根据当前流统计信息重新计算。", + "Failovers will be re-scored in the background. Refresh this page in a moment to see the updated ranking.": "故障转移将在后台重新评分。稍后刷新此页面即可查看更新后的排名。", "Fetch & Install": "获取并安装", "Fetch & Update": "获取并更新", - "Fetch IDs for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "获取所有已启用播放列表剧集的 ID 吗?如果禁用,则仅获取所选播放列表的剧集 ID。", - "Fetch IDs now": "立即获取 ID", - "Fetch Metadata": "获取元数据", - "Fetch Series Metadata": "获取剧集元数据", - "Fetch Series metadata for this playlist now? Only enabled Series will be included.": "立即获取此播放列表的剧集元数据吗?仅包含已启用的剧集。", - "Fetch TMDB IDs": "获取 TMDB ID", - "Fetch TMDB, TVDB, and IMDB IDs for this series from The Movie Database.": "从 TMDB 获取此剧集的 TMDB、TVDB 和 IMDB ID。", - "Fetch TMDB/TVDB IDs": "获取 TMDB/TVDB ID", - "Fetch VOD Metadata": "获取 VOD 元数据", - "Fetch VOD metadata for this playlist now? Only enabled VOD channels will be included.": "立即获取此播放列表的 VOD 元数据吗?仅包含已启用的 VOD 频道。", "Fetch and process VOD metadata for the group channels.": "获取并处理分组频道的 VOD 元数据。", - "Fetch and process VOD metadata for the selected Playlist? Only enabled VOD channels will be processed.": "获取并处理所选播放列表的 VOD 元数据吗?仅处理已启用的 VOD 频道。", "Fetch and process VOD metadata for the selected channel.": "获取并处理所选频道的 VOD 元数据。", "Fetch and process VOD metadata for the selected channels? Only enabled VOD channels will be processed.": "获取并处理所选频道的 VOD 元数据吗?仅处理已启用的 VOD 频道。", "Fetch and process VOD metadata for the selected group channels.": "获取并处理所选分组频道的 VOD 元数据。", + "Fetch and process VOD metadata for the selected Playlist? Only enabled VOD channels will be processed.": "获取并处理所选播放列表的 VOD 元数据吗?仅处理已启用的 VOD 频道。", "Fetch by category": "按分类获取", - "Fetch metadata": "获取元数据", - "Fetch metadata for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "获取所有已启用播放列表剧集的元数据吗?如果禁用,则仅获取所选播放列表的剧集元数据。", "Fetches episode metadata for enabled series after each sync. Required for stream file sync.": "每次同步后为已启用的剧集获取剧集元数据。这是同步流文件所必需的。", + "Fetch IDs for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "获取所有已启用播放列表剧集的 ID 吗?如果禁用,则仅获取所选播放列表的剧集 ID。", + "Fetch IDs now": "立即获取 ID", "Fetching VOD metadata for channel": "正在获取频道的 VOD 元数据", "Fetching VOD metadata for playlist": "正在获取播放列表的 VOD 元数据", "Fetching VOD metadata for selected group channels": "正在获取所选分组频道的 VOD 元数据", + "Fetch Metadata": "获取元数据", + "Fetch metadata": "获取元数据", + "Fetch metadata for all enabled Playlist Series? If disabled, it will only be fetched for Series of the selected Playlist.": "获取所有已启用播放列表剧集的元数据吗?如果禁用,则仅获取所选播放列表的剧集元数据。", + "Fetch Series Metadata": "获取剧集元数据", + "Fetch Series metadata for this playlist now? Only enabled Series will be included.": "立即获取此播放列表的剧集元数据吗?仅包含已启用的剧集。", + "Fetch TMDB, TVDB, and IMDB IDs for this series from The Movie Database.": "从 TMDB 获取此剧集的 TMDB、TVDB 和 IMDB ID。", + "Fetch TMDB/TVDB IDs": "获取 TMDB/TVDB ID", + "Fetch TMDB IDs": "获取 TMDB ID", + "Fetch VOD Metadata": "获取 VOD 元数据", + "Fetch VOD metadata for this playlist now? Only enabled VOD channels will be included.": "立即获取此播放列表的 VOD 元数据吗?仅包含已启用的 VOD 频道。", + "FFmpeg arguments for transcoding. Use placeholders like {crf|23} for configurable parameters with defaults. Hardware acceleration will be applied automatically by the proxy server.": "用于转码的 FFmpeg 参数。使用占位符(例如 {crf|23})作为具有默认值的可配置参数。代理服务器将自动应用硬件加速。", + "FFmpeg re-encodes the stream. Streamlink and yt-dlp extract and deliver streams directly from supported platforms (Twitch, YouTube, etc.) without re-encoding.": "FFmpeg 重新编码流。 Streamlink 和 yt-dlp 直接从支持的平台(Twitch、YouTube 等)提取和传输流,无需重新编码。", + "FFmpeg Template": "FFmpeg 模板", "Field": "字段", "Field to check condition against.": "用于检查条件的字段。", "File": "文件", @@ -772,42 +824,43 @@ "Filename metadata": "文件名元数据", "Files": "文件", "Files Changed": "文件已更改", - "Filter to a specific group within the playlist. Omit to show all groups.": "过滤到播放列表中的特定分组。省略则显示所有分组。", "Filters": "过滤器", + "Filter to a specific group within the playlist. Omit to show all groups.": "过滤到播放列表中的特定分组。省略则显示所有分组。", "Find & Replace": "查找与替换", - "Find & Replace Rules": "查找与替换规则", "Find & Replace reset started": "查找与替换重置已开始", "Find & Replace reset working in the background. You will be notified once the process is complete.": "查找与替换重置正在后台运行。过程完成后,您将收到通知。", + "Find & Replace Rules": "查找与替换规则", "Find & Replace started": "查找与替换已开始", "Find & Replace working in the background. You will be notified once the process is complete.": "查找与替换正在后台运行。过程完成后,您将收到通知。", "Finished": "已完成", "Focus run": "重点运行", - "Force Sync Channels": "强制同步频道", "Force complete re-merge": "强制完全重新合并", "Force password change on next login": "下次登录时强制更改密码", + "Force Sync Channels": "强制同步频道", "Format": "格式", "Format applied to dates throughout the application (e.g. next sync, last synced).": "应用于整个应用程序中日期的格式(例如下次同步、上次同步)。", + "Format Selector & Options": "格式选择器和选项", "Found and loaded :count plugin(s).": "已找到并加载了 :count 个插件。", "Frame rate": "帧率", "From the selected channels": "来自所选频道", "Full cast information.": "完整演职员信息。", - "GET/POST variables": "GET/POST 变量", "Gap Between Programmes": "节目间隙", "General": "常规", "General Settings": "常规设置", "Generate": "生成", + "Generate a new plugin scaffold with all the files you need to get started.": "生成包含入门所需全部文件的新插件脚手架。", "Generate Cache": "生成缓存", "Generate Default Profiles": "生成默认配置文件", "Generate EPG Cache now? This will create a cache for the EPG data.": "立即生成 EPG 缓存吗?这将为 EPG 数据创建缓存。", "Generate NFO files": "生成 NFO 文件", - "Generate Schedule": "生成计划表", - "Generate Schedules": "生成计划表", - "Generate a new plugin scaffold with all the files you need to get started.": "生成包含入门所需全部文件的新插件脚手架。", "Generate only plugin.json and Plugin.php — skip README, CI workflow, scripts, and AI guidance files.": "仅生成 plugin.json 和 Plugin.php —— 跳过 README、CI 工作流、脚本和 AI 指导文件。", "Generates .strm files for enabled series after metadata fetch completes. Requires \"Fetch metadata\" to be enabled.": "元数据获取完成后,为已启用的剧集生成 .strm 文件。需要启用“获取元数据”。", + "Generate Schedule": "生成计划表", + "Generate Schedules": "生成计划表", "Genre": "类型", "Genre Handling": "类型处理", "Genre of the content.": "内容的类型。", + "GET/POST variables": "GET/POST 变量", "Get API Key": "获取 API 密钥", "Get Available Tools": "获取可用工具", "Get from playlist status": "从播放列表状态获取", @@ -819,44 +872,40 @@ "Global Tools": "全局工具", "Gracenote station ID": "Gracenote 频道 ID", "Group": "分组", + "group-title": "分组标题", "Group Assignment": "分组分配", - "Group Details": "分组详情", - "Group Name": "分组名称", - "Group Priority Weights": "分组优先级权重", - "Group Settings": "分组设置", "Group channels added to custom playlist": "分组频道已添加到自定义播放列表", "Group channels disabled": "分组频道已禁用", "Group channels enabled": "分组频道已启用", "Group created": "分组已创建", + "Group Details": "分组详情", + "Group Name": "分组名称", "Group name used in the M3U playlist. Defaults to \"Networks\" if left empty.": "M3U 播放列表中使用的分组名称。留空则默认为“Networks”。", + "Group Priority Weights": "分组优先级权重", "Groups": "分组", "Groups and Streams to Import": "要导入的分组和串流", + "Group Settings": "分组设置", "Groups only": "仅限分组", "Guide Refreshed": "指南已刷新", - "HDHR Base URL": "HDHR 基础 URL", - "HDHR/Xtream API Streams": "HDHR/Xtream API 串流", - "HDHomeRun URL": "HDHomeRun URL", - "HLS Playlist URL": "HLS 播放列表 URL", - "HLS provides better compatibility": "HLS 提供更好的兼容性", - "HLS segment length (6s recommended)": "HLS 分片长度(建议 6 秒)", - "HTTP Headers (optional)": "HTTP 请求头(可选)", - "HTTP Port": "HTTP 端口", - "HTTP response codes that should mark a playlist as temporarily unavailable. All channels from the affected playlist will be skipped during failover resolution.": "应将播放列表标记为暂时不可用的 HTTP 响应代码。在故障转移解析期间,受影响播放列表中的所有频道将被跳过。", - "HTTP status codes": "HTTP 状态码", - "HTTPS Port": "HTTPS 端口", "Hardware Acceleration": "硬件加速", + "Has metadata": "有元数据", "Has TMDB/IMDB ID": "有 TMDB/IMDB ID", "Has TMDB/TVDB/IMDB ID": "有 TMDB/TVDB/IMDB ID", - "Has metadata": "有元数据", + "HDHomeRun URL": "HDHomeRun URL", + "HDHR/Xtream API Streams": "HDHR/Xtream API 串流", + "HDHR Base URL": "HDHR 基础 URL", "Header": "请求头", "Header name": "请求头名称", - "Header value": "请求头值", "Headers": "请求头", + "Header value": "请求头值", "Healthy": "状态良好", "Help support this project by donating! Any amount is appreciated.": "点点关注不迷路,👉一键三连带我恰饭!每一份支持都是我们持续发电的动力", "High-Risk Permissions": "高风险权限", "Higher weight = more likely to appear when shuffling": "权重越高随机播放时出现的概率越大", "Hint for proxy to enable hardware acceleration if available": "提示代理启用硬件加速(如果可用)", + "HLS Playlist URL": "HLS 播放列表 URL", + "HLS provides better compatibility": "HLS 提供更好的兼容性", + "HLS segment length (6s recommended)": "HLS 分片长度(建议 6 秒)", "Hooks": "自动触发", "Host / IP Address": "主机 / IP 地址", "How content is ordered in the schedule. Manual lets you place items on a visual timeline.": "内容在计划表中的排序方式。“手动”模式允许您在时间轴上放置项目。", @@ -868,13 +917,20 @@ "How the manual schedule repeats across the schedule window": "手动计划如何在计划窗口中重复", "How to handle content with multiple genres": "如何处理包含多种类型的内容", "How you would like to ID your channels in the EPG.": "您希望如何在 EPG 中标识您的频道。", - "I understand, clear now": "我明白,立即清除", - "I understand, reset now": "我明白,立即重置", - "ID": "ID", - "IMDB ID": "IMDB ID", - "ISO country code for the DVR guide (e.g. us, de, gb).": "DVR 指南的 ISO 国家代码(例如 us、de、gb)。", - "ISO language code for the DVR guide (e.g. en, de, fr).": "DVR 指南的 ISO 语言代码(例如 en、de、fr)。", + "http://192.168.0.123:36400": "http://192.168.0.123:36400", + "HTTP Headers (optional)": "HTTP 请求头(可选)", + "HTTP Port": "HTTP 端口", + "HTTP response codes that should mark a playlist as temporarily unavailable. All channels from the affected playlist will be skipped during failover resolution.": "应将播放列表标记为暂时不可用的 HTTP 响应代码。在故障转移解析期间,受影响播放列表中的所有频道将被跳过。", + "https://example.com/backdrop.jpg": "https://example.com/backdrop.jpg", + "https://example.com/cover.jpg": "https://example.com/cover.jpg", + "https://example.com/logo.png": "https://example.com/logo.png", + "https://example.com/poster.jpg": "https://example.com/poster.jpg", + "https://www.kinopoisk.ru/film/123456/": "https://www.kinopoisk.ru/film/123456/", + "https://www.youtube.com/watch?v=abc123": "https://www.youtube.com/watch?v=abc123", + "HTTPS Port": "HTTPS 端口", + "HTTP status codes": "HTTP 状态码", "Icon": "图标", + "ID": "ID", "Idle Streams": "空闲流", "If enabled, all series in the selected category will be imported. Use with caution as this will make a lot of requests to your provider to fetch metadata and episodes. It is recomended to import only the series you want to watch. You can also enable the series option on your playlist under the \"Groups and Streams to Import\" to import all the base data for all available series.": "如果启用,将导入所选分类中的所有剧集。请谨慎使用,因为这会向您的提供商发起大量请求以获取元数据和剧集。建议仅导入您想观看的剧集。您也可以在播放列表的“要导入的分组和串流”下启用剧集选项,以导入所有可用剧集的基础数据。", "If enabled, the User Agent will also be used for fetching playlist files. Otherwise, the default FFmpeg User Agent is used for playlists.": "如果启用,User Agent(用户代理)也将用于获取播放列表文件。否则,将使用默认的 FFmpeg User Agent。", @@ -886,41 +942,42 @@ "If you have MediaFlow Proxy installed, you can use it to proxy your m3u editor playlist streams. When enabled, the app will auto-generate URLs for you to use via MediaFlow Proxy.": "如果您安装了 MediaFlow Proxy,可以用它来代理 M3U Editor 播放列表流。启用后,应用将自动生成通过 MediaFlow Proxy 使用的 URL。", "If your provider supports EPG, you can import it automatically.": "如果您的提供商支持 EPG,您可以自动导入。", "Ignored file types": "忽略的文件类型", - "Image URL": "图片 URL", "Images only": "仅图片", + "Image URL": "图片 URL", + "IMDB ID": "IMDB ID", "Img": "图片", "Implementation": "实现", - "Import Metadata": "导入元数据", "Import All Series": "导入全部剧集", "Import Channels": "导入频道", + "Import channels from a CSV or XLSX file.": "从 CSV 或 XLSX 文件导入频道。", "Import EPG": "导入 EPG", + "Import Metadata": "导入元数据", "Import Movies": "导入电影", "Import Series": "导入剧集", "Import Series Episodes & Metadata": "导入剧集及元数据", "Import Settings": "导入设置", - "Import channels from a CSV or XLSX file.": "从 CSV 或 XLSX 文件导入频道。", "In-App Player Transcoding": "应用内播放器转码", "Include Files": "包含文件", - "Include Metadata": "包含元数据", - "Include VOD": "包含 VOD", - "Include VOD channels in the scrub.": "在检测中包含 VOD 频道。", - "Include VOD in M3U output": "在 M3U 输出中包含 VOD", "Include lifecycle hook": "包含生命周期触发", "Include logos in proxy URL override": "在代理 URL 覆盖中包含 Logo", + "Include Metadata": "包含元数据", "Include series in M3U output": "在 M3U 输出中包含剧集", "Includes VOD": "包含 VOD", + "Include VOD": "包含 VOD", + "Include VOD channels in the scrub.": "在检测中包含 VOD 频道。", + "Include VOD in M3U output": "在 M3U 输出中包含 VOD", "Indicates the shift of the program schedule, use the values -2,-1,0,1,2,.. and so on.": "表示节目的时间偏移,请使用值 -2, -1, 0, 1, 2... 等。", "Info": "信息", "Information about the last sync operation": "关于上次同步操作的信息", "Input Stream Format": "输入流格式", "Install": "安装", "Install And Trust": "安装并信任", - "Install failed": "安装失败", - "Install latest release from GitHub": "从 GitHub 安装最新版本", "Installed": "已安装", "Installed Plugins": "已安装插件", "Installed plugins that passed validation, are trusted, and haven't been modified.": "已通过验证、受信任且未被修改的已安装插件。", "Installed plugins with a newer version available on GitHub.": "在 GitHub 上有更新版本的已安装插件。", + "Install failed": "安装失败", + "Install latest release from GitHub": "从 GitHub 安装最新版本", "Installs": "安装量", "Integration EPG URL": "集成 EPG URL", "Integration Playlist URL": "集成播放列表 URL", @@ -931,18 +988,23 @@ "Invalid Time": "无效时间", "Invalid timeout (minutes)": "无效超时(分钟)", "Invocation": "调用", + "ISO country code for the DVR guide (e.g. us, de, gb).": "DVR 指南的 ISO 国家代码(例如 us、de、gb)。", + "ISO language code for the DVR guide (e.g. en, de, fr).": "DVR 指南的 ISO 语言代码(例如 en、de、fr)。", "Item Details": "项目详情", - "Item Name": "项目名称", "Item is added": "项目已添加", "Item is removed": "项目已移除", - "Item type": "项目类型", + "Item Name": "项目名称", "Items": "项目", "Items per page (default: 15, max: 50)": "每页项目数(默认:15,最大:50)", - "JSON object containing key-value pairs for an update action.": "包含键值对的 JSON 对象,用于更新操作。", + "Item type": "项目类型", + "I understand, clear now": "我明白,立即清除", + "I understand, reset now": "我明白,立即重置", "Jellyfin": "Jellyfin", "John Doe, Jane Smith": "约翰·多伊 (John Doe)、简·史密斯 (Jane Smith)", "Join us on Discord": "加入我们的 Discord", + "JSON object containing key-value pairs for an update action.": "包含键值对的 JSON 对象,用于更新操作。", "Keep cache permanently (disable expiry cleanup)": "永久保留缓存(禁用过期清理)", + "Keeps failover ordering in sync with current stream quality. Affects three places: scheduled rescoring (the interval below), the per-channel \"Rescore now\" action, and the \"Make smart channel\" bulk action. The Priority Order under Auto-Merge above is reused for the actual scoring in all three.": "使故障转移顺序与当前流质量保持同步。影响三个地方:计划重新评分(下面的间隔)、每个通道的“立即重新评分”操作和“创建智能通道”批量操作。上面自动合并下的优先顺序将重新用于所有三个项目的实际评分。", "Kinopoisk Rating Count": "Kinopoisk 评分人数", "Kinopoisk URL": "Kinopoisk URL", "Label": "标签", @@ -950,17 +1012,17 @@ "Language Code": "语言代码", "Last Channels Checked": "上次检查的频道数", "Last Dead Links": "上次检测到的失效链接", - "Last Ran": "上次运行时间", - "Last Runtime": "上次运行耗时", - "Last Sync Stats": "上次同步统计", - "Last Synced": "上次同步时间", - "Last Watched": "上次观看", "Last heartbeat": "上次心跳时间", - "Last probe returned no data — the stream may have been unreachable.": "上次探测未返回任何数据 - 流可能无法访问。", "Last probed": "最后探测", + "Last probe returned no data — the stream may have been unreachable.": "上次探测未返回任何数据 - 流可能无法访问。", + "Last Ran": "上次运行时间", "Last ran": "上次运行", + "Last Runtime": "上次运行耗时", "Last sync :date": "上次同步 :date", + "Last Synced": "上次同步时间", + "Last Sync Stats": "上次同步统计", "Last validation": "上次验证", + "Last Watched": "上次观看", "Latest persisted log messages for this run.": "本次运行的最新持久化日志消息。", "Latest version: :version": "最新版本::version", "Layout & Display Options": "布局与显示选项", @@ -969,18 +1031,19 @@ "Leave blank to keep the current password": "留空以保留当前密码", "Leave blank to use the same provider as the primary account.": "留空则使用与主账户相同的提供商。", "Leave empty for direct stream proxying": "留空则进行直接串流代理", - "Leave empty to disable .strm file generation for VOD. Priority: VOD > Group > Global.": "留空则禁用 VOD 的 .strm 文件生成。优先级:VOD > 分组 > 全局。", + "Leave empty to copy the highest-scoring source's title.": "留空以复制得分最高的来源的标题。", "Leave empty to disable .strm file generation for series. Priority: Series > Category > Global.": "留空则禁用剧集的 .strm 文件生成。优先级:剧集 > 分类 > 全局。", + "Leave empty to disable .strm file generation for VOD. Priority: VOD > Group > Global.": "留空则禁用 VOD 的 .strm 文件生成。优先级:VOD > 分组 > 全局。", "Leave empty to remove": "留空则清除", "Leave empty to remove custom poster URL and use placeholder fallback.": "留空则清除自定义海报 URL 并回退到占位符。", "Leave empty to remove the custom logo and use provider/EPG logo.": "留空则清除自定义 Logo 并使用提供商/EPG 图标。", "Leave empty to remove the logo.": "留空则清除 Logo。", "Leave empty to use default value.": "留空则使用默认值。", - "Leave empty to use provider URL.": "留空则使用提供商 URL。", "Leave empty to use provider display name.": "留空则使用提供商显示名称。", "Leave empty to use provider icon.": "留空则使用提供商图标。", "Leave empty to use provider logo.": "留空则使用提供商 Logo。", "Leave empty to use provider name.": "留空则使用提供商名称。", + "Leave empty to use provider URL.": "留空则使用提供商 URL。", "Leave empty to use the default.": "留空则使用默认值。", "Level": "等级", "Libraries": "媒体库", @@ -989,23 +1052,25 @@ "Libraries to Import": "导入的媒体库", "Library Name": "媒体库名称", "Library Selection": "媒体库选择", + "libx264": "libx264", "Lifecycle": "生命周期", "Lineup": "频道方案", "Lineup added successfully!": "频道方案添加成功!", "Links": "链接", + "List of allowed domains (supports wildcards, e.g. *.example.com*). Press [tab] or [return] to add item. When set, playlist URLs must match one of these patterns.": "允许的域名列表(支持通配符,例如 *.example.com*)。按 [Tab] 或 [回车] 添加。设置后,播放列表 URL 必须匹配其中一个模式。", "List Pages": "列表页", "List Resources": "资源列表", "List Widgets": "小部件列表", - "List of allowed domains (supports wildcards, e.g. *.example.com*). Press [tab] or [return] to add item. When set, playlist URLs must match one of these patterns.": "允许的域名列表(支持通配符,例如 *.example.com*)。按 [Tab] 或 [回车] 添加。设置后,播放列表 URL 必须匹配其中一个模式。", "Live": "直播", "Live Activity Feed": "直播活动摘要", + "Live channel groups": "直播频道组", + "Live channel processing": "直播频道处理", "Live Channels": "直播频道", + "Live groups to import": "要导入的直播分组", + "Live streaming (optional)": "直播串流(可选)", "Live Streaming Profile": "直播流配置", "Live Sync": "直播同步", "Live TV": "直播电视", - "Live channel processing": "直播频道处理", - "Live groups to import": "要导入的直播分组", - "Live streaming (optional)": "直播串流(可选)", "Load Avg": "平均负载值", "Load saved pattern": "加载已保存的模式", "Local": "本地", @@ -1019,154 +1084,146 @@ "Login as this user": "以此用户身份登录", "Logo": "Logo", "Logo Cache": "Logo 缓存", - "Logo Override": "Logo 覆盖", - "Logo URL": "Logo URL", "Logo cache cleared": "Logo 缓存已清除", "Logo image": "Logo 图片", - "Logo override URL": "Logo 覆盖 URL", + "Logo Override": "Logo 覆盖", "Logo override updated": "Logo 覆盖已更新", + "Logo override URL": "Logo 覆盖 URL", "Logo placeholder": "Logo 占位符", "Logo repository refreshed": "Logo 仓库已刷新", "Logo updated": "Logo 已更新", + "Logo URL": "Logo URL", "Loop Content": "循环内容", "Lower = tried first": "数字越小越优先", "M3U": "M3U", + "m3u editor proxy url.": "M3U Editor 代理 URL。", + "M3U playlist containing all your Networks as live channels": "包含您所有虚拟频道 作为直播频道的 M3U 播放列表", "M3U Playlist URL": "M3U 播放列表 URL", "M3U Proxy Stream Monitor": "M3U 代理串流监视器", "M3U URL": "M3U URL", - "M3U playlist containing all your Networks as live channels": "包含您所有虚拟频道 作为直播频道的 M3U 播放列表", - "MPAA Rating": "MPAA 分级", - "MPAA rating classification.": "MPAA 评级分类。", "Main actors in the content.": "内容中的主要演员。", "Make log files viewable": "使日志文件可见", + "Make smart channel": "打造智慧渠道", "Manage": "管理", "Manage API Tokens": "管理 API 令牌", "Manage Assets": "管理资源", "Manage Backups": "管理备份", - "Manage Plex libraries and trigger scans.": "管理 Plex 库并触发扫描。", - "Manage Profiles": "管理配置文件", - "Manage Stream File Settings": "管理流文件设置", - "Manage VOD groups.": "管理 VOD 分组。", "Manage cached logos and uploaded media assets. Placeholder images can be updated in Settings > Assets.": "管理缓存的 Logo 和上传的媒体资源。占位图可以在“设置 > 资源”中更新。", "Manage installed plugins, review new installs, and check security status from one place.": "在一个地方统一管理已安装的插件、审查新安装并检查安全状态。", "Manage live groups.": "管理直播分组。", "Manage logo cache behavior and storage used by logo proxy URLs.": "管理 Logo 缓存策略及代理 URL 所占用的存储空间。", "Manage playlist links and URL options.": "管理播放列表链接和 URL 选项。", + "Manage Plex libraries and trigger scans.": "管理 Plex 库并触发扫描。", + "Manage Profiles": "管理配置文件", "Manage series categories. Only enabled series will be automatically updated on Playlist sync, this includes fetching episodes and metadata. You can also manually sync series to update episodes and metadata.": "管理剧集分类。只有启用的剧集才会在播放列表同步时自动更新,包括获取剧集内容和元数据。您也可以手动同步剧集以更新内容。", + "Manages M3U playlists, including live streams, VOD, and series. Supports Xtream API.": "管理 M3U 播放列表,包括直播流、VOD 和剧集。支持 Xtream API。", + "Manage Stream File Settings": "管理流文件设置", "Manage users that can access and use the application. Each user will have their own playlists, channels, series, and other resources. Some features may be restricted based on user roles (such as global settings).": "管理可访问和使用该应用的用户。每个用户都拥有独立的播放列表、频道、剧集和其他资源。某些功能(如全局设置)可能会根据用户角色受限。", + "Manage VOD groups.": "管理 VOD 分组。", "Manage your API tokens. Tokens allow you to authenticate API requests for certain API actions.": "管理您的 API 令牌。令牌允许您为特定的 API 操作进行身份验证。", "Manage your Plex server directly from m3u-editor — register DVR tuners, monitor sessions, and control libraries.": "直接在 M3U Editor 中管理您的 Plex 服务器 —— 注册 DVR 调谐器、监视会话并控制媒体库。", - "Manages M3U playlists, including live streams, VOD, and series. Supports Xtream API.": "管理 M3U 播放列表,包括直播流、VOD 和剧集。支持 Xtream API。", "Manual": "手动", - "Manual TMDB Search": "手动 TMDB 搜索", - "Manual actions available from the page header.": "可从导航栏执行的手动操作。", "Manual actions, hook-triggered automation, and scheduled jobs. Open a run to inspect payload, metrics, and live activity.": "支持手动操作、钩子触发的自动化以及计划任务。点击具体的运行记录,即可查看详细的请求参数、运行参数和实时活动状态。", + "Manual actions available from the page header.": "可从导航栏执行的手动操作。", "Manually restart this EPG mapping? This will restart the existing mapping process.": "手动重启此 EPG 映射吗?这将重新启动现有的映射进程。", "Manually trigger this EPG mapping to run again. This will not modify the \"Recurring\" setting.": "手动触发此 EPG 映射。这不会修改“周期性”设置。", "Manually trigger this scrubber to run.": "手动触发此链接清理工具运行。", + "Manual TMDB Search": "手动 TMDB 搜索", "Map EPG to Playlist": "将 EPG 映射到播放列表", "Map EPG to selected": "将 EPG 映射到所选内容", "Map now": "立即映射", - "Map the selected EPG to the selected Playlist channels.": "将选定的 EPG 映射到选定的播放列表频道。", - "Map the selected EPG to the selected channel(s).": "将选定的 EPG 映射到选定的频道。", "Mapping": "映射", "Mapping Enabled": "映射已启用", "Mapping started, you will be notified when the process is complete.": "映射已开始,过程完成后您将收到通知。", + "Map the selected EPG to the selected channel(s).": "将选定的 EPG 映射到选定的频道。", + "Map the selected EPG to the selected Playlist channels.": "将选定的 EPG 映射到选定的播放列表频道。", "Mark playlists as temporarily unavailable when specific HTTP errors are encountered during failover.": "在故障转移期间遇到特定的 HTTP 错误时,将播放列表标记为暂时不可用。", "Match Confidence Threshold (%)": "匹配置信度阈值 (%)", "Matching Thresholds": "匹配阈值", "Max Backups": "最大备份数", "Max Concurrent Players": "最大并发播放器数", - "Max Streams": "最大流数量", "Max concurrent requests": "最大并发请求数", - "Max width of the page content": "页面内容最大宽度", + "Maximum distance for exact matches. Lower = stricter exact matching. Default: 8": "精确匹配的最大距离。越低表示精确匹配越严格。默认值:8", "Maximum Fuzzy Distance": "最大模糊匹配距离", "Maximum Levenshtein distance allowed for fuzzy matching. Lower = stricter matching. Default: 25": "模糊匹配允许的最大编辑距离 (Levenshtein distance)。越低表示匹配越严格。默认值:25", - "Maximum TMDB API requests per second. TMDB allows ~40 req/s for free accounts.": "每秒最大 TMDB API 请求数。TMDB 免费账户允许约 40 次请求/秒。", - "Maximum distance for exact matches. Lower = stricter exact matching. Default: 8": "精确匹配的最大距离。越低表示精确匹配越严格。默认值:8", "Maximum number of players that can be open at once.": "一次可同时打开的最大播放器数量。", "Maximum number of simultaneous requests allowed. Also controls the level of parallelism for batch operations such as stream probing and channel scrubbing.": "允许的最大同时请求数。同时控制批处理操作(如流探测和频道清理)的并行级别。", "Maximum number of simultaneous requests to the provider.": "向提供商同时发出的最大请求数。", "Maximum proxy streams allowed. Applies regardless of Provider Profiles — set to 0 for unlimited. When Provider Profiles are enabled, this is the authoritative proxy-level limit while provider limits control routing.": "允许的最大代理流数量。无论是否启用提供商配置文件均适用 —— 设置为 0 表示不限制。启用提供商配置文件后,此项为代理层级的最高限制,而各提供商限制则负责控制路由。", "Maximum results to return (default: 10, max: 50)": "返回的最大结果数(默认:10,最大:50)", + "Maximum TMDB API requests per second. TMDB allows ~40 req/s for free accounts.": "每秒最大 TMDB API 请求数。TMDB 免费账户允许约 40 次请求/秒。", + "Max Streams": "最大流数量", + "Max width of the page content": "页面内容最大宽度", + "MediaFlow Proxy": "MediaFlow Proxy", "Media Library Paths": "媒体库路径", "Media Server": "媒体库", "Media Server Library Refresh": "媒体库刷新", "Media Servers": "媒体库", "Media server status has been reset.": "媒体库状态已重置。", "Media server status reset": "媒体库状态重置", - "MediaFlow Proxy": "MediaFlow Proxy", "Memory": "内存", "Memory Usage": "内存使用率", - "Merge Enabled": "合并已启用", "Merge behavior": "合并行为", - "Merge disabled for selected channels": "所选频道已禁用合并", - "Merge only new channels": "仅合并新频道", - "Merge re-enabled for selected channels": "所选频道已重新启用合并", - "Merge source configuration": "合并源配置", "Merged EPG": "合并后的 EPG", "Merged EPG is being processed in the background. You will be notified on completion.": "合并后的 EPG 正在后台处理,完成后将通知您。", "Merged EPG is processing": "合并后的 EPG 正在处理中", "Merged EPGs": "合并后的 EPG", + "Merge disabled for selected channels": "所选频道已禁用合并", "Merged Playlist": "合并后的播放列表", "Merged Playlists": "合并后的播放列表", - "Merging channels in the background for this group only. You will be notified once the process is complete.": "正在后台仅为此分组执行频道合并,完成后将通知您。", + "Merge Enabled": "合并已启用", + "Merge only new channels": "仅合并新频道", + "Merge re-enabled for selected channels": "所选频道已重新启用合并", + "Merge source configuration": "合并源配置", "Merging channels in the background. You will be notified once the process is complete.": "正在后台合并频道,完成后将通知您。", + "Merging channels in the background for this group only. You will be notified once the process is complete.": "正在后台仅为此分组执行频道合并,完成后将通知您。", "Message": "消息", "Metadata": "元数据", "Metadata Source": "元数据源", "Method": "方法", - "Minimum Similarity (%)": "最小相似度 (%)", "Minimum continuous silence within a check window to count as a silent check. Default: 3 seconds.": "检查窗口内计为无声检查的最小连续无声时长。默认值:3 秒。", + "Minimum delay between provider requests, in milliseconds.": "提供程序请求之间的最短延迟(以毫秒为单位)。", + "Minimum Similarity (%)": "最小相似度 (%)", "Minimum similarity percentage required for a match (0-100). Higher = stricter matching. Default: 70%": "匹配所需的最小相似度百分比 (0-100)。越高表示匹配越严格。默认值:70%", "Minimum title similarity percentage (50-100) required to accept a match. Higher values = stricter matching.": "接受匹配所需的最低标题相似度百分比 (50-100)。值越高表示匹配越严格。", + "Missing checksum": "缺少校验和", "Missing Credentials": "缺少凭据", + "Missing credentials": "缺少凭据", "Missing Files": "文件丢失", + "Missing information": "缺少信息", "Missing SMTP Fields": "缺少 SMTP 字段", "Missing TMDB/IMDB ID": "缺少 TMDB/IMDB ID", "Missing TMDB/TVDB/IMDB ID": "缺少 TMDB/TVDB/IMDB ID", "Missing URL": "缺少 URL", - "Missing checksum": "缺少校验和", - "Missing credentials": "缺少凭据", - "Missing information": "缺少信息", + "Mixed playlists not supported": "不支持混合播放列表", "Mode": "模式", "Model": "模型", "Modified": "已修改", "Monitoring grace period (seconds)": "监控宽限期(秒)", "Move Channels to Group": "将频道移至分组", - "Move Series to Category": "将剧集移至分类", "Move now": "立即移动", + "Move Series to Category": "将剧集移至分类", "Move the category series to another category.": "将该分类的剧集移动到另一个分类。", "Move the group channels to the another group.": "将该分组的频道移动到另一个分组。", - "Move the selected VOD(s) to the chosen group.": "将选定的 VOD 移动到所选分组。", "Move the selected channel(s) to the chosen group.": "将选定的频道移动到所选分组。", + "Move the selected VOD(s) to the chosen group.": "将选定的 VOD 移动到所选分组。", "Move the series to another category.": "将该剧集移动到另一个分类。", "Move to Group": "移至分组", "Movie": "电影", "Movie Image": "电影图片", - "Movie Sync": "电影同步", - "Movie Title": "电影名称", "Movies": "电影", "Movies added": "电影已添加", "Movies added successfully": "电影已成功添加", + "Movie Sync": "电影同步", + "Movie Title": "电影名称", + "mp4": "mp4", + "MPAA Rating": "MPAA 分级", + "MPAA rating classification.": "MPAA 评级分类。", "My Awesome Plugin": "我的超赞插件", - "NFO File Generation": "NFO 文件生成", - "NOTE: Custom VOD need to be associated with a Playlist or Custom Playlist.": "注意:自定义 VOD 需要与播放列表或自定义播放列表关联。", - "NOTE: Custom channels need to be associated with a Playlist or Custom Playlist.": "注意:自定义频道需要与播放列表或自定义播放列表关联。", - "NOTE: If the list is empty, sync the playlist and check again once complete.": "注意:如果列表为空,请同步播放列表并在完成后再次检查。", - "NOTE: Only properly formatted backups will be accepted. If the backup is not valid, you will receive an error when attempting to restore.": "注意:仅接受格式正确的备份。如果备份无效,尝试恢复时将报错。", - "NOTE: Only the database will be restored, which will overwrite any existing data with the backup data. Files will not be automatically restored, you will need to manually re-upload them where needed.": "注意:仅恢复数据库,这会使用备份数据覆盖任何现有数据。文件不会自动恢复,您需要根据需要手动重新上传。", - "NOTE: Playlist channel output order is based on: 1 Sort order, 2 Channel no. and 3 Channel title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "注意:播放列表频道输出顺序依次基于:1. 排序序号,2. 频道号,3. 频道标题。您也可以将播放列表输出设置为自动排序,这将根据列表顺序定义排序序号。", - "NOTE: Playlist series can be managed in the Series section. You will need to enabled the VOD channels and Series you wish to import metadata for as it will only be imported for enabled channels and series.": "注意:播放列表剧集可以在“剧集”部分进行管理。您需要启用想要导入元数据的 VOD 频道和剧集,系统仅会为已启用的项导入元数据。", - "NOTE: Restoring a backup will overwrite any existing data. Your manually uploaded EPG and Playlist files will NOT be restored. You will need to download the backup and manually re-upload where needed.": "注意:恢复备份将覆盖现有数据。手动上传的 EPG 和播放列表文件**不会**被恢复。您需要下载备份并在需要时手动重新上传。", - "NOTE: VOD output order is based on: 1 Sort order, 2 Channel no. and 3 Title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "注意:VOD 输出顺序依次基于:1. 排序序号,2. 频道号,3. 标题。您也可以将播放列表输出设置为自动排序,这将根据列表顺序定义排序序号。", - "NOTE: When enabled, proxy mode is required for accurate connection tracking.": "注意:启用后,需要使用代理模式才能进行准确的连接跟踪。", - "NOTE: When restoring a backup, only the database will be restored, files will not be automatically restored. You will need to manually re-upload them where needed.": "注意:恢复备份时仅恢复数据库,文件不会自动恢复。您需要根据需要手动重新上传。", - "NOTE: You will need to re-sync your playlist, or wait for the next scheduled sync, if changing this. This will overwrite any existing channel sort order customization for this playlist.": "注意:如果更改此项,您需要重新同步播放列表或等待下次计划同步。这将覆盖该播放列表所有现有的频道排序自定义设置。", "Name": "名称", - "Name Filtering": "名称过滤", "Name and branding": "名称与标识", "Name and describe your plugin": "命名并描述您的插件", + "Name Filtering": "名称过滤", "Name of the HTTP header.": "HTTP 请求头名称。", "Name of the variable to send as GET/POST variable to your webhook URL.": "作为 GET/POST 变量发送到 Webhook URL 的变量名称。", "Navigation position": "导航位置", @@ -1176,38 +1233,40 @@ "Network Name": "虚拟频道名称", "Networks": "虚拟频道", "Networks (Pseudo-Live Channels)": "虚拟频道 (伪直播频道)", + "Networks are pseudo-TV channels built from media server content (Jellyfin/Emby/etc.) You can create M3U playlists and stream them to your IPTV apps and devices. A media server is required to use networks.": "虚拟频道是基于媒体库内容(Jellyfin/Emby 等)构建的伪电视频道。您可以创建 M3U 播放列表并将其推送到您的 IPTV 应用和设备。使用此功能需要媒体服务器。", "Networks EPG URL": "虚拟频道 EPG URL", "Networks Playlist URL": "虚拟频道播放列表 URL", - "Networks are pseudo-TV channels built from media server content (Jellyfin/Emby/etc.) You can create M3U playlists and stream them to your IPTV apps and devices. A media server is required to use networks.": "虚拟频道是基于媒体库内容(Jellyfin/Emby 等)构建的伪电视频道。您可以创建 M3U 播放列表并将其推送到您的 IPTV 应用和设备。使用此功能需要媒体服务器。", - "Networks pull VOD content from the linked media server.": "虚拟频道会自动从已关联的媒体服务器中获取 VOD 内容", "Networks pull their content from a media server integration. Select which media server to use.": "虚拟频道的内容来源于已集成的媒体服务器。请选择要使用的服务器。", + "Networks pull VOD content from the linked media server.": "虚拟频道会自动从已关联的媒体服务器中获取 VOD 内容", "Never": "从不", "New Custom Channel": "新建自定义频道", "New Custom VOD": "新建自定义 VOD", "New Group Name": "新分组名称", + "Newly Mapped": "新映射的", "New Profile": "新建配置文件", "New Setting": "新设置", - "Newly Mapped": "新映射的", "Next Sync": "下次同步", + "NFO File Generation": "NFO 文件生成", "No": "否", - "No Duplicates Found": "未发现重复项", - "No EPG cache files found.": "未找到 EPG 缓存文件。", - "No Libraries Found": "未找到媒体库", - "No Media Found": "未找到媒体", - "No Paths Configured": "未配置路径", - "No VOD channels found": "未找到 VOD 频道", "No actions were declared for this plugin.": "该插件未声明任何操作。", "No aggregate totals were returned by this run.": "本次运行未返回汇总数据。", "No checksum was found for this release. Please provide the SHA-256 hash to verify the download.": "未找到该版本的校验和。请提供 SHA-256 哈希值以验证下载。", "No description available": "无可用描述", "No description provided.": "未提供描述。", "No duplicate series were found for this media server.": "未发现此媒体服务器有重复剧集。", - "No enabled VOD channels found in the selected playlist.": "在选定的播放列表中未找到已启用的 VOD 频道。", + "No Duplicates Found": "未发现重复项", "No enabled series found matching the criteria.": "未找到符合条件的已启用剧集。", + "No enabled VOD channels found in the selected playlist.": "在选定的播放列表中未找到已启用的 VOD 频道。", + "No EPG cache files found.": "未找到 EPG 缓存文件。", "No heartbeat yet": "尚无心跳", + "No Libraries Found": "未找到媒体库", "No live activity yet": "尚无实时活动", "No log messages yet": "尚无日志消息", + "No Media Found": "未找到媒体", "No movie or TV show libraries were found on the server.": "在服务器上未找到电影或电视节目库。", + "None": "无", + "None declared": "未声明", + "No Paths Configured": "未配置路径", "No plugin installs yet.": "尚未安装任何插件。", "No plugin record loaded.": "未加载插件记录。", "No plugin runs recorded yet.": "尚未记录插件运行。", @@ -1223,23 +1282,35 @@ "No structured context was attached to this activity line.": "此活动行未附加结构化上下文。", "No summary has been written yet.": "尚未编写摘要。", "No syncs yet": "尚未同步", - "No template programmes found in the first week": "第一周未找到模板节目", - "No trailer ID set.": "未设置预告片 ID。", - "No video files were found in the configured paths.": "在配置的路径中未找到视频文件。", - "None": "无", - "None declared": "未声明", - "Not Configured": "未配置", "Not authorized to manage this stream.": "未授权管理此流。", - "Not set": "未设置", - "Not started": "未开始", + "Not Configured": "未配置", + "NOTE: Custom channels need to be associated with a Playlist or Custom Playlist.": "注意:自定义频道需要与播放列表或自定义播放列表关联。", + "NOTE: Custom VOD need to be associated with a Playlist or Custom Playlist.": "注意:自定义 VOD 需要与播放列表或自定义播放列表关联。", + "NOTE: If the list is empty, sync the playlist and check again once complete.": "注意:如果列表为空,请同步播放列表并在完成后再次检查。", + "NOTE: Only properly formatted backups will be accepted. If the backup is not valid, you will receive an error when attempting to restore.": "注意:仅接受格式正确的备份。如果备份无效,尝试恢复时将报错。", + "NOTE: Only the database will be restored, which will overwrite any existing data with the backup data. Files will not be automatically restored, you will need to manually re-upload them where needed.": "注意:仅恢复数据库,这会使用备份数据覆盖任何现有数据。文件不会自动恢复,您需要根据需要手动重新上传。", + "NOTE: Playlist channel output order is based on: 1 Sort order, 2 Channel no. and 3 Channel title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "注意:播放列表频道输出顺序依次基于:1. 排序序号,2. 频道号,3. 频道标题。您也可以将播放列表输出设置为自动排序,这将根据列表顺序定义排序序号。", + "NOTE: Playlist series can be managed in the Series section. You will need to enabled the VOD channels and Series you wish to import metadata for as it will only be imported for enabled channels and series.": "注意:播放列表剧集可以在“剧集”部分进行管理。您需要启用想要导入元数据的 VOD 频道和剧集,系统仅会为已启用的项导入元数据。", + "NOTE: Restoring a backup will overwrite any existing data. Your manually uploaded EPG and Playlist files will NOT be restored. You will need to download the backup and manually re-upload where needed.": "注意:恢复备份将覆盖现有数据。手动上传的 EPG 和播放列表文件**不会**被恢复。您需要下载备份并在需要时手动重新上传。", + "NOTE: VOD output order is based on: 1 Sort order, 2 Channel no. and 3 Title - in that order. You can edit your Playlist output to auto sort as well, which will define the sort order based on the playlist order.": "注意:VOD 输出顺序依次基于:1. 排序序号,2. 频道号,3. 标题。您也可以将播放列表输出设置为自动排序,这将根据列表顺序定义排序序号。", + "NOTE: When enabled, proxy mode is required for accurate connection tracking.": "注意:启用后,需要使用代理模式才能进行准确的连接跟踪。", + "NOTE: When restoring a backup, only the database will be restored, files will not be automatically restored. You will need to manually re-upload them where needed.": "注意:恢复备份时仅恢复数据库,文件不会自动恢复。您需要根据需要手动重新上传。", + "NOTE: You will need to re-sync your playlist, or wait for the next scheduled sync, if changing this. This will overwrite any existing channel sort order customization for this playlist.": "注意:如果更改此项,您需要重新同步播放列表或等待下次计划同步。这将覆盖该播放列表所有现有的频道排序自定义设置。", + "No template programmes found in the first week": "第一周未找到模板节目", "Notification Message": "通知消息", + "Notifications Sent": "通知已发送", "Notification Subject": "通知主题", "Notification Type": "通知类型", - "Notifications Sent": "通知已发送", "Notify All Users": "通知所有用户", "Notify Myself": "仅通知我", "Notify User": "通知用户", "Notify Users": "通知用户", + "No trailer ID set.": "未设置预告片 ID。", + "Not set": "未设置", + "Not started": "未开始", + "Not yet probed — run a probe on this channel to capture stream details.": "尚未探测 — 在此通道上运行探测以捕获流详细信息。", + "No video files were found in the configured paths.": "在配置的路径中未找到视频文件。", + "No VOD channels found": "未找到 VOD 频道", "Number of channels that were already mapped to an EPG entry.": "已经映射到 EPG 条目的频道数量。", "Number of channels that were searched for a matching EPG entry in this mapping. If the \"Override\" option is enabled, this will also include channels that were previously mapped. If the \"Override\" option is disabled, this will only include channels that were not previously mapped.": "在此次映射中搜索匹配 EPG 条目的频道数。如果启用了“覆盖”选项,将包含之前已映射的频道;如果禁用,则仅包含之前未映射的频道。", "Number of channels that were successfully matched to an EPG entry in this mapping. When \"Override\" is disabled, it is normal for this count to be 0 on subsequent syncs.": "在此次映射中成功匹配到 EPG 条目的频道数量。禁用“覆盖”时,后续同步中此数值为 0 是正常现象。", @@ -1250,6 +1321,8 @@ "Number of streams available for HDHR and Xtream API service (if using).": "HDHR 和 Xtream API 服务可用的流数量(如果使用)。", "Number of streams available for this playlist (only applies to custom channels assigned to this Custom Playlist).": "此播放列表可用的流数量(仅适用于分配给该自定义播放列表的自定义频道)。", "Number of streams available for this provider. If set to a value other than 0, will prevent any streams from starting if the number of active streams exceeds this value.": "此提供商可用的流数量。如果设置为非 0 值,当活动流数量超过此值时,将阻止开启新的流。", + "of :n total": "共 :n 项", + "Off": "离开", "Offline": "离线", "Online": "在线", "Only check this for plugins you're actively developing locally. Don't use for production installs.": "仅对您正在本地开发的插件启用此项。请勿用于正式生产环境。", @@ -1258,181 +1331,186 @@ "Only enabled series will be automatically updated on Playlist sync, this includes fetching episodes and metadata. You can also manually sync series to update episodes and metadata.": "仅启用的剧集会在播放列表同步时自动更新,这包括获取剧集内容和元数据。您也可以手动同步剧集以更新内容。", "Only expired logo cache entries (those older than 30 days). If permanent cache is enabled, nothing will be removed.": "仅清除过期的 Logo 缓存条目(超过 30 天的条目)。如果启用了永久缓存,则不会清除任何内容。", "Only export enabled channels?": "仅导出已启用的频道?", + "Only live channels in these groups will be accessible. Leave empty to allow all live groups.": "仅可访问这些组中的直播频道。留空以允许所有实时组。", + "Only series in these categories will be accessible. Leave empty to allow all series categories.": "仅可访问这些类别中的系列。留空以允许所有系列类别。", "Only unassigned auths are available. Each auth can only be assigned to one playlist at a time.": "仅未分配的身份验证可用。每个身份验证一次只能分配给一个播放列表。", + "Only VOD channels in these groups will be accessible. Leave empty to allow all VOD groups.": "仅可访问这些组中的 VOD 频道。留空以允许所有 VOD 组。", "Open": "打开", - "Open Discord": "打开 Discord", "Open action menu": "打开操作菜单", "Open bulk action menu": "打开批量操作菜单", + "Open Discord": "打开 Discord", "Open run": "打开运行记录", "Open the current run and watch the activity stream. If the run stalls, inspect the payload to confirm the target playlist and EPG pair.": "打开当前任务并查看活动日志。如果运行卡住,请检查传输的请求参数,以确认目标播放列表与 EPG 是否匹配。", - "Optional JSON array of columns to return for a select query. Defaults to [\"*\"].": "可选的 JSON 列数组,用于查询中返回的列。默认为 [\"*\"]。", + "Optional. The name of a specific table to get the schema for. If omitted, returns all accessible tables.": "可选。要获取架构的特定表名。如果省略,则返回所有可访问的表。", + "Optional: Set credentials to access this alias via Xtream API. Must be unique across all aliases and playlist auths.": "可选:设置凭据以通过 Xtream API 访问此别名。在所有别名和播放列表身份验证中必须是唯一的。", "Optional channel number for EPG": "EPG 的可选频道号", "Optional channel number for EPG ordering": "EPG 排序的可选频道号", "Optional description for your reference.": "可选描述,仅供参考。", "Optional description of this profile": "此配置文件的可选描述", "Optional description of what this profile does": "此配置文件功能的可选描述", + "Optional JSON array of columns to return for a select query. Defaults to [\"*\"].": "可选的 JSON 列数组,用于查询中返回的列。默认为 [\"*\"]。", "Optional limit for select queries. Defaults to 50.": "选择查询的可选行数限制。默认为 50。", - "Optional. The name of a specific table to get the schema for. If omitted, returns all accessible tables.": "可选。要获取架构的特定表名。如果省略,则返回所有可访问的表。", - "Optional: Set credentials to access this alias via Xtream API. Must be unique across all aliases and playlist auths.": "可选:设置凭据以通过 Xtream API 访问此别名。在所有别名和播放列表身份验证中必须是唯一的。", "Options": "选项", "Original Movie Title": "电影原名", "Original Title": "原标题", "Output": "输出", "Output Format": "输出格式", "Output Playlist": "输出播放列表", - "Output WAN address in menu": "在菜单中显示 WAN 地址", "Output processing options": "输出处理选项", - "Override URL": "覆盖 URL", + "Output WAN address in menu": "在菜单中显示 WAN 地址", "Override app-wide placeholder images for logos, episode previews, and VOD/Series poster fallbacks.": "覆盖全局 Logo、剧集预览以及 VOD/剧集海报的占位占位图。", "Override global .strm file generation settings for this series.": "为此剧集覆盖全局 .strm 文件生成设置。", "Override the application timezone. Leave empty to use the server default (UTC). Takes effect for all date/time output throughout the app.": "覆盖应用程序时区。留空则使用服务器默认值 (UTC)。对整个应用中的所有日期/时间输出生效。", "Override the default API base URL. Leave blank to use the provider default. Useful for self-hosted models or proxy endpoints.": "覆盖默认的 API 基础 URL。留空则使用提供商默认值。适用于自托管模型或代理端点。", "Override the sync location from the profile. Leave empty to use profile location.": "覆盖配置文件中的同步位置。留空则使用配置文件中的位置。", + "Override URL": "覆盖 URL", "Overview": "概述", "Overwrite": "覆盖", + "Overwrite channels with existing mappings?": "是否覆盖已有映射的频道?", "Overwrite Existing Attributes": "覆盖现有属性", "Overwrite Existing IDs": "覆盖现有 ID", "Overwrite Existing Metadata": "覆盖现有元数据", - "Overwrite channels with existing mappings?": "是否覆盖已有映射的频道?", + "Overwrite existing metadata? Episodes and seasons will always be fetched/updated.": "是否覆盖现有元数据?季度和剧集信息将始终保持同步更新。", + "Overwrite existing metadata? If disabled, it will only fetch and process episodes for the Series.": "是否覆盖现有元数据?如果禁用,系统将仅获取并处理该剧集下的具体内容。", + "Overwrite existing metadata? If disabled, it will only fetch and process metadata if it does not already exist.": "是否覆盖现有元数据?如果禁用,则仅在元数据缺失时才会执行获取和处理。", "Overwrite existing TMDB/IMDB IDs? If disabled, it will only fetch IDs for items that don\\'t already have them.": "是否覆盖现有的 TMDB/IMDB ID?如果禁用,则仅为缺失 ID 的项目进行获取。", "Overwrite existing TMDB/IMDB IDs? If disabled, it will only fetch IDs for items that don\\'t have them.": "是否覆盖现有的 TMDB/IMDB ID?如果禁用,则仅为缺失 ID 的项目进行获取。", "Overwrite existing TMDB/TVDB/IMDB IDs? If disabled, it will only fetch IDs for series that don\\'t already have them.": "是否覆盖现有的 TMDB/TVDB/IMDB ID?如果禁用,则仅为缺失 ID 的剧集进行获取。", "Overwrite existing TMDB/TVDB/IMDB IDs? If disabled, it will only fetch IDs for series that don\\'t have them.": "是否覆盖现有的 TMDB/TVDB/IMDB ID?如果禁用,则仅为缺失 ID 的剧集进行获取。", - "Overwrite existing metadata? Episodes and seasons will always be fetched/updated.": "是否覆盖现有元数据?季度和剧集信息将始终保持同步更新。", - "Overwrite existing metadata? If disabled, it will only fetch and process episodes for the Series.": "是否覆盖现有元数据?如果禁用,系统将仅获取并处理该剧集下的具体内容。", - "Overwrite existing metadata? If disabled, it will only fetch and process metadata if it does not already exist.": "是否覆盖现有元数据?如果禁用,则仅在元数据缺失时才会执行获取和处理。", - "PG, PG-13, R, NC-17": "PG, PG-13, R, NC-17", - "PG-13, R, etc.": "PG-13, R 等", - "PHP Date Formats": "PHP 日期格式", "Page number (default: 1)": "页码(默认:1)", "Parallel processing": "并行处理", "Password": "密码", "Password for playlist access.": "访问播放列表的密码。", - "Path Validation Failed": "路径验证失败", + "Paste cookies.txt content for authenticated streams (e.g. YouTube members-only, age-gated). Get cookies using a browser extension like \"Get cookies.txt LOCALLY\".": "粘贴经过身份验证的流的 cookies.txt 内容(例如仅限 YouTube 会员、年龄限制)。使用浏览器扩展获取 cookie,例如“本地获取 cookies.txt”。", "Path structure (folders)": "路径结构(文件夹)", + "Path Validation Failed": "路径验证失败", "Patterns to remove": "要清除的模式", "Pending": "待处理", "Pending Plugin Installs": "待处理的插件安装", "Pending Review": "待审核", "Pending Trust": "待信任", "Performance": "性能", + "Periodic rescoring": "定期重新评分", "Permanently removes the plugin files from the server and deletes its registry record, settings, and run history. This cannot be undone.": "从服务器永久移除插件文件,并删除其注册记录、设置和运行历史。此操作无法撤销。", "Permanently removes this install log entry. The plugin itself (if installed) is not affected.": "永久移除此安装日志条目。插件本身(如果已安装)不受影响。", "Permissions": "权限", "Personal Access Token": "个人访问令牌", "Personal Access Tokens": "个人访问令牌", + "PG, PG-13, R, NC-17": "PG, PG-13, R, NC-17", + "PG-13, R, etc.": "PG-13, R 等", + "PHP Date Formats": "PHP 日期格式", "Placeholder Images": "占位图片", "Play": "播放", + "Playback settings": "播放设置", "Play Channel": "播放频道", "Play Episode": "播放剧集", - "Play Video": "播放视频", - "Playback settings": "播放设置", "Playlist": "播放列表", "Playlist Alias": "播放列表别名", "Playlist Aliases": "播放列表别名", "Playlist Auth": "播放列表身份验证", - "Playlist Auth ID": "播放列表身份验证 ID", "Playlist Auth created": "播放列表身份验证已创建", + "Playlist Auth ID": "播放列表身份验证 ID", "Playlist Auths": "播放列表身份验证", "Playlist Category": "播放列表分类", - "Playlist Group": "播放列表分组", - "Playlist Name": "播放列表名称", - "Playlist Output": "播放列表输出", - "Playlist Processing": "播放列表处理", - "Playlist Series are being processed in the background. Depending on the number of enabled Series, this may take a while. You will be notified on completion.": "播放列表剧集正在后台处理。根据已启用的剧集数量,这可能需要一段时间。完成后您将收到通知。", - "Playlist Settings": "播放列表设置", - "Playlist Type": "播放列表类型", - "Playlist Type (choose one)": "播放列表类型(请选择一项)", - "Playlist URL": "播放列表 URL", - "Playlist VOD channels are being processed in the background. Depending on the number of enabled VOD channels, this may take a while. You will be notified on completion.": "播放列表 VOD 频道正在后台处理。根据已启用的 VOD 频道数量,这可能需要一段时间。完成后您将收到通知。", - "Playlist Viewer": "播放列表关联用户", - "Playlist Viewers": "播放列表关联用户", "Playlist fail conditions": "播放列表失败条件", + "Playlist Group": "播放列表分组", "Playlist is being duplicated": "播放列表副本正在创建中", "Playlist is being duplicated in the background. You will be notified on completion.": "播放列表副本正在后台创建。完成后您将收到通知。", "Playlist is fetching metadata for Series": "播放列表正在获取剧集元数据", "Playlist is fetching metadata for VOD channels": "播放列表正在获取 VOD 频道元数据", + "Playlist Name": "播放列表名称", "Playlist name": "播放列表名称", + "Playlist Output": "播放列表输出", + "Playlist Processing": "播放列表处理", + "Playlists": "播放列表", + "Playlist Series are being processed in the background. Depending on the number of enabled Series, this may take a while. You will be notified on completion.": "播放列表剧集正在后台处理。根据已启用的剧集数量,这可能需要一段时间。完成后您将收到通知。", + "Playlist Settings": "播放列表设置", "Playlist settings are being copied": "正在复制播放列表设置", "Playlist settings are being copied in the background. You will be notified on completion.": "播放列表设置正在后台复制。完成后您将收到通知。", "Playlist status has been reset.": "播放列表状态已重置。", "Playlist status reset": "播放列表状态重置", + "Playlist Type": "播放列表类型", "Playlist type": "播放列表类型", + "Playlist Type (choose one)": "播放列表类型(请选择一项)", + "Playlist URL": "播放列表 URL", + "Playlist Viewer": "播放列表关联用户", + "Playlist Viewers": "播放列表关联用户", "Playlist viewers are used for in app viewing and M3U TV access. Viewers are created automatically via username used to access playlist or start playback.": "关联用户用于应用内观看以及 M3U 电视访问。系统会根据访问列表或开始播放时使用的用户名,自动创建对应的用户凭据。", - "Playlists": "播放列表", + "Playlist VOD channels are being processed in the background. Depending on the number of enabled VOD channels, this may take a while. You will be notified on completion.": "播放列表 VOD 频道正在后台处理。根据已启用的 VOD 频道数量,这可能需要一段时间。完成后您将收到通知。", "Plays": "播放量", + "Play Video": "播放视频", "Please add at least one media library path before scanning.": "请在扫描前至少添加一个媒体库路径。", "Please configure Xtream credentials first.": "请先配置 Xtream 凭据。", "Please configure your TMDB API key in Settings > TMDB before using this feature.": "使用此功能前,请在“设置 > TMDB”中配置您的 TMDB API 密钥。", - "Please enter a TMDB API key to test the connection.": "请输入 TMDB API 密钥以测试连接。", "Please enter a search query": "请输入搜索查询内容", + "Please enter a TMDB API key to test the connection.": "请输入 TMDB API 密钥以测试连接。", "Please enter credentials and select a lineup first": "请先输入凭据并选择频道方案", "Please enter username and password first": "请先输入用户名和密码", "Please enter username and password first.": "请先输入用户名和密码。", - "Please fill in all required SMTP fields before sending a test email.": "发送测试邮件前请填写所有必填的 SMTP 字段。", "Please fill in all required connection fields before testing the connection.": "测试连接前请填写所有必填的连接字段。", "Please fill in all required fields first": "请先填写所有必填字段", + "Please fill in all required SMTP fields before sending a test email.": "发送测试邮件前请填写所有必填的 SMTP 字段。", "Please provide a provider URL or configure the playlist Xtream URL.": "请提供提供商 URL 或配置播放列表 Xtream URL。", "Plex": "Plex", "Plex Server Management": "Plex 服务器管理", "Plot": "剧情简介", "Plugin": "插件", "Plugin Archive": "插件存档", - "Plugin Directory Path": "插件目录路径", - "Plugin Info": "插件信息", - "Plugin Install": "插件安装", - "Plugin Installs": "插件安装", - "Plugin Name": "插件名称", - "Plugin Update Check Complete": "插件更新检查完成", "Plugin archive staged": "插件存档已暂存", "Plugin archive staging failed": "插件存档暂存失败", "Plugin blocked": "插件已屏蔽", "Plugin creation failed": "插件创建失败", "Plugin deleted": "插件已删除", + "Plugin Directory Path": "插件目录路径", "Plugin disabled": "插件已禁用", "Plugin discovery completed": "插件发现完成", "Plugin enabled": "插件已启用", - "Plugin install #:id installed [:plugin_id].": "插件安装 #:id 已安装 [:plugin_id]。", + "Plugin Info": "插件信息", + "Plugin Install": "插件安装", "Plugin install #:id installed and trusted [:plugin_id].": "插件安装 #:id 已安装并受信任 [:plugin_id]。", + "Plugin install #:id installed [:plugin_id].": "插件安装 #:id 已安装 [:plugin_id]。", "Plugin install #:id was rejected.": "插件安装 #:id 已被拒绝。", "Plugin install discarded": "插件安装已取消", + "Plugin installed": "插件已安装", + "Plugin installed and trusted": "插件已安装并受信任", "Plugin install failed": "插件安装失败", "Plugin install rejected": "插件安装被拒绝", + "Plugin Installs": "插件安装", "Plugin install staged": "插件安装已暂存", - "Plugin installed": "插件已安装", - "Plugin installed and trusted": "插件已安装并受信任", + "Plugin Name": "插件名称", "Plugin reinstalled": "插件已重新安装", "Plugin run": "插件运行", "Plugin run detail": "插件运行详情", - "Plugin staging failed": "插件暂存失败", - "Plugin trusted": "插件已受信任", - "Plugin uninstalled": "插件已卸载", - "Plugin upload failed": "插件上传失败", "Plugins": "插件", "Plugins Needing Attention": "需要注意的插件", + "Plugin staging failed": "插件暂存失败", "Plugins that are blocked, modified, invalid, or not fully installed.": "被屏蔽、修改、无效或未完整安装的插件。", "Plugins that are currently installed and available to operate.": "当前已安装且可正常操作的插件。", - "Pool Status": "连接池状态", + "Plugin trusted": "插件已受信任", + "Plugin uninstalled": "插件已卸载", + "Plugin Update Check Complete": "插件更新检查完成", + "Plugin upload failed": "插件上传失败", "Pool multiple Xtream accounts from this provider to increase concurrent stream capacity.": "汇集该提供商下的多个 Xtream 账号,以增加并发流容量。", + "Pool Status": "连接池状态", "Port": "端口", "Position / Duration": "位置 / 时长", + "Postal Code": "邮政编码", + "Poster URL updated": "海报 URL 已更新", "Post Process": "后处理", - "Post Process ID": "后处理 ID", "Post Process created": "后处理已创建", + "Post Process ID": "后处理 ID", "Post Processing": "后处理", - "Postal Code": "邮政编码", - "Poster URL updated": "海报 URL 已更新", "Pre-defined prompts displayed as buttons in the Copilot chat window.": "在 AI 助手聊天窗口中显示为按钮的预定义提示。", "Prefer catch-up as primary": "优先将回看作为首选源", "Prefer icon from channel or EPG.": "优先使用频道或 EPG 中的图标。", "Prefer logo from channel or EPG.": "优先使用频道或 EPG 中的 Logo。", "Preferred Codec": "首选编解码器", "Preferred Icon": "首选图标", + "Preferred icon updated": "首选图标已更新", + "Preferred language for TMDB searches.": "TMDB 搜索的首选语言。", "Preferred Locale": "首选区域设置", "Preferred Playlist (optional)": "首选播放列表(可选)", "Preferred TVG ID output": "首选 TVG ID 输出", - "Preferred icon updated": "首选图标已更新", - "Preferred language for TMDB searches.": "TMDB 搜索的首选语言。", "Preprocess playlist": "预处理播放列表", "Press [tab] or [return] to add item.": "按 [Tab] 或 [回车] 添加项目。", "Press [tab] or [return] to add item. Leave empty to disable.": "按 [Tab] 或 [回车] 添加项目。留空则禁用。", @@ -1449,24 +1527,30 @@ "Priority": "优先级", "Priority Keywords": "优先级关键词", "Priority Order": "优先级顺序", + "Probed": "探测完成", "Probe Enabled": "开启流探测", - "Probe Streams": "探测串流信息", "Probe now": "立即探测", + "Probe ran but returned no usable details.": "探测器已运行但未返回任何可用的详细信息。", + "Probe Streams": "探测串流信息", "Probe streams after sync": "同步后自动探测", "Probe the selected channels with ffprobe to collect stream metadata (codec, resolution, bitrate). This data enables fast channel switching in Emby.": "使用 ffprobe 探测所选频道以收集串流元数据(编解码器、分辨率、比特率)。这些数据可实现 Emby 中的快速频道切换。", "Probe timeout (seconds)": "探测超时(秒)", - "Probed": "探测完成", + "Probing is disabled for this channel.": "该通道的探测已禁用。", "Probing is disabled for this channel. Enable it in the channel's edit form to allow probe data collection.": "该通道的探测已禁用。在通道的编辑表单中启用它以允许探测数据收集。", "Probing started": "探测开始", "Process": "处理", "Process EPG now?": "立即处理 EPG 吗?", "Process EPG now? This will reload the EPG data from the source.": "立即处理 EPG 吗?这将从源重新加载 EPG 数据。", "Process Event": "处理事件", - "Process Message": "处理消息", - "Process Status": "进程状态", "Process failed": "处理失败", + "Processing": "处理中", + "Processing options for playlist series": "播放列表剧集处理选项", + "Processing options for playlist VOD": "播放列表 VOD 处理选项", + "Processing settings for the playlist": "播放列表处理设置", + "Processing state reset": "处理状态已重置", "Process in parallel rather than one-at-a-time for significantly faster results.": "并行处理而非逐个处理,速度显著更快。", "Process merged EPG now?": "立即处理合并后的 EPG 吗?", + "Process Message": "处理消息", "Process now? This will fetch all episodes and seasons for the enabled series.": "立即处理吗?这将获取已启用剧集的所有单集和季度信息。", "Process on failed syncs too (default is only successful syncs).": "在同步失败时也进行处理(默认仅在成功同步后处理)。", "Process selected": "处理所选内容", @@ -1474,14 +1558,10 @@ "Process series for selected category now? Only enabled series will be processed. This will fetch all episodes and seasons for the category series. This may take a while depending on the number of series in the category.": "立即处理所选分类的剧集吗?仅处理已启用的剧集。这将获取该分类下所有剧集的单集和季度信息。耗时取决于分类中的剧集数量。", "Process series for this category now? Only enabled series will be processed. This will fetch all episodes and seasons for the category series. This may take a while depending on the number of series in the category.": "立即处理此分类的剧集吗?仅处理已启用的剧集。这将获取该分类下所有剧集的单集和季度信息。耗时取决于分类中的剧集数量。", "Process series now? This will fetch all episodes and seasons for this series.": "立即处理剧集吗?这将获取该剧集的所有单集和季度信息。", + "Process Status": "进程状态", "Process the selected epg(s) now?": "立即处理选定的 EPG 吗?", "Process the selected merged EPG(s) now?": "立即处理选定的合并后 EPG 吗?", "Process the selected playlist(s) now?": "立即处理选定的播放列表吗?", - "Processing": "处理中", - "Processing options for playlist VOD": "播放列表 VOD 处理选项", - "Processing options for playlist series": "播放列表剧集处理选项", - "Processing settings for the playlist": "播放列表处理设置", - "Processing state reset": "处理状态已重置", "Profile Name": "配置文件名称", "Profile Test Failed": "配置文件测试未通过", "Profile Valid ✓": "配置文件有效 ✓", @@ -1491,11 +1571,12 @@ "Progress": "进度", "Progress of EPG cache generation": "EPG 缓存生成进度", "Progress of EPG import/sync": "EPG 导入/同步进度", - "Progress of SchedulesDirect import (if using)": "Schedules Direct 导入进度(如果已启用)", "Progress of merged EPG import/sync": "合并后 EPG 导入/同步进度", + "Progress of SchedulesDirect import (if using)": "Schedules Direct 导入进度(如果已启用)", "Prompt": "提示词", "Provider": "提供商", "Provider Credentials": "提供商凭据", + "Provider credentials to use for this alias. At least one set of credentials is required.": "用于此别名的提供商凭据。至少需要一组凭据。", "Provider Limits Warning": "提供商限制警告", "Provider Profiles": "提供商配置文件", "Provider Rate Limiting & Concurrency": "提供商限速与并发", @@ -1503,12 +1584,12 @@ "Provider Streams": "提供商流", "Provider Timezone": "提供商时区", "Provider Timezone Not Found": "未找到提供商时区", - "Provider URL": "提供商 URL", - "Provider credentials to use for this alias. At least one set of credentials is required.": "用于此别名的提供商凭据。至少需要一组凭据。", "Provider timezone not found in playlist status. Make sure the playlist is connected and has synced at least once to retrieve this information.": "在播放列表状态中未找到提供商时区。请确保播放列表已连接并至少同步过一次以获取此信息。", + "Provider URL": "提供商 URL", "Proxied M3U URL": "代理后的 M3U URL", "Proxy": "代理", "Proxy Enabled": "代理已启用", + "Proxy mode was automatically enabled because this playlist now contains channels from source playlists with Provider Profiles enabled.": "代理模式已自动启用,因为此播放列表包含来自已启用提供商配置文件的源列表频道。", "Proxy Options": "代理选项", "Proxy Password (Alternative)": "代理密码(备用)", "Proxy Port (Alternative)": "代理端口(备用)", @@ -1516,20 +1597,23 @@ "Proxy Streams": "代理流", "Proxy URL": "代理 URL", "Proxy User Agent for Media Streams": "媒体流代理的 User Agent", - "Proxy mode was automatically enabled because this playlist now contains channels from source playlists with Provider Profiles enabled.": "代理模式已自动启用,因为此播放列表包含来自已启用提供商配置文件的源列表频道。", "Public URL": "公共 URL", - "Purge Series": "彻底清除剧集", "Purge now": "立即清除", + "Purge Series": "彻底清除剧集", "QR Code": "二维码", - "Queue Manager": "队列管理器", + "Quality & Options": "质量和选项", + "Quality selector (best, worst, 720p, etc.) followed by optional Streamlink flags. Example: best --hls-live-edge 3": "质量选择器(最佳、最差、720p 等),后跟可选的 Streamlink 标志。示例:最佳 --hls-live-edge 3", + "Queue a one-off failover rescore for this playlist? Stale channels will be re-probed (subject to the configured staleness window) and failovers re-sorted so the highest-quality source sits first.": "为该播放列表排队一次性故障转移重新评分?过时的通道将被重新探测(根据配置的过时窗口)并重新排序故障转移,以便最高质量的源位于第一位。", "Queue a plugin action from the page header to create the first run.": "从导航栏将插件操作排入队列以执行首次运行。", "Queue a scan from the header to generate the first run. That will populate Live Activity, Run History, and the run detail screen.": "从导航栏将扫描操作排入队列以执行首次运行。这将填充实时活动、运行历史和运行详情界面。", - "Queue reset": "队列已重置", "Queued": "已排队", "Queued by": "排队者", + "Queue Manager": "队列管理器", + "Queue reset": "队列已重置", "Quick Actions": "快速操作", "Ran At": "执行时间", "Ran at": "执行时间", + "Ranked sources": "排名来源", "Rate Limit (requests/second)": "速率限制(请求/秒)", "Rating": "评分/分级", "Rating (5 based)": "评分(5 分制)", @@ -1537,16 +1621,20 @@ "Re-enable disabled channels that are found to be live. Requires \"Scan all channels\" to be on.": "重新启用被发现为直播的已禁用频道。需要开启「扫描所有频道」。", "Re-enable live channels": "重新启用直播频道", "Re-probe": "重新探测", + "Re-probe channels older than (days)": "重新探测早于(天)的通道", "Re-run this mapping everytime the EPG is synced?": "是否在每次同步 EPG 时都重新运行此映射?", + "Re-score failovers now": "立即重新评分故障转移", + "Re-score this channel's failovers against current stream stats. Stale channels may be re-probed (subject to the playlist's staleness window). The master channel is never altered — only the failover order changes.": "根据当前流统计数据重新评分该通道的故障转移。过时的频道可能会被重新探测(取决于播放列表的过时窗口)。主通道永远不会改变——只有故障转移顺序发生变化。", "Recall Memories": "召回记忆", "Recent Plugin Installs": "最近安装的插件", - "Recent Runs": "最近的运行记录", "Recent plugin uploads — pending approval, approved, or rejected.": "最近上传的插件 —— 待审批、已批准或已拒绝。", + "Recent Runs": "最近的运行记录", "Recommended Next Step": "建议的下一步操作", + "recorded progress.": "记录了进度。", "Recordings / DVR Subscriptions": "录像 / DVR 订阅", - "Recount Channels": "重新统计频道", "Recount all channels in this group sequentially?": "是否按顺序重新统计该分组中的所有频道?", "Recount all channels in this group sequentially? Channel numbers will be assigned based on the current sort order.": "是否按顺序重新统计该分组中的所有频道?频道编号将根据当前排序顺序分配。", + "Recount Channels": "重新统计频道", "Recount channels across selected groups? This will renumber channels sequentially starting from the top-most selected group down to the bottom-most.": "是否重新统计所选分组中的频道?这将从最顶层的分组到最底层的分组按顺序对频道进行重新编号。", "Recount now": "立即重新统计", "Recount the selected channels only inside this custom playlist. The original channel numbers will not change.": "仅重新统计此自定义播放列表中的所选频道。原始频道号不会改变。", @@ -1561,17 +1649,17 @@ "Refresh EPG Guide": "刷新 EPG 指南", "Refresh Failed": "刷新失败", "Refresh Libraries": "刷新媒体库", - "Refresh Logo Repository": "刷新 Logo 仓库", "Refresh logo cache (selected)": "刷新 Logo 缓存(已选择)", + "Refresh Logo Repository": "刷新 Logo 仓库", "Refresh media server library after sync": "同步后刷新媒体服务器库", "Refresh poster cache (selected)": "刷新海报缓存(已选择)", "Refresh selected cache": "刷新所选缓存", "Regex merge patterns": "正则合并模式", "Regex patterns for failover grouping. Useful when the same channel has different names within and across providers.": "在故障转移中通过正则表达式将不同名称的同类频道进行归类。当同一频道在不同提供商处名称不统一时,此功能非常有用", - "Register HDHomeRun Tuner": "注册 HDHomeRun 调谐器", "Register a DVR tuner first.": "请先注册一个 DVR 调谐器。", - "Register this playlist as an HDHomeRun tuner in Plex for Live TV & DVR.": "在 Plex 中将此播放列表注册为 HDHomeRun 调谐器,用于直播电视和 DVR。", "Registered Tuners": "已注册的调谐器", + "Register HDHomeRun Tuner": "注册 HDHomeRun 调谐器", + "Register this playlist as an HDHomeRun tuner in Plex for Live TV & DVR.": "在 Plex 中将此播放列表注册为 HDHomeRun 调谐器,用于直播电视和 DVR。", "Registration Failed": "注册失败", "Reinstall": "重新安装", "Reinstalling makes this plugin eligible to run again. Settings are preserved unless you deleted its data during uninstall.": "重新安装使该插件可以再次运行。除非您在卸载期间清除了其数据,否则设置将被保留。", @@ -1580,8 +1668,8 @@ "Release Asset URL": "发布资源 URL", "Release Date": "发布日期", "Release Date (Alt)": "发布日期(备用)", - "Release Logs": "发布日志", "Release info missing": "缺少发布信息", + "Release Logs": "发布日志", "Release logs": "发布日志", "Release logs refreshed": "发布日志已刷新", "Releases": "版本发布", @@ -1590,14 +1678,15 @@ "Removal Failed": "移除失败", "Remove": "移除", "Remove Auth": "移除身份验证", - "Remove DVR": "移除 DVR", - "Remove Entire DVR": "移除整个 DVR", - "Remove Tuner": "移除调谐器", "Remove auth": "移除身份验证", "Remove auth from Playlist": "从播放列表中移除身份验证", "Remove auth from Playlist?": "确定要从播放列表中移除身份验证吗?", "Remove auth from selected Playlist?": "确定要从所选播放列表中移除身份验证吗?", "Remove consecutive replacement characters": "压缩连续的替换字符", + "Removed Channels": "已移除频道", + "Removed Groups": "已移除分组", + "Remove DVR": "移除 DVR", + "Remove Entire DVR": "移除整个 DVR", "Remove inactive streams and clients": "移除不活动的串流和客户端", "Remove or replace special characters in filenames": "移除或替换文件名中的特殊字符", "Remove post processing": "移除后处理", @@ -1606,46 +1695,48 @@ "Remove post processing from selected item?": "确定要移除所选项目的后处理吗?", "Remove quality indicators": "移除画质标识", "Remove specific words or symbols from folder and file names": "从文件夹和文件名中移除特定的词汇或符号", - "Removed Channels": "已移除频道", - "Removed Groups": "已移除分组", "Removes the selected reviews from the system. This does not affect the installed plugins or their files on disk.": "从系统中移除所选的审查记录。这不会影响已安装的插件或其磁盘文件。", + "Remove Tuner": "移除调谐器", "Replace now": "立即替换", "Replace with": "替换为", "Replace with (optional)": "替换为(可选)", - "Request Options": "请求选项", "Request delay": "请求延迟", "Request delay (milliseconds)": "请求延迟(毫秒)", - "Request type": "请求类型", "Requested Access": "请求的访问权限", + "Request Options": "请求选项", + "Request type": "请求类型", "Required to send emails, if your provider requires authentication.": "如果您的提供商需要身份验证,则发送邮件时需要此项。", "Required to send emails.": "发送邮件时需要此项。", "Rescan storage": "重新扫描存储", + "Rescore": "重新评分", + "Rescore now": "立即重新评分", + "Rescoring queued": "重新评分已排队", "Reset": "重置", + "Reset category names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "将分类名称重置为原始导入值。这将撤销对所选播放列表的所有“查找与替换”更改。", + "Reset category names back to their original imported values? This will undo any find & replace changes.": "是否将分类名称重置为原始导入值?这将撤销所有“查找与替换”更改。", "Reset EPG status so it can be processed again. Only perform this action if you are having problems with the EPG syncing.": "重置 EPG 状态以便重新处理。仅在 EPG 同步出现问题时执行此操作。", "Reset Find & Replace results back to EPG defaults. This will remove any custom values set in the selected column.": "将“查找与替换”结果重置为 EPG 默认值。这将清除所选列中设置的所有自定义值。", "Reset Find & Replace results back to epg defaults for the selected epg channels. This will remove any custom values set in the selected column.": "将所选 EPG 频道的“查找与替换”结果重置为 EPG 默认值。这将清除所选列中设置的所有自定义值。", - "Reset Find & Replace results back to playlist defaults for the selected channels. This will remove any custom values set in the selected column.": "将所选频道的“查找与替换”结果重置为播放列表默认值。这将清除所选列中设置的所有自定义值。", "Reset Find & Replace results back to playlist defaults. This will remove any custom values set in the selected column.": "将“查找与替换”结果重置为播放列表默认值。这将清除所选列中设置的所有自定义值。", - "Reset Processing State": "重置处理状态", - "Reset Queue": "重置队列", - "Reset VOD group names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "将 VOD 分组名称重置为原始导入值。这将撤销对所选播放列表的所有“查找与替换”更改。", - "Reset category names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "将分类名称重置为原始导入值。这将撤销对所选播放列表的所有“查找与替换”更改。", - "Reset category names back to their original imported values? This will undo any find & replace changes.": "是否将分类名称重置为原始导入值?这将撤销所有“查找与替换”更改。", + "Reset Find & Replace results back to playlist defaults for the selected channels. This will remove any custom values set in the selected column.": "将所选频道的“查找与替换”结果重置为播放列表默认值。这将清除所选列中设置的所有自定义值。", "Reset group names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "将分组名称重置为原始导入值。这将撤销对所选播放列表的所有“查找与替换”更改。", "Reset group names back to their original imported values? This will undo any find & replace changes.": "是否将分组名称重置为原始导入值?这将撤销所有“查找与替换”更改。", "Reset media server status so it can be synced again. Only perform this action if you are having problems with the media server syncing.": "重置媒体服务器状态以便重新同步。仅在媒体服务器同步出现问题时执行此操作。", "Reset now": "立即重置", "Reset playlist status so it can be processed again. Only perform this action if you are having problems with the playlist syncing.": "重置播放列表状态以便重新处理。仅在播放列表同步出现问题时执行此操作。", + "Reset Processing State": "重置处理状态", + "Reset Queue": "重置队列", "Reset status": "重置状态", - "Reset status for the selected Playlists so they can be processed again. Only perform this action if you are having problems with the playlist syncing.": "重置所选播放列表的状态以便重新处理。仅在播放列表同步出现问题时执行此操作。", "Reset status for the selected media servers so they can be synced again.": "重置所选媒体服务器的状态以便重新同步。", + "Reset status for the selected Playlists so they can be processed again. Only perform this action if you are having problems with the playlist syncing.": "重置所选播放列表的状态以便重新处理。仅在播放列表同步出现问题时执行此操作。", "Resetting the queue will restart the queue workers and flush any pending jobs. Any syncs or background processes will be stopped and removed. Only perform this action if you are having sync issues.": "重置队列将重新启动队列工作进程并清空所有待处理任务。所有同步或后台进程都将停止并移除。仅在遇到同步问题时执行此操作。", + "Reset VOD group names back to their original imported values. This will undo any find & replace changes for the selected playlist.": "将 VOD 分组名称重置为原始导入值。这将撤销对所选播放列表的所有“查找与替换”更改。", "Resolution": "分辨率", "Resolve proxy public URL dynamically at request time": "在请求时动态解析代理公共 URL", "Resolver URL": "解析器 URL", - "Restart Now": "立即重启", "Restart existing mapping process.": "重启现有的映射进程。", "Restart from beginning when all content has played": "所有内容播放完毕后从头开始", + "Restart Now": "立即重启", "Restart the in-progress scrubber run.": "重启正在运行的链接清理工具任务。", "Restart this scrubber? The existing run will be abandoned and a new one will begin.": "是否重启此链接清理工具?现有的运行记录将被放弃,并开始新的运行。", "Restore now": "立即恢复", @@ -1653,106 +1744,99 @@ "Resume Run": "恢复运行", "Retain logs of playlist syncs. This is useful for debugging and tracking changes to the playlist. This can lead to increased sync time and storage usage depending on the size of the playlist.": "保留播放列表同步日志。这对于调试和跟踪播放列表更改非常有用。根据播放列表的大小,这可能会增加同步时间和存储占用。", "Retry probe": "重试探测", - "Returned Metrics": "返回的指标", - "Returned as \"server_info.http_port\" in \"player_api.php\" responses. Leave empty to use APP_PORT (default).": "在“player_api.php”响应中作为“server_info.http_port”返回。留空则使用 APP_PORT(默认值)。", "Returned as \"server_info.https_port\" in \"player_api.php\" responses. Leave empty to use 443 (default).": "在“player_api.php”响应中作为“server_info.https_port”返回。留空则使用 443(默认值)。", + "Returned as \"server_info.http_port\" in \"player_api.php\" responses. Leave empty to use APP_PORT (default).": "在“player_api.php”响应中作为“server_info.http_port”返回。留空则使用 APP_PORT(默认值)。", "Returned as \"user_info.message\" in \"player_api.php\" responses.": "在“player_api.php”响应中作为“user_info.message”返回。", + "Returned Metrics": "返回的指标", "Returned totals": "返回的总数", "Review #:id is queued for approval.": "审查记录 #:id 已排队等待批准。", "Review #:id is queued for security scan and approval.": "审查记录 #:id 已排队进行安全扫描和批准。", "Review #:id is queued — check Plugin Installs to scan and approve it.": "审查记录 #:id 已排队 —— 请检查“插件安装”以进行扫描和批准。", "Review #:id is ready - check Plugin Installs to scan and approve it.": "审查记录 #:id 已就绪 —— 请检查“插件安装”以进行扫描和批准。", + "Review and create your plugin": "审核并创建您的插件", "Review Notes": "审核备注", "Review Summary": "审核摘要", - "Review and create your plugin": "审核并创建您的插件", "Review the failed run, check the activity stream for the error context, and correct the target playlist, EPG, or thresholds before trying again.": "检查失败的运行记录,查看活动流中的错误上下文,并在重试前修正目标播放列表、EPG 或阈值。", "Rule Name": "规则名称", "Run": "运行", + "Run a plugin action to see step-by-step activity appear here.": "运行插件操作,在此处查看分步活动详情。", + "Run automatically after each playlist sync.": "在每次播放列表同步后自动运行。", "Run ClamAV Scan": "运行 ClamAV 扫描", "Run History": "运行历史", "Run Log": "运行日志", "Run Logs": "运行日志列表", + "Running": "运行中", "Run Now": "立即运行", - "Run Summary": "运行摘要", - "Run Tool": "运行工具", - "Run a plugin action to see step-by-step activity appear here.": "运行插件操作,在此处查看分步活动详情。", - "Run automatically after each playlist sync.": "在每次播放列表同步后自动运行。", "Run resumed": "运行已恢复", "Run status": "运行状态", + "Run Summary": "运行摘要", "Run the selected scrubbers now? This will not modify the \"Recurring\" setting.": "立即运行所选的链接清理工具吗?这不会修改“循环执行”设置。", - "Running": "运行中", "Runtime": "运行耗时", - "SD Progress": "Schedules Direct 进度", - "SHA-256 Checksum": "SHA-256 校验和", - "SMTP": "SMTP", - "SMTP Encryption": "SMTP 加密", - "SMTP From Address": "SMTP 发件人地址", - "SMTP Host": "SMTP 主机", - "SMTP Password": "SMTP 密码", - "SMTP Port": "SMTP 端口", - "SMTP Settings": "SMTP 设置", - "SMTP Username": "SMTP 用户名", + "Run Tool": "运行工具", "Sample rate": "采样率", "Saved targets used for manual defaults and automation.": "保存的目标,用于手动默认值和自动化。", "Scan": "扫描", "Scan & Discover Libraries": "扫描并发现媒体库", + "Scan all channels (including disabled)": "扫描所有频道(包括已禁用的频道)", "Scan All Libraries": "扫描所有媒体库", "Scan Complete": "扫描完成", + "Scan completed": "扫描完成", "Scan Details": "扫描详情", "Scan Failed": "扫描失败", + "Scan failed": "扫描失败", "Scan Recursively": "包含子目录扫描", + "Scans All Channels": "扫描所有频道", "Scan Scope": "扫描范围", "Scan Started": "扫描开始", - "Scan all channels (including disabled)": "扫描所有频道(包括已禁用的频道)", - "Scan completed": "扫描完成", - "Scan failed": "扫描失败", "Scan subdirectories for media files": "扫描子目录以获取媒体文件", - "Scans All Channels": "扫描所有频道", "Schedule": "计划", + "Schedule a recurring rescore for every failover group in this playlist. Master channels are never promoted or replaced — only failover sort order changes. Off = rescore manually only via the \"Rescore now\" button.": "为该播放列表中的每个故障转移组安排定期重新评分。主通道永远不会升级或替换——只会更改故障转移排序顺序。关闭 = 仅通过“立即重新评分”按钮手动重新评分。", "Schedule Builder": "节目编排器", + "Scheduled": "已计划", + "Scheduled Recordings": "定时录制任务", + "Scheduled scans: disabled": "定时扫描:已禁用", + "Scheduled Start Time": "计划开始时间", + "Scheduled start time must be in the future.": "计划开始时间必须晚于当前时间。", "Schedule Generated": "节目单已生成", "Schedule Info": "编排详情", + "SchedulesDirect": "SchedulesDirect", + "SchedulesDirect Configuration": "SchedulesDirect 配置", "Schedule Settings": "编排设置", + "Schedules Generated": "节目单已生成", "Schedule Start Time": "计划开始时间", "Schedule Type": "编排模式", "Schedule Window": "编排周期窗口", "Schedule window is already one week": "编排窗口已设为一周", - "Scheduled": "已计划", - "Scheduled Recordings": "定时录制任务", - "Scheduled Start Time": "计划开始时间", - "Scheduled scans: disabled": "定时扫描:已禁用", - "Scheduled start time must be in the future.": "计划开始时间必须晚于当前时间。", - "Schedules Generated": "节目单已生成", - "SchedulesDirect": "SchedulesDirect", - "SchedulesDirect Configuration": "SchedulesDirect 配置", "Scheduling": "调度", "Schema": "模式", "Script Options": "脚本选项", "Scrubber Details": "失效检测工具详情", "Scrubber run cancelled": "失效检测工具运行已取消", "Scrubber tasks run after Playlist sync to check for dead URLs and automatically disable failing channels based on the configuration.": "失效检测任务将在播放列表同步后运行,用于检查失效 URL 并根据配置自动禁用故障频道。", + "SD Progress": "Schedules Direct 进度", "Search & Map": "搜索与映射", + "Search and Select Episodes": "搜索并选择剧集", + "Search and Select Movies": "搜索并选择电影", + "Search by filename...": "按文件名搜索...", + "Search categories": "搜索分类", "Search Documentation": "搜索文档", "Search Error": "搜索错误", + "Search for master channel": "搜索主频道", + "Searching for TMDB/TVDB IDs. Check the logs or refresh the page in a few seconds.": "正在搜索 TMDB/TVDB ID。请检查日志或在几秒钟内刷新页面。", "Search Language": "搜索语言", + "Search live groups": "搜索直播分组", "Search Query": "搜索查询", "Search Results": "搜索结果", + "Search series categories": "搜索系列类别", + "Search term or question to look up in the docs": "要在文档中查找的搜索词或问题", + "Search The Movie Database for this movie": "在 TMDB 中搜索这部电影", + "Search The Movie Database for this series": "在 TMDB 中搜索该剧集", "Search TMDB": "搜索 TMDB", - "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs for the selected series? This enables Trash Guides compatibility for Sonarr.": "是否在 TMDB 中搜索匹配的剧集并为所选剧集填充 TMDB/TVDB/IMDB ID?开启此项可确保与 Sonarr 的 Trash Guides 兼容。", - "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs? This enables Trash Guides compatibility for Sonarr.": "是否在 TMDB 中搜索匹配的剧集并填充相应的 ID 标识?开启此项可确保与 Sonarr 的 Trash Guides 兼容。", "Search TMDB for matching movies and populate TMDB/IMDB IDs for all VOD channels in the selected playlist? This enables Trash Guides compatibility for Radarr.": "是否在 TMDB 中搜索匹配的电影并为所选播放列表中的所有 VOD 频道填充 TMDB/IMDB ID?开启此项可确保与 Radarr 的 Trash Guides 兼容。", "Search TMDB for matching movies and populate TMDB/IMDB IDs for the selected VOD channels? This enables Trash Guides compatibility for Radarr/Sonarr.": "是否在 TMDB 中搜索匹配的电影并为所选 VOD 频道填充 TMDB/IMDB ID?开启此项可确保与 Radarr/Sonarr 的 Trash Guides 兼容。", - "Search The Movie Database for this movie": "在 TMDB 中搜索这部电影", - "Search The Movie Database for this series": "在 TMDB 中搜索该剧集", - "Search VOD groups": "搜索 VOD 分组", - "Search and Select Episodes": "搜索并选择剧集", - "Search and Select Movies": "搜索并选择电影", - "Search by filename...": "按文件名搜索...", - "Search categories": "搜索分类", - "Search for master channel": "搜索主频道", - "Search live groups": "搜索直播分组", - "Search term or question to look up in the docs": "要在文档中查找的搜索词或问题", - "Searching for TMDB/TVDB IDs. Check the logs or refresh the page in a few seconds.": "正在搜索 TMDB/TVDB ID。请检查日志或在几秒钟内刷新页面。", + "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs? This enables Trash Guides compatibility for Sonarr.": "是否在 TMDB 中搜索匹配的剧集并填充相应的 ID 标识?开启此项可确保与 Sonarr 的 Trash Guides 兼容。", + "Search TMDB for matching TV series and populate TMDB/TVDB/IMDB IDs for the selected series? This enables Trash Guides compatibility for Sonarr.": "是否在 TMDB 中搜索匹配的剧集并为所选剧集填充 TMDB/TVDB/IMDB ID?开启此项可确保与 Sonarr 的 Trash Guides 兼容。", + "Search VOD groups": "搜索 VOD 分组", "Season": "季", "Season #": "季号 #", "Season (Metadata)": "季度(元数据)", @@ -1765,59 +1849,74 @@ "Security scan failed": "安全扫描失败", "Seen": "已读", "Segment Duration": "切片时长", - "Select Episodes": "选择剧集", - "Select Existing Auth": "选择现有身份验证", - "Select Expiration Date, or leave empty for no expiration": "选择到期日期,留空则表示永久有效", - "Select Group": "选择分组", - "Select Movies": "选择电影", - "Select Permissions": "选择权限", - "Select VOD groups": "选择点播分组", "Select a Custom Playlist (multiple provider credentials can be configured to match source providers).": "选择自定义播放列表(支持配置多个提供商凭据,以匹配对应的源提供商)。", - "Select a Stream File Setting for VOD .strm file generation. ": "请选择用于生成 VOD .strm 文件的流文件配置。", - "Select a Stream File Setting for series .strm file generation.": "请选择用于生成剧集 .strm 文件的流文件配置。", - "Select a Stream File Setting profile for all VOD channels in this group. VOD-level settings take priority. Leave empty to use global settings.": "为该组内的所有 VOD 频道选择流文件配置。VOD 级设置优先,留空则沿用全局设置。", - "Select a Stream File Setting profile for all series in this category. Series-level settings take priority. Leave empty to use global settings.": "为此分类下的所有剧集选择流文件配置。剧集级设置优先,留空则沿用全局设置。", - "Select a Stream File Setting profile to override global/category settings for this series. Leave empty to use category or global settings.": "选择流文件配置以覆盖该剧集的全局或分类设置。留空则沿用分类或全局设置。", - "Select a Stream File Setting profile to override global/group settings for this VOD channel. Leave empty to use group or global settings. Priority: VOD > Group > Global.": "选择流文件配置以覆盖此 VOD 频道的全局或分组设置。留空则沿用分组或全局设置。优先级:VOD > 分组 > 全局。", + "Select additional playlists to include as failover sources. Leave empty to only merge channels within this playlist.": "选择要作为故障转移源的其他播放列表。留空则仅合并此列表内的频道。", "Select a group": "选择一个分组", "Select a media server...": "选择媒体服务器...", - "Select a playlist - only VODs in the selected playlist will be moved. Any VODs selected from another playlist will be ignored.": "选择播放列表 - 仅移动所选列表中的 VOD,跨列表选择的内容将被忽略。", + "Select an associated EPG channel for this channel.": "为此频道选择关联的 EPG 频道。", + "Select an auth to assign": "选择要分配的身份验证", "Select a playlist - only channels in the selected playlist will be moved. Any channels selected from another playlist will be ignored.": "选择播放列表 - 仅移动所选列表中的频道,跨列表选择的内容将被忽略。", + "Select a playlist - only VODs in the selected playlist will be moved. Any VODs selected from another playlist will be ignored.": "选择播放列表 - 仅移动所选列表中的 VOD,跨列表选择的内容将被忽略。", "Select a playlist or leave empty": "选择播放列表或保持留空", "Select a saved pattern...": "选择已保存的模式...", "Select a standard Playlist (only one set of alternative credentials can be configured).": "选择标准播放列表(仅支持配置一组备用凭据)。", + "Select a Stream File Setting for series .strm file generation.": "请选择用于生成剧集 .strm 文件的流文件配置。", + "Select a Stream File Setting for VOD .strm file generation. ": "请选择用于生成 VOD .strm 文件的流文件配置。", + "Select a Stream File Setting profile for all series in this category. Series-level settings take priority. Leave empty to use global settings.": "为此分类下的所有剧集选择流文件配置。剧集级设置优先,留空则沿用全局设置。", + "Select a Stream File Setting profile for all VOD channels in this group. VOD-level settings take priority. Leave empty to use global settings.": "为该组内的所有 VOD 频道选择流文件配置。VOD 级设置优先,留空则沿用全局设置。", + "Select a Stream File Setting profile to override global/category settings for this series. Leave empty to use category or global settings.": "选择流文件配置以覆盖该剧集的全局或分类设置。留空则沿用分类或全局设置。", + "Select a Stream File Setting profile to override global/group settings for this VOD channel. Leave empty to use group or global settings. Priority: VOD > Group > Global.": "选择流文件配置以覆盖此 VOD 频道的全局或分组设置。留空则沿用分组或全局设置。优先级:VOD > 分组 > 全局。", "Select a transcoding profile to apply to Live streams for external clients (VLC, Kodi, etc.). Does not affect the in-app player. Leave empty for direct stream proxying.": "选择外部客户端(VLC、Kodi 等)直播时使用的转码配置。不影响应用内播放器,留空则使用直接流代理。", "Select a transcoding profile to apply to VOD and Series streams for external clients (VLC, Kodi, etc.). Does not affect the in-app player. Leave empty for direct stream proxying.": "选择外部客户端(VLC、Kodi 等)播放 VOD 和剧集时使用的转码配置。不影响应用内播放器,留空则使用直接流代理。", "Select a tuner to remove from the DVR. If it is the last tuner, the entire DVR will be removed.": "选择要从 DVR 中移除的调谐器。若是最后一个,则整个 DVR 将被移除。", - "Select additional playlists to include as failover sources. Leave empty to only merge channels within this playlist.": "选择要作为故障转移源的其他播放列表。留空则仅合并此列表内的频道。", - "Select an associated EPG channel for this channel.": "为此频道选择关联的 EPG 频道。", - "Select an auth to assign": "选择要分配的身份验证", "Select auths or leave empty": "选择授权或留空", "Select categories": "选择分类", "Select category": "选择分类", "Select content source": "选择内容来源", + "Selected assets deleted": "选定的资源已删除", + "Selected categories disabled": "所选分类已禁用", + "Selected categories enabled": "已启用所选分类", + "Selected category series disabled": "所选分类剧集已禁用", + "Selected category series enabled": "已启用所选分类剧集", + "Selected channels disabled": "所选频道已禁用", + "Selected channels enabled": "已启用所选频道", + "Selected EPGs are processing": "所选 EPG 正在处理中", + "Selected episodes disabled": "选定的剧集已禁用", + "Selected episodes enabled": "已启用所选剧集", + "Selected group channels disabled": "所选分组频道已禁用", + "Selected group channels enabled": "已启用所选分组频道", + "Selected groups disabled": "所选分组已禁用", + "Selected groups enabled": "已启用所选分组", + "Selected logo cache refreshed": "所选 Logo 缓存已刷新", + "Selected merged EPGs are processing": "所选合并 EPG 正在处理中", + "Selected playlists are processing": "所选播放列表正在处理中", + "Selected series cache refreshed": "所选剧集缓存已刷新", + "Selected series disabled": "所选剧集已禁用", + "Selected series enabled": "已启用所选剧集", + "Selected VOD cache refreshed": "所选 VOD 缓存已刷新", "Select encryption type (optional)": "选择加密类型(可选)", + "Select Episodes": "选择剧集", "Select episodes to add to this network. Once added, you can sort them using drag and drop in the main table.": "选择要添加到此频道的剧集。添加后,你可以在列表中通过拖放调整顺序。", + "Select Existing Auth": "选择现有身份验证", + "Select Expiration Date, or leave empty for no expiration": "选择到期日期,留空则表示永久有效", + "Select Group": "选择分组", "Select group": "选择分组", "Select image": "选择图片", "Select live groups": "选择直播分组", "Select master channel": "选择主频道", + "Select Movies": "选择电影", "Select movies to add to this network. Once added, you can sort them using drag and drop in the main table.": "选择要添加到此频道的电影。添加后,你可以在列表中通过拖放调整顺序。", - "Select the EPG you would like to apply changes to.": "选择要应用更改的 EPG。", - "Select the EPG you would like to apply the reset to.": "选择要执行重置的 EPG。", - "Select the EPG you would like to assign this post process to.": "选择要分配此后处理任务的 EPG。", - "Select the EPG you would like to map from.": "选择要作为映射源的 EPG。", - "Select the Playlist you would like to assign this post process to.": "选择要分配此后处理任务的播放列表。", - "Select the Playlist you would like to fetch Series metadata for.": "选择要获取剧集元数据的播放列表。", - "Select the Playlist you would like to fetch TMDB IDs for.": "选择要获取 TMDB ID 的播放列表。", - "Select the Playlist you would like to fetch VOD metadata for.": "选择要获取 VOD 元数据的播放列表。", - "Select the Playlist you would like to sync Series stream files for.": "选择要同步剧集流文件的播放列表。", - "Select the Series you would like to apply changes to.": "选择要应用更改的剧集。", + "Select Permissions": "选择权限", + "Select series categories": "选择系列类别", "Select the backup file you would like to upload.": "选择要上传的备份文件。", "Select the backup you would like to restore.": "选择要恢复的备份记录。", "Select the category you would like to move the series to.": "选择要将剧集移入的分类。", "Select the channel attributes you want to copy to the target playlist.": "选择要复制到目标列表的频道属性。", "Select the default transcoding profiles used when playing streams in the in-app player.": "选择应用内播放器默认使用的转码配置。", + "Select the EPG you would like to apply changes to.": "选择要应用更改的 EPG。", + "Select the EPG you would like to apply the reset to.": "选择要执行重置的 EPG。", + "Select the EPG you would like to assign this post process to.": "选择要分配此后处理任务的 EPG。", + "Select the EPG you would like to map from.": "选择要作为映射源的 EPG。", "Select the group you would like to move the channels to.": "选择要将频道移入的分组。", "Select the playlist Series you would like to add.": "选择要添加的播放列表剧集。", "Select the playlist this import is associated with.": "选择与此导入关联的播放列表。", @@ -1827,19 +1926,26 @@ "Select the playlist you would like to apply changes to.": "选择要应用更改的播放列表。", "Select the playlist you would like to apply the reset to.": "选择要执行重置的播放列表。", "Select the playlist you would like to assign this auth to.": "选择要分配此身份验证的播放列表。", + "Select the Playlist you would like to assign this post process to.": "选择要分配此后处理任务的播放列表。", "Select the playlist you would like to export channels for.": "选择要导出频道的播放列表。", + "Select the Playlist you would like to fetch Series metadata for.": "选择要获取剧集元数据的播放列表。", + "Select the Playlist you would like to fetch TMDB IDs for.": "选择要获取 TMDB ID 的播放列表。", + "Select the Playlist you would like to fetch VOD metadata for.": "选择要获取 VOD 元数据的播放列表。", "Select the playlist you would like to import series from.": "选择要从中导入剧集的播放列表。", "Select the playlist you would like to map to.": "选择要映射到的目标播放列表。", + "Select the Playlist you would like to sync Series stream files for.": "选择要同步剧集流文件的播放列表。", + "Select the Series you would like to apply changes to.": "选择要应用更改的剧集。", "Select the target playlist and channel attributes to copy": "选择目标播放列表及要复制的频道属性", + "Select VOD groups": "选择点播分组", + "Select what your plugin will participate in. Each capability adds a required PHP interface to your Plugin class.": "请选择插件需要支持的能力。每项能力都会要求在你的插件类中实现相应的 PHP 接口。", "Select what you would like to find and replace in the selected category names.": "请选择要在所选分类名称中查找并替换的内容。", "Select what you would like to find and replace in the selected channels.": "请选择要在所选频道中查找并替换的内容。", "Select what you would like to find and replace in the selected epg channels.": "请选择要在所选 EPG 频道中查找并替换的内容。", "Select what you would like to find and replace in the selected group names.": "请选择要在所选分组名称中查找并替换的内容。", - "Select what you would like to find and replace in your VOD group names.": "请选择要在 VOD 分组名称中查找并替换的内容。", "Select what you would like to find and replace in your channels list.": "请选择要在频道列表中查找并替换的内容。", "Select what you would like to find and replace in your live group names.": "请选择要在直播分组名称中查找并替换的内容。", "Select what you would like to find and replace in your series category names.": "请选择要在剧集分类名称中查找并替换的内容。", - "Select what your plugin will participate in. Each capability adds a required PHP interface to your Plugin class.": "请选择插件需要支持的能力。每项能力都会要求在你的插件类中实现相应的 PHP 接口。", + "Select what you would like to find and replace in your VOD group names.": "请选择要在 VOD 分组名称中查找并替换的内容。", "Select whether to send a request to a URL, execute a local script, or send an email.": "选择操作类型:发送 URL 请求、执行本地脚本或发送邮件。", "Select which additional tools the AI assistant can use. Core tools (navigation, memory) are always available.": "选择 AI 助手可调用的附加工具。核心工具(导航、记忆)始终可用。", "Select which libraries to import from your media server": "选择要从媒体服务器导入的媒体库", @@ -1847,85 +1953,88 @@ "Select which tools the AI assistant can use.": "选择 AI 助手可使用的工具。", "Select your AI provider and configure the API credentials.": "选择 AI 服务商并配置 API 凭据。", "Select your SchedulesDirect lineup": "选择你的 Schedules Direct 频道方案", - "Selected EPGs are processing": "所选 EPG 正在处理中", - "Selected VOD cache refreshed": "所选 VOD 缓存已刷新", - "Selected assets deleted": "选定的资源已删除", - "Selected categories disabled": "所选分类已禁用", - "Selected categories enabled": "已启用所选分类", - "Selected category series disabled": "所选分类剧集已禁用", - "Selected category series enabled": "已启用所选分类剧集", - "Selected channels disabled": "所选频道已禁用", - "Selected channels enabled": "已启用所选频道", - "Selected episodes disabled": "选定的剧集已禁用", - "Selected episodes enabled": "已启用所选剧集", - "Selected group channels disabled": "所选分组频道已禁用", - "Selected group channels enabled": "已启用所选分组频道", - "Selected groups disabled": "所选分组已禁用", - "Selected groups enabled": "已启用所选分组", - "Selected logo cache refreshed": "所选 Logo 缓存已刷新", - "Selected merged EPGs are processing": "所选合并 EPG 正在处理中", - "Selected playlists are processing": "所选播放列表正在处理中", - "Selected series cache refreshed": "所选剧集缓存已刷新", - "Selected series disabled": "所选剧集已禁用", - "Selected series enabled": "已启用所选剧集", - "Send Test Email": "发送测试电子邮件", "Send as GET or POST request.": "作为 GET 或 POST 请求发送。", "Send as JSON body": "作为 JSON 正文发送", + "Send Test Email": "发送测试电子邮件", "Send the notification to yourself as well (for testing purposes)": "同时也向自己发送通知(用于测试)", "Send without body": "不带正文发送", "Series": "剧集", "Series .strm files are being synced": "剧集 .strm 文件正在同步", + "Series are being processed": "剧集正在处理中", + "Series categories": "系列分类", "Series Category": "剧集分类", "Series Details": "剧集详情", - "Series Processing": "剧集处理", - "Series Sync": "剧集同步", - "Series are being processed": "剧集正在处理中", "Series episodes disabled": "剧集内容已禁用", "Series episodes enabled": "剧集内容已启用", "Series have been added and are being processed.": "剧集已添加并正在处理中。", "Series is being processed": "剧集正在处理中", "Series moved to category": "剧集已移至分类", "Series poster URL": "剧集海报 URL", + "Series Processing": "剧集处理", "Series processing": "剧集处理", "Series record not found.": "未找到剧集记录。", "Series stream file settings": "剧集流文件配置", + "Series Sync": "剧集同步", "Series to Import": "待导入剧集", "Server": "服务器", "Server Configuration": "服务器配置", "Server Info": "服务器信息", "Server Type": "服务器类型", - "Set Timeshift": "设置时移", - "Set logo URL": "设置 Logo URL", + "Set EPG shift": "设置 EPG 移位", "Set logo override URL": "设置 Logo 覆盖 URL", + "Set logo URL": "设置 Logo URL", "Set poster URL": "设置海报 URL", "Set preferred icon to EPG": "将首选图标设置为 EPG", + "Set the EPG time shift (tvg-shift) for the selected channels. This shifts the EPG program schedule by the specified number of hours.": "设置所选频道的 EPG 时移 (tvg-shift)。这会将 EPG 节目时间表移动指定的小时数。", "Set the timeshift (in hours) for the selected channels. Use 0 to disable catch-up.": "为所选频道设置时移(以小时为单位)。设为 0 以禁用回看功能。", "Set the timeshift value for the selected channels. Use 0 to disable catch-up.": "为所选频道设置时移值。设为 0 以禁用回看功能。", + "Set Timeshift": "设置时移", "Set timeshift": "设置时移", - "Set to 0 (or clear value) for unlimited.": "设为 0(或清除值)表示无限制。", - "Set to 0 for unlimited streams.": "设为 0 表示不限制串流数。", "Settings": "设置", "Settings for automatically enabling new content": "自动启用新内容的设置", "Settings saved": "设置已保存", "Settings used when mapping EPG to a Playlist.": "将 EPG 映射到播放列表时使用的设置。", + "Set to 0 (or clear value) for unlimited.": "设为 0(或清除值)表示无限制。", + "Set to 0 for unlimited streams.": "设为 0 表示不限制串流数。", + "SHA-256 Checksum": "SHA-256 校验和", + "Shift the EPG time for the selected channels by this many hours. Use values like -2, -1, 0, 1, 2, etc. Use 0 to reset.": "将所选频道的 EPG 时间移动几个小时。使用 -2、-1、0、1、2 等值。使用 0 进行重置。", "Short description for the plugin manifest. Leave blank for a default.": "插件清单的简短描述。留空则使用默认值。", "Short description of the content.": "内容的简短描述。", "Show breadcrumbs": "显示面包屑导航", "Show breadcrumbs under the page titles": "在页面标题下方显示层级路径", + "shown": "显示", "Silence Detection Settings": "静默检测设置", "Silence duration (seconds)": "静默持续时长(秒)", "Silence threshold (dB)": "静默阈值 (dB)", "Simple authentication for playlist access.": "播放列表访问的简单身份验证。", "Size": "大小", "Skip channels without EPG ID": "跳过没有 EPG ID 的频道", + "Smart": "聪明的", + "Smart channel": "智能通道", + "Smart channel created": "智能频道创建", + "Smart channels cannot be sources": "智能渠道不能作为来源", + "Smart channels must be created from sources within a single playlist. Narrow your selection and try again.": "智能频道必须从单个播放列表中的源创建。缩小您的选择范围并重试。", + "Smart channel without failovers won't stream.": "没有故障转移的智能通道将不会进行流传输。", + "Smart channel — streams the highest-ranked failover automatically": "智能通道 — 自动传输排名最高的故障转移", + "SMTP": "SMTP", + "SMTP Encryption": "SMTP 加密", + "SMTP From Address": "SMTP 发件人地址", + "SMTP Host": "SMTP 主机", + "SMTP Password": "SMTP 密码", + "SMTP Port": "SMTP 端口", + "SMTP Settings": "SMTP 设置", + "SMTP Username": "SMTP 用户名", + "socks5://user:pass@host:port or http://user:pass@host:port": "socks5://user:pass@host:port 或 http://user:pass@host:port", + "Some channels were skipped": "某些频道被跳过", "Sort": "排序", + "Sort all channels in this group alphabetically? This will update the sort order.": "是否按字母顺序排列该分组中的所有频道?这将更新排序顺序。", "Sort Alpha": "按字母顺序排序", "Sort Alpha Configs": "按字母顺序配置", "Sort By": "排序方式", + "Sort now": "立即排序", "Sort Order": "排序顺序", - "Sort all channels in this group alphabetically? This will update the sort order.": "是否按字母顺序排列该分组中的所有频道?这将更新排序顺序。", - "Sort the selected VOD alphabetically? This will update their sort order within this custom playlist.": "按字母顺序排序选定的VOD?这将更新其在自定义播放列表中的排序。", "Sort the selected channels alphabetically? This will update their sort order within this custom playlist.": "按字母顺序排序选定的频道?这将更新其在自定义播放列表中的排序。", + "Sort the selected VOD alphabetically? This will update their sort order within this custom playlist.": "按字母顺序排序选定的VOD?这将更新其在自定义播放列表中的排序。", "Source": "来源", "Source EPGs": "源 EPG", "Source Metadata": "源元数据", @@ -1940,39 +2049,39 @@ "Standard Playlist": "标准播放列表", "Start Broadcast": "开始推流", "Start Broadcasting": "开始推流", - "Start Number": "起始编号", - "Start On Viewer Connection": "当用户连接时启动", "Start broadcasting for the selected networks.": "开始为所选虚拟频道推流。", "Start continuous HLS broadcasting": "开始连续 HLS 推流", - "Start probing": "开始侦测", "Started": "已启动", "Started At": "开始于", + "Start Number": "起始编号", + "Start On Viewer Connection": "当用户连接时启动", + "Start probing": "开始侦测", "Station ID": "频道 ID (Station ID)", "Status": "状态", - "Status has been reset for the selected Playlists.": "所选播放列表的状态已重置。", "Status has been reset for the selected media servers.": "所选媒体服务器的状态已重置。", + "Status has been reset for the selected Playlists.": "所选播放列表的状态已重置。", "Still running": "仍在运行", "Stop Broadcast": "停止推流", "Stop Broadcasting": "停止推流", - "Stop Run": "停止运行", "Stop broadcasting for the selected networks.": "停止为所选虚拟频道推流。", "Stop oldest stream when limit reached": "达到限制时停止最旧的串流", + "Stop Run": "停止运行", "Stop the current broadcast": "停止当前推流", "Stop the current broadcast. Viewers will be disconnected.": "停止当前推流,观众将被断开连接。", + "Stream Backend": "流后端", "Stream File Setting": "流文件配置", "Stream File Setting Profile": "流文件配置方案", "Stream File Settings": "流文件配置", - "Stream Format": "流格式", - "Stream Monitor": "流状态监控", - "Stream Output": "流输出", - "Stream Probing": "流探测", - "Stream Profile": "流配置方案", - "Stream Profiles": "流配置方案列表", - "Stream URL": "流地址", "Stream file settings": "流文件配置", "Stream file settings define how .strm files are generated and organized. They can be assigned globally in Settings, to Groups/Categories, or directly to individual Series/VOD channels. Priority: Direct > Group/Category > Global.": "流文件配置定义了 .strm 文件的生成与组织方式。你可以在“设置”中进行全局分配,也可以针对分组/分类或特定的剧集/VOD 频道进行设置。优先级:直接设置 > 分组/分类 > 全局设置。", + "Stream Format": "流格式", + "Streaming notes from running and recent jobs. Open any run to inspect the payload, result snapshot, and full trail.": "来自当前及近期任务的流处理日志。点击任意记录即可查看负载详情、结果快照及完整追踪日志。", + "Streaming Output": "流媒体输出", + "Stream Monitor": "流状态监控", "Stream not probed": "未探测到流信息", + "Stream Output": "流输出", "Stream probed": "流探测完成", + "Stream Probing": "流探测", "Stream probing completed": "流探测已完成", "Stream probing disabled": "流探测已禁用", "Stream probing enabled": "流探测已启用", @@ -1981,10 +2090,11 @@ "Stream probing has been enabled for the selected channels.": "所选频道的流探测功能已启用。", "Stream probing is running in the background. You will be notified once the process is complete.": "流探测正在后台运行,任务完成后你将收到通知。", "Stream probing started": "流探测已启动", + "Stream Profile": "流配置方案", + "Stream Profiles": "流配置方案列表", "Stream profiles are used to define how streams are transcoded by the proxy. They can be assigned to playlists to enable transcoding for those playlists. If a playlist does not have a stream profile assigned, direct stream proxying will be used.": "流配置方案用于定义代理服务器的转码方式。你可以将其分配给播放列表以启用转码;若未分配,系统将使用直接流代理模式。", - "Streaming Output": "流媒体输出", - "Streaming notes from running and recent jobs. Open any run to inspect the payload, result snapshot, and full trail.": "来自当前及近期任务的流处理日志。点击任意记录即可查看负载详情、结果快照及完整追踪日志。", "Streams": "流列表", + "Stream URL": "流地址", "Strip all catch-up related attributes from the playlist output and Xtream API. Useful when your provider\\'s catch-up doesn\\'t work or is unreliable.": "从播放列表输出和 Xtream API 中去除所有与回看相关的属性。当您的提供商回看功能不可用或不稳定时非常有用。", "Structured Context": "结构化上下文", "Subject line for the email (optional).": "电子邮件主题(可选)。", @@ -1995,57 +2105,46 @@ "Successfully connected to TMDB API!": "成功连接至 TMDB API!", "Summary": "摘要", "Sync .strm files now? This will generate .strm files for enabled series.": "立即同步 .strm 文件吗?这将为已启用的剧集生成 .strm 文件。", + "Sync and Process": "同步并处理", + "Sync category series .strm files now? This will generate .strm files for the enabled series at the path set for the series.": "立即同步分类剧集 .strm 文件吗?这将在设定的路径下为已启用的剧集生成 .strm 文件。", + "Synced": "已同步", + "Synced at": "同步于", "Sync Failed": "同步失败", + "Sync group VOD channels .strm files now? This will generate .strm files for the group channels.": "立即同步分组 VOD 频道 .strm 文件吗?这将为该分组的频道生成 .strm 文件。", "Sync Information": "同步信息", "Sync Interval": "同步间隔", "Sync Invalidation": "同步失效", + "Sync invalidation threshold": "同步失效阈值", "Sync Location": "同步位置", "Sync Logs": "同步日志", "Sync Media Server": "同步媒体服务器", "Sync Mode": "同步模式", + "Sync movies as VOD channels": "将电影同步为 VOD 频道", "Sync Now": "立即同步", "Sync Options": "同步选项", "Sync Progress": "同步进度", "Sync Schedule": "同步计划", "Sync Selected": "同步所选内容", - "Sync Series .strm files": "同步剧集 .strm 文件", - "Sync Started": "同步已开始", - "Sync Status": "同步状态", - "Sync TV series with episodes": "同步剧集内容", - "Sync Time": "同步耗时", - "Sync VOD .strm file": "同步 VOD .strm 文件", - "Sync VOD .strm files": "同步 VOD .strm 文件", - "Sync VOD .strm files now? This will generate .strm files for this VOD channel at the path set for this channel.": "立即同步 VOD .strm 文件吗?这将在为此频道设置的路径中生成 .strm 文件。", - "Sync and Process": "同步并处理", - "Sync category series .strm files now? This will generate .strm files for the enabled series at the path set for the series.": "立即同步分类剧集 .strm 文件吗?这将在设定的路径下为已启用的剧集生成 .strm 文件。", - "Sync group VOD channels .strm files now? This will generate .strm files for the group channels.": "立即同步分组 VOD 频道 .strm 文件吗?这将为该分组的频道生成 .strm 文件。", - "Sync invalidation threshold": "同步失效阈值", - "Sync movies as VOD channels": "将电影同步为 VOD 频道", - "Sync selected VOD .strm files now? This will generate .strm files for the selected VOD channels at the path set for the channels.": "立即同步所选 VOD .strm 文件?这将为所选 VOD 频道在设定的路径下生成 .strm 文件。", "Sync selected category series .strm files now? This will generate .strm files for the enabled series at the path set for the series.": "立即同步所选分类剧集 .strm 文件?这将为已启用的剧集在设定的路径下生成 .strm 文件。", "Sync selected category series .strm files now? This will generate .strm files for the selected series at the path set for the series.": "立即同步所选分类剧集 .strm 文件?这将为所选剧集在设定的路径下生成 .strm 文件。", "Sync selected group VOD channels .strm files now? This will generate .strm files for the group channels.": "立即同步所选分组 VOD 频道 .strm 文件?这将为该分组的频道生成 .strm 文件。", "Sync selected series .strm files now? This will generate .strm files for the selected series at the path set for the series.": "立即同步所选剧集 .strm 文件?这将为所选剧集在设定的路径下生成 .strm 文件。", + "Sync selected VOD .strm files now? This will generate .strm files for the selected VOD channels at the path set for the channels.": "立即同步所选 VOD .strm 文件?这将为所选 VOD 频道在设定的路径下生成 .strm 文件。", + "Sync Series .strm files": "同步剧集 .strm 文件", "Sync series .strm files now? This will generate .strm files for this series at the path set for this series.": "立即同步剧集 .strm 文件吗?这将在为此剧集设置的路径中生成 .strm 文件。", + "Sync Started": "同步已开始", + "Sync Status": "同步状态", "Sync stream files": "同步流文件", "Sync stream files for all enabled Playlist Series? If disabled, it will only sync for Series of the selected Playlist.": "是否同步所有已启用的播放列表剧集的流文件?如果禁用,则仅同步所选播放列表中的剧集。", + "Sync Time": "同步耗时", "Sync time": "同步时间", - "Synced": "已同步", - "Synced at": "同步于", + "Sync TV series with episodes": "同步剧集内容", + "Sync VOD .strm file": "同步 VOD .strm 文件", + "Sync VOD .strm files": "同步 VOD .strm 文件", + "Sync VOD .strm files now? This will generate .strm files for this VOD channel at the path set for this channel.": "立即同步 VOD .strm 文件吗?这将在为此频道设置的路径中生成 .strm 文件。", "System": "系统", "System Prompt": "系统提示词", "System Resources": "系统资源", - "TMDB": "TMDB", - "TMDB API Key": "TMDB API 密钥", - "TMDB API Key Required": "需要 TMDB API 密钥", - "TMDB ID": "TMDB ID", - "TMDB ID format": "TMDB ID 格式", - "TMDB Integration": "TMDB 集成", - "TMDB Metadata Applied": "TMDB 元数据已应用", - "TMDB Search Started": "TMDB 搜索已开始", - "TMDB/TVDB": "TMDB/TVDB", - "TVDB ID": "TVDB ID", - "TVG ID/Stream ID (default)": "TVG ID/串流 ID(默认)", "Tags": "标签", "Target": "目标", "Target Playlist": "目标播放列表", @@ -2053,40 +2152,38 @@ "Technical Details": "技术细节", "Test": "测试", "Test Connection": "测试连接", + "Test connection": "测试连接", "Test Connection & Discover Libraries": "测试连接并发现媒体库", + "Test credentials and auto-detect max connections": "测试凭据并自动检测最大连接数", "Test Email Sent": "测试邮件已发送", "Test Primary": "测试主账户", - "Test WebSocket": "测试 WebSocket", - "Test connection": "测试连接", - "Test credentials and auto-detect max connections": "测试凭据并自动检测最大连接数", "Test primary account credentials and detect max connections": "测试主账户凭据并检测最大连接数", "Test resolver connection": "测试解析器连接", + "Test WebSocket": "测试 WebSocket", "The \"From\" email address for outgoing emails. Defaults to no-reply@m3u-editor.dev.": "外发电子邮件的“发件人”地址。默认为 no-reply@m3u-editor.dev。", - "The AI provider to use for the Copilot assistant.": "用于 AI 助手的提供商。", - "The EPG file cache has been successfully cleared.": "EPG 文件缓存已成功清除。", - "The EPG map has been disabled for the selected channels.": "所选频道的 EPG 映射已禁用。", - "The EPG map has been re-enabled for the selected channels.": "已为所选频道重新启用 EPG 映射。", - "The EPG mapping process has been initiated for the selected mappings.": "已针对所选映射启动 EPG 映射程序。", - "The EPG mapping process has been initiated.": "EPG 映射程序已启动。", - "The EPG mapping process has been re-initiated.": "EPG 映射程序已重新启动。", - "The EPG source ID to match against. Always ask the user which EPG source to use before calling this tool.": "用于匹配的 EPG 源 ID。在调用此工具前,请务必确认用户要使用的 EPG 源。", - "The Movie Database ID.": "TMDB ID。", - "The TMDB ID lookup has been started. You will be notified when it is complete.": "TMDB ID 查询已开始,完成后将通知您。", - "The VOD metadata fetching and processing has been started for the group channels. Only enabled channels will be processed. You will be notified when it is complete.": "已开始获取并处理频道组的 VOD 元数据。仅处理已启用的频道,完成后将通知您。", - "The VOD metadata fetching and processing has been started for the selected group channels. Only enabled channels will be processed. You will be notified when it is complete.": "已开始获取并处理所选分组频道的 VOD 元数据。仅处理已启用的频道,完成后将通知您。", - "The VOD metadata fetching and processing has been started. You will be notified when it is complete.": "VOD 元数据获取与处理已开始,完成后将通知您。", "The action to perform: \"select\", \"update\", or \"delete\".": "要执行的操作:\"select\"、\"update\" 或 \"delete\"。", + "The AI provider to use for the Copilot assistant.": "用于 AI 助手的提供商。", "The category series have been moved to the chosen category.": "分类剧集已移至所选分类。", "The channel group name to process (e.g. \"UNITED STATES\").": "要处理的频道分组名称(例如 “UNITED STATES”)。", "The channels in the selected groups have been recounted sequentially.": "所选分组中的频道已按顺序重新统计。", "The channels in this group have been recounted.": "该分组中的频道已重新统计。", "The channels in this group have been sorted alphabetically.": "该分组中的频道已按字母顺序排序。", + "The container format FFmpeg will produce. Must match the -f muxer argument in your FFmpeg template above.": "FFmpeg 将生成的容器格式。必须与上面 FFmpeg 模板中的 -f muxer 参数匹配。", "The container format for the output stream.": "输出流的封装格式。", + "The container format Streamlink will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format Streamlink actually produces for the selected quality.": "Streamlink 将输出的容器格式。这会设置 URL 扩展名(例如 .ts、.mp4),以便播放器知道如何处理流。必须与 Streamlink 实际为所选质量生成的格式匹配。", + "The container format yt-dlp will output. This sets the URL extension (e.g. .ts, .mp4) so players know how to handle the stream. Must match the format produced by your yt-dlp format selector.": "将输出容器格式 yt-dlp。这会设置 URL 扩展名(例如 .ts、.mp4),以便播放器知道如何处理流。必须与 yt-dlp 格式选择器生成的格式匹配。", "The current category series have been disabled.": "当前分类的剧集已被禁用。", "The current category series have been enabled.": "当前分类的剧集已启用。", "The database table to query.": "要查询的数据库表。", "The default transcoding profile used for the in-app player for Live content. Leave empty to disable transcoding (some streams may not be playable in the player).": "应用内播放器播放直播内容时默认使用的转码配置。留空则禁用转码(部分串流可能无法在播放器中播放)。", "The default transcoding profile used for the in-app player for VOD/Series content. Leave empty to disable transcoding (some streams may not be playable in the player).": "应用内播放器播放 VOD/剧集内容时默认使用的转码配置。留空则禁用转码(部分串流可能无法在播放器中播放)。", + "The EPG file cache has been successfully cleared.": "EPG 文件缓存已成功清除。", + "The EPG map has been disabled for the selected channels.": "所选频道的 EPG 映射已禁用。", + "The EPG map has been re-enabled for the selected channels.": "已为所选频道重新启用 EPG 映射。", + "The EPG mapping process has been initiated.": "EPG 映射程序已启动。", + "The EPG mapping process has been initiated for the selected mappings.": "已针对所选映射启动 EPG 映射程序。", + "The EPG mapping process has been re-initiated.": "EPG 映射程序已重新启动。", + "The EPG source ID to match against. Always ask the user which EPG source to use before calling this tool.": "用于匹配的 EPG 源 ID。在调用此工具前,请务必确认用户要使用的 EPG 源。", "The event that will trigger this post process.": "触发此后处理任务的事件。", "The file extension of the VOD container (e.g., mp4, mkv, etc.).": "VOD 封装格式的文件扩展名(如 mp4、mkv 等)。", "The group channels have been disabled.": "分组频道已被禁用。", @@ -2096,14 +2193,15 @@ "The groups channels have been disabled.": "分组频道已被禁用。", "The latest execution and its immediate outcome.": "最近一次执行及其直接结果。", "The latest plugin executions across all installed plugins.": "所有已安装插件的最新运行记录。", - "The logo URL has been updated for the selected networks.": "所选虚拟频道的 Logo URL 已更新。", "The logo cache has been cleared. Logos will be fetched again on next request wherever logo proxy is enabled.": "Logo 缓存已清除。在启用了 Logo 代理的情况下,下次请求时将重新获取图标。", - "The logo override URL has been updated for the selected VOD channels.": "所选 VOD 频道的 Logo 覆盖 URL 已更新。", "The logo override URL has been updated for the selected channels.": "所选频道的 Logo 覆盖 URL 已更新。", + "The logo override URL has been updated for the selected VOD channels.": "所选 VOD 频道的 Logo 覆盖 URL 已更新。", + "The logo URL has been updated for the selected networks.": "所选虚拟频道的 Logo URL 已更新。", "The merge has been disabled for the selected channels. They will not be merged during \"Merge Same ID\" jobs.": "所选频道的合并功能已禁用。在执行“合并相同 ID”任务时将忽略这些频道。", "The merge has been re-enabled for the selected channels. They can now be merged during \"Merge Same ID\" jobs.": "所选频道已重新启用合并功能,现在可以在执行“合并相同 ID”任务时进行合并。", "The model to use. Leave blank to use the provider default.": "要使用的模型。留空则使用提供商默认值。", "The most recent plugin job and where to inspect it.": "最近的插件任务及其检查位置。", + "The Movie Database ID.": "TMDB ID。", "The original title in the source language.": "源语言的原始标题。", "The playlist ID chosen by the user. Omit on the first call — you must list playlists first so the user can select one.": "用户选择的播放列表 ID。首次调用时请省略 —— 您必须先列出播放列表供用户选择。", "The playlist ID containing the channels to match.": "包含待匹配频道的播放列表 ID。", @@ -2127,10 +2225,6 @@ "The scrubber has been initiated and will run in the background.": "失效检测工具已启动,将在后台运行。", "The scrubber has been re-initiated.": "失效检测工具已重新启动。", "The search term to look for": "要查找的搜索词", - "The selected EPGs are being processed in the background. Depending on the size of the guide data, this may take a while.": "所选 EPG 正在后台处理。根据指南数据的大小,可能需要一段时间。", - "The selected VOD have been added to the custom group.": "所选 VOD 已添加至自定义分组。", - "The selected VOD have been sorted alphabetically.": "选定的VOD已按字母顺序排序。", - "The selected VODs have been moved to the chosen group.": "所选 VOD 已移至所选分组。", "The selected categories have been disabled.": "所选分类已被禁用。", "The selected categories have been enabled.": "所选分类已启用。", "The selected category series have been disabled.": "所选分类的剧集已被禁用。", @@ -2144,6 +2238,7 @@ "The selected channels have been recounted.": "所选频道已重新统计。", "The selected channels have been sorted alphabetically.": "选定的频道已按字母顺序排序。", "The selected channels were recounted for this custom playlist only.": "仅针对此自定义播放列表重新统计所选频道。", + "The selected EPGs are being processed in the background. Depending on the size of the guide data, this may take a while.": "所选 EPG 正在后台处理。根据指南数据的大小,可能需要一段时间。", "The selected episodes have been disabled.": "所选剧集已被禁用。", "The selected episodes have been enabled.": "所选剧集已启用。", "The selected group channels have been disabled.": "所选分组的频道已被禁用。", @@ -2159,20 +2254,26 @@ "The selected series have been detached from the custom playlist.": "所选剧集已从自定义播放列表中分离。", "The selected series have been disabled.": "所选剧集已被禁用。", "The selected series have been enabled.": "所选剧集已启用。", + "The selected VOD have been added to the custom group.": "所选 VOD 已添加至自定义分组。", + "The selected VOD have been sorted alphabetically.": "选定的VOD已按字母顺序排序。", + "The selected VODs have been moved to the chosen group.": "所选 VOD 已移至所选分组。", + "These plugins have issues that need your attention — they may be blocked, modified, invalid, or incomplete.": "这些插件存在需要注意的问题 —— 它们可能已被屏蔽、修改、无效或不完整。", "The series episodes have been disabled.": "该剧集的剧集内容已被禁用。", "The series episodes have been enabled.": "该剧集的剧集内容已启用。", "The series has been moved to the chosen category.": "该剧集已移至所选分类。", "The series have been moved to the chosen category.": "剧集已移至所选分类。", + "These settings are used by hook-triggered runs, scheduled runs, and as defaults for manual actions.": "这些设置用于钩子触发运行、计划运行,并作为手动操作的默认值。", "The starting channel number.": "起始频道号。", "The system prompt sent to the AI on every conversation to configure its behaviour.": "每次对话时发送给 AI 的系统提示词,用于配置其行为。", "The title from metadata info.": "元数据信息中的标题。", + "The TMDB ID lookup has been started. You will be notified when it is complete.": "TMDB ID 查询已开始,完成后将通知您。", "The type of item to assign this post process to.": "此后处理任务分配到的项目类型。", "The type of playlist to assign this auth to.": "此身份验证分配到的播放列表类型。", - "The worker will stop the run at the next safe checkpoint.": "工作进程将在下一个安全检查点停止运行。", - "The year of the VOD content.": "VOD 内容的年份。", - "These plugins have issues that need your attention — they may be blocked, modified, invalid, or incomplete.": "这些插件存在需要注意的问题 —— 它们可能已被屏蔽、修改、无效或不完整。", - "These settings are used by hook-triggered runs, scheduled runs, and as defaults for manual actions.": "这些设置用于钩子触发运行、计划运行,并作为手动操作的默认值。", - "This URL must be reachable from your Plex server. Use your machine\\'s LAN IP, not localhost.": "此 URL 必须能被您的 Plex 服务器访问。请使用机器的局域网 IP,而非 localhost。", + "The VOD metadata fetching and processing has been started. You will be notified when it is complete.": "VOD 元数据获取与处理已开始,完成后将通知您。", + "The VOD metadata fetching and processing has been started for the group channels. Only enabled channels will be processed. You will be notified when it is complete.": "已开始获取并处理频道组的 VOD 元数据。仅处理已启用的频道,完成后将通知您。", + "The VOD metadata fetching and processing has been started for the selected group channels. Only enabled channels will be processed. You will be notified when it is complete.": "已开始获取并处理所选分组频道的 VOD 元数据。仅处理已启用的频道,完成后将通知您。", + "The worker will stop the run at the next safe checkpoint.": "工作进程将在下一个安全检查点停止运行。", + "The year of the VOD content.": "VOD 内容的年份。", "This action will permanently delete all series associated with the playlist. Proceed with caution.": "此操作将永久删除与该播放列表关联的所有剧集。请谨慎操作。", "This channel hasn't been probed yet. Run a probe to capture stream details.": "该频道尚未被探测。运行探测器以捕获流详细信息。", "This is a development/testing plugin": "这是一个开发/测试插件", @@ -2184,6 +2285,8 @@ "This run has no summary yet. Use the payload, result, and log stream below to inspect what happened.": "本次运行尚无摘要。请使用下方的负载、结果和日志流来检查执行情况。", "This run has not written a summary yet.": "本次运行尚未编写摘要。", "This should be disabled unless directed by SchedulesDirect support": "除非 Schedules Direct 支持人员明确指示,否则应禁用此项", + "This URL must be reachable from your Plex server. Uses the Proxy URL Override or APP_URL. Adjust if Plex reaches m3u-editor via a different address (e.g. Docker internal IP).": "该 URL 必须可从您的 Plex 服务器访问。使用代理 URL 覆盖或 APP_URL。调整 Plex 是否通过不同的地址(例如 Docker 内部 IP)到达 m3u-editor。", + "This URL must be reachable from your Plex server. Use your machine\\'s LAN IP, not localhost.": "此 URL 必须能被您的 Plex 服务器访问。请使用机器的局域网 IP,而非 localhost。", "This will be the name of the duplicated playlist.": "这将是创建副本后的播放列表名称。", "This will clear all playlists currently marked as invalid, allowing them to be used for failover again immediately.": "这将清除所有当前被标记为无效的播放列表,使其能立即重新用于故障转移。", "This will clear any stuck processing locks and allow new syncs to run. Use this if syncs appear stuck.": "这将清除所有卡住的处理锁并允许新的同步任务运行。如果同步看似卡住,请使用此选项。", @@ -2199,14 +2302,23 @@ "This will sync all content from the media server. For large libraries, this may take several minutes.": "这将同步媒体服务器中的所有内容。对于大型库,可能需要几分钟。", "This will trigger Plex to re-fetch your EPG guide data and configure automatic refreshes.": "这将触发 Plex 重新获取您的 EPG 数据并配置自动刷新。", "Time Shift": "时移", + "timeshift": "时移", "Timeshift updated": "时移已更新", "Timeshift value": "时移值", "Timing": "定时", "Title": "标题", "Title (Info)": "标题(信息)", "Title folder metadata": "标题文件夹元数据", + "TMDB": "TMDB", + "TMDB/TVDB": "TMDB/TVDB", + "TMDB API Key": "TMDB API 密钥", + "TMDB API Key Required": "需要 TMDB API 密钥", + "TMDB ID": "TMDB ID", + "TMDB ID format": "TMDB ID 格式", + "TMDB Integration": "TMDB 集成", + "TMDB Metadata Applied": "TMDB 元数据已应用", + "TMDB Search Started": "TMDB 搜索已开始", "To Email Address": "至电子邮件地址", - "To use as the master for the selected channel.": "用作所选频道的主频道。", "Toggle auth status": "切换身份验证状态", "Toggle auto-sync status": "切换自动同步状态", "Toggle proxy status": "切换代理状态", @@ -2215,89 +2327,110 @@ "Tools available to the Copilot assistant across all pages.": "Copilot 助手在所有页面中可用的工具。", "Total Channels": "频道总数", "Total EPG Channels": "EPG 频道总数", - "Total Programmes": "节目总数", "Total number of channels available for this mapping.": "此映射可用的频道总数。", "Total number of channels checked in the last run.": "上次运行中检查的频道总数。", + "Total Programmes": "节目总数", "Total streams available for this playlist (∞ indicates no limit)": "此播放列表可用的总流数(∞ 表示无限制)", "Total time to sync playlist (in seconds)": "同步播放列表的总耗时(秒)", + "To use as the master for the selected channel.": "用作所选频道的主频道。", "Transcode": "转码", "Transcode Mode": "转码模式", "Transcode this channel using the selected profile. Overrides the playlist-level stream profile for this channel. Leave empty for direct stream proxying.": "使用选定的配置对该频道进行转码。这将覆盖该频道的播放列表级的流配置。留空则使用直接流代理。", "Transcoding": "转码", "Transcoding Settings (optional)": "转码设置(可选)", "Trust": "信任", - "Trust Plugin": "信任插件", "Trust blocked": "信任已屏蔽", - "Trust posture": "信任态势", "Trusted": "已信任", - "Trusted Plugins": "受信任的插件", "Trusted by": "信任者:", + "Trusted Plugins": "受信任的插件", "Trusting a plugin locks its current files as the approved version and sets up any database tables or storage the plugin needs.": "信任插件会将其当前文件锁定为核准版本,并设置该插件所需的数据库表或存储。", + "Trust Plugin": "信任插件", + "Trust posture": "信任态势", "Tuner": "调谐器", "Tuner Registered": "调谐器已注册", "Tuner Removed": "调谐器已移除", "Tunes In": "调入", + "tvc-guide-stationid": "tvc-guide-stationid", + "TVDB ID": "TVDB ID", + "tvg-chno": "tvg-chno", + "tvg-id": "tvg-id", + "tvg-logo": "tvg-logo", + "tvg-name": "tvg-name", + "tvg-shift": "tvg-shift", + "TVG ID/Stream ID (default)": "TVG ID/串流 ID(默认)", "Type": "类型", "Type of Playlist": "播放列表类型", - "URL": "URL", - "URL & Connection": "URL 与连接", - "URL Override": "URL 覆盖", - "URL Settings": "URL 设置", - "URL Type": "URL 类型", - "URL or Local file path": "URL 或本地文件路径", - "URL to Kinopoisk page.": "Kinopoisk 页面 URL。", - "URL to large cover image.": "大尺寸封面图 URL。", - "URL to movie poster/image.": "电影海报/图片 URL。", - "URL/XML File": "URL/XML 文件", - "USA, UK, etc.": "美国、英国等", - "UTC": "UTC", "Uncategorized": "未分类", "Undo EPG Map": "撤销 EPG 映射", "Undo Find & Replace": "撤销查找与替换", "Unhealthy Streams": "不健康的流", - "Uninstall Plugin": "卸载插件", "Uninstall blocked": "卸载已屏蔽", - "Uninstall plugin": "卸载插件", "Uninstalled": "已卸载", "Uninstalling disables the plugin immediately. You can keep the plugin\\'s data for a future reinstall, or delete everything it created. Active jobs will be cancelled first.": "卸载操作会立即禁用插件。您可以保留插件数据以便日后重新安装,或者删除其创建的所有内容。活动中的任务将首先被取消。", + "Uninstall Plugin": "卸载插件", + "Uninstall plugin": "卸载插件", "Unique Identifier": "唯一标识符", "Unknown Plugin": "未知插件", "Unknown plugin": "未知插件", + "unknown source": "来源不明", "Unmerging channels for this group in the background. You will be notified once the process is complete.": "正在后台取消此分组频道的合并,完成后将通知您。", "Unmerging channels in the background. You will be notified once the process is complete.": "正在后台取消频道合并,完成后将通知您。", - "Up to date": "已是最新", "Update": "更新", - "Update Password": "更新密码", "Update available": "有可用更新", "Update check failed": "更新检查失败", "Update failed": "更新失败", "Update now": "立即更新", + "Update Password": "更新密码", "Update preferred icon": "更新首选图标", + "Updates Available": "有可用更新", "Update staged for review": "更新已提交审核", "Update staging failed": "更新提交失败", "Update the preferred icon for the selected channel(s).": "更新所选频道的首选图标。", "Update to :version": "更新至 :version", "Update to latest release from GitHub": "从 GitHub 更新至最新版本", "Update your profile information": "更新您的个人资料", - "Updates Available": "有可用更新", "Upload": "上传", - "Upload Asset": "上传资源", - "Upload Plugin Archive": "上传插件压缩包", - "Upload a plugin zip, tar, or tar.gz archive. The server will stage and validate it through plugin installs.": "上传插件的 zip、tar 或 tar.gz 压缩包。服务器将通过插件安装程序进行暂存并验证。", "Upload a plugin zip, tar, or tar.gz archive. The server will stage, validate, and scan it through plugin installs.": "上传插件的 zip、tar 或 tar.gz 压缩包。服务器将通过插件安装程序进行暂存、验证和扫描。", - "Upload now": "立即上传", - "Upload the XMLTV file for the EPG. This will be used to import the guide data.": "上传 EPG 的 XMLTV 文件。此文件将用于导入指南数据。", - "Upload the playlist file. This will be used to import groups and channels.": "上传播放列表文件。此文件将用于导入分组和频道。", + "Upload a plugin zip, tar, or tar.gz archive. The server will stage and validate it through plugin installs.": "上传插件的 zip、tar 或 tar.gz 压缩包。服务器将通过插件安装程序进行暂存并验证。", + "Upload Asset": "上传资源", "Uploaded plugin archive staged": "上传的插件压缩包已暂存", + "Upload now": "立即上传", + "Upload Plugin Archive": "上传插件压缩包", "Uploads waiting for security scan or admin approval.": "等待安全扫描或管理员批准的上传项。", + "Upload the playlist file. This will be used to import groups and channels.": "上传播放列表文件。此文件将用于导入分组和频道。", + "Upload the XMLTV file for the EPG. This will be used to import the guide data.": "上传 EPG 的 XMLTV 文件。此文件将用于导入指南数据。", + "Up to date": "已是最新", + "URL": "URL", + "URL & Connection": "URL 与连接", + "URL/XML File": "URL/XML 文件", + "URL or Local file path": "URL 或本地文件路径", + "URL Override": "URL 覆盖", + "URL Settings": "URL 设置", + "URL to Kinopoisk page.": "Kinopoisk 页面 URL。", + "URL to large cover image.": "大尺寸封面图 URL。", + "URL to movie poster/image.": "电影海报/图片 URL。", + "URL Type": "URL 类型", + "USA, UK, etc.": "美国、英国等", "Use \"Test\" to auto-detect from provider.": "使用“测试”从提供商处自动侦测。", + "Used to reference this auth internally.": "用于在内部引用此身份验证。", + "Useful for multi-host access (VPN/Tailscale/etc.)": "适用于多主机访问(VPN/Tailscale 等)", "Use HTTPS": "使用 HTTPS", + "Use playlist user agent": "使用播放列表 User Agent", "Use Proxy User Agent for Playlists (M3U8/MPD)": "对播放列表使用代理 User Agent (M3U8/MPD)", + "User": "用户", + "User agent string to use for fetching the EPG.": "获取 EPG 时使用的 User Agent 字符串。", + "User agent string to use for fetching the playlist.": "获取播放列表时使用的 User Agent 字符串。", + "User agent string to use for making requests.": "发出请求时使用的 User Agent 字符串。", "Use Regex": "使用正则表达式", - "Use Short URLs": "使用短网址", - "Use playlist user agent": "使用播放列表 User Agent", "Use regex for filtering": "使用正则表达式过滤", "Use regex patterns to find and replace. If disabled, will use direct string comparison.": "使用正则表达式模式进行查找和替换。若禁用,将使用直接字符串比较。", + "Username": "用户名", + "username": "用户名", + "Username for playlist access.": "访问播放列表的用户名。", + "Username for WebDAV authentication": "WebDAV 身份验证用户名", + "User Permissions": "用户权限", + "Users": "用户", + "Use Short URLs": "使用短网址", "Use the GitHub release asset URL from the published release.": "使用已发布版本中的 GitHub Release 资源 URL。", "Use the header actions to run this plugin once, then track the job from Live Activity and Run History.": "使用导航栏操作运行一次该插件,随后在“实时活动”和“运行历史”中跟踪任务。", "Use the last completed run as your baseline. If the candidate count looks right, queue an apply run or tighten the thresholds from the Settings tab.": "以最后一次完成的运行作为基准。如果候选数量合适,请将应用运行加入队列,或在“设置”选项卡中收紧阈值。", @@ -2305,43 +2438,14 @@ "Use this playlist only": "仅使用此播放列表", "Use to enable advanced failover checking and resolution (Resolver URL is required).": "用于启用高级故障转移检查与解析(需要解析器 URL)。", "Use with caution": "谨慎使用", - "Used to reference this auth internally.": "用于在内部引用此身份验证。", - "Useful for multi-host access (VPN/Tailscale/etc.)": "适用于多主机访问(VPN/Tailscale 等)", - "User": "用户", - "User Permissions": "用户权限", - "User agent string to use for fetching the EPG.": "获取 EPG 时使用的 User Agent 字符串。", - "User agent string to use for fetching the playlist.": "获取播放列表时使用的 User Agent 字符串。", - "User agent string to use for making requests.": "发出请求时使用的 User Agent 字符串。", - "Username": "用户名", - "Username for WebDAV authentication": "WebDAV 身份验证用户名", - "Username for playlist access.": "访问播放列表的用户名。", - "Users": "用户", - "VARIABLE_NAME": "变量名称", - "VLC/3.0.21 LibVLC/3.0.21": "VLC/3.0.21 LibVLC/3.0.21", - "VOD": "VOD", - "VOD .strm file is being synced now": "正在同步 VOD .strm 文件", - "VOD Channels": "VOD 频道", - "VOD Group": "VOD 分组", - "VOD Groups": "VOD 分组", - "VOD Processing": "VOD 处理", - "VOD Settings": "VOD 设置", - "VOD Sorted": "VOD已排序", - "VOD Sync": "VOD 同步", - "VOD and Series Streaming Profile": "VOD 与剧集串流配置方案", - "VOD and Series Transcoding Profile": "VOD 与剧集转码配置方案", - "VOD groups to import": "要导入的 VOD 分组", - "VOD processing": "VOD 处理", - "VOD record not found.": "未找到 VOD 记录。", - "VOD stream file settings": "VOD 流文件设置", - "VOD/Series poster placeholder": "VOD/剧集海报占位图", - "VODs moved to group": "VOD 已移至分组", + "UTC": "UTC", "Validate": "验证", "Validate the plugin before you enable it or queue any work. The system should treat this plugin as untrusted until the contract checks pass.": "在启用插件或将其任务排队之前进行验证。在合约检查通过之前,系统应将此插件视为不可信。", "Validation": "验证", + "Validation completed": "验证完成", "Validation Error": "验证错误", "Validation Errors": "验证错误", "Validation Failed": "验证失败", - "Validation completed": "验证完成", "Value": "值", "Value for this header.": "该请求头的值。", "Value must be between 3 and 36 characters.": "值长度必须在 3 到 36 个字符之间。", @@ -2349,31 +2453,54 @@ "Value to include in the email.": "要包含在电子邮件中的值。", "Value to use for this variable.": "用于此变量的值。", "Variable name": "变量名称", - "Version :version is available (current: :current).": "有新版本 :version 可用(当前版本::current)。", + "VARIABLE_NAME": "变量名称", + "variable_name": "变量名称", "Version, source, and type of this plugin.": "该插件的版本、来源和类型。", + "Version :version is available (current: :current).": "有新版本 :version 可用(当前版本::current)。", + "veryfast": "veryfast", "Video Bitrate": "视频比特率", - "Video Codec": "视频编解码器", - "Video File Extensions": "视频文件扩展名", "Video bitrate": "视频比特率", "Video bitrate in kbps.": "视频比特率 (kbps)。", + "Video Codec": "视频编解码器", "Video codec": "视频编解码器", + "Video File Extensions": "视频文件扩展名", "View": "查看", + "View/Update Unique Identifier": "查看/更新唯一标识符", + "View and manage Plex DVR recording subscriptions.": "查看和管理 Plex DVR 录制订阅。", "View Docs": "查看文档", + "View enhanced details": "查看增强详情", + "Viewer ID": "观看者 ID", "View Lineups": "查看频道方案列表", + "View log details": "查看日志详情", "View Logo Repository": "查看 Logo 仓库", "View Logs": "查看日志", "View Playlist": "查看播放列表", "View Queue": "查看队列", "View Review": "查看审查详情", + "View scrubber logs": "查看失效检测工具日志", "View Series": "查看剧集", "View Sync Logs": "查看同步日志", - "View and manage Plex DVR recording subscriptions.": "查看和管理 Plex DVR 录制订阅。", - "View enhanced details": "查看增强详情", - "View log details": "查看日志详情", - "View scrubber logs": "查看失效检测工具日志", "View the EPG channel mapping jobs and progress here.": "在此查看 EPG 频道映射任务及其进度。", - "View/Update Unique Identifier": "查看/更新唯一标识符", - "Viewer ID": "观看者 ID", + "Virtual channel title": "虚拟频道标题", + "VLC/3.0.21 LibVLC/3.0.21": "VLC/3.0.21 LibVLC/3.0.21", + "VOD": "VOD", + "VOD .strm file is being synced now": "正在同步 VOD .strm 文件", + "VOD/Series poster placeholder": "VOD/剧集海报占位图", + "VOD and Series Streaming Profile": "VOD 与剧集串流配置方案", + "VOD and Series Transcoding Profile": "VOD 与剧集转码配置方案", + "VOD Channels": "VOD 频道", + "VOD Group": "VOD 分组", + "VOD Groups": "VOD 分组", + "VOD groups": "点播群组", + "VOD groups to import": "要导入的 VOD 分组", + "VOD Processing": "VOD 处理", + "VOD processing": "VOD 处理", + "VOD record not found.": "未找到 VOD 记录。", + "VOD Settings": "VOD 设置", + "VODs moved to group": "VOD 已移至分组", + "VOD Sorted": "VOD已排序", + "VOD stream file settings": "VOD 流文件设置", + "VOD Sync": "VOD 同步", "Wait this many seconds after sync completes before triggering the library refresh": "同步完成后等待指定秒数再触发媒体库刷新", "Wait until a specific date/time before starting the broadcast.": "等到特定日期/时间后再开始推流。", "Warning": "警告", @@ -2383,6 +2510,7 @@ "WebDAV Password": "WebDAV 密码", "WebDAV Username": "WebDAV 用户名", "WebSocket Connection Test": "WebSocket 连接测试", + "Weekly": "每周", "Weight": "权重", "Weight (for shuffle)": "权重(用于随机播放)", "What does this plugin do?": "这个插件有什么作用?", @@ -2390,13 +2518,10 @@ "What to do next.": "后续操作指引。", "What to do with plugin data": "如何处理插件数据", "What your plugin can do": "您的插件具备的功能", - "When enabled and configured, the AI Copilot assistant will appear in the top navigation bar.": "启用并配置后,AI 助手将出现在顶部导航栏中。", - "When enabled you can access the API documentation using the \"API Docs\" button. When disabled, the docs endpoint will return a 403 (Unauthorized). NOTE: The API will respond regardless of this setting. You do not need to enable it to use the API.": "启用后,你可以点击“API 文档”按钮访问文档;禁用后,文档接口将返回 403 错误。注意:无论此设置如何,API 本身都会正常响应,你无需开启此项即可调用 API。", - "When enabled you can access the queue manager using the \"Queue Manager\" button. When disabled, the queue manager endpoint will return a 403 (Unauthorized).": "启用后,你可以点击“队列管理器”按钮访问任务队列;禁用后,该接口将返回 403 错误。", "When enabled, /logo-repository endpoints are publicly accessible for apps like UHF.": "启用后,UHF 等应用可以公开访问 /logo-repository 接口。", - "When enabled, VOD channels will be included in the M3U output.": "启用后,M3U 输出中将包含点播(VOD)频道。", "When enabled, a backup will be created before syncing.": "启用后,系统将在同步开始前自动创建备份。", "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs.": "启用后,在同步播放列表和 EPG 时,向供应商发出的请求之间将添加延迟(防止请求过快)。", + "When enabled, a delay will be added between requests to the provider during playlist and EPG syncs and other stream processing tasks.": "启用后,在播放列表和 EPG 同步以及其他流处理任务期间向提供商发出的请求之间将添加延迟。", "When enabled, all channels will be re-evaluated during merge, including existing failover relationships.": "启用后,合并期间将重新评估所有频道,包括已有的故障转移关系。", "When enabled, all streams will be proxied through the application. This allows for better compatibility with various clients and enables features such as stream limiting and output format selection.": "启用后,所有流都将通过本应用进行代理。这能显著提升不同客户端的兼容性,并支持流数量限制和输出格式选择等功能。", "When enabled, automatic database backups will be created based on the specified schedule.": "启用后,系统将根据设定的计划定期自动备份数据库。", @@ -2413,59 +2538,64 @@ "When enabled, expired cache cleanup will skip deletion. You can still refresh/clear cache manually.": "启用后,过期缓存清理任务将跳过删除操作。你仍可以手动刷新或清空缓存。", "When enabled, groups will be included based on regex pattern match instead of prefix.": "启用后,将根据正则模式(而非前缀)匹配并包含分组。", "When enabled, matched channels will have their preferred icon set to \"EPG\" instead of \"Channel\". This uses the EPG channel icon as the preferred logo source.": "启用后,匹配频道的首选图标将设为“EPG”而非“频道”,即优先使用 EPG 提供的图标作为 Logo。", - "When enabled, newly added Live channels will be enabled by default.": "启用后,新发现的直播频道将默认开启。", - "When enabled, newly added VOD channels will be enabled by default.": "启用后,新发现的VOD频道将默认开启。", - "When enabled, newly added VOD channels will have merging enabled by default on sync.": "启用后,新发现的 VOD 频道在同步时将默认开启合并功能。", "When enabled, newly added channels will be included in automatic stream probing after sync.": "启用后,新添加的频道将在同步后自动进入流探测流程。", "When enabled, newly added channels will have EPG mapping enabled by default on sync.": "启用后,新添加的频道在同步时将默认开启 EPG 映射。", "When enabled, newly added channels will have merging enabled by default on sync.": "启用后,新添加的频道在同步时将默认开启合并功能。", + "When enabled, newly added Live channels will be enabled by default.": "启用后,新发现的直播频道将默认开启。", "When enabled, newly added series will be enabled by default on sync.": "启用后,新添加的剧集在同步时将默认开启。", + "When enabled, newly added VOD channels will be enabled by default.": "启用后,新发现的VOD频道将默认开启。", + "When enabled, newly added VOD channels will have merging enabled by default on sync.": "启用后,新发现的 VOD 频道在同步时将默认开启合并功能。", "When enabled, quality indicators (HD, FHD, UHD, 4K, 720p, 1080p, etc.) will be removed during fuzzy matching. Disable this if channels have similar names but different quality levels (e.g., \"Sport HD\" vs \"Sport FHD\").": "启用后,模糊匹配时将忽略画质标识(如 HD、4K、1080p 等)。若不同画质的频道名称非常接近(如“体育 HD”与“体育 FHD”),请禁用此项以防止误判。", "When enabled, series will be included in the M3U output. It is recommended to enable the \"Fetch metadata\" option when enabled.": "启用后,M3U 输出中将包含剧集。建议同时开启“获取元数据”选项。", "When enabled, short URLs will be used for the playlist links. Save changes to generate the short URLs (or remove them).": "启用后,播放列表链接将使用短链接。保存更改即可生成(或移除)短链接。", - "When enabled, the EPG will be automatically re-synced at the specified interval.": "启用后,EPG 将按设定的时间间隔自动同步。", - "When enabled, the POST request will be sent without any body content. Useful for APIs that only need a POST trigger (e.g., Emby/Jellyfin scheduled tasks).": "启用后,POST 请求将不带 Body 内容。适用于仅需请求触发的 API(如 Emby/Jellyfin 的计划任务)。", "When enabled, the application will output the WAN address of the server m3u-editor is currently running on.": "启用后,应用将输出当前 M3U Editor 服务器的公网(WAN)地址。", "When enabled, the backup will include your uploaded Playlist and EPG files.": "启用后,备份中将包含你上传的播放列表和 EPG 文件。", "When enabled, the channel group will be assigned to the dummy EPG as a tag.": "启用后,频道分组将作为 标签写入虚拟 EPG 中。", + "When enabled, the EPG will be automatically re-synced at the specified interval.": "启用后,EPG 将按设定的时间间隔自动同步。", "When enabled, the merged EPG will be automatically regenerated at the specified interval.": "启用后,合并后的 EPG 将按设定的时间间隔自动重新生成。", "When enabled, the playlist will be automatically re-synced at the specified interval.": "启用后,播放列表将按设定的时间间隔自动同步。", "When enabled, the playlist will be preprocessed before importing. You can then select which groups you would like to import.": "启用后,导入前将对播放列表进行预处理,随后你可以手动选择需要导入的分组。", "When enabled, the playlist will fetch items by category.": "启用后,播放列表将按分类抓取项目。", "When enabled, the playlist will fetch items by category. This may slow down the import process but can help with larger playlists that time out when fetching all items at once.": "启用后,播放列表将按分类抓取项目。虽然会略微减慢导入速度,但能有效防止因超大型列表一次性加载而导致的请求超时。", + "When enabled, the POST request will be sent without any body content. Useful for APIs that only need a POST trigger (e.g., Emby/Jellyfin scheduled tasks).": "启用后,POST 请求将不带 Body 内容。适用于仅需请求触发的 API(如 Emby/Jellyfin 的计划任务)。", "When enabled, the proxy will attempt to start streams even if the provider\\'s reported connection limit has been reached.": "启用后,即使已达到供应商报告的连接数限制,代理仍会尝试启动流。", - "When enabled, the user will be prompted to set a new password before they can use the application.": "启用后,用户在进入系统前将被强制要求设置新密码。", "When enabled, there will be an additional navigation item (Logs) to view the log file content.": "启用后,导航栏将增加“日志”选项以查看实时系统日志。", + "When enabled, the selected source channels will be disabled after being attached as failovers. They'll only be reachable via the new smart channel.": "启用后,选定的源通道在作为故障转移连接后将被禁用。他们只能通过新的智能渠道联系到。", + "When enabled, the user will be prompted to set a new password before they can use the application.": "启用后,用户在进入系统前将被强制要求设置新密码。", "When enabled, this network will continuously broadcast content according to the schedule.": "启用后,该频道将根据节目编排表进行 24 小时连续推流。", + "When enabled, TMDB metadata fetching will automatically create new groups (for VOD) and categories (for Series) based on TMDB genres. When disabled, only existing groups/categories will be used.": "启用后,TMDB 元数据获取将根据 TMDB 类型自动创建新组(用于 VOD)和类别(用于系列)。禁用后,将仅使用现有的组/类别。", "When enabled, variables will be sent as a JSON body instead of form data. Only applies to POST requests.": "启用后,变量将以 JSON 正文(而非表单数据)的形式发送。仅对 POST 请求有效。", + "When enabled, VOD channels will be included in the M3U output.": "启用后,M3U 输出中将包含点播(VOD)频道。", "When enabled, worker waits for viewer activity before auto-starting. Manual Start still starts immediately.": "启用后,后台进程将等待观众接入后再自动启动。点击“手动启动”仍会立即执行。", "When enabled, you can manage your Plex server from this integration.": "启用后,你可以直接通过此集成管理你的 Plex 服务器。", + "When enabled and configured, the AI Copilot assistant will appear in the top navigation bar.": "启用并配置后,AI 助手将出现在顶部导航栏中。", + "When enabled you can access the API documentation using the \"API Docs\" button. When disabled, the docs endpoint will return a 403 (Unauthorized). NOTE: The API will respond regardless of this setting. You do not need to enable it to use the API.": "启用后,你可以点击“API 文档”按钮访问文档;禁用后,文档接口将返回 403 错误。注意:无论此设置如何,API 本身都会正常响应,你无需开启此项即可调用 API。", + "When enabled you can access the queue manager using the \"Queue Manager\" button. When disabled, the queue manager endpoint will return a 403 (Unauthorized).": "启用后,你可以点击“队列管理器”按钮访问任务队列;禁用后,该接口将返回 403 错误。", "Where to fetch metadata for discovered content (requires TMDB API key in Settings)": "从何处获取所发现内容的元数据(需要在“设置”中配置 TMDB API 密钥)", "Whether or not to use the URL override for logos and images too (default is enabled).": "是否也对 Logo 和图片使用 URL 覆盖(默认开启)。", "Whether the plugin files are currently present.": "插件文件当前是否存在。", "X-Emby-Token": "X-Emby-Token", "XMLTV EPG guide URL. Must also be reachable from Plex.": "XMLTV EPG 指南 URL。也必须可被 Plex 访问。", + "XMLTV EPG guide URL. Must also be reachable from Plex. Adjust if needed.": "XMLTV EPG 指南 URL。也必须可以从 Plex 访问。如果需要的话进行调整。", "XMLTV File, URL or Path": "XMLTV 文件、URL 或路径", "XMLTV Format": "XMLTV 格式", "Xtream": "Xtream", "Xtream API": "Xtream API", + "Xtream API connection details.": "Xtream API 连接详情。", "Xtream API Info": "Xtream API 信息", + "Xtream API panel message": "Xtream API 面板消息", "Xtream API Panel Settings": "Xtream API 面板设置", "Xtream API Password": "Xtream API 密码", "Xtream API URL": "Xtream API URL", "Xtream API Username": "Xtream API 用户名", - "Xtream API connection details.": "Xtream API 连接详情。", - "Xtream API panel message": "Xtream API 面板消息", - "YYYY or YYYY-MM-DD": "YYYY 或 YYYY-MM-DD", - "YYYY-MM-DD": "YYYY-MM-DD", "Year": "年份", "Year (optional)": "年份(可选)", "Yes": "是", "Yes, add to category": "是的,添加到分类", "Yes, add to group": "是的,添加到分组", + "Yes, delete series": "是的,删除剧集", "Yes, delete VOD": "是的,删除 VOD", "Yes, delete VODs": "是的,删除 VOD", - "Yes, delete series": "是的,删除剧集", "Yes, disable now": "是的,立即禁用", "Yes, duplicate now": "是的,立即创建副本", "Yes, enable now": "是的,立即启用", @@ -2473,70 +2603,30 @@ "Yes, generate cache now": "是的,立即生成缓存", "Yes, process now": "是的,立即处理", "Yes, refresh now": "是的,立即刷新", + "Yes, rescore now": "是的,现在重新评分", "Yes, reset now": "是的,立即重置", "Yes, sync now": "是的,立即同步", "You are a helpful AI assistant integrated into m3u editor. You help users manage playlists, EPG data, streams, channels, and other features. Be concise and accurate.": "您是集成到 M3U Editor 中的 AI 助手。您可以协助用户管理播放列表、EPG 数据、串流、频道及其他功能。请保持回答简洁、准确。", "You are using the latest version": "您当前使用的是最新版本", "You can either upload an XMLTV file or provide a URL to an XMLTV file. File should conform to the XMLTV format.": "您可以上传 XMLTV 文件或提供 XMLTV 文件的 URL。文件应符合 XMLTV 格式。", - "You can now assign Playlists or EPGs.": "您现在可以分配播放列表或 EPG 了。", - "You can now assign Playlists to this Auth.": "您现在可以将播放列表分配给此身份验证。", "You can now assign channels to this group from the Channels section.": "您现在可以从“频道”部分将频道分配给该分组。", "You can now assign channels to this group from the Channels tab.": "您现在可以从“频道”选项卡将频道分配给该分组。", + "You can now assign Playlists or EPGs.": "您现在可以分配播放列表或 EPG 了。", + "You can now assign Playlists to this Auth.": "您现在可以将播放列表分配给此身份验证。", + "your-api-key-here": "在此输入您的 API 密钥", + "Your API key for the selected provider. Stored in the database.": "您所选提供商的 API 密钥。存储在数据库中。", + "Your m3u proxy API key": "您的 M3U 代理 API 密钥", + "Your preferences have been saved successfully.": "您的首选项已成功保存。", + "Your selection includes one or more existing smart channels — pick raw provider channels instead, or remove the smart-channel flag first.": "您的选择包括一个或多个现有智能频道 - 选择原始提供商频道,或者先删除智能频道标志。", + "Your TMDB API key (v3 auth). You can get one for free at themoviedb.org.": "您的 TMDB API 密钥 (v3 认证)。您可以从 themoviedb.org 免费获取。", + "YouTube Trailer": "YouTube 预告片", + "YouTube Trailer ID": "YouTube 预告片 ID", + "YouTube trailer URL or ID.": "YouTube 预告片 URL 或 ID。", "You will be notified once complete.": "处理完成后您将收到通知。", "You will be notified when complete.": "完成后您将收到通知。", "You will be notified when the process is complete.": "该过程完成后您将收到通知。", "You will need to save and refresh the page after changing settings for them to take effect.": "更改设置后,您需要保存并刷新页面才能生效。", - "YouTube Trailer": "YouTube 预告片", - "YouTube Trailer ID": "YouTube 预告片 ID", - "YouTube trailer URL or ID.": "YouTube 预告片 URL 或 ID。", - "Your API key for the selected provider. Stored in the database.": "您所选提供商的 API 密钥。存储在数据库中。", - "Your TMDB API key (v3 auth). You can get one for free at themoviedb.org.": "您的 TMDB API 密钥 (v3 认证)。您可以从 themoviedb.org 免费获取。", - "Your m3u proxy API key": "您的 M3U 代理 API 密钥", - "Your preferences have been saved successfully.": "您的首选项已成功保存。", - "aac": "aac", - "and how to use it": "以及如何使用它", - "e.g. 2024": "例如 2024", - "e.g. 403, 404, 502, 503": "例如 403, 404, 502, 503", - "e.g. Authorization": "例如 Authorization", - "e.g. Bearer abc123": "例如 Bearer abc123", - "e.g. Help me find a channel": "例如 帮我找个频道", - "e.g. Help me find a channel by name.": "例如 帮我按名称查找频道。", - "e.g. Remove country prefix": "例如 清除国家前缀", - "e.g. a1b2c3d4...": "例如 a1b2c3d4...", - "e.g. aac": "例如 aac", - "e.g. d/m/Y H:i:s": "例如 d/m/Y H:i:s", - "e.g. libx264, h264_nvenc": "例如 libx264, h264_nvenc", - "e.g. veryfast, fast, medium": "例如 veryfast, fast, medium", - "e.g., 100": "例如 100", - "e.g., Movie Classics, 80s TV, Kids Zone": "例如 Movie Classics, 80s TV, Kids Zone", - "e.g., Movies, TV Shows": "例如 电影、电视节目", - "e.g., My Networks": "例如 我的虚拟频道 (Network)", - "en": "en", - "group-title": "分组标题", - "http://192.168.0.123:36400": "http://192.168.0.123:36400", - "https://example.com/backdrop.jpg": "https://example.com/backdrop.jpg", - "https://example.com/cover.jpg": "https://example.com/cover.jpg", - "https://example.com/logo.png": "https://example.com/logo.png", - "https://example.com/poster.jpg": "https://example.com/poster.jpg", - "https://www.kinopoisk.ru/film/123456/": "https://www.kinopoisk.ru/film/123456/", - "https://www.youtube.com/watch?v=abc123": "https://www.youtube.com/watch?v=abc123", - "libx264": "libx264", - "m3u editor proxy url.": "M3U Editor 代理 URL。", - "mp4": "mp4", - "of :n total": "共 :n 项", - "recorded progress.": "记录了进度。", - "shown": "显示", - "socks5://user:pass@host:port or http://user:pass@host:port": "socks5://user:pass@host:port 或 http://user:pass@host:port", - "timeshift": "时移", - "tvc-guide-stationid": "tvc-guide-stationid", - "tvg-chno": "tvg-chno", - "tvg-id": "tvg-id", - "tvg-logo": "tvg-logo", - "tvg-name": "tvg-name", - "tvg-shift": "tvg-shift", - "unknown source": "来源不明", - "username": "用户名", - "variable_name": "变量名称", - "veryfast": "veryfast", - "your-api-key-here": "在此输入您的 API 密钥" + "yt-dlp format selector followed by optional flags. Example: bestvideo+bestaudio/best --no-playlist": "yt-dlp 格式选择器后跟可选标志。示例:bestvideo+bestaudio/best --no-playlist", + "YYYY-MM-DD": "YYYY-MM-DD", + "YYYY or YYYY-MM-DD": "YYYY 或 YYYY-MM-DD" }