From c21c5396cdb42dc0457c346e7d469ede22c312dc Mon Sep 17 00:00:00 2001 From: Doezer Date: Wed, 26 Nov 2025 14:08:34 +0100 Subject: [PATCH 1/7] fix: save stream selection per media for audio and subtitles (not just language pref) --- lib/client/plex_client.dart | 37 +++++ lib/models/plex_media_info.dart | 3 + lib/screens/video_player_screen.dart | 239 +++++++++++++++++++++++---- 3 files changed, 244 insertions(+), 35 deletions(-) diff --git a/lib/client/plex_client.dart b/lib/client/plex_client.dart index b0185997..810c22f6 100644 --- a/lib/client/plex_client.dart +++ b/lib/client/plex_client.dart @@ -462,6 +462,42 @@ class PlexClient { } } + /// Select specific audio and subtitle streams for playback + /// This updates which streams are "selected" in the media metadata + /// Uses the part ID from media info for accurate stream selection + Future selectStreams( + int partId, { + int? audioStreamID, + int? subtitleStreamID, + bool allParts = true, + }) async { + try { + final queryParams = {}; + if (audioStreamID != null) { + queryParams['audioStreamID'] = audioStreamID; + } + if (subtitleStreamID != null) { + queryParams['subtitleStreamID'] = subtitleStreamID; + } + if (allParts) { + // If no streams to select, return early + if (queryParams.isEmpty) { + return true; + } + + // Use PUT request on /library/parts/{partId} + final response = await _dio.put( + '/library/parts/$partId', + queryParameters: queryParams, + ); + + return response.statusCode == 200; + } catch (e) { + appLogger.e('Failed to select streams', error: e); + return false; + } + } + /// Search across all libraries using the hub search endpoint /// Only returns movies and shows, filtering out seasons and episodes Future> search(String query, {int limit = 10}) async { @@ -923,6 +959,7 @@ class PlexClient { audioTracks: audioTracks, subtitleTracks: subtitleTracks, chapters: chapters, + partId: part['id'] as int?, ); } } diff --git a/lib/models/plex_media_info.dart b/lib/models/plex_media_info.dart index 6e05cf73..9981996c 100644 --- a/lib/models/plex_media_info.dart +++ b/lib/models/plex_media_info.dart @@ -3,13 +3,16 @@ class PlexMediaInfo { final List audioTracks; final List subtitleTracks; final List chapters; + final int? partId; PlexMediaInfo({ required this.videoUrl, required this.audioTracks, required this.subtitleTracks, required this.chapters, + this.partId, }); + int? getPartId() => partId; } /// Mixin for building track labels with a consistent pattern diff --git a/lib/screens/video_player_screen.dart b/lib/screens/video_player_screen.dart index f058a07e..2e7fa072 100644 --- a/lib/screens/video_player_screen.dart +++ b/lib/screens/video_player_screen.dart @@ -1,8 +1,10 @@ import 'dart:async'; import 'dart:io'; +import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter/services.dart' show rootBundle; import 'package:media_kit/media_kit.dart'; import 'package:media_kit_video/media_kit_video.dart'; import 'package:os_media_controls/os_media_controls.dart'; @@ -11,6 +13,7 @@ import 'package:provider/provider.dart'; import '../client/plex_client.dart'; import '../models/plex_media_version.dart'; import '../models/plex_metadata.dart'; +import '../models/plex_media_info.dart'; import '../providers/playback_state_provider.dart'; import '../services/episode_navigation_service.dart'; import '../services/media_controls_manager.dart'; @@ -26,6 +29,14 @@ import '../utils/video_player_navigation.dart'; import '../widgets/video_controls/video_controls.dart'; import '../i18n/strings.g.dart'; +Map? _isoLangTable; + +/// Charger la table en mémoire au démarrage du widget (dans initState par exemple) +Future loadIsoTable() async { + final data = await rootBundle.loadString('lib/data/iso_6369_codes.json'); + _isoLangTable = json.decode(data) as Map; +} + class VideoPlayerScreen extends StatefulWidget { final PlexMetadata metadata; final AudioTrack? preferredAudioTrack; @@ -57,6 +68,7 @@ class VideoPlayerScreenState extends State bool _showPlayNextDialog = false; bool _isPhone = false; List _availableVersions = []; + PlexMediaInfo? _currentMediaInfo; StreamSubscription? _logSubscription; StreamSubscription? _errorSubscription; StreamSubscription? _playingSubscription; @@ -90,6 +102,8 @@ class VideoPlayerScreenState extends State void initState() { super.initState(); + loadIsoTable(); + appLogger.d('VideoPlayerScreen initialized for: ${widget.metadata.title}'); if (widget.preferredAudioTrack != null) { appLogger.d( @@ -212,6 +226,15 @@ class VideoPlayerScreenState extends State } } + /// Convertit un code à 2 lettres "fr", "nl", "ca" en code Plex à 3 lettres, ou renvoie null si inconnu + String? _iso6391ToPlex6392(String? code) { + if (code == null || code.isEmpty || _isoLangTable == null) return null; + // Prend la base "fr" de "fr-FR" + final lang = code.split('-').first.toLowerCase(); + final langEntry = _isoLangTable![lang] as Map?; + return langEntry?['639-2'] as String?; + } + Future _initializePlayer() async { try { // Load buffer size from settings @@ -566,6 +589,7 @@ class VideoPlayerScreenState extends State if (mounted) { setState(() { _availableVersions = result.availableVersions.cast(); + _currentMediaInfo = result.mediaInfo; }); // Initialize video filter manager with player and available versions @@ -757,7 +781,7 @@ class VideoPlayerScreenState extends State await _navigateToEpisode(_previousEpisode!); } - /// Handle audio track changes from the user - save as per-media preference if enabled + /// Handle audio track changes from the user - save both stream selection and language preference Future _onAudioTrackChanged(AudioTrack track) async { final settings = await SettingsService.getInstance(); @@ -765,41 +789,101 @@ class VideoPlayerScreenState extends State if (!settings.getRememberTrackSelections()) { return; } - - // Extract language code from the track - final languageCode = track.language; - if (languageCode == null || languageCode.isEmpty) { - appLogger.d('Audio track has no language code, not saving preference'); + if (_currentMediaInfo == null) { + appLogger.w('No media info available, cannot save stream selection'); + return; + } + final partId = _currentMediaInfo!.getPartId(); + if (partId == null) { + appLogger.w('No part ID available, cannot save stream selection'); return; } - // Determine which ratingKey to use - // For TV shows: use grandparentRatingKey (series level) - // For movies: use ratingKey (movie level) + final languageCode = track.language; + int? streamID; + + // === Matching by attributes === + PlexAudioTrack? matched; + final normalizedTrackLang = _iso6391ToPlex6392(track.language); + + appLogger.d( + 'Normalized media_kit language: ${track.language} -> $normalizedTrackLang', + ); + + for (final plexTrack in _currentMediaInfo!.audioTracks) { + final matchLang = plexTrack.languageCode == normalizedTrackLang; + final matchTitle = (track.title == null || track.title!.isEmpty) + ? true + : (plexTrack.displayTitle == track.title || + plexTrack.title == track.title); + + if (matchLang && matchTitle) { + matched = plexTrack; + appLogger.d('Matched audio by lang/title: streamID ${matched.id}'); + break; + } + } + + if (matched != null) { + streamID = matched.id; + appLogger.d('Matched audio by lang/title: streamID $streamID'); + } else { + appLogger.w('Could not match audio track, using fallback index'); + // Fallback - normally no offset for audio + try { + final trackIndex = int.parse(track.id); + + if (trackIndex >= 0 && + trackIndex < _currentMediaInfo!.audioTracks.length) { + streamID = _currentMediaInfo!.audioTracks[trackIndex].id; + appLogger.d( + 'Using fallback: audio index $trackIndex -> streamID $streamID', + ); + } else { + appLogger.e( + 'Fallback index $trackIndex out of bounds (total: ${_currentMediaInfo!.audioTracks.length})', + ); + } + } catch (e) { + appLogger.e('Failed to parse track index', error: e); + } + } + final isEpisode = widget.metadata.type.toLowerCase() == 'episode'; - final targetRatingKey = isEpisode + final languagePrefRatingKey = isEpisode ? (widget.metadata.grandparentRatingKey ?? widget.metadata.ratingKey) : widget.metadata.ratingKey; - appLogger.i( - 'Saving audio language preference: $languageCode for ${isEpisode ? "series" : "movie"} (ratingKey: $targetRatingKey)', - ); - try { if (!mounted) return; - // Use server-specific client for this metadata final client = _getClientForMetadata(context); - await client.setMetadataPreferences( - targetRatingKey, - audioLanguage: languageCode, - ); - appLogger.d('Successfully saved audio language preference'); + + final futures = []; + + // 1. Language preference (series/movie level) + if (languageCode != null && languageCode.isNotEmpty) { + futures.add( + client.setMetadataPreferences( + languagePrefRatingKey, + audioLanguage: languageCode, + ), + ); + } + // 2. Exact stream selection (part level) + if (streamID != null) { + futures.add( + client.selectStreams(partId, audioStreamID: streamID, allParts: true), + ); + } + + await Future.wait(futures); + appLogger.d('Successfully saved audio preferences (language + stream)'); } catch (e) { - appLogger.e('Failed to save audio language preference', error: e); + appLogger.e('Failed to save audio preferences', error: e); } } - /// Handle subtitle track changes from the user - save as per-media preference if enabled + /// Handle subtitle track changes from the user - save both stream selection and language preference Future _onSubtitleTrackChanged(SubtitleTrack track) async { final settings = await SettingsService.getInstance(); @@ -808,42 +892,127 @@ class VideoPlayerScreenState extends State return; } - // Handle "Off" selection + if (_currentMediaInfo == null) { + appLogger.w('No media info available, cannot save stream selection'); + return; + } + + final partId = _currentMediaInfo!.getPartId(); + if (partId == null) { + appLogger.w('No part ID available, cannot save stream selection'); + return; + } + String? languageCode; + int? streamID; + if (track.id == 'no') { languageCode = 'none'; + streamID = 0; appLogger.i('User turned subtitles off, saving preference'); } else { languageCode = track.language; - if (languageCode == null || languageCode.isEmpty) { + + // === Matching by attributes === + PlexSubtitleTrack? matched; + final normalizedTrackLang = _iso6391ToPlex6392(track.language); + + appLogger.d( + 'Normalized media_kit language: ${track.language} -> $normalizedTrackLang', + ); + + for (final plexTrack in _currentMediaInfo!.subtitleTracks) { + final matchLang = plexTrack.languageCode == normalizedTrackLang; + final matchTitle = (track.title == null || track.title!.isEmpty) + ? true + : (plexTrack.displayTitle == track.title || + plexTrack.title == track.title); + + appLogger.d('Comparing with streamID ${plexTrack.id}:'); appLogger.d( - 'Subtitle track has no language code, not saving preference', + ' matchLang: $matchLang (${plexTrack.languageCode} == $normalizedTrackLang)', ); - return; + appLogger.d(' matchTitle: $matchTitle'); + + if (matchLang && matchTitle) { + matched = plexTrack; + appLogger.d(' ✅ MATCHED!'); + break; + } + } + + if (matched != null) { + streamID = matched.id; + appLogger.d('Matched subtitle by lang/title: streamID $streamID'); + } else { + appLogger.w('Could not match subtitle track, using fallback index'); + // Fallback with offset correction + try { + final trackIndex = int.parse(track.id); + + // media kit has a "no" (off) at index 0, so real subtitles start at 1 + // We need to subtract 1 to get the actual index in PlexMediaInfo + final plexIndex = trackIndex > 0 ? trackIndex - 1 : 0; + + if (plexIndex >= 0 && + plexIndex < _currentMediaInfo!.subtitleTracks.length) { + streamID = _currentMediaInfo!.subtitleTracks[plexIndex].id; + appLogger.d( + 'Using fallback: media_kit index $trackIndex -> Plex index $plexIndex -> streamID $streamID', + ); + } else { + appLogger.e( + 'Fallback index $plexIndex out of bounds (total: ${_currentMediaInfo!.subtitleTracks.length})', + ); + } + } catch (e) { + appLogger.e('Failed to parse track index', error: e); + } } } - // Determine which ratingKey to use + // Determine ratingKeys final isEpisode = widget.metadata.type.toLowerCase() == 'episode'; - final targetRatingKey = isEpisode + final languagePrefRatingKey = isEpisode ? (widget.metadata.grandparentRatingKey ?? widget.metadata.ratingKey) : widget.metadata.ratingKey; appLogger.i( - 'Saving subtitle language preference: $languageCode for ${isEpisode ? "series" : "movie"} (ratingKey: $targetRatingKey)', + 'Saving subtitle preference: language=$languageCode (ratingKey: $languagePrefRatingKey), streamID=$streamID (partId: $partId)', ); try { if (!mounted) return; - // Use server-specific client for this metadata final client = _getClientForMetadata(context); - await client.setMetadataPreferences( - targetRatingKey, - subtitleLanguage: languageCode, + + final futures = []; + + // 1. Save language preference at series/movie level + if (languageCode != null) { + futures.add( + client.setMetadataPreferences( + languagePrefRatingKey, + subtitleLanguage: languageCode, + ), + ); + } + // 2. Save exact stream selection using part ID + if (streamID != null) { + futures.add( + client.selectStreams( + partId, + subtitleStreamID: streamID, + allParts: true, + ), + ); + } + + await Future.wait(futures); + appLogger.d( + 'Successfully saved subtitle preferences (language + stream)', ); - appLogger.d('Successfully saved subtitle language preference'); } catch (e) { - appLogger.e('Failed to save subtitle language preference', error: e); + appLogger.e('Failed to save subtitle preferences', error: e); } } From e69644a98e372ae4308702bae85ee21883ee23cc Mon Sep 17 00:00:00 2001 From: Doezer Date: Wed, 26 Nov 2025 22:25:20 +0100 Subject: [PATCH 2/7] fix: fix missing update in playback init & translate french comments --- lib/client/plex_client.dart | 23 ++++++++++--------- lib/screens/video_player_screen.dart | 6 ++--- .../playback_initialization_service.dart | 7 +++++- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/client/plex_client.dart b/lib/client/plex_client.dart index 810c22f6..15568164 100644 --- a/lib/client/plex_client.dart +++ b/lib/client/plex_client.dart @@ -480,18 +480,19 @@ class PlexClient { queryParams['subtitleStreamID'] = subtitleStreamID; } if (allParts) { - // If no streams to select, return early - if (queryParams.isEmpty) { - return true; + // If no streams to select, return early + if (queryParams.isEmpty) { + return true; + } + + // Use PUT request on /library/parts/{partId} + final response = await _dio.put( + '/library/parts/$partId', + queryParameters: queryParams, + ); + + return response.statusCode == 200; } - - // Use PUT request on /library/parts/{partId} - final response = await _dio.put( - '/library/parts/$partId', - queryParameters: queryParams, - ); - - return response.statusCode == 200; } catch (e) { appLogger.e('Failed to select streams', error: e); return false; diff --git a/lib/screens/video_player_screen.dart b/lib/screens/video_player_screen.dart index 2e7fa072..9d567ec5 100644 --- a/lib/screens/video_player_screen.dart +++ b/lib/screens/video_player_screen.dart @@ -31,7 +31,7 @@ import '../i18n/strings.g.dart'; Map? _isoLangTable; -/// Charger la table en mémoire au démarrage du widget (dans initState par exemple) +/// Load the table into memory at widget startup (in initState for example) Future loadIsoTable() async { final data = await rootBundle.loadString('lib/data/iso_6369_codes.json'); _isoLangTable = json.decode(data) as Map; @@ -226,10 +226,10 @@ class VideoPlayerScreenState extends State } } - /// Convertit un code à 2 lettres "fr", "nl", "ca" en code Plex à 3 lettres, ou renvoie null si inconnu + /// Converts a 2-letter code like "fr", "nl", "ca" to a Plex 3-letter code, or returns null if unknown String? _iso6391ToPlex6392(String? code) { if (code == null || code.isEmpty || _isoLangTable == null) return null; - // Prend la base "fr" de "fr-FR" + // Takes the base "fr" from "fr-FR" final lang = code.split('-').first.toLowerCase(); final langEntry = _isoLangTable![lang] as Map?; return langEntry?['639-2'] as String?; diff --git a/lib/services/playback_initialization_service.dart b/lib/services/playback_initialization_service.dart index dc57abba..2973b61a 100644 --- a/lib/services/playback_initialization_service.dart +++ b/lib/services/playback_initialization_service.dart @@ -96,6 +96,7 @@ class PlaybackInitializationService { // Return result with available versions for UI updates return PlaybackInitializationResult( availableVersions: playbackData.availableVersions, + mediaInfo: mediaInfo, ); } catch (e) { if (e is PlaybackException) { @@ -199,8 +200,12 @@ class PlaybackInitializationService { /// Result of playback initialization class PlaybackInitializationResult { final List availableVersions; + final PlexMediaInfo? mediaInfo; - PlaybackInitializationResult({required this.availableVersions}); + PlaybackInitializationResult({ + required this.availableVersions, + this.mediaInfo, + }); } /// Exception thrown when playback initialization fails From 5cbec2398aa29e344ad09e28c43aac3b159bd2e9 Mon Sep 17 00:00:00 2001 From: Doezer Date: Wed, 26 Nov 2025 22:36:41 +0100 Subject: [PATCH 3/7] fix: return explicit boolean value in stream selection logic --- lib/client/plex_client.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/client/plex_client.dart b/lib/client/plex_client.dart index 15568164..45fcfab3 100644 --- a/lib/client/plex_client.dart +++ b/lib/client/plex_client.dart @@ -493,6 +493,9 @@ class PlexClient { return response.statusCode == 200; } + // Si allParts est false, retourner true ou false explicitement (selon la logique souhaitée) + // Ici, on retourne true par défaut si rien n'est fait + return true; } catch (e) { appLogger.e('Failed to select streams', error: e); return false; From 055765ead71f99d959d73691a5f8f422d3ddeef9 Mon Sep 17 00:00:00 2001 From: Mateusz Kaflowski Date: Thu, 27 Nov 2025 18:57:08 +0100 Subject: [PATCH 4/7] android_adaptive_icon_fix android_adaptive_icon_fix android_adaptive_icon_fix android_adaptive_icon_fix android_adaptive_icon_fix --- .../mipmap-hdpi/ic_launcher_monochrome.png | Bin 4708 -> 1811 bytes .../mipmap-mdpi/ic_launcher_monochrome.png | Bin 3052 -> 1131 bytes .../mipmap-xhdpi/ic_launcher_monochrome.png | Bin 6581 -> 2527 bytes .../mipmap-xxhdpi/ic_launcher_monochrome.png | Bin 10735 -> 4290 bytes .../mipmap-xxxhdpi/ic_launcher_monochrome.png | Bin 15940 -> 6227 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png index d659e11557f6bb0c53a35992a1f979abc80d95a6..823e1e798395385bd5c6f0677b3bbc61337e3b79 100644 GIT binary patch literal 1811 zcma)-`!^ei634X^jkTnU+|t%fyDbs%2({gytR`ry5z?slYgg)7UEO+CYPnfa+;+Pa zO$8BUwJc4DXG+EE9?4B;J?h;gH`uBYQshBa?_aQU&di)M^O-Y0e9xIFz@WYK0j2;A z4GsN^-bnxbO#ke<+WV2SVPdACp*?*O`Q6p@@YT7vhU2&XF(iFYw+f5Jv8o_Al=rEs zs>?B$1u&tpL1NFescv!E+w!gb3dSN?To^e9$JiEC@ zad23wxb;y@RqlS>11fjEjz=qhBCA~-(%#zb@BQ0`LB7r;Q^=>RFT=co@p4&uI1SeD zcB|DTL5^jq1cIO~(4m40Q z=}J4KWw8hEPSm%3aKt=XcCH3TqLji4kzG?GRgQY2a=EyVoFq>2H1O{vKCYTew8SWg zkLAdgvQIX*eZhG4T%uqni^h$MBrdnDvfnIbvAXkq2PS{h<-3o3iL>p$Z#@~j)$GG6 zYHdiSBu-rrc9c#sDKk8^rgd{saSy1oXc#2QCu4D<6O8{la8h1y?0hU5Sk@-1__@mi z#N|HAw7@fim9Xf_DfcLYse-=NWQ+aQrDDC&d^Gwh{}t2s+BwIpUWt?KTY*X7dG%dJ z$!=^$gmCtS?mp)&CoX3(P*N4YHaV%oUpTUY5*<>uN=&%?=h$|qBxi0&)M$xI%#@FC z>Pepw;E$pv*iw*FQQM)z{seGiox@rnQLn`FeuY9)v8ORUhN!HJ&Y-7mg?3X{jOWr? z-J0$#LN|VqY(S?o^P)AozK^)%@v9Rp=Uun~SJC z9+$yN-STJG*<#9F&mO5#dB}3xN14?e<3F#n+-wF6rV7Qk5oPBGQ%Dj#S4{S@z817t z&mV8{Z4Q0YHjCepOCF|oc>ildkAb_B{8NGU%>;CmnR#7UB36}KkTn7ESL)d}`x`sQ z88r@Xp}+XBxu0(>hJ@0AWy1zprOw;+zn+8 zhxE^`0oH=qV=0d~=c*UrF7qjQ92h466p6p0O3Trz%LFUJSM7;pLQmU=@9%{KEn0=@ zD@Tgm;7^{9OBW6tp=}VCue~CSBV5Bhd5e@fyT=~{w5RwC_Dk=aVPnyoc#%G1i*g0F zU8kt(Dn}QzeRUWk_K8sTqt?cSi45R^eOmUtCDcLW3CC){8Je|n0DvaALhq<1f$YaFmTwme`$rc z(q}dQ+j0|>zgh0l{2q~A=#->`>q0GoP-QYDdo3*D-Xf&W>@?pm&-EK^%7)&LILC#r zi5$xWR!o38Mg|+&uHCyj@5^eQT-T{lZFh~$zQgo0!X!hWUB`Ec(h1T>n#zNx zdcL9F`LxrA8+zUwHF`H-ebbN3#oche^FkFMq1K=Dv$E+ASU=b~2Zw~;1uA(?fbD06 zJE)?yu(W%nKikmwM$v@TMX{NR%d{3h1|d z_z-*!-p8!xWYD(HkdLORCQ^P)KSoo=-2~V#=6{4Q-92hP+dacXsj^3E9(jTTgkjEI z0}GmA=s7IOJdhmdIk<4Z)%{NpJ)$ABmdZfMbZbIL=Z}d6&v->`M_s++Oy~oBHEB=lkP3&$*xLT=(_6e)s)6=Q{Uu{hs(sHW!ZaNbTL&& zQ+u{8{4wjMU9*$Myl7%E~%%*5XugK2YCM8QVt?wO&Vz>O`)4>)MK?lwds!uF7KBb<14d2O=h`@!x&WP9BWfe(*rzU$2y z)U>zGEl12XSPM#2i)nIZ^9=x!0erw-U>Ern{R~xzZJUb3g z1`Pq*?q$uDx$q7EZ$We+j~`oj6p1VV>FuC=`AI>H>SOwEx+C4>eCTuT1Yr|NxDCe* zkhidA+fn);U57r3@>aB0uHzx_;uTn{|1g>a_l~#4Vq95Ga-5eEVIRp*av)RFdSnNb zNS@qNX_ljl%bu}Igq48L0r_|hKJ&Q)ML&7EJW1tJDurEG^xCR@3!bGoQ>3pY)^Tko_pjDE?xRc+~VmZ&sI8EflKALkNAnRnB@y%G#@c3-;wKg#GkBg@@Eb z#Tr-!!YJVdW*OJrBN*rXP=@+_X zYuUwp+cLN_NgY9yMJspzSnZ(}z4+r<84Ke=Oq(nD3Sl)$Q&g2W)IdtMn+w=3Zh!RX zFCK3R^JYAt5S9p^qDI50E@~RUuXwFd#{!6hVj-*xw%+L$hvL0ZC+;(b@Lyf)RPJW^ z(``SDzwHe15XObw^l8@QslwEjxrtLAbPzs z$H)E;mhk+B*bwNhP1+>YF7EyXhp9it(&4XX>oCFg20KDR>Y-AIKj)#V7WyZM4sR4;)AUH^?aa{d8!Xm3x5@*U(2 z+AM5YpH6s^-eX|`t%8t*19@7-G@8S-xscpQF=Sq^-}Q8n8G6+GjN$i@(Dq|V4^Wu+ zsE2y0oHnuZK zHBLwsRqxIs_Y*ij%u)B~5$+r;ZYIjzex-xMbnk_DH$u%mE|FY;gT6?z0waJnM+_g( zFV{f5!Tk1@LOcXeYn-1w1&pqB$G(U*At!FV`&RijdJ^o&-xL>HhFb4zp*FT|8zagi zE5j$mpk9J_89rQe^v4R22J=~z1K09CgqcX1M1U>v{d3RuAlf3xqa;7zGB(~p^mGR^qSIY3EMVl8b z;HmXStKN0wgn{6m95ZbXss?WFY{qB456k7Ie`MX5?jnOLFE!&eqjYAWdun{V<3ZO# zVadY>oON@XpRM^>I{sOTA8hQfL69~{UWRj0%W>LhweYpp%|TYS$;k?A^_^@as1da1 z?os1#){kW}?}$YiaXRrc4y}@|HS;Jaw`o0n~HdO3-?`>U)kDhIw)2MLU8!&T~; z!#|j7%zkYI?Ahl2avYAC8$s^w8MWNA?)hFi*ln=(mES@b7d}N$oi=Oi9Uw+()W)|} z-mm;J5|cGCf=v1*%0x0#wz~e!K}BUtH^p+y7n_UV`0q4F#J~=WUP!rK^&=>ezmXUu zu{(8Py9^N}Mcnu^$G&`ndx;Xf7AqQf&2Y+i<+)~%(zRC|&QFiMq}=Z@evh7D81Y6; zno+OCI1YuLU*Yz<+^5`q{Ff%{h>bVKe*bWgw~bL1{w?ejc6%1wA_T2X%C8f#NN>j$ zKWhS$K(XizhI2=FkZ&x`E|1)G3zFqKv{hHg)71{?q!EbfOfF>Z&8RQka9Bhvs1?({;dK$j!92CN^`=*(Vw@YmSxYJ}hp_E<2Rp ziMu~A(|9CGHlguCq$m_`%ypvt=rU!^A*^n`WaCvMU#Mtvfh|XQch6iuN)JIlkmW;L z_g0N)D_F1p>&uiQNx8^wi!KDR96xXACu@Ohf1F+$w&|Glud{bn!gA%k%-tlkMB)98 zEgNv18ytSVD1N1iXA|25txz+;JJy~e6g=lHfHXqg8ett7I=>zN$$eL=mKN;a7wIOy zuCe-*IFg^0UN(K90dsnl5AA*NkqcvA$vIhwra+sW8QzPr(03k6K?sfeF+1(3iW8xh zKdfFwm$vlw$%b2u*6S-?Z!Tge+_|_aG@*3ywUb8zU|PfZr{v8@IgtZKwOnXF`tVul zPUXeXkABitIYkmQ(dS0Mjf*9i!VS}Bs?T(fe@we7N^a7G844n!m4u)b+DNzAR2a-RV2I0|Bfy4v`<s#jO zs935dq5ng23E)bKY~_)=@h97k6n}!0ra9P5U24Mpcc1806+Urt6}VsEe?6gUO<^?# z@U`LMsM(8Ft{d~HbPT?_J)tmwW|OspBBRT;6C!ma9uc?A|8*o(WIB_J%nTxyTp#Sy z4ltwl(w8rY;#<$fT)ml>3H+Sd46Uk>>V}Y`(Srz!Nczx zs-0J^q=b63#5K5E_gr(5c%e)N&jk@4wpiaj{_?1E%ZwP55V)4mViy)58>TRGARZI- z?_5!K(Mw;wcR8i)X6%#RCpN?)obWI;O3}(OwkWAb^^I87+ppKv%LDceN5@mFtb`Ya z)IbNR98zb%nw)!L(~dgBV@2RVm+a{NJ`wx;v+Qp515@2&+z#*AeOH_-7lgTI$ZA>X z>CB0yX5Vqh2gaeMPq{UAjXrzd;PDiz2+U`AS@bTE@MhxPo0N^{Yz+5)5~NpL9tq4`~E_KU%eW#$P-i46)xxx2QkLvI(l zm9`5-nr8=>n=cM@coK9H76~531`c{o^V3^lja??Caj3Es-+(+3qyp{?-*kISzJ5ey zqdD_un+ZYUbr%8o`TTYus7>Np&+?@xXv#FZch1B9dOw5Chs8Q$&0eEtb|#7E7}nF4 zmcqE8YTogK1FgH-2t%*ucZA*~*EP0mhpIFuB&St(4-cR z^2a!hdiRTrgvdD;!lY7;?!iC#f<6+j2vR4I{*3x*E9uNt9>XVWq}n-0*INiatE}G4 zewuPOvF4GHYkBF*bTfEn+91iHQ`%Q~{lmYe@XW*)>Uz+R#E0Jf85zpm+m*cD{WGZO zi9ej;d8nGDzKg;*q~z>hmW9=x93O8FxNezxmV#Ye&*#8fllC2|3eEWaHyobyLVbttnY*bTi++WnUch!F>J}~TmR4)-#ag#iz z@M5_sqJ$9DMQS9oKVG@}x~VI|yATHPR=}&To)Ib zwmwWYIp!t0pc^uj37vIC*h{f>BtrT><(Er!;_Q}Rh(uQIjFCrooxrDchS3=&{3M9e zhV7C6B8{Rveq(Foq8B~KEqQR*m;J!w3rM{XvfMP2nqzYd%&wB_;K zqSsRozP=+x|EF&1TCP&+7zYp{_fu-#G_-3XT{kWuT@h16Yb!}OC<%<<7?R7s^~H6i zKhxE;cIi=GEs8_0>%el&-D>Ej!PqRZCcYkHX_o?fDb1P7AIULsZb^&7AUaWOhNBE> zsFjL)gNg%0%(I48=@FDJ@yItDoKut%ax?iXWiBS~frWUrAT9&$a_=2^m7Yq6@8uE2 z>ld(H|F|Y~X<5eEcB&5_0#l~eeH*~-LF`{F3c+SB!Ph;4z4SeaUTg!<*3{Nf*V0ng z)Vr*utFNP}ucM=?sj082iRJb9zX<_>*L`k;{r?FXc9X;G6_o#Xg0yb0}rc*-T(jq diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png index baac3a1927df99f5173a35a5800b66c0dd49e382..ad0470ec2a4f7d1bc7c02a084c0f231deee5721e 100644 GIT binary patch delta 1111 zcmV-d1gQJ$7wZU+BYy-kNkl`IMwn7WOs-Ajg~UuQBSr?1 zL3!haQIq5aCAY{Wm)zooa({s&QiQ^c8Kqnr3586eTuUN%{(gVUep>s#_c>>ubM`*Z z)bst+ujXm5z4mGUpS{msYwc%xJpcdz0000000000000000Dk}g003HMW``=*D~~F- zDa(~@Vmr(-6=lA1hw_(Iy{sG@_rWYuL2igu3jR>;QFe{{V#-v6CCYE*`tQjU(tK})Rtg1Nty$CbU}@h~ClreKAim1~t9;&Cx1>$YHp&y{nO zdGYudkxi#yg^kJ)@iSlqHr;|bpRasCSrR`B8nEF7^KsTI%3aFM$|K6Br55A)QMpW6 z7(WvRu>J+}2ZrmE-D>ukr>sz3FYPg&kCoNNGEOsAUw^Q7l>KAd$Wq}hR(>z(O!FJ9j zFIeG4OHYoa*?RrFP&rH4Tx#9i(!9Sp&xRMw2fA-74=MLqTD1H+ZxHx0%S*~r%6jYn zfYH>7_?hQ4>t8T`RKHW%yJnwll~a{>OM7%<=zs8HPOw3?H-2O!nIFao9J?>Y_a|RxOxMOC6(JWA$$W=ls^WPu7=z zw|||fJgmH6>1teV!Y?ze2>7=I(M=@#rY3zNYZkxi#ypIMquv?y=OcgCS>gw%%`?WQ&(t_wO25o!aCph>y>WVwK%MHU1ZY*=6aK>`*~i z_Sl+OTKc%vs_S3Hvc~~&A8Z9wn1ht7E&Vx=zXa;9Rx_Oh00000000000000000000 d0002J-oLwX!M*D=Ei(WB002ovPDHLkV1m43Dail; literal 3052 zcmZ`*c{J4PA0CDo`!0-#%Se`HkZq81Y36GiqhxX|W509l+n7=@!;mZ^Lbf8xy_qsa z^AloZO{I)TSsI4Q(lstJWp4fE{_{KM_s2c&dEe)p=Xsy^dEd`D?>V1*A8)k03`_mv{xhW@qLm)y|3U*Bmd@wjB5kTdZwIxDojhcU zxEduXM+Pk0e2#A^h_B+t!I!T0+vhbqUvK-kpUZgoW`3<__xp===fsSu^s`d|dwV?} z|DI2{Wcb^X5|>Oc;@c1$UqQNM7?R(mg<5z>EMsTU{E3!tHenAOB5@S#3CX1iduu4m zY(&-!WvpBKow2L>x*a!zT?lLa0plO!T5^NyKMX$_{Nk#-euS$cTy3c&5svabxGUY- zK~Z<4N#gt%LZHjClbldapu=~cFG3iEQgx(e;{{40jz?Ws zI^PJYgoDviSNk;z`bzI$*==En^mTr0&=1+GqQXPt|6=o8wrJx4KL)irNPJZVSHmi#gch=unanuk`lV|U+ z%h`=*{f%Nqjq$W$$_?-vF~oe$#TZ5<)crcD_8{!%FIO zgMMsnlnUbsSU}t}U>@2SeeG@~19>HHHq@KoLAl;-s#YGQ&TxSyf)(UUXhjq2R6l%n zT_x)Rm~1@+U|J((mj5X_lIuV()iOL?-ta_DAF4KP%#eT{e|Dv9%r49r0eV!+PIL zc6}V#nv=U5hiiETzlEOwhlq_yk_u)-U#!sf6@6ePFFil$u7YD}_kO&3vu~2b+EDr! zt)u_vXDcz=IQAYTJL@r%ti5@-e3`tlWpan!p1bfOQ$rcibzG?+Ya@&vE5RS{$=uN1 z>cmd;YJdFNc~6hX#Hz(tw8yaDD+)a;Q>&Vq;c+d=FGzr_;RTHEFF7$cj92n6?G(At zo4%GBDfmulm9mU{hHQXcca$6FlT_U7pC?-hGlq4+%ZuUgI>bs93bu2($<$CssX;l< zJ)rg&I=&>8(ljSNT4nY=71-=-(uV8oYbd%exmKPUFhYBOXocjLdGpSF7fw=X?kVDk z1fb!5uBX`Y9DGiHW!hxf)As>3h4!#C3V_{KlPqhBF_b^Blz=VS##80b0UZ0%6Q_vJ zm4J;aN3i2LGbSq+foK4x(a?6(+*zH-eAHU>bIYW`Sbezcm~)zSFnR`Tr}eVj$j|{& zuZkT)-24V=mcIts@9_f^o$kn9S>3z;15sQZ0O?k05cX4AFb5L=S`j;T|3wYVZ0H4B zzS8w08`)bKO%H85HR$(xytkF7FpjV}RYZDRpLa4^KF(30Lyhd={uwsn&UJO!pJn;Z zw198u^qIMaV{4I%tG2Zb3O9H)$vzLp2Cqn1CAnWZvyJU3`#`8&+eAm0?qdUNvEv~X zIAoSBk9+MbJ5-t#E{BA6NH*&{H`o~zV~>l}&GHU|&*Zls1GvXmw;G2Qj*rH2F@J?L z*XF&~a~PMR`jM3p%=uiN`IPc{|HFm8kzbOkZ_~jW^_ov3*w0eYa$nqnscE|xa?lC= zz+tm`4f;<9Huf0(jZbvB@&a3;jP8z?{+#5}xvvMjvmUFSk)A5fV<>X#pGR-bAsiF0 zWohI!^BgXyECBV|b;tTR=l#*HYSFjr#`f3=)XUG` zS|e}u-y>T)dYu*z>9=(^Zx6MtuYC6)i7qxaOf4$JZ46kdTpd@8fgT>hc@mABt8)9> zu=N+$npFj+(jSDzjRbD~XD_zmr7xEmv~fZ0%dNyqflf^%JC`$(Ej~|`)66$h^c03! zWA^0xkLKr0S~jD0zP|2S(9d}wdpZkfWd zyfUw8HjQ6|&N1qpyNH~b9O$hpk{)HVe?dR$Wcu4AzkD^PVg{oRplGPbn{Ygm z<~V!{K0UT{Jq%G;LHJwEC_hruyw9_NGmtyJPF1&5PSJc}f+u1baVPprSi|OO+eiws z8emRNZ<`5|bV8406LiR`d&^gsj@2SzXP6vad-W5IGAwat+%3n~=7lFz8T!Rua*a5N zXLDahE{h(nIb&ctYKCu!r87hoq_sOexamoKoQtiw<{=g*;<5?gIC?J^|NS-`!#upW zOvGO1OzWOeHk^jkM(HDL2v_b&=svrzOEbVQ(IaRk=bcDw-;B3-ORC^MGH>HQGD(jL zyhxO~EUdc>#@&wa$(!6hkbnyi<%*ghzv)s;nSx{GH;MU=lPad-$FZ7%Pt7$HE$Pa) zB`oym9BIfr!dmfwNwtJ2WSi^8Yh{d(G#WB)4$BC1lNpw?QN>As1xW9#OnlLs z1eoaHn=%mZ&nVd&t;u=|&jNI|qv1g=s-j!t3JB^70|%#G44`+5hZi4T-qJh_jUQag zoK#>DaRxu2g6?W@>)?C~QL772b;GAdgr-KK!jmIK0J20{TAN!~m?LdZS=gYgktl0x zQzR0FLknAktwO6af$!#A-f8cL>>^}=IwgV Hg+To;Pw9a; diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png index 83de98849d92a486e5918e5e4451d0ff9413ed81..6d4c10256292f2f9c3778c52e4f0acefb171a148 100644 GIT binary patch literal 2527 zcmb_ei8mVv6Q?X2+7jxDtLupSTG!XcQHnSkS6x+7td=;csv>F8Ho7aWX1A2AD=m#H zb#y68ln|vwQ&*j#jjK{h5=w|zeee4dcHWzrH}mHGX5O3Myf+!1?$8rrATa>}ffFvy z4&Fz8@`wH`a%3}38>|Zm04iJ@?0iu0bvk-b!%?A+B@+;^7!)pt6P7Kzr=5;*vU9Z5 zW+<0aOwW}u{*qT$F#)l#g^^)aWo3*MjZ%|LC>ees`xo6|R8|YnJc{he;&XY;%?r2I zA=Y$jYg4-Qya$`tXnJw<;9BW=9ka5gIY#iP`+q3+mU5d67*s4BxB@L!h!5x62%K<` zDmlfP#u6NP5JsmfUz*j2#W~FyG4Ami1uC!)&S*1wfp_Uep1#E~1h2Llx<;IM*8}HA z=hbZBu1|0Cf$@&iA&!M$%v5fWs6%o?v1QJIA!8Ld!~TB%rK}5USO3y7s}?KjuvTza zq5-J}JejqNJ_B7|=1=(oE0^a*pFeiSh&L{Nc_iuvS9oE12oEu!;tpe%iUY7;)l22$ zJ^2S+RlPXA-lbplM_vL~GWZG~9eI;?i!~`_T*|hn+VxyjapSYD;~>(F^HewWhy6H! z{E1paikJ$8?3@=In%%S~Y&vl^RfnPEh5X&b%U0_7W<55^NvS|p%h;LekCEX^vdGvT z&caV3jt3VSx)WU`x>pII_^}OP(;b?PTzvi)LTKdJp|Bp$nvnx+>8A;PF*u<`5$p6V zlufviYItrV5(V(vZN|%{y&k)%3Q9X9x+}c;In^N z;PE|&1y^HE1K+>5Nq+18n}U$v!vY60xMzgi%30um&orP>#$+i0(r^QG7bBBgDwpw( zp8n{ZDtsc7*u39A8utGE;mI!hNWL)V!COnHl?CG@5TbSx_rJ4@EiBZDY{P&uJs9Y~ zK?t=;UcYc!6R)~?-NDM)+%2DxBI-1&#mIFPl1%Zukab4i7XCy!sx$=tY63!9BeeKJ zldpGT?;u{0E)B8Mu<2QRg|>=4z;_zfzpDIjy}Tq%-4NFr&vx_c_g|uAB22zKVrt?o zktk>Wl%ck@B>(F76w)HXWX@nYpZnri4g!fm)2X8z8qB+Gz5V3~SgH z%@l4Ysg)MD_Hfa6xvwzZtXO_Rcn-S5iK1;C*Yo$d#9U1RG z_{V~OiX{(IaNg{M&R$-9=arr`ncS|6oXnnp=cQB_%v+QewMbkbGKD$)g{r4FTttYM zyCb6Z)f$_-V;_)F9s z@N_`F8|SxUu45?}^kx|rjs9zxlqV9PQaM)7-YTecBD+_IOr{x=*cjdhAnyk&^O8O6 z&=0+P)8bg}UWJOw-kSb?yT8x;NgdV-_CCDy|7Mp{*MfCtHDxa3Px!I*K?qf^grQLkIXM$FYb%0o242*gL zqlc>Q3L;5|;SEkcMwFnMMVSOht#;BK*TjtTYlPr@f<%MFkh`&5>$mr|1s9pWp*?#Z ze>JSz{`5!sbjL32s;U9JGpnsuZq_rfY=|>jXV5W{6BqSHT{uL-R|}usRq2P*d#r(O z`k+|g(Jn@pWbv`>HEP3o;F!I1h{XJx+ubYorPo!Sa%W1m_OYg5oHG7stIOtdmM}4* z%~+Ao;h8+Qg1OpEn_}<3N7Kiy=M879Q3_HX`mX}*<$@@*!ptgF%V`#4O(!(c%$D@Z>$_Y2PuS$~S0Rj!*P2_B`&Zt@ zMGuM(1l7PEwMf=0SDWpuL8g>eDQOT6lP>2na}Pn1H>M9klD z9kccE_GBpCw;F;7I%b|YLga2^XLK~1<({H5M?x|uHt~f|Dtsz;m$njfUUkoBeUBNK z`6+62P583L{9K0-ql(wMEE79t&8S?eClMzN5+dfnAMk!fAwT(d&tEjHb57JYC|+1< zDA9(s5|$j3-3Mlb125W24O)R#HH9Az;a;31Zri{22jLO#5+B1O?nYfX8R>Z7(tsgx ztkt;}hQ1K~9&tC6b4s>b)g60K*@H5?wA6O`Tr~3vM#k!AM(64e!CRwvB)V@)nPtWB)J8wAC?+T6JcoZ)bU z{9Jq7jcxVzZ%|#hXu*yrpTT&yGOL^isj_=+J#NMu;j7#7mxcicm7g{6q=k--wTC>V zdvo50(%A?NdBbf8g$!*xe~z-nOeDm->!nKb$rioboZr zS-f6G27FaZU5nFMq1f+QY(2u(a(9HvWo`G;ufF}DY1F=s&?u>&6+dpz+m-O$+1I=S z%4qo|3rVty&zv7P4quck3M=AiN%CloRuI+y*m9zjt>^0u{ z5$UHpYx6nNH`9sl`xFycq-;^^*BXCH$37d~mT+W-In literal 6581 zcmZ{Jc{o&m^#9B-qao|q#+GGhFqW~52w4XqMw5`3$Ql_^QPd3Cw^Ss`HkQd!w(K;r zWr-OHS+cKX3m-!DoqoUP`906?kMDDzd*AoG-|utIeV=>Y_c^cEjkCRA#>pjgwSbXEu`V=62Qqz&$wtfb<9eIAnH_Rsew8ssO+m0RYg+004xD zFB@^X%mIj-rI`uf@4q9rrT8hchb`E`+LUdTgN;Y+%s_w96aXNcW?^E84;f#76`Fzn z@*-xsh?fV&7zdJWLbcd`I`v*bRA8m?((<=k8|9nf*$;S5m8>;=*}preJ?-># zaM|KfxNqh%XB%sovP@P>>4P62kvjx>!K4+1a!NkLmQ4yp--mT?pLiE2cR zE$!UPk4E2O=k5uH@P}|Yq^@Xr2z&6<(GCH{z-3Sja6%_!@Er|L5L1O7s4i`ORPB{h zCi{b5o^XbQ!Tow98?x=4>bc z7UWL48!qaO=T19OCQ6hcR&FLBQ+2o4ZP|1mMT|!CDyE(Ifm*2iK6@lBJ#<2sJm+OY z8Ai3oMg@Uu)qf6&uO5LE2ymhb@vLfl9U6;~zf5?Zw|=dBlY>YT3)UBn`6elD@T}*=0Z5|9iG*M`i#mu4uMp|s;RQrG^q3N?89%6JPGs(rIES#g&Q)XBzVihW|bE|Jt z@7RO5LB=?v%Ct^lgJAL^Nn{$!)(_&RN^qif{S#+%sG#c8x4IYT3Ye4iryLe1B->BP zRUA}Q3AeMR1Nt5p2MVjgj<`zMVGcq4rY)9TfCT1?Ktw`Oj!q1ognPrNFTHMR$%4vv=5U6;xKji05IbQmvzS5q z;6CqzR-rtQ!k$Nyqxz%?D2$Ta7iPZ~gxzjB!8*Z0T&^ORo;Xy#M(VEgLBDQeO;@&O z;m+Op8tj+pwUt2|>S>~yeMI^>S<#t-C0DtdF{7lmx6ZK33r#M};aqXHPf6=!je(-h z^7pyjH1$AZ0U5NaZr$Oe17$y_#Jg66uZWnU&S8rE@~K}KsuP;*k+p|>Tgeq7p_pJH z26MQ*1te;X>$J{JWcYqywZGbLBrVD`iHLxf9U{{^hgnjtd7vxZK&3A69_T$Ps%z+t z8;#Yo+2+1u|Jl~09uYZJ%Euctf0_w@4MvOrQpXg5trK3e{oz(jcr6UesFb(g?(sq2 z(N}~q1zDyM3S&W7Mw+Q66GYQ^W^ycPF9?IeGH?n>R8$eytItkhqR${!1S~%Nvy0$P zV}QF+H>>BfKHc%+&_7dk=sY)&x9}t=e z?C_N)fSVFSSnG+PrBlM{Eojw9sAe)$<~NCj1mie&|X-r-f}7_?ksR5aFAn2 zM>xZo#z*>fkTLNCoh|Vh)tXL?$tsXX#ALikQFQQTnw1E+7Qo5+UZ^2#LU(*fsN7Qs zWCpq#{!klUa7M{fOdgeB@syUHH`a6FLzc~?&>8Uqp&5gPG>u6{e3ii(=^XGzxF}x1 zhsQxNK5g=(mDCTtUlQJ$O+4D>C+o@z!=3s$3UX0$!Q_^h_+QaavpqB3(Vmn30+LmZ zr-*%g8icJogyaDCS`#X$FYnU#Q7TC#X&0;vQU>4I^|!*li1Hnj<5{W6-~rdNmpk2F zu}JgO0iFhq0%8s^a+I3~|#^}_KiI1Qpnk)U6AN%$>gL9EKdzHO)FgbA|kqEx#KPlPmw?cerbZ=a_B9Tdt{;%7UxE_{NCA>X-PwivXN~VL~ec z-OsDRLC9abkQv@dKhdV#OFw*rlea%j&~AH|ULM%nW08;*i|JlE09>*gky1<(9D$Wad;CQ=4d5(<&egU)PB{?erV zp=s0PSAML{L9>jP%gh-6ee~e{o=gS(3NhP!u5l_qEzG$vU_qU$mhV7I=YgGALbC&# z&hd{kjvSNtim!_XjUqMiIgfNJA{k#*;zf01n#t8Tw;wsU|Kj^34>8ElnV_L5{uRBN zOAnf#Xl=hzcy}^104tf9X!bPr=S0id*z3g@ECmM z!u@OyMo$IMA<;yW6Wli~on3YGjrLHQJ8--&N=s0TZ+7Tdlzf^$w<2Wyw{^N_DfK`)M9_u)j)%^J_ZfC*i5gD?HP(F(sQx= z-~mg9$GSc6dh$&@2rrk1$}-nGXGM6B5$XKvu9TUH(@Ju@=|f0ZTOAr&&3_ZCfnO@H`8C#dXB0|^}>8*}y9L)NI5#J~^ z6}i^G^w{s=`#JBT0Kl}_2X=JjxR4@)Wx37H_3^uUtMS!DyBsd;yPGM}Z|8%Dt0a~0 zv9L*9dlk#B@85Zd(zDg~?iphj)W2aHQ|g7Y|9Ay?t?r56Z)IMAF#fki zNus#-sZUhNg$a99*LlBSt`HV&tiFjw%O`4_FIQ;njns@r;Mv^FDzbN!$RkM0;j5>FEw&QBlLqr*K;_!92%lr&W3abgQRO&oa~B+6|EW!_HU z5miAi0sh`u??m2hWyb5YZNv^Joz6`kHKvz%;ZLPDH~0uTz~bS0B^-1+Z!r*LI8D3s@P z+F^tSw2agL>rJySg@F(k3LXCHv$DyHrSLG(>m6OXcn7DSVof!Eyh8aBtCZNhmcXc* z{2rON`PV?tDKq7T!X7D(-dlv8N6Hm)!L5zJau>t?si~7m$cJ09!>HYEk)b}X6{;IB^UE)jUfdu0%Y5kPL@0WB^d@V=E*aUjllbm$-OrC;x|RIq?f!ZqV0-kl+6ob zUKv&kh*a+0$M?UulZ}0$vzc}T(FbEVwbh*^{xs$G?_ab%90K46aLSgpJfWa1#LdrD zzKoH1E%W2NYStuK5sPkP#0BFxpwA0pgZz?|3ej``;|iJ}brmGv-hJ?nb`5!Tm4DKv zHo!zyRmQgcsQ}mX5kkY#ufjd+sv29;MtJPd26_C0=I@TWS&ym{>#7nZyGdbCKb@`H zcz~n)5lD!F83;T*iOKsW%!y=-ec|sjethf>C%J$B6y5sV6?#^qGZ3`4yCz+E7ab3DiTInldu1hW zZ}VA>^HniG2E++B@V&v?Ywo1$&BIpj9G70eZqjSh3F-~oxYz)$+?LBnpOCjGd?IA@ z$KT;#zJMqG>?8T&ZPwIF&a%O#-1+oSp`>(?WFxK%+qWTENssszSI5MarZ3NZi^IwL zQ?cvs*+-Wm%5m!q(-mEqmloA?<}FQCLrl-E>%j92SA7ogD5K2qeKmwXGD-F;?Kv%z z0lViN_qUaMT>q+7N3A1thtK!?ub1unlM=TlTL9K>fuX;xX^P%o!T@)##lBhTYN6+q zzwtJGpQAH_p0hw62mM^BAA*S=oH9K*(Plk+_UZhk8a2HEFVT_V{LGRYB=@HW zYGPHa^&+97lx+30`HJk;V(em(kjI;`181|?OSCApw=Hq@y{>flrgiT}u1%8DuHJ(<;8*JD6oDK1hi~TBn!gChaywg}X^8z!e^Dh-KIU&B$`e70=btcGW^nTTbS%YV za^>_!=ieS(;@ibq^gqw*DsS~MmcMD7dNg&VUJ^m}NE18X&>-@6yZp?U=z;9U963#m zyJ51MmnLb<1kzT88-bmk zTBILQ_KzYklm4qkLYp|Jw}YRV&NsQuh6n451Dn^srdKh+|0f9k_y933^2xyMR_f2sasQzkT#XlHS+>tL z+?rQ=^4ub{pU#>tF+xE_y`Z8z<$BT1WQC5pVCB_#wTYwLmz{0Y-9-*+i_?kU@GG{Z z&G+~d_bc`8BtucJ78q?0EoQyoLC?yJv^+(7{ia2rrCLFDyDG=QGG$9T)i{rXkRjeG zBpjA8`&5>uhm<O8<=7#{7chE&LEdDd zXS?Pkh4@IMj0HOrJZtsg{(iiI>x(G)!0Or237LV`h=;|~dd;6O<$AdozCclWZlcD( z*qvx-Kat5@JRNz(>Vkd3{|};<(tW>>@v8*5SKDuL@2MrzQA2aG zZY0e78r;GzgO*4|85JJNSOorG$<8rS&R(!MbxgbTAEGy_$@M|(AyktPH<(kEwjsU? z+Sz_}f08->@eTTb4Y_s?gvB)`7vU*B4jD<^R(n#QN`_0um(i zFC7HPNHLiePtA1?#OI3I`*H4|KDo|H^V=)UX_-CgkLYSyeY!uTw<)O zWSCS*#jd*t0_YC1R1tliYK0AbgeCmrc>IQC_a&bFy2%<3MO}4(Tl6yPtH?cXk+`(f z0w$?6R+Fdp1fn4})oX4S4MjOG<*PkuqUQe}KY|jSYEQ0F6FY{o>=L0UF$}`JZh!tVG`b1jl$?jhB5-ylSSQzUuZ^M);))9_Py9T;tqnPs& z>*j&DWQ8X$lK+u!R?MijIKbl!gUOn}sW4G-NlV*-8Dd#t$5<>CbR`n%=RN{Vk*+)9 z7}M@M;Kzag16EK1C@i^YHtDHld;X7k<#1rkDdD*Z@49y>BcJPLp+m7lnaqj2FQ}lbcr{pwAt7|v0M0&{a@Z`2MdY*p z2p@EwFL;;C=tFlVt@hiPv@R45%p-$mOJjaqpRG z%`#e(?wYG-VuLsoChFAq+M$aJ(#polYwcv^R+U_%pR^m))MXQ<-`R{HdsUJ+X`6;- z4uHO~b>&r$=uUSDe=Tq(17AkG1hj;^nwX3XxnO@vW0E>zQ!fZK-%&e%(>g&WSD>?U zfaMQ-kt?%4(c$%VFw06xt;6Y~*2i2KQ3HL%WN_noe47z#dJVCPVx3#%nEAoO2JYEdW^tlypNe2F4 zb7l*JQLPW0mOwJN#DStzVZ#|G0$_sWoWk+0&5Q^p8~gJfD91}!78XM@*!W8!_mSqw z66mll9X!^KTQ@Q~LKJJ;AzL9m0qO=Wv$z_SUMWPG`7^pC$zQemPNdg^?XQc@@XR1) zZqQr|PMzv<%?&y&sF zk1dpWoA;%!N+of4>+e!S?EGbyD;&&!7R>s!{^| z;*yA2D&~@zsNsfT$)xpYnwk+BDDb7ZzMsG0^IX^S%Q@Hc-1m9k=e*DB&T@Bk+$XOk z4+4SqUA$m_2?W|@|KpY2D;Wu1c6DP>)>xAlwLfV!!tQ8$G#t_|{7KomQjP3xI=v6eGzLnViY?ma3|Had)bTA3+ z`syqM=L?V-ZKMO?q9fd=j0spx*ybm(bx-f`Jk5Z6i=iK}_Hrk>p-IG9g!!OHhjnJ? z`aQivD4GxOp0pJ%+HNeeq>6`j9DvWSQG3+A)SHuGW3O)h9-g5+fe)WkUi~exN#qB@ z8D~$YkeqI4Jiho8!X0NYh32~eS87^8`JEw+zO?1g&cnEn2(d^2!Wm>wF2I5Vyn3sv z1V7hDf6ZaM+aBB1{OIv<-TQCa9!HM!;KSw$Pg#F6-Oc?;Vf>f+s43@nMF}AhXmJN9 z;;7%sm+C3=NPvvrc*;A9nH6hzN$BwI+_Hn$r!{SiR7iQMugX2Kwl}7 zC_87Q3P-9xp3zZS{Vg^q*^t}GI4nfV6xN!YaC9s_VKpZCn*p<0dX>eI>ahxc$y zeD0U?y>LI{ExCV+tU(r#>|x=v%2wIPT%Iv(@Y|NuaTfaEyEYK=I}0dvZw%y=HrR zno$V~s5;R=6cn8yazMJFIuz#5L8Kb6FI+#b>;L0~N>c4l!;c1(oN5s3foT4=I!~bOI2q)#tT^5r`uwLjnL_h`D^^)$QK%3d^A5y4J|TbzwJI9oInzK03D?B0=xn;d*F&ZO06f5WQk5W!hOk*BbAcU;}%~tVo0~c zyN$VI#%-urZ@7lID@dEBna)?9fMm9#Q(!n(;LD+w1CU_+Ip8@-11+*%vjMz(+kxx zqpZz%VGhHkzOhq>Y}&RqVz#$g4F#2M(F?DquQSc6C@qyd%kIPM&_!t7^m;kE``1=C zJf}x>08l_de6~L_?h2FK{DW{DMgg?kmzPC6?=q1P1$-!UZD>PYMm~cO1Y-9W%$b$WJy*_J75}WFj_4KWE0}dx4E804_)utG7s`y$bnt zU`e{g+plDjJ_i5Fb3~Vw^AS|*L94p7jAf0RSZdX|+hz1a6tFO!YW?K$c06D!L?7WV z9?05!a%P{oZ&yl8$xN`u%&kLRV9_P9-pUYbt(^ZH19={!A70NxcqFV%(Zz{h+ir}N zJm|nqopEt}H~b8h9y`ReKA%f)^MEApWJ$KXp#j`9(`}Vg^`PmEF?%_i?U4A^Zsyr9 z+z*UyA#Yk`6z%I7#n%qh3}qi-ey6~;DwW%etq`fW<(2Aa9oXgcvB z|D6qlftt{TeTg6=baTp8GH+%Kt!Co?G;*sjEecu51%KHW%o zB-s@bqs_l;(>*DkKA&?U}h8Dp}i?&wt)0;c~k2@jks_(vLr9(3d zWKlm%FeZNmOsoPEBkQIUfu?*jz1Tsu)q{KoruSP$v9VxGK{8zf-aq-RK(f`>?kY#XD`XdJh_23=SOJ6`+G% z*(qAG%7%0jO9`@lcRs22NAg$i&@M+=B~CX^uUJ>_xA#v9SgCXyIcv(ku-171$*A|? zaZH=@3SDg*c%yhtEUUOm5S4e7oyJ4MlkQP?gNijzWy&V-pCY_jpL% z4|uOvbA^LbWy0^>w)TpKJmXYNt8t#pb4UDKjLGX^L4Nh- zptiw-$;gaDP2jn*1XK><<$U9(6KMDu;&mNzsi$Fy zMDqQBf@k#8ID6m&hHJ7Oz^~M-m+H{@O}^?5QvuaR=!U?TOmi$w2P~?J?SP4v4cQpp z#kqqNcWY}nr<*QNtM3^_eRN75O$-S3>a0=|Xrd6eRnITpxINIfj^t&R53m(%{# z-Y-3j;>ujRe6rs8DC>pxLD_tO&puySI%+u*exv*jZ9HNmSdl5Pi1HdWnKG@{&pRwm z{?{+cne;)wN?oz3fPqXVdeToDa(yFboBX1zCPQyh z``W81YxRE2V3ifBciNA{Ti~Xwo#*v7V>fZs(xRG2@EFtF*wH_NoVw#2fnE%{EC;6* z#2cRa+YPHt1G=^<+uS)F%YlaL0HYNuv&oWqp;V>Oe{{dNY2Adqd{+xuH~`d59VNpG z9R1V^nruwC_b`sN(*^*X^5STxWq43Q0wU)sA&?rZxH$05;$iLc5<$QqkG0q0u*A3? z38bUgj1A@;XDed2MYRuT+GAT&Zxa9pkW z`*U5^xD@B^^~avUk-2}f64xr8?n^z`A1^Vl6*4?8D&wX1nm^)gzKR{;AZDG4sc(`7CeTf-|v^Pt!Eioz|DbX%A!4%(Rb)$jYmJOZZ7*G6_TyOpH zV3opVL>>VVseIjKXYLJW;e^APJgNol`xmlXYeL)l!bj4=cGPYUPKtgUQ$*FSRHRu1d9dF8`bu#_J3LhaF2`Al?^Mh`Bn-_YhEne?7I|Nf0PZvQGm65po2`9DYR=ZtEt;i&pyPeAxi_RU z^3?Rv{OBz2FOi>SSrK}=6t(XYBu*A>aQ@-e$%ZK?zUb7Mh}SGR#b0T`wgFC7qUj^C zYTXxUAl9Y&;4(drleZLR9=a=`9~rjLf5JJ7qd|-;ccmJNU#Sm#R^wW}kl3Rx;WR&T z`4={$Jz{f}egnBbgK%u*gY~fOS0^w?k_0Im zir^kbaw&mJMz=ny%Fma1+Js;^;(LeQKeR#ak^t=8)27uH2`9@{g3@~tffnSeuRWZ?_Zvhm)ScMP`Y}& zM#iU*4&7#>mQLvn6%wwG79gR03HnPG)h9@jo^dyEv+ab%MGsGL40_yA8wx0%isayg zEg9{xFi?L6o>Rj5H%e`9?>^*f5@FkEg}WGm#@m2GhbymfFtdRWf@#=X3IERj_a{t} zzYnXl!((=fZi9=PAu1FSO^$D)t!d;P#sfFW`d0oHwMsdAsuy)ZqY;7WK<^^dbWCRg zACX!&RLL!6RyQ%yPXklK+QEvahykG7#Bm2%HvX&&SMDLTU+ zYV+4AsyF~70Tm1y5J)b+Wr@P!q=nuEv*T`$kCdul8#&aeP2u`zi8^t17q|9~2f#P$ z%3|{_qy$Qe{7q#ymm=>47**wNx?aK#^9YRhKl(;*bxJanqrI9rIzsLh2pAg@6s1T6(FoFe^*;VT+?o5~4#Q-gbI$H5&u+43f1BgvV9kq^M1nvdUYnB^r$HdF z#lL?}IMCuXYyB4ZkiUHLv^@wEuM7g=(?Osepb5_gfuglRpjjLUWK;|SiG`Q9IvWEW zaBn+n3(((xf5f&&cYzi}l#RV5;x{*f|ER&mt1nN1KcE6=VZ!q_WmfL@Aj%$CAaFGNgB4M;dAPm=aKx-++IFCg(fcZeWG5>gkW^(y!VB2*(v5Q}mFoU0rEHwXpS$T`WtQ)xtm(DULx@hzU%nvr<(E7S;PfU$}>7xq%)qRqa)bP@=UP z^2}?!&iNem;k3dm{)bAV?bC*cH9ChvDMTeKg$hdU#>w4lwTDc)iIV7wUf^o|)W zgbgkcaV-QtJ6<}UsI-Rl9gHkwOvv?1&jCkY7eMC8uCi_@H!(lql6epRm5pRwpgzA@ zqI9U{%+DZ~j<+38kGfI|K8OU&eTO6(`Vxw%w&C*yrC4{}8phl;bm_H8h;inEU77nS za;buBZjg)ztqI{^-OxSf|dABUcREWkCve4Hlo4aT{O z@*9?5=9KFZmVZcxutl$RA`Za%yDm3K>F77};lsT;6sUsvJOKbVyXNqO!X z=h@Fg0dKcLh;D4N5?_1agzN!O&or@ESU{7R+oD~YXYXtIzen0`srvb}HhIhhu2#8fN!etsz<@p`eCN;Mu+eo^Q6Bx4N|W1=$H^>OT@K z<`_?Rc;J>Ud&_-Xnm;6Xm>7&t!~3U}0uGXw2PHQSnFG!=PgmR83_bP(A27cTAN7(> z-4N@Kd;?}0dCQb4ed91ruLpZL7|MGnorP{vItA*d_AUDi5f*u!iL`Xt8-zi>5VPW>9lzH;(|U)~?KwK0#d` z8lzUx+!X=w8>Ol4Y=*D;Xs~Wx1(f{2-DHVJTiA8z+KDy1`Xn%bn*g20chKWrE#8H-M z)Y6LjMJrDjpiRpU5({buFA@i38e$?aG~+-HWzzkHUFSQ^?q$d1J!FT-N!@1X0_JYs zurgmZ!QYOlNAI9w9v3m2EP>}(C7fz2#E}0S9!d$xgpx%pWrAV=zc?=&k0F@yWuMgz zcG|t}>0Ihy&j!240}FQ6zyuoom+FQ^z5UbyX67#N3X5k=1>-Y-vwWyq!A0k#Qw;4N zJ(cF~_jnAK#bgAku=cw0-bn8F<_i`*!BQ61|_kf0`I(Qt{ zjF#zj!VuvMU$$S!s;R0@j8N&ZC)_6Td6iJI``A7FHM%yf$50PAO%Gtm{7AY3sfW1V z{eXn?hO!qdCiCySoOmlQ4~&nZ!YVOs7i8c1zP%2Nw<}VjHQ6MAwJ1V>1ri)| zQja_1$}=YYbN+SKTe+xDS<&)iq|%B3T@SouwE4t2jBjj;U7iL;%j7X^*7#W>QP8)F z{}!jAyEej1g!7MI^s56*@KC#{KGM zubxS^!@A_@mGL1oCRuz-F&w!hpi9y9%-9g?8v(Vow}|j%mkp;AWF3j=Uw(bvJMb!9 zgE_!ngUUJo{Bs55RXj5wCE_%@<9-QrDpNA`FuUNF*;>!t?!NUld;#PyPojj(hjY*L zp!JXx%Y^*b@D?t<>`(YR7Z9XR3s;>g-G-wPe9(_(sS*B(pfgc(PVpbtsTCbH45;m0 zGNLPT_-`BStjPPR{P5sbupCqqV~O36$9{!J@z zNXn3Vi!1yj;I*pimP1i+a2WYdo;lhab3UH{8To$Guj~v=n)`fi=JJsa7k6-n89m8!RZkOT5IyT6=6dIY#t6dL%COac^G4;uW z`&dZY6Yv4V&}a>(u1BD3zzo0xw?2nFGKP1}P=9aoviZA5>yaY)Es!naR;>_tyyFcR z91?cB;nl<|SXT-CFXS?s#pTWuW2Vy`Mw!F=5jXcd*^C*}!oFheYshRNM*h!Bxwm~P z3M=U-d`i!5ZW9S!*mgub#Q8Cg3DI^&L0+F?&eLvHH1hf3nLf9ncrPin#zej5#EfKn zgC^cq?j(_#@sP3+e2rT>?m&t>_goPA5x zQk$VSFDK2!fJ_)=EPmVx94adJCDbH*QiE$lgdf_WoDiMwh$cl7z65elQY7}l_sX35F~9i+h!EkcTvaPhAKmu;TRNOL zQ-4K68`-9*^K~VGEVOg{1;>`==$&_WBe~kjoR+g0i~TY0gD_VtRNlK0OI*+woF_Vf z;H7zQH%swAV&;>Nkki+PkC#oT^CCmJMd6Aw15+jLNeyfAZ zVl)1eRhEJgbR_ug=q7B`;lcj97paQtzv(KeP#eD{nrO630`i`E0x#?X{{~poT7_Xb zKXX(nNqgL(XJsXxk_Yvt_(scWn0s=jF|y)oikR*^+1&Ur@&lhwF(3y>a=QMzUAQs2Kkv$S;VN@>0VNWHNC3 zT9)!w{ynO73U1$dZ18>&)0$H9apawwEf*X66JD4;Uis#3(-)C`BNWg6EiO-d6L+YY zf!B2{N`okW6}E5K(5}LbA~bF1R5h(G>Y$-T3B%ZQ+8o@BF-xdBp)@WVTv*DyM0aIl zm2ZyXlkmrx2T@F2(*74I#-HQtE6>i%Oe#9hoNsGc18c&qK>oM-ah$E*n>xb6j{kiv z6Uf6)Qixm9Uo|ybg=HX#Vj9a+@dUwRk7Yl@htRQ`k}MScwF2U9Bfdpu8CH#Ty0aO^ zSg)y@yME_UnAyZeywX;~oRc$ik$7UQt}!^k!ktG9`Zse0Gws6rM|g(>oy!Pa8c#nP zVCEC@{uM{t`?r=`CdZ+VAb)cN>sI4-z4cnB;&_+aUlsUD5 zr8ZQ*f_q+TUsB9n@7WUVCB4l05ytC6+3yb{qsaTty$&bU7#IChSg<=pSqnr_`8g3HqL_gxw5gdSu zHy=NNt_2IY7%U-Ke4_;XxJ29cvp(l7spN$30J^)x5Wzt4ol zj8V=9G{a|J+(2A3KUSy1>FGm6-phUoH&_X(&BCwd9J{R02NsB$HI^Q-EPwN`C}o0i z>B9)4E^-k+ZBKz0*2gLR{(XbVtrRVn{{$j?lP^7uSczY{hcovyHA?gt_zW5%CP?`zI9I;hAOf%;t@mVr3(Cv*4e0fxo{rU&(Zw9 zjlQ0`>qoO*Rr@s3)X2SaA;t`G=_TkmIdO0SO&o#LI)!}5K=%U)ije!&pBiFGN45&Sw(h{ii?wu+<}t`LzF+`Je$x4(audf|zhtSb6ri zkg()Q;+WC5=Q(es2VpC6&MB9xXrmAR|)cAD}hEM|Z|#IDBq^>{y9TmG@go6ltA z#G5w0tuSexX&U#EhN9-%DGA_mCdmTpdM0uYh#EA>^hURd!z}YA)zCKrV_YT~Iu^mT zvh;S)W#)}k87vB|RKtj7oPdl>;fn9?JH3DXE-o`b=9#E#pG0;I>cQddV>U^Qj`x;y zfgcS7zfoTEc~!;VazNO5ulVMZ{Ts^Loec`nW}8z3u-6vxqn|{X+*Bd|LrDZ_{>P_z zsmS*sRC-Y5s%R~!*u=;u=7zm1D^8}xZ}U$Lvwq#o`6&K_K}ih5-1WAls} zZ53P4j!cx(GgpoL-J<*ZhUtC9@4z+jtL%{Op5d&M0eoIdlgs2OGRj;e&;cv*8r7Yu zeS^;`_1P5al2(a^<|0M0u7G@hp&5&!%CwTPcLpdXos@7Zt5TDU4S~t(H7VfMG#=#C zJ>A2Uo%V6jRSZcn7@{in+fXHjpHY3vp_g{r(o9>v)%|be=~?HwtQ@NUYMe`ZIPZ7c z8zE^cYMY1yiGI$_4ui<&elkHlOXnX<|3Fc8NsJ8#CaB6L!1wV3O^KmA=AjHa}9hG51wEXQZ6tj zBOPg|mj96H#~b%{Kcdkaocl!4JXOV=2_t#s+HwBsy+v24q>{DiG~W#=hN+KCseo>C zqAPPWyoMWjbBy)o7CGm>J{ju0Ch6=|)W}Y6d^j`N*HAV}_*)fE^QpC}3O!C%`qo5^ zwB029eOaGjQ$(nrH%E1?0AWhx4eI@EX`E@$%rT+))P8G~+SnCf?Qa_bnY&AQga40l z4(X0eiLxsB)}yBW6ax1m!H zA7lH2E8z=PZUd6159($H)25vc?+P(iM%5SnKwf5JZX(Nfu3@7C^y9Ra_`j;2boyp} zjpIVh33#;9ai}ZwNMCL2vaI)gNk-(>S(c6B6%V14CaojeM?Ge%a&iL}GEtY*Q~Zd9 zO}Qc_^7`Ppt!hcrR;F9))(DE)N{Xk{IoG zP{@eHM8N?}Ro=NUM5K?<%nb7LD4f(S(CM;7^M8Y@bDI?N1aZh>q=wopY$h}t!va5X zjHmM1{CBTeVoI20Tj=$LKVJJ710mCLJ{$R^^g%}ytB-azCHGV%0qY1BBNa*_-UO&a z53&gZi8#V`ChoCynP4vZLwRECY6d7OxQ{)8HjU z4$KGHunYmme;Nf<3ypFInqRx4#!$bata{nyb(Op0R&WL{6~c(ry=)90@f<(*UvG|7 zzG}6W_nY0unbv#OkYCWA>FclO^$;yN#n%;l5;9vvXT%OFm$oy;h=ig9XqA~r9m-s% zGn9>L*BBF;87^%M7&ZjQ(PpahoH0ll=>m)T?ZY974;9blK)y%QLV~|z=>^Phbzz*1 z_8LnFnr-!c`yNqWJ^5j<0U2883QkV`x)Hz?g{(QZFEFTAZ$w`7GS_+Mi{@GvU|G^i zq$6|oFR@ab6h_Gdkv}Q!tB={(*2nQg;ug2G@R&D`(SOng;WBMB;NSIeBV6NOzj<5D-;xF|HKa4wI75UBtjlD*lOUM%C8yPYE|h-Dp6HLM?E zyt9O8#Dl$nOuwslypnO|dfV8FB#&8&_HEjwE04Yfr0t&0 zEh4NcmMWb%{e5#=8%WWJ`^l}TE`?E_dHw;y{d$C^%GVNSEt=NWSS3ZX>NieA0VnkZam3I%hZ|}c9l@6#v$&o(uS*X9%<-Hb-X<(#1^5WX)ok_&%Wtlp3 zJ7fy%&-#e5xW;+v{v2kFQ0IKf&-E?694y*|nuuzp^LxS?cN=J5CnO979_%H;E4mz& zUZ5VorvsShrzKsMsDL|nc7NCI&xO1V zt^usdd-q0eqkR+jmQ1+Z`wRZ(Z>}s~wC-5`jCRz?BM?Kf%W|59F6Tr|y4ZG_uNh6A zYWZ{f1FTE7t7t01u$OCB@M{vZzFr8Ky`Ktot~_6N?EG9HrrInFasu?xvN`%WSv17t ze41ZIgq({jbl?0$lzbz*>p+rLAi0*N5S##{yBl&g1_Py7Rg6@+_4{9`7>(Y0yE>&W zl&U2)CI_q$X97aUNb(Tw-%|hcha$P_FF36hn)mnHY zHvUt5Mo=>YB}NIQ$Kv<#lVnuk{U;!Oup`-oq(v025VD!%ErL-`zVl*|E}Zt{sqna1 zpg3{XJ=K(G4bl>rc73(cJIW(axVvtz8fMZW?rmvC*1l4!8b#S`#RiSbj3suQC*}2+2OvysGSd;Gum|Di4Jq{L66lWA@ zS*BdW{6(E3Wz6I*m*=UisKEvAcKqe+u~TavC`+>=QTu}$y+Ig`iNFId+##pWnScKV zx%^l=%4)$}b|{N9c|R#|sbP_CHn#>QbJLV|)3Q6Dxprw+6Lb-N(F|c*FYr3XPj3fv z5Yo5$letS3+u_s|a_l$#PVhMrKCn`@W`(1-37GDsu(psrc#%JB6%`j{~)GQm*d6GDc#m%ew;wk#_YJ8}KaGS)46@u@M)BJb_- z0LKX7@3{j%`(LA%PlQ=&4HL_UNdec+i^XH^MFK3vJ#%5{AV>JoNgs>~ONe^w&-))L zwIl%w7@tlWqNc6qg?v6m29A4)HwhA)sv2%+1`F4als-i2cOj|Z9n zcCoW%`!R+Blo^CI<>4*!N(22?#gv4iI+X_t^fSOn)Ou?ZcZ!eQ^SSmPx* z^e;WTMqPtPqOK%~T)wf$eG(fV5aOEkO*{osiS1Jf9+DDyVu(^I^uHi9s`85WG2dzD z8_J=4*~1rgfD2cLkM4-N_Yk}3y%Lq+H@tYLh+$v(olSVZ2IMjCK*`Y-*P7xqTJPP8 zS|rfEh-^vrYK>?8`SnuMGEmomtakIoxXQR7!lJedqMIk4AsCrQK0f>Ms%Gomag8;+ zs!N(`T7gCXdt_P4EO3QTCAB?#Mi=iCbI3lUr)sn;Lo@!kv;NZ0Wob&ECHv{>eZ~-_!Oj;{{Mqj0B2cJb+t(njB zI$*PuuNi7rW7`WnQ+K(}C>XB;3PbJLT`M-MBZHAgquX>n{uJ1DSEL)k7J!to0NU+{ zWR7XMUzV&>DWLMsPog5NfI_Q~U@Kc>9|E!td-JeF=|-}ND6IQc6y5Xs3YYbr<>%*Z z0F1*wOtS4g!>n7DaM8tys2&z^!~cO_DVP1}WO~jq8{gc;aBjpIPRLz-q#c?H8MR+SFV0$)=(2k%aYgm)X+}G4(&lfZu$|UNR z(n9U;1C;E6Gt{V}vfv3q)2t&x#E6GVX-sk8Y7}JWOP*f8ugAHN@0XH5+l#HVw|cPK zLqv(q0jRC7G+tO+DsVz*F5fR<;@wDoy#@gsOAOMjXC-y!{sRr4B?r&V$I}ommDlhq z@^dy1{VYFce=5!-&MYI159j0qJSXM@=0*A&M)dJKfNi<&Jmy%ivJ_W#qW|v{0My|T zHSy$?V~Zl7;3I%;l1iN<`<)7Hr_Vm+0)UcT(bs@$#^TK>_T_-IQ5|@}vY~SsJ^4xS zAEi0F-8ylDs>nznAzXX_%yUVXGFWmu;Ox1rmHj{#Kt^6|1Jax#4NK843;%(Yk3oY! zuX3m+oRx~l{14-7=>a7ga1e@o&_gf>G%N>NWrSr>UiMsFUNIa3fYsD9@i-8>V1ujS z6Rws4G>~1nfs%&K2>K`k`n>5XMmNt&C@58%Kd$)7CPh;nKs~*MP6izU0cW@LUxyaC z14?C@IW+QiDQA3&W_kgj*sxKH4KdAvZhlYd90yhv4A}eY6m4YsRp4$+25?YQv=UB1 zThjG$W#%f^)%RfLl|BLhJ8FisC^OGz3Zdk$4~IxA`)}~=;95Xr3czwrBtg~56FezWA4Z3GQps}D{+|ghIKtby<_Qz!$4r!|W3<=C|_OY33Kqhp67#iy*0(eVZHFn?b z2{sxz32?$b6d;i6hf{sLn;yCvc>5}bre4fFp4YqCeshyc;~xa|t4&2P+NOIVwv+Qp z{+YkYsERbmI2-6z0J@d?*{u^N3$1kIVw)Q{fCKPQhb&k(bdE&0YjV@UOmj~}KGwcM zw%hlGIzaEZA8-Mc8xk_*>O3a$Isg*(;CjH!x0sms`<`TO2QXZ_Pp4T5#1pEcqx?W= z#~iSrLxUva&fD}Pw(N8FSztrurK#`fn5fS_p+Gr6NDh?T?Q5!ytdMo=-c2Wf`LabD zX9BK`%f*3<7Mpp14O0gp10?tF=b}(w)d8se__Wd>GgLbWbV3Dy+D5>U8r7udYUW#Y zENPTmU6ue$K<1fXoFwp)z*H`vga8f9nV?J7uX=-ji5CIhqo@+_OHnI9P5diEUt^>l z$x8#$RsE5|99fWhvOC#b^O*eT&pNB!v=Q+1a`bUE!2ie22?0hW-6GS^-;V@9@UVdp zux+#0Tm8sxFcb5rdq%%X>wBWP8XD2%U27JoI|6ki?U^@pMq<<-THyp|V~rsbh7qf= zYOl}`Zy_g{9kaUrpTy%m*wn*@{H6QtK&uSHWG(H>*~j1ot4BQp6yS9?RRYbteA$6# zdop*^9Vkb}^3jl~1dJR}b?wa;xGfdZA3oUUV+Ne#g9|`eg+Mrtjd;fU0ep~|t9`0# zH{CBp&=Qj<*7n^P%M->Mv|}n92Ps-K2rdHD&={yogV1`Y0SHAo=vc11LgntS||`J-}`jAUZDJJOhQJl!-iz%oZUQ-LUGHyuTc zJn$23K=-AXAj@HYq;^P0>m>SV2ndQKl&E8OvJkv%scScmnDqFa4FGtWqoK?%p;DzM zH7>bprE}E*tL)Jpua(G{rtX=90{FwtlX z#}-G;yI20~EW2ty7ecKxr#}EGOKhaU&(y*Xhr>)GzI_p7Ij}@sUbi0sY_ZN&8VFRM z9tCZkXCqGKYyve*L$m&X-!-`8s>wqV!Aio5GCK;;AP!|vGkIn?_g{%sf1Zwf3_KZm z9<~N#sKBSpG)x!44}qI{Nyvrrq!KA+N5^aWHl~PyD!Vm97sqMaKHo4Uxm$G|!>W&o zw1{r0ZkzhJ-}n^p1X}sV_r-^!Djy}hznZfmqjnPE+qHEQ=^I?udT4$wpuIPpQLkUgT_eiQ|-{K%w&O4BG>v2iA>c`>Tmid z`y*9cFdQN&hJ5|P?deD?zyer&!km*`sSNdIb9mSDWVHN&xZ(A+a`Sp~n;|U2^wPgN zD)(1FeVdut5{NZNk9D^D?36REmMX?*eB%%JVngRiJB&I&ayb*ZCo)X&K2P@VId#vv z;m4fYFC)wwuG@G5-RV#EDl#SAWMF?B*ZO{MGGDXosMVk2h{|hk%G|{Rd9&x{fV{o~ zrNC-89|1K9eB9fX9KE1w8n@(puxN#o4JzAFZ4EY-P`df(AVa$$&R0SHNf-jBLPR~4 z^SHPO`*Sl=G8W^;G3WGr4LR80qq(FX^i3Bff;)FzsHXpl$zQ~GPtJi*Vev7b+EFRW z@?4b9r6^yc%aOjo2k5BwQ9X?#M>MnzT#o1)>1iA3>8WXJ8)<7_f!9176^kwcina@ZC|-+P%GVcn%fNC!4T?9OQp z!%WUAxAPnAt__=|s1ZiB80PSO`+gsvf8z6gJodxhuh;v!uGj1Nx~|vtd_Hh-cG#_; zssMpNc3(JecLf50(zkv)wu5haoDGjdAO}=0*qwF%(_bWzXW%`ewtv+9rhBtx->HlWH_F1j-!{iazaBv;A!Q%bLyqc-GOk^Oj(whMWkP0A<^X7Bg>K|U#+s|B8z88lb zM4?P#OZ>+#P&!Qb(c`j^Sw}|J%H@h<@b#rS-~r{1vC4d#7KHoYgiJ&7XoV!_@6hH= zPvJtx+5y(;emt#Ir6AxJW!HLXq6MJ@&=*MLS&#ctH$G5?Dv#|n$@*{pcqqro;zb|T1FMbw6cWS#NgIuOCA09Pgz&PmYKmOWisUKc_xpW8D%_M8d zdfklC-YlsfUVeGC;Zhi?+??6TbcduK=LSGgt_@Dsj~YX^yew)GU?V9$Hs4Z!XK(Q5 zNS%8XMpDe}g|C2(!bi}b0lH`!XKe&)BI))0Tj~vct5ZnAJ0s?-%m`HA-aK~u8O6IY zOeE5JX^5hCHwXn;J)%U%dz&%87*Q;n3$!4FeF`HlJcZr!`J*H2>QHix3+tYTd}14t zAh?0ri%zhCs&OtGcVqV`B<(^kf&Ux^GU5@0o0yDwER3a;BxAZWD!jkj*dc^CpU?$y zJgbX-@{?$1vtvXX6}xzBR6;zEQU0is|5O40@=2pjKL&u#RQG(*rk3P}UD_)CkOKx;=0 z0z%y>7oMMxXLgKW_d8P#{d*y4@hoVa*uw0i4RrR&0!9=3ax4E)pv?)i^#XYvU>XrH zxr*w9Coxxr_b8&~aWz(xih|d8US5p9P;txdWCKNQ;}8?=g^?z4_ieVnAR)*(TBnhO z`+&1xVISHLoOy3vZj7HWql4+riiInT9HK1-UG7&u5TPeC>!gcLtrB*(J#I|I1WBZF zUOt5+L@HR6F2WulU9fNv{S|~Ie6Y9W1Yr?eEgb;ovyW2!xf#5nO?Y5vz5N8$g_Y$E zuQdQcBZVj_jKsQ>oNYf%puQz4o=BYzfYMU&qP_$l;kdCukA;zV8Ze@C2j@SHaTRJ% zh8&vxi2mz_s6{bw$@nUW#O-q`>$+&ppWnU%PfQxpiTd1mN}e&_VJZ-{d26G6+^o() z*hk@G^Yd058A)y7{`G=H6Y)2|pJsiPl(bK*herOp8qO$+I?o71a!X$%SP?RTdMe`E zdf)*H{sO%A_)_#vaS-cJ%BTwcxUUv4hOE0RS#-R}2=tV<<;sj_+_PaGX$M-45Z1S% zdrbC&(qw+r0QkVJ_U}_-QC1_CvDX2g+%Lyrx~Joz$__v=DIOsnrU;scto7LT!BV@h zZDmLI>X-87!xH8SuO;l7ZYD=SX?!<>4DM5Qs-N~uRPdg`7Bk+`C101ctl5#Q(9#+N z{Ox6gS-b5Wj1Gps!OJ^B-y5zBgzUyzisR_`Sc%eC10tMPE-_Fl4FL?DP;ERa0 z%HD@R={W!^_Z+B?4+V!G zXVhqmUjU1OlmE zjN+78OgAi^VxrKfA4)8;|y;rRqU@{%_ zFrZg-nl~+8S1Y?QSP}(w^murcHS?Eu?p(TW%MWZcFm{rsJJDSuDyl!S=+jmZfHtKe&vyXM1W$tee_Nu0`# zOEHmuz}!nM5Aa4L=93 z-ApEi_xH4)f$TcmrH5X~*qdWogcrFt-Eitu5mdqSPWiLzPxP z;b2wr5njFRad&W?aUVhtua5zpP1SqRfq^YDp42C|r=Az3?W=-|CM;-~HfahoWAy&$ zfT0&)tUY6}sQ$hj=#@4)_Z}+=3xYC+y^_O)-v6gmI+arO{{J zL0|a@58oMP7be}j$gnwylMjhk<|O#bm6!q=IHl$z?53j&@VdMbHLf??o@F1%3jSwV zu0o$zzh{BY2a0DV_>YhOT7M>XZqly^p5f!=d)mzcDZY*Cu76)j z<<@$H`j-otGuvin(pwyawMPG}eaf;^+smEgOiKI^mqsQGPD5-TdN_9qr+jH?E$g@nf?4e9e6H5;gWUIxt?!?pM40IY{(0#*tAUm|B$O zG&dG+0I^N&h1224Lux-gc`ckZk2FoiuL=6`+0`-C0F1gBcZ$d{Fy}u%B{xz`z6C|u zaSnRt{Sh?&Z!Qx@ZK2tziPHIJj1B4^22O{_K*GSYx=2`_pEuepJ-B#|Vb;|g+}0#~ zW{|I%BxsXvK<#y%^$^ZUO(71xtZXPRyb&((N|{ZQg8^2b}h()T3EFwHo~ z<)1iM_Ec=ufa$P} zO(XGD3g0fby~&v|88q{}3S}48RhnnAffV=RemigA7Su(z(h8cF-B}UD9+L4?StL+J zOa4*?&)cQ24F{8gzUP{FlQCZ84YJcsY@z=pK}5w0?Rdm9-W3`VnC9m{5_>v~`7)%N z7f8455*57sK8Mxu6MHRmeRMj$6y<&Jje~L95~FgfHYyUUTIH$_;P(sKQ;BL-`pNwx zH4POrhh=pP(I<_@WjuABy)*8%ZysP`87qZ_=I>?}9Qf;P#H7u4fJsprZP!Lwzu+OwUm%-+pgq zEVnoEL(O$R4~@KurNH+0kM9=R^C6oC7&q38=e5enrfa+2hFa}rM>uhBd29Usl{>M< ziM~ObmuxenlM|rQSO)h;nqVsbK5jruap+d$04i~jPp&hzgl%4wnNP>N^frR z58LsxzujS1`&pWn_y-8`E4#?6bqm!EH2Z*t`Gk$FeWpa`9s2sx=r#U!QQE^jAnhO& z;L=p;Gd{A}M0~Yee|GZD^q)U!mNJ+T71g;j+{!@}2Q?%A(*znIHnH|v&yJmk8&Qua zu^y*>hk2!K%U9h$Z47k3I?wQwP8Nw`yy7&tlf$|}A%EBWXb+2g&C~nd!B*fSgJcL1 zY@%%0Ay;Z{Td4$fI?LCsBB2{x&VZn$;7yCgXWJ^r1&fktoNN zS|PDJ4GSCL2QErzBOIT)(;>tKt8T+0L_)$9#_lBPi>4!rGi`&MAMIM|_{qt(@~(Wf z&ZiMj*;yCxBpvKk=fwkO&+$to5o~+Z6V>nUdn$yrGfTW4om!ll{O~bA++ulk;blal zh#w#C$IjYrfw*U|QFp^rNMzT2QDXg-`dwk9By=Xv|TlwCqRN^ZB&?u@FQoB*2r-Rpv4=`~?5rL}3uI(d3%M@2-l zmA3sYEr{%c?+RW>U-hwgpbFPXQ$96(``Npu<;Y8EJ3=Go$_2xxN^uL5kJ*C;(xn-B zEjPjZEhh%QoF82f{R_KkZ^1sX^wy;`m+|L~p1aIq|G#1Oc{cw-P4k`qWqs5_qDJWm z`X{F5inW@EIWb91>#;X0ez}CMsCvDh3YQc{bP~S|X+2&UocWDhsQQU3dV|6e=i5w4 zWyxR(t#kc;`!xW)m$1?7M@1fbA6scv23yYy0$gnvdq)%43O_Fy2c($F*Ee=ORfT#E z3n^^-V~XiqwDG^mVfD8j>IFLse!82uQClN1n#!^_FUmN&KMY`99JtQ;{w>P2ijU?v zy396x(5Sn9>%cj9j(itcrvT12*Ne_zYSMhVW^1(aV#0-m>@3*WuY{VNR#^C3UM98a zFgAXcPLzu|E6lKYvfWV8h$6%E@jH)=H`4GxxF^IuZ2T6ZSp)}~LL`;Q1>9=+h0l5H zh`97yYRc$vqZJt@E>yof;;Ub|bo8f38+SK*>0U*BVBMAWr|%K}He-mQwxc8p$ZOtr zuD~d$F0wfAol77{_|l?T=(C0VWZWq!!T-;(V)!$fz#D@Dt+h8 z3o?%9bkV3QekmR&^|c70o;_0n9YQwLeZHCtjwg_IiPDNr{ zPVfd->SpvS8ru{@(jOjE3MQ4o#2HS0j2nJj>j?_zEhNqp#sn zv1dRXUdgW+w52)S#>Q~H;8oRjdMqvhnz}`1%MSf~ha+G(H(g5{hj&cLQZmk=wyh1| z9EyQJ|1d(i(H9CkW$rE2p5zZwM9We{-G`@*_T(v_@GbziL0QoK!5hc<(EM2eCD%bQJr+u)xv-Sa zg5Wu8CQ?RQr5Z97mq1qRT{*RyAiO|XZywiRH7P521#rrGst45f2^%5$x=Qr6vPt() z*^j7T=4?U$CkX^qj(Y?$0N#lU}lTn(~4`O)Ng@yT|LYXwlR>XgYOo9OM zz(wOJv-e~4Nxk53J~PBmQ^pbi6gV1X4U1h^M=KSE8%#3#=hS!;&|)1BmDLz<{3>+? z71qryMPe%CL$28&b%KncS|KTIGMX}kozDgJjc_Qr$c1I^!MCeTrFK%p~jZ?&c z(~wzThOByfGcyA45a_S@2+4*+a;&W2%vU#ruh|(%1J)0SK<}3hkqsytrgo-Nrn=Tr zyaouZI)qkwK8$qDE?1Gp9*Xq5nstoEPXZ$ryfOL>@~}MRyzsiw`r5`vPmVdC8@!$BGMujn06&5?Jlzzi}uhKQr+Uz>JnM^m}N6$dXNjjFxR_qek91 zX20(#@eJ;C+a}S?QuRE3-Cd_D8k4S&1S5I(y{WSmrcmyOe8@2~Aw)1-J>d1n-50S) zlDoqvMU#bo3oD*^U0!p>PKXJ-k}T2`Io6;s^O=nSLVvcs_i)dgMkO+Uu%)K|w>^gP ZoAM=y3$U9KYTZ_B7tT4`RoS5b`d^@it6=~5($ zh(eHrDj*P1G=LNlsRr)D?>+B5=l*dIhm&*m*`1x4ot@pC`AnL_C0hYrX}f4xTLKP{2ab^_VPs#C|Vf=!rcRbc7P@v3j_++27wk(Ado>m2qY0& z)aqyieBiojXKMx8KlmedJbwVRz_8~oTEph~V8SQ$eZtxt6?pgqkMwy;pa`VVsA#rYzB9c@)luV`s8Ss-gHUmO1sSTfZ!)p(e4SkVmUV8J6i z2qkfGX0_f9jpuCBsQ*B z6ckuf)Vsj0E<26KR|T0hxIg$Xd>4M&%${gF@8T5gLLzGHZ*~t>#GP&=q5{p|G;-zh zU4Z$hvcsI(_NQqybwmYt6xIUTQVl&33JE<-uURjzUM+D0E#Q}^r*w}!=Dh%U#(<;I zXxAf1zS;-)9H;{15?Bx_XrohkTAY6Sn{>nQX--LjcDWsy>u7>FlBYHUXHW8b`+yPe z`i0b}&)IOJNjOqIQZ_${aIBwJnK3Ajx&iV9X>oosx0XEDBrhJ&@3FA;5qM*BZ#0vSq1ny#K{xE|@w0*4P7II~W`HIG+w z8z0uGZ#Zj*b0Kw94M2UNp9GDGyfHG7l9EC+j#EkU{}mty%Z^ZYO882e?N<6}=W``dBh*9G<9H36IY8M#!$3GrLL1_ayW8IZ??-Ir z!cij>#&SZbdRL-_kSaJG!*h!#)Nu8%f#g*BE}{^bt)xaR#~-0)v0}&YB-lgkD$Ir+ zv_&A2|8u$}jdojI4eXkP_8Egd`no#t2;ES*by8baGBLx5hDga3LD@n&AzCo5d-4~~ z>q6}C&;2Xhb#?l(6gfU0p_+nbdSZOM9W!<`E}7r>0Ka#j3t0=;XEUY-wUdm@51--! z=&5S+YU&gg__=-nErMe?wgeW`L-JmNA_W`E3h!xs2FMltcL!a}6AMdmD=YSjE*2`v zNH;>0jdgVDY24x{TaYirL}o|kzbijM&q;8vQv7q=cFW_G0za!%rFQ|$3To$r0l4Fl zAalF)Qo6}_9UXd7XR%rs93iMav1P$JZj$0!dP!ag6fzs=Nkeqc3fB5i2XG}2*uA~k zu=3RE0IB4S9#=>>3Fe0$MUI@-Y+L4^mXP_XMGBg2%F0G4^h|WjOcAtUn3WpvNtWkVn6Q^RDwb309Ey|KVRc;~l zi5BELTZCtWw@%UZ*Cm2uTylVk)0Pi=iX9kWjHnyVoByBSRt4R+cFFBf-c)Dy#)mJ2 zUYdwn^<29>NF{0SYL#Un=xAgdqY9eq)O1-Syc|_CrgN62 zfS*GZtjsqquw^OR18*F(G15lZaq1lIAvqv6UEGJswb)Yl?qFuVuT zHmO1@xlRkQBz7_yKDdz7yZP`hS^qxwQKN^eduf%kWG@RNN#m@Nw9U@7XR*P3+^8c4 zl5)Ep#%MyYBiH9BmNN4Qsq<`x_sjKYnHE@!Xp%=9AT2V&YMi#|j7|Qq_MDd;R1ETh z8F6@V^1mHx%10(y$)WaYdz;m<@xKt*{m)RUAEmaZuNOV4=?K3itMGdzWZn_V&o!MQ zAM}hKvF{$ndQ*Tjuzm$QB_Dosb*ZnZ!l1$QlzfZa|9l3)#PQRA*{NHb&Fc#}J3yM9rnVqmG22dDpi7)ZH?hKK#whiKG1UCfYJUZgj%4H)L&1VEJYJSSDQTdIc`| zVAZr`Q3M+SmNJWkNeGfDzp7g=dkcs35T`q4F;qYJK&5}Puc2Rk1=Z_nkORi%SiE!ilH>ECXa_W00G99P$hQ!& zFRRTTz7cvq1^NCo717sJx|i;RJA?sTu@pev=rjKX%Zqnyp>~!4+pPm&bW|O`98Ml; zBoK7qa~BO@`Ev{z$|T!rc>G!n3tWKwd4`Ip@o>1+b5>U-2I_L65P2RTyt2T!5X7O) z=YBUKqW>}=zOpACMnA%eqFl^NNbVP*fzhMSaJZIB59*M#GD@sg|lAevo->bSi{l`N#%dOu{d%hK3d~47agrJt7oW(0vUS zU>DA(Es*!MO*0Rv4@@@O$QjAs!sG6~GgIxZy9faWwx?5m#Y01dw8h-B3F7Q0Cl)z? zR!QrI$`;|juCbCX8t~sSJ(ZS#7Opfx8mSt9&>{x*X!Pz^kd9rlGO(49*kkKDm=_G% z##=C&fcQ&E?75EO(AEKX%>}eTxbPT{q;$?gsgoqwb%HLShU=bLpK`LmHc(Gs=@DuG z?Rjk>J?q`BH2r_2FXhVb@*$a6m7Ktub1LGW~-B~F@tAxNy;!z;Zl%3Tmp_+a2M z0}xwP8|r?rv2NYQ6_m}0Fnz?X^M#U9=I#MQWDbOrEO-Bc`}DBDj{vk7_OivFL-kAJ z>O8(Mx=tRjXIw>9X7VsMsWPgcy;xTYWA{faPrmtNNGYRBsBsYb2cz0EiXqZw@PYPL>)U06R19bjutD!}p!8k<3X-C{+;U)S&%AFl7X zg)10;($4!OE8X}9bGHY92dFgZbLxt=$wf-JXA4<)-UU`RC?NoEOV12aR{w_)Fjmz8 z=!6gR4u8C+IH6I|vl7M!7!6v^#i}p;5ALh#hf&By5)8fl9i&tLNu4-8c7f@Nz5he7 zy%KW*ut21nUTKETb7+E%x3S0Xn3=19O6r#bKm<}EUB6VxX2$q`hKei;0{?)1bC_qZ z(V=xg2LsEh%=_^Q){p#e0z0@*8Q{X&54_5+%^L~-EFWz~&=l0x$+*m?4PDB~vev05 z&=c!|08>TEF5rJMa%aV2gEL%kP#SHv;ZXlOd2^k5KVbFe=YZ*jT_KyL6`nsJ2PQMv z14u&>qq}G}6R+lUQ%X~iDS#3X4REG4lM5xiP{RuJ4C(|lMd0An-Hnz7E*eQU6C)C= zCp7?`l+L~CoIT4FWL^}zdh?=R8=zw3pqOJqw>7ncYE040Gj$450XVfQcg4!A2Qe=( z%^NB)Tn9637ve`)6NEN~Nx>tret?S?jMUaC(=3AcbKoMFbiirD3u|v9WpWqY4sgeB z52W*`vi4r?DK-2snk@fccONjyzZum3{(Wikn@OP0EU=U6EAz9p7)6;L&aX6G-UG&s zuqy=i{Mm-~7D+b*8Zcd29fnW6xl;@Zi(v5yhC~16Y(!9?>r!BU#Shs z*Z>r#(V9TJlT(%nMI`jPxrpHch#`RA<#f*2=#jT#i$4PR4=;iu3`a{Ze;uK!H#l}k zeNI20-b~gxNmS`S>cF|K%5Iycf|w}gVU%|0=}_nSaP0g(nxJRBzE_ZTH%P47^#Ui% z-JlBm1I*`mY^aPS;GQ!2XAu{zI~0KEFsL&cgmNN7h(f?yVL?ciTb4@}R>WPzQIvi6 z6N1l!5i=jfJc5FhqZ;nr#+7wRGX*9r0+I7GRmVG;-sxtmql81bdFzkiui+m!<`<{k z@F&DyWUc-YV;*9514e2bhEp1|KxwTiufl`tt6UT-^e)*qv_~EV-Z#z@Z-3C? zXyzGRQJI|S6vAP_+Uv+HNT6Wr3M*XfssIT#$^&)46$=z`7P&^Bp&_bHkpsHZs7|aS zgCbNg+()kbZefN+p!%wMFsFq7C?Dsz64hGu^QG>*9KxkO`t)bT;q7=Q7I>~0ipV_L z8XLmHTg5{Oiy*9=SP+Wk-r^4x^tg=$r89xb36V`kPQ6-VqoS`#|s;LIDaVT>P4(W zt3>dT8-(lD&XJ7}NxZ!K*w@Y2r?RL#H#2)w^AOx?Ib!O>2nG5f4Rb0&&p>x+Jip8u zT-8d0?r~(=bR*;UZK+^aqzpsom$oy!Q}6jq%5u4lobe^jJ+36=K0Wc|;yw7V(ob=* z>jPf{y3@mOE;c%=iohXkSP%Do=*FW*>Fe3Wb;3UNSj!W%1Te^3M|WcLFV-2%KP`k- z?h>GPNLr&I_p7U={BMCmxmM3GJt>B-k%d9#JvZKiH}m$!TR(zF!?P&mt5=x*SiyJX zaIsJ|-j|!C>TR@to!}J2SXwgCRKK+wJgS$$a2mFx_>ub0T{ z8E_jvTMzVRfy?egE5khK=wBU_jQ8*9(B7A&xB-Z-WgI*P*i1;3Mskz$HHQ4opU9PV zCs~wSGn`GF%Cex$pm%a$ukB!@QEK18$jG+f}$W{4^1p;_Be>om>O@7U%6sPV;{` z-*h~mR;NCkzK}wpep8jbO7J=G$ytwxu`JETdA{LLhZF&7$M}tR zdAi@vfQjGvr?dKXaPz}#qm;O{F^Fd2#y?W(R|_c&|7-QAK+wYav>P}fN#^v*Iq*_S zM^g05X?wwDqcwSyCZ;n`wN>v-mfzY4ChFJG;VSlZEV0>?x8k*GZ8S+J)q7=Bovd%E zQy6uMC`5=}KT^-tan1+)tn~R$-36W^zJDBBMq2ebLv{_~M=H&AQrTyOjZ@>`TU;hH z&H9`uso z*oK-sF+O@wkikTLNs`B`;?xO@|AHs=90~T|L?EO0y@UEDYDl5Ka35-l#lG{v#s|rI zxYDkBmK$+>zREPj7@K_TOHLsQ{Mv*(A__0cL_6%(avE=UI7D|qfY%0vEy*9t*}`>N zWgT_$>IsjN?RmYM0>&a+Qmw_4BWZH=97&%Qu|ne$bZGh0c20NA^3iSZN6kD1j-nI- zZzql*FocGCypDwAC!Q~RumEZ>3fC;0+ev&Gn9d6LZ_;tMwEEYbC3|rXlLU}v$?i(| zw;v?WZ#_h%scf-9MW1O%(2-C*gT=gt@iB9%p<`&AxcH5yNWQ}RQz;uC;JIJycB4rv zy92lkM+&k>kF50lu>-^A;Yw8(E&;qJI0GI-US!p;XgNFAr#_U3{;o#lWhJf;DORYV zLzq^~V;K7%cLC08l^gUU40ra9A1eqclxAX?B{(6n(0S9ZD>LZz%^lBK|L7^1;<=dA z>&IWHAdMHWrn3F-NB?Vw?FfE!!UbC-TroZO;d8m;$6Y0s|Js9J@irQE3-}(qDSZ@w zgeO60$%Ry~8V)>9BV$t|LOdL=P*sQ5qg^r+HqtQ4w@$}@V3i-;xzH|}H+9^s@AbJD z`(>vmkRZ%q$i!ziTVpy_nwR_dn{O3}1ioC;H z-BOj!$Bq(@m1pDZ;r2;nLi`c&DsS4Y6R& z7i>uv*Ewq;CI&n5u>^1D7=;~tLVoOcs8>%F^Wd~6KPh$Ew$zc)Cx_YBSYEjZcIkL_ zdtAf3oF22LyY3JLEstG3w>JGC=3(>mNB=2Uj9^Cp>NE)5QQh9%d(Mh&#u!Gc`2!T**C3|&S-GoDYgZ>Ft$nLlf5e+?Mq93KgPwJeRGi> zwF9a;^5t2GfcoH8C*?(@r{s&Z6;-AJ-4QQycDjG83NvcLpY(Zz>ieLxvs1ZYOi!$M zr9vqva+uiBYgBc(nkV9dt8d{zF4!r!t2IudDpenv}{w%C5T6JYD9mKR0SV1Nc%8G z)a$2SBaVAGxw}xrc^IU`OlRsb<7Lu2z=Zx<4}CjEuXA{4KFZgKYlScUb#Aqcg^v&o zX|EGaijqk_H_thxps(1`x0~#V8m3$+^6p7NmQ^Y8wqr!as&iqcy1PrZ=XnJ#R|>7h zV{1EACU!48G~$%R49q!EFo(-Qiz#R?Q?rEa(K9K;xM!A(%I)8D=tM>yCSpz6;KBN> zhJmP17CxMDis?Vh+BxH_Tw;|-kGqL9(J4?grZ0R5$GneG;3?mudE)XOH)oq~db$|A z{uS8#?h zU}Ig1ZIzpigNy!RS0%{CV-LbXIVe-OR1Gm-(qQG&H=lKQ0QJBL{DMahGKW53-<7H#>tQ+&(VracGxA6H+wf#Fla>HR~!jmzuD82s2P{Kv{ zlljt<^rgKvT{VS@twRCPQ!4AYApHv9a3p6R7Qp?HN6p=8B6r|!(53RFR6qCnTIwxO zZoyYgn713mhGj~uc}S^yPvR2^xS_hDmJ0RtdY5R)AP-gu-FOo)flHI!Hq(V-ZxNlHJx#&vL$wt{s?7tPJ$)tH?3Ya z^o;wTO6$)M?=J~0(4duGJ6)oFo<>RTb57020@h>oK|;od7YXt#)m|Y6KkaLtpdDRP zM(7Dy3jyyZ zZm4M*m(z`-I-gak_I}MXDFKMKukY#rr&dHkEu8(oUIEpL3rCrA0D4Dw)r z_Ue(V@wj#AdcSj~!VS+xy^?O;T)pAA;|=k$$;=|MEw3S+vJ8Cr zZH`1pcs$yC5_G#AI#sseH#|eH`|2QewbbF3%XhDLSCFH)^S^A#uM--9i*Hz*gZ_2} z9oY*cMy`u*o|+hFSIag9LT*vod{bb3>5eyucuV@)vJ1tt)6eNp-jJ^)zfh*2c3*}j zwS(2KC$o~(U3NU+LAX+Ik~AS$$MM^oO6guA5EIp}XT15zVEuDG?9a-_$#wv;1LKYgGyR?#L({}}PY+RqMI<#U>R2#Rt^@_@5tmonIT<>`MI zxt}V`Hw)uHEuxL<(JF#9Mlu{;vVRq3rSc03At4qLrhA9NU)A)OcI`SPo&Ppq)0b3Y zB?Nx`Wu%bqqTwd|)ubLutLztScz9ZTDW@azQ||b308YnIsCR(4tirYs>J^#OW0tav z#m~t{zIs=A(HHADk79abj_sIWk-pbhZ`rG9 ztb9PvKzx=$TFP^K5ejN?LYHjqN71`OFk_aLD}rULU7xK%c6F{HBgZo+7hOitejSdX zzL|u}1CURu?3nuO3Gf9oZ}+3)b`iLO@P0H?Tntr1(opE%jQEI|O0BpEUOzX`E{7rgww;nQX`$vd6-;50O?j)F7^H7ubnDzW z%Y=Hwp8)#Hhi4kzmAUxEi!6kfzm_lExkWdd+ zxEw8)W3l*saKDAPzRJ;=9Ak();iVY5eYuKzWuYV*7rs#1Z#h3n07oW`98V7yP*&?r?RX5 z4=>SZ%-M$8O*joreS&P7g~+GoEDLGNC+DxN>~6=e4aj;)?`!A5Re6!Qqj z*o>scyGt`(pS!b@GeRWerkCQE>?Ti+%~PYw#)M zo@&df`?Qt7?aH3}s{Qjk3>+hK4 zK?O~nCwHrzR%t-S4NltJ`=J^i26K1Uq=0`pH&~r+Tkjl_^oR*Nyl_4K)I#GOaDdpN zu}*zZpta_R$yuus|7j@SwPU;$QY?>b3A&FPe1set&m%Y6!5#kmwXisDOFFtfD8R}Z ztyMaZsz>!=MxkVRYk$xa)3+BB_@@qGc~*JEFgJ*QZlDQrSs0n8m*Y(Cd;?|lcr@s4 zacJ}Ab^eS>Ydka+V8qG!c@E|^oki8AvFO0_U7C1$`u<}%k$AmEd5lI(YO|_E!CTLegwrnyvnyN;G`(7=hc+RhD=kfrAd{r_r!t~ z8R{cPiC7)J3aJj28{NNC&QJ}WiMw=9@nl*n5aF((6L-9Tcyo<~_ewva$eQY86`AH2 zBUsCxOzxdc5glsyY~ZJ~(}v`VmC2iGqjn)Ok?*$7%!4MI%P^gbry4e|ess=3zwcw5 zNFE^f>GdN_`WWY3g7gDVQ#UF(tG)@smZ?e7{ti}d!~giAp>aInuQm%#)JGb@E~Nhv z!s3>y!I4reJpHd@t2Mkwp`DN)r8?JsLX0hidJ*4TiPyCFzWuY5Lm5_BCh+J#jBmsS zaLHTsrS0FX4mxvqok%-bo_h03YKILKJc`x`)nB!(do|;d^vTYpd3R=R+z;&Hf%b12 z=QT>S_%*|bdI<)S@(o02wE!iz;a`|rmPt-DIVH=afnDiQ*O8sw*eaizE+ybw9!iY>I`)_+P!(N#XINrdN@gve=VCC;QJ zfyd}xwZ*x|0TXu@%!V7;m4h`ZpdN4vNo7KPB3*i7fSO*mVhuHLYZNQ4DulJW?))?m zyUuyEUH-^X7bu3HO18Jm;<wm+E6>?sM-^{x%;U2miUOY$LC(6i-4mK9V2m!DUZ>C}7jEPzkWFMDawqPM}GzaWz z74j^BLtcrg-}xY!NZ;WIRSxAYbi5a7*-Y%n2xqAU@dm@vhKQ!Cht}7(z5*Om#_;<# zrV^g5+c7Srl5GX@O%1rK#;O8qZCdXLEVt)*fd|ud{r&mq$iG&0i3*l|i7L<@;@q46 zqKR=&yYNHw3#)&q&e#qbLhSZAmlQ%)GfCy+@q6+P?~ORUa^!=W+?bmhWMhIM<12Qv zo&Py*qr--nX66v}7~cpQ!q-6UL=0>k%-R*UbX(v3zQ82X6Blsdl)7JjfCp_*gdy!4 zdTtA>3cNLyeCn;?G19^l?nhadi(=FJq57mapA0v?Xy1Ji@jINIS;shhog{2hZZ7EPSjy!yn+O4lIUmQ(Hez$aT!=6RYgVwO3}kLIterF zJBh!6_opgt$+rNAs}**QV_%b%^U~;Hg4zJ#FcFBLnoEQO@)qM35 zdn?Ki-7ca-ClikvwCn{owEq)ta1NAfh9r$?QY`e&F9LbP0l@#sUsP?6=QC1>)?S+P z=XnV(hVP%`iHcS|!@DJ1p1CV&fGX1SWNhvMsj&RvKM^oun60m+&e`K?%bq$O=UXN8 zI;Lg2N|4Z^9Q4L=rAP7Qt8@6Y zZV))a+T7Dy8xUsQayS0#pPTyh8DD-U1#*W(rU>&=SjuV@YRJLN4c(N|kyK{c+HUT1 zP=)fBCpO{>4}YsMpHooBR_xak@g<~=XNwFMegVZr%NO7lDHrv4A-O=wv#+Q1iGFPc z&Y6E;OzXFg98`iwpF~)%3!jnGl*&F5C6w3paY*JR%tI%~Q(&R+_ciCkp&ZNeT){Jm zc8tN<{swV~;(XVO)NJrS$)sOGxI3hh=au`$a7J&p#rl6IlCLAS36H*Z#JWpqQfyEh z9up4vJ4Ymy~$j`^_|@;=rH!TQV7s5wRjwU&-Wx^ zF{yRfDBU2;eXM~Tn0wPA_%Gr9U8OGXIe#u!sBDJd*eAt_=b2p&r1$!aIIsB2zw%#W zo*78?6GE))+2<~siF-KF2PfFn8R9c4a1vENE_9Ho{mP;)oLqOfuL!08<|<(Z9ls7_R&yH1MN5~*74Ixz24_ur`-LO;P7+zslQdoo;Zc^ zD~a`~-0s{=W~I3C@Klbg8vOnjjpS_L>XJchy=oZH6eqE>>vJgDY%1@$(z~_%A0(9@ zZZG~Jei>osx^AqF{LQNsoO;L(#4f9R+#$0+Z9)||r!CiZ)kjHEW1^V%f4RP%|7JKV z>}>UiZ_soy%L%%(8^;~~w!kiZz2$*Z9FILR^cxSmq=MC{4CJ;AEvkHHCU4Deb zMbjr2gbmI_vK{{`&e-@kotW;F>)c*18T`4EgJ!0H@w5;MFx?@-y7sv)aU180Maf0- zhu<$T=iLM-=YY8i&+iLviB6eP#$@!EZ193Vt1PQm!*}Sn?K%f?KG1-CTQ<0Od%(Ke zsE0$kPaTW;r#Gw_FFny^w*v)ZD!yH2mN-7ZOm-$=N+KZYAI{C5jBTFNqo!kCe9yrc zN8XZ1C^<$K_&8&&;0&)yqXaDQ3^!|Q?tp(1g$<$ohqEoMtsRRme!-_}6UfU_VGKRV zn%sXGUXzPi6IE<(m%kIQtIUN|a!ME867`jBHEY1GO;E|?C(AeJzx^J@Q_e5no=_Li zls`_Id-sw;3Yu^xc~;K2L>J%Nh~Od{*YB0N+45C-Fw!l8=XYO983%V}#Xq}23=8+q z_g^YkC_mi}U(%SE4z^4f_~sbXWDNi;Q`%wf;|MJ3k9EUvow)JWM{Q-BW`V0vN53!I zRNvBP4JI?mySwx!pWauG)ZO|9%|n{H&WR(6r=+9ny_i^emGpg}i6N&}(jhkH@Sg5&setXz^M zz&F0BQ|N?J=)fKFhK>KfsL7IejO*y*rZD>|*4F@;c@N%SnTd>U@)&u%e5qP|X{Ph; zgz3ej#xY&u-$0XpS~gE@lzYcF)}A7P+75Ag+; z6pTjFGdGU!i+U$KX)Am9a51S|XP>Y5@nVYGnF$S|B|C@6EKJ<^Ipm)2
    g(&57s z^QW+{YYy%6KQs4ruKdl11sMegw~$?P1dj+=dpj+xs(1MUu?{<4>Uk_;)(w-^ZJP2? zj~low3mT-)DuaU4Da0Vv0BB=+Q#nQhU=|*1;n%&NRNmnAz<=cK(^pAfETMMr2l0dV@P!l`$*kC!FJp%?1XB)zZ2cqED|X!uGFu%%~nec z!y!jC&HFEe9E;L7{@Kq%&0}Sb6#&Vl!;=n=8&Vvf7nA|fA~+ySq5+m3#<5VEzo8}W zKO_-ewXGfy8+RQ@w!VuPE{Zl<)n!aO<(~t3K9FLm-Qk~K63RcN0xq%Asp0#*^qr{w zR^Q?I7K6o|YI?kl3Iv**QcOqq)V$wk3?}>K)nPE`5qSxK!pRE~1UST2<02HR2YD2OtH{c#&7I!O_Gms&05wlgl`=U)eGg9 z>rBlZV?gQA9Mm4fuw+rUgPkHP`JDn%@^IS>^_B}-A4%ft=g>$bp z`1vRyUl*wg3|gS!lW=PQiq+J%mcrn5zMUYX9&__Zr|FnW+1N{}I7@rYA5)?+V9ejQ z3DdG#Dp@v{s62H~-d!Gux@=VA2#4Gt_T-rSXAe4`FQ{W>w%r`Uzuv;kXsq-l5v6wG zsBFx5R3L!4NCQGz*P6(OW8^f2E?T&?-WUfB2W^H?T36jshqdUS@Gz+?v{w!Bt-{Kq z_khTwX9QF~z=?vqPITjo$X5$w*s2!u^6=igqL|msR*fov|FhV`QBtqX^dx~`)mW8v zpADZw>P1VP1|ZYF_|%6wPqn5@4ZWcJUS^PB1nuLc>LbtTPbizOAO}Fd_m{DEhAfyD z*TI|0wE)_7V^-Vw-YqU5xCD9*QkhkH>#b?km-K*M*|$_80$}T0qXHRkMmRCaO=6mQ zRc0xk-{NntaLNkuoA=>+NK&I}s_$Y+-=9=jHcMPk?HC16K}&!X@T#Nb&X02@xHT<* z(oPYfHIokb52sr1+@x?VISHtC2tow81kE*{WLwu)IN`p1+$^YKk0%rOR7lU-_yBm) z#sQ5^xUPn0Hu`!X5NJBaTQ7%EsNxhCXsG+M`$EOz$6^}VEzS`mV53vj1^k%TS51>T znGZjM+mkk0Y{tSJ;Z*Y->8Ykb-t#(=YUaM~pQwHEU-kw2Z_3uJ8iu ziKyYFqMgqeKr|(8@*Arzo-TQ+U*E1qX217SZCO@h*8|`r8g1<^Fi3T2BJFP&CrT%I|kGG>0fpFa$!F z>IX0~WCOqVt&_ZscW;MZ;rbu&>Qt%SSzD4{mkSURW*h*m;JQReR*$1f7H5muu|Ef> zGPE_8^u1*;5I+9uasNiw0ivssyD?5W1MNErATnnEhXX@qZ8X0xX39aECsi&szYmh#Xu3O>;c~FLU_t8XvafI>4s6=oobBiAyGH?A1PTzoWNx$(z?#70dj5d57IEAeiXwnTmiN%oT@(X) zb^G%GpyhpC8BK}8aA4=qW^1L3ze%Tj3a^SB=rkjMc`-uJwpV)^eh({b3k>;IrVFXs^WO3bEaZvd4MNH>7D zHIkI3gozM8)W^(Qk9HZr0uq8bQKGFszDEp4j*S($D+7C=?gfs(_XvE4bV*v~R&!+E z0l>FO%<*iM#m`qa)!AXkmdRJ7z5(+Q`l%cM!WbIfl9BB9@Br{CO^>R+!aBT$j_ptL zD*{^BKH%ii-B$!CVDKLhf&fZ&-Q%wGayIM-dHMGN%3H^-B%G>>I=Xta_CPxpfMjJo zf+*eq_PSyrzF_VEHM{MBo2Rsfif9WwdiNNRLZlLe08;e~)%IB7@yd4x7~cwd@P{05 z4ih3!KLv=8>nB>S8p|)4);rrDBm}Jb$6C3hk#DREV_yKAs~rICM!H|51irt{9H6*& zjTPmG1F%m-rmOB^A=j7G<@t&93ch}W1J6@)bb)^#9;#EW^#yl+PR<8i448U`J=jHJ zn)3^C=jYPt7FsL70z4-R01TL2J5m^a2513n2woLEyfLrUFw-b9GvMcX2#_5khLga- z98|KBFe`mDbzqolR0uKggDAehEEqsK`rQYPh}*8D^02QqP7Bm_zKn9hlU>|#3_b)r>ZJ6;T>m8PFj0MPm7!FWB&kK!;G zn|qyv#vdG3HL2=6KS>&wY(R^E|3Rz(v}4?sJzGSIe@Y7?0OYm~u(`*dG!mCrbD+&+ zzb)qB;JjGe!NEAI`bWOUBvU zA`fVhupX`m6;aPh;Q4z}xBlU698w+udtzB%{gL|YfXp&*TOtH=puyi9_$YaRlSJoz z1JxtSZ8b}jAzh)nD)kqDF$7%_a+HtSk146p1EPKiY2Zq97mni77X7O!o3#rsJSZj@ zti<)s{v>NjZ+-<-^uL+|b%IX@W6Eojc)m;7Xz^qpP)tz9u))f#O|cH&Ha5u&A{Yv4 z+dbey@rSCc^77UJLG1ri(g1hDPdX%h6>0FopwIjO)jxflxY6>26#R-#Lkxlfwb*+u zK*5Mz*$9wwQ`}QRg&kBB)LBWPvdjbowHJ%}f#p2S^anOh!IJebcoeA7!Mt#UwWm** zW^wueSZp1;gQ6AqX;t7u+8960_K}^*y>vY<5g_Lv?uV;_WoK>;)UKc$JTC#A>IXsw7|Pz+!5_Qy6ztw4VA-Nh&r%*W$YJ#VT3^~zfYV2(uNsgJL<5=Np@_u*z^A4#URCRDY1b841M>%R`dF0>rKIdxXo^@5 zE5$1=c(w?;Jt;(9AV0zPLkWiRK^Y#UGiS#%oz0G$Ha9mpiyo#z3eAu`Y3Q z7;F#LCtH4e{98{2O*ndsOOoaA=Q?w0%gbFgi)u%$qBvaBd;Q}b?Xv1JNMqpbCyv+R zI~fC{SHM|wYuNF?^&tbg8E=?0lW>ZRl^F07wn$q zYlr$aij)aZIk3mpoUz*DG=!)H=V!PspP}4wB^wftORNc3rlr2(;{w0)6cF^Utt@X5 zf4ly={?TK+)C$(k>RYPsyoguO1!5C_-57n8f82;<$%tto1f>2c>3`$2)9#|IFU zV(a(U7Hn#3j+S$?;*`>16U7Mq&I25W4&RY;K&hd{FE{F3q;gXQ93>O5 zkL7E9ULmDuz1*!#j9L&u1M7Ko$kN+gZoa57WNR{L8;`4&? z^B5D&(p8_rA^N3@7*}%L);o4tK|!}>8rU^LcvXsNur_wPoIA)Wj&FqvPF((-#_j{y z_soUzV?#d2;1s|LumIq-$kj+arrPp@oS__N`lw)BE7!rM^Z2CW%eMwh0cIeJ<_^~* zC4T5~gk^OD#|&*leO{+_Bio|BRs$~t9wEV;k8nB@e;?N749^HT@ZR-L?VNDnb?_(K zm}@1_OTa7crUxj~I*!lxy|*rnW`GC=yPlHle{aIuE_7NA2(ZrwGtUgyhw`?Hj{~2N zQ~~UZt)3G@{{*Y#{^}aYz#*v*Fr#z3uK+txT>`%H^VSKK8otkl3i2CMay`VH!~FTG z#SaP>2@ybfY+WKwh$uDw3X>ec{d;DoT`oM$H>*0cAT?TIG-;2kpuo?16jIqCirXwT zGnC;R2eX2ZzUs}x?p7{|e;YW*WLTF!sznw6E>i?4sO@mpg+$H?bL9LMMT!26B1#zW zjX~vdtJT>1Zja(M2S?dtoQGjvjA+wC9~t~MHIRx$aq*rA{mHLW|KYkZb#E=4>`<=8 zo`9Z)12}?50_L0d<@otkJEBRr09AIY)Mt($v-HKZ9$x{eU0PN$rz*nkPi;_f)<4)U40|Ow^#6ZMq}7%%Fa~ta`jS<(1?ukq E1Coov>Hq)$ From e30d20e6d14c5dd21d60ab9dd04416e59c25a5c7 Mon Sep 17 00:00:00 2001 From: Tazio Date: Mon, 1 Dec 2025 10:50:48 +0100 Subject: [PATCH 5/7] feat: auto skip --- lib/screens/settings_screen.dart | 120 ++++++++++- lib/services/settings_service.dart | 39 +++- .../video_controls/video_controls.dart | 190 +++++++++++++++--- 3 files changed, 314 insertions(+), 35 deletions(-) diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index a3d8cef0..4f815802 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -37,6 +37,9 @@ class _SettingsScreenState extends State { int _seekTimeLarge = 30; int _sleepTimerDuration = 30; bool _rememberTrackSelections = true; + bool _autoSkipIntro = true; + bool _autoSkipCredits = true; + int _autoSkipDelay = 5; // Update checking state bool _isCheckingForUpdate = false; @@ -60,6 +63,9 @@ class _SettingsScreenState extends State { _seekTimeLarge = _settingsService.getSeekTimeLarge(); _sleepTimerDuration = _settingsService.getSleepTimerDuration(); _rememberTrackSelections = _settingsService.getRememberTrackSelections(); + _autoSkipIntro = _settingsService.getAutoSkipIntro(); + _autoSkipCredits = _settingsService.getAutoSkipCredits(); + _autoSkipDelay = _settingsService.getAutoSkipDelay(); _isLoading = false; }); } @@ -291,6 +297,48 @@ class _SettingsScreenState extends State { await _settingsService.setRememberTrackSelections(value); }, ), + const Divider(), + Padding( + padding: const EdgeInsets.fromLTRB(16, 8, 16, 0), + child: Text( + 'Auto Skip', + style: Theme.of(context).textTheme.titleSmall?.copyWith( + fontWeight: FontWeight.w600, + color: Theme.of(context).colorScheme.primary, + ), + ), + ), + SwitchListTile( + secondary: const Icon(Icons.fast_forward), + title: const Text('Auto Skip Intro'), + subtitle: const Text('Automatically skip intro markers after a few seconds'), + value: _autoSkipIntro, + onChanged: (value) async { + setState(() { + _autoSkipIntro = value; + }); + await _settingsService.setAutoSkipIntro(value); + }, + ), + SwitchListTile( + secondary: const Icon(Icons.skip_next), + title: const Text('Auto Skip Credits'), + subtitle: const Text('Automatically skip credits and play next episode'), + value: _autoSkipCredits, + onChanged: (value) async { + setState(() { + _autoSkipCredits = value; + }); + await _settingsService.setAutoSkipCredits(value); + }, + ), + ListTile( + leading: const Icon(Icons.timer), + title: const Text('Auto Skip Delay'), + subtitle: Text('Wait $_autoSkipDelay seconds before auto-skipping'), + trailing: const Icon(Icons.chevron_right), + onTap: () => _showAutoSkipDelayDialog(), + ), ], ), ); @@ -703,7 +751,7 @@ class _SettingsScreenState extends State { keyboardType: TextInputType.number, decoration: InputDecoration( labelText: t.settings.minutesLabel, - hintText: t.settings.durationHint(min: 5, max: 180), + hintText: t.settings.durationHint(min: 5, max: 240), errorText: errorText, suffixText: t.settings.minutesShort, ), @@ -713,10 +761,10 @@ class _SettingsScreenState extends State { setDialogState(() { if (parsed == null) { errorText = t.settings.validationErrorEnterNumber; - } else if (parsed < 5 || parsed > 180) { + } else if (parsed < 5 || parsed > 240) { errorText = t.settings.validationErrorDuration( min: 5, - max: 180, + max: 240, unit: t.settings.minutesLabel.toLowerCase(), ); } else { @@ -733,11 +781,73 @@ class _SettingsScreenState extends State { TextButton( onPressed: () async { final parsed = int.tryParse(controller.text); - if (parsed != null && parsed >= 5 && parsed <= 180) { + if (parsed != null && parsed >= 5 && parsed <= 240) { setState(() { _sleepTimerDuration = parsed; - _settingsService.setSleepTimerDuration(parsed); }); + await _settingsService.setSleepTimerDuration(parsed); + if (dialogContext.mounted) { + Navigator.pop(dialogContext); + } + } + }, + child: Text(t.common.save), + ), + ], + ); + }, + ); + }, + ); + } + + void _showAutoSkipDelayDialog() { + final controller = TextEditingController(text: _autoSkipDelay.toString()); + String? errorText; + + showDialog( + context: context, + builder: (BuildContext dialogContext) { + return StatefulBuilder( + builder: (context, setDialogState) { + return AlertDialog( + title: const Text('Auto Skip Delay'), + content: TextField( + controller: controller, + keyboardType: TextInputType.number, + decoration: InputDecoration( + labelText: 'Seconds', + hintText: 'Enter delay between 1-30 seconds', + errorText: errorText, + suffixText: 's', + ), + autofocus: true, + onChanged: (value) { + final parsed = int.tryParse(value); + setDialogState(() { + if (parsed == null) { + errorText = 'Please enter a valid number'; + } else if (parsed < 1 || parsed > 30) { + errorText = 'Delay must be between 1 and 30 seconds'; + } else { + errorText = null; + } + }); + }, + ), + actions: [ + TextButton( + onPressed: () => Navigator.pop(dialogContext), + child: Text(t.common.cancel), + ), + TextButton( + onPressed: () async { + final parsed = int.tryParse(controller.text); + if (parsed != null && parsed >= 1 && parsed <= 30) { + setState(() { + _autoSkipDelay = parsed; + }); + await _settingsService.setAutoSkipDelay(parsed); if (dialogContext.mounted) { Navigator.pop(dialogContext); } diff --git a/lib/services/settings_service.dart b/lib/services/settings_service.dart index 422bb120..5d52f291 100644 --- a/lib/services/settings_service.dart +++ b/lib/services/settings_service.dart @@ -41,6 +41,9 @@ class SettingsService { 'subtitle_background_opacity'; static const String _keyAppLocale = 'app_locale'; static const String _keyRememberTrackSelections = 'remember_track_selections'; + static const String _keyAutoSkipIntro = 'auto_skip_intro'; + static const String _keyAutoSkipCredits = 'auto_skip_credits'; + static const String _keyAutoSkipDelay = 'auto_skip_delay'; static SettingsService? _instance; late SharedPreferences _prefs; @@ -805,12 +808,39 @@ class SettingsService { // Track Selection Settings /// Remember Track Selections - Save per-media audio/subtitle language preferences - Future setRememberTrackSelections(bool enabled) async { - await _prefs.setBool(_keyRememberTrackSelections, enabled); + Future setRememberTrackSelections(bool value) async { + await _prefs.setBool(_keyRememberTrackSelections, value); } bool getRememberTrackSelections() { - return _prefs.getBool(_keyRememberTrackSelections) ?? true; // Default: true + return _prefs.getBool(_keyRememberTrackSelections) ?? true; + } + + // Auto Skip Intro + Future setAutoSkipIntro(bool value) async { + await _prefs.setBool(_keyAutoSkipIntro, value); + } + + bool getAutoSkipIntro() { + return _prefs.getBool(_keyAutoSkipIntro) ?? true; // Default: enabled + } + + // Auto Skip Credits + Future setAutoSkipCredits(bool value) async { + await _prefs.setBool(_keyAutoSkipCredits, value); + } + + bool getAutoSkipCredits() { + return _prefs.getBool(_keyAutoSkipCredits) ?? true; // Default: enabled + } + + // Auto Skip Delay (in seconds) + Future setAutoSkipDelay(int seconds) async { + await _prefs.setInt(_keyAutoSkipDelay, seconds); + } + + int getAutoSkipDelay() { + return _prefs.getInt(_keyAutoSkipDelay) ?? 5; // Default: 5 seconds } // Reset all settings to defaults @@ -875,6 +905,9 @@ class SettingsService { (key, value) => MapEntry(key, _serializeHotKey(value)), ), 'rememberTrackSelections': getRememberTrackSelections(), + 'autoSkipIntro': getAutoSkipIntro(), + 'autoSkipCredits': getAutoSkipCredits(), + 'autoSkipDelay': getAutoSkipDelay(), }; } } diff --git a/lib/widgets/video_controls/video_controls.dart b/lib/widgets/video_controls/video_controls.dart index b8216faa..6b070bd3 100644 --- a/lib/widgets/video_controls/video_controls.dart +++ b/lib/widgets/video_controls/video_controls.dart @@ -114,6 +114,12 @@ class _PlexVideoControlsState extends State bool _markersLoaded = false; // Playback state subscription for auto-hide timer StreamSubscription? _playingSubscription; + // Auto-skip state + bool _autoSkipIntro = true; + bool _autoSkipCredits = true; + int _autoSkipDelay = 5; + Timer? _autoSkipTimer; + double _autoSkipProgress = 0.0; @override void initState() { @@ -163,6 +169,13 @@ class _PlexVideoControlsState extends State setState(() { _currentMarker = foundMarker; }); + + // Start auto-skip timer for new marker + if (foundMarker != null) { + _startAutoSkipTimer(foundMarker); + } else { + _cancelAutoSkipTimer(); + } } } }); @@ -183,6 +196,74 @@ class _PlexVideoControlsState extends State if (_currentMarker != null) { widget.player.seek(_currentMarker!.endTime); } + _cancelAutoSkipTimer(); + } + + void _startAutoSkipTimer(PlexMarker marker) { + _cancelAutoSkipTimer(); + + final shouldAutoSkip = (marker.isCredits && _autoSkipCredits) || + (!marker.isCredits && _autoSkipIntro); + + if (!shouldAutoSkip || _autoSkipDelay <= 0) return; + + _autoSkipProgress = 0.0; + const tickDuration = Duration(milliseconds: 50); + final totalTicks = (_autoSkipDelay * 1000) / tickDuration.inMilliseconds; + + if (totalTicks <= 0) return; + + _autoSkipTimer = Timer.periodic(tickDuration, (timer) { + if (!mounted || _currentMarker != marker) { + timer.cancel(); + return; + } + + setState(() { + _autoSkipProgress = (timer.tick / totalTicks).clamp(0.0, 1.0); + }); + + if (timer.tick >= totalTicks) { + timer.cancel(); + try { + _performAutoSkip(); + } catch (e) { + // Handle any errors during skip gracefully + } + } + }); + } + + void _cancelAutoSkipTimer() { + _autoSkipTimer?.cancel(); + _autoSkipTimer = null; + if (mounted) { + setState(() { + _autoSkipProgress = 0.0; + }); + } + } + + /// Perform the appropriate skip action based on marker type and next episode availability + void _performAutoSkip() { + if (_currentMarker == null) return; + + final isCredits = _currentMarker!.isCredits; + final hasNextEpisode = widget.onNext != null; + final showNextEpisode = isCredits && hasNextEpisode; + + if (showNextEpisode) { + widget.onNext?.call(); + } else { + _skipMarker(); + } + } + + /// Check if auto-skip should be active for the current marker + bool _shouldShowAutoSkip() { + if (_currentMarker == null) return false; + return (_currentMarker!.isCredits && _autoSkipCredits) || + (!_currentMarker!.isCredits && _autoSkipIntro); } Future _loadSeekTimes() async { @@ -193,6 +274,9 @@ class _PlexVideoControlsState extends State _audioSyncOffset = settingsService.getAudioSyncOffset(); _subtitleSyncOffset = settingsService.getSubtitleSyncOffset(); _isRotationLocked = settingsService.getRotationLocked(); + _autoSkipIntro = settingsService.getAutoSkipIntro(); + _autoSkipCredits = settingsService.getAutoSkipCredits(); + _autoSkipDelay = settingsService.getAutoSkipDelay(); }); // Apply rotation lock setting @@ -240,6 +324,7 @@ class _PlexVideoControlsState extends State void dispose() { _hideTimer?.cancel(); _feedbackTimer?.cancel(); + _autoSkipTimer?.cancel(); _seekThrottle.cancel(); _playingSubscription?.cancel(); _focusNode.dispose(); @@ -329,6 +414,8 @@ class _PlexVideoControlsState extends State }); if (_showControls) { _startHideTimer(); + // Cancel auto-skip when user manually shows controls + _cancelAutoSkipTimer(); } // On macOS, hide/show traffic lights with controls @@ -804,9 +891,20 @@ class _PlexVideoControlsState extends State // Show "Next Episode" for credits when next episode is available final bool showNextEpisode = isCredits && hasNextEpisode; - final String buttonText = showNextEpisode + final String baseButtonText = showNextEpisode ? 'Next Episode' : (isCredits ? 'Skip Credits' : 'Skip Intro'); + + final isAutoSkipActive = _autoSkipTimer?.isActive ?? false; + final shouldShowAutoSkip = _shouldShowAutoSkip(); + + final int remainingSeconds = isAutoSkipActive && shouldShowAutoSkip + ? (_autoSkipDelay - (_autoSkipProgress * _autoSkipDelay)).ceil().clamp(0, _autoSkipDelay) + : 0; + + final String buttonText = isAutoSkipActive && shouldShowAutoSkip && remainingSeconds > 0 + ? '$baseButtonText ($remainingSeconds)' + : baseButtonText; final IconData buttonIcon = showNextEpisode ? Icons.skip_next : Icons.fast_forward; @@ -814,36 +912,74 @@ class _PlexVideoControlsState extends State return Material( color: Colors.transparent, child: InkWell( - onTap: showNextEpisode ? widget.onNext : _skipMarker, + onTap: () { + if (isAutoSkipActive) { + _cancelAutoSkipTimer(); + } + // Always perform the skip action when tapped + _performAutoSkip(); + }, borderRadius: BorderRadius.circular(8), - child: Container( - padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), - decoration: BoxDecoration( - color: Colors.white.withValues(alpha: 0.9), - borderRadius: BorderRadius.circular(8), - boxShadow: [ - BoxShadow( - color: Colors.black.withValues(alpha: 0.3), - blurRadius: 8, - offset: const Offset(0, 2), + child: Stack( + children: [ + Container( + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + decoration: BoxDecoration( + color: Colors.white.withValues(alpha: 0.9), + borderRadius: BorderRadius.circular(8), + boxShadow: [ + BoxShadow( + color: Colors.black.withValues(alpha: 0.3), + blurRadius: 8, + offset: const Offset(0, 2), + ), + ], ), - ], - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - buttonText, - style: const TextStyle( - color: Colors.black, - fontSize: 16, - fontWeight: FontWeight.w600, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + buttonText, + style: const TextStyle( + color: Colors.black, + fontSize: 16, + fontWeight: FontWeight.w600, + ), + ), + const SizedBox(width: 8), + Icon(buttonIcon, color: Colors.black, size: 20), + ], + ), + ), + // Progress indicator overlay + if (isAutoSkipActive && shouldShowAutoSkip) + Positioned.fill( + child: ClipRRect( + borderRadius: BorderRadius.circular(8), + child: Row( + children: [ + Expanded( + flex: (_autoSkipProgress * 100).round(), + child: Container( + decoration: BoxDecoration( + color: Colors.blue.withValues(alpha: 0.2), + borderRadius: BorderRadius.circular(8), + ), + ), + ), + Expanded( + flex: ((1.0 - _autoSkipProgress) * 100).round(), + child: Container( + decoration: const BoxDecoration( + color: Colors.transparent, + ), + ), + ), + ], + ), ), ), - const SizedBox(width: 8), - Icon(buttonIcon, color: Colors.black, size: 20), - ], - ), + ], ), ), ); From bf7e10b1cb70195e01c438b305563021cb5dd781 Mon Sep 17 00:00:00 2001 From: Tazio Date: Mon, 1 Dec 2025 11:06:50 +0100 Subject: [PATCH 6/7] fix: translations of new options --- lib/i18n/strings.g.dart | 18678 ++++++++++------------------- lib/i18n/strings.i18n.json | 9 +- lib/i18n/strings_de.i18n.json | 9 +- lib/i18n/strings_it.i18n.json | 9 +- lib/i18n/strings_nl.i18n.json | 9 +- lib/i18n/strings_sv.i18n.json | 9 +- lib/i18n/strings_zh.i18n.json | 9 +- lib/screens/settings_screen.dart | 30 +- 8 files changed, 6428 insertions(+), 12334 deletions(-) diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index 53d0fb03..d7010854 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -4,9 +4,9 @@ /// To regenerate, run: `dart run slang` /// /// Locales: 6 -/// Strings: 2662 (443 per locale) +/// Strings: 2704 (450 per locale) /// -/// Built on 2025-11-21 at 22:35 UTC +/// Built on 2025-12-01 at 09:54 UTC // coverage:ignore-file // ignore_for_file: type=lint @@ -25,32 +25,22 @@ const AppLocale _baseLocale = AppLocale.en; /// - Locale locale = AppLocale.en.flutterLocale // get flutter locale from enum /// - if (LocaleSettings.currentLocale == AppLocale.en) // locale check enum AppLocale with BaseAppLocale { - en(languageCode: 'en', build: Translations.build), - de(languageCode: 'de', build: _StringsDe.build), - it(languageCode: 'it', build: _StringsIt.build), - nl(languageCode: 'nl', build: _StringsNl.build), - sv(languageCode: 'sv', build: _StringsSv.build), - zh(languageCode: 'zh', build: _StringsZh.build); + en(languageCode: 'en', build: Translations.build), + de(languageCode: 'de', build: _StringsDe.build), + it(languageCode: 'it', build: _StringsIt.build), + nl(languageCode: 'nl', build: _StringsNl.build), + sv(languageCode: 'sv', build: _StringsSv.build), + zh(languageCode: 'zh', build: _StringsZh.build); - const AppLocale({ - required this.languageCode, - this.scriptCode, - this.countryCode, - required this.build, - }); // ignore: unused_element + const AppLocale({required this.languageCode, this.scriptCode, this.countryCode, required this.build}); // ignore: unused_element - @override - final String languageCode; - @override - final String? scriptCode; - @override - final String? countryCode; - @override - final TranslationBuilder build; + @override final String languageCode; + @override final String? scriptCode; + @override final String? countryCode; + @override final TranslationBuilder build; - /// Gets current instance managed by [LocaleSettings]. - Translations get translations => - LocaleSettings.instance.translationMap[this]!; + /// Gets current instance managed by [LocaleSettings]. + Translations get translations => LocaleSettings.instance.translationMap[this]!; } /// Method A: Simple @@ -79,14 +69,10 @@ Translations get t => LocaleSettings.instance.currentTranslations; /// final t = Translations.of(context); // Get t variable. /// String a = t.someKey.anotherKey; // Use t variable. /// String b = t['someKey.anotherKey']; // Only for edge cases! -class TranslationProvider - extends BaseTranslationProvider { - TranslationProvider({required super.child}) - : super(settings: LocaleSettings.instance); +class TranslationProvider extends BaseTranslationProvider { + TranslationProvider({required super.child}) : super(settings: LocaleSettings.instance); - static InheritedLocaleData of( - BuildContext context, - ) => InheritedLocaleData.of(context); + static InheritedLocaleData of(BuildContext context) => InheritedLocaleData.of(context); } /// Method B shorthand via [BuildContext] extension method. @@ -95,13522 +81,7584 @@ class TranslationProvider /// Usage (e.g. in a widget's build method): /// context.t.someKey.anotherKey extension BuildContextTranslationsExtension on BuildContext { - Translations get t => TranslationProvider.of(this).translations; + Translations get t => TranslationProvider.of(this).translations; } /// Manages all translation instances and the current locale -class LocaleSettings - extends BaseFlutterLocaleSettings { - LocaleSettings._() : super(utils: AppLocaleUtils.instance); +class LocaleSettings extends BaseFlutterLocaleSettings { + LocaleSettings._() : super(utils: AppLocaleUtils.instance); - static final instance = LocaleSettings._(); + static final instance = LocaleSettings._(); - // static aliases (checkout base methods for documentation) - static AppLocale get currentLocale => instance.currentLocale; - static Stream getLocaleStream() => instance.getLocaleStream(); - static AppLocale setLocale( - AppLocale locale, { - bool? listenToDeviceLocale = false, - }) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale); - static AppLocale setLocaleRaw( - String rawLocale, { - bool? listenToDeviceLocale = false, - }) => instance.setLocaleRaw( - rawLocale, - listenToDeviceLocale: listenToDeviceLocale, - ); - static AppLocale useDeviceLocale() => instance.useDeviceLocale(); - @Deprecated('Use [AppLocaleUtils.supportedLocales]') - static List get supportedLocales => instance.supportedLocales; - @Deprecated('Use [AppLocaleUtils.supportedLocalesRaw]') - static List get supportedLocalesRaw => instance.supportedLocalesRaw; - static void setPluralResolver({ - String? language, - AppLocale? locale, - PluralResolver? cardinalResolver, - PluralResolver? ordinalResolver, - }) => instance.setPluralResolver( - language: language, - locale: locale, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ); + // static aliases (checkout base methods for documentation) + static AppLocale get currentLocale => instance.currentLocale; + static Stream getLocaleStream() => instance.getLocaleStream(); + static AppLocale setLocale(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale); + static AppLocale setLocaleRaw(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRaw(rawLocale, listenToDeviceLocale: listenToDeviceLocale); + static AppLocale useDeviceLocale() => instance.useDeviceLocale(); + @Deprecated('Use [AppLocaleUtils.supportedLocales]') static List get supportedLocales => instance.supportedLocales; + @Deprecated('Use [AppLocaleUtils.supportedLocalesRaw]') static List get supportedLocalesRaw => instance.supportedLocalesRaw; + static void setPluralResolver({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolver( + language: language, + locale: locale, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); } /// Provides utility functions without any side effects. class AppLocaleUtils extends BaseAppLocaleUtils { - AppLocaleUtils._() - : super(baseLocale: _baseLocale, locales: AppLocale.values); + AppLocaleUtils._() : super(baseLocale: _baseLocale, locales: AppLocale.values); - static final instance = AppLocaleUtils._(); + static final instance = AppLocaleUtils._(); - // static aliases (checkout base methods for documentation) - static AppLocale parse(String rawLocale) => instance.parse(rawLocale); - static AppLocale parseLocaleParts({ - required String languageCode, - String? scriptCode, - String? countryCode, - }) => instance.parseLocaleParts( - languageCode: languageCode, - scriptCode: scriptCode, - countryCode: countryCode, - ); - static AppLocale findDeviceLocale() => instance.findDeviceLocale(); - static List get supportedLocales => instance.supportedLocales; - static List get supportedLocalesRaw => instance.supportedLocalesRaw; + // static aliases (checkout base methods for documentation) + static AppLocale parse(String rawLocale) => instance.parse(rawLocale); + static AppLocale parseLocaleParts({required String languageCode, String? scriptCode, String? countryCode}) => instance.parseLocaleParts(languageCode: languageCode, scriptCode: scriptCode, countryCode: countryCode); + static AppLocale findDeviceLocale() => instance.findDeviceLocale(); + static List get supportedLocales => instance.supportedLocales; + static List get supportedLocalesRaw => instance.supportedLocalesRaw; } // translations // Path: class Translations implements BaseTranslations { - /// Returns the current translations of the given [context]. - /// - /// Usage: - /// final t = Translations.of(context); - static Translations of(BuildContext context) => - InheritedLocaleData.of(context).translations; + /// Returns the current translations of the given [context]. + /// + /// Usage: + /// final t = Translations.of(context); + static Translations of(BuildContext context) => InheritedLocaleData.of(context).translations; - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - Translations.build({ - Map? overrides, - PluralResolver? cardinalResolver, - PluralResolver? ordinalResolver, - }) : assert( - overrides == null, - 'Set "translation_overrides: true" in order to enable this feature.', - ), - $meta = TranslationMetadata( - locale: AppLocale.en, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + Translations.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.en, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + dynamic operator[](String key) => $meta.getTranslation(key); - late final Translations _root = this; // ignore: unused_field + late final Translations _root = this; // ignore: unused_field - // Translations - late final _StringsAppEn app = _StringsAppEn._(_root); - late final _StringsAuthEn auth = _StringsAuthEn._(_root); - late final _StringsCommonEn common = _StringsCommonEn._(_root); - late final _StringsScreensEn screens = _StringsScreensEn._(_root); - late final _StringsUpdateEn update = _StringsUpdateEn._(_root); - late final _StringsSettingsEn settings = _StringsSettingsEn._(_root); - late final _StringsSearchEn search = _StringsSearchEn._(_root); - late final _StringsHotkeysEn hotkeys = _StringsHotkeysEn._(_root); - late final _StringsPinEntryEn pinEntry = _StringsPinEntryEn._(_root); - late final _StringsFileInfoEn fileInfo = _StringsFileInfoEn._(_root); - late final _StringsMediaMenuEn mediaMenu = _StringsMediaMenuEn._(_root); - late final _StringsAccessibilityEn accessibility = _StringsAccessibilityEn._( - _root, - ); - late final _StringsTooltipsEn tooltips = _StringsTooltipsEn._(_root); - late final _StringsVideoControlsEn videoControls = _StringsVideoControlsEn._( - _root, - ); - late final _StringsUserStatusEn userStatus = _StringsUserStatusEn._(_root); - late final _StringsMessagesEn messages = _StringsMessagesEn._(_root); - late final _StringsProfileEn profile = _StringsProfileEn._(_root); - late final _StringsSubtitlingStylingEn subtitlingStyling = - _StringsSubtitlingStylingEn._(_root); - late final _StringsDialogEn dialog = _StringsDialogEn._(_root); - late final _StringsDiscoverEn discover = _StringsDiscoverEn._(_root); - late final _StringsErrorsEn errors = _StringsErrorsEn._(_root); - late final _StringsLibrariesEn libraries = _StringsLibrariesEn._(_root); - late final _StringsAboutEn about = _StringsAboutEn._(_root); - late final _StringsServerSelectionEn serverSelection = - _StringsServerSelectionEn._(_root); - late final _StringsHubDetailEn hubDetail = _StringsHubDetailEn._(_root); - late final _StringsLogsEn logs = _StringsLogsEn._(_root); - late final _StringsLicensesEn licenses = _StringsLicensesEn._(_root); - late final _StringsNavigationEn navigation = _StringsNavigationEn._(_root); - late final _StringsCollectionsEn collections = _StringsCollectionsEn._(_root); - late final _StringsPlaylistsEn playlists = _StringsPlaylistsEn._(_root); + // Translations + late final _StringsAppEn app = _StringsAppEn._(_root); + late final _StringsAuthEn auth = _StringsAuthEn._(_root); + late final _StringsCommonEn common = _StringsCommonEn._(_root); + late final _StringsScreensEn screens = _StringsScreensEn._(_root); + late final _StringsUpdateEn update = _StringsUpdateEn._(_root); + late final _StringsSettingsEn settings = _StringsSettingsEn._(_root); + late final _StringsSearchEn search = _StringsSearchEn._(_root); + late final _StringsHotkeysEn hotkeys = _StringsHotkeysEn._(_root); + late final _StringsPinEntryEn pinEntry = _StringsPinEntryEn._(_root); + late final _StringsFileInfoEn fileInfo = _StringsFileInfoEn._(_root); + late final _StringsMediaMenuEn mediaMenu = _StringsMediaMenuEn._(_root); + late final _StringsAccessibilityEn accessibility = _StringsAccessibilityEn._(_root); + late final _StringsTooltipsEn tooltips = _StringsTooltipsEn._(_root); + late final _StringsVideoControlsEn videoControls = _StringsVideoControlsEn._(_root); + late final _StringsUserStatusEn userStatus = _StringsUserStatusEn._(_root); + late final _StringsMessagesEn messages = _StringsMessagesEn._(_root); + late final _StringsProfileEn profile = _StringsProfileEn._(_root); + late final _StringsSubtitlingStylingEn subtitlingStyling = _StringsSubtitlingStylingEn._(_root); + late final _StringsDialogEn dialog = _StringsDialogEn._(_root); + late final _StringsDiscoverEn discover = _StringsDiscoverEn._(_root); + late final _StringsErrorsEn errors = _StringsErrorsEn._(_root); + late final _StringsLibrariesEn libraries = _StringsLibrariesEn._(_root); + late final _StringsAboutEn about = _StringsAboutEn._(_root); + late final _StringsServerSelectionEn serverSelection = _StringsServerSelectionEn._(_root); + late final _StringsHubDetailEn hubDetail = _StringsHubDetailEn._(_root); + late final _StringsLogsEn logs = _StringsLogsEn._(_root); + late final _StringsLicensesEn licenses = _StringsLicensesEn._(_root); + late final _StringsNavigationEn navigation = _StringsNavigationEn._(_root); + late final _StringsCollectionsEn collections = _StringsCollectionsEn._(_root); + late final _StringsPlaylistsEn playlists = _StringsPlaylistsEn._(_root); } // Path: app class _StringsAppEn { - _StringsAppEn._(this._root); + _StringsAppEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Plezy'; - String get loading => 'Loading...'; + // Translations + String get title => 'Plezy'; + String get loading => 'Loading...'; } // Path: auth class _StringsAuthEn { - _StringsAuthEn._(this._root); + _StringsAuthEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get signInWithPlex => 'Sign in with Plex'; - String get showQRCode => 'Show QR Code'; - String get cancel => 'Cancel'; - String get authenticate => 'Authenticate'; - String get retry => 'Retry'; - String get debugEnterToken => 'Debug: Enter Plex Token'; - String get plexTokenLabel => 'Plex Auth Token'; - String get plexTokenHint => 'Enter your Plex.tv token'; - String get authenticationTimeout => - 'Authentication timed out. Please try again.'; - String get scanQRCodeInstruction => - 'Scan this QR code with a device logged into Plex to authenticate.'; - String get waitingForAuth => - 'Waiting for authentication...\nPlease complete sign-in in your browser.'; + // Translations + String get signInWithPlex => 'Sign in with Plex'; + String get showQRCode => 'Show QR Code'; + String get cancel => 'Cancel'; + String get authenticate => 'Authenticate'; + String get retry => 'Retry'; + String get debugEnterToken => 'Debug: Enter Plex Token'; + String get plexTokenLabel => 'Plex Auth Token'; + String get plexTokenHint => 'Enter your Plex.tv token'; + String get authenticationTimeout => 'Authentication timed out. Please try again.'; + String get scanQRCodeInstruction => 'Scan this QR code with a device logged into Plex to authenticate.'; + String get waitingForAuth => 'Waiting for authentication...\nPlease complete sign-in in your browser.'; } // Path: common class _StringsCommonEn { - _StringsCommonEn._(this._root); + _StringsCommonEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get cancel => 'Cancel'; - String get save => 'Save'; - String get close => 'Close'; - String get clear => 'Clear'; - String get reset => 'Reset'; - String get later => 'Later'; - String get submit => 'Submit'; - String get confirm => 'Confirm'; - String get retry => 'Retry'; - String get playNow => 'Play Now'; - String get logout => 'Logout'; - String get online => 'Online'; - String get offline => 'Offline'; - String get owned => 'Owned'; - String get shared => 'Shared'; - String get current => 'CURRENT'; - String get unknown => 'Unknown'; - String get refresh => 'Refresh'; - String get yes => 'Yes'; - String get no => 'No'; - String get server => 'Server'; - String get delete => 'Delete'; - String get shuffle => 'Shuffle'; - String get addTo => 'Add to...'; + // Translations + String get cancel => 'Cancel'; + String get save => 'Save'; + String get close => 'Close'; + String get clear => 'Clear'; + String get reset => 'Reset'; + String get later => 'Later'; + String get submit => 'Submit'; + String get confirm => 'Confirm'; + String get retry => 'Retry'; + String get playNow => 'Play Now'; + String get logout => 'Logout'; + String get online => 'Online'; + String get offline => 'Offline'; + String get owned => 'Owned'; + String get shared => 'Shared'; + String get current => 'CURRENT'; + String get unknown => 'Unknown'; + String get refresh => 'Refresh'; + String get yes => 'Yes'; + String get no => 'No'; + String get server => 'Server'; + String get delete => 'Delete'; + String get shuffle => 'Shuffle'; + String get addTo => 'Add to...'; } // Path: screens class _StringsScreensEn { - _StringsScreensEn._(this._root); + _StringsScreensEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get licenses => 'Licenses'; - String get switchProfile => 'Switch Profile'; - String get subtitleStyling => 'Subtitle Styling'; - String get search => 'Search'; - String get logs => 'Logs'; + // Translations + String get licenses => 'Licenses'; + String get switchProfile => 'Switch Profile'; + String get subtitleStyling => 'Subtitle Styling'; + String get search => 'Search'; + String get logs => 'Logs'; } // Path: update class _StringsUpdateEn { - _StringsUpdateEn._(this._root); + _StringsUpdateEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get available => 'Update Available'; - String versionAvailable({required Object version}) => - 'Version ${version} is available'; - String currentVersion({required Object version}) => 'Current: ${version}'; - String get skipVersion => 'Skip This Version'; - String get viewRelease => 'View Release'; - String get latestVersion => 'You are on the latest version'; - String get checkFailed => 'Failed to check for updates'; + // Translations + String get available => 'Update Available'; + String versionAvailable({required Object version}) => 'Version ${version} is available'; + String currentVersion({required Object version}) => 'Current: ${version}'; + String get skipVersion => 'Skip This Version'; + String get viewRelease => 'View Release'; + String get latestVersion => 'You are on the latest version'; + String get checkFailed => 'Failed to check for updates'; } // Path: settings class _StringsSettingsEn { - _StringsSettingsEn._(this._root); + _StringsSettingsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Settings'; - String get language => 'Language'; - String get theme => 'Theme'; - String get appearance => 'Appearance'; - String get videoPlayback => 'Video Playback'; - String get shufflePlay => 'Shuffle Play'; - String get advanced => 'Advanced'; - String get useSeasonPostersDescription => - 'Show season poster instead of series poster for episodes'; - String get showHeroSectionDescription => - 'Display featured content carousel on home screen'; - String get secondsLabel => 'Seconds'; - String get minutesLabel => 'Minutes'; - String get secondsShort => 's'; - String get minutesShort => 'm'; - String durationHint({required Object min, required Object max}) => - 'Enter duration (${min}-${max})'; - String get systemTheme => 'System'; - String get systemThemeDescription => 'Follow system settings'; - String get lightTheme => 'Light'; - String get darkTheme => 'Dark'; - String get libraryDensity => 'Library Density'; - String get compact => 'Compact'; - String get compactDescription => 'Smaller cards, more items visible'; - String get normal => 'Normal'; - String get normalDescription => 'Default size'; - String get comfortable => 'Comfortable'; - String get comfortableDescription => 'Larger cards, fewer items visible'; - String get viewMode => 'View Mode'; - String get gridView => 'Grid'; - String get gridViewDescription => 'Display items in a grid layout'; - String get listView => 'List'; - String get listViewDescription => 'Display items in a list layout'; - String get useSeasonPosters => 'Use Season Posters'; - String get showHeroSection => 'Show Hero Section'; - String get hardwareDecoding => 'Hardware Decoding'; - String get hardwareDecodingDescription => - 'Use hardware acceleration when available'; - String get bufferSize => 'Buffer Size'; - String bufferSizeMB({required Object size}) => '${size}MB'; - String get subtitleStyling => 'Subtitle Styling'; - String get subtitleStylingDescription => 'Customize subtitle appearance'; - String get smallSkipDuration => 'Small Skip Duration'; - String get largeSkipDuration => 'Large Skip Duration'; - String secondsUnit({required Object seconds}) => '${seconds} seconds'; - String get defaultSleepTimer => 'Default Sleep Timer'; - String minutesUnit({required Object minutes}) => '${minutes} minutes'; - String get rememberTrackSelections => - 'Remember track selections per show/movie'; - String get rememberTrackSelectionsDescription => - 'Automatically save audio and subtitle language preferences when you change tracks during playback'; - String get unwatchedOnly => 'Unwatched Only'; - String get unwatchedOnlyDescription => - 'Only include unwatched episodes in shuffle queue'; - String get shuffleOrderNavigation => 'Shuffle Order Navigation'; - String get shuffleOrderNavigationDescription => - 'Next/previous buttons follow shuffled order'; - String get loopShuffleQueue => 'Loop Shuffle Queue'; - String get loopShuffleQueueDescription => - 'Restart queue when reaching the end'; - String get videoPlayerControls => 'Video Player Controls'; - String get keyboardShortcuts => 'Keyboard Shortcuts'; - String get keyboardShortcutsDescription => 'Customize keyboard shortcuts'; - String get debugLogging => 'Debug Logging'; - String get debugLoggingDescription => - 'Enable detailed logging for troubleshooting'; - String get viewLogs => 'View Logs'; - String get viewLogsDescription => 'View application logs'; - String get clearCache => 'Clear Cache'; - String get clearCacheDescription => - 'This will clear all cached images and data. The app may take longer to load content after clearing the cache.'; - String get clearCacheSuccess => 'Cache cleared successfully'; - String get resetSettings => 'Reset Settings'; - String get resetSettingsDescription => - 'This will reset all settings to their default values. This action cannot be undone.'; - String get resetSettingsSuccess => 'Settings reset successfully'; - String get shortcutsReset => 'Shortcuts reset to defaults'; - String get about => 'About'; - String get aboutDescription => 'App information and licenses'; - String get updates => 'Updates'; - String get updateAvailable => 'Update Available'; - String get checkForUpdates => 'Check for Updates'; - String get validationErrorEnterNumber => 'Please enter a valid number'; - String validationErrorDuration({ - required Object min, - required Object max, - required Object unit, - }) => 'Duration must be between ${min} and ${max} ${unit}'; - String shortcutAlreadyAssigned({required Object action}) => - 'Shortcut already assigned to ${action}'; - String shortcutUpdated({required Object action}) => - 'Shortcut updated for ${action}'; + // Translations + String get title => 'Settings'; + String get language => 'Language'; + String get theme => 'Theme'; + String get appearance => 'Appearance'; + String get videoPlayback => 'Video Playback'; + String get shufflePlay => 'Shuffle Play'; + String get advanced => 'Advanced'; + String get useSeasonPostersDescription => 'Show season poster instead of series poster for episodes'; + String get showHeroSectionDescription => 'Display featured content carousel on home screen'; + String get secondsLabel => 'Seconds'; + String get minutesLabel => 'Minutes'; + String get secondsShort => 's'; + String get minutesShort => 'm'; + String durationHint({required Object min, required Object max}) => 'Enter duration (${min}-${max})'; + String get systemTheme => 'System'; + String get systemThemeDescription => 'Follow system settings'; + String get lightTheme => 'Light'; + String get darkTheme => 'Dark'; + String get libraryDensity => 'Library Density'; + String get compact => 'Compact'; + String get compactDescription => 'Smaller cards, more items visible'; + String get normal => 'Normal'; + String get normalDescription => 'Default size'; + String get comfortable => 'Comfortable'; + String get comfortableDescription => 'Larger cards, fewer items visible'; + String get viewMode => 'View Mode'; + String get gridView => 'Grid'; + String get gridViewDescription => 'Display items in a grid layout'; + String get listView => 'List'; + String get listViewDescription => 'Display items in a list layout'; + String get useSeasonPosters => 'Use Season Posters'; + String get showHeroSection => 'Show Hero Section'; + String get hardwareDecoding => 'Hardware Decoding'; + String get hardwareDecodingDescription => 'Use hardware acceleration when available'; + String get bufferSize => 'Buffer Size'; + String bufferSizeMB({required Object size}) => '${size}MB'; + String get subtitleStyling => 'Subtitle Styling'; + String get subtitleStylingDescription => 'Customize subtitle appearance'; + String get smallSkipDuration => 'Small Skip Duration'; + String get largeSkipDuration => 'Large Skip Duration'; + String secondsUnit({required Object seconds}) => '${seconds} seconds'; + String get defaultSleepTimer => 'Default Sleep Timer'; + String minutesUnit({required Object minutes}) => '${minutes} minutes'; + String get rememberTrackSelections => 'Remember track selections per show/movie'; + String get rememberTrackSelectionsDescription => 'Automatically save audio and subtitle language preferences when you change tracks during playback'; + String get unwatchedOnly => 'Unwatched Only'; + String get unwatchedOnlyDescription => 'Only include unwatched episodes in shuffle queue'; + String get shuffleOrderNavigation => 'Shuffle Order Navigation'; + String get shuffleOrderNavigationDescription => 'Next/previous buttons follow shuffled order'; + String get loopShuffleQueue => 'Loop Shuffle Queue'; + String get loopShuffleQueueDescription => 'Restart queue when reaching the end'; + String get videoPlayerControls => 'Video Player Controls'; + String get keyboardShortcuts => 'Keyboard Shortcuts'; + String get keyboardShortcutsDescription => 'Customize keyboard shortcuts'; + String get debugLogging => 'Debug Logging'; + String get debugLoggingDescription => 'Enable detailed logging for troubleshooting'; + String get viewLogs => 'View Logs'; + String get viewLogsDescription => 'View application logs'; + String get clearCache => 'Clear Cache'; + String get clearCacheDescription => 'This will clear all cached images and data. The app may take longer to load content after clearing the cache.'; + String get clearCacheSuccess => 'Cache cleared successfully'; + String get resetSettings => 'Reset Settings'; + String get resetSettingsDescription => 'This will reset all settings to their default values. This action cannot be undone.'; + String get resetSettingsSuccess => 'Settings reset successfully'; + String get shortcutsReset => 'Shortcuts reset to defaults'; + String get about => 'About'; + String get aboutDescription => 'App information and licenses'; + String get updates => 'Updates'; + String get updateAvailable => 'Update Available'; + String get checkForUpdates => 'Check for Updates'; + String get validationErrorEnterNumber => 'Please enter a valid number'; + String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Duration must be between ${min} and ${max} ${unit}'; + String shortcutAlreadyAssigned({required Object action}) => 'Shortcut already assigned to ${action}'; + String shortcutUpdated({required Object action}) => 'Shortcut updated for ${action}'; + String get autoSkip => 'Auto Skip'; + String get autoSkipIntro => 'Auto Skip Intro'; + String get autoSkipIntroDescription => 'Automatically skip intro markers after a few seconds'; + String get autoSkipCredits => 'Auto Skip Credits'; + String get autoSkipCreditsDescription => 'Automatically skip credits and play next episode'; + String get autoSkipDelay => 'Auto Skip Delay'; + String autoSkipDelayDescription({required Object seconds}) => 'Wait ${seconds} seconds before auto-skipping'; } // Path: search class _StringsSearchEn { - _StringsSearchEn._(this._root); + _StringsSearchEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get hint => 'Search movies, shows, music...'; - String get tryDifferentTerm => 'Try a different search term'; - String get searchYourMedia => 'Search your media'; - String get enterTitleActorOrKeyword => 'Enter a title, actor, or keyword'; + // Translations + String get hint => 'Search movies, shows, music...'; + String get tryDifferentTerm => 'Try a different search term'; + String get searchYourMedia => 'Search your media'; + String get enterTitleActorOrKeyword => 'Enter a title, actor, or keyword'; } // Path: hotkeys class _StringsHotkeysEn { - _StringsHotkeysEn._(this._root); + _StringsHotkeysEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String setShortcutFor({required Object actionName}) => - 'Set Shortcut for ${actionName}'; - String get clearShortcut => 'Clear shortcut'; + // Translations + String setShortcutFor({required Object actionName}) => 'Set Shortcut for ${actionName}'; + String get clearShortcut => 'Clear shortcut'; } // Path: pinEntry class _StringsPinEntryEn { - _StringsPinEntryEn._(this._root); + _StringsPinEntryEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get enterPin => 'Enter PIN'; - String get showPin => 'Show PIN'; - String get hidePin => 'Hide PIN'; + // Translations + String get enterPin => 'Enter PIN'; + String get showPin => 'Show PIN'; + String get hidePin => 'Hide PIN'; } // Path: fileInfo class _StringsFileInfoEn { - _StringsFileInfoEn._(this._root); + _StringsFileInfoEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'File Info'; - String get video => 'Video'; - String get audio => 'Audio'; - String get file => 'File'; - String get advanced => 'Advanced'; - String get codec => 'Codec'; - String get resolution => 'Resolution'; - String get bitrate => 'Bitrate'; - String get frameRate => 'Frame Rate'; - String get aspectRatio => 'Aspect Ratio'; - String get profile => 'Profile'; - String get bitDepth => 'Bit Depth'; - String get colorSpace => 'Color Space'; - String get colorRange => 'Color Range'; - String get colorPrimaries => 'Color Primaries'; - String get chromaSubsampling => 'Chroma Subsampling'; - String get channels => 'Channels'; - String get path => 'Path'; - String get size => 'Size'; - String get container => 'Container'; - String get duration => 'Duration'; - String get optimizedForStreaming => 'Optimized for Streaming'; - String get has64bitOffsets => '64-bit Offsets'; + // Translations + String get title => 'File Info'; + String get video => 'Video'; + String get audio => 'Audio'; + String get file => 'File'; + String get advanced => 'Advanced'; + String get codec => 'Codec'; + String get resolution => 'Resolution'; + String get bitrate => 'Bitrate'; + String get frameRate => 'Frame Rate'; + String get aspectRatio => 'Aspect Ratio'; + String get profile => 'Profile'; + String get bitDepth => 'Bit Depth'; + String get colorSpace => 'Color Space'; + String get colorRange => 'Color Range'; + String get colorPrimaries => 'Color Primaries'; + String get chromaSubsampling => 'Chroma Subsampling'; + String get channels => 'Channels'; + String get path => 'Path'; + String get size => 'Size'; + String get container => 'Container'; + String get duration => 'Duration'; + String get optimizedForStreaming => 'Optimized for Streaming'; + String get has64bitOffsets => '64-bit Offsets'; } // Path: mediaMenu class _StringsMediaMenuEn { - _StringsMediaMenuEn._(this._root); + _StringsMediaMenuEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get markAsWatched => 'Mark as Watched'; - String get markAsUnwatched => 'Mark as Unwatched'; - String get removeFromContinueWatching => 'Remove from Continue Watching'; - String get goToSeries => 'Go to series'; - String get goToSeason => 'Go to season'; - String get shufflePlay => 'Shuffle Play'; - String get fileInfo => 'File Info'; + // Translations + String get markAsWatched => 'Mark as Watched'; + String get markAsUnwatched => 'Mark as Unwatched'; + String get removeFromContinueWatching => 'Remove from Continue Watching'; + String get goToSeries => 'Go to series'; + String get goToSeason => 'Go to season'; + String get shufflePlay => 'Shuffle Play'; + String get fileInfo => 'File Info'; } // Path: accessibility class _StringsAccessibilityEn { - _StringsAccessibilityEn._(this._root); + _StringsAccessibilityEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String mediaCardMovie({required Object title}) => '${title}, movie'; - String mediaCardShow({required Object title}) => '${title}, TV show'; - String mediaCardEpisode({ - required Object title, - required Object episodeInfo, - }) => '${title}, ${episodeInfo}'; - String mediaCardSeason({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - String get mediaCardWatched => 'watched'; - String mediaCardPartiallyWatched({required Object percent}) => - '${percent} percent watched'; - String get mediaCardUnwatched => 'unwatched'; - String get tapToPlay => 'Tap to play'; + // Translations + String mediaCardMovie({required Object title}) => '${title}, movie'; + String mediaCardShow({required Object title}) => '${title}, TV show'; + String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + String get mediaCardWatched => 'watched'; + String mediaCardPartiallyWatched({required Object percent}) => '${percent} percent watched'; + String get mediaCardUnwatched => 'unwatched'; + String get tapToPlay => 'Tap to play'; } // Path: tooltips class _StringsTooltipsEn { - _StringsTooltipsEn._(this._root); + _StringsTooltipsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get shufflePlay => 'Shuffle play'; - String get markAsWatched => 'Mark as watched'; - String get markAsUnwatched => 'Mark as unwatched'; + // Translations + String get shufflePlay => 'Shuffle play'; + String get markAsWatched => 'Mark as watched'; + String get markAsUnwatched => 'Mark as unwatched'; } // Path: videoControls class _StringsVideoControlsEn { - _StringsVideoControlsEn._(this._root); + _StringsVideoControlsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get audioLabel => 'Audio'; - String get subtitlesLabel => 'Subtitles'; - String get resetToZero => 'Reset to 0ms'; - String addTime({required Object amount, required Object unit}) => - '+${amount}${unit}'; - String minusTime({required Object amount, required Object unit}) => - '-${amount}${unit}'; - String playsLater({required Object label}) => '${label} plays later'; - String playsEarlier({required Object label}) => '${label} plays earlier'; - String get noOffset => 'No offset'; - String get letterbox => 'Letterbox'; - String get fillScreen => 'Fill screen'; - String get stretch => 'Stretch'; - String get lockRotation => 'Lock rotation'; - String get unlockRotation => 'Unlock rotation'; - String get sleepTimer => 'Sleep Timer'; - String get timerActive => 'Timer Active'; - String playbackWillPauseIn({required Object duration}) => - 'Playback will pause in ${duration}'; - String get sleepTimerCompleted => 'Sleep timer completed - playback paused'; - String get playButton => 'Play'; - String get pauseButton => 'Pause'; - String seekBackwardButton({required Object seconds}) => - 'Seek backward ${seconds} seconds'; - String seekForwardButton({required Object seconds}) => - 'Seek forward ${seconds} seconds'; - String get previousButton => 'Previous episode'; - String get nextButton => 'Next episode'; - String get previousChapterButton => 'Previous chapter'; - String get nextChapterButton => 'Next chapter'; - String get volumeButton => 'Volume'; - String get muteButton => 'Mute'; - String get unmuteButton => 'Unmute'; - String get settingsButton => 'Video settings'; - String get audioTrackButton => 'Audio tracks'; - String get subtitlesButton => 'Subtitles'; - String get chaptersButton => 'Chapters'; - String get versionsButton => 'Video versions'; - String get aspectRatioButton => 'Aspect ratio'; - String get fullscreenButton => 'Enter fullscreen'; - String get exitFullscreenButton => 'Exit fullscreen'; - String get rotationLockButton => 'Rotation lock'; - String get timelineSlider => 'Video timeline'; - String get volumeSlider => 'Volume level'; - String get backButton => 'Back'; + // Translations + String get audioLabel => 'Audio'; + String get subtitlesLabel => 'Subtitles'; + String get resetToZero => 'Reset to 0ms'; + String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + String playsLater({required Object label}) => '${label} plays later'; + String playsEarlier({required Object label}) => '${label} plays earlier'; + String get noOffset => 'No offset'; + String get letterbox => 'Letterbox'; + String get fillScreen => 'Fill screen'; + String get stretch => 'Stretch'; + String get lockRotation => 'Lock rotation'; + String get unlockRotation => 'Unlock rotation'; + String get sleepTimer => 'Sleep Timer'; + String get timerActive => 'Timer Active'; + String playbackWillPauseIn({required Object duration}) => 'Playback will pause in ${duration}'; + String get sleepTimerCompleted => 'Sleep timer completed - playback paused'; + String get playButton => 'Play'; + String get pauseButton => 'Pause'; + String seekBackwardButton({required Object seconds}) => 'Seek backward ${seconds} seconds'; + String seekForwardButton({required Object seconds}) => 'Seek forward ${seconds} seconds'; + String get previousButton => 'Previous episode'; + String get nextButton => 'Next episode'; + String get previousChapterButton => 'Previous chapter'; + String get nextChapterButton => 'Next chapter'; + String get volumeButton => 'Volume'; + String get muteButton => 'Mute'; + String get unmuteButton => 'Unmute'; + String get settingsButton => 'Video settings'; + String get audioTrackButton => 'Audio tracks'; + String get subtitlesButton => 'Subtitles'; + String get chaptersButton => 'Chapters'; + String get versionsButton => 'Video versions'; + String get aspectRatioButton => 'Aspect ratio'; + String get fullscreenButton => 'Enter fullscreen'; + String get exitFullscreenButton => 'Exit fullscreen'; + String get rotationLockButton => 'Rotation lock'; + String get timelineSlider => 'Video timeline'; + String get volumeSlider => 'Volume level'; + String get backButton => 'Back'; } // Path: userStatus class _StringsUserStatusEn { - _StringsUserStatusEn._(this._root); + _StringsUserStatusEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get admin => 'Admin'; - String get restricted => 'Restricted'; - String get protected => 'Protected'; - String get current => 'CURRENT'; + // Translations + String get admin => 'Admin'; + String get restricted => 'Restricted'; + String get protected => 'Protected'; + String get current => 'CURRENT'; } // Path: messages class _StringsMessagesEn { - _StringsMessagesEn._(this._root); + _StringsMessagesEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get markedAsWatched => 'Marked as watched'; - String get markedAsUnwatched => 'Marked as unwatched'; - String get removedFromContinueWatching => 'Removed from Continue Watching'; - String errorLoading({required Object error}) => 'Error: ${error}'; - String get fileInfoNotAvailable => 'File information not available'; - String errorLoadingFileInfo({required Object error}) => - 'Error loading file info: ${error}'; - String get errorLoadingSeries => 'Error loading series'; - String get errorLoadingSeason => 'Error loading season'; - String get musicNotSupported => 'Music playback is not yet supported'; - String get logsCleared => 'Logs cleared'; - String get logsCopied => 'Logs copied to clipboard'; - String get noLogsAvailable => 'No logs available'; - String libraryScanning({required Object title}) => 'Scanning "${title}"...'; - String libraryScanStarted({required Object title}) => - 'Library scan started for "${title}"'; - String libraryScanFailed({required Object error}) => - 'Failed to scan library: ${error}'; - String metadataRefreshing({required Object title}) => - 'Refreshing metadata for "${title}"...'; - String metadataRefreshStarted({required Object title}) => - 'Metadata refresh started for "${title}"'; - String metadataRefreshFailed({required Object error}) => - 'Failed to refresh metadata: ${error}'; - String get noPlexToken => 'No Plex token found. Please login again.'; - String get logoutConfirm => 'Are you sure you want to logout?'; - String get noSeasonsFound => 'No seasons found'; - String get noEpisodesFound => 'No episodes found in first season'; - String get noEpisodesFoundGeneral => 'No episodes found'; - String get noResultsFound => 'No results found'; - String sleepTimerSet({required Object label}) => - 'Sleep timer set for ${label}'; - String failedToSwitchProfile({required Object displayName}) => - 'Failed to switch to ${displayName}'; - String get noItemsAvailable => 'No items available'; - String get failedToCreatePlayQueue => 'Failed to create play queue'; - String get failedToCreatePlayQueueNoItems => - 'Failed to create play queue - no items'; - String failedPlayback({required Object action, required Object error}) => - 'Failed to ${action}: ${error}'; + // Translations + String get markedAsWatched => 'Marked as watched'; + String get markedAsUnwatched => 'Marked as unwatched'; + String get removedFromContinueWatching => 'Removed from Continue Watching'; + String errorLoading({required Object error}) => 'Error: ${error}'; + String get fileInfoNotAvailable => 'File information not available'; + String errorLoadingFileInfo({required Object error}) => 'Error loading file info: ${error}'; + String get errorLoadingSeries => 'Error loading series'; + String get errorLoadingSeason => 'Error loading season'; + String get musicNotSupported => 'Music playback is not yet supported'; + String get logsCleared => 'Logs cleared'; + String get logsCopied => 'Logs copied to clipboard'; + String get noLogsAvailable => 'No logs available'; + String libraryScanning({required Object title}) => 'Scanning "${title}"...'; + String libraryScanStarted({required Object title}) => 'Library scan started for "${title}"'; + String libraryScanFailed({required Object error}) => 'Failed to scan library: ${error}'; + String metadataRefreshing({required Object title}) => 'Refreshing metadata for "${title}"...'; + String metadataRefreshStarted({required Object title}) => 'Metadata refresh started for "${title}"'; + String metadataRefreshFailed({required Object error}) => 'Failed to refresh metadata: ${error}'; + String get noPlexToken => 'No Plex token found. Please login again.'; + String get logoutConfirm => 'Are you sure you want to logout?'; + String get noSeasonsFound => 'No seasons found'; + String get noEpisodesFound => 'No episodes found in first season'; + String get noEpisodesFoundGeneral => 'No episodes found'; + String get noResultsFound => 'No results found'; + String sleepTimerSet({required Object label}) => 'Sleep timer set for ${label}'; + String failedToSwitchProfile({required Object displayName}) => 'Failed to switch to ${displayName}'; + String get noItemsAvailable => 'No items available'; + String get failedToCreatePlayQueue => 'Failed to create play queue'; + String get failedToCreatePlayQueueNoItems => 'Failed to create play queue - no items'; + String failedPlayback({required Object action, required Object error}) => 'Failed to ${action}: ${error}'; } // Path: profile class _StringsProfileEn { - _StringsProfileEn._(this._root); + _StringsProfileEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get noUsersAvailable => 'No users available'; + // Translations + String get noUsersAvailable => 'No users available'; } // Path: subtitlingStyling class _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingEn._(this._root); + _StringsSubtitlingStylingEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get stylingOptions => 'Styling Options'; - String get fontSize => 'Font Size'; - String get textColor => 'Text Color'; - String get borderSize => 'Border Size'; - String get borderColor => 'Border Color'; - String get backgroundOpacity => 'Background Opacity'; - String get backgroundColor => 'Background Color'; + // Translations + String get stylingOptions => 'Styling Options'; + String get fontSize => 'Font Size'; + String get textColor => 'Text Color'; + String get borderSize => 'Border Size'; + String get borderColor => 'Border Color'; + String get backgroundOpacity => 'Background Opacity'; + String get backgroundColor => 'Background Color'; } // Path: dialog class _StringsDialogEn { - _StringsDialogEn._(this._root); + _StringsDialogEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get confirmAction => 'Confirm Action'; - String get areYouSure => 'Are you sure you want to perform this action?'; - String get cancel => 'Cancel'; - String get playNow => 'Play Now'; + // Translations + String get confirmAction => 'Confirm Action'; + String get areYouSure => 'Are you sure you want to perform this action?'; + String get cancel => 'Cancel'; + String get playNow => 'Play Now'; } // Path: discover class _StringsDiscoverEn { - _StringsDiscoverEn._(this._root); + _StringsDiscoverEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Discover'; - String get switchProfile => 'Switch Profile'; - String get logout => 'Logout'; - String get noContentAvailable => 'No content available'; - String get addMediaToLibraries => 'Add some media to your libraries'; - String get continueWatching => 'Continue Watching'; - String get recentlyAdded => 'Recently Added'; - String get play => 'Play'; - String get resume => 'Resume'; - String playEpisode({required Object season, required Object episode}) => - 'Play S${season}, E${episode}'; - String resumeEpisode({required Object season, required Object episode}) => - 'Resume S${season}, E${episode}'; - String get pause => 'Pause'; - String get overview => 'Overview'; - String get cast => 'Cast'; - String get seasons => 'Seasons'; - String get studio => 'Studio'; - String get rating => 'Rating'; - String get watched => 'Watched'; - String episodeCount({required Object count}) => '${count} episodes'; - String watchedProgress({required Object watched, required Object total}) => - '${watched}/${total} watched'; - String get movie => 'Movie'; - String get tvShow => 'TV Show'; - String minutesLeft({required Object minutes}) => '${minutes} min left'; + // Translations + String get title => 'Discover'; + String get switchProfile => 'Switch Profile'; + String get logout => 'Logout'; + String get noContentAvailable => 'No content available'; + String get addMediaToLibraries => 'Add some media to your libraries'; + String get continueWatching => 'Continue Watching'; + String get recentlyAdded => 'Recently Added'; + String get play => 'Play'; + String get resume => 'Resume'; + String playEpisode({required Object season, required Object episode}) => 'Play S${season}, E${episode}'; + String resumeEpisode({required Object season, required Object episode}) => 'Resume S${season}, E${episode}'; + String get pause => 'Pause'; + String get overview => 'Overview'; + String get cast => 'Cast'; + String get seasons => 'Seasons'; + String get studio => 'Studio'; + String get rating => 'Rating'; + String get watched => 'Watched'; + String episodeCount({required Object count}) => '${count} episodes'; + String watchedProgress({required Object watched, required Object total}) => '${watched}/${total} watched'; + String get movie => 'Movie'; + String get tvShow => 'TV Show'; + String minutesLeft({required Object minutes}) => '${minutes} min left'; } // Path: errors class _StringsErrorsEn { - _StringsErrorsEn._(this._root); + _StringsErrorsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String searchFailed({required Object error}) => 'Search failed: ${error}'; - String connectionTimeout({required Object context}) => - 'Connection timeout while loading ${context}'; - String get connectionFailed => 'Unable to connect to Plex server'; - String failedToLoad({required Object context, required Object error}) => - 'Failed to load ${context}: ${error}'; - String get noClientAvailable => 'No client available'; - String authenticationFailed({required Object error}) => - 'Authentication failed: ${error}'; - String get couldNotLaunchUrl => 'Could not launch auth URL'; - String get pleaseEnterToken => 'Please enter a token'; - String get invalidToken => 'Invalid token'; - String failedToVerifyToken({required Object error}) => - 'Failed to verify token: ${error}'; - String failedToSwitchProfile({required Object displayName}) => - 'Failed to switch to ${displayName}'; - String get connectionFailedGeneric => 'Connection failed'; + // Translations + String searchFailed({required Object error}) => 'Search failed: ${error}'; + String connectionTimeout({required Object context}) => 'Connection timeout while loading ${context}'; + String get connectionFailed => 'Unable to connect to Plex server'; + String failedToLoad({required Object context, required Object error}) => 'Failed to load ${context}: ${error}'; + String get noClientAvailable => 'No client available'; + String authenticationFailed({required Object error}) => 'Authentication failed: ${error}'; + String get couldNotLaunchUrl => 'Could not launch auth URL'; + String get pleaseEnterToken => 'Please enter a token'; + String get invalidToken => 'Invalid token'; + String failedToVerifyToken({required Object error}) => 'Failed to verify token: ${error}'; + String failedToSwitchProfile({required Object displayName}) => 'Failed to switch to ${displayName}'; + String get connectionFailedGeneric => 'Connection failed'; } // Path: libraries class _StringsLibrariesEn { - _StringsLibrariesEn._(this._root); + _StringsLibrariesEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Libraries'; - String get scanLibraryFiles => 'Scan Library Files'; - String get scanLibrary => 'Scan Library'; - String get analyze => 'Analyze'; - String get analyzeLibrary => 'Analyze Library'; - String get refreshMetadata => 'Refresh Metadata'; - String get emptyTrash => 'Empty Trash'; - String emptyingTrash({required Object title}) => - 'Emptying trash for "${title}"...'; - String trashEmptied({required Object title}) => - 'Trash emptied for "${title}"'; - String failedToEmptyTrash({required Object error}) => - 'Failed to empty trash: ${error}'; - String analyzing({required Object title}) => 'Analyzing "${title}"...'; - String analysisStarted({required Object title}) => - 'Analysis started for "${title}"'; - String failedToAnalyze({required Object error}) => - 'Failed to analyze library: ${error}'; - String get noLibrariesFound => 'No libraries found'; - String get thisLibraryIsEmpty => 'This library is empty'; - String get all => 'All'; - String get clearAll => 'Clear All'; - String scanLibraryConfirm({required Object title}) => - 'Are you sure you want to scan "${title}"?'; - String analyzeLibraryConfirm({required Object title}) => - 'Are you sure you want to analyze "${title}"?'; - String refreshMetadataConfirm({required Object title}) => - 'Are you sure you want to refresh metadata for "${title}"?'; - String emptyTrashConfirm({required Object title}) => - 'Are you sure you want to empty trash for "${title}"?'; - String get manageLibraries => 'Manage Libraries'; - String get sort => 'Sort'; - String get sortBy => 'Sort By'; - String get filters => 'Filters'; - String loadingLibraryWithCount({required Object count}) => - 'Loading library... (${count} items loaded)'; - String get confirmActionMessage => - 'Are you sure you want to perform this action?'; - String get showLibrary => 'Show library'; - String get hideLibrary => 'Hide library'; - String get libraryOptions => 'Library options'; - String get content => 'library content'; - String get selectLibrary => 'Select library'; - String filtersWithCount({required Object count}) => 'Filters (${count})'; - String get noRecommendations => 'No recommendations available'; - String get noCollections => 'No collections in this library'; - String get noFoldersFound => 'No folders found'; - String get folders => 'folders'; - late final _StringsLibrariesTabsEn tabs = _StringsLibrariesTabsEn._(_root); - late final _StringsLibrariesGroupingsEn groupings = - _StringsLibrariesGroupingsEn._(_root); + // Translations + String get title => 'Libraries'; + String get scanLibraryFiles => 'Scan Library Files'; + String get scanLibrary => 'Scan Library'; + String get analyze => 'Analyze'; + String get analyzeLibrary => 'Analyze Library'; + String get refreshMetadata => 'Refresh Metadata'; + String get emptyTrash => 'Empty Trash'; + String emptyingTrash({required Object title}) => 'Emptying trash for "${title}"...'; + String trashEmptied({required Object title}) => 'Trash emptied for "${title}"'; + String failedToEmptyTrash({required Object error}) => 'Failed to empty trash: ${error}'; + String analyzing({required Object title}) => 'Analyzing "${title}"...'; + String analysisStarted({required Object title}) => 'Analysis started for "${title}"'; + String failedToAnalyze({required Object error}) => 'Failed to analyze library: ${error}'; + String get noLibrariesFound => 'No libraries found'; + String get thisLibraryIsEmpty => 'This library is empty'; + String get all => 'All'; + String get clearAll => 'Clear All'; + String scanLibraryConfirm({required Object title}) => 'Are you sure you want to scan "${title}"?'; + String analyzeLibraryConfirm({required Object title}) => 'Are you sure you want to analyze "${title}"?'; + String refreshMetadataConfirm({required Object title}) => 'Are you sure you want to refresh metadata for "${title}"?'; + String emptyTrashConfirm({required Object title}) => 'Are you sure you want to empty trash for "${title}"?'; + String get manageLibraries => 'Manage Libraries'; + String get sort => 'Sort'; + String get sortBy => 'Sort By'; + String get filters => 'Filters'; + String loadingLibraryWithCount({required Object count}) => 'Loading library... (${count} items loaded)'; + String get confirmActionMessage => 'Are you sure you want to perform this action?'; + String get showLibrary => 'Show library'; + String get hideLibrary => 'Hide library'; + String get libraryOptions => 'Library options'; + String get content => 'library content'; + String get selectLibrary => 'Select library'; + String filtersWithCount({required Object count}) => 'Filters (${count})'; + String get noRecommendations => 'No recommendations available'; + String get noCollections => 'No collections in this library'; + String get noFoldersFound => 'No folders found'; + String get folders => 'folders'; + late final _StringsLibrariesTabsEn tabs = _StringsLibrariesTabsEn._(_root); + late final _StringsLibrariesGroupingsEn groupings = _StringsLibrariesGroupingsEn._(_root); } // Path: about class _StringsAboutEn { - _StringsAboutEn._(this._root); + _StringsAboutEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'About'; - String get openSourceLicenses => 'Open Source Licenses'; - String versionLabel({required Object version}) => 'Version ${version}'; - String get appDescription => 'A beautiful Plex client for Flutter'; - String get viewLicensesDescription => - 'View licenses of third-party libraries'; + // Translations + String get title => 'About'; + String get openSourceLicenses => 'Open Source Licenses'; + String versionLabel({required Object version}) => 'Version ${version}'; + String get appDescription => 'A beautiful Plex client for Flutter'; + String get viewLicensesDescription => 'View licenses of third-party libraries'; } // Path: serverSelection class _StringsServerSelectionEn { - _StringsServerSelectionEn._(this._root); + _StringsServerSelectionEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get connectingToServer => 'Connecting to server...'; - String get connectingToAllServers => 'Connecting to all servers...'; - String get connectToAllServers => 'Connect to All Servers'; - String get allServerConnectionsFailed => - 'Failed to connect to any servers. Please check your network and try again.'; - String foundServers({required Object count}) => 'Found ${count} server(s)'; - String get orSelectIndividually => 'Or select a server individually:'; - String get serverDebugCopied => 'Server debug data copied to clipboard'; - String get copyDebugData => 'Copy Debug Data'; - String get noServersFound => 'No servers found'; - String malformedServerData({required Object count}) => - 'Found ${count} server(s) with malformed data. No valid servers available.'; - String get incompleteServerInfo => - 'Some servers have incomplete information and were skipped. Please check your Plex.tv account.'; - String get incompleteConnectionInfo => - 'Server connection information is incomplete. Please try again.'; - String malformedServerInfo({required Object message}) => - 'Server information is malformed: ${message}'; - String get networkConnectionFailed => - 'Network connection failed. Please check your internet connection and try again.'; - String get authenticationFailed => - 'Authentication failed. Please sign in again.'; - String get plexServiceUnavailable => - 'Plex service unavailable. Please try again later.'; - String failedToLoadServers({required Object error}) => - 'Failed to load servers: ${error}'; + // Translations + String get connectingToServer => 'Connecting to server...'; + String get connectingToAllServers => 'Connecting to all servers...'; + String get connectToAllServers => 'Connect to All Servers'; + String get allServerConnectionsFailed => 'Failed to connect to any servers. Please check your network and try again.'; + String foundServers({required Object count}) => 'Found ${count} server(s)'; + String get orSelectIndividually => 'Or select a server individually:'; + String get serverDebugCopied => 'Server debug data copied to clipboard'; + String get copyDebugData => 'Copy Debug Data'; + String get noServersFound => 'No servers found'; + String malformedServerData({required Object count}) => 'Found ${count} server(s) with malformed data. No valid servers available.'; + String get incompleteServerInfo => 'Some servers have incomplete information and were skipped. Please check your Plex.tv account.'; + String get incompleteConnectionInfo => 'Server connection information is incomplete. Please try again.'; + String malformedServerInfo({required Object message}) => 'Server information is malformed: ${message}'; + String get networkConnectionFailed => 'Network connection failed. Please check your internet connection and try again.'; + String get authenticationFailed => 'Authentication failed. Please sign in again.'; + String get plexServiceUnavailable => 'Plex service unavailable. Please try again later.'; + String failedToLoadServers({required Object error}) => 'Failed to load servers: ${error}'; } // Path: hubDetail class _StringsHubDetailEn { - _StringsHubDetailEn._(this._root); + _StringsHubDetailEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Title'; - String get releaseYear => 'Release Year'; - String get dateAdded => 'Date Added'; - String get rating => 'Rating'; - String get noItemsFound => 'No items found'; + // Translations + String get title => 'Title'; + String get releaseYear => 'Release Year'; + String get dateAdded => 'Date Added'; + String get rating => 'Rating'; + String get noItemsFound => 'No items found'; } // Path: logs class _StringsLogsEn { - _StringsLogsEn._(this._root); + _StringsLogsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Logs'; - String get clearLogs => 'Clear Logs'; - String get copyLogs => 'Copy Logs'; - String get exportLogs => 'Export Logs'; - String get noLogsToShow => 'No logs to show'; - String get error => 'Error:'; - String get stackTrace => 'Stack Trace:'; + // Translations + String get title => 'Logs'; + String get clearLogs => 'Clear Logs'; + String get copyLogs => 'Copy Logs'; + String get exportLogs => 'Export Logs'; + String get noLogsToShow => 'No logs to show'; + String get error => 'Error:'; + String get stackTrace => 'Stack Trace:'; } // Path: licenses class _StringsLicensesEn { - _StringsLicensesEn._(this._root); + _StringsLicensesEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get relatedPackages => 'Related Packages'; - String get license => 'License'; - String licenseNumber({required Object number}) => 'License ${number}'; - String licensesCount({required Object count}) => '${count} licenses'; + // Translations + String get relatedPackages => 'Related Packages'; + String get license => 'License'; + String licenseNumber({required Object number}) => 'License ${number}'; + String licensesCount({required Object count}) => '${count} licenses'; } // Path: navigation class _StringsNavigationEn { - _StringsNavigationEn._(this._root); + _StringsNavigationEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get home => 'Home'; - String get search => 'Search'; - String get libraries => 'Libraries'; - String get settings => 'Settings'; + // Translations + String get home => 'Home'; + String get search => 'Search'; + String get libraries => 'Libraries'; + String get settings => 'Settings'; } // Path: collections class _StringsCollectionsEn { - _StringsCollectionsEn._(this._root); + _StringsCollectionsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Collections'; - String get collection => 'Collection'; - String get empty => 'Collection is empty'; - String get noItems => 'No items in this collection'; - String get unknownLibrarySection => 'Cannot delete: Unknown library section'; - String get deleteCollection => 'Delete Collection'; - String deleteConfirm({required Object title}) => - 'Are you sure you want to delete "${title}"? This action cannot be undone.'; - String get deleted => 'Collection deleted'; - String get deleteFailed => 'Failed to delete collection'; - String deleteFailedWithError({required Object error}) => - 'Failed to delete collection: ${error}'; - String failedToLoadItems({required Object error}) => - 'Failed to load collection items: ${error}'; - String get addTo => 'Add to collection'; - String get selectCollection => 'Select Collection'; - String get createNewCollection => 'Create New Collection'; - String get collectionName => 'Collection Name'; - String get enterCollectionName => 'Enter collection name'; - String get addedToCollection => 'Added to collection'; - String get errorAddingToCollection => 'Failed to add to collection'; - String get created => 'Collection created'; - String get removeFromCollection => 'Remove from collection'; - String removeFromCollectionConfirm({required Object title}) => - 'Remove "${title}" from this collection?'; - String get removedFromCollection => 'Removed from collection'; - String get removeFromCollectionFailed => 'Failed to remove from collection'; - String removeFromCollectionError({required Object error}) => - 'Error removing from collection: ${error}'; + // Translations + String get title => 'Collections'; + String get collection => 'Collection'; + String get empty => 'Collection is empty'; + String get noItems => 'No items in this collection'; + String get unknownLibrarySection => 'Cannot delete: Unknown library section'; + String get deleteCollection => 'Delete Collection'; + String deleteConfirm({required Object title}) => 'Are you sure you want to delete "${title}"? This action cannot be undone.'; + String get deleted => 'Collection deleted'; + String get deleteFailed => 'Failed to delete collection'; + String deleteFailedWithError({required Object error}) => 'Failed to delete collection: ${error}'; + String failedToLoadItems({required Object error}) => 'Failed to load collection items: ${error}'; + String get addTo => 'Add to collection'; + String get selectCollection => 'Select Collection'; + String get createNewCollection => 'Create New Collection'; + String get collectionName => 'Collection Name'; + String get enterCollectionName => 'Enter collection name'; + String get addedToCollection => 'Added to collection'; + String get errorAddingToCollection => 'Failed to add to collection'; + String get created => 'Collection created'; + String get removeFromCollection => 'Remove from collection'; + String removeFromCollectionConfirm({required Object title}) => 'Remove "${title}" from this collection?'; + String get removedFromCollection => 'Removed from collection'; + String get removeFromCollectionFailed => 'Failed to remove from collection'; + String removeFromCollectionError({required Object error}) => 'Error removing from collection: ${error}'; } // Path: playlists class _StringsPlaylistsEn { - _StringsPlaylistsEn._(this._root); + _StringsPlaylistsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Playlists'; - String get playlist => 'Playlist'; - String get noPlaylists => 'No playlists found'; - String get create => 'Create Playlist'; - String get newPlaylist => 'New Playlist'; - String get playlistName => 'Playlist Name'; - String get enterPlaylistName => 'Enter playlist name'; - String get edit => 'Edit Playlist'; - String get delete => 'Delete Playlist'; - String get addTo => 'Add to Playlist'; - String get addItems => 'Add Items'; - String get removeItem => 'Remove from Playlist'; - String get clearPlaylist => 'Clear Playlist'; - String get playAll => 'Play All'; - String get shuffle => 'Shuffle'; - String get smartPlaylist => 'Smart Playlist'; - String get regularPlaylist => 'Regular Playlist'; - String itemCount({required Object count}) => '${count} items'; - String get oneItem => '1 item'; - String get emptyPlaylist => 'This playlist is empty'; - String get deleteConfirm => 'Delete Playlist?'; - String deleteMessage({required Object name}) => - 'Are you sure you want to delete "${name}"?'; - String get created => 'Playlist created'; - String get updated => 'Playlist updated'; - String get deleted => 'Playlist deleted'; - String get itemAdded => 'Added to playlist'; - String get itemRemoved => 'Removed from playlist'; - String get selectPlaylist => 'Select Playlist'; - String get createNewPlaylist => 'Create New Playlist'; - String get errorCreating => 'Failed to create playlist'; - String get errorDeleting => 'Failed to delete playlist'; - String get errorLoading => 'Failed to load playlists'; - String get errorAdding => 'Failed to add to playlist'; - String get errorReordering => 'Failed to reorder playlist item'; - String get errorRemoving => 'Failed to remove from playlist'; + // Translations + String get title => 'Playlists'; + String get playlist => 'Playlist'; + String get noPlaylists => 'No playlists found'; + String get create => 'Create Playlist'; + String get newPlaylist => 'New Playlist'; + String get playlistName => 'Playlist Name'; + String get enterPlaylistName => 'Enter playlist name'; + String get edit => 'Edit Playlist'; + String get delete => 'Delete Playlist'; + String get addTo => 'Add to Playlist'; + String get addItems => 'Add Items'; + String get removeItem => 'Remove from Playlist'; + String get clearPlaylist => 'Clear Playlist'; + String get playAll => 'Play All'; + String get shuffle => 'Shuffle'; + String get smartPlaylist => 'Smart Playlist'; + String get regularPlaylist => 'Regular Playlist'; + String itemCount({required Object count}) => '${count} items'; + String get oneItem => '1 item'; + String get emptyPlaylist => 'This playlist is empty'; + String get deleteConfirm => 'Delete Playlist?'; + String deleteMessage({required Object name}) => 'Are you sure you want to delete "${name}"?'; + String get created => 'Playlist created'; + String get updated => 'Playlist updated'; + String get deleted => 'Playlist deleted'; + String get itemAdded => 'Added to playlist'; + String get itemRemoved => 'Removed from playlist'; + String get selectPlaylist => 'Select Playlist'; + String get createNewPlaylist => 'Create New Playlist'; + String get errorCreating => 'Failed to create playlist'; + String get errorDeleting => 'Failed to delete playlist'; + String get errorLoading => 'Failed to load playlists'; + String get errorAdding => 'Failed to add to playlist'; + String get errorReordering => 'Failed to reorder playlist item'; + String get errorRemoving => 'Failed to remove from playlist'; } // Path: libraries.tabs class _StringsLibrariesTabsEn { - _StringsLibrariesTabsEn._(this._root); + _StringsLibrariesTabsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get recommended => 'Recommended'; - String get browse => 'Browse'; - String get collections => 'Collections'; - String get playlists => 'Playlists'; + // Translations + String get recommended => 'Recommended'; + String get browse => 'Browse'; + String get collections => 'Collections'; + String get playlists => 'Playlists'; } // Path: libraries.groupings class _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsEn._(this._root); + _StringsLibrariesGroupingsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get all => 'All'; - String get movies => 'Movies'; - String get shows => 'TV Shows'; - String get seasons => 'Seasons'; - String get episodes => 'Episodes'; - String get folders => 'Folders'; + // Translations + String get all => 'All'; + String get movies => 'Movies'; + String get shows => 'TV Shows'; + String get seasons => 'Seasons'; + String get episodes => 'Episodes'; + String get folders => 'Folders'; } // Path: class _StringsDe implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsDe.build({ - Map? overrides, - PluralResolver? cardinalResolver, - PluralResolver? ordinalResolver, - }) : assert( - overrides == null, - 'Set "translation_overrides: true" in order to enable this feature.', - ), - $meta = TranslationMetadata( - locale: AppLocale.de, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsDe.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.de, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - @override - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); - @override - late final _StringsDe _root = this; // ignore: unused_field + @override late final _StringsDe _root = this; // ignore: unused_field - // Translations - @override - late final _StringsAppDe app = _StringsAppDe._(_root); - @override - late final _StringsAuthDe auth = _StringsAuthDe._(_root); - @override - late final _StringsCommonDe common = _StringsCommonDe._(_root); - @override - late final _StringsScreensDe screens = _StringsScreensDe._(_root); - @override - late final _StringsUpdateDe update = _StringsUpdateDe._(_root); - @override - late final _StringsSettingsDe settings = _StringsSettingsDe._(_root); - @override - late final _StringsSearchDe search = _StringsSearchDe._(_root); - @override - late final _StringsHotkeysDe hotkeys = _StringsHotkeysDe._(_root); - @override - late final _StringsPinEntryDe pinEntry = _StringsPinEntryDe._(_root); - @override - late final _StringsFileInfoDe fileInfo = _StringsFileInfoDe._(_root); - @override - late final _StringsMediaMenuDe mediaMenu = _StringsMediaMenuDe._(_root); - @override - late final _StringsAccessibilityDe accessibility = _StringsAccessibilityDe._( - _root, - ); - @override - late final _StringsTooltipsDe tooltips = _StringsTooltipsDe._(_root); - @override - late final _StringsVideoControlsDe videoControls = _StringsVideoControlsDe._( - _root, - ); - @override - late final _StringsUserStatusDe userStatus = _StringsUserStatusDe._(_root); - @override - late final _StringsMessagesDe messages = _StringsMessagesDe._(_root); - @override - late final _StringsProfileDe profile = _StringsProfileDe._(_root); - @override - late final _StringsSubtitlingStylingDe subtitlingStyling = - _StringsSubtitlingStylingDe._(_root); - @override - late final _StringsDialogDe dialog = _StringsDialogDe._(_root); - @override - late final _StringsDiscoverDe discover = _StringsDiscoverDe._(_root); - @override - late final _StringsErrorsDe errors = _StringsErrorsDe._(_root); - @override - late final _StringsLibrariesDe libraries = _StringsLibrariesDe._(_root); - @override - late final _StringsAboutDe about = _StringsAboutDe._(_root); - @override - late final _StringsServerSelectionDe serverSelection = - _StringsServerSelectionDe._(_root); - @override - late final _StringsHubDetailDe hubDetail = _StringsHubDetailDe._(_root); - @override - late final _StringsLogsDe logs = _StringsLogsDe._(_root); - @override - late final _StringsLicensesDe licenses = _StringsLicensesDe._(_root); - @override - late final _StringsNavigationDe navigation = _StringsNavigationDe._(_root); - @override - late final _StringsPlaylistsDe playlists = _StringsPlaylistsDe._(_root); - @override - late final _StringsCollectionsDe collections = _StringsCollectionsDe._(_root); + // Translations + @override late final _StringsAppDe app = _StringsAppDe._(_root); + @override late final _StringsAuthDe auth = _StringsAuthDe._(_root); + @override late final _StringsCommonDe common = _StringsCommonDe._(_root); + @override late final _StringsScreensDe screens = _StringsScreensDe._(_root); + @override late final _StringsUpdateDe update = _StringsUpdateDe._(_root); + @override late final _StringsSettingsDe settings = _StringsSettingsDe._(_root); + @override late final _StringsSearchDe search = _StringsSearchDe._(_root); + @override late final _StringsHotkeysDe hotkeys = _StringsHotkeysDe._(_root); + @override late final _StringsPinEntryDe pinEntry = _StringsPinEntryDe._(_root); + @override late final _StringsFileInfoDe fileInfo = _StringsFileInfoDe._(_root); + @override late final _StringsMediaMenuDe mediaMenu = _StringsMediaMenuDe._(_root); + @override late final _StringsAccessibilityDe accessibility = _StringsAccessibilityDe._(_root); + @override late final _StringsTooltipsDe tooltips = _StringsTooltipsDe._(_root); + @override late final _StringsVideoControlsDe videoControls = _StringsVideoControlsDe._(_root); + @override late final _StringsUserStatusDe userStatus = _StringsUserStatusDe._(_root); + @override late final _StringsMessagesDe messages = _StringsMessagesDe._(_root); + @override late final _StringsProfileDe profile = _StringsProfileDe._(_root); + @override late final _StringsSubtitlingStylingDe subtitlingStyling = _StringsSubtitlingStylingDe._(_root); + @override late final _StringsDialogDe dialog = _StringsDialogDe._(_root); + @override late final _StringsDiscoverDe discover = _StringsDiscoverDe._(_root); + @override late final _StringsErrorsDe errors = _StringsErrorsDe._(_root); + @override late final _StringsLibrariesDe libraries = _StringsLibrariesDe._(_root); + @override late final _StringsAboutDe about = _StringsAboutDe._(_root); + @override late final _StringsServerSelectionDe serverSelection = _StringsServerSelectionDe._(_root); + @override late final _StringsHubDetailDe hubDetail = _StringsHubDetailDe._(_root); + @override late final _StringsLogsDe logs = _StringsLogsDe._(_root); + @override late final _StringsLicensesDe licenses = _StringsLicensesDe._(_root); + @override late final _StringsNavigationDe navigation = _StringsNavigationDe._(_root); + @override late final _StringsPlaylistsDe playlists = _StringsPlaylistsDe._(_root); + @override late final _StringsCollectionsDe collections = _StringsCollectionsDe._(_root); } // Path: app class _StringsAppDe implements _StringsAppEn { - _StringsAppDe._(this._root); + _StringsAppDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Plezy'; - @override - String get loading => 'Lädt...'; + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Lädt...'; } // Path: auth class _StringsAuthDe implements _StringsAuthEn { - _StringsAuthDe._(this._root); + _StringsAuthDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get signInWithPlex => 'Mit Plex anmelden'; - @override - String get showQRCode => 'QR-Code anzeigen'; - @override - String get cancel => 'Abbrechen'; - @override - String get authenticate => 'Authentifizieren'; - @override - String get retry => 'Erneut versuchen'; - @override - String get debugEnterToken => 'Debug: Plex-Token eingeben'; - @override - String get plexTokenLabel => 'Plex-Auth-Token'; - @override - String get plexTokenHint => 'Plex.tv-Token eingeben'; - @override - String get authenticationTimeout => - 'Authentifizierung abgelaufen. Bitte erneut versuchen.'; - @override - String get scanQRCodeInstruction => - 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.'; - @override - String get waitingForAuth => - 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.'; + // Translations + @override String get signInWithPlex => 'Mit Plex anmelden'; + @override String get showQRCode => 'QR-Code anzeigen'; + @override String get cancel => 'Abbrechen'; + @override String get authenticate => 'Authentifizieren'; + @override String get retry => 'Erneut versuchen'; + @override String get debugEnterToken => 'Debug: Plex-Token eingeben'; + @override String get plexTokenLabel => 'Plex-Auth-Token'; + @override String get plexTokenHint => 'Plex.tv-Token eingeben'; + @override String get authenticationTimeout => 'Authentifizierung abgelaufen. Bitte erneut versuchen.'; + @override String get scanQRCodeInstruction => 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.'; + @override String get waitingForAuth => 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.'; } // Path: common class _StringsCommonDe implements _StringsCommonEn { - _StringsCommonDe._(this._root); + _StringsCommonDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get cancel => 'Abbrechen'; - @override - String get save => 'Speichern'; - @override - String get close => 'Schließen'; - @override - String get clear => 'Leeren'; - @override - String get reset => 'Zurücksetzen'; - @override - String get later => 'Später'; - @override - String get submit => 'Senden'; - @override - String get confirm => 'Bestätigen'; - @override - String get retry => 'Erneut versuchen'; - @override - String get playNow => 'Jetzt abspielen'; - @override - String get logout => 'Abmelden'; - @override - String get online => 'Online'; - @override - String get offline => 'Offline'; - @override - String get owned => 'Besitzer'; - @override - String get shared => 'Geteilt'; - @override - String get current => 'AKTUELL'; - @override - String get unknown => 'Unbekannt'; - @override - String get refresh => 'Aktualisieren'; - @override - String get yes => 'Ja'; - @override - String get no => 'Nein'; - @override - String get server => 'Server'; - @override - String get delete => 'Löschen'; - @override - String get shuffle => 'Zufall'; - @override - String get addTo => 'Hinzufügen zu...'; + // Translations + @override String get cancel => 'Abbrechen'; + @override String get save => 'Speichern'; + @override String get close => 'Schließen'; + @override String get clear => 'Leeren'; + @override String get reset => 'Zurücksetzen'; + @override String get later => 'Später'; + @override String get submit => 'Senden'; + @override String get confirm => 'Bestätigen'; + @override String get retry => 'Erneut versuchen'; + @override String get playNow => 'Jetzt abspielen'; + @override String get logout => 'Abmelden'; + @override String get online => 'Online'; + @override String get offline => 'Offline'; + @override String get owned => 'Besitzer'; + @override String get shared => 'Geteilt'; + @override String get current => 'AKTUELL'; + @override String get unknown => 'Unbekannt'; + @override String get refresh => 'Aktualisieren'; + @override String get yes => 'Ja'; + @override String get no => 'Nein'; + @override String get server => 'Server'; + @override String get delete => 'Löschen'; + @override String get shuffle => 'Zufall'; + @override String get addTo => 'Hinzufügen zu...'; } // Path: screens class _StringsScreensDe implements _StringsScreensEn { - _StringsScreensDe._(this._root); + _StringsScreensDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get licenses => 'Lizenzen'; - @override - String get selectServer => 'Server auswählen'; - @override - String get switchProfile => 'Profil wechseln'; - @override - String get subtitleStyling => 'Untertitel-Stil'; - @override - String get search => 'Suche'; - @override - String get logs => 'Protokolle'; + // Translations + @override String get licenses => 'Lizenzen'; + @override String get selectServer => 'Server auswählen'; + @override String get switchProfile => 'Profil wechseln'; + @override String get subtitleStyling => 'Untertitel-Stil'; + @override String get search => 'Suche'; + @override String get logs => 'Protokolle'; } // Path: update class _StringsUpdateDe implements _StringsUpdateEn { - _StringsUpdateDe._(this._root); + _StringsUpdateDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get available => 'Update verfügbar'; - @override - String versionAvailable({required Object version}) => - 'Version ${version} ist verfügbar'; - @override - String currentVersion({required Object version}) => 'Aktuell: ${version}'; - @override - String get skipVersion => 'Diese Version überspringen'; - @override - String get viewRelease => 'Release anzeigen'; - @override - String get latestVersion => 'Aktuellste Version installiert'; - @override - String get checkFailed => 'Fehler bei der Updateprüfung'; + // Translations + @override String get available => 'Update verfügbar'; + @override String versionAvailable({required Object version}) => 'Version ${version} ist verfügbar'; + @override String currentVersion({required Object version}) => 'Aktuell: ${version}'; + @override String get skipVersion => 'Diese Version überspringen'; + @override String get viewRelease => 'Release anzeigen'; + @override String get latestVersion => 'Aktuellste Version installiert'; + @override String get checkFailed => 'Fehler bei der Updateprüfung'; } // Path: settings class _StringsSettingsDe implements _StringsSettingsEn { - _StringsSettingsDe._(this._root); + _StringsSettingsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Einstellungen'; - @override - String get language => 'Sprache'; - @override - String get theme => 'Design'; - @override - String get appearance => 'Darstellung'; - @override - String get videoPlayback => 'Videowiedergabe'; - @override - String get shufflePlay => 'Zufallswiedergabe'; - @override - String get advanced => 'Erweitert'; - @override - String get useSeasonPostersDescription => - 'Staffelposter statt Serienposter für Episoden anzeigen'; - @override - String get showHeroSectionDescription => - 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; - @override - String get secondsLabel => 'Sekunden'; - @override - String get minutesLabel => 'Minuten'; - @override - String get secondsShort => 's'; - @override - String get minutesShort => 'm'; - @override - String durationHint({required Object min, required Object max}) => - 'Dauer eingeben (${min}-${max})'; - @override - String get systemTheme => 'System'; - @override - String get systemThemeDescription => 'Systemeinstellungen folgen'; - @override - String get lightTheme => 'Hell'; - @override - String get darkTheme => 'Dunkel'; - @override - String get libraryDensity => 'Mediathekdichte'; - @override - String get compact => 'Kompakt'; - @override - String get compactDescription => 'Kleinere Karten, mehr Elemente sichtbar'; - @override - String get normal => 'Normal'; - @override - String get normalDescription => 'Standardgröße'; - @override - String get comfortable => 'Großzügig'; - @override - String get comfortableDescription => - 'Größere Karten, weniger Elemente sichtbar'; - @override - String get viewMode => 'Ansichtsmodus'; - @override - String get gridView => 'Raster'; - @override - String get gridViewDescription => 'Elemente im Raster anzeigen'; - @override - String get listView => 'Liste'; - @override - String get listViewDescription => 'Elemente in Listenansicht anzeigen'; - @override - String get useSeasonPosters => 'Staffelposter verwenden'; - @override - String get showHeroSection => 'Hero-Bereich anzeigen'; - @override - String get hardwareDecoding => 'Hardware-Decodierung'; - @override - String get hardwareDecodingDescription => - 'Hardwarebeschleunigung verwenden, sofern verfügbar'; - @override - String get bufferSize => 'Puffergröße'; - @override - String bufferSizeMB({required Object size}) => '${size}MB'; - @override - String get subtitleStyling => 'Untertitel-Stil'; - @override - String get subtitleStylingDescription => 'Aussehen von Untertiteln anpassen'; - @override - String get smallSkipDuration => 'Kleine Sprungdauer'; - @override - String get largeSkipDuration => 'Große Sprungdauer'; - @override - String secondsUnit({required Object seconds}) => '${seconds} Sekunden'; - @override - String get defaultSleepTimer => 'Standard-Sleep-Timer'; - @override - String minutesUnit({required Object minutes}) => '${minutes} Minuten'; - @override - String get rememberTrackSelections => 'Spurauswahl pro Serie/Film merken'; - @override - String get rememberTrackSelectionsDescription => - 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; - @override - String get unwatchedOnly => 'Nur ungesehene'; - @override - String get unwatchedOnlyDescription => - 'Nur ungesehene Episoden in die Shuffle-Warteschlange aufnehmen'; - @override - String get shuffleOrderNavigation => 'Navigation der Shuffle-Reihenfolge'; - @override - String get shuffleOrderNavigationDescription => - 'Weiter/Zurück folgt der zufälligen Reihenfolge'; - @override - String get loopShuffleQueue => 'Shuffle-Warteschlange wiederholen'; - @override - String get loopShuffleQueueDescription => - 'Warteschlange neu starten, wenn das Ende erreicht ist'; - @override - String get videoPlayerControls => 'Videoplayer-Steuerung'; - @override - String get keyboardShortcuts => 'Tastenkürzel'; - @override - String get keyboardShortcutsDescription => 'Tastenkürzel anpassen'; - @override - String get debugLogging => 'Debug-Protokollierung'; - @override - String get debugLoggingDescription => - 'Detaillierte Protokolle zur Fehleranalyse aktivieren'; - @override - String get viewLogs => 'Protokolle anzeigen'; - @override - String get viewLogsDescription => 'App-Protokolle anzeigen'; - @override - String get clearCache => 'Cache löschen'; - @override - String get clearCacheDescription => - 'Löscht alle zwischengespeicherten Bilder und Daten. Die App kann danach langsamer laden.'; - @override - String get clearCacheSuccess => 'Cache erfolgreich gelöscht'; - @override - String get resetSettings => 'Einstellungen zurücksetzen'; - @override - String get resetSettingsDescription => - 'Alle Einstellungen auf Standard zurücksetzen. Dies kann nicht rückgängig gemacht werden.'; - @override - String get resetSettingsSuccess => 'Einstellungen erfolgreich zurückgesetzt'; - @override - String get shortcutsReset => 'Tastenkürzel auf Standard zurückgesetzt'; - @override - String get about => 'Über'; - @override - String get aboutDescription => 'App-Informationen und Lizenzen'; - @override - String get updates => 'Updates'; - @override - String get updateAvailable => 'Update verfügbar'; - @override - String get checkForUpdates => 'Nach Updates suchen'; - @override - String get validationErrorEnterNumber => 'Bitte eine gültige Zahl eingeben'; - @override - String validationErrorDuration({ - required Object min, - required Object max, - required Object unit, - }) => 'Dauer muss zwischen ${min} und ${max} ${unit} liegen'; - @override - String shortcutAlreadyAssigned({required Object action}) => - 'Tastenkürzel bereits zugewiesen an ${action}'; - @override - String shortcutUpdated({required Object action}) => - 'Tastenkürzel aktualisiert für ${action}'; + // Translations + @override String get title => 'Einstellungen'; + @override String get language => 'Sprache'; + @override String get theme => 'Design'; + @override String get appearance => 'Darstellung'; + @override String get videoPlayback => 'Videowiedergabe'; + @override String get shufflePlay => 'Zufallswiedergabe'; + @override String get advanced => 'Erweitert'; + @override String get useSeasonPostersDescription => 'Staffelposter statt Serienposter für Episoden anzeigen'; + @override String get showHeroSectionDescription => 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; + @override String get secondsLabel => 'Sekunden'; + @override String get minutesLabel => 'Minuten'; + @override String get secondsShort => 's'; + @override String get minutesShort => 'm'; + @override String durationHint({required Object min, required Object max}) => 'Dauer eingeben (${min}-${max})'; + @override String get systemTheme => 'System'; + @override String get systemThemeDescription => 'Systemeinstellungen folgen'; + @override String get lightTheme => 'Hell'; + @override String get darkTheme => 'Dunkel'; + @override String get libraryDensity => 'Mediathekdichte'; + @override String get compact => 'Kompakt'; + @override String get compactDescription => 'Kleinere Karten, mehr Elemente sichtbar'; + @override String get normal => 'Normal'; + @override String get normalDescription => 'Standardgröße'; + @override String get comfortable => 'Großzügig'; + @override String get comfortableDescription => 'Größere Karten, weniger Elemente sichtbar'; + @override String get viewMode => 'Ansichtsmodus'; + @override String get gridView => 'Raster'; + @override String get gridViewDescription => 'Elemente im Raster anzeigen'; + @override String get listView => 'Liste'; + @override String get listViewDescription => 'Elemente in Listenansicht anzeigen'; + @override String get useSeasonPosters => 'Staffelposter verwenden'; + @override String get showHeroSection => 'Hero-Bereich anzeigen'; + @override String get hardwareDecoding => 'Hardware-Decodierung'; + @override String get hardwareDecodingDescription => 'Hardwarebeschleunigung verwenden, sofern verfügbar'; + @override String get bufferSize => 'Puffergröße'; + @override String bufferSizeMB({required Object size}) => '${size}MB'; + @override String get subtitleStyling => 'Untertitel-Stil'; + @override String get subtitleStylingDescription => 'Aussehen von Untertiteln anpassen'; + @override String get smallSkipDuration => 'Kleine Sprungdauer'; + @override String get largeSkipDuration => 'Große Sprungdauer'; + @override String secondsUnit({required Object seconds}) => '${seconds} Sekunden'; + @override String get defaultSleepTimer => 'Standard-Sleep-Timer'; + @override String minutesUnit({required Object minutes}) => '${minutes} Minuten'; + @override String get rememberTrackSelections => 'Spurauswahl pro Serie/Film merken'; + @override String get rememberTrackSelectionsDescription => 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; + @override String get unwatchedOnly => 'Nur ungesehene'; + @override String get unwatchedOnlyDescription => 'Nur ungesehene Episoden in die Shuffle-Warteschlange aufnehmen'; + @override String get shuffleOrderNavigation => 'Navigation der Shuffle-Reihenfolge'; + @override String get shuffleOrderNavigationDescription => 'Weiter/Zurück folgt der zufälligen Reihenfolge'; + @override String get loopShuffleQueue => 'Shuffle-Warteschlange wiederholen'; + @override String get loopShuffleQueueDescription => 'Warteschlange neu starten, wenn das Ende erreicht ist'; + @override String get videoPlayerControls => 'Videoplayer-Steuerung'; + @override String get keyboardShortcuts => 'Tastenkürzel'; + @override String get keyboardShortcutsDescription => 'Tastenkürzel anpassen'; + @override String get debugLogging => 'Debug-Protokollierung'; + @override String get debugLoggingDescription => 'Detaillierte Protokolle zur Fehleranalyse aktivieren'; + @override String get viewLogs => 'Protokolle anzeigen'; + @override String get viewLogsDescription => 'App-Protokolle anzeigen'; + @override String get clearCache => 'Cache löschen'; + @override String get clearCacheDescription => 'Löscht alle zwischengespeicherten Bilder und Daten. Die App kann danach langsamer laden.'; + @override String get clearCacheSuccess => 'Cache erfolgreich gelöscht'; + @override String get resetSettings => 'Einstellungen zurücksetzen'; + @override String get resetSettingsDescription => 'Alle Einstellungen auf Standard zurücksetzen. Dies kann nicht rückgängig gemacht werden.'; + @override String get resetSettingsSuccess => 'Einstellungen erfolgreich zurückgesetzt'; + @override String get shortcutsReset => 'Tastenkürzel auf Standard zurückgesetzt'; + @override String get about => 'Über'; + @override String get aboutDescription => 'App-Informationen und Lizenzen'; + @override String get updates => 'Updates'; + @override String get updateAvailable => 'Update verfügbar'; + @override String get checkForUpdates => 'Nach Updates suchen'; + @override String get validationErrorEnterNumber => 'Bitte eine gültige Zahl eingeben'; + @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Dauer muss zwischen ${min} und ${max} ${unit} liegen'; + @override String shortcutAlreadyAssigned({required Object action}) => 'Tastenkürzel bereits zugewiesen an ${action}'; + @override String shortcutUpdated({required Object action}) => 'Tastenkürzel aktualisiert für ${action}'; + @override String get autoSkip => 'Automatisches Überspringen'; + @override String get autoSkipIntro => 'Intro automatisch überspringen'; + @override String get autoSkipIntroDescription => 'Intro-Marker nach wenigen Sekunden automatisch überspringen'; + @override String get autoSkipCredits => 'Abspann automatisch überspringen'; + @override String get autoSkipCreditsDescription => 'Abspann automatisch überspringen und nächste Episode abspielen'; + @override String get autoSkipDelay => 'Verzögerung für automatisches Überspringen'; + @override String autoSkipDelayDescription({required Object seconds}) => '${seconds} Sekunden vor dem automatischen Überspringen warten'; } // Path: search class _StringsSearchDe implements _StringsSearchEn { - _StringsSearchDe._(this._root); + _StringsSearchDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get hint => 'Filme, Serien, Musik suchen...'; - @override - String get tryDifferentTerm => 'Anderen Suchbegriff versuchen'; - @override - String get searchYourMedia => 'In den eigenen Medien suchen'; - @override - String get enterTitleActorOrKeyword => - 'Titel, Schauspieler oder Stichwort eingeben'; + // Translations + @override String get hint => 'Filme, Serien, Musik suchen...'; + @override String get tryDifferentTerm => 'Anderen Suchbegriff versuchen'; + @override String get searchYourMedia => 'In den eigenen Medien suchen'; + @override String get enterTitleActorOrKeyword => 'Titel, Schauspieler oder Stichwort eingeben'; } // Path: hotkeys class _StringsHotkeysDe implements _StringsHotkeysEn { - _StringsHotkeysDe._(this._root); + _StringsHotkeysDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String setShortcutFor({required Object actionName}) => - 'Tastenkürzel festlegen für ${actionName}'; - @override - String get clearShortcut => 'Kürzel löschen'; + // Translations + @override String setShortcutFor({required Object actionName}) => 'Tastenkürzel festlegen für ${actionName}'; + @override String get clearShortcut => 'Kürzel löschen'; } // Path: pinEntry class _StringsPinEntryDe implements _StringsPinEntryEn { - _StringsPinEntryDe._(this._root); + _StringsPinEntryDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get enterPin => 'PIN eingeben'; - @override - String get showPin => 'PIN anzeigen'; - @override - String get hidePin => 'PIN verbergen'; + // Translations + @override String get enterPin => 'PIN eingeben'; + @override String get showPin => 'PIN anzeigen'; + @override String get hidePin => 'PIN verbergen'; } // Path: fileInfo class _StringsFileInfoDe implements _StringsFileInfoEn { - _StringsFileInfoDe._(this._root); + _StringsFileInfoDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Dateiinfo'; - @override - String get video => 'Video'; - @override - String get audio => 'Audio'; - @override - String get file => 'Datei'; - @override - String get advanced => 'Erweitert'; - @override - String get codec => 'Codec'; - @override - String get resolution => 'Auflösung'; - @override - String get bitrate => 'Bitrate'; - @override - String get frameRate => 'Bildrate'; - @override - String get aspectRatio => 'Seitenverhältnis'; - @override - String get profile => 'Profil'; - @override - String get bitDepth => 'Farbtiefe'; - @override - String get colorSpace => 'Farbraum'; - @override - String get colorRange => 'Farbbereich'; - @override - String get colorPrimaries => 'Primärfarben'; - @override - String get chromaSubsampling => 'Chroma-Subsampling'; - @override - String get channels => 'Kanäle'; - @override - String get path => 'Pfad'; - @override - String get size => 'Größe'; - @override - String get container => 'Container'; - @override - String get duration => 'Dauer'; - @override - String get optimizedForStreaming => 'Für Streaming optimiert'; - @override - String get has64bitOffsets => '64-Bit-Offsets'; + // Translations + @override String get title => 'Dateiinfo'; + @override String get video => 'Video'; + @override String get audio => 'Audio'; + @override String get file => 'Datei'; + @override String get advanced => 'Erweitert'; + @override String get codec => 'Codec'; + @override String get resolution => 'Auflösung'; + @override String get bitrate => 'Bitrate'; + @override String get frameRate => 'Bildrate'; + @override String get aspectRatio => 'Seitenverhältnis'; + @override String get profile => 'Profil'; + @override String get bitDepth => 'Farbtiefe'; + @override String get colorSpace => 'Farbraum'; + @override String get colorRange => 'Farbbereich'; + @override String get colorPrimaries => 'Primärfarben'; + @override String get chromaSubsampling => 'Chroma-Subsampling'; + @override String get channels => 'Kanäle'; + @override String get path => 'Pfad'; + @override String get size => 'Größe'; + @override String get container => 'Container'; + @override String get duration => 'Dauer'; + @override String get optimizedForStreaming => 'Für Streaming optimiert'; + @override String get has64bitOffsets => '64-Bit-Offsets'; } // Path: mediaMenu class _StringsMediaMenuDe implements _StringsMediaMenuEn { - _StringsMediaMenuDe._(this._root); + _StringsMediaMenuDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get markAsWatched => 'Als gesehen markieren'; - @override - String get markAsUnwatched => 'Als ungesehen markieren'; - @override - String get removeFromContinueWatching => 'Aus ‚Weiterschauen‘ entfernen'; - @override - String get goToSeries => 'Zur Serie'; - @override - String get goToSeason => 'Zur Staffel'; - @override - String get shufflePlay => 'Zufallswiedergabe'; - @override - String get fileInfo => 'Dateiinfo'; + // Translations + @override String get markAsWatched => 'Als gesehen markieren'; + @override String get markAsUnwatched => 'Als ungesehen markieren'; + @override String get removeFromContinueWatching => 'Aus ‚Weiterschauen‘ entfernen'; + @override String get goToSeries => 'Zur Serie'; + @override String get goToSeason => 'Zur Staffel'; + @override String get shufflePlay => 'Zufallswiedergabe'; + @override String get fileInfo => 'Dateiinfo'; } // Path: accessibility class _StringsAccessibilityDe implements _StringsAccessibilityEn { - _StringsAccessibilityDe._(this._root); + _StringsAccessibilityDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String mediaCardMovie({required Object title}) => '${title}, Film'; - @override - String mediaCardShow({required Object title}) => '${title}, Serie'; - @override - String mediaCardEpisode({ - required Object title, - required Object episodeInfo, - }) => '${title}, ${episodeInfo}'; - @override - String mediaCardSeason({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - @override - String get mediaCardWatched => 'angesehen'; - @override - String mediaCardPartiallyWatched({required Object percent}) => - '${percent} Prozent angesehen'; - @override - String get mediaCardUnwatched => 'ungeschaut'; - @override - String get tapToPlay => 'Zum Abspielen tippen'; + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, Film'; + @override String mediaCardShow({required Object title}) => '${title}, Serie'; + @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + @override String get mediaCardWatched => 'angesehen'; + @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} Prozent angesehen'; + @override String get mediaCardUnwatched => 'ungeschaut'; + @override String get tapToPlay => 'Zum Abspielen tippen'; } // Path: tooltips class _StringsTooltipsDe implements _StringsTooltipsEn { - _StringsTooltipsDe._(this._root); + _StringsTooltipsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get shufflePlay => 'Zufallswiedergabe'; - @override - String get markAsWatched => 'Als gesehen markieren'; - @override - String get markAsUnwatched => 'Als ungesehen markieren'; + // Translations + @override String get shufflePlay => 'Zufallswiedergabe'; + @override String get markAsWatched => 'Als gesehen markieren'; + @override String get markAsUnwatched => 'Als ungesehen markieren'; } // Path: videoControls class _StringsVideoControlsDe implements _StringsVideoControlsEn { - _StringsVideoControlsDe._(this._root); + _StringsVideoControlsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get audioLabel => 'Audio'; - @override - String get subtitlesLabel => 'Untertitel'; - @override - String get resetToZero => 'Auf 0 ms zurücksetzen'; - @override - String addTime({required Object amount, required Object unit}) => - '+${amount}${unit}'; - @override - String minusTime({required Object amount, required Object unit}) => - '-${amount}${unit}'; - @override - String playsLater({required Object label}) => '${label} spielt später'; - @override - String playsEarlier({required Object label}) => '${label} spielt früher'; - @override - String get noOffset => 'Kein Offset'; - @override - String get letterbox => 'Letterbox'; - @override - String get fillScreen => 'Bild füllen'; - @override - String get stretch => 'Strecken'; - @override - String get lockRotation => 'Rotation sperren'; - @override - String get unlockRotation => 'Rotation entsperren'; - @override - String get sleepTimer => 'Schlaftimer'; - @override - String get timerActive => 'Schlaftimer aktiv'; - @override - String playbackWillPauseIn({required Object duration}) => - 'Wiedergabe wird in ${duration} pausiert'; - @override - String get sleepTimerCompleted => - 'Schlaftimer abgelaufen – Wiedergabe pausiert'; - @override - String get playButton => 'Wiedergeben'; - @override - String get pauseButton => 'Pause'; - @override - String seekBackwardButton({required Object seconds}) => - '${seconds} Sekunden zurück'; - @override - String seekForwardButton({required Object seconds}) => - '${seconds} Sekunden vor'; - @override - String get previousButton => 'Vorherige Episode'; - @override - String get nextButton => 'Nächste Episode'; - @override - String get previousChapterButton => 'Vorheriges Kapitel'; - @override - String get nextChapterButton => 'Nächstes Kapitel'; - @override - String get volumeButton => 'Lautstärke'; - @override - String get muteButton => 'Stumm schalten'; - @override - String get unmuteButton => 'Stummschaltung aufheben'; - @override - String get settingsButton => 'Videoeinstellungen'; - @override - String get audioTrackButton => 'Tonspuren'; - @override - String get subtitlesButton => 'Untertitel'; - @override - String get chaptersButton => 'Kapitel'; - @override - String get versionsButton => 'Videoversionen'; - @override - String get aspectRatioButton => 'Seitenverhältnis'; - @override - String get fullscreenButton => 'Vollbild aktivieren'; - @override - String get exitFullscreenButton => 'Vollbild verlassen'; - @override - String get rotationLockButton => 'Dreh­sperre'; - @override - String get timelineSlider => 'Video-Zeitleiste'; - @override - String get volumeSlider => 'Lautstärkepegel'; - @override - String get backButton => 'Zurück'; + // Translations + @override String get audioLabel => 'Audio'; + @override String get subtitlesLabel => 'Untertitel'; + @override String get resetToZero => 'Auf 0 ms zurücksetzen'; + @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + @override String playsLater({required Object label}) => '${label} spielt später'; + @override String playsEarlier({required Object label}) => '${label} spielt früher'; + @override String get noOffset => 'Kein Offset'; + @override String get letterbox => 'Letterbox'; + @override String get fillScreen => 'Bild füllen'; + @override String get stretch => 'Strecken'; + @override String get lockRotation => 'Rotation sperren'; + @override String get unlockRotation => 'Rotation entsperren'; + @override String get sleepTimer => 'Schlaftimer'; + @override String get timerActive => 'Schlaftimer aktiv'; + @override String playbackWillPauseIn({required Object duration}) => 'Wiedergabe wird in ${duration} pausiert'; + @override String get sleepTimerCompleted => 'Schlaftimer abgelaufen – Wiedergabe pausiert'; + @override String get playButton => 'Wiedergeben'; + @override String get pauseButton => 'Pause'; + @override String seekBackwardButton({required Object seconds}) => '${seconds} Sekunden zurück'; + @override String seekForwardButton({required Object seconds}) => '${seconds} Sekunden vor'; + @override String get previousButton => 'Vorherige Episode'; + @override String get nextButton => 'Nächste Episode'; + @override String get previousChapterButton => 'Vorheriges Kapitel'; + @override String get nextChapterButton => 'Nächstes Kapitel'; + @override String get volumeButton => 'Lautstärke'; + @override String get muteButton => 'Stumm schalten'; + @override String get unmuteButton => 'Stummschaltung aufheben'; + @override String get settingsButton => 'Videoeinstellungen'; + @override String get audioTrackButton => 'Tonspuren'; + @override String get subtitlesButton => 'Untertitel'; + @override String get chaptersButton => 'Kapitel'; + @override String get versionsButton => 'Videoversionen'; + @override String get aspectRatioButton => 'Seitenverhältnis'; + @override String get fullscreenButton => 'Vollbild aktivieren'; + @override String get exitFullscreenButton => 'Vollbild verlassen'; + @override String get rotationLockButton => 'Dreh­sperre'; + @override String get timelineSlider => 'Video-Zeitleiste'; + @override String get volumeSlider => 'Lautstärkepegel'; + @override String get backButton => 'Zurück'; } // Path: userStatus class _StringsUserStatusDe implements _StringsUserStatusEn { - _StringsUserStatusDe._(this._root); + _StringsUserStatusDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get admin => 'Eigentümer'; - @override - String get restricted => 'Eingeschränkt'; - @override - String get protected => 'Geschützt'; - @override - String get current => 'AKTUELL'; + // Translations + @override String get admin => 'Eigentümer'; + @override String get restricted => 'Eingeschränkt'; + @override String get protected => 'Geschützt'; + @override String get current => 'AKTUELL'; } // Path: messages class _StringsMessagesDe implements _StringsMessagesEn { - _StringsMessagesDe._(this._root); + _StringsMessagesDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get markedAsWatched => 'Als gesehen markiert'; - @override - String get markedAsUnwatched => 'Als ungesehen markiert'; - @override - String get removedFromContinueWatching => 'Aus ‚Weiterschauen‘ entfernt'; - @override - String errorLoading({required Object error}) => 'Fehler: ${error}'; - @override - String get fileInfoNotAvailable => 'Dateiinfo nicht verfügbar'; - @override - String errorLoadingFileInfo({required Object error}) => - 'Fehler beim Laden der Dateiinfo: ${error}'; - @override - String get errorLoadingSeries => 'Fehler beim Laden der Serie'; - @override - String get errorLoadingSeason => 'Fehler beim Laden der Staffel'; - @override - String get musicNotSupported => 'Musikwiedergabe wird noch nicht unterstützt'; - @override - String get logsCleared => 'Protokolle gelöscht'; - @override - String get logsCopied => 'Protokolle in Zwischenablage kopiert'; - @override - String get noLogsAvailable => 'Keine Protokolle verfügbar'; - @override - String libraryScanning({required Object title}) => 'Scanne „${title}“...'; - @override - String libraryScanStarted({required Object title}) => - 'Mediathekscan gestartet für „${title}“'; - @override - String libraryScanFailed({required Object error}) => - 'Fehler beim Scannen der Mediathek: ${error}'; - @override - String metadataRefreshing({required Object title}) => - 'Metadaten werden aktualisiert für „${title}“...'; - @override - String metadataRefreshStarted({required Object title}) => - 'Metadaten-Aktualisierung gestartet für „${title}“'; - @override - String metadataRefreshFailed({required Object error}) => - 'Metadaten konnten nicht aktualisiert werden: ${error}'; - @override - String get noPlexToken => 'Kein Plex-Token gefunden. Bitte erneut anmelden.'; - @override - String get logoutConfirm => 'Abmeldung wirklich durchführen?'; - @override - String get noSeasonsFound => 'Keine Staffeln gefunden'; - @override - String get noEpisodesFound => 'Keine Episoden in der ersten Staffel gefunden'; - @override - String get noEpisodesFoundGeneral => 'Keine Episoden gefunden'; - @override - String get noResultsFound => 'Keine Ergebnisse gefunden'; - @override - String sleepTimerSet({required Object label}) => - 'Sleep-Timer gesetzt auf ${label}'; - @override - String failedToSwitchProfile({required Object displayName}) => - 'Profilwechsel zu ${displayName} fehlgeschlagen'; - @override - String get noItemsAvailable => 'Keine Elemente verfügbar'; - @override - String get failedToCreatePlayQueue => - 'Wiedergabewarteschlange konnte nicht erstellt werden'; - @override - String get failedToCreatePlayQueueNoItems => - 'Wiedergabewarteschlange konnte nicht erstellt werden – keine Elemente'; - @override - String failedPlayback({required Object action, required Object error}) => - 'Wiedergabe für ${action} fehlgeschlagen: ${error}'; + // Translations + @override String get markedAsWatched => 'Als gesehen markiert'; + @override String get markedAsUnwatched => 'Als ungesehen markiert'; + @override String get removedFromContinueWatching => 'Aus ‚Weiterschauen‘ entfernt'; + @override String errorLoading({required Object error}) => 'Fehler: ${error}'; + @override String get fileInfoNotAvailable => 'Dateiinfo nicht verfügbar'; + @override String errorLoadingFileInfo({required Object error}) => 'Fehler beim Laden der Dateiinfo: ${error}'; + @override String get errorLoadingSeries => 'Fehler beim Laden der Serie'; + @override String get errorLoadingSeason => 'Fehler beim Laden der Staffel'; + @override String get musicNotSupported => 'Musikwiedergabe wird noch nicht unterstützt'; + @override String get logsCleared => 'Protokolle gelöscht'; + @override String get logsCopied => 'Protokolle in Zwischenablage kopiert'; + @override String get noLogsAvailable => 'Keine Protokolle verfügbar'; + @override String libraryScanning({required Object title}) => 'Scanne „${title}“...'; + @override String libraryScanStarted({required Object title}) => 'Mediathekscan gestartet für „${title}“'; + @override String libraryScanFailed({required Object error}) => 'Fehler beim Scannen der Mediathek: ${error}'; + @override String metadataRefreshing({required Object title}) => 'Metadaten werden aktualisiert für „${title}“...'; + @override String metadataRefreshStarted({required Object title}) => 'Metadaten-Aktualisierung gestartet für „${title}“'; + @override String metadataRefreshFailed({required Object error}) => 'Metadaten konnten nicht aktualisiert werden: ${error}'; + @override String get noPlexToken => 'Kein Plex-Token gefunden. Bitte erneut anmelden.'; + @override String get logoutConfirm => 'Abmeldung wirklich durchführen?'; + @override String get noSeasonsFound => 'Keine Staffeln gefunden'; + @override String get noEpisodesFound => 'Keine Episoden in der ersten Staffel gefunden'; + @override String get noEpisodesFoundGeneral => 'Keine Episoden gefunden'; + @override String get noResultsFound => 'Keine Ergebnisse gefunden'; + @override String sleepTimerSet({required Object label}) => 'Sleep-Timer gesetzt auf ${label}'; + @override String failedToSwitchProfile({required Object displayName}) => 'Profilwechsel zu ${displayName} fehlgeschlagen'; + @override String get noItemsAvailable => 'Keine Elemente verfügbar'; + @override String get failedToCreatePlayQueue => 'Wiedergabewarteschlange konnte nicht erstellt werden'; + @override String get failedToCreatePlayQueueNoItems => 'Wiedergabewarteschlange konnte nicht erstellt werden – keine Elemente'; + @override String failedPlayback({required Object action, required Object error}) => 'Wiedergabe für ${action} fehlgeschlagen: ${error}'; } // Path: profile class _StringsProfileDe implements _StringsProfileEn { - _StringsProfileDe._(this._root); + _StringsProfileDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get noUsersAvailable => 'Keine Benutzer verfügbar'; + // Translations + @override String get noUsersAvailable => 'Keine Benutzer verfügbar'; } // Path: subtitlingStyling class _StringsSubtitlingStylingDe implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingDe._(this._root); + _StringsSubtitlingStylingDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get stylingOptions => 'Stiloptionen'; - @override - String get fontSize => 'Schriftgröße'; - @override - String get textColor => 'Textfarbe'; - @override - String get borderSize => 'Rahmengröße'; - @override - String get borderColor => 'Rahmenfarbe'; - @override - String get backgroundOpacity => 'Hintergrunddeckkraft'; - @override - String get backgroundColor => 'Hintergrundfarbe'; + // Translations + @override String get stylingOptions => 'Stiloptionen'; + @override String get fontSize => 'Schriftgröße'; + @override String get textColor => 'Textfarbe'; + @override String get borderSize => 'Rahmengröße'; + @override String get borderColor => 'Rahmenfarbe'; + @override String get backgroundOpacity => 'Hintergrunddeckkraft'; + @override String get backgroundColor => 'Hintergrundfarbe'; } // Path: dialog class _StringsDialogDe implements _StringsDialogEn { - _StringsDialogDe._(this._root); + _StringsDialogDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get confirmAction => 'Aktion bestätigen'; - @override - String get areYouSure => 'Aktion wirklich ausführen?'; - @override - String get cancel => 'Abbrechen'; - @override - String get playNow => 'Jetzt abspielen'; + // Translations + @override String get confirmAction => 'Aktion bestätigen'; + @override String get areYouSure => 'Aktion wirklich ausführen?'; + @override String get cancel => 'Abbrechen'; + @override String get playNow => 'Jetzt abspielen'; } // Path: discover class _StringsDiscoverDe implements _StringsDiscoverEn { - _StringsDiscoverDe._(this._root); + _StringsDiscoverDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Entdecken'; - @override - String get switchProfile => 'Profil wechseln'; - @override - String get switchServer => 'Server wechseln'; - @override - String get logout => 'Abmelden'; - @override - String get noContentAvailable => 'Kein Inhalt verfügbar'; - @override - String get addMediaToLibraries => 'Medien zur Mediathek hinzufügen'; - @override - String get continueWatching => 'Weiterschauen'; - @override - String get recentlyAdded => 'Kürzlich hinzugefügt'; - @override - String get play => 'Abspielen'; - @override - String get resume => 'Fortsetzen'; - @override - String playEpisode({required Object season, required Object episode}) => - 'S${season}, E${episode} - Abspielen'; - @override - String resumeEpisode({required Object season, required Object episode}) => - 'S${season}, E${episode} - Fortsetzen'; - @override - String get pause => 'Pause'; - @override - String get overview => 'Übersicht'; - @override - String get cast => 'Besetzung'; - @override - String get seasons => 'Staffeln'; - @override - String get studio => 'Studio'; - @override - String get rating => 'Altersfreigabe'; - @override - String get watched => 'Gesehen'; - @override - String episodeCount({required Object count}) => '${count} Episoden'; - @override - String watchedProgress({required Object watched, required Object total}) => - '${watched} von ${total} gesehen'; - @override - String get movie => 'Film'; - @override - String get tvShow => 'Serie'; - @override - String minutesLeft({required Object minutes}) => '${minutes} Min übrig'; + // Translations + @override String get title => 'Entdecken'; + @override String get switchProfile => 'Profil wechseln'; + @override String get switchServer => 'Server wechseln'; + @override String get logout => 'Abmelden'; + @override String get noContentAvailable => 'Kein Inhalt verfügbar'; + @override String get addMediaToLibraries => 'Medien zur Mediathek hinzufügen'; + @override String get continueWatching => 'Weiterschauen'; + @override String get recentlyAdded => 'Kürzlich hinzugefügt'; + @override String get play => 'Abspielen'; + @override String get resume => 'Fortsetzen'; + @override String playEpisode({required Object season, required Object episode}) => 'S${season}, E${episode} - Abspielen'; + @override String resumeEpisode({required Object season, required Object episode}) => 'S${season}, E${episode} - Fortsetzen'; + @override String get pause => 'Pause'; + @override String get overview => 'Übersicht'; + @override String get cast => 'Besetzung'; + @override String get seasons => 'Staffeln'; + @override String get studio => 'Studio'; + @override String get rating => 'Altersfreigabe'; + @override String get watched => 'Gesehen'; + @override String episodeCount({required Object count}) => '${count} Episoden'; + @override String watchedProgress({required Object watched, required Object total}) => '${watched} von ${total} gesehen'; + @override String get movie => 'Film'; + @override String get tvShow => 'Serie'; + @override String minutesLeft({required Object minutes}) => '${minutes} Min übrig'; } // Path: errors class _StringsErrorsDe implements _StringsErrorsEn { - _StringsErrorsDe._(this._root); + _StringsErrorsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String searchFailed({required Object error}) => - 'Suche fehlgeschlagen: ${error}'; - @override - String connectionTimeout({required Object context}) => - 'Zeitüberschreitung beim Laden von ${context}'; - @override - String get connectionFailed => 'Verbindung zum Plex-Server fehlgeschlagen'; - @override - String failedToLoad({required Object context, required Object error}) => - 'Fehler beim Laden von ${context}: ${error}'; - @override - String get noClientAvailable => 'Kein Client verfügbar'; - @override - String authenticationFailed({required Object error}) => - 'Authentifizierung fehlgeschlagen: ${error}'; - @override - String get couldNotLaunchUrl => 'Auth-URL konnte nicht geöffnet werden'; - @override - String get pleaseEnterToken => 'Bitte Token eingeben'; - @override - String get invalidToken => 'Ungültiges Token'; - @override - String failedToVerifyToken({required Object error}) => - 'Token-Verifizierung fehlgeschlagen: ${error}'; - @override - String failedToSwitchProfile({required Object displayName}) => - 'Profilwechsel zu ${displayName} fehlgeschlagen'; - @override - String get connectionFailedGeneric => 'Verbindung fehlgeschlagen'; + // Translations + @override String searchFailed({required Object error}) => 'Suche fehlgeschlagen: ${error}'; + @override String connectionTimeout({required Object context}) => 'Zeitüberschreitung beim Laden von ${context}'; + @override String get connectionFailed => 'Verbindung zum Plex-Server fehlgeschlagen'; + @override String failedToLoad({required Object context, required Object error}) => 'Fehler beim Laden von ${context}: ${error}'; + @override String get noClientAvailable => 'Kein Client verfügbar'; + @override String authenticationFailed({required Object error}) => 'Authentifizierung fehlgeschlagen: ${error}'; + @override String get couldNotLaunchUrl => 'Auth-URL konnte nicht geöffnet werden'; + @override String get pleaseEnterToken => 'Bitte Token eingeben'; + @override String get invalidToken => 'Ungültiges Token'; + @override String failedToVerifyToken({required Object error}) => 'Token-Verifizierung fehlgeschlagen: ${error}'; + @override String failedToSwitchProfile({required Object displayName}) => 'Profilwechsel zu ${displayName} fehlgeschlagen'; + @override String get connectionFailedGeneric => 'Verbindung fehlgeschlagen'; } // Path: libraries class _StringsLibrariesDe implements _StringsLibrariesEn { - _StringsLibrariesDe._(this._root); + _StringsLibrariesDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Mediatheken'; - @override - String get scanLibraryFiles => 'Mediatheksdateien scannen'; - @override - String get scanLibrary => 'Mediathek scannen'; - @override - String get analyze => 'Analysieren'; - @override - String get analyzeLibrary => 'Mediathek analysieren'; - @override - String get refreshMetadata => 'Metadaten aktualisieren'; - @override - String get emptyTrash => 'Papierkorb leeren'; - @override - String emptyingTrash({required Object title}) => - 'Papierkorb für „${title}“ wird geleert...'; - @override - String trashEmptied({required Object title}) => - 'Papierkorb für „${title}“ geleert'; - @override - String failedToEmptyTrash({required Object error}) => - 'Papierkorb konnte nicht geleert werden: ${error}'; - @override - String analyzing({required Object title}) => 'Analysiere „${title}“...'; - @override - String analysisStarted({required Object title}) => - 'Analyse gestartet für „${title}“'; - @override - String failedToAnalyze({required Object error}) => - 'Analyse der Mediathek fehlgeschlagen: ${error}'; - @override - String get noLibrariesFound => 'Keine Mediatheken gefunden'; - @override - String get thisLibraryIsEmpty => 'Diese Mediathek ist leer'; - @override - String get all => 'Alle'; - @override - String get clearAll => 'Alle löschen'; - @override - String scanLibraryConfirm({required Object title}) => - '„${title}“ wirklich scannen?'; - @override - String analyzeLibraryConfirm({required Object title}) => - '„${title}“ wirklich analysieren?'; - @override - String refreshMetadataConfirm({required Object title}) => - 'Metadaten für „${title}“ wirklich aktualisieren?'; - @override - String emptyTrashConfirm({required Object title}) => - 'Papierkorb für „${title}“ wirklich leeren?'; - @override - String get manageLibraries => 'Mediatheken verwalten'; - @override - String get sort => 'Sortieren'; - @override - String get sortBy => 'Sortieren nach'; - @override - String get filters => 'Filter'; - @override - String loadingLibraryWithCount({required Object count}) => - 'Lade Mediathek... (${count} Elemente geladen)'; - @override - String get confirmActionMessage => 'Aktion wirklich durchführen?'; - @override - String get showLibrary => 'Mediathek anzeigen'; - @override - String get hideLibrary => 'Mediathek ausblenden'; - @override - String get libraryOptions => 'Mediatheksoptionen'; - @override - String get content => 'Bibliotheksinhalt'; - @override - String get selectLibrary => 'Bibliothek auswählen'; - @override - String filtersWithCount({required Object count}) => 'Filter (${count})'; - @override - String get noRecommendations => 'Keine Empfehlungen verfügbar'; - @override - String get noCollections => 'Keine Sammlungen in dieser Mediathek'; - @override - String get noFoldersFound => 'Keine Ordner gefunden'; - @override - String get folders => 'Ordner'; - @override - late final _StringsLibrariesTabsDe tabs = _StringsLibrariesTabsDe._(_root); - @override - late final _StringsLibrariesGroupingsDe groupings = - _StringsLibrariesGroupingsDe._(_root); + // Translations + @override String get title => 'Mediatheken'; + @override String get scanLibraryFiles => 'Mediatheksdateien scannen'; + @override String get scanLibrary => 'Mediathek scannen'; + @override String get analyze => 'Analysieren'; + @override String get analyzeLibrary => 'Mediathek analysieren'; + @override String get refreshMetadata => 'Metadaten aktualisieren'; + @override String get emptyTrash => 'Papierkorb leeren'; + @override String emptyingTrash({required Object title}) => 'Papierkorb für „${title}“ wird geleert...'; + @override String trashEmptied({required Object title}) => 'Papierkorb für „${title}“ geleert'; + @override String failedToEmptyTrash({required Object error}) => 'Papierkorb konnte nicht geleert werden: ${error}'; + @override String analyzing({required Object title}) => 'Analysiere „${title}“...'; + @override String analysisStarted({required Object title}) => 'Analyse gestartet für „${title}“'; + @override String failedToAnalyze({required Object error}) => 'Analyse der Mediathek fehlgeschlagen: ${error}'; + @override String get noLibrariesFound => 'Keine Mediatheken gefunden'; + @override String get thisLibraryIsEmpty => 'Diese Mediathek ist leer'; + @override String get all => 'Alle'; + @override String get clearAll => 'Alle löschen'; + @override String scanLibraryConfirm({required Object title}) => '„${title}“ wirklich scannen?'; + @override String analyzeLibraryConfirm({required Object title}) => '„${title}“ wirklich analysieren?'; + @override String refreshMetadataConfirm({required Object title}) => 'Metadaten für „${title}“ wirklich aktualisieren?'; + @override String emptyTrashConfirm({required Object title}) => 'Papierkorb für „${title}“ wirklich leeren?'; + @override String get manageLibraries => 'Mediatheken verwalten'; + @override String get sort => 'Sortieren'; + @override String get sortBy => 'Sortieren nach'; + @override String get filters => 'Filter'; + @override String loadingLibraryWithCount({required Object count}) => 'Lade Mediathek... (${count} Elemente geladen)'; + @override String get confirmActionMessage => 'Aktion wirklich durchführen?'; + @override String get showLibrary => 'Mediathek anzeigen'; + @override String get hideLibrary => 'Mediathek ausblenden'; + @override String get libraryOptions => 'Mediatheksoptionen'; + @override String get content => 'Bibliotheksinhalt'; + @override String get selectLibrary => 'Bibliothek auswählen'; + @override String filtersWithCount({required Object count}) => 'Filter (${count})'; + @override String get noRecommendations => 'Keine Empfehlungen verfügbar'; + @override String get noCollections => 'Keine Sammlungen in dieser Mediathek'; + @override String get noFoldersFound => 'Keine Ordner gefunden'; + @override String get folders => 'Ordner'; + @override late final _StringsLibrariesTabsDe tabs = _StringsLibrariesTabsDe._(_root); + @override late final _StringsLibrariesGroupingsDe groupings = _StringsLibrariesGroupingsDe._(_root); } // Path: about class _StringsAboutDe implements _StringsAboutEn { - _StringsAboutDe._(this._root); + _StringsAboutDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Über'; - @override - String get openSourceLicenses => 'Open-Source-Lizenzen'; - @override - String versionLabel({required Object version}) => 'Version ${version}'; - @override - String get appDescription => 'Ein schöner Plex-Client für Flutter'; - @override - String get viewLicensesDescription => - 'Lizenzen von Drittanbieter-Bibliotheken anzeigen'; + // Translations + @override String get title => 'Über'; + @override String get openSourceLicenses => 'Open-Source-Lizenzen'; + @override String versionLabel({required Object version}) => 'Version ${version}'; + @override String get appDescription => 'Ein schöner Plex-Client für Flutter'; + @override String get viewLicensesDescription => 'Lizenzen von Drittanbieter-Bibliotheken anzeigen'; } // Path: serverSelection class _StringsServerSelectionDe implements _StringsServerSelectionEn { - _StringsServerSelectionDe._(this._root); + _StringsServerSelectionDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get connectingToServer => 'Verbinde mit Server...'; - @override - String get connectingToAllServers => 'Verbinde mit allen Servern...'; - @override - String get connectToAllServers => 'Mit allen Servern verbinden'; - @override - String get allServerConnectionsFailed => - 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.'; - @override - String foundServers({required Object count}) => '${count} Server gefunden'; - @override - String get orSelectIndividually => 'Oder einzelnen Server auswählen:'; - @override - String get serverDebugCopied => 'Server-Debugdaten kopiert'; - @override - String get copyDebugData => 'Debugdaten kopieren'; - @override - String get noServersFound => 'Keine Server gefunden'; - @override - String malformedServerData({required Object count}) => - '${count} Server mit fehlerhaften Daten gefunden. Keine gültigen Server verfügbar.'; - @override - String get incompleteServerInfo => - 'Einige Serverinformationen sind unvollständig und wurden übersprungen. Plex.tv-Konto prüfen.'; - @override - String get incompleteConnectionInfo => - 'Serververbindungsinformationen unvollständig. Bitte erneut versuchen.'; - @override - String malformedServerInfo({required Object message}) => - 'Serverinformationen fehlerhaft: ${message}'; - @override - String get networkConnectionFailed => - 'Netzwerkverbindung fehlgeschlagen. Internetverbindung prüfen und erneut versuchen.'; - @override - String get authenticationFailed => - 'Authentifizierung fehlgeschlagen. Bitte erneut anmelden.'; - @override - String get plexServiceUnavailable => - 'Plex-Dienst nicht verfügbar. Bitte später erneut versuchen.'; - @override - String failedToLoadServers({required Object error}) => - 'Server konnten nicht geladen werden: ${error}'; + // Translations + @override String get connectingToServer => 'Verbinde mit Server...'; + @override String get connectingToAllServers => 'Verbinde mit allen Servern...'; + @override String get connectToAllServers => 'Mit allen Servern verbinden'; + @override String get allServerConnectionsFailed => 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.'; + @override String foundServers({required Object count}) => '${count} Server gefunden'; + @override String get orSelectIndividually => 'Oder einzelnen Server auswählen:'; + @override String get serverDebugCopied => 'Server-Debugdaten kopiert'; + @override String get copyDebugData => 'Debugdaten kopieren'; + @override String get noServersFound => 'Keine Server gefunden'; + @override String malformedServerData({required Object count}) => '${count} Server mit fehlerhaften Daten gefunden. Keine gültigen Server verfügbar.'; + @override String get incompleteServerInfo => 'Einige Serverinformationen sind unvollständig und wurden übersprungen. Plex.tv-Konto prüfen.'; + @override String get incompleteConnectionInfo => 'Serververbindungsinformationen unvollständig. Bitte erneut versuchen.'; + @override String malformedServerInfo({required Object message}) => 'Serverinformationen fehlerhaft: ${message}'; + @override String get networkConnectionFailed => 'Netzwerkverbindung fehlgeschlagen. Internetverbindung prüfen und erneut versuchen.'; + @override String get authenticationFailed => 'Authentifizierung fehlgeschlagen. Bitte erneut anmelden.'; + @override String get plexServiceUnavailable => 'Plex-Dienst nicht verfügbar. Bitte später erneut versuchen.'; + @override String failedToLoadServers({required Object error}) => 'Server konnten nicht geladen werden: ${error}'; } // Path: hubDetail class _StringsHubDetailDe implements _StringsHubDetailEn { - _StringsHubDetailDe._(this._root); + _StringsHubDetailDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Titel'; - @override - String get releaseYear => 'Erscheinungsjahr'; - @override - String get dateAdded => 'Hinzugefügt am'; - @override - String get rating => 'Bewertung'; - @override - String get noItemsFound => 'Keine Elemente gefunden'; + // Translations + @override String get title => 'Titel'; + @override String get releaseYear => 'Erscheinungsjahr'; + @override String get dateAdded => 'Hinzugefügt am'; + @override String get rating => 'Bewertung'; + @override String get noItemsFound => 'Keine Elemente gefunden'; } // Path: logs class _StringsLogsDe implements _StringsLogsEn { - _StringsLogsDe._(this._root); + _StringsLogsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Protokolle'; - @override - String get clearLogs => 'Protokolle löschen'; - @override - String get copyLogs => 'Protokolle kopieren'; - @override - String get exportLogs => 'Protokolle exportieren'; - @override - String get noLogsToShow => 'Keine Protokolle zum Anzeigen'; - @override - String get error => 'Fehler:'; - @override - String get stackTrace => 'Stacktrace:'; + // Translations + @override String get title => 'Protokolle'; + @override String get clearLogs => 'Protokolle löschen'; + @override String get copyLogs => 'Protokolle kopieren'; + @override String get exportLogs => 'Protokolle exportieren'; + @override String get noLogsToShow => 'Keine Protokolle zum Anzeigen'; + @override String get error => 'Fehler:'; + @override String get stackTrace => 'Stacktrace:'; } // Path: licenses class _StringsLicensesDe implements _StringsLicensesEn { - _StringsLicensesDe._(this._root); + _StringsLicensesDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get relatedPackages => 'Verwandte Pakete'; - @override - String get license => 'Lizenz'; - @override - String licenseNumber({required Object number}) => 'Lizenz ${number}'; - @override - String licensesCount({required Object count}) => '${count} Lizenzen'; + // Translations + @override String get relatedPackages => 'Verwandte Pakete'; + @override String get license => 'Lizenz'; + @override String licenseNumber({required Object number}) => 'Lizenz ${number}'; + @override String licensesCount({required Object count}) => '${count} Lizenzen'; } // Path: navigation class _StringsNavigationDe implements _StringsNavigationEn { - _StringsNavigationDe._(this._root); + _StringsNavigationDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get home => 'Start'; - @override - String get search => 'Suche'; - @override - String get libraries => 'Mediatheken'; - @override - String get settings => 'Einstellungen'; + // Translations + @override String get home => 'Start'; + @override String get search => 'Suche'; + @override String get libraries => 'Mediatheken'; + @override String get settings => 'Einstellungen'; } // Path: playlists class _StringsPlaylistsDe implements _StringsPlaylistsEn { - _StringsPlaylistsDe._(this._root); + _StringsPlaylistsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Wiedergabelisten'; - @override - String get noPlaylists => 'Keine Wiedergabelisten gefunden'; - @override - String get create => 'Wiedergabeliste erstellen'; - @override - String get newPlaylist => 'Neue Wiedergabeliste'; - @override - String get playlistName => 'Name der Wiedergabeliste'; - @override - String get enterPlaylistName => 'Name der Wiedergabeliste eingeben'; - @override - String get edit => 'Wiedergabeliste bearbeiten'; - @override - String get delete => 'Wiedergabeliste löschen'; - @override - String get addTo => 'Zur Wiedergabeliste hinzufügen'; - @override - String get addItems => 'Elemente hinzufügen'; - @override - String get removeItem => 'Aus Wiedergabeliste entfernen'; - @override - String get clearPlaylist => 'Wiedergabeliste leeren'; - @override - String get playAll => 'Alle abspielen'; - @override - String get shuffle => 'Zufällig'; - @override - String get smartPlaylist => 'Intelligente Wiedergabeliste'; - @override - String get regularPlaylist => 'Normale Wiedergabeliste'; - @override - String itemCount({required Object count}) => '${count} Elemente'; - @override - String get oneItem => '1 Element'; - @override - String get emptyPlaylist => 'Diese Wiedergabeliste ist leer'; - @override - String get deleteConfirm => 'Wiedergabeliste löschen?'; - @override - String deleteMessage({required Object name}) => - 'Soll "${name}" wirklich gelöscht werden?'; - @override - String get created => 'Wiedergabeliste erstellt'; - @override - String get updated => 'Wiedergabeliste aktualisiert'; - @override - String get deleted => 'Wiedergabeliste gelöscht'; - @override - String get itemAdded => 'Zur Wiedergabeliste hinzugefügt'; - @override - String get itemRemoved => 'Aus Wiedergabeliste entfernt'; - @override - String get selectPlaylist => 'Wiedergabeliste auswählen'; - @override - String get createNewPlaylist => 'Neue Wiedergabeliste erstellen'; - @override - String get errorCreating => 'Wiedergabeliste konnte nicht erstellt werden'; - @override - String get errorDeleting => 'Wiedergabeliste konnte nicht gelöscht werden'; - @override - String get errorLoading => 'Wiedergabelisten konnten nicht geladen werden'; - @override - String get errorAdding => - 'Konnte nicht zur Wiedergabeliste hinzugefügt werden'; - @override - String get errorReordering => - 'Element der Wiedergabeliste konnte nicht neu geordnet werden'; - @override - String get errorRemoving => - 'Konnte nicht aus der Wiedergabeliste entfernt werden'; - @override - String get playlist => 'Wiedergabeliste'; + // Translations + @override String get title => 'Wiedergabelisten'; + @override String get noPlaylists => 'Keine Wiedergabelisten gefunden'; + @override String get create => 'Wiedergabeliste erstellen'; + @override String get newPlaylist => 'Neue Wiedergabeliste'; + @override String get playlistName => 'Name der Wiedergabeliste'; + @override String get enterPlaylistName => 'Name der Wiedergabeliste eingeben'; + @override String get edit => 'Wiedergabeliste bearbeiten'; + @override String get delete => 'Wiedergabeliste löschen'; + @override String get addTo => 'Zur Wiedergabeliste hinzufügen'; + @override String get addItems => 'Elemente hinzufügen'; + @override String get removeItem => 'Aus Wiedergabeliste entfernen'; + @override String get clearPlaylist => 'Wiedergabeliste leeren'; + @override String get playAll => 'Alle abspielen'; + @override String get shuffle => 'Zufällig'; + @override String get smartPlaylist => 'Intelligente Wiedergabeliste'; + @override String get regularPlaylist => 'Normale Wiedergabeliste'; + @override String itemCount({required Object count}) => '${count} Elemente'; + @override String get oneItem => '1 Element'; + @override String get emptyPlaylist => 'Diese Wiedergabeliste ist leer'; + @override String get deleteConfirm => 'Wiedergabeliste löschen?'; + @override String deleteMessage({required Object name}) => 'Soll "${name}" wirklich gelöscht werden?'; + @override String get created => 'Wiedergabeliste erstellt'; + @override String get updated => 'Wiedergabeliste aktualisiert'; + @override String get deleted => 'Wiedergabeliste gelöscht'; + @override String get itemAdded => 'Zur Wiedergabeliste hinzugefügt'; + @override String get itemRemoved => 'Aus Wiedergabeliste entfernt'; + @override String get selectPlaylist => 'Wiedergabeliste auswählen'; + @override String get createNewPlaylist => 'Neue Wiedergabeliste erstellen'; + @override String get errorCreating => 'Wiedergabeliste konnte nicht erstellt werden'; + @override String get errorDeleting => 'Wiedergabeliste konnte nicht gelöscht werden'; + @override String get errorLoading => 'Wiedergabelisten konnten nicht geladen werden'; + @override String get errorAdding => 'Konnte nicht zur Wiedergabeliste hinzugefügt werden'; + @override String get errorReordering => 'Element der Wiedergabeliste konnte nicht neu geordnet werden'; + @override String get errorRemoving => 'Konnte nicht aus der Wiedergabeliste entfernt werden'; + @override String get playlist => 'Wiedergabeliste'; } // Path: collections class _StringsCollectionsDe implements _StringsCollectionsEn { - _StringsCollectionsDe._(this._root); + _StringsCollectionsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get title => 'Sammlungen'; - @override - String get collection => 'Sammlung'; - @override - String get empty => 'Sammlung ist leer'; - @override - String get noItems => 'Keine Elemente in dieser Sammlung'; - @override - String get unknownLibrarySection => - 'Löschen nicht möglich: Unbekannte Bibliothekssektion'; - @override - String get deleteCollection => 'Sammlung löschen'; - @override - String deleteConfirm({required Object title}) => - 'Sind Sie sicher, dass Sie "${title}" löschen möchten? Dies kann nicht rückgängig gemacht werden.'; - @override - String get deleted => 'Sammlung gelöscht'; - @override - String get deleteFailed => 'Sammlung konnte nicht gelöscht werden'; - @override - String deleteFailedWithError({required Object error}) => - 'Sammlung konnte nicht gelöscht werden: ${error}'; - @override - String failedToLoadItems({required Object error}) => - 'Sammlungselemente konnten nicht geladen werden: ${error}'; - @override - String get addTo => 'Zur Sammlung hinzufügen'; - @override - String get selectCollection => 'Sammlung auswählen'; - @override - String get createNewCollection => 'Neue Sammlung erstellen'; - @override - String get collectionName => 'Sammlungsname'; - @override - String get enterCollectionName => 'Sammlungsnamen eingeben'; - @override - String get addedToCollection => 'Zur Sammlung hinzugefügt'; - @override - String get errorAddingToCollection => 'Fehler beim Hinzufügen zur Sammlung'; - @override - String get created => 'Sammlung erstellt'; - @override - String get removeFromCollection => 'Aus Sammlung entfernen'; - @override - String removeFromCollectionConfirm({required Object title}) => - '"${title}" aus dieser Sammlung entfernen?'; - @override - String get removedFromCollection => 'Aus Sammlung entfernt'; - @override - String get removeFromCollectionFailed => - 'Entfernen aus Sammlung fehlgeschlagen'; - @override - String removeFromCollectionError({required Object error}) => - 'Fehler beim Entfernen aus der Sammlung: ${error}'; + // Translations + @override String get title => 'Sammlungen'; + @override String get collection => 'Sammlung'; + @override String get empty => 'Sammlung ist leer'; + @override String get noItems => 'Keine Elemente in dieser Sammlung'; + @override String get unknownLibrarySection => 'Löschen nicht möglich: Unbekannte Bibliothekssektion'; + @override String get deleteCollection => 'Sammlung löschen'; + @override String deleteConfirm({required Object title}) => 'Sind Sie sicher, dass Sie "${title}" löschen möchten? Dies kann nicht rückgängig gemacht werden.'; + @override String get deleted => 'Sammlung gelöscht'; + @override String get deleteFailed => 'Sammlung konnte nicht gelöscht werden'; + @override String deleteFailedWithError({required Object error}) => 'Sammlung konnte nicht gelöscht werden: ${error}'; + @override String failedToLoadItems({required Object error}) => 'Sammlungselemente konnten nicht geladen werden: ${error}'; + @override String get addTo => 'Zur Sammlung hinzufügen'; + @override String get selectCollection => 'Sammlung auswählen'; + @override String get createNewCollection => 'Neue Sammlung erstellen'; + @override String get collectionName => 'Sammlungsname'; + @override String get enterCollectionName => 'Sammlungsnamen eingeben'; + @override String get addedToCollection => 'Zur Sammlung hinzugefügt'; + @override String get errorAddingToCollection => 'Fehler beim Hinzufügen zur Sammlung'; + @override String get created => 'Sammlung erstellt'; + @override String get removeFromCollection => 'Aus Sammlung entfernen'; + @override String removeFromCollectionConfirm({required Object title}) => '"${title}" aus dieser Sammlung entfernen?'; + @override String get removedFromCollection => 'Aus Sammlung entfernt'; + @override String get removeFromCollectionFailed => 'Entfernen aus Sammlung fehlgeschlagen'; + @override String removeFromCollectionError({required Object error}) => 'Fehler beim Entfernen aus der Sammlung: ${error}'; } // Path: libraries.tabs class _StringsLibrariesTabsDe implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsDe._(this._root); + _StringsLibrariesTabsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get recommended => 'Empfohlen'; - @override - String get browse => 'Durchsuchen'; - @override - String get collections => 'Sammlungen'; - @override - String get playlists => 'Wiedergabelisten'; + // Translations + @override String get recommended => 'Empfohlen'; + @override String get browse => 'Durchsuchen'; + @override String get collections => 'Sammlungen'; + @override String get playlists => 'Wiedergabelisten'; } // Path: libraries.groupings class _StringsLibrariesGroupingsDe implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsDe._(this._root); + _StringsLibrariesGroupingsDe._(this._root); - @override - final _StringsDe _root; // ignore: unused_field + @override final _StringsDe _root; // ignore: unused_field - // Translations - @override - String get all => 'Alle'; - @override - String get movies => 'Filme'; - @override - String get shows => 'Serien'; - @override - String get seasons => 'Staffeln'; - @override - String get episodes => 'Episoden'; - @override - String get folders => 'Ordner'; + // Translations + @override String get all => 'Alle'; + @override String get movies => 'Filme'; + @override String get shows => 'Serien'; + @override String get seasons => 'Staffeln'; + @override String get episodes => 'Episoden'; + @override String get folders => 'Ordner'; } // Path: class _StringsIt implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsIt.build({ - Map? overrides, - PluralResolver? cardinalResolver, - PluralResolver? ordinalResolver, - }) : assert( - overrides == null, - 'Set "translation_overrides: true" in order to enable this feature.', - ), - $meta = TranslationMetadata( - locale: AppLocale.it, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsIt.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.it, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - @override - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); - @override - late final _StringsIt _root = this; // ignore: unused_field + @override late final _StringsIt _root = this; // ignore: unused_field - // Translations - @override - late final _StringsAppIt app = _StringsAppIt._(_root); - @override - late final _StringsAuthIt auth = _StringsAuthIt._(_root); - @override - late final _StringsCommonIt common = _StringsCommonIt._(_root); - @override - late final _StringsScreensIt screens = _StringsScreensIt._(_root); - @override - late final _StringsUpdateIt update = _StringsUpdateIt._(_root); - @override - late final _StringsSettingsIt settings = _StringsSettingsIt._(_root); - @override - late final _StringsSearchIt search = _StringsSearchIt._(_root); - @override - late final _StringsHotkeysIt hotkeys = _StringsHotkeysIt._(_root); - @override - late final _StringsPinEntryIt pinEntry = _StringsPinEntryIt._(_root); - @override - late final _StringsFileInfoIt fileInfo = _StringsFileInfoIt._(_root); - @override - late final _StringsMediaMenuIt mediaMenu = _StringsMediaMenuIt._(_root); - @override - late final _StringsAccessibilityIt accessibility = _StringsAccessibilityIt._( - _root, - ); - @override - late final _StringsTooltipsIt tooltips = _StringsTooltipsIt._(_root); - @override - late final _StringsVideoControlsIt videoControls = _StringsVideoControlsIt._( - _root, - ); - @override - late final _StringsUserStatusIt userStatus = _StringsUserStatusIt._(_root); - @override - late final _StringsMessagesIt messages = _StringsMessagesIt._(_root); - @override - late final _StringsProfileIt profile = _StringsProfileIt._(_root); - @override - late final _StringsSubtitlingStylingIt subtitlingStyling = - _StringsSubtitlingStylingIt._(_root); - @override - late final _StringsDialogIt dialog = _StringsDialogIt._(_root); - @override - late final _StringsDiscoverIt discover = _StringsDiscoverIt._(_root); - @override - late final _StringsErrorsIt errors = _StringsErrorsIt._(_root); - @override - late final _StringsLibrariesIt libraries = _StringsLibrariesIt._(_root); - @override - late final _StringsAboutIt about = _StringsAboutIt._(_root); - @override - late final _StringsServerSelectionIt serverSelection = - _StringsServerSelectionIt._(_root); - @override - late final _StringsHubDetailIt hubDetail = _StringsHubDetailIt._(_root); - @override - late final _StringsLogsIt logs = _StringsLogsIt._(_root); - @override - late final _StringsLicensesIt licenses = _StringsLicensesIt._(_root); - @override - late final _StringsNavigationIt navigation = _StringsNavigationIt._(_root); - @override - late final _StringsPlaylistsIt playlists = _StringsPlaylistsIt._(_root); - @override - late final _StringsCollectionsIt collections = _StringsCollectionsIt._(_root); + // Translations + @override late final _StringsAppIt app = _StringsAppIt._(_root); + @override late final _StringsAuthIt auth = _StringsAuthIt._(_root); + @override late final _StringsCommonIt common = _StringsCommonIt._(_root); + @override late final _StringsScreensIt screens = _StringsScreensIt._(_root); + @override late final _StringsUpdateIt update = _StringsUpdateIt._(_root); + @override late final _StringsSettingsIt settings = _StringsSettingsIt._(_root); + @override late final _StringsSearchIt search = _StringsSearchIt._(_root); + @override late final _StringsHotkeysIt hotkeys = _StringsHotkeysIt._(_root); + @override late final _StringsPinEntryIt pinEntry = _StringsPinEntryIt._(_root); + @override late final _StringsFileInfoIt fileInfo = _StringsFileInfoIt._(_root); + @override late final _StringsMediaMenuIt mediaMenu = _StringsMediaMenuIt._(_root); + @override late final _StringsAccessibilityIt accessibility = _StringsAccessibilityIt._(_root); + @override late final _StringsTooltipsIt tooltips = _StringsTooltipsIt._(_root); + @override late final _StringsVideoControlsIt videoControls = _StringsVideoControlsIt._(_root); + @override late final _StringsUserStatusIt userStatus = _StringsUserStatusIt._(_root); + @override late final _StringsMessagesIt messages = _StringsMessagesIt._(_root); + @override late final _StringsProfileIt profile = _StringsProfileIt._(_root); + @override late final _StringsSubtitlingStylingIt subtitlingStyling = _StringsSubtitlingStylingIt._(_root); + @override late final _StringsDialogIt dialog = _StringsDialogIt._(_root); + @override late final _StringsDiscoverIt discover = _StringsDiscoverIt._(_root); + @override late final _StringsErrorsIt errors = _StringsErrorsIt._(_root); + @override late final _StringsLibrariesIt libraries = _StringsLibrariesIt._(_root); + @override late final _StringsAboutIt about = _StringsAboutIt._(_root); + @override late final _StringsServerSelectionIt serverSelection = _StringsServerSelectionIt._(_root); + @override late final _StringsHubDetailIt hubDetail = _StringsHubDetailIt._(_root); + @override late final _StringsLogsIt logs = _StringsLogsIt._(_root); + @override late final _StringsLicensesIt licenses = _StringsLicensesIt._(_root); + @override late final _StringsNavigationIt navigation = _StringsNavigationIt._(_root); + @override late final _StringsPlaylistsIt playlists = _StringsPlaylistsIt._(_root); + @override late final _StringsCollectionsIt collections = _StringsCollectionsIt._(_root); } // Path: app class _StringsAppIt implements _StringsAppEn { - _StringsAppIt._(this._root); + _StringsAppIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Plezy'; - @override - String get loading => 'Caricamento...'; + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Caricamento...'; } // Path: auth class _StringsAuthIt implements _StringsAuthEn { - _StringsAuthIt._(this._root); + _StringsAuthIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get signInWithPlex => 'Accedi con Plex'; - @override - String get showQRCode => 'Mostra QR Code'; - @override - String get cancel => 'Cancella'; - @override - String get authenticate => 'Autenticazione'; - @override - String get retry => 'Riprova'; - @override - String get debugEnterToken => 'Debug: Inserisci Token Plex'; - @override - String get plexTokenLabel => 'Token Auth Plex'; - @override - String get plexTokenHint => 'Inserisci il tuo token di Plex.tv'; - @override - String get authenticationTimeout => 'Autenticazione scaduta. Riprova.'; - @override - String get scanQRCodeInstruction => - 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.'; - @override - String get waitingForAuth => - 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.'; + // Translations + @override String get signInWithPlex => 'Accedi con Plex'; + @override String get showQRCode => 'Mostra QR Code'; + @override String get cancel => 'Cancella'; + @override String get authenticate => 'Autenticazione'; + @override String get retry => 'Riprova'; + @override String get debugEnterToken => 'Debug: Inserisci Token Plex'; + @override String get plexTokenLabel => 'Token Auth Plex'; + @override String get plexTokenHint => 'Inserisci il tuo token di Plex.tv'; + @override String get authenticationTimeout => 'Autenticazione scaduta. Riprova.'; + @override String get scanQRCodeInstruction => 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.'; + @override String get waitingForAuth => 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.'; } // Path: common class _StringsCommonIt implements _StringsCommonEn { - _StringsCommonIt._(this._root); + _StringsCommonIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get cancel => 'Cancella'; - @override - String get save => 'Salva'; - @override - String get close => 'Chiudi'; - @override - String get clear => 'Pulisci'; - @override - String get reset => 'Ripristina'; - @override - String get later => 'Più tardi'; - @override - String get submit => 'Invia'; - @override - String get confirm => 'Conferma'; - @override - String get retry => 'Riprova'; - @override - String get playNow => 'Riproduci ora'; - @override - String get logout => 'Disconnetti'; - @override - String get online => 'Online'; - @override - String get offline => 'Offline'; - @override - String get owned => 'Di proprietà'; - @override - String get shared => 'Condiviso'; - @override - String get current => 'CORRENTE'; - @override - String get unknown => 'Sconosciuto'; - @override - String get refresh => 'Aggiorna'; - @override - String get yes => 'Sì'; - @override - String get no => 'No'; - @override - String get server => 'Server'; - @override - String get delete => 'Elimina'; - @override - String get shuffle => 'Casuale'; - @override - String get addTo => 'Aggiungi a...'; + // Translations + @override String get cancel => 'Cancella'; + @override String get save => 'Salva'; + @override String get close => 'Chiudi'; + @override String get clear => 'Pulisci'; + @override String get reset => 'Ripristina'; + @override String get later => 'Più tardi'; + @override String get submit => 'Invia'; + @override String get confirm => 'Conferma'; + @override String get retry => 'Riprova'; + @override String get playNow => 'Riproduci ora'; + @override String get logout => 'Disconnetti'; + @override String get online => 'Online'; + @override String get offline => 'Offline'; + @override String get owned => 'Di proprietà'; + @override String get shared => 'Condiviso'; + @override String get current => 'CORRENTE'; + @override String get unknown => 'Sconosciuto'; + @override String get refresh => 'Aggiorna'; + @override String get yes => 'Sì'; + @override String get no => 'No'; + @override String get server => 'Server'; + @override String get delete => 'Elimina'; + @override String get shuffle => 'Casuale'; + @override String get addTo => 'Aggiungi a...'; } // Path: screens class _StringsScreensIt implements _StringsScreensEn { - _StringsScreensIt._(this._root); + _StringsScreensIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get licenses => 'Licenze'; - @override - String get selectServer => 'Seleziona server'; - @override - String get switchProfile => 'Cambia profilo'; - @override - String get subtitleStyling => 'Stile sottotitoli'; - @override - String get search => 'Cerca'; - @override - String get logs => 'Registro'; + // Translations + @override String get licenses => 'Licenze'; + @override String get selectServer => 'Seleziona server'; + @override String get switchProfile => 'Cambia profilo'; + @override String get subtitleStyling => 'Stile sottotitoli'; + @override String get search => 'Cerca'; + @override String get logs => 'Registro'; } // Path: update class _StringsUpdateIt implements _StringsUpdateEn { - _StringsUpdateIt._(this._root); + _StringsUpdateIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get available => 'Aggiornamento disponibile'; - @override - String versionAvailable({required Object version}) => - 'Versione ${version} disponibile'; - @override - String currentVersion({required Object version}) => 'Corrente: ${version}'; - @override - String get skipVersion => 'Salta questa versione'; - @override - String get viewRelease => 'Visualizza dettagli release'; - @override - String get latestVersion => 'La versione installata è l\'ultima disponibile'; - @override - String get checkFailed => 'Impossibile controllare gli aggiornamenti'; + // Translations + @override String get available => 'Aggiornamento disponibile'; + @override String versionAvailable({required Object version}) => 'Versione ${version} disponibile'; + @override String currentVersion({required Object version}) => 'Corrente: ${version}'; + @override String get skipVersion => 'Salta questa versione'; + @override String get viewRelease => 'Visualizza dettagli release'; + @override String get latestVersion => 'La versione installata è l\'ultima disponibile'; + @override String get checkFailed => 'Impossibile controllare gli aggiornamenti'; } // Path: settings class _StringsSettingsIt implements _StringsSettingsEn { - _StringsSettingsIt._(this._root); + _StringsSettingsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Impostazioni'; - @override - String get language => 'Lingua'; - @override - String get theme => 'Tema'; - @override - String get appearance => 'Aspetto'; - @override - String get videoPlayback => 'Riproduzione video'; - @override - String get shufflePlay => 'Riproduzione casuale'; - @override - String get advanced => 'Avanzate'; - @override - String get useSeasonPostersDescription => - 'Mostra il poster della stagione invece del poster della serie per gli episodi'; - @override - String get showHeroSectionDescription => - 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; - @override - String get secondsLabel => 'Secondi'; - @override - String get minutesLabel => 'Minuti'; - @override - String get secondsShort => 's'; - @override - String get minutesShort => 'm'; - @override - String durationHint({required Object min, required Object max}) => - 'Inserisci durata (${min}-${max})'; - @override - String get systemTheme => 'Sistema'; - @override - String get systemThemeDescription => 'Segui le impostazioni di sistema'; - @override - String get lightTheme => 'Chiaro'; - @override - String get darkTheme => 'Scuro'; - @override - String get libraryDensity => 'Densità libreria'; - @override - String get compact => 'Compatta'; - @override - String get compactDescription => 'Schede più piccole, più elementi visibili'; - @override - String get normal => 'Normale'; - @override - String get normalDescription => 'Dimensione predefinita'; - @override - String get comfortable => 'Comoda'; - @override - String get comfortableDescription => - 'Schede più grandi, meno elementi visibili'; - @override - String get viewMode => 'Modalità di visualizzazione'; - @override - String get gridView => 'Griglia'; - @override - String get gridViewDescription => - 'Visualizza gli elementi in un layout a griglia'; - @override - String get listView => 'Elenco'; - @override - String get listViewDescription => - 'Visualizza gli elementi in un layout a elenco'; - @override - String get useSeasonPosters => 'Usa poster delle stagioni'; - @override - String get showHeroSection => 'Mostra sezione principale'; - @override - String get hardwareDecoding => 'Decodifica Hardware'; - @override - String get hardwareDecodingDescription => - 'Utilizza l\'accelerazione hardware quando disponibile'; - @override - String get bufferSize => 'Dimensione buffer'; - @override - String bufferSizeMB({required Object size}) => '${size}MB'; - @override - String get subtitleStyling => 'Stile sottotitoli'; - @override - String get subtitleStylingDescription => - 'Personalizza l\'aspetto dei sottotitoli'; - @override - String get smallSkipDuration => 'Durata skip breve'; - @override - String get largeSkipDuration => 'Durata skip lungo'; - @override - String secondsUnit({required Object seconds}) => '${seconds} secondi'; - @override - String get defaultSleepTimer => 'Timer spegnimento predefinito'; - @override - String minutesUnit({required Object minutes}) => '${minutes} minuti'; - @override - String get rememberTrackSelections => - 'Ricorda selezioni tracce per serie/film'; - @override - String get rememberTrackSelectionsDescription => - 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; - @override - String get unwatchedOnly => 'Solo non guardati'; - @override - String get unwatchedOnlyDescription => - 'Includi solo gli episodi non guardati nella coda di riproduzione casuale'; - @override - String get shuffleOrderNavigation => 'Navigazione in ordine casuale'; - @override - String get shuffleOrderNavigationDescription => - 'I pulsanti Avanti/Indietro seguono l\'ordine casuale'; - @override - String get loopShuffleQueue => 'Coda di riproduzione casuale in loop'; - @override - String get loopShuffleQueueDescription => - 'Riavvia la coda quando raggiungi la fine'; - @override - String get videoPlayerControls => 'Controlli del lettore video'; - @override - String get keyboardShortcuts => 'Scorciatoie da tastiera'; - @override - String get keyboardShortcutsDescription => - 'Personalizza le scorciatoie da tastiera'; - @override - String get debugLogging => 'Log di debug'; - @override - String get debugLoggingDescription => - 'Abilita il logging dettagliato per la risoluzione dei problemi'; - @override - String get viewLogs => 'Visualizza log'; - @override - String get viewLogsDescription => 'Visualizza i log dell\'applicazione'; - @override - String get clearCache => 'Svuota cache'; - @override - String get clearCacheDescription => - 'Questa opzione cancellerà tutte le immagini e i dati memorizzati nella cache. Dopo aver cancellato la cache, l\'app potrebbe impiegare più tempo per caricare i contenuti.'; - @override - String get clearCacheSuccess => 'Cache cancellata correttamente'; - @override - String get resetSettings => 'Ripristina impostazioni'; - @override - String get resetSettingsDescription => - 'Questa opzione ripristinerà tutte le impostazioni ai valori predefiniti. Non può essere annullata.'; - @override - String get resetSettingsSuccess => 'Impostazioni ripristinate correttamente'; - @override - String get shortcutsReset => - 'Scorciatoie ripristinate alle impostazioni predefinite'; - @override - String get about => 'Informazioni'; - @override - String get aboutDescription => 'Informazioni sull\'app e le licenze'; - @override - String get updates => 'Aggiornamenti'; - @override - String get updateAvailable => 'Aggiornamento disponibile'; - @override - String get checkForUpdates => 'Controlla aggiornamenti'; - @override - String get validationErrorEnterNumber => 'Inserisci un numero valido'; - @override - String validationErrorDuration({ - required Object min, - required Object max, - required Object unit, - }) => 'la durata deve essere compresa tra ${min} e ${max} ${unit}'; - @override - String shortcutAlreadyAssigned({required Object action}) => - 'Scorciatoia già assegnata a ${action}'; - @override - String shortcutUpdated({required Object action}) => - 'Scorciatoia aggiornata per ${action}'; + // Translations + @override String get title => 'Impostazioni'; + @override String get language => 'Lingua'; + @override String get theme => 'Tema'; + @override String get appearance => 'Aspetto'; + @override String get videoPlayback => 'Riproduzione video'; + @override String get shufflePlay => 'Riproduzione casuale'; + @override String get advanced => 'Avanzate'; + @override String get useSeasonPostersDescription => 'Mostra il poster della stagione invece del poster della serie per gli episodi'; + @override String get showHeroSectionDescription => 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; + @override String get secondsLabel => 'Secondi'; + @override String get minutesLabel => 'Minuti'; + @override String get secondsShort => 's'; + @override String get minutesShort => 'm'; + @override String durationHint({required Object min, required Object max}) => 'Inserisci durata (${min}-${max})'; + @override String get systemTheme => 'Sistema'; + @override String get systemThemeDescription => 'Segui le impostazioni di sistema'; + @override String get lightTheme => 'Chiaro'; + @override String get darkTheme => 'Scuro'; + @override String get libraryDensity => 'Densità libreria'; + @override String get compact => 'Compatta'; + @override String get compactDescription => 'Schede più piccole, più elementi visibili'; + @override String get normal => 'Normale'; + @override String get normalDescription => 'Dimensione predefinita'; + @override String get comfortable => 'Comoda'; + @override String get comfortableDescription => 'Schede più grandi, meno elementi visibili'; + @override String get viewMode => 'Modalità di visualizzazione'; + @override String get gridView => 'Griglia'; + @override String get gridViewDescription => 'Visualizza gli elementi in un layout a griglia'; + @override String get listView => 'Elenco'; + @override String get listViewDescription => 'Visualizza gli elementi in un layout a elenco'; + @override String get useSeasonPosters => 'Usa poster delle stagioni'; + @override String get showHeroSection => 'Mostra sezione principale'; + @override String get hardwareDecoding => 'Decodifica Hardware'; + @override String get hardwareDecodingDescription => 'Utilizza l\'accelerazione hardware quando disponibile'; + @override String get bufferSize => 'Dimensione buffer'; + @override String bufferSizeMB({required Object size}) => '${size}MB'; + @override String get subtitleStyling => 'Stile sottotitoli'; + @override String get subtitleStylingDescription => 'Personalizza l\'aspetto dei sottotitoli'; + @override String get smallSkipDuration => 'Durata skip breve'; + @override String get largeSkipDuration => 'Durata skip lungo'; + @override String secondsUnit({required Object seconds}) => '${seconds} secondi'; + @override String get defaultSleepTimer => 'Timer spegnimento predefinito'; + @override String minutesUnit({required Object minutes}) => '${minutes} minuti'; + @override String get rememberTrackSelections => 'Ricorda selezioni tracce per serie/film'; + @override String get rememberTrackSelectionsDescription => 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; + @override String get unwatchedOnly => 'Solo non guardati'; + @override String get unwatchedOnlyDescription => 'Includi solo gli episodi non guardati nella coda di riproduzione casuale'; + @override String get shuffleOrderNavigation => 'Navigazione in ordine casuale'; + @override String get shuffleOrderNavigationDescription => 'I pulsanti Avanti/Indietro seguono l\'ordine casuale'; + @override String get loopShuffleQueue => 'Coda di riproduzione casuale in loop'; + @override String get loopShuffleQueueDescription => 'Riavvia la coda quando raggiungi la fine'; + @override String get videoPlayerControls => 'Controlli del lettore video'; + @override String get keyboardShortcuts => 'Scorciatoie da tastiera'; + @override String get keyboardShortcutsDescription => 'Personalizza le scorciatoie da tastiera'; + @override String get debugLogging => 'Log di debug'; + @override String get debugLoggingDescription => 'Abilita il logging dettagliato per la risoluzione dei problemi'; + @override String get viewLogs => 'Visualizza log'; + @override String get viewLogsDescription => 'Visualizza i log dell\'applicazione'; + @override String get clearCache => 'Svuota cache'; + @override String get clearCacheDescription => 'Questa opzione cancellerà tutte le immagini e i dati memorizzati nella cache. Dopo aver cancellato la cache, l\'app potrebbe impiegare più tempo per caricare i contenuti.'; + @override String get clearCacheSuccess => 'Cache cancellata correttamente'; + @override String get resetSettings => 'Ripristina impostazioni'; + @override String get resetSettingsDescription => 'Questa opzione ripristinerà tutte le impostazioni ai valori predefiniti. Non può essere annullata.'; + @override String get resetSettingsSuccess => 'Impostazioni ripristinate correttamente'; + @override String get shortcutsReset => 'Scorciatoie ripristinate alle impostazioni predefinite'; + @override String get about => 'Informazioni'; + @override String get aboutDescription => 'Informazioni sull\'app e le licenze'; + @override String get updates => 'Aggiornamenti'; + @override String get updateAvailable => 'Aggiornamento disponibile'; + @override String get checkForUpdates => 'Controlla aggiornamenti'; + @override String get validationErrorEnterNumber => 'Inserisci un numero valido'; + @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'la durata deve essere compresa tra ${min} e ${max} ${unit}'; + @override String shortcutAlreadyAssigned({required Object action}) => 'Scorciatoia già assegnata a ${action}'; + @override String shortcutUpdated({required Object action}) => 'Scorciatoia aggiornata per ${action}'; + @override String get autoSkip => 'Salto Automatico'; + @override String get autoSkipIntro => 'Salta Intro Automaticamente'; + @override String get autoSkipIntroDescription => 'Salta automaticamente i marcatori dell\'intro dopo alcuni secondi'; + @override String get autoSkipCredits => 'Salta Crediti Automaticamente'; + @override String get autoSkipCreditsDescription => 'Salta automaticamente i crediti e riproduci l\'episodio successivo'; + @override String get autoSkipDelay => 'Ritardo Salto Automatico'; + @override String autoSkipDelayDescription({required Object seconds}) => 'Aspetta ${seconds} secondi prima del salto automatico'; } // Path: search class _StringsSearchIt implements _StringsSearchEn { - _StringsSearchIt._(this._root); + _StringsSearchIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get hint => 'Cerca film. spettacoli, musica...'; - @override - String get tryDifferentTerm => 'Prova altri termini di ricerca'; - @override - String get searchYourMedia => 'Cerca nei tuoi media'; - @override - String get enterTitleActorOrKeyword => - 'Inserisci un titolo, attore o parola chiave'; + // Translations + @override String get hint => 'Cerca film. spettacoli, musica...'; + @override String get tryDifferentTerm => 'Prova altri termini di ricerca'; + @override String get searchYourMedia => 'Cerca nei tuoi media'; + @override String get enterTitleActorOrKeyword => 'Inserisci un titolo, attore o parola chiave'; } // Path: hotkeys class _StringsHotkeysIt implements _StringsHotkeysEn { - _StringsHotkeysIt._(this._root); + _StringsHotkeysIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String setShortcutFor({required Object actionName}) => - 'Imposta scorciatoia per ${actionName}'; - @override - String get clearShortcut => 'Elimina scorciatoia'; + // Translations + @override String setShortcutFor({required Object actionName}) => 'Imposta scorciatoia per ${actionName}'; + @override String get clearShortcut => 'Elimina scorciatoia'; } // Path: pinEntry class _StringsPinEntryIt implements _StringsPinEntryEn { - _StringsPinEntryIt._(this._root); + _StringsPinEntryIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get enterPin => 'Inserisci PIN'; - @override - String get showPin => 'Mostra PIN'; - @override - String get hidePin => 'Nascondi PIN'; + // Translations + @override String get enterPin => 'Inserisci PIN'; + @override String get showPin => 'Mostra PIN'; + @override String get hidePin => 'Nascondi PIN'; } // Path: fileInfo class _StringsFileInfoIt implements _StringsFileInfoEn { - _StringsFileInfoIt._(this._root); + _StringsFileInfoIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Info sul file'; - @override - String get video => 'Video'; - @override - String get audio => 'Audio'; - @override - String get file => 'File'; - @override - String get advanced => 'Avanzate'; - @override - String get codec => 'Codec'; - @override - String get resolution => 'Risoluzione'; - @override - String get bitrate => 'Bitrate'; - @override - String get frameRate => 'Frame Rate'; - @override - String get aspectRatio => 'Aspect Ratio'; - @override - String get profile => 'Profilo'; - @override - String get bitDepth => 'Profondità colore'; - @override - String get colorSpace => 'Spazio colore'; - @override - String get colorRange => 'Gamma colori'; - @override - String get colorPrimaries => 'Colori primari'; - @override - String get chromaSubsampling => 'Sottocampionamento cromatico'; - @override - String get channels => 'Canali'; - @override - String get path => 'Percorso'; - @override - String get size => 'Dimensione'; - @override - String get container => 'Contenitore'; - @override - String get duration => 'Durata'; - @override - String get optimizedForStreaming => 'Ottimizzato per lo streaming'; - @override - String get has64bitOffsets => 'Offset a 64-bit'; + // Translations + @override String get title => 'Info sul file'; + @override String get video => 'Video'; + @override String get audio => 'Audio'; + @override String get file => 'File'; + @override String get advanced => 'Avanzate'; + @override String get codec => 'Codec'; + @override String get resolution => 'Risoluzione'; + @override String get bitrate => 'Bitrate'; + @override String get frameRate => 'Frame Rate'; + @override String get aspectRatio => 'Aspect Ratio'; + @override String get profile => 'Profilo'; + @override String get bitDepth => 'Profondità colore'; + @override String get colorSpace => 'Spazio colore'; + @override String get colorRange => 'Gamma colori'; + @override String get colorPrimaries => 'Colori primari'; + @override String get chromaSubsampling => 'Sottocampionamento cromatico'; + @override String get channels => 'Canali'; + @override String get path => 'Percorso'; + @override String get size => 'Dimensione'; + @override String get container => 'Contenitore'; + @override String get duration => 'Durata'; + @override String get optimizedForStreaming => 'Ottimizzato per lo streaming'; + @override String get has64bitOffsets => 'Offset a 64-bit'; } // Path: mediaMenu class _StringsMediaMenuIt implements _StringsMediaMenuEn { - _StringsMediaMenuIt._(this._root); + _StringsMediaMenuIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get markAsWatched => 'Segna come visto'; - @override - String get markAsUnwatched => 'Segna come non visto'; - @override - String get removeFromContinueWatching => 'Rimuovi da Continua a guardare'; - @override - String get goToSeries => 'Vai alle serie'; - @override - String get goToSeason => 'Vai alla stagione'; - @override - String get shufflePlay => 'Riproduzione casuale'; - @override - String get fileInfo => 'Info sul file'; + // Translations + @override String get markAsWatched => 'Segna come visto'; + @override String get markAsUnwatched => 'Segna come non visto'; + @override String get removeFromContinueWatching => 'Rimuovi da Continua a guardare'; + @override String get goToSeries => 'Vai alle serie'; + @override String get goToSeason => 'Vai alla stagione'; + @override String get shufflePlay => 'Riproduzione casuale'; + @override String get fileInfo => 'Info sul file'; } // Path: accessibility class _StringsAccessibilityIt implements _StringsAccessibilityEn { - _StringsAccessibilityIt._(this._root); + _StringsAccessibilityIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String mediaCardMovie({required Object title}) => '${title}, film'; - @override - String mediaCardShow({required Object title}) => '${title}, serie TV'; - @override - String mediaCardEpisode({ - required Object title, - required Object episodeInfo, - }) => '${title}, ${episodeInfo}'; - @override - String mediaCardSeason({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - @override - String get mediaCardWatched => 'visto'; - @override - String mediaCardPartiallyWatched({required Object percent}) => - '${percent} percento visto'; - @override - String get mediaCardUnwatched => 'non visto'; - @override - String get tapToPlay => 'Tocca per riprodurre'; + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, film'; + @override String mediaCardShow({required Object title}) => '${title}, serie TV'; + @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + @override String get mediaCardWatched => 'visto'; + @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} percento visto'; + @override String get mediaCardUnwatched => 'non visto'; + @override String get tapToPlay => 'Tocca per riprodurre'; } // Path: tooltips class _StringsTooltipsIt implements _StringsTooltipsEn { - _StringsTooltipsIt._(this._root); + _StringsTooltipsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get shufflePlay => 'Riproduzione casuale'; - @override - String get markAsWatched => 'Segna come visto'; - @override - String get markAsUnwatched => 'Segna come non visto'; + // Translations + @override String get shufflePlay => 'Riproduzione casuale'; + @override String get markAsWatched => 'Segna come visto'; + @override String get markAsUnwatched => 'Segna come non visto'; } // Path: videoControls class _StringsVideoControlsIt implements _StringsVideoControlsEn { - _StringsVideoControlsIt._(this._root); + _StringsVideoControlsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get audioLabel => 'Audio'; - @override - String get subtitlesLabel => 'Sottotitoli'; - @override - String get resetToZero => 'Riporta a 0ms'; - @override - String addTime({required Object amount, required Object unit}) => - '+${amount}${unit}'; - @override - String minusTime({required Object amount, required Object unit}) => - '-${amount}${unit}'; - @override - String playsLater({required Object label}) => '${label} riprodotto dopo'; - @override - String playsEarlier({required Object label}) => '${label} riprodotto prima'; - @override - String get noOffset => 'Nessun offset'; - @override - String get letterbox => 'Letterbox'; - @override - String get fillScreen => 'Riempi schermo'; - @override - String get stretch => 'Allunga'; - @override - String get lockRotation => 'Blocca rotazione'; - @override - String get unlockRotation => 'Sblocca rotazione'; - @override - String get sleepTimer => 'Timer di spegnimento'; - @override - String get timerActive => 'Timer attivo'; - @override - String playbackWillPauseIn({required Object duration}) => - 'La riproduzione si interromperà tra ${duration}'; - @override - String get sleepTimerCompleted => - 'Timer di spegnimento completato - riproduzione in pausa'; - @override - String get playButton => 'Riproduci'; - @override - String get pauseButton => 'Pausa'; - @override - String seekBackwardButton({required Object seconds}) => - 'Riavvolgi di ${seconds} secondi'; - @override - String seekForwardButton({required Object seconds}) => - 'Avanza di ${seconds} secondi'; - @override - String get previousButton => 'Episodio precedente'; - @override - String get nextButton => 'Episodio successivo'; - @override - String get previousChapterButton => 'Capitolo precedente'; - @override - String get nextChapterButton => 'Capitolo successivo'; - @override - String get volumeButton => 'Volume'; - @override - String get muteButton => 'Silenzia'; - @override - String get unmuteButton => 'Riattiva audio'; - @override - String get settingsButton => 'Impostazioni video'; - @override - String get audioTrackButton => 'Tracce audio'; - @override - String get subtitlesButton => 'Sottotitoli'; - @override - String get chaptersButton => 'Capitoli'; - @override - String get versionsButton => 'Versioni video'; - @override - String get aspectRatioButton => 'Proporzioni'; - @override - String get fullscreenButton => 'Attiva schermo intero'; - @override - String get exitFullscreenButton => 'Esci da schermo intero'; - @override - String get rotationLockButton => 'Blocco rotazione'; - @override - String get timelineSlider => 'Timeline video'; - @override - String get volumeSlider => 'Livello volume'; - @override - String get backButton => 'Indietro'; + // Translations + @override String get audioLabel => 'Audio'; + @override String get subtitlesLabel => 'Sottotitoli'; + @override String get resetToZero => 'Riporta a 0ms'; + @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + @override String playsLater({required Object label}) => '${label} riprodotto dopo'; + @override String playsEarlier({required Object label}) => '${label} riprodotto prima'; + @override String get noOffset => 'Nessun offset'; + @override String get letterbox => 'Letterbox'; + @override String get fillScreen => 'Riempi schermo'; + @override String get stretch => 'Allunga'; + @override String get lockRotation => 'Blocca rotazione'; + @override String get unlockRotation => 'Sblocca rotazione'; + @override String get sleepTimer => 'Timer di spegnimento'; + @override String get timerActive => 'Timer attivo'; + @override String playbackWillPauseIn({required Object duration}) => 'La riproduzione si interromperà tra ${duration}'; + @override String get sleepTimerCompleted => 'Timer di spegnimento completato - riproduzione in pausa'; + @override String get playButton => 'Riproduci'; + @override String get pauseButton => 'Pausa'; + @override String seekBackwardButton({required Object seconds}) => 'Riavvolgi di ${seconds} secondi'; + @override String seekForwardButton({required Object seconds}) => 'Avanza di ${seconds} secondi'; + @override String get previousButton => 'Episodio precedente'; + @override String get nextButton => 'Episodio successivo'; + @override String get previousChapterButton => 'Capitolo precedente'; + @override String get nextChapterButton => 'Capitolo successivo'; + @override String get volumeButton => 'Volume'; + @override String get muteButton => 'Silenzia'; + @override String get unmuteButton => 'Riattiva audio'; + @override String get settingsButton => 'Impostazioni video'; + @override String get audioTrackButton => 'Tracce audio'; + @override String get subtitlesButton => 'Sottotitoli'; + @override String get chaptersButton => 'Capitoli'; + @override String get versionsButton => 'Versioni video'; + @override String get aspectRatioButton => 'Proporzioni'; + @override String get fullscreenButton => 'Attiva schermo intero'; + @override String get exitFullscreenButton => 'Esci da schermo intero'; + @override String get rotationLockButton => 'Blocco rotazione'; + @override String get timelineSlider => 'Timeline video'; + @override String get volumeSlider => 'Livello volume'; + @override String get backButton => 'Indietro'; } // Path: userStatus class _StringsUserStatusIt implements _StringsUserStatusEn { - _StringsUserStatusIt._(this._root); + _StringsUserStatusIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get admin => 'Admin'; - @override - String get restricted => 'Limitato'; - @override - String get protected => 'Protetto'; - @override - String get current => 'ATTUALE'; + // Translations + @override String get admin => 'Admin'; + @override String get restricted => 'Limitato'; + @override String get protected => 'Protetto'; + @override String get current => 'ATTUALE'; } // Path: messages class _StringsMessagesIt implements _StringsMessagesEn { - _StringsMessagesIt._(this._root); + _StringsMessagesIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get markedAsWatched => 'Segna come visto'; - @override - String get markedAsUnwatched => 'Segna come non visto'; - @override - String get removedFromContinueWatching => 'Rimosso da Continua a guardare'; - @override - String errorLoading({required Object error}) => 'Errore: ${error}'; - @override - String get fileInfoNotAvailable => 'Informazioni sul file non disponibili'; - @override - String errorLoadingFileInfo({required Object error}) => - 'Errore caricamento informazioni sul file: ${error}'; - @override - String get errorLoadingSeries => 'Errore caricamento serie'; - @override - String get errorLoadingSeason => 'Errore caricamento stagione'; - @override - String get musicNotSupported => - 'La riproduzione musicale non è ancora supportata'; - @override - String get logsCleared => 'Log eliminati'; - @override - String get logsCopied => 'Log copiati negli appunti'; - @override - String get noLogsAvailable => 'Nessun log disponibile'; - @override - String libraryScanning({required Object title}) => 'Scansione "${title}"...'; - @override - String libraryScanStarted({required Object title}) => - 'Scansione libreria iniziata per "${title}"'; - @override - String libraryScanFailed({required Object error}) => - 'Impossibile eseguire scansione della libreria: ${error}'; - @override - String metadataRefreshing({required Object title}) => - 'Aggiornamento metadati per "${title}"...'; - @override - String metadataRefreshStarted({required Object title}) => - 'Aggiornamento metadati per "${title}"'; - @override - String metadataRefreshFailed({required Object error}) => - 'Errore aggiornamento metadati: ${error}'; - @override - String get noPlexToken => 'Nessun token Plex trovato. Riesegui l\'accesso.'; - @override - String get logoutConfirm => 'Sei sicuro di volerti disconnettere?'; - @override - String get noSeasonsFound => 'Nessuna stagione trovata'; - @override - String get noEpisodesFound => 'Nessun episodio trovato nella prima stagione'; - @override - String get noEpisodesFoundGeneral => 'Nessun episodio trovato'; - @override - String get noResultsFound => 'Nessun risultato'; - @override - String sleepTimerSet({required Object label}) => - 'Imposta timer spegnimento per ${label}'; - @override - String failedToSwitchProfile({required Object displayName}) => - 'Impossibile passare a ${displayName}'; - @override - String get noItemsAvailable => 'Nessun elemento disponibile'; - @override - String get failedToCreatePlayQueue => - 'Impossibile creare la coda di riproduzione'; - @override - String get failedToCreatePlayQueueNoItems => - 'Impossibile creare la coda di riproduzione - nessun elemento'; - @override - String failedPlayback({required Object action, required Object error}) => - 'Impossibile ${action}: ${error}'; + // Translations + @override String get markedAsWatched => 'Segna come visto'; + @override String get markedAsUnwatched => 'Segna come non visto'; + @override String get removedFromContinueWatching => 'Rimosso da Continua a guardare'; + @override String errorLoading({required Object error}) => 'Errore: ${error}'; + @override String get fileInfoNotAvailable => 'Informazioni sul file non disponibili'; + @override String errorLoadingFileInfo({required Object error}) => 'Errore caricamento informazioni sul file: ${error}'; + @override String get errorLoadingSeries => 'Errore caricamento serie'; + @override String get errorLoadingSeason => 'Errore caricamento stagione'; + @override String get musicNotSupported => 'La riproduzione musicale non è ancora supportata'; + @override String get logsCleared => 'Log eliminati'; + @override String get logsCopied => 'Log copiati negli appunti'; + @override String get noLogsAvailable => 'Nessun log disponibile'; + @override String libraryScanning({required Object title}) => 'Scansione "${title}"...'; + @override String libraryScanStarted({required Object title}) => 'Scansione libreria iniziata per "${title}"'; + @override String libraryScanFailed({required Object error}) => 'Impossibile eseguire scansione della libreria: ${error}'; + @override String metadataRefreshing({required Object title}) => 'Aggiornamento metadati per "${title}"...'; + @override String metadataRefreshStarted({required Object title}) => 'Aggiornamento metadati per "${title}"'; + @override String metadataRefreshFailed({required Object error}) => 'Errore aggiornamento metadati: ${error}'; + @override String get noPlexToken => 'Nessun token Plex trovato. Riesegui l\'accesso.'; + @override String get logoutConfirm => 'Sei sicuro di volerti disconnettere?'; + @override String get noSeasonsFound => 'Nessuna stagione trovata'; + @override String get noEpisodesFound => 'Nessun episodio trovato nella prima stagione'; + @override String get noEpisodesFoundGeneral => 'Nessun episodio trovato'; + @override String get noResultsFound => 'Nessun risultato'; + @override String sleepTimerSet({required Object label}) => 'Imposta timer spegnimento per ${label}'; + @override String failedToSwitchProfile({required Object displayName}) => 'Impossibile passare a ${displayName}'; + @override String get noItemsAvailable => 'Nessun elemento disponibile'; + @override String get failedToCreatePlayQueue => 'Impossibile creare la coda di riproduzione'; + @override String get failedToCreatePlayQueueNoItems => 'Impossibile creare la coda di riproduzione - nessun elemento'; + @override String failedPlayback({required Object action, required Object error}) => 'Impossibile ${action}: ${error}'; } // Path: profile class _StringsProfileIt implements _StringsProfileEn { - _StringsProfileIt._(this._root); + _StringsProfileIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get noUsersAvailable => 'Nessun utente disponibile'; + // Translations + @override String get noUsersAvailable => 'Nessun utente disponibile'; } // Path: subtitlingStyling class _StringsSubtitlingStylingIt implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingIt._(this._root); + _StringsSubtitlingStylingIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get stylingOptions => 'Opzioni stile'; - @override - String get fontSize => 'Dimensione'; - @override - String get textColor => 'Colore testo'; - @override - String get borderSize => 'Dimensione bordo'; - @override - String get borderColor => 'Colore bordo'; - @override - String get backgroundOpacity => 'Opacità sfondo'; - @override - String get backgroundColor => 'Colore sfondo'; + // Translations + @override String get stylingOptions => 'Opzioni stile'; + @override String get fontSize => 'Dimensione'; + @override String get textColor => 'Colore testo'; + @override String get borderSize => 'Dimensione bordo'; + @override String get borderColor => 'Colore bordo'; + @override String get backgroundOpacity => 'Opacità sfondo'; + @override String get backgroundColor => 'Colore sfondo'; } // Path: dialog class _StringsDialogIt implements _StringsDialogEn { - _StringsDialogIt._(this._root); + _StringsDialogIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get confirmAction => 'Conferma azione'; - @override - String get areYouSure => 'Sei sicuro di voler eseguire questa azione?'; - @override - String get cancel => 'Cancella'; - @override - String get playNow => 'Riproduci ora'; + // Translations + @override String get confirmAction => 'Conferma azione'; + @override String get areYouSure => 'Sei sicuro di voler eseguire questa azione?'; + @override String get cancel => 'Cancella'; + @override String get playNow => 'Riproduci ora'; } // Path: discover class _StringsDiscoverIt implements _StringsDiscoverEn { - _StringsDiscoverIt._(this._root); + _StringsDiscoverIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Esplora'; - @override - String get switchProfile => 'Cambia profilo'; - @override - String get switchServer => 'Cambia server'; - @override - String get logout => 'Disconnetti'; - @override - String get noContentAvailable => 'Nessun contenuto disponibile'; - @override - String get addMediaToLibraries => - 'Aggiungi alcuni file multimediali alle tue librerie'; - @override - String get continueWatching => 'Continua a guardare'; - @override - String get recentlyAdded => 'Aggiunti di recente'; - @override - String get play => 'Riproduci'; - @override - String get resume => 'Riprendi'; - @override - String playEpisode({required Object season, required Object episode}) => - 'Riproduci S${season}, E${episode}'; - @override - String resumeEpisode({required Object season, required Object episode}) => - 'Riprendi S${season}, E${episode}'; - @override - String get pause => 'Pausa'; - @override - String get overview => 'Panoramica'; - @override - String get cast => 'Attori'; - @override - String get seasons => 'Stagioni'; - @override - String get studio => 'Studio'; - @override - String get rating => 'Classificazione'; - @override - String get watched => 'Guardato'; - @override - String episodeCount({required Object count}) => '${count} episodi'; - @override - String watchedProgress({required Object watched, required Object total}) => - '${watched}/${total} guardati'; - @override - String get movie => 'Film'; - @override - String get tvShow => 'Serie TV'; - @override - String minutesLeft({required Object minutes}) => - '${minutes} minuti rimanenti'; + // Translations + @override String get title => 'Esplora'; + @override String get switchProfile => 'Cambia profilo'; + @override String get switchServer => 'Cambia server'; + @override String get logout => 'Disconnetti'; + @override String get noContentAvailable => 'Nessun contenuto disponibile'; + @override String get addMediaToLibraries => 'Aggiungi alcuni file multimediali alle tue librerie'; + @override String get continueWatching => 'Continua a guardare'; + @override String get recentlyAdded => 'Aggiunti di recente'; + @override String get play => 'Riproduci'; + @override String get resume => 'Riprendi'; + @override String playEpisode({required Object season, required Object episode}) => 'Riproduci S${season}, E${episode}'; + @override String resumeEpisode({required Object season, required Object episode}) => 'Riprendi S${season}, E${episode}'; + @override String get pause => 'Pausa'; + @override String get overview => 'Panoramica'; + @override String get cast => 'Attori'; + @override String get seasons => 'Stagioni'; + @override String get studio => 'Studio'; + @override String get rating => 'Classificazione'; + @override String get watched => 'Guardato'; + @override String episodeCount({required Object count}) => '${count} episodi'; + @override String watchedProgress({required Object watched, required Object total}) => '${watched}/${total} guardati'; + @override String get movie => 'Film'; + @override String get tvShow => 'Serie TV'; + @override String minutesLeft({required Object minutes}) => '${minutes} minuti rimanenti'; } // Path: errors class _StringsErrorsIt implements _StringsErrorsEn { - _StringsErrorsIt._(this._root); + _StringsErrorsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String searchFailed({required Object error}) => 'Ricerca fallita: ${error}'; - @override - String connectionTimeout({required Object context}) => - 'Timeout connessione durante caricamento di ${context}'; - @override - String get connectionFailed => 'Impossibile connettersi al server Plex.'; - @override - String failedToLoad({required Object context, required Object error}) => - 'Impossibile caricare ${context}: ${error}'; - @override - String get noClientAvailable => 'Nessun client disponibile'; - @override - String authenticationFailed({required Object error}) => - 'Autenticazione fallita: ${error}'; - @override - String get couldNotLaunchUrl => 'Impossibile avviare URL di autenticazione'; - @override - String get pleaseEnterToken => 'Inserisci token'; - @override - String get invalidToken => 'Token non valido'; - @override - String failedToVerifyToken({required Object error}) => - 'Verifica token fallita: ${error}'; - @override - String failedToSwitchProfile({required Object displayName}) => - 'Impossibile passare a ${displayName}'; - @override - String get connectionFailedGeneric => 'Connessione fallita'; + // Translations + @override String searchFailed({required Object error}) => 'Ricerca fallita: ${error}'; + @override String connectionTimeout({required Object context}) => 'Timeout connessione durante caricamento di ${context}'; + @override String get connectionFailed => 'Impossibile connettersi al server Plex.'; + @override String failedToLoad({required Object context, required Object error}) => 'Impossibile caricare ${context}: ${error}'; + @override String get noClientAvailable => 'Nessun client disponibile'; + @override String authenticationFailed({required Object error}) => 'Autenticazione fallita: ${error}'; + @override String get couldNotLaunchUrl => 'Impossibile avviare URL di autenticazione'; + @override String get pleaseEnterToken => 'Inserisci token'; + @override String get invalidToken => 'Token non valido'; + @override String failedToVerifyToken({required Object error}) => 'Verifica token fallita: ${error}'; + @override String failedToSwitchProfile({required Object displayName}) => 'Impossibile passare a ${displayName}'; + @override String get connectionFailedGeneric => 'Connessione fallita'; } // Path: libraries class _StringsLibrariesIt implements _StringsLibrariesEn { - _StringsLibrariesIt._(this._root); + _StringsLibrariesIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Librerie'; - @override - String get scanLibraryFiles => 'Scansiona file libreria'; - @override - String get scanLibrary => 'Scansiona libreria'; - @override - String get analyze => 'Analizza'; - @override - String get analyzeLibrary => 'Analizza libreria'; - @override - String get refreshMetadata => 'Aggiorna metadati'; - @override - String get emptyTrash => 'Svuota cestino'; - @override - String emptyingTrash({required Object title}) => - 'Svuotamento cestino per "${title}"...'; - @override - String trashEmptied({required Object title}) => - 'Cestino svuotato per "${title}"'; - @override - String failedToEmptyTrash({required Object error}) => - 'Impossibile svuotare cestino: ${error}'; - @override - String analyzing({required Object title}) => 'Analisi "${title}"...'; - @override - String analysisStarted({required Object title}) => - 'Analisi iniziata per "${title}"'; - @override - String failedToAnalyze({required Object error}) => - 'Impossibile analizzare libreria: ${error}'; - @override - String get noLibrariesFound => 'Nessuna libreria trovata'; - @override - String get thisLibraryIsEmpty => 'Questa libreria è vuota'; - @override - String get all => 'Tutto'; - @override - String get clearAll => 'Cancella tutto'; - @override - String scanLibraryConfirm({required Object title}) => - 'Sei sicuro di voler scansionare "${title}"?'; - @override - String analyzeLibraryConfirm({required Object title}) => - 'Sei sicuro di voler analizzare "${title}"?'; - @override - String refreshMetadataConfirm({required Object title}) => - 'Sei sicuro di voler aggiornare i metadati per "${title}"?'; - @override - String emptyTrashConfirm({required Object title}) => - 'Sei sicuro di voler svuotare il cestino per "${title}"?'; - @override - String get manageLibraries => 'Gestisci librerie'; - @override - String get sort => 'Ordina'; - @override - String get sortBy => 'Ordina per'; - @override - String get filters => 'Filtri'; - @override - String loadingLibraryWithCount({required Object count}) => - 'Caricamento librerie... (${count} oggetti caricati)'; - @override - String get confirmActionMessage => - 'Sei sicuro di voler eseguire questa azione?'; - @override - String get showLibrary => 'Mostra libreria'; - @override - String get hideLibrary => 'Nascondi libreria'; - @override - String get libraryOptions => 'Opzioni libreria'; - @override - String get content => 'contenuto della libreria'; - @override - String get selectLibrary => 'Seleziona libreria'; - @override - String filtersWithCount({required Object count}) => 'Filtri (${count})'; - @override - String get noRecommendations => 'Nessun consiglio disponibile'; - @override - String get noCollections => 'Nessuna raccolta in questa libreria'; - @override - String get noFoldersFound => 'Nessuna cartella trovata'; - @override - String get folders => 'cartelle'; - @override - late final _StringsLibrariesTabsIt tabs = _StringsLibrariesTabsIt._(_root); - @override - late final _StringsLibrariesGroupingsIt groupings = - _StringsLibrariesGroupingsIt._(_root); + // Translations + @override String get title => 'Librerie'; + @override String get scanLibraryFiles => 'Scansiona file libreria'; + @override String get scanLibrary => 'Scansiona libreria'; + @override String get analyze => 'Analizza'; + @override String get analyzeLibrary => 'Analizza libreria'; + @override String get refreshMetadata => 'Aggiorna metadati'; + @override String get emptyTrash => 'Svuota cestino'; + @override String emptyingTrash({required Object title}) => 'Svuotamento cestino per "${title}"...'; + @override String trashEmptied({required Object title}) => 'Cestino svuotato per "${title}"'; + @override String failedToEmptyTrash({required Object error}) => 'Impossibile svuotare cestino: ${error}'; + @override String analyzing({required Object title}) => 'Analisi "${title}"...'; + @override String analysisStarted({required Object title}) => 'Analisi iniziata per "${title}"'; + @override String failedToAnalyze({required Object error}) => 'Impossibile analizzare libreria: ${error}'; + @override String get noLibrariesFound => 'Nessuna libreria trovata'; + @override String get thisLibraryIsEmpty => 'Questa libreria è vuota'; + @override String get all => 'Tutto'; + @override String get clearAll => 'Cancella tutto'; + @override String scanLibraryConfirm({required Object title}) => 'Sei sicuro di voler scansionare "${title}"?'; + @override String analyzeLibraryConfirm({required Object title}) => 'Sei sicuro di voler analizzare "${title}"?'; + @override String refreshMetadataConfirm({required Object title}) => 'Sei sicuro di voler aggiornare i metadati per "${title}"?'; + @override String emptyTrashConfirm({required Object title}) => 'Sei sicuro di voler svuotare il cestino per "${title}"?'; + @override String get manageLibraries => 'Gestisci librerie'; + @override String get sort => 'Ordina'; + @override String get sortBy => 'Ordina per'; + @override String get filters => 'Filtri'; + @override String loadingLibraryWithCount({required Object count}) => 'Caricamento librerie... (${count} oggetti caricati)'; + @override String get confirmActionMessage => 'Sei sicuro di voler eseguire questa azione?'; + @override String get showLibrary => 'Mostra libreria'; + @override String get hideLibrary => 'Nascondi libreria'; + @override String get libraryOptions => 'Opzioni libreria'; + @override String get content => 'contenuto della libreria'; + @override String get selectLibrary => 'Seleziona libreria'; + @override String filtersWithCount({required Object count}) => 'Filtri (${count})'; + @override String get noRecommendations => 'Nessun consiglio disponibile'; + @override String get noCollections => 'Nessuna raccolta in questa libreria'; + @override String get noFoldersFound => 'Nessuna cartella trovata'; + @override String get folders => 'cartelle'; + @override late final _StringsLibrariesTabsIt tabs = _StringsLibrariesTabsIt._(_root); + @override late final _StringsLibrariesGroupingsIt groupings = _StringsLibrariesGroupingsIt._(_root); } // Path: about class _StringsAboutIt implements _StringsAboutEn { - _StringsAboutIt._(this._root); + _StringsAboutIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Informazioni'; - @override - String get openSourceLicenses => 'Licenze Open Source'; - @override - String versionLabel({required Object version}) => 'Versione ${version}'; - @override - String get appDescription => 'Un bellissimo client Plex per Flutter'; - @override - String get viewLicensesDescription => - 'Visualizza le licenze delle librerie di terze parti'; + // Translations + @override String get title => 'Informazioni'; + @override String get openSourceLicenses => 'Licenze Open Source'; + @override String versionLabel({required Object version}) => 'Versione ${version}'; + @override String get appDescription => 'Un bellissimo client Plex per Flutter'; + @override String get viewLicensesDescription => 'Visualizza le licenze delle librerie di terze parti'; } // Path: serverSelection class _StringsServerSelectionIt implements _StringsServerSelectionEn { - _StringsServerSelectionIt._(this._root); + _StringsServerSelectionIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get connectingToServer => 'Connessione al server...'; - @override - String get connectingToAllServers => 'Connessione a tutti i server...'; - @override - String get connectToAllServers => 'Connetti a tutti i server'; - @override - String get allServerConnectionsFailed => - 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.'; - @override - String foundServers({required Object count}) => 'Trovati ${count} server'; - @override - String get orSelectIndividually => - 'Oppure seleziona un server singolarmente:'; - @override - String get serverDebugCopied => - 'Dati di debug del server copiati negli appunti'; - @override - String get copyDebugData => 'Copia dati di debug'; - @override - String get noServersFound => 'Nessun server trovato'; - @override - String malformedServerData({required Object count}) => - 'Trovato ${count} server con dati difettosi. Nessun server valido disponibile.'; - @override - String get incompleteServerInfo => - 'Alcuni server presentano informazioni incomplete e sono stati ignorati. Controlla il tuo account Plex.tv.'; - @override - String get incompleteConnectionInfo => - 'Le informazioni di connessione al server sono incomplete. Riprova.'; - @override - String malformedServerInfo({required Object message}) => - 'Le informazioni sul server sono errate: ${message}'; - @override - String get networkConnectionFailed => - 'Connessione di rete non riuscita. Controlla la tua connessione Internet e riprova.'; - @override - String get authenticationFailed => - 'Autenticazione fallita. Effettua nuovamente l\'accesso.'; - @override - String get plexServiceUnavailable => - 'Servizio Plex non disponibile. Riprova più tardi.'; - @override - String failedToLoadServers({required Object error}) => - 'Impossibile caricare i server: ${error}'; + // Translations + @override String get connectingToServer => 'Connessione al server...'; + @override String get connectingToAllServers => 'Connessione a tutti i server...'; + @override String get connectToAllServers => 'Connetti a tutti i server'; + @override String get allServerConnectionsFailed => 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.'; + @override String foundServers({required Object count}) => 'Trovati ${count} server'; + @override String get orSelectIndividually => 'Oppure seleziona un server singolarmente:'; + @override String get serverDebugCopied => 'Dati di debug del server copiati negli appunti'; + @override String get copyDebugData => 'Copia dati di debug'; + @override String get noServersFound => 'Nessun server trovato'; + @override String malformedServerData({required Object count}) => 'Trovato ${count} server con dati difettosi. Nessun server valido disponibile.'; + @override String get incompleteServerInfo => 'Alcuni server presentano informazioni incomplete e sono stati ignorati. Controlla il tuo account Plex.tv.'; + @override String get incompleteConnectionInfo => 'Le informazioni di connessione al server sono incomplete. Riprova.'; + @override String malformedServerInfo({required Object message}) => 'Le informazioni sul server sono errate: ${message}'; + @override String get networkConnectionFailed => 'Connessione di rete non riuscita. Controlla la tua connessione Internet e riprova.'; + @override String get authenticationFailed => 'Autenticazione fallita. Effettua nuovamente l\'accesso.'; + @override String get plexServiceUnavailable => 'Servizio Plex non disponibile. Riprova più tardi.'; + @override String failedToLoadServers({required Object error}) => 'Impossibile caricare i server: ${error}'; } // Path: hubDetail class _StringsHubDetailIt implements _StringsHubDetailEn { - _StringsHubDetailIt._(this._root); + _StringsHubDetailIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Titolo'; - @override - String get releaseYear => 'Anno rilascio'; - @override - String get dateAdded => 'Data aggiunta'; - @override - String get rating => 'Valutazione'; - @override - String get noItemsFound => 'Nessun elemento trovato'; + // Translations + @override String get title => 'Titolo'; + @override String get releaseYear => 'Anno rilascio'; + @override String get dateAdded => 'Data aggiunta'; + @override String get rating => 'Valutazione'; + @override String get noItemsFound => 'Nessun elemento trovato'; } // Path: logs class _StringsLogsIt implements _StringsLogsEn { - _StringsLogsIt._(this._root); + _StringsLogsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Registro'; - @override - String get clearLogs => 'Cancella log'; - @override - String get copyLogs => 'Copia log'; - @override - String get exportLogs => 'Esporta log'; - @override - String get noLogsToShow => 'Nessun log da mostrare'; - @override - String get error => 'Errore:'; - @override - String get stackTrace => 'Traccia dello stack:'; + // Translations + @override String get title => 'Registro'; + @override String get clearLogs => 'Cancella log'; + @override String get copyLogs => 'Copia log'; + @override String get exportLogs => 'Esporta log'; + @override String get noLogsToShow => 'Nessun log da mostrare'; + @override String get error => 'Errore:'; + @override String get stackTrace => 'Traccia dello stack:'; } // Path: licenses class _StringsLicensesIt implements _StringsLicensesEn { - _StringsLicensesIt._(this._root); + _StringsLicensesIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get relatedPackages => 'Pacchetti correlati'; - @override - String get license => 'Licenza'; - @override - String licenseNumber({required Object number}) => 'Licenza ${number}'; - @override - String licensesCount({required Object count}) => '${count} licenze'; + // Translations + @override String get relatedPackages => 'Pacchetti correlati'; + @override String get license => 'Licenza'; + @override String licenseNumber({required Object number}) => 'Licenza ${number}'; + @override String licensesCount({required Object count}) => '${count} licenze'; } // Path: navigation class _StringsNavigationIt implements _StringsNavigationEn { - _StringsNavigationIt._(this._root); + _StringsNavigationIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get home => 'Home'; - @override - String get search => 'Cerca'; - @override - String get libraries => 'Librerie'; - @override - String get settings => 'Impostazioni'; + // Translations + @override String get home => 'Home'; + @override String get search => 'Cerca'; + @override String get libraries => 'Librerie'; + @override String get settings => 'Impostazioni'; } // Path: playlists class _StringsPlaylistsIt implements _StringsPlaylistsEn { - _StringsPlaylistsIt._(this._root); + _StringsPlaylistsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Playlist'; - @override - String get noPlaylists => 'Nessuna playlist trovata'; - @override - String get create => 'Crea playlist'; - @override - String get newPlaylist => 'Nuova playlist'; - @override - String get playlistName => 'Nome playlist'; - @override - String get enterPlaylistName => 'Inserisci nome playlist'; - @override - String get edit => 'Modifica playlist'; - @override - String get delete => 'Elimina playlist'; - @override - String get addTo => 'Aggiungi a playlist'; - @override - String get addItems => 'Aggiungi elementi'; - @override - String get removeItem => 'Rimuovi da playlist'; - @override - String get clearPlaylist => 'Svuota playlist'; - @override - String get playAll => 'Riproduci tutto'; - @override - String get shuffle => 'Casuale'; - @override - String get smartPlaylist => 'Playlist intelligente'; - @override - String get regularPlaylist => 'Playlist normale'; - @override - String itemCount({required Object count}) => '${count} elementi'; - @override - String get oneItem => '1 elemento'; - @override - String get emptyPlaylist => 'Questa playlist è vuota'; - @override - String get deleteConfirm => 'Eliminare playlist?'; - @override - String deleteMessage({required Object name}) => - 'Sei sicuro di voler eliminare "${name}"?'; - @override - String get created => 'Playlist creata'; - @override - String get updated => 'Playlist aggiornata'; - @override - String get deleted => 'Playlist eliminata'; - @override - String get itemAdded => 'Aggiunto alla playlist'; - @override - String get itemRemoved => 'Rimosso dalla playlist'; - @override - String get selectPlaylist => 'Seleziona playlist'; - @override - String get createNewPlaylist => 'Crea nuova playlist'; - @override - String get errorCreating => 'Errore durante la creazione della playlist'; - @override - String get errorDeleting => 'Errore durante l\'eliminazione della playlist'; - @override - String get errorLoading => 'Errore durante il caricamento delle playlist'; - @override - String get errorAdding => 'Errore durante l\'aggiunta alla playlist'; - @override - String get errorReordering => - 'Errore durante il riordino dell\'elemento della playlist'; - @override - String get errorRemoving => 'Errore durante la rimozione dalla playlist'; - @override - String get playlist => 'Playlist'; + // Translations + @override String get title => 'Playlist'; + @override String get noPlaylists => 'Nessuna playlist trovata'; + @override String get create => 'Crea playlist'; + @override String get newPlaylist => 'Nuova playlist'; + @override String get playlistName => 'Nome playlist'; + @override String get enterPlaylistName => 'Inserisci nome playlist'; + @override String get edit => 'Modifica playlist'; + @override String get delete => 'Elimina playlist'; + @override String get addTo => 'Aggiungi a playlist'; + @override String get addItems => 'Aggiungi elementi'; + @override String get removeItem => 'Rimuovi da playlist'; + @override String get clearPlaylist => 'Svuota playlist'; + @override String get playAll => 'Riproduci tutto'; + @override String get shuffle => 'Casuale'; + @override String get smartPlaylist => 'Playlist intelligente'; + @override String get regularPlaylist => 'Playlist normale'; + @override String itemCount({required Object count}) => '${count} elementi'; + @override String get oneItem => '1 elemento'; + @override String get emptyPlaylist => 'Questa playlist è vuota'; + @override String get deleteConfirm => 'Eliminare playlist?'; + @override String deleteMessage({required Object name}) => 'Sei sicuro di voler eliminare "${name}"?'; + @override String get created => 'Playlist creata'; + @override String get updated => 'Playlist aggiornata'; + @override String get deleted => 'Playlist eliminata'; + @override String get itemAdded => 'Aggiunto alla playlist'; + @override String get itemRemoved => 'Rimosso dalla playlist'; + @override String get selectPlaylist => 'Seleziona playlist'; + @override String get createNewPlaylist => 'Crea nuova playlist'; + @override String get errorCreating => 'Errore durante la creazione della playlist'; + @override String get errorDeleting => 'Errore durante l\'eliminazione della playlist'; + @override String get errorLoading => 'Errore durante il caricamento delle playlist'; + @override String get errorAdding => 'Errore durante l\'aggiunta alla playlist'; + @override String get errorReordering => 'Errore durante il riordino dell\'elemento della playlist'; + @override String get errorRemoving => 'Errore durante la rimozione dalla playlist'; + @override String get playlist => 'Playlist'; } // Path: collections class _StringsCollectionsIt implements _StringsCollectionsEn { - _StringsCollectionsIt._(this._root); + _StringsCollectionsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get title => 'Raccolte'; - @override - String get collection => 'Raccolta'; - @override - String get empty => 'La raccolta è vuota'; - @override - String get noItems => 'Nessun elemento in questa raccolta'; - @override - String get unknownLibrarySection => - 'Impossibile eliminare: sezione libreria sconosciuta'; - @override - String get deleteCollection => 'Elimina raccolta'; - @override - String deleteConfirm({required Object title}) => - 'Sei sicuro di voler eliminare "${title}"? Questa azione non può essere annullata.'; - @override - String get deleted => 'Raccolta eliminata'; - @override - String get deleteFailed => 'Impossibile eliminare la raccolta'; - @override - String deleteFailedWithError({required Object error}) => - 'Impossibile eliminare la raccolta: ${error}'; - @override - String failedToLoadItems({required Object error}) => - 'Impossibile caricare gli elementi della raccolta: ${error}'; - @override - String get addTo => 'Aggiungi alla raccolta'; - @override - String get selectCollection => 'Seleziona raccolta'; - @override - String get createNewCollection => 'Crea nuova raccolta'; - @override - String get collectionName => 'Nome raccolta'; - @override - String get enterCollectionName => 'Inserisci nome raccolta'; - @override - String get addedToCollection => 'Aggiunto alla raccolta'; - @override - String get errorAddingToCollection => 'Errore nell\'aggiunta alla raccolta'; - @override - String get created => 'Raccolta creata'; - @override - String get removeFromCollection => 'Rimuovi dalla raccolta'; - @override - String removeFromCollectionConfirm({required Object title}) => - 'Rimuovere "${title}" da questa raccolta?'; - @override - String get removedFromCollection => 'Rimosso dalla raccolta'; - @override - String get removeFromCollectionFailed => - 'Impossibile rimuovere dalla raccolta'; - @override - String removeFromCollectionError({required Object error}) => - 'Errore durante la rimozione dalla raccolta: ${error}'; + // Translations + @override String get title => 'Raccolte'; + @override String get collection => 'Raccolta'; + @override String get empty => 'La raccolta è vuota'; + @override String get noItems => 'Nessun elemento in questa raccolta'; + @override String get unknownLibrarySection => 'Impossibile eliminare: sezione libreria sconosciuta'; + @override String get deleteCollection => 'Elimina raccolta'; + @override String deleteConfirm({required Object title}) => 'Sei sicuro di voler eliminare "${title}"? Questa azione non può essere annullata.'; + @override String get deleted => 'Raccolta eliminata'; + @override String get deleteFailed => 'Impossibile eliminare la raccolta'; + @override String deleteFailedWithError({required Object error}) => 'Impossibile eliminare la raccolta: ${error}'; + @override String failedToLoadItems({required Object error}) => 'Impossibile caricare gli elementi della raccolta: ${error}'; + @override String get addTo => 'Aggiungi alla raccolta'; + @override String get selectCollection => 'Seleziona raccolta'; + @override String get createNewCollection => 'Crea nuova raccolta'; + @override String get collectionName => 'Nome raccolta'; + @override String get enterCollectionName => 'Inserisci nome raccolta'; + @override String get addedToCollection => 'Aggiunto alla raccolta'; + @override String get errorAddingToCollection => 'Errore nell\'aggiunta alla raccolta'; + @override String get created => 'Raccolta creata'; + @override String get removeFromCollection => 'Rimuovi dalla raccolta'; + @override String removeFromCollectionConfirm({required Object title}) => 'Rimuovere "${title}" da questa raccolta?'; + @override String get removedFromCollection => 'Rimosso dalla raccolta'; + @override String get removeFromCollectionFailed => 'Impossibile rimuovere dalla raccolta'; + @override String removeFromCollectionError({required Object error}) => 'Errore durante la rimozione dalla raccolta: ${error}'; } // Path: libraries.tabs class _StringsLibrariesTabsIt implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsIt._(this._root); + _StringsLibrariesTabsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get recommended => 'Consigliati'; - @override - String get browse => 'Esplora'; - @override - String get collections => 'Raccolte'; - @override - String get playlists => 'Playlist'; + // Translations + @override String get recommended => 'Consigliati'; + @override String get browse => 'Esplora'; + @override String get collections => 'Raccolte'; + @override String get playlists => 'Playlist'; } // Path: libraries.groupings class _StringsLibrariesGroupingsIt implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsIt._(this._root); + _StringsLibrariesGroupingsIt._(this._root); - @override - final _StringsIt _root; // ignore: unused_field + @override final _StringsIt _root; // ignore: unused_field - // Translations - @override - String get all => 'Tutti'; - @override - String get movies => 'Film'; - @override - String get shows => 'Serie TV'; - @override - String get seasons => 'Stagioni'; - @override - String get episodes => 'Episodi'; - @override - String get folders => 'Cartelle'; + // Translations + @override String get all => 'Tutti'; + @override String get movies => 'Film'; + @override String get shows => 'Serie TV'; + @override String get seasons => 'Stagioni'; + @override String get episodes => 'Episodi'; + @override String get folders => 'Cartelle'; } // Path: class _StringsNl implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsNl.build({ - Map? overrides, - PluralResolver? cardinalResolver, - PluralResolver? ordinalResolver, - }) : assert( - overrides == null, - 'Set "translation_overrides: true" in order to enable this feature.', - ), - $meta = TranslationMetadata( - locale: AppLocale.nl, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsNl.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.nl, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - @override - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); - @override - late final _StringsNl _root = this; // ignore: unused_field + @override late final _StringsNl _root = this; // ignore: unused_field - // Translations - @override - late final _StringsAppNl app = _StringsAppNl._(_root); - @override - late final _StringsAuthNl auth = _StringsAuthNl._(_root); - @override - late final _StringsCommonNl common = _StringsCommonNl._(_root); - @override - late final _StringsScreensNl screens = _StringsScreensNl._(_root); - @override - late final _StringsUpdateNl update = _StringsUpdateNl._(_root); - @override - late final _StringsSettingsNl settings = _StringsSettingsNl._(_root); - @override - late final _StringsSearchNl search = _StringsSearchNl._(_root); - @override - late final _StringsHotkeysNl hotkeys = _StringsHotkeysNl._(_root); - @override - late final _StringsPinEntryNl pinEntry = _StringsPinEntryNl._(_root); - @override - late final _StringsFileInfoNl fileInfo = _StringsFileInfoNl._(_root); - @override - late final _StringsMediaMenuNl mediaMenu = _StringsMediaMenuNl._(_root); - @override - late final _StringsAccessibilityNl accessibility = _StringsAccessibilityNl._( - _root, - ); - @override - late final _StringsTooltipsNl tooltips = _StringsTooltipsNl._(_root); - @override - late final _StringsVideoControlsNl videoControls = _StringsVideoControlsNl._( - _root, - ); - @override - late final _StringsUserStatusNl userStatus = _StringsUserStatusNl._(_root); - @override - late final _StringsMessagesNl messages = _StringsMessagesNl._(_root); - @override - late final _StringsProfileNl profile = _StringsProfileNl._(_root); - @override - late final _StringsSubtitlingStylingNl subtitlingStyling = - _StringsSubtitlingStylingNl._(_root); - @override - late final _StringsDialogNl dialog = _StringsDialogNl._(_root); - @override - late final _StringsDiscoverNl discover = _StringsDiscoverNl._(_root); - @override - late final _StringsErrorsNl errors = _StringsErrorsNl._(_root); - @override - late final _StringsLibrariesNl libraries = _StringsLibrariesNl._(_root); - @override - late final _StringsAboutNl about = _StringsAboutNl._(_root); - @override - late final _StringsServerSelectionNl serverSelection = - _StringsServerSelectionNl._(_root); - @override - late final _StringsHubDetailNl hubDetail = _StringsHubDetailNl._(_root); - @override - late final _StringsLogsNl logs = _StringsLogsNl._(_root); - @override - late final _StringsLicensesNl licenses = _StringsLicensesNl._(_root); - @override - late final _StringsNavigationNl navigation = _StringsNavigationNl._(_root); - @override - late final _StringsPlaylistsNl playlists = _StringsPlaylistsNl._(_root); - @override - late final _StringsCollectionsNl collections = _StringsCollectionsNl._(_root); + // Translations + @override late final _StringsAppNl app = _StringsAppNl._(_root); + @override late final _StringsAuthNl auth = _StringsAuthNl._(_root); + @override late final _StringsCommonNl common = _StringsCommonNl._(_root); + @override late final _StringsScreensNl screens = _StringsScreensNl._(_root); + @override late final _StringsUpdateNl update = _StringsUpdateNl._(_root); + @override late final _StringsSettingsNl settings = _StringsSettingsNl._(_root); + @override late final _StringsSearchNl search = _StringsSearchNl._(_root); + @override late final _StringsHotkeysNl hotkeys = _StringsHotkeysNl._(_root); + @override late final _StringsPinEntryNl pinEntry = _StringsPinEntryNl._(_root); + @override late final _StringsFileInfoNl fileInfo = _StringsFileInfoNl._(_root); + @override late final _StringsMediaMenuNl mediaMenu = _StringsMediaMenuNl._(_root); + @override late final _StringsAccessibilityNl accessibility = _StringsAccessibilityNl._(_root); + @override late final _StringsTooltipsNl tooltips = _StringsTooltipsNl._(_root); + @override late final _StringsVideoControlsNl videoControls = _StringsVideoControlsNl._(_root); + @override late final _StringsUserStatusNl userStatus = _StringsUserStatusNl._(_root); + @override late final _StringsMessagesNl messages = _StringsMessagesNl._(_root); + @override late final _StringsProfileNl profile = _StringsProfileNl._(_root); + @override late final _StringsSubtitlingStylingNl subtitlingStyling = _StringsSubtitlingStylingNl._(_root); + @override late final _StringsDialogNl dialog = _StringsDialogNl._(_root); + @override late final _StringsDiscoverNl discover = _StringsDiscoverNl._(_root); + @override late final _StringsErrorsNl errors = _StringsErrorsNl._(_root); + @override late final _StringsLibrariesNl libraries = _StringsLibrariesNl._(_root); + @override late final _StringsAboutNl about = _StringsAboutNl._(_root); + @override late final _StringsServerSelectionNl serverSelection = _StringsServerSelectionNl._(_root); + @override late final _StringsHubDetailNl hubDetail = _StringsHubDetailNl._(_root); + @override late final _StringsLogsNl logs = _StringsLogsNl._(_root); + @override late final _StringsLicensesNl licenses = _StringsLicensesNl._(_root); + @override late final _StringsNavigationNl navigation = _StringsNavigationNl._(_root); + @override late final _StringsPlaylistsNl playlists = _StringsPlaylistsNl._(_root); + @override late final _StringsCollectionsNl collections = _StringsCollectionsNl._(_root); } // Path: app class _StringsAppNl implements _StringsAppEn { - _StringsAppNl._(this._root); + _StringsAppNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Plezy'; - @override - String get loading => 'Laden...'; + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Laden...'; } // Path: auth class _StringsAuthNl implements _StringsAuthEn { - _StringsAuthNl._(this._root); + _StringsAuthNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get signInWithPlex => 'Inloggen met Plex'; - @override - String get showQRCode => 'Toon QR-code'; - @override - String get cancel => 'Annuleren'; - @override - String get authenticate => 'Authenticeren'; - @override - String get retry => 'Opnieuw proberen'; - @override - String get debugEnterToken => 'Debug: Voer Plex Token in'; - @override - String get plexTokenLabel => 'Plex Authenticatietoken'; - @override - String get plexTokenHint => 'Voer je Plex.tv token in'; - @override - String get authenticationTimeout => - 'Authenticatie verlopen. Probeer opnieuw.'; - @override - String get scanQRCodeInstruction => - 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.'; - @override - String get waitingForAuth => - 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.'; + // Translations + @override String get signInWithPlex => 'Inloggen met Plex'; + @override String get showQRCode => 'Toon QR-code'; + @override String get cancel => 'Annuleren'; + @override String get authenticate => 'Authenticeren'; + @override String get retry => 'Opnieuw proberen'; + @override String get debugEnterToken => 'Debug: Voer Plex Token in'; + @override String get plexTokenLabel => 'Plex Authenticatietoken'; + @override String get plexTokenHint => 'Voer je Plex.tv token in'; + @override String get authenticationTimeout => 'Authenticatie verlopen. Probeer opnieuw.'; + @override String get scanQRCodeInstruction => 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.'; + @override String get waitingForAuth => 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.'; } // Path: common class _StringsCommonNl implements _StringsCommonEn { - _StringsCommonNl._(this._root); + _StringsCommonNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get cancel => 'Annuleren'; - @override - String get save => 'Opslaan'; - @override - String get close => 'Sluiten'; - @override - String get clear => 'Wissen'; - @override - String get reset => 'Resetten'; - @override - String get later => 'Later'; - @override - String get submit => 'Verzenden'; - @override - String get confirm => 'Bevestigen'; - @override - String get retry => 'Opnieuw proberen'; - @override - String get playNow => 'Nu afspelen'; - @override - String get logout => 'Uitloggen'; - @override - String get online => 'Online'; - @override - String get offline => 'Offline'; - @override - String get owned => 'Eigendom'; - @override - String get shared => 'Gedeeld'; - @override - String get current => 'HUIDIG'; - @override - String get unknown => 'Onbekend'; - @override - String get refresh => 'Vernieuwen'; - @override - String get yes => 'Ja'; - @override - String get no => 'Nee'; - @override - String get server => 'Server'; - @override - String get delete => 'Verwijderen'; - @override - String get shuffle => 'Willekeurig'; - @override - String get addTo => 'Toevoegen aan...'; + // Translations + @override String get cancel => 'Annuleren'; + @override String get save => 'Opslaan'; + @override String get close => 'Sluiten'; + @override String get clear => 'Wissen'; + @override String get reset => 'Resetten'; + @override String get later => 'Later'; + @override String get submit => 'Verzenden'; + @override String get confirm => 'Bevestigen'; + @override String get retry => 'Opnieuw proberen'; + @override String get playNow => 'Nu afspelen'; + @override String get logout => 'Uitloggen'; + @override String get online => 'Online'; + @override String get offline => 'Offline'; + @override String get owned => 'Eigendom'; + @override String get shared => 'Gedeeld'; + @override String get current => 'HUIDIG'; + @override String get unknown => 'Onbekend'; + @override String get refresh => 'Vernieuwen'; + @override String get yes => 'Ja'; + @override String get no => 'Nee'; + @override String get server => 'Server'; + @override String get delete => 'Verwijderen'; + @override String get shuffle => 'Willekeurig'; + @override String get addTo => 'Toevoegen aan...'; } // Path: screens class _StringsScreensNl implements _StringsScreensEn { - _StringsScreensNl._(this._root); + _StringsScreensNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get licenses => 'Licenties'; - @override - String get selectServer => 'Selecteer server'; - @override - String get switchProfile => 'Wissel van profiel'; - @override - String get subtitleStyling => 'Ondertitel opmaak'; - @override - String get search => 'Zoeken'; - @override - String get logs => 'Logbestanden'; + // Translations + @override String get licenses => 'Licenties'; + @override String get selectServer => 'Selecteer server'; + @override String get switchProfile => 'Wissel van profiel'; + @override String get subtitleStyling => 'Ondertitel opmaak'; + @override String get search => 'Zoeken'; + @override String get logs => 'Logbestanden'; } // Path: update class _StringsUpdateNl implements _StringsUpdateEn { - _StringsUpdateNl._(this._root); + _StringsUpdateNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get available => 'Update beschikbaar'; - @override - String versionAvailable({required Object version}) => - 'Versie ${version} is beschikbaar'; - @override - String currentVersion({required Object version}) => 'Huidig: ${version}'; - @override - String get skipVersion => 'Deze versie overslaan'; - @override - String get viewRelease => 'Bekijk release'; - @override - String get latestVersion => 'Je hebt de nieuwste versie'; - @override - String get checkFailed => 'Kon niet controleren op updates'; + // Translations + @override String get available => 'Update beschikbaar'; + @override String versionAvailable({required Object version}) => 'Versie ${version} is beschikbaar'; + @override String currentVersion({required Object version}) => 'Huidig: ${version}'; + @override String get skipVersion => 'Deze versie overslaan'; + @override String get viewRelease => 'Bekijk release'; + @override String get latestVersion => 'Je hebt de nieuwste versie'; + @override String get checkFailed => 'Kon niet controleren op updates'; } // Path: settings class _StringsSettingsNl implements _StringsSettingsEn { - _StringsSettingsNl._(this._root); + _StringsSettingsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Instellingen'; - @override - String get language => 'Taal'; - @override - String get theme => 'Thema'; - @override - String get appearance => 'Uiterlijk'; - @override - String get videoPlayback => 'Video afspelen'; - @override - String get shufflePlay => 'Willekeurig afspelen'; - @override - String get advanced => 'Geavanceerd'; - @override - String get useSeasonPostersDescription => - 'Toon seizoenposter in plaats van serieposter voor afleveringen'; - @override - String get showHeroSectionDescription => - 'Toon uitgelichte inhoud carrousel op startscherm'; - @override - String get secondsLabel => 'Seconden'; - @override - String get minutesLabel => 'Minuten'; - @override - String get secondsShort => 's'; - @override - String get minutesShort => 'm'; - @override - String durationHint({required Object min, required Object max}) => - 'Voer duur in (${min}-${max})'; - @override - String get systemTheme => 'Systeem'; - @override - String get systemThemeDescription => 'Volg systeeminstellingen'; - @override - String get lightTheme => 'Licht'; - @override - String get darkTheme => 'Donker'; - @override - String get libraryDensity => 'Bibliotheek dichtheid'; - @override - String get compact => 'Compact'; - @override - String get compactDescription => 'Kleinere kaarten, meer items zichtbaar'; - @override - String get normal => 'Normaal'; - @override - String get normalDescription => 'Standaard grootte'; - @override - String get comfortable => 'Comfortabel'; - @override - String get comfortableDescription => - 'Grotere kaarten, minder items zichtbaar'; - @override - String get viewMode => 'Weergavemodus'; - @override - String get gridView => 'Raster'; - @override - String get gridViewDescription => 'Items weergeven in een rasterindeling'; - @override - String get listView => 'Lijst'; - @override - String get listViewDescription => 'Items weergeven in een lijstindeling'; - @override - String get useSeasonPosters => 'Gebruik seizoenposters'; - @override - String get showHeroSection => 'Toon hoofdsectie'; - @override - String get hardwareDecoding => 'Hardware decodering'; - @override - String get hardwareDecodingDescription => - 'Gebruik hardware versnelling indien beschikbaar'; - @override - String get bufferSize => 'Buffer grootte'; - @override - String bufferSizeMB({required Object size}) => '${size}MB'; - @override - String get subtitleStyling => 'Ondertitel opmaak'; - @override - String get subtitleStylingDescription => 'Pas ondertitel uiterlijk aan'; - @override - String get smallSkipDuration => 'Korte skip duur'; - @override - String get largeSkipDuration => 'Lange skip duur'; - @override - String secondsUnit({required Object seconds}) => '${seconds} seconden'; - @override - String get defaultSleepTimer => 'Standaard slaap timer'; - @override - String minutesUnit({required Object minutes}) => 'bij ${minutes} minuten'; - @override - String get rememberTrackSelections => - 'Onthoud track selecties per serie/film'; - @override - String get rememberTrackSelectionsDescription => - 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; - @override - String get unwatchedOnly => 'Alleen ongekeken'; - @override - String get unwatchedOnlyDescription => - 'Alleen ongekeken afleveringen opnemen in willekeurige wachtrij'; - @override - String get shuffleOrderNavigation => 'Willekeurige volgorde navigatie'; - @override - String get shuffleOrderNavigationDescription => - 'Volgende/vorige knoppen volgen willekeurige volgorde'; - @override - String get loopShuffleQueue => 'Herhaal willekeurige wachtrij'; - @override - String get loopShuffleQueueDescription => - 'Start wachtrij opnieuw bij het einde'; - @override - String get videoPlayerControls => 'Videospeler bediening'; - @override - String get keyboardShortcuts => 'Toetsenbord sneltoetsen'; - @override - String get keyboardShortcutsDescription => 'Pas toetsenbord sneltoetsen aan'; - @override - String get debugLogging => 'Debug logging'; - @override - String get debugLoggingDescription => - 'Schakel gedetailleerde logging in voor probleemoplossing'; - @override - String get viewLogs => 'Bekijk logs'; - @override - String get viewLogsDescription => 'Bekijk applicatie logs'; - @override - String get clearCache => 'Cache wissen'; - @override - String get clearCacheDescription => - 'Dit wist alle gecachte afbeeldingen en gegevens. De app kan langer duren om inhoud te laden na het wissen van de cache.'; - @override - String get clearCacheSuccess => 'Cache succesvol gewist'; - @override - String get resetSettings => 'Instellingen resetten'; - @override - String get resetSettingsDescription => - 'Dit reset alle instellingen naar hun standaard waarden. Deze actie kan niet ongedaan gemaakt worden.'; - @override - String get resetSettingsSuccess => 'Instellingen succesvol gereset'; - @override - String get shortcutsReset => 'Sneltoetsen gereset naar standaard'; - @override - String get about => 'Over'; - @override - String get aboutDescription => 'App informatie en licenties'; - @override - String get updates => 'Updates'; - @override - String get updateAvailable => 'Update beschikbaar'; - @override - String get checkForUpdates => 'Controleer op updates'; - @override - String get validationErrorEnterNumber => 'Voer een geldig nummer in'; - @override - String validationErrorDuration({ - required Object min, - required Object max, - required Object unit, - }) => 'Duur moet tussen ${min} en ${max} ${unit} zijn'; - @override - String shortcutAlreadyAssigned({required Object action}) => - 'Sneltoets al toegewezen aan ${action}'; - @override - String shortcutUpdated({required Object action}) => - 'Sneltoets bijgewerkt voor ${action}'; + // Translations + @override String get title => 'Instellingen'; + @override String get language => 'Taal'; + @override String get theme => 'Thema'; + @override String get appearance => 'Uiterlijk'; + @override String get videoPlayback => 'Video afspelen'; + @override String get shufflePlay => 'Willekeurig afspelen'; + @override String get advanced => 'Geavanceerd'; + @override String get useSeasonPostersDescription => 'Toon seizoenposter in plaats van serieposter voor afleveringen'; + @override String get showHeroSectionDescription => 'Toon uitgelichte inhoud carrousel op startscherm'; + @override String get secondsLabel => 'Seconden'; + @override String get minutesLabel => 'Minuten'; + @override String get secondsShort => 's'; + @override String get minutesShort => 'm'; + @override String durationHint({required Object min, required Object max}) => 'Voer duur in (${min}-${max})'; + @override String get systemTheme => 'Systeem'; + @override String get systemThemeDescription => 'Volg systeeminstellingen'; + @override String get lightTheme => 'Licht'; + @override String get darkTheme => 'Donker'; + @override String get libraryDensity => 'Bibliotheek dichtheid'; + @override String get compact => 'Compact'; + @override String get compactDescription => 'Kleinere kaarten, meer items zichtbaar'; + @override String get normal => 'Normaal'; + @override String get normalDescription => 'Standaard grootte'; + @override String get comfortable => 'Comfortabel'; + @override String get comfortableDescription => 'Grotere kaarten, minder items zichtbaar'; + @override String get viewMode => 'Weergavemodus'; + @override String get gridView => 'Raster'; + @override String get gridViewDescription => 'Items weergeven in een rasterindeling'; + @override String get listView => 'Lijst'; + @override String get listViewDescription => 'Items weergeven in een lijstindeling'; + @override String get useSeasonPosters => 'Gebruik seizoenposters'; + @override String get showHeroSection => 'Toon hoofdsectie'; + @override String get hardwareDecoding => 'Hardware decodering'; + @override String get hardwareDecodingDescription => 'Gebruik hardware versnelling indien beschikbaar'; + @override String get bufferSize => 'Buffer grootte'; + @override String bufferSizeMB({required Object size}) => '${size}MB'; + @override String get subtitleStyling => 'Ondertitel opmaak'; + @override String get subtitleStylingDescription => 'Pas ondertitel uiterlijk aan'; + @override String get smallSkipDuration => 'Korte skip duur'; + @override String get largeSkipDuration => 'Lange skip duur'; + @override String secondsUnit({required Object seconds}) => '${seconds} seconden'; + @override String get defaultSleepTimer => 'Standaard slaap timer'; + @override String minutesUnit({required Object minutes}) => 'bij ${minutes} minuten'; + @override String get rememberTrackSelections => 'Onthoud track selecties per serie/film'; + @override String get rememberTrackSelectionsDescription => 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; + @override String get unwatchedOnly => 'Alleen ongekeken'; + @override String get unwatchedOnlyDescription => 'Alleen ongekeken afleveringen opnemen in willekeurige wachtrij'; + @override String get shuffleOrderNavigation => 'Willekeurige volgorde navigatie'; + @override String get shuffleOrderNavigationDescription => 'Volgende/vorige knoppen volgen willekeurige volgorde'; + @override String get loopShuffleQueue => 'Herhaal willekeurige wachtrij'; + @override String get loopShuffleQueueDescription => 'Start wachtrij opnieuw bij het einde'; + @override String get videoPlayerControls => 'Videospeler bediening'; + @override String get keyboardShortcuts => 'Toetsenbord sneltoetsen'; + @override String get keyboardShortcutsDescription => 'Pas toetsenbord sneltoetsen aan'; + @override String get debugLogging => 'Debug logging'; + @override String get debugLoggingDescription => 'Schakel gedetailleerde logging in voor probleemoplossing'; + @override String get viewLogs => 'Bekijk logs'; + @override String get viewLogsDescription => 'Bekijk applicatie logs'; + @override String get clearCache => 'Cache wissen'; + @override String get clearCacheDescription => 'Dit wist alle gecachte afbeeldingen en gegevens. De app kan langer duren om inhoud te laden na het wissen van de cache.'; + @override String get clearCacheSuccess => 'Cache succesvol gewist'; + @override String get resetSettings => 'Instellingen resetten'; + @override String get resetSettingsDescription => 'Dit reset alle instellingen naar hun standaard waarden. Deze actie kan niet ongedaan gemaakt worden.'; + @override String get resetSettingsSuccess => 'Instellingen succesvol gereset'; + @override String get shortcutsReset => 'Sneltoetsen gereset naar standaard'; + @override String get about => 'Over'; + @override String get aboutDescription => 'App informatie en licenties'; + @override String get updates => 'Updates'; + @override String get updateAvailable => 'Update beschikbaar'; + @override String get checkForUpdates => 'Controleer op updates'; + @override String get validationErrorEnterNumber => 'Voer een geldig nummer in'; + @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Duur moet tussen ${min} en ${max} ${unit} zijn'; + @override String shortcutAlreadyAssigned({required Object action}) => 'Sneltoets al toegewezen aan ${action}'; + @override String shortcutUpdated({required Object action}) => 'Sneltoets bijgewerkt voor ${action}'; + @override String get autoSkip => 'Automatisch Overslaan'; + @override String get autoSkipIntro => 'Intro Automatisch Overslaan'; + @override String get autoSkipIntroDescription => 'Intro-markeringen na enkele seconden automatisch overslaan'; + @override String get autoSkipCredits => 'Credits Automatisch Overslaan'; + @override String get autoSkipCreditsDescription => 'Credits automatisch overslaan en volgende aflevering afspelen'; + @override String get autoSkipDelay => 'Vertraging Automatisch Overslaan'; + @override String autoSkipDelayDescription({required Object seconds}) => '${seconds} seconden wachten voor automatisch overslaan'; } // Path: search class _StringsSearchNl implements _StringsSearchEn { - _StringsSearchNl._(this._root); + _StringsSearchNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get hint => 'Zoek films, series, muziek...'; - @override - String get tryDifferentTerm => 'Probeer een andere zoekterm'; - @override - String get searchYourMedia => 'Zoek in je media'; - @override - String get enterTitleActorOrKeyword => - 'Voer een titel, acteur of trefwoord in'; + // Translations + @override String get hint => 'Zoek films, series, muziek...'; + @override String get tryDifferentTerm => 'Probeer een andere zoekterm'; + @override String get searchYourMedia => 'Zoek in je media'; + @override String get enterTitleActorOrKeyword => 'Voer een titel, acteur of trefwoord in'; } // Path: hotkeys class _StringsHotkeysNl implements _StringsHotkeysEn { - _StringsHotkeysNl._(this._root); + _StringsHotkeysNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String setShortcutFor({required Object actionName}) => - 'Stel sneltoets in voor ${actionName}'; - @override - String get clearShortcut => 'Wis sneltoets'; + // Translations + @override String setShortcutFor({required Object actionName}) => 'Stel sneltoets in voor ${actionName}'; + @override String get clearShortcut => 'Wis sneltoets'; } // Path: pinEntry class _StringsPinEntryNl implements _StringsPinEntryEn { - _StringsPinEntryNl._(this._root); + _StringsPinEntryNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get enterPin => 'Voer PIN in'; - @override - String get showPin => 'Toon PIN'; - @override - String get hidePin => 'Verberg PIN'; + // Translations + @override String get enterPin => 'Voer PIN in'; + @override String get showPin => 'Toon PIN'; + @override String get hidePin => 'Verberg PIN'; } // Path: fileInfo class _StringsFileInfoNl implements _StringsFileInfoEn { - _StringsFileInfoNl._(this._root); + _StringsFileInfoNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Bestand info'; - @override - String get video => 'Video'; - @override - String get audio => 'Audio'; - @override - String get file => 'Bestand'; - @override - String get advanced => 'Geavanceerd'; - @override - String get codec => 'Codec'; - @override - String get resolution => 'Resolutie'; - @override - String get bitrate => 'Bitrate'; - @override - String get frameRate => 'Frame rate'; - @override - String get aspectRatio => 'Beeldverhouding'; - @override - String get profile => 'Profiel'; - @override - String get bitDepth => 'Bit diepte'; - @override - String get colorSpace => 'Kleurruimte'; - @override - String get colorRange => 'Kleurbereik'; - @override - String get colorPrimaries => 'Kleurprimaires'; - @override - String get chromaSubsampling => 'Chroma subsampling'; - @override - String get channels => 'Kanalen'; - @override - String get path => 'Pad'; - @override - String get size => 'Grootte'; - @override - String get container => 'Container'; - @override - String get duration => 'Duur'; - @override - String get optimizedForStreaming => 'Geoptimaliseerd voor streaming'; - @override - String get has64bitOffsets => '64-bit Offsets'; + // Translations + @override String get title => 'Bestand info'; + @override String get video => 'Video'; + @override String get audio => 'Audio'; + @override String get file => 'Bestand'; + @override String get advanced => 'Geavanceerd'; + @override String get codec => 'Codec'; + @override String get resolution => 'Resolutie'; + @override String get bitrate => 'Bitrate'; + @override String get frameRate => 'Frame rate'; + @override String get aspectRatio => 'Beeldverhouding'; + @override String get profile => 'Profiel'; + @override String get bitDepth => 'Bit diepte'; + @override String get colorSpace => 'Kleurruimte'; + @override String get colorRange => 'Kleurbereik'; + @override String get colorPrimaries => 'Kleurprimaires'; + @override String get chromaSubsampling => 'Chroma subsampling'; + @override String get channels => 'Kanalen'; + @override String get path => 'Pad'; + @override String get size => 'Grootte'; + @override String get container => 'Container'; + @override String get duration => 'Duur'; + @override String get optimizedForStreaming => 'Geoptimaliseerd voor streaming'; + @override String get has64bitOffsets => '64-bit Offsets'; } // Path: mediaMenu class _StringsMediaMenuNl implements _StringsMediaMenuEn { - _StringsMediaMenuNl._(this._root); + _StringsMediaMenuNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get markAsWatched => 'Markeer als gekeken'; - @override - String get markAsUnwatched => 'Markeer als ongekeken'; - @override - String get removeFromContinueWatching => 'Verwijder uit Doorgaan met kijken'; - @override - String get goToSeries => 'Ga naar serie'; - @override - String get goToSeason => 'Ga naar seizoen'; - @override - String get shufflePlay => 'Willekeurig afspelen'; - @override - String get fileInfo => 'Bestand info'; + // Translations + @override String get markAsWatched => 'Markeer als gekeken'; + @override String get markAsUnwatched => 'Markeer als ongekeken'; + @override String get removeFromContinueWatching => 'Verwijder uit Doorgaan met kijken'; + @override String get goToSeries => 'Ga naar serie'; + @override String get goToSeason => 'Ga naar seizoen'; + @override String get shufflePlay => 'Willekeurig afspelen'; + @override String get fileInfo => 'Bestand info'; } // Path: accessibility class _StringsAccessibilityNl implements _StringsAccessibilityEn { - _StringsAccessibilityNl._(this._root); + _StringsAccessibilityNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String mediaCardMovie({required Object title}) => '${title}, film'; - @override - String mediaCardShow({required Object title}) => '${title}, TV-serie'; - @override - String mediaCardEpisode({ - required Object title, - required Object episodeInfo, - }) => '${title}, ${episodeInfo}'; - @override - String mediaCardSeason({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - @override - String get mediaCardWatched => 'bekeken'; - @override - String mediaCardPartiallyWatched({required Object percent}) => - '${percent} procent bekeken'; - @override - String get mediaCardUnwatched => 'niet bekeken'; - @override - String get tapToPlay => 'Tik om af te spelen'; + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, film'; + @override String mediaCardShow({required Object title}) => '${title}, TV-serie'; + @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + @override String get mediaCardWatched => 'bekeken'; + @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent bekeken'; + @override String get mediaCardUnwatched => 'niet bekeken'; + @override String get tapToPlay => 'Tik om af te spelen'; } // Path: tooltips class _StringsTooltipsNl implements _StringsTooltipsEn { - _StringsTooltipsNl._(this._root); + _StringsTooltipsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get shufflePlay => 'Willekeurig afspelen'; - @override - String get markAsWatched => 'Markeer als gekeken'; - @override - String get markAsUnwatched => 'Markeer als ongekeken'; + // Translations + @override String get shufflePlay => 'Willekeurig afspelen'; + @override String get markAsWatched => 'Markeer als gekeken'; + @override String get markAsUnwatched => 'Markeer als ongekeken'; } // Path: videoControls class _StringsVideoControlsNl implements _StringsVideoControlsEn { - _StringsVideoControlsNl._(this._root); + _StringsVideoControlsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get audioLabel => 'Audio'; - @override - String get subtitlesLabel => 'Ondertitels'; - @override - String get resetToZero => 'Reset naar 0ms'; - @override - String addTime({required Object amount, required Object unit}) => - '+${amount}${unit}'; - @override - String minusTime({required Object amount, required Object unit}) => - '-${amount}${unit}'; - @override - String playsLater({required Object label}) => '${label} speelt later af'; - @override - String playsEarlier({required Object label}) => '${label} speelt eerder af'; - @override - String get noOffset => 'Geen offset'; - @override - String get letterbox => 'Letterbox'; - @override - String get fillScreen => 'Vul scherm'; - @override - String get stretch => 'Uitrekken'; - @override - String get lockRotation => 'Vergrendel rotatie'; - @override - String get unlockRotation => 'Ontgrendel rotatie'; - @override - String get sleepTimer => 'Slaaptimer'; - @override - String get timerActive => 'Timer actief'; - @override - String playbackWillPauseIn({required Object duration}) => - 'Afspelen wordt gepauzeerd over ${duration}'; - @override - String get sleepTimerCompleted => 'Slaaptimer voltooid - afspelen gepauzeerd'; - @override - String get playButton => 'Afspelen'; - @override - String get pauseButton => 'Pauzeren'; - @override - String seekBackwardButton({required Object seconds}) => - 'Terugspoelen ${seconds} seconden'; - @override - String seekForwardButton({required Object seconds}) => - 'Vooruitspoelen ${seconds} seconden'; - @override - String get previousButton => 'Vorige aflevering'; - @override - String get nextButton => 'Volgende aflevering'; - @override - String get previousChapterButton => 'Vorig hoofdstuk'; - @override - String get nextChapterButton => 'Volgend hoofdstuk'; - @override - String get volumeButton => 'Volume'; - @override - String get muteButton => 'Dempen'; - @override - String get unmuteButton => 'Dempen opheffen'; - @override - String get settingsButton => 'Video-instellingen'; - @override - String get audioTrackButton => 'Audiosporen'; - @override - String get subtitlesButton => 'Ondertitels'; - @override - String get chaptersButton => 'Hoofdstukken'; - @override - String get versionsButton => 'Videoversies'; - @override - String get aspectRatioButton => 'Beeldverhouding'; - @override - String get fullscreenButton => 'Volledig scherm activeren'; - @override - String get exitFullscreenButton => 'Volledig scherm verlaten'; - @override - String get rotationLockButton => 'Rotatievergrendeling'; - @override - String get timelineSlider => 'Videotijdlijn'; - @override - String get volumeSlider => 'Volumeniveau'; - @override - String get backButton => 'Terug'; + // Translations + @override String get audioLabel => 'Audio'; + @override String get subtitlesLabel => 'Ondertitels'; + @override String get resetToZero => 'Reset naar 0ms'; + @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + @override String playsLater({required Object label}) => '${label} speelt later af'; + @override String playsEarlier({required Object label}) => '${label} speelt eerder af'; + @override String get noOffset => 'Geen offset'; + @override String get letterbox => 'Letterbox'; + @override String get fillScreen => 'Vul scherm'; + @override String get stretch => 'Uitrekken'; + @override String get lockRotation => 'Vergrendel rotatie'; + @override String get unlockRotation => 'Ontgrendel rotatie'; + @override String get sleepTimer => 'Slaaptimer'; + @override String get timerActive => 'Timer actief'; + @override String playbackWillPauseIn({required Object duration}) => 'Afspelen wordt gepauzeerd over ${duration}'; + @override String get sleepTimerCompleted => 'Slaaptimer voltooid - afspelen gepauzeerd'; + @override String get playButton => 'Afspelen'; + @override String get pauseButton => 'Pauzeren'; + @override String seekBackwardButton({required Object seconds}) => 'Terugspoelen ${seconds} seconden'; + @override String seekForwardButton({required Object seconds}) => 'Vooruitspoelen ${seconds} seconden'; + @override String get previousButton => 'Vorige aflevering'; + @override String get nextButton => 'Volgende aflevering'; + @override String get previousChapterButton => 'Vorig hoofdstuk'; + @override String get nextChapterButton => 'Volgend hoofdstuk'; + @override String get volumeButton => 'Volume'; + @override String get muteButton => 'Dempen'; + @override String get unmuteButton => 'Dempen opheffen'; + @override String get settingsButton => 'Video-instellingen'; + @override String get audioTrackButton => 'Audiosporen'; + @override String get subtitlesButton => 'Ondertitels'; + @override String get chaptersButton => 'Hoofdstukken'; + @override String get versionsButton => 'Videoversies'; + @override String get aspectRatioButton => 'Beeldverhouding'; + @override String get fullscreenButton => 'Volledig scherm activeren'; + @override String get exitFullscreenButton => 'Volledig scherm verlaten'; + @override String get rotationLockButton => 'Rotatievergrendeling'; + @override String get timelineSlider => 'Videotijdlijn'; + @override String get volumeSlider => 'Volumeniveau'; + @override String get backButton => 'Terug'; } // Path: userStatus class _StringsUserStatusNl implements _StringsUserStatusEn { - _StringsUserStatusNl._(this._root); + _StringsUserStatusNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get admin => 'Beheerder'; - @override - String get restricted => 'Beperkt'; - @override - String get protected => 'Beschermd'; - @override - String get current => 'HUIDIG'; + // Translations + @override String get admin => 'Beheerder'; + @override String get restricted => 'Beperkt'; + @override String get protected => 'Beschermd'; + @override String get current => 'HUIDIG'; } // Path: messages class _StringsMessagesNl implements _StringsMessagesEn { - _StringsMessagesNl._(this._root); + _StringsMessagesNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get markedAsWatched => 'Gemarkeerd als gekeken'; - @override - String get markedAsUnwatched => 'Gemarkeerd als ongekeken'; - @override - String get removedFromContinueWatching => - 'Verwijderd uit Doorgaan met kijken'; - @override - String errorLoading({required Object error}) => 'Fout: ${error}'; - @override - String get fileInfoNotAvailable => 'Bestand informatie niet beschikbaar'; - @override - String errorLoadingFileInfo({required Object error}) => - 'Fout bij laden bestand info: ${error}'; - @override - String get errorLoadingSeries => 'Fout bij laden serie'; - @override - String get errorLoadingSeason => 'Fout bij laden seizoen'; - @override - String get musicNotSupported => 'Muziek afspelen wordt nog niet ondersteund'; - @override - String get logsCleared => 'Logs gewist'; - @override - String get logsCopied => 'Logs gekopieerd naar klembord'; - @override - String get noLogsAvailable => 'Geen logs beschikbaar'; - @override - String libraryScanning({required Object title}) => 'Scannen "${title}"...'; - @override - String libraryScanStarted({required Object title}) => - 'Bibliotheek scan gestart voor "${title}"'; - @override - String libraryScanFailed({required Object error}) => - 'Kon bibliotheek niet scannen: ${error}'; - @override - String metadataRefreshing({required Object title}) => - 'Metadata vernieuwen voor "${title}"...'; - @override - String metadataRefreshStarted({required Object title}) => - 'Metadata vernieuwen gestart voor "${title}"'; - @override - String metadataRefreshFailed({required Object error}) => - 'Kon metadata niet vernieuwen: ${error}'; - @override - String get noPlexToken => 'Geen Plex token gevonden. Log opnieuw in.'; - @override - String get logoutConfirm => 'Weet je zeker dat je wilt uitloggen?'; - @override - String get noSeasonsFound => 'Geen seizoenen gevonden'; - @override - String get noEpisodesFound => 'Geen afleveringen gevonden in eerste seizoen'; - @override - String get noEpisodesFoundGeneral => 'Geen afleveringen gevonden'; - @override - String get noResultsFound => 'Geen resultaten gevonden'; - @override - String sleepTimerSet({required Object label}) => - 'Slaap timer ingesteld voor ${label}'; - @override - String failedToSwitchProfile({required Object displayName}) => - 'Kon niet wisselen naar ${displayName}'; - @override - String get noItemsAvailable => 'Geen items beschikbaar'; - @override - String get failedToCreatePlayQueue => 'Kan afspeelwachtrij niet maken'; - @override - String get failedToCreatePlayQueueNoItems => - 'Kan afspeelwachtrij niet maken - geen items'; - @override - String failedPlayback({required Object action, required Object error}) => - 'Afspelen van ${action} mislukt: ${error}'; + // Translations + @override String get markedAsWatched => 'Gemarkeerd als gekeken'; + @override String get markedAsUnwatched => 'Gemarkeerd als ongekeken'; + @override String get removedFromContinueWatching => 'Verwijderd uit Doorgaan met kijken'; + @override String errorLoading({required Object error}) => 'Fout: ${error}'; + @override String get fileInfoNotAvailable => 'Bestand informatie niet beschikbaar'; + @override String errorLoadingFileInfo({required Object error}) => 'Fout bij laden bestand info: ${error}'; + @override String get errorLoadingSeries => 'Fout bij laden serie'; + @override String get errorLoadingSeason => 'Fout bij laden seizoen'; + @override String get musicNotSupported => 'Muziek afspelen wordt nog niet ondersteund'; + @override String get logsCleared => 'Logs gewist'; + @override String get logsCopied => 'Logs gekopieerd naar klembord'; + @override String get noLogsAvailable => 'Geen logs beschikbaar'; + @override String libraryScanning({required Object title}) => 'Scannen "${title}"...'; + @override String libraryScanStarted({required Object title}) => 'Bibliotheek scan gestart voor "${title}"'; + @override String libraryScanFailed({required Object error}) => 'Kon bibliotheek niet scannen: ${error}'; + @override String metadataRefreshing({required Object title}) => 'Metadata vernieuwen voor "${title}"...'; + @override String metadataRefreshStarted({required Object title}) => 'Metadata vernieuwen gestart voor "${title}"'; + @override String metadataRefreshFailed({required Object error}) => 'Kon metadata niet vernieuwen: ${error}'; + @override String get noPlexToken => 'Geen Plex token gevonden. Log opnieuw in.'; + @override String get logoutConfirm => 'Weet je zeker dat je wilt uitloggen?'; + @override String get noSeasonsFound => 'Geen seizoenen gevonden'; + @override String get noEpisodesFound => 'Geen afleveringen gevonden in eerste seizoen'; + @override String get noEpisodesFoundGeneral => 'Geen afleveringen gevonden'; + @override String get noResultsFound => 'Geen resultaten gevonden'; + @override String sleepTimerSet({required Object label}) => 'Slaap timer ingesteld voor ${label}'; + @override String failedToSwitchProfile({required Object displayName}) => 'Kon niet wisselen naar ${displayName}'; + @override String get noItemsAvailable => 'Geen items beschikbaar'; + @override String get failedToCreatePlayQueue => 'Kan afspeelwachtrij niet maken'; + @override String get failedToCreatePlayQueueNoItems => 'Kan afspeelwachtrij niet maken - geen items'; + @override String failedPlayback({required Object action, required Object error}) => 'Afspelen van ${action} mislukt: ${error}'; } // Path: profile class _StringsProfileNl implements _StringsProfileEn { - _StringsProfileNl._(this._root); + _StringsProfileNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get noUsersAvailable => 'Geen gebruikers beschikbaar'; + // Translations + @override String get noUsersAvailable => 'Geen gebruikers beschikbaar'; } // Path: subtitlingStyling class _StringsSubtitlingStylingNl implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingNl._(this._root); + _StringsSubtitlingStylingNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get stylingOptions => 'Opmaak opties'; - @override - String get fontSize => 'Lettergrootte'; - @override - String get textColor => 'Tekstkleur'; - @override - String get borderSize => 'Rand grootte'; - @override - String get borderColor => 'Randkleur'; - @override - String get backgroundOpacity => 'Achtergrond transparantie'; - @override - String get backgroundColor => 'Achtergrondkleur'; + // Translations + @override String get stylingOptions => 'Opmaak opties'; + @override String get fontSize => 'Lettergrootte'; + @override String get textColor => 'Tekstkleur'; + @override String get borderSize => 'Rand grootte'; + @override String get borderColor => 'Randkleur'; + @override String get backgroundOpacity => 'Achtergrond transparantie'; + @override String get backgroundColor => 'Achtergrondkleur'; } // Path: dialog class _StringsDialogNl implements _StringsDialogEn { - _StringsDialogNl._(this._root); + _StringsDialogNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get confirmAction => 'Bevestig actie'; - @override - String get areYouSure => 'Weet je zeker dat je deze actie wilt uitvoeren?'; - @override - String get cancel => 'Annuleren'; - @override - String get playNow => 'Nu afspelen'; + // Translations + @override String get confirmAction => 'Bevestig actie'; + @override String get areYouSure => 'Weet je zeker dat je deze actie wilt uitvoeren?'; + @override String get cancel => 'Annuleren'; + @override String get playNow => 'Nu afspelen'; } // Path: discover class _StringsDiscoverNl implements _StringsDiscoverEn { - _StringsDiscoverNl._(this._root); + _StringsDiscoverNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Ontdekken'; - @override - String get switchProfile => 'Wissel van profiel'; - @override - String get switchServer => 'Wissel van server'; - @override - String get logout => 'Uitloggen'; - @override - String get noContentAvailable => 'Geen inhoud beschikbaar'; - @override - String get addMediaToLibraries => 'Voeg wat media toe aan je bibliotheken'; - @override - String get continueWatching => 'Verder kijken'; - @override - String get recentlyAdded => 'Recent toegevoegd'; - @override - String get play => 'Afspelen'; - @override - String get resume => 'Hervatten'; - @override - String playEpisode({required Object season, required Object episode}) => - 'Speel S${season}, E${episode}'; - @override - String resumeEpisode({required Object season, required Object episode}) => - 'Hervat S${season}, E${episode}'; - @override - String get pause => 'Pauzeren'; - @override - String get overview => 'Overzicht'; - @override - String get cast => 'Acteurs'; - @override - String get seasons => 'Seizoenen'; - @override - String get studio => 'Studio'; - @override - String get rating => 'Leeftijd'; - @override - String get watched => 'Bekeken'; - @override - String episodeCount({required Object count}) => '${count} afleveringen'; - @override - String watchedProgress({required Object watched, required Object total}) => - '${watched}/${total} gekeken'; - @override - String get movie => 'Film'; - @override - String get tvShow => 'TV Serie'; - @override - String minutesLeft({required Object minutes}) => '${minutes} min over'; + // Translations + @override String get title => 'Ontdekken'; + @override String get switchProfile => 'Wissel van profiel'; + @override String get switchServer => 'Wissel van server'; + @override String get logout => 'Uitloggen'; + @override String get noContentAvailable => 'Geen inhoud beschikbaar'; + @override String get addMediaToLibraries => 'Voeg wat media toe aan je bibliotheken'; + @override String get continueWatching => 'Verder kijken'; + @override String get recentlyAdded => 'Recent toegevoegd'; + @override String get play => 'Afspelen'; + @override String get resume => 'Hervatten'; + @override String playEpisode({required Object season, required Object episode}) => 'Speel S${season}, E${episode}'; + @override String resumeEpisode({required Object season, required Object episode}) => 'Hervat S${season}, E${episode}'; + @override String get pause => 'Pauzeren'; + @override String get overview => 'Overzicht'; + @override String get cast => 'Acteurs'; + @override String get seasons => 'Seizoenen'; + @override String get studio => 'Studio'; + @override String get rating => 'Leeftijd'; + @override String get watched => 'Bekeken'; + @override String episodeCount({required Object count}) => '${count} afleveringen'; + @override String watchedProgress({required Object watched, required Object total}) => '${watched}/${total} gekeken'; + @override String get movie => 'Film'; + @override String get tvShow => 'TV Serie'; + @override String minutesLeft({required Object minutes}) => '${minutes} min over'; } // Path: errors class _StringsErrorsNl implements _StringsErrorsEn { - _StringsErrorsNl._(this._root); + _StringsErrorsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String searchFailed({required Object error}) => 'Zoeken mislukt: ${error}'; - @override - String connectionTimeout({required Object context}) => - 'Verbinding time-out tijdens laden ${context}'; - @override - String get connectionFailed => 'Kan geen verbinding maken met Plex server'; - @override - String failedToLoad({required Object context, required Object error}) => - 'Kon ${context} niet laden: ${error}'; - @override - String get noClientAvailable => 'Geen client beschikbaar'; - @override - String authenticationFailed({required Object error}) => - 'Authenticatie mislukt: ${error}'; - @override - String get couldNotLaunchUrl => 'Kon auth URL niet openen'; - @override - String get pleaseEnterToken => 'Voer een token in'; - @override - String get invalidToken => 'Ongeldig token'; - @override - String failedToVerifyToken({required Object error}) => - 'Kon token niet verifiëren: ${error}'; - @override - String failedToSwitchProfile({required Object displayName}) => - 'Kon niet wisselen naar ${displayName}'; - @override - String get connectionFailedGeneric => 'Verbinding mislukt'; + // Translations + @override String searchFailed({required Object error}) => 'Zoeken mislukt: ${error}'; + @override String connectionTimeout({required Object context}) => 'Verbinding time-out tijdens laden ${context}'; + @override String get connectionFailed => 'Kan geen verbinding maken met Plex server'; + @override String failedToLoad({required Object context, required Object error}) => 'Kon ${context} niet laden: ${error}'; + @override String get noClientAvailable => 'Geen client beschikbaar'; + @override String authenticationFailed({required Object error}) => 'Authenticatie mislukt: ${error}'; + @override String get couldNotLaunchUrl => 'Kon auth URL niet openen'; + @override String get pleaseEnterToken => 'Voer een token in'; + @override String get invalidToken => 'Ongeldig token'; + @override String failedToVerifyToken({required Object error}) => 'Kon token niet verifiëren: ${error}'; + @override String failedToSwitchProfile({required Object displayName}) => 'Kon niet wisselen naar ${displayName}'; + @override String get connectionFailedGeneric => 'Verbinding mislukt'; } // Path: libraries class _StringsLibrariesNl implements _StringsLibrariesEn { - _StringsLibrariesNl._(this._root); + _StringsLibrariesNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Bibliotheken'; - @override - String get scanLibraryFiles => 'Scan bibliotheek bestanden'; - @override - String get scanLibrary => 'Scan bibliotheek'; - @override - String get analyze => 'Analyseren'; - @override - String get analyzeLibrary => 'Analyseer bibliotheek'; - @override - String get refreshMetadata => 'Vernieuw metadata'; - @override - String get emptyTrash => 'Prullenbak legen'; - @override - String emptyingTrash({required Object title}) => - 'Prullenbak legen voor "${title}"...'; - @override - String trashEmptied({required Object title}) => - 'Prullenbak geleegd voor "${title}"'; - @override - String failedToEmptyTrash({required Object error}) => - 'Kon prullenbak niet legen: ${error}'; - @override - String analyzing({required Object title}) => 'Analyseren "${title}"...'; - @override - String analysisStarted({required Object title}) => - 'Analyse gestart voor "${title}"'; - @override - String failedToAnalyze({required Object error}) => - 'Kon bibliotheek niet analyseren: ${error}'; - @override - String get noLibrariesFound => 'Geen bibliotheken gevonden'; - @override - String get thisLibraryIsEmpty => 'Deze bibliotheek is leeg'; - @override - String get all => 'Alles'; - @override - String get clearAll => 'Alles wissen'; - @override - String scanLibraryConfirm({required Object title}) => - 'Weet je zeker dat je "${title}" wilt scannen?'; - @override - String analyzeLibraryConfirm({required Object title}) => - 'Weet je zeker dat je "${title}" wilt analyseren?'; - @override - String refreshMetadataConfirm({required Object title}) => - 'Weet je zeker dat je metadata wilt vernieuwen voor "${title}"?'; - @override - String emptyTrashConfirm({required Object title}) => - 'Weet je zeker dat je de prullenbak wilt legen voor "${title}"?'; - @override - String get manageLibraries => 'Beheer bibliotheken'; - @override - String get sort => 'Sorteren'; - @override - String get sortBy => 'Sorteer op'; - @override - String get filters => 'Filters'; - @override - String loadingLibraryWithCount({required Object count}) => - 'Bibliotheek laden... (${count} items geladen)'; - @override - String get confirmActionMessage => - 'Weet je zeker dat je deze actie wilt uitvoeren?'; - @override - String get showLibrary => 'Toon bibliotheek'; - @override - String get hideLibrary => 'Verberg bibliotheek'; - @override - String get libraryOptions => 'Bibliotheek opties'; - @override - String get content => 'bibliotheekinhoud'; - @override - String get selectLibrary => 'Bibliotheek kiezen'; - @override - String filtersWithCount({required Object count}) => 'Filters (${count})'; - @override - String get noRecommendations => 'Geen aanbevelingen beschikbaar'; - @override - String get noCollections => 'Geen collecties in deze bibliotheek'; - @override - String get noFoldersFound => 'Geen mappen gevonden'; - @override - String get folders => 'mappen'; - @override - late final _StringsLibrariesTabsNl tabs = _StringsLibrariesTabsNl._(_root); - @override - late final _StringsLibrariesGroupingsNl groupings = - _StringsLibrariesGroupingsNl._(_root); + // Translations + @override String get title => 'Bibliotheken'; + @override String get scanLibraryFiles => 'Scan bibliotheek bestanden'; + @override String get scanLibrary => 'Scan bibliotheek'; + @override String get analyze => 'Analyseren'; + @override String get analyzeLibrary => 'Analyseer bibliotheek'; + @override String get refreshMetadata => 'Vernieuw metadata'; + @override String get emptyTrash => 'Prullenbak legen'; + @override String emptyingTrash({required Object title}) => 'Prullenbak legen voor "${title}"...'; + @override String trashEmptied({required Object title}) => 'Prullenbak geleegd voor "${title}"'; + @override String failedToEmptyTrash({required Object error}) => 'Kon prullenbak niet legen: ${error}'; + @override String analyzing({required Object title}) => 'Analyseren "${title}"...'; + @override String analysisStarted({required Object title}) => 'Analyse gestart voor "${title}"'; + @override String failedToAnalyze({required Object error}) => 'Kon bibliotheek niet analyseren: ${error}'; + @override String get noLibrariesFound => 'Geen bibliotheken gevonden'; + @override String get thisLibraryIsEmpty => 'Deze bibliotheek is leeg'; + @override String get all => 'Alles'; + @override String get clearAll => 'Alles wissen'; + @override String scanLibraryConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt scannen?'; + @override String analyzeLibraryConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt analyseren?'; + @override String refreshMetadataConfirm({required Object title}) => 'Weet je zeker dat je metadata wilt vernieuwen voor "${title}"?'; + @override String emptyTrashConfirm({required Object title}) => 'Weet je zeker dat je de prullenbak wilt legen voor "${title}"?'; + @override String get manageLibraries => 'Beheer bibliotheken'; + @override String get sort => 'Sorteren'; + @override String get sortBy => 'Sorteer op'; + @override String get filters => 'Filters'; + @override String loadingLibraryWithCount({required Object count}) => 'Bibliotheek laden... (${count} items geladen)'; + @override String get confirmActionMessage => 'Weet je zeker dat je deze actie wilt uitvoeren?'; + @override String get showLibrary => 'Toon bibliotheek'; + @override String get hideLibrary => 'Verberg bibliotheek'; + @override String get libraryOptions => 'Bibliotheek opties'; + @override String get content => 'bibliotheekinhoud'; + @override String get selectLibrary => 'Bibliotheek kiezen'; + @override String filtersWithCount({required Object count}) => 'Filters (${count})'; + @override String get noRecommendations => 'Geen aanbevelingen beschikbaar'; + @override String get noCollections => 'Geen collecties in deze bibliotheek'; + @override String get noFoldersFound => 'Geen mappen gevonden'; + @override String get folders => 'mappen'; + @override late final _StringsLibrariesTabsNl tabs = _StringsLibrariesTabsNl._(_root); + @override late final _StringsLibrariesGroupingsNl groupings = _StringsLibrariesGroupingsNl._(_root); } // Path: about class _StringsAboutNl implements _StringsAboutEn { - _StringsAboutNl._(this._root); + _StringsAboutNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Over'; - @override - String get openSourceLicenses => 'Open Source licenties'; - @override - String versionLabel({required Object version}) => 'Versie ${version}'; - @override - String get appDescription => 'Een mooie Plex client voor Flutter'; - @override - String get viewLicensesDescription => - 'Bekijk licenties van third-party bibliotheken'; + // Translations + @override String get title => 'Over'; + @override String get openSourceLicenses => 'Open Source licenties'; + @override String versionLabel({required Object version}) => 'Versie ${version}'; + @override String get appDescription => 'Een mooie Plex client voor Flutter'; + @override String get viewLicensesDescription => 'Bekijk licenties van third-party bibliotheken'; } // Path: serverSelection class _StringsServerSelectionNl implements _StringsServerSelectionEn { - _StringsServerSelectionNl._(this._root); + _StringsServerSelectionNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get connectingToServer => 'Verbinden met server...'; - @override - String get connectingToAllServers => 'Verbinden met alle servers...'; - @override - String get connectToAllServers => 'Verbind met alle servers'; - @override - String get allServerConnectionsFailed => - 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.'; - @override - String foundServers({required Object count}) => '${count} server(s) gevonden'; - @override - String get orSelectIndividually => 'Of selecteer een server individueel:'; - @override - String get serverDebugCopied => - 'Server debug gegevens gekopieerd naar klembord'; - @override - String get copyDebugData => 'Kopieer debug gegevens'; - @override - String get noServersFound => 'Geen servers gevonden'; - @override - String malformedServerData({required Object count}) => - '${count} server(s) gevonden met verkeerde data. Geen geldige servers beschikbaar.'; - @override - String get incompleteServerInfo => - 'Sommige servers hebben incomplete informatie en zijn overgeslagen. Controleer je Plex.tv account.'; - @override - String get incompleteConnectionInfo => - 'Server verbinding informatie is incompleet. Probeer opnieuw.'; - @override - String malformedServerInfo({required Object message}) => - 'Server informatie is verkeerd geformatteerd: ${message}'; - @override - String get networkConnectionFailed => - 'Netwerkverbinding mislukt. Controleer je internetverbinding en probeer opnieuw.'; - @override - String get authenticationFailed => 'Authenticatie mislukt. Log opnieuw in.'; - @override - String get plexServiceUnavailable => - 'Plex service niet beschikbaar. Probeer later opnieuw.'; - @override - String failedToLoadServers({required Object error}) => - 'Kon servers niet laden: ${error}'; + // Translations + @override String get connectingToServer => 'Verbinden met server...'; + @override String get connectingToAllServers => 'Verbinden met alle servers...'; + @override String get connectToAllServers => 'Verbind met alle servers'; + @override String get allServerConnectionsFailed => 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.'; + @override String foundServers({required Object count}) => '${count} server(s) gevonden'; + @override String get orSelectIndividually => 'Of selecteer een server individueel:'; + @override String get serverDebugCopied => 'Server debug gegevens gekopieerd naar klembord'; + @override String get copyDebugData => 'Kopieer debug gegevens'; + @override String get noServersFound => 'Geen servers gevonden'; + @override String malformedServerData({required Object count}) => '${count} server(s) gevonden met verkeerde data. Geen geldige servers beschikbaar.'; + @override String get incompleteServerInfo => 'Sommige servers hebben incomplete informatie en zijn overgeslagen. Controleer je Plex.tv account.'; + @override String get incompleteConnectionInfo => 'Server verbinding informatie is incompleet. Probeer opnieuw.'; + @override String malformedServerInfo({required Object message}) => 'Server informatie is verkeerd geformatteerd: ${message}'; + @override String get networkConnectionFailed => 'Netwerkverbinding mislukt. Controleer je internetverbinding en probeer opnieuw.'; + @override String get authenticationFailed => 'Authenticatie mislukt. Log opnieuw in.'; + @override String get plexServiceUnavailable => 'Plex service niet beschikbaar. Probeer later opnieuw.'; + @override String failedToLoadServers({required Object error}) => 'Kon servers niet laden: ${error}'; } // Path: hubDetail class _StringsHubDetailNl implements _StringsHubDetailEn { - _StringsHubDetailNl._(this._root); + _StringsHubDetailNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Titel'; - @override - String get releaseYear => 'Uitgavejaar'; - @override - String get dateAdded => 'Datum toegevoegd'; - @override - String get rating => 'Beoordeling'; - @override - String get noItemsFound => 'Geen items gevonden'; + // Translations + @override String get title => 'Titel'; + @override String get releaseYear => 'Uitgavejaar'; + @override String get dateAdded => 'Datum toegevoegd'; + @override String get rating => 'Beoordeling'; + @override String get noItemsFound => 'Geen items gevonden'; } // Path: logs class _StringsLogsNl implements _StringsLogsEn { - _StringsLogsNl._(this._root); + _StringsLogsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Logbestanden'; - @override - String get clearLogs => 'Wis logs'; - @override - String get copyLogs => 'Kopieer logs'; - @override - String get exportLogs => 'Exporteer logs'; - @override - String get noLogsToShow => 'Geen logs om te tonen'; - @override - String get error => 'Fout:'; - @override - String get stackTrace => 'Stacktracering:'; + // Translations + @override String get title => 'Logbestanden'; + @override String get clearLogs => 'Wis logs'; + @override String get copyLogs => 'Kopieer logs'; + @override String get exportLogs => 'Exporteer logs'; + @override String get noLogsToShow => 'Geen logs om te tonen'; + @override String get error => 'Fout:'; + @override String get stackTrace => 'Stacktracering:'; } // Path: licenses class _StringsLicensesNl implements _StringsLicensesEn { - _StringsLicensesNl._(this._root); + _StringsLicensesNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get relatedPackages => 'Gerelateerde pakketten'; - @override - String get license => 'Licentie'; - @override - String licenseNumber({required Object number}) => 'Licentie ${number}'; - @override - String licensesCount({required Object count}) => '${count} licenties'; + // Translations + @override String get relatedPackages => 'Gerelateerde pakketten'; + @override String get license => 'Licentie'; + @override String licenseNumber({required Object number}) => 'Licentie ${number}'; + @override String licensesCount({required Object count}) => '${count} licenties'; } // Path: navigation class _StringsNavigationNl implements _StringsNavigationEn { - _StringsNavigationNl._(this._root); + _StringsNavigationNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get home => 'Thuis'; - @override - String get search => 'Zoeken'; - @override - String get libraries => 'Bibliotheken'; - @override - String get settings => 'Instellingen'; + // Translations + @override String get home => 'Thuis'; + @override String get search => 'Zoeken'; + @override String get libraries => 'Bibliotheken'; + @override String get settings => 'Instellingen'; } // Path: playlists class _StringsPlaylistsNl implements _StringsPlaylistsEn { - _StringsPlaylistsNl._(this._root); + _StringsPlaylistsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Afspeellijsten'; - @override - String get noPlaylists => 'Geen afspeellijsten gevonden'; - @override - String get create => 'Afspeellijst maken'; - @override - String get newPlaylist => 'Nieuwe afspeellijst'; - @override - String get playlistName => 'Naam afspeellijst'; - @override - String get enterPlaylistName => 'Voer naam afspeellijst in'; - @override - String get edit => 'Afspeellijst bewerken'; - @override - String get delete => 'Afspeellijst verwijderen'; - @override - String get addTo => 'Toevoegen aan afspeellijst'; - @override - String get addItems => 'Items toevoegen'; - @override - String get removeItem => 'Verwijderen uit afspeellijst'; - @override - String get clearPlaylist => 'Afspeellijst wissen'; - @override - String get playAll => 'Alles afspelen'; - @override - String get shuffle => 'Willekeurig'; - @override - String get smartPlaylist => 'Slimme afspeellijst'; - @override - String get regularPlaylist => 'Normale afspeellijst'; - @override - String itemCount({required Object count}) => '${count} items'; - @override - String get oneItem => '1 item'; - @override - String get emptyPlaylist => 'Deze afspeellijst is leeg'; - @override - String get deleteConfirm => 'Afspeellijst verwijderen?'; - @override - String deleteMessage({required Object name}) => - 'Weet je zeker dat je "${name}" wilt verwijderen?'; - @override - String get created => 'Afspeellijst gemaakt'; - @override - String get updated => 'Afspeellijst bijgewerkt'; - @override - String get deleted => 'Afspeellijst verwijderd'; - @override - String get itemAdded => 'Toegevoegd aan afspeellijst'; - @override - String get itemRemoved => 'Verwijderd uit afspeellijst'; - @override - String get selectPlaylist => 'Selecteer afspeellijst'; - @override - String get createNewPlaylist => 'Nieuwe afspeellijst maken'; - @override - String get errorCreating => 'Fout bij maken afspeellijst'; - @override - String get errorDeleting => 'Fout bij verwijderen afspeellijst'; - @override - String get errorLoading => 'Fout bij laden afspeellijsten'; - @override - String get errorAdding => 'Fout bij toevoegen aan afspeellijst'; - @override - String get errorReordering => 'Fout bij herschikken van afspeellijstitem'; - @override - String get errorRemoving => 'Fout bij verwijderen uit afspeellijst'; - @override - String get playlist => 'Afspeellijst'; + // Translations + @override String get title => 'Afspeellijsten'; + @override String get noPlaylists => 'Geen afspeellijsten gevonden'; + @override String get create => 'Afspeellijst maken'; + @override String get newPlaylist => 'Nieuwe afspeellijst'; + @override String get playlistName => 'Naam afspeellijst'; + @override String get enterPlaylistName => 'Voer naam afspeellijst in'; + @override String get edit => 'Afspeellijst bewerken'; + @override String get delete => 'Afspeellijst verwijderen'; + @override String get addTo => 'Toevoegen aan afspeellijst'; + @override String get addItems => 'Items toevoegen'; + @override String get removeItem => 'Verwijderen uit afspeellijst'; + @override String get clearPlaylist => 'Afspeellijst wissen'; + @override String get playAll => 'Alles afspelen'; + @override String get shuffle => 'Willekeurig'; + @override String get smartPlaylist => 'Slimme afspeellijst'; + @override String get regularPlaylist => 'Normale afspeellijst'; + @override String itemCount({required Object count}) => '${count} items'; + @override String get oneItem => '1 item'; + @override String get emptyPlaylist => 'Deze afspeellijst is leeg'; + @override String get deleteConfirm => 'Afspeellijst verwijderen?'; + @override String deleteMessage({required Object name}) => 'Weet je zeker dat je "${name}" wilt verwijderen?'; + @override String get created => 'Afspeellijst gemaakt'; + @override String get updated => 'Afspeellijst bijgewerkt'; + @override String get deleted => 'Afspeellijst verwijderd'; + @override String get itemAdded => 'Toegevoegd aan afspeellijst'; + @override String get itemRemoved => 'Verwijderd uit afspeellijst'; + @override String get selectPlaylist => 'Selecteer afspeellijst'; + @override String get createNewPlaylist => 'Nieuwe afspeellijst maken'; + @override String get errorCreating => 'Fout bij maken afspeellijst'; + @override String get errorDeleting => 'Fout bij verwijderen afspeellijst'; + @override String get errorLoading => 'Fout bij laden afspeellijsten'; + @override String get errorAdding => 'Fout bij toevoegen aan afspeellijst'; + @override String get errorReordering => 'Fout bij herschikken van afspeellijstitem'; + @override String get errorRemoving => 'Fout bij verwijderen uit afspeellijst'; + @override String get playlist => 'Afspeellijst'; } // Path: collections class _StringsCollectionsNl implements _StringsCollectionsEn { - _StringsCollectionsNl._(this._root); + _StringsCollectionsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get title => 'Collecties'; - @override - String get collection => 'Collectie'; - @override - String get empty => 'Collectie is leeg'; - @override - String get noItems => 'Geen items in deze collectie'; - @override - String get unknownLibrarySection => - 'Kan niet verwijderen: onbekende bibliotheeksectie'; - @override - String get deleteCollection => 'Collectie verwijderen'; - @override - String deleteConfirm({required Object title}) => - 'Weet je zeker dat je "${title}" wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.'; - @override - String get deleted => 'Collectie verwijderd'; - @override - String get deleteFailed => 'Collectie verwijderen mislukt'; - @override - String deleteFailedWithError({required Object error}) => - 'Collectie verwijderen mislukt: ${error}'; - @override - String failedToLoadItems({required Object error}) => - 'Collectie-items laden mislukt: ${error}'; - @override - String get addTo => 'Toevoegen aan collectie'; - @override - String get selectCollection => 'Selecteer collectie'; - @override - String get createNewCollection => 'Nieuwe collectie maken'; - @override - String get collectionName => 'Collectienaam'; - @override - String get enterCollectionName => 'Voer collectienaam in'; - @override - String get addedToCollection => 'Toegevoegd aan collectie'; - @override - String get errorAddingToCollection => 'Fout bij toevoegen aan collectie'; - @override - String get created => 'Collectie gemaakt'; - @override - String get removeFromCollection => 'Verwijderen uit collectie'; - @override - String removeFromCollectionConfirm({required Object title}) => - '"${title}" uit deze collectie verwijderen?'; - @override - String get removedFromCollection => 'Uit collectie verwijderd'; - @override - String get removeFromCollectionFailed => 'Verwijderen uit collectie mislukt'; - @override - String removeFromCollectionError({required Object error}) => - 'Fout bij verwijderen uit collectie: ${error}'; + // Translations + @override String get title => 'Collecties'; + @override String get collection => 'Collectie'; + @override String get empty => 'Collectie is leeg'; + @override String get noItems => 'Geen items in deze collectie'; + @override String get unknownLibrarySection => 'Kan niet verwijderen: onbekende bibliotheeksectie'; + @override String get deleteCollection => 'Collectie verwijderen'; + @override String deleteConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.'; + @override String get deleted => 'Collectie verwijderd'; + @override String get deleteFailed => 'Collectie verwijderen mislukt'; + @override String deleteFailedWithError({required Object error}) => 'Collectie verwijderen mislukt: ${error}'; + @override String failedToLoadItems({required Object error}) => 'Collectie-items laden mislukt: ${error}'; + @override String get addTo => 'Toevoegen aan collectie'; + @override String get selectCollection => 'Selecteer collectie'; + @override String get createNewCollection => 'Nieuwe collectie maken'; + @override String get collectionName => 'Collectienaam'; + @override String get enterCollectionName => 'Voer collectienaam in'; + @override String get addedToCollection => 'Toegevoegd aan collectie'; + @override String get errorAddingToCollection => 'Fout bij toevoegen aan collectie'; + @override String get created => 'Collectie gemaakt'; + @override String get removeFromCollection => 'Verwijderen uit collectie'; + @override String removeFromCollectionConfirm({required Object title}) => '"${title}" uit deze collectie verwijderen?'; + @override String get removedFromCollection => 'Uit collectie verwijderd'; + @override String get removeFromCollectionFailed => 'Verwijderen uit collectie mislukt'; + @override String removeFromCollectionError({required Object error}) => 'Fout bij verwijderen uit collectie: ${error}'; } // Path: libraries.tabs class _StringsLibrariesTabsNl implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsNl._(this._root); + _StringsLibrariesTabsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get recommended => 'Aanbevolen'; - @override - String get browse => 'Bladeren'; - @override - String get collections => 'Collecties'; - @override - String get playlists => 'Afspeellijsten'; + // Translations + @override String get recommended => 'Aanbevolen'; + @override String get browse => 'Bladeren'; + @override String get collections => 'Collecties'; + @override String get playlists => 'Afspeellijsten'; } // Path: libraries.groupings class _StringsLibrariesGroupingsNl implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsNl._(this._root); + _StringsLibrariesGroupingsNl._(this._root); - @override - final _StringsNl _root; // ignore: unused_field + @override final _StringsNl _root; // ignore: unused_field - // Translations - @override - String get all => 'Alles'; - @override - String get movies => 'Films'; - @override - String get shows => 'Series'; - @override - String get seasons => 'Seizoenen'; - @override - String get episodes => 'Afleveringen'; - @override - String get folders => 'Mappen'; + // Translations + @override String get all => 'Alles'; + @override String get movies => 'Films'; + @override String get shows => 'Series'; + @override String get seasons => 'Seizoenen'; + @override String get episodes => 'Afleveringen'; + @override String get folders => 'Mappen'; } // Path: class _StringsSv implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsSv.build({ - Map? overrides, - PluralResolver? cardinalResolver, - PluralResolver? ordinalResolver, - }) : assert( - overrides == null, - 'Set "translation_overrides: true" in order to enable this feature.', - ), - $meta = TranslationMetadata( - locale: AppLocale.sv, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsSv.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.sv, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - @override - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); - @override - late final _StringsSv _root = this; // ignore: unused_field + @override late final _StringsSv _root = this; // ignore: unused_field - // Translations - @override - late final _StringsAppSv app = _StringsAppSv._(_root); - @override - late final _StringsAuthSv auth = _StringsAuthSv._(_root); - @override - late final _StringsCommonSv common = _StringsCommonSv._(_root); - @override - late final _StringsScreensSv screens = _StringsScreensSv._(_root); - @override - late final _StringsUpdateSv update = _StringsUpdateSv._(_root); - @override - late final _StringsSettingsSv settings = _StringsSettingsSv._(_root); - @override - late final _StringsSearchSv search = _StringsSearchSv._(_root); - @override - late final _StringsHotkeysSv hotkeys = _StringsHotkeysSv._(_root); - @override - late final _StringsPinEntrySv pinEntry = _StringsPinEntrySv._(_root); - @override - late final _StringsFileInfoSv fileInfo = _StringsFileInfoSv._(_root); - @override - late final _StringsMediaMenuSv mediaMenu = _StringsMediaMenuSv._(_root); - @override - late final _StringsAccessibilitySv accessibility = _StringsAccessibilitySv._( - _root, - ); - @override - late final _StringsTooltipsSv tooltips = _StringsTooltipsSv._(_root); - @override - late final _StringsVideoControlsSv videoControls = _StringsVideoControlsSv._( - _root, - ); - @override - late final _StringsUserStatusSv userStatus = _StringsUserStatusSv._(_root); - @override - late final _StringsMessagesSv messages = _StringsMessagesSv._(_root); - @override - late final _StringsProfileSv profile = _StringsProfileSv._(_root); - @override - late final _StringsSubtitlingStylingSv subtitlingStyling = - _StringsSubtitlingStylingSv._(_root); - @override - late final _StringsDialogSv dialog = _StringsDialogSv._(_root); - @override - late final _StringsDiscoverSv discover = _StringsDiscoverSv._(_root); - @override - late final _StringsErrorsSv errors = _StringsErrorsSv._(_root); - @override - late final _StringsLibrariesSv libraries = _StringsLibrariesSv._(_root); - @override - late final _StringsAboutSv about = _StringsAboutSv._(_root); - @override - late final _StringsServerSelectionSv serverSelection = - _StringsServerSelectionSv._(_root); - @override - late final _StringsHubDetailSv hubDetail = _StringsHubDetailSv._(_root); - @override - late final _StringsLogsSv logs = _StringsLogsSv._(_root); - @override - late final _StringsLicensesSv licenses = _StringsLicensesSv._(_root); - @override - late final _StringsNavigationSv navigation = _StringsNavigationSv._(_root); - @override - late final _StringsPlaylistsSv playlists = _StringsPlaylistsSv._(_root); - @override - late final _StringsCollectionsSv collections = _StringsCollectionsSv._(_root); + // Translations + @override late final _StringsAppSv app = _StringsAppSv._(_root); + @override late final _StringsAuthSv auth = _StringsAuthSv._(_root); + @override late final _StringsCommonSv common = _StringsCommonSv._(_root); + @override late final _StringsScreensSv screens = _StringsScreensSv._(_root); + @override late final _StringsUpdateSv update = _StringsUpdateSv._(_root); + @override late final _StringsSettingsSv settings = _StringsSettingsSv._(_root); + @override late final _StringsSearchSv search = _StringsSearchSv._(_root); + @override late final _StringsHotkeysSv hotkeys = _StringsHotkeysSv._(_root); + @override late final _StringsPinEntrySv pinEntry = _StringsPinEntrySv._(_root); + @override late final _StringsFileInfoSv fileInfo = _StringsFileInfoSv._(_root); + @override late final _StringsMediaMenuSv mediaMenu = _StringsMediaMenuSv._(_root); + @override late final _StringsAccessibilitySv accessibility = _StringsAccessibilitySv._(_root); + @override late final _StringsTooltipsSv tooltips = _StringsTooltipsSv._(_root); + @override late final _StringsVideoControlsSv videoControls = _StringsVideoControlsSv._(_root); + @override late final _StringsUserStatusSv userStatus = _StringsUserStatusSv._(_root); + @override late final _StringsMessagesSv messages = _StringsMessagesSv._(_root); + @override late final _StringsProfileSv profile = _StringsProfileSv._(_root); + @override late final _StringsSubtitlingStylingSv subtitlingStyling = _StringsSubtitlingStylingSv._(_root); + @override late final _StringsDialogSv dialog = _StringsDialogSv._(_root); + @override late final _StringsDiscoverSv discover = _StringsDiscoverSv._(_root); + @override late final _StringsErrorsSv errors = _StringsErrorsSv._(_root); + @override late final _StringsLibrariesSv libraries = _StringsLibrariesSv._(_root); + @override late final _StringsAboutSv about = _StringsAboutSv._(_root); + @override late final _StringsServerSelectionSv serverSelection = _StringsServerSelectionSv._(_root); + @override late final _StringsHubDetailSv hubDetail = _StringsHubDetailSv._(_root); + @override late final _StringsLogsSv logs = _StringsLogsSv._(_root); + @override late final _StringsLicensesSv licenses = _StringsLicensesSv._(_root); + @override late final _StringsNavigationSv navigation = _StringsNavigationSv._(_root); + @override late final _StringsPlaylistsSv playlists = _StringsPlaylistsSv._(_root); + @override late final _StringsCollectionsSv collections = _StringsCollectionsSv._(_root); } // Path: app class _StringsAppSv implements _StringsAppEn { - _StringsAppSv._(this._root); + _StringsAppSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Plezy'; - @override - String get loading => 'Laddar...'; + // Translations + @override String get title => 'Plezy'; + @override String get loading => 'Laddar...'; } // Path: auth class _StringsAuthSv implements _StringsAuthEn { - _StringsAuthSv._(this._root); + _StringsAuthSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get signInWithPlex => 'Logga in med Plex'; - @override - String get showQRCode => 'Visa QR-kod'; - @override - String get cancel => 'Avbryt'; - @override - String get authenticate => 'Autentisera'; - @override - String get retry => 'Försök igen'; - @override - String get debugEnterToken => 'Debug: Ange Plex-token'; - @override - String get plexTokenLabel => 'Plex-autentiseringstoken'; - @override - String get plexTokenHint => 'Ange din Plex.tv-token'; - @override - String get authenticationTimeout => - 'Autentisering tog för lång tid. Försök igen.'; - @override - String get scanQRCodeInstruction => - 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.'; - @override - String get waitingForAuth => - 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.'; + // Translations + @override String get signInWithPlex => 'Logga in med Plex'; + @override String get showQRCode => 'Visa QR-kod'; + @override String get cancel => 'Avbryt'; + @override String get authenticate => 'Autentisera'; + @override String get retry => 'Försök igen'; + @override String get debugEnterToken => 'Debug: Ange Plex-token'; + @override String get plexTokenLabel => 'Plex-autentiseringstoken'; + @override String get plexTokenHint => 'Ange din Plex.tv-token'; + @override String get authenticationTimeout => 'Autentisering tog för lång tid. Försök igen.'; + @override String get scanQRCodeInstruction => 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.'; + @override String get waitingForAuth => 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.'; } // Path: common class _StringsCommonSv implements _StringsCommonEn { - _StringsCommonSv._(this._root); + _StringsCommonSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get cancel => 'Avbryt'; - @override - String get save => 'Spara'; - @override - String get close => 'Stäng'; - @override - String get clear => 'Rensa'; - @override - String get reset => 'Återställ'; - @override - String get later => 'Senare'; - @override - String get submit => 'Skicka'; - @override - String get confirm => 'Bekräfta'; - @override - String get retry => 'Försök igen'; - @override - String get playNow => 'Spela nu'; - @override - String get logout => 'Logga ut'; - @override - String get online => 'Online'; - @override - String get offline => 'Offline'; - @override - String get owned => 'Egen'; - @override - String get shared => 'Delad'; - @override - String get current => 'NUVARANDE'; - @override - String get unknown => 'Okänd'; - @override - String get refresh => 'Uppdatera'; - @override - String get yes => 'Ja'; - @override - String get no => 'Nej'; - @override - String get server => 'Server'; - @override - String get delete => 'Ta bort'; - @override - String get shuffle => 'Blanda'; - @override - String get addTo => 'Lägg till i...'; + // Translations + @override String get cancel => 'Avbryt'; + @override String get save => 'Spara'; + @override String get close => 'Stäng'; + @override String get clear => 'Rensa'; + @override String get reset => 'Återställ'; + @override String get later => 'Senare'; + @override String get submit => 'Skicka'; + @override String get confirm => 'Bekräfta'; + @override String get retry => 'Försök igen'; + @override String get playNow => 'Spela nu'; + @override String get logout => 'Logga ut'; + @override String get online => 'Online'; + @override String get offline => 'Offline'; + @override String get owned => 'Egen'; + @override String get shared => 'Delad'; + @override String get current => 'NUVARANDE'; + @override String get unknown => 'Okänd'; + @override String get refresh => 'Uppdatera'; + @override String get yes => 'Ja'; + @override String get no => 'Nej'; + @override String get server => 'Server'; + @override String get delete => 'Ta bort'; + @override String get shuffle => 'Blanda'; + @override String get addTo => 'Lägg till i...'; } // Path: screens class _StringsScreensSv implements _StringsScreensEn { - _StringsScreensSv._(this._root); + _StringsScreensSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get licenses => 'Licenser'; - @override - String get selectServer => 'Välj server'; - @override - String get switchProfile => 'Byt profil'; - @override - String get subtitleStyling => 'Undertext-styling'; - @override - String get search => 'Sök'; - @override - String get logs => 'Loggar'; + // Translations + @override String get licenses => 'Licenser'; + @override String get selectServer => 'Välj server'; + @override String get switchProfile => 'Byt profil'; + @override String get subtitleStyling => 'Undertext-styling'; + @override String get search => 'Sök'; + @override String get logs => 'Loggar'; } // Path: update class _StringsUpdateSv implements _StringsUpdateEn { - _StringsUpdateSv._(this._root); + _StringsUpdateSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get available => 'Uppdatering tillgänglig'; - @override - String versionAvailable({required Object version}) => - 'Version ${version} är tillgänglig'; - @override - String currentVersion({required Object version}) => 'Nuvarande: ${version}'; - @override - String get skipVersion => 'Hoppa över denna version'; - @override - String get viewRelease => 'Visa release'; - @override - String get latestVersion => 'Du har den senaste versionen'; - @override - String get checkFailed => 'Misslyckades att kontrollera uppdateringar'; + // Translations + @override String get available => 'Uppdatering tillgänglig'; + @override String versionAvailable({required Object version}) => 'Version ${version} är tillgänglig'; + @override String currentVersion({required Object version}) => 'Nuvarande: ${version}'; + @override String get skipVersion => 'Hoppa över denna version'; + @override String get viewRelease => 'Visa release'; + @override String get latestVersion => 'Du har den senaste versionen'; + @override String get checkFailed => 'Misslyckades att kontrollera uppdateringar'; } // Path: settings class _StringsSettingsSv implements _StringsSettingsEn { - _StringsSettingsSv._(this._root); + _StringsSettingsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Inställningar'; - @override - String get language => 'Språk'; - @override - String get theme => 'Tema'; - @override - String get appearance => 'Utseende'; - @override - String get videoPlayback => 'Videouppspelning'; - @override - String get shufflePlay => 'Blanda uppspelning'; - @override - String get advanced => 'Avancerat'; - @override - String get useSeasonPostersDescription => - 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; - @override - String get showHeroSectionDescription => - 'Visa utvalda innehållskarusell på startsidan'; - @override - String get secondsLabel => 'Sekunder'; - @override - String get minutesLabel => 'Minuter'; - @override - String get secondsShort => 's'; - @override - String get minutesShort => 'm'; - @override - String durationHint({required Object min, required Object max}) => - 'Ange tid (${min}-${max})'; - @override - String get systemTheme => 'System'; - @override - String get systemThemeDescription => 'Följ systeminställningar'; - @override - String get lightTheme => 'Ljust'; - @override - String get darkTheme => 'Mörkt'; - @override - String get libraryDensity => 'Biblioteksdensitet'; - @override - String get compact => 'Kompakt'; - @override - String get compactDescription => 'Mindre kort, fler objekt synliga'; - @override - String get normal => 'Normal'; - @override - String get normalDescription => 'Standardstorlek'; - @override - String get comfortable => 'Bekväm'; - @override - String get comfortableDescription => 'Större kort, färre objekt synliga'; - @override - String get viewMode => 'Visningsläge'; - @override - String get gridView => 'Rutnät'; - @override - String get gridViewDescription => 'Visa objekt i rutnätslayout'; - @override - String get listView => 'Lista'; - @override - String get listViewDescription => 'Visa objekt i listlayout'; - @override - String get useSeasonPosters => 'Använd säsongsaffischer'; - @override - String get showHeroSection => 'Visa hjältesektion'; - @override - String get hardwareDecoding => 'Hårdvaruavkodning'; - @override - String get hardwareDecodingDescription => - 'Använd hårdvaruacceleration när tillgängligt'; - @override - String get bufferSize => 'Bufferstorlek'; - @override - String bufferSizeMB({required Object size}) => '${size}MB'; - @override - String get subtitleStyling => 'Undertext-styling'; - @override - String get subtitleStylingDescription => 'Anpassa undertextutseende'; - @override - String get smallSkipDuration => 'Kort hoppvaraktighet'; - @override - String get largeSkipDuration => 'Lång hoppvaraktighet'; - @override - String secondsUnit({required Object seconds}) => '${seconds} sekunder'; - @override - String get defaultSleepTimer => 'Standard sovtimer'; - @override - String minutesUnit({required Object minutes}) => '${minutes} minuter'; - @override - String get rememberTrackSelections => 'Kom ihåg spårval per serie/film'; - @override - String get rememberTrackSelectionsDescription => - 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; - @override - String get unwatchedOnly => 'Endast osedda'; - @override - String get unwatchedOnlyDescription => - 'Inkludera endast osedda avsnitt i blandningskön'; - @override - String get shuffleOrderNavigation => 'Blandningsordning-navigation'; - @override - String get shuffleOrderNavigationDescription => - 'Nästa/föregående knappar följer blandad ordning'; - @override - String get loopShuffleQueue => 'Loopa blandningskö'; - @override - String get loopShuffleQueueDescription => 'Starta om kö när slutet nås'; - @override - String get videoPlayerControls => 'Videospelar-kontroller'; - @override - String get keyboardShortcuts => 'Tangentbordsgenvägar'; - @override - String get keyboardShortcutsDescription => 'Anpassa tangentbordsgenvägar'; - @override - String get debugLogging => 'Felsökningsloggning'; - @override - String get debugLoggingDescription => - 'Aktivera detaljerad loggning för felsökning'; - @override - String get viewLogs => 'Visa loggar'; - @override - String get viewLogsDescription => 'Visa applikationsloggar'; - @override - String get clearCache => 'Rensa cache'; - @override - String get clearCacheDescription => - 'Detta rensar alla cachade bilder och data. Appen kan ta längre tid att ladda innehåll efter cache-rensning.'; - @override - String get clearCacheSuccess => 'Cache rensad framgångsrikt'; - @override - String get resetSettings => 'Återställ inställningar'; - @override - String get resetSettingsDescription => - 'Detta återställer alla inställningar till standardvärden. Denna åtgärd kan inte ångras.'; - @override - String get resetSettingsSuccess => 'Inställningar återställda framgångsrikt'; - @override - String get shortcutsReset => 'Genvägar återställda till standard'; - @override - String get about => 'Om'; - @override - String get aboutDescription => 'Appinformation och licenser'; - @override - String get updates => 'Uppdateringar'; - @override - String get updateAvailable => 'Uppdatering tillgänglig'; - @override - String get checkForUpdates => 'Kontrollera uppdateringar'; - @override - String get validationErrorEnterNumber => 'Vänligen ange ett giltigt nummer'; - @override - String validationErrorDuration({ - required Object min, - required Object max, - required Object unit, - }) => 'Tiden måste vara mellan ${min} och ${max} ${unit}'; - @override - String shortcutAlreadyAssigned({required Object action}) => - 'Genväg redan tilldelad ${action}'; - @override - String shortcutUpdated({required Object action}) => - 'Genväg uppdaterad för ${action}'; + // Translations + @override String get title => 'Inställningar'; + @override String get language => 'Språk'; + @override String get theme => 'Tema'; + @override String get appearance => 'Utseende'; + @override String get videoPlayback => 'Videouppspelning'; + @override String get shufflePlay => 'Blanda uppspelning'; + @override String get advanced => 'Avancerat'; + @override String get useSeasonPostersDescription => 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; + @override String get showHeroSectionDescription => 'Visa utvalda innehållskarusell på startsidan'; + @override String get secondsLabel => 'Sekunder'; + @override String get minutesLabel => 'Minuter'; + @override String get secondsShort => 's'; + @override String get minutesShort => 'm'; + @override String durationHint({required Object min, required Object max}) => 'Ange tid (${min}-${max})'; + @override String get systemTheme => 'System'; + @override String get systemThemeDescription => 'Följ systeminställningar'; + @override String get lightTheme => 'Ljust'; + @override String get darkTheme => 'Mörkt'; + @override String get libraryDensity => 'Biblioteksdensitet'; + @override String get compact => 'Kompakt'; + @override String get compactDescription => 'Mindre kort, fler objekt synliga'; + @override String get normal => 'Normal'; + @override String get normalDescription => 'Standardstorlek'; + @override String get comfortable => 'Bekväm'; + @override String get comfortableDescription => 'Större kort, färre objekt synliga'; + @override String get viewMode => 'Visningsläge'; + @override String get gridView => 'Rutnät'; + @override String get gridViewDescription => 'Visa objekt i rutnätslayout'; + @override String get listView => 'Lista'; + @override String get listViewDescription => 'Visa objekt i listlayout'; + @override String get useSeasonPosters => 'Använd säsongsaffischer'; + @override String get showHeroSection => 'Visa hjältesektion'; + @override String get hardwareDecoding => 'Hårdvaruavkodning'; + @override String get hardwareDecodingDescription => 'Använd hårdvaruacceleration när tillgängligt'; + @override String get bufferSize => 'Bufferstorlek'; + @override String bufferSizeMB({required Object size}) => '${size}MB'; + @override String get subtitleStyling => 'Undertext-styling'; + @override String get subtitleStylingDescription => 'Anpassa undertextutseende'; + @override String get smallSkipDuration => 'Kort hoppvaraktighet'; + @override String get largeSkipDuration => 'Lång hoppvaraktighet'; + @override String secondsUnit({required Object seconds}) => '${seconds} sekunder'; + @override String get defaultSleepTimer => 'Standard sovtimer'; + @override String minutesUnit({required Object minutes}) => '${minutes} minuter'; + @override String get rememberTrackSelections => 'Kom ihåg spårval per serie/film'; + @override String get rememberTrackSelectionsDescription => 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; + @override String get unwatchedOnly => 'Endast osedda'; + @override String get unwatchedOnlyDescription => 'Inkludera endast osedda avsnitt i blandningskön'; + @override String get shuffleOrderNavigation => 'Blandningsordning-navigation'; + @override String get shuffleOrderNavigationDescription => 'Nästa/föregående knappar följer blandad ordning'; + @override String get loopShuffleQueue => 'Loopa blandningskö'; + @override String get loopShuffleQueueDescription => 'Starta om kö när slutet nås'; + @override String get videoPlayerControls => 'Videospelar-kontroller'; + @override String get keyboardShortcuts => 'Tangentbordsgenvägar'; + @override String get keyboardShortcutsDescription => 'Anpassa tangentbordsgenvägar'; + @override String get debugLogging => 'Felsökningsloggning'; + @override String get debugLoggingDescription => 'Aktivera detaljerad loggning för felsökning'; + @override String get viewLogs => 'Visa loggar'; + @override String get viewLogsDescription => 'Visa applikationsloggar'; + @override String get clearCache => 'Rensa cache'; + @override String get clearCacheDescription => 'Detta rensar alla cachade bilder och data. Appen kan ta längre tid att ladda innehåll efter cache-rensning.'; + @override String get clearCacheSuccess => 'Cache rensad framgångsrikt'; + @override String get resetSettings => 'Återställ inställningar'; + @override String get resetSettingsDescription => 'Detta återställer alla inställningar till standardvärden. Denna åtgärd kan inte ångras.'; + @override String get resetSettingsSuccess => 'Inställningar återställda framgångsrikt'; + @override String get shortcutsReset => 'Genvägar återställda till standard'; + @override String get about => 'Om'; + @override String get aboutDescription => 'Appinformation och licenser'; + @override String get updates => 'Uppdateringar'; + @override String get updateAvailable => 'Uppdatering tillgänglig'; + @override String get checkForUpdates => 'Kontrollera uppdateringar'; + @override String get validationErrorEnterNumber => 'Vänligen ange ett giltigt nummer'; + @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Tiden måste vara mellan ${min} och ${max} ${unit}'; + @override String shortcutAlreadyAssigned({required Object action}) => 'Genväg redan tilldelad ${action}'; + @override String shortcutUpdated({required Object action}) => 'Genväg uppdaterad för ${action}'; + @override String get autoSkip => 'Auto Hoppa Över'; + @override String get autoSkipIntro => 'Hoppa Över Intro Automatiskt'; + @override String get autoSkipIntroDescription => 'Hoppa automatiskt över intro-markörer efter några sekunder'; + @override String get autoSkipCredits => 'Hoppa Över Credits Automatiskt'; + @override String get autoSkipCreditsDescription => 'Hoppa automatiskt över credits och spela nästa avsnitt'; + @override String get autoSkipDelay => 'Fördröjning Auto Hoppa Över'; + @override String autoSkipDelayDescription({required Object seconds}) => 'Vänta ${seconds} sekunder innan automatisk överhoppning'; } // Path: search class _StringsSearchSv implements _StringsSearchEn { - _StringsSearchSv._(this._root); + _StringsSearchSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get hint => 'Sök filmer, serier, musik...'; - @override - String get tryDifferentTerm => 'Prova en annan sökterm'; - @override - String get searchYourMedia => 'Sök i dina media'; - @override - String get enterTitleActorOrKeyword => - 'Ange en titel, skådespelare eller nyckelord'; + // Translations + @override String get hint => 'Sök filmer, serier, musik...'; + @override String get tryDifferentTerm => 'Prova en annan sökterm'; + @override String get searchYourMedia => 'Sök i dina media'; + @override String get enterTitleActorOrKeyword => 'Ange en titel, skådespelare eller nyckelord'; } // Path: hotkeys class _StringsHotkeysSv implements _StringsHotkeysEn { - _StringsHotkeysSv._(this._root); + _StringsHotkeysSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String setShortcutFor({required Object actionName}) => - 'Sätt genväg för ${actionName}'; - @override - String get clearShortcut => 'Rensa genväg'; + // Translations + @override String setShortcutFor({required Object actionName}) => 'Sätt genväg för ${actionName}'; + @override String get clearShortcut => 'Rensa genväg'; } // Path: pinEntry class _StringsPinEntrySv implements _StringsPinEntryEn { - _StringsPinEntrySv._(this._root); + _StringsPinEntrySv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get enterPin => 'Ange PIN'; - @override - String get showPin => 'Visa PIN'; - @override - String get hidePin => 'Dölj PIN'; + // Translations + @override String get enterPin => 'Ange PIN'; + @override String get showPin => 'Visa PIN'; + @override String get hidePin => 'Dölj PIN'; } // Path: fileInfo class _StringsFileInfoSv implements _StringsFileInfoEn { - _StringsFileInfoSv._(this._root); + _StringsFileInfoSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Filinformation'; - @override - String get video => 'Video'; - @override - String get audio => 'Ljud'; - @override - String get file => 'Fil'; - @override - String get advanced => 'Avancerat'; - @override - String get codec => 'Kodek'; - @override - String get resolution => 'Upplösning'; - @override - String get bitrate => 'Bithastighet'; - @override - String get frameRate => 'Bildfrekvens'; - @override - String get aspectRatio => 'Bildförhållande'; - @override - String get profile => 'Profil'; - @override - String get bitDepth => 'Bitdjup'; - @override - String get colorSpace => 'Färgrymd'; - @override - String get colorRange => 'Färgområde'; - @override - String get colorPrimaries => 'Färggrunder'; - @override - String get chromaSubsampling => 'Kroma-undersampling'; - @override - String get channels => 'Kanaler'; - @override - String get path => 'Sökväg'; - @override - String get size => 'Storlek'; - @override - String get container => 'Container'; - @override - String get duration => 'Varaktighet'; - @override - String get optimizedForStreaming => 'Optimerad för streaming'; - @override - String get has64bitOffsets => '64-bit offset'; + // Translations + @override String get title => 'Filinformation'; + @override String get video => 'Video'; + @override String get audio => 'Ljud'; + @override String get file => 'Fil'; + @override String get advanced => 'Avancerat'; + @override String get codec => 'Kodek'; + @override String get resolution => 'Upplösning'; + @override String get bitrate => 'Bithastighet'; + @override String get frameRate => 'Bildfrekvens'; + @override String get aspectRatio => 'Bildförhållande'; + @override String get profile => 'Profil'; + @override String get bitDepth => 'Bitdjup'; + @override String get colorSpace => 'Färgrymd'; + @override String get colorRange => 'Färgområde'; + @override String get colorPrimaries => 'Färggrunder'; + @override String get chromaSubsampling => 'Kroma-undersampling'; + @override String get channels => 'Kanaler'; + @override String get path => 'Sökväg'; + @override String get size => 'Storlek'; + @override String get container => 'Container'; + @override String get duration => 'Varaktighet'; + @override String get optimizedForStreaming => 'Optimerad för streaming'; + @override String get has64bitOffsets => '64-bit offset'; } // Path: mediaMenu class _StringsMediaMenuSv implements _StringsMediaMenuEn { - _StringsMediaMenuSv._(this._root); + _StringsMediaMenuSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get markAsWatched => 'Markera som sedd'; - @override - String get markAsUnwatched => 'Markera som osedd'; - @override - String get removeFromContinueWatching => 'Ta bort från Fortsätt titta'; - @override - String get goToSeries => 'Gå till serie'; - @override - String get goToSeason => 'Gå till säsong'; - @override - String get shufflePlay => 'Blanda uppspelning'; - @override - String get fileInfo => 'Filinformation'; + // Translations + @override String get markAsWatched => 'Markera som sedd'; + @override String get markAsUnwatched => 'Markera som osedd'; + @override String get removeFromContinueWatching => 'Ta bort från Fortsätt titta'; + @override String get goToSeries => 'Gå till serie'; + @override String get goToSeason => 'Gå till säsong'; + @override String get shufflePlay => 'Blanda uppspelning'; + @override String get fileInfo => 'Filinformation'; } // Path: accessibility class _StringsAccessibilitySv implements _StringsAccessibilityEn { - _StringsAccessibilitySv._(this._root); + _StringsAccessibilitySv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String mediaCardMovie({required Object title}) => '${title}, film'; - @override - String mediaCardShow({required Object title}) => '${title}, TV-serie'; - @override - String mediaCardEpisode({ - required Object title, - required Object episodeInfo, - }) => '${title}, ${episodeInfo}'; - @override - String mediaCardSeason({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - @override - String get mediaCardWatched => 'sedd'; - @override - String mediaCardPartiallyWatched({required Object percent}) => - '${percent} procent sedd'; - @override - String get mediaCardUnwatched => 'osedd'; - @override - String get tapToPlay => 'Tryck för att spela'; + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, film'; + @override String mediaCardShow({required Object title}) => '${title}, TV-serie'; + @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + @override String get mediaCardWatched => 'sedd'; + @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent sedd'; + @override String get mediaCardUnwatched => 'osedd'; + @override String get tapToPlay => 'Tryck för att spela'; } // Path: tooltips class _StringsTooltipsSv implements _StringsTooltipsEn { - _StringsTooltipsSv._(this._root); + _StringsTooltipsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get shufflePlay => 'Blanda uppspelning'; - @override - String get markAsWatched => 'Markera som sedd'; - @override - String get markAsUnwatched => 'Markera som osedd'; + // Translations + @override String get shufflePlay => 'Blanda uppspelning'; + @override String get markAsWatched => 'Markera som sedd'; + @override String get markAsUnwatched => 'Markera som osedd'; } // Path: videoControls class _StringsVideoControlsSv implements _StringsVideoControlsEn { - _StringsVideoControlsSv._(this._root); + _StringsVideoControlsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get audioLabel => 'Ljud'; - @override - String get subtitlesLabel => 'Undertexter'; - @override - String get resetToZero => 'Återställ till 0ms'; - @override - String addTime({required Object amount, required Object unit}) => - '+${amount}${unit}'; - @override - String minusTime({required Object amount, required Object unit}) => - '-${amount}${unit}'; - @override - String playsLater({required Object label}) => '${label} spelas senare'; - @override - String playsEarlier({required Object label}) => '${label} spelas tidigare'; - @override - String get noOffset => 'Ingen offset'; - @override - String get letterbox => 'Letterbox'; - @override - String get fillScreen => 'Fyll skärm'; - @override - String get stretch => 'Sträck'; - @override - String get lockRotation => 'Lås rotation'; - @override - String get unlockRotation => 'Lås upp rotation'; - @override - String get sleepTimer => 'Sovtimer'; - @override - String get timerActive => 'Timer aktiv'; - @override - String playbackWillPauseIn({required Object duration}) => - 'Uppspelningen pausas om ${duration}'; - @override - String get sleepTimerCompleted => 'Sovtimer slutförd - uppspelning pausad'; - @override - String get playButton => 'Spela'; - @override - String get pauseButton => 'Pausa'; - @override - String seekBackwardButton({required Object seconds}) => - 'Spola bakåt ${seconds} sekunder'; - @override - String seekForwardButton({required Object seconds}) => - 'Spola framåt ${seconds} sekunder'; - @override - String get previousButton => 'Föregående avsnitt'; - @override - String get nextButton => 'Nästa avsnitt'; - @override - String get previousChapterButton => 'Föregående kapitel'; - @override - String get nextChapterButton => 'Nästa kapitel'; - @override - String get volumeButton => 'Volym'; - @override - String get muteButton => 'Tysta'; - @override - String get unmuteButton => 'Slå på ljud'; - @override - String get settingsButton => 'Videoinställningar'; - @override - String get audioTrackButton => 'Ljudspår'; - @override - String get subtitlesButton => 'Undertexter'; - @override - String get chaptersButton => 'Kapitel'; - @override - String get versionsButton => 'Videoversioner'; - @override - String get aspectRatioButton => 'Bildförhållande'; - @override - String get fullscreenButton => 'Aktivera helskärm'; - @override - String get exitFullscreenButton => 'Avsluta helskärm'; - @override - String get rotationLockButton => 'Rotationslås'; - @override - String get timelineSlider => 'Videotidslinje'; - @override - String get volumeSlider => 'Volymnivå'; - @override - String get backButton => 'Tillbaka'; + // Translations + @override String get audioLabel => 'Ljud'; + @override String get subtitlesLabel => 'Undertexter'; + @override String get resetToZero => 'Återställ till 0ms'; + @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + @override String playsLater({required Object label}) => '${label} spelas senare'; + @override String playsEarlier({required Object label}) => '${label} spelas tidigare'; + @override String get noOffset => 'Ingen offset'; + @override String get letterbox => 'Letterbox'; + @override String get fillScreen => 'Fyll skärm'; + @override String get stretch => 'Sträck'; + @override String get lockRotation => 'Lås rotation'; + @override String get unlockRotation => 'Lås upp rotation'; + @override String get sleepTimer => 'Sovtimer'; + @override String get timerActive => 'Timer aktiv'; + @override String playbackWillPauseIn({required Object duration}) => 'Uppspelningen pausas om ${duration}'; + @override String get sleepTimerCompleted => 'Sovtimer slutförd - uppspelning pausad'; + @override String get playButton => 'Spela'; + @override String get pauseButton => 'Pausa'; + @override String seekBackwardButton({required Object seconds}) => 'Spola bakåt ${seconds} sekunder'; + @override String seekForwardButton({required Object seconds}) => 'Spola framåt ${seconds} sekunder'; + @override String get previousButton => 'Föregående avsnitt'; + @override String get nextButton => 'Nästa avsnitt'; + @override String get previousChapterButton => 'Föregående kapitel'; + @override String get nextChapterButton => 'Nästa kapitel'; + @override String get volumeButton => 'Volym'; + @override String get muteButton => 'Tysta'; + @override String get unmuteButton => 'Slå på ljud'; + @override String get settingsButton => 'Videoinställningar'; + @override String get audioTrackButton => 'Ljudspår'; + @override String get subtitlesButton => 'Undertexter'; + @override String get chaptersButton => 'Kapitel'; + @override String get versionsButton => 'Videoversioner'; + @override String get aspectRatioButton => 'Bildförhållande'; + @override String get fullscreenButton => 'Aktivera helskärm'; + @override String get exitFullscreenButton => 'Avsluta helskärm'; + @override String get rotationLockButton => 'Rotationslås'; + @override String get timelineSlider => 'Videotidslinje'; + @override String get volumeSlider => 'Volymnivå'; + @override String get backButton => 'Tillbaka'; } // Path: userStatus class _StringsUserStatusSv implements _StringsUserStatusEn { - _StringsUserStatusSv._(this._root); + _StringsUserStatusSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get admin => 'Admin'; - @override - String get restricted => 'Begränsad'; - @override - String get protected => 'Skyddad'; - @override - String get current => 'NUVARANDE'; + // Translations + @override String get admin => 'Admin'; + @override String get restricted => 'Begränsad'; + @override String get protected => 'Skyddad'; + @override String get current => 'NUVARANDE'; } // Path: messages class _StringsMessagesSv implements _StringsMessagesEn { - _StringsMessagesSv._(this._root); + _StringsMessagesSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get markedAsWatched => 'Markerad som sedd'; - @override - String get markedAsUnwatched => 'Markerad som osedd'; - @override - String get removedFromContinueWatching => 'Borttagen från Fortsätt titta'; - @override - String errorLoading({required Object error}) => 'Fel: ${error}'; - @override - String get fileInfoNotAvailable => 'Filinformation inte tillgänglig'; - @override - String errorLoadingFileInfo({required Object error}) => - 'Fel vid laddning av filinformation: ${error}'; - @override - String get errorLoadingSeries => 'Fel vid laddning av serie'; - @override - String get errorLoadingSeason => 'Fel vid laddning av säsong'; - @override - String get musicNotSupported => 'Musikuppspelning stöds inte ännu'; - @override - String get logsCleared => 'Loggar rensade'; - @override - String get logsCopied => 'Loggar kopierade till urklipp'; - @override - String get noLogsAvailable => 'Inga loggar tillgängliga'; - @override - String libraryScanning({required Object title}) => 'Skannar "${title}"...'; - @override - String libraryScanStarted({required Object title}) => - 'Biblioteksskanning startad för "${title}"'; - @override - String libraryScanFailed({required Object error}) => - 'Misslyckades att skanna bibliotek: ${error}'; - @override - String metadataRefreshing({required Object title}) => - 'Uppdaterar metadata för "${title}"...'; - @override - String metadataRefreshStarted({required Object title}) => - 'Metadata-uppdatering startad för "${title}"'; - @override - String metadataRefreshFailed({required Object error}) => - 'Misslyckades att uppdatera metadata: ${error}'; - @override - String get noPlexToken => 'Ingen Plex-token hittad. Vänligen logga in igen.'; - @override - String get logoutConfirm => 'Är du säker på att du vill logga ut?'; - @override - String get noSeasonsFound => 'Inga säsonger hittades'; - @override - String get noEpisodesFound => 'Inga avsnitt hittades i första säsongen'; - @override - String get noEpisodesFoundGeneral => 'Inga avsnitt hittades'; - @override - String get noResultsFound => 'Inga resultat hittades'; - @override - String sleepTimerSet({required Object label}) => - 'Sovtimer inställd för ${label}'; - @override - String failedToSwitchProfile({required Object displayName}) => - 'Misslyckades att byta till ${displayName}'; - @override - String get noItemsAvailable => 'Inga objekt tillgängliga'; - @override - String get failedToCreatePlayQueue => - 'Det gick inte att skapa uppspelningskö'; - @override - String get failedToCreatePlayQueueNoItems => - 'Det gick inte att skapa uppspelningskö – inga objekt'; - @override - String failedPlayback({required Object action, required Object error}) => - 'Kunde inte ${action}: ${error}'; + // Translations + @override String get markedAsWatched => 'Markerad som sedd'; + @override String get markedAsUnwatched => 'Markerad som osedd'; + @override String get removedFromContinueWatching => 'Borttagen från Fortsätt titta'; + @override String errorLoading({required Object error}) => 'Fel: ${error}'; + @override String get fileInfoNotAvailable => 'Filinformation inte tillgänglig'; + @override String errorLoadingFileInfo({required Object error}) => 'Fel vid laddning av filinformation: ${error}'; + @override String get errorLoadingSeries => 'Fel vid laddning av serie'; + @override String get errorLoadingSeason => 'Fel vid laddning av säsong'; + @override String get musicNotSupported => 'Musikuppspelning stöds inte ännu'; + @override String get logsCleared => 'Loggar rensade'; + @override String get logsCopied => 'Loggar kopierade till urklipp'; + @override String get noLogsAvailable => 'Inga loggar tillgängliga'; + @override String libraryScanning({required Object title}) => 'Skannar "${title}"...'; + @override String libraryScanStarted({required Object title}) => 'Biblioteksskanning startad för "${title}"'; + @override String libraryScanFailed({required Object error}) => 'Misslyckades att skanna bibliotek: ${error}'; + @override String metadataRefreshing({required Object title}) => 'Uppdaterar metadata för "${title}"...'; + @override String metadataRefreshStarted({required Object title}) => 'Metadata-uppdatering startad för "${title}"'; + @override String metadataRefreshFailed({required Object error}) => 'Misslyckades att uppdatera metadata: ${error}'; + @override String get noPlexToken => 'Ingen Plex-token hittad. Vänligen logga in igen.'; + @override String get logoutConfirm => 'Är du säker på att du vill logga ut?'; + @override String get noSeasonsFound => 'Inga säsonger hittades'; + @override String get noEpisodesFound => 'Inga avsnitt hittades i första säsongen'; + @override String get noEpisodesFoundGeneral => 'Inga avsnitt hittades'; + @override String get noResultsFound => 'Inga resultat hittades'; + @override String sleepTimerSet({required Object label}) => 'Sovtimer inställd för ${label}'; + @override String failedToSwitchProfile({required Object displayName}) => 'Misslyckades att byta till ${displayName}'; + @override String get noItemsAvailable => 'Inga objekt tillgängliga'; + @override String get failedToCreatePlayQueue => 'Det gick inte att skapa uppspelningskö'; + @override String get failedToCreatePlayQueueNoItems => 'Det gick inte att skapa uppspelningskö – inga objekt'; + @override String failedPlayback({required Object action, required Object error}) => 'Kunde inte ${action}: ${error}'; } // Path: profile class _StringsProfileSv implements _StringsProfileEn { - _StringsProfileSv._(this._root); + _StringsProfileSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get noUsersAvailable => 'Inga användare tillgängliga'; + // Translations + @override String get noUsersAvailable => 'Inga användare tillgängliga'; } // Path: subtitlingStyling class _StringsSubtitlingStylingSv implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingSv._(this._root); + _StringsSubtitlingStylingSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get stylingOptions => 'Stilalternativ'; - @override - String get fontSize => 'Teckenstorlek'; - @override - String get textColor => 'Textfärg'; - @override - String get borderSize => 'Kantstorlek'; - @override - String get borderColor => 'Kantfärg'; - @override - String get backgroundOpacity => 'Bakgrundsopacitet'; - @override - String get backgroundColor => 'Bakgrundsfärg'; + // Translations + @override String get stylingOptions => 'Stilalternativ'; + @override String get fontSize => 'Teckenstorlek'; + @override String get textColor => 'Textfärg'; + @override String get borderSize => 'Kantstorlek'; + @override String get borderColor => 'Kantfärg'; + @override String get backgroundOpacity => 'Bakgrundsopacitet'; + @override String get backgroundColor => 'Bakgrundsfärg'; } // Path: dialog class _StringsDialogSv implements _StringsDialogEn { - _StringsDialogSv._(this._root); + _StringsDialogSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get confirmAction => 'Bekräfta åtgärd'; - @override - String get areYouSure => 'Är du säker på att du vill utföra denna åtgärd?'; - @override - String get cancel => 'Avbryt'; - @override - String get playNow => 'Spela nu'; + // Translations + @override String get confirmAction => 'Bekräfta åtgärd'; + @override String get areYouSure => 'Är du säker på att du vill utföra denna åtgärd?'; + @override String get cancel => 'Avbryt'; + @override String get playNow => 'Spela nu'; } // Path: discover class _StringsDiscoverSv implements _StringsDiscoverEn { - _StringsDiscoverSv._(this._root); + _StringsDiscoverSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Upptäck'; - @override - String get switchProfile => 'Byt profil'; - @override - String get switchServer => 'Byt server'; - @override - String get logout => 'Logga ut'; - @override - String get noContentAvailable => 'Inget innehåll tillgängligt'; - @override - String get addMediaToLibraries => 'Lägg till media till dina bibliotek'; - @override - String get continueWatching => 'Fortsätt titta'; - @override - String get recentlyAdded => 'Nyligen tillagda'; - @override - String get play => 'Spela'; - @override - String get resume => 'Återuppta'; - @override - String playEpisode({required Object season, required Object episode}) => - 'Spela S${season}, E${episode}'; - @override - String resumeEpisode({required Object season, required Object episode}) => - 'Återuppta S${season}, E${episode}'; - @override - String get pause => 'Pausa'; - @override - String get overview => 'Översikt'; - @override - String get cast => 'Rollbesättning'; - @override - String get seasons => 'Säsonger'; - @override - String get studio => 'Studio'; - @override - String get rating => 'Åldersgräns'; - @override - String get watched => 'Tittad'; - @override - String episodeCount({required Object count}) => '${count} avsnitt'; - @override - String watchedProgress({required Object watched, required Object total}) => - '${watched}/${total} sedda'; - @override - String get movie => 'Film'; - @override - String get tvShow => 'TV-serie'; - @override - String minutesLeft({required Object minutes}) => '${minutes} min kvar'; + // Translations + @override String get title => 'Upptäck'; + @override String get switchProfile => 'Byt profil'; + @override String get switchServer => 'Byt server'; + @override String get logout => 'Logga ut'; + @override String get noContentAvailable => 'Inget innehåll tillgängligt'; + @override String get addMediaToLibraries => 'Lägg till media till dina bibliotek'; + @override String get continueWatching => 'Fortsätt titta'; + @override String get recentlyAdded => 'Nyligen tillagda'; + @override String get play => 'Spela'; + @override String get resume => 'Återuppta'; + @override String playEpisode({required Object season, required Object episode}) => 'Spela S${season}, E${episode}'; + @override String resumeEpisode({required Object season, required Object episode}) => 'Återuppta S${season}, E${episode}'; + @override String get pause => 'Pausa'; + @override String get overview => 'Översikt'; + @override String get cast => 'Rollbesättning'; + @override String get seasons => 'Säsonger'; + @override String get studio => 'Studio'; + @override String get rating => 'Åldersgräns'; + @override String get watched => 'Tittad'; + @override String episodeCount({required Object count}) => '${count} avsnitt'; + @override String watchedProgress({required Object watched, required Object total}) => '${watched}/${total} sedda'; + @override String get movie => 'Film'; + @override String get tvShow => 'TV-serie'; + @override String minutesLeft({required Object minutes}) => '${minutes} min kvar'; } // Path: errors class _StringsErrorsSv implements _StringsErrorsEn { - _StringsErrorsSv._(this._root); + _StringsErrorsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String searchFailed({required Object error}) => - 'Sökning misslyckades: ${error}'; - @override - String connectionTimeout({required Object context}) => - 'Anslutnings-timeout vid laddning ${context}'; - @override - String get connectionFailed => 'Kan inte ansluta till Plex-server'; - @override - String failedToLoad({required Object context, required Object error}) => - 'Misslyckades att ladda ${context}: ${error}'; - @override - String get noClientAvailable => 'Ingen klient tillgänglig'; - @override - String authenticationFailed({required Object error}) => - 'Autentisering misslyckades: ${error}'; - @override - String get couldNotLaunchUrl => 'Kunde inte öppna autentiserings-URL'; - @override - String get pleaseEnterToken => 'Vänligen ange en token'; - @override - String get invalidToken => 'Ogiltig token'; - @override - String failedToVerifyToken({required Object error}) => - 'Misslyckades att verifiera token: ${error}'; - @override - String failedToSwitchProfile({required Object displayName}) => - 'Misslyckades att byta till ${displayName}'; - @override - String get connectionFailedGeneric => 'Anslutning misslyckades'; + // Translations + @override String searchFailed({required Object error}) => 'Sökning misslyckades: ${error}'; + @override String connectionTimeout({required Object context}) => 'Anslutnings-timeout vid laddning ${context}'; + @override String get connectionFailed => 'Kan inte ansluta till Plex-server'; + @override String failedToLoad({required Object context, required Object error}) => 'Misslyckades att ladda ${context}: ${error}'; + @override String get noClientAvailable => 'Ingen klient tillgänglig'; + @override String authenticationFailed({required Object error}) => 'Autentisering misslyckades: ${error}'; + @override String get couldNotLaunchUrl => 'Kunde inte öppna autentiserings-URL'; + @override String get pleaseEnterToken => 'Vänligen ange en token'; + @override String get invalidToken => 'Ogiltig token'; + @override String failedToVerifyToken({required Object error}) => 'Misslyckades att verifiera token: ${error}'; + @override String failedToSwitchProfile({required Object displayName}) => 'Misslyckades att byta till ${displayName}'; + @override String get connectionFailedGeneric => 'Anslutning misslyckades'; } // Path: libraries class _StringsLibrariesSv implements _StringsLibrariesEn { - _StringsLibrariesSv._(this._root); + _StringsLibrariesSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Bibliotek'; - @override - String get scanLibraryFiles => 'Skanna biblioteksfiler'; - @override - String get scanLibrary => 'Skanna bibliotek'; - @override - String get analyze => 'Analysera'; - @override - String get analyzeLibrary => 'Analysera bibliotek'; - @override - String get refreshMetadata => 'Uppdatera metadata'; - @override - String get emptyTrash => 'Töm papperskorg'; - @override - String emptyingTrash({required Object title}) => - 'Tömmer papperskorg för "${title}"...'; - @override - String trashEmptied({required Object title}) => - 'Papperskorg tömd för "${title}"'; - @override - String failedToEmptyTrash({required Object error}) => - 'Misslyckades att tömma papperskorg: ${error}'; - @override - String analyzing({required Object title}) => 'Analyserar "${title}"...'; - @override - String analysisStarted({required Object title}) => - 'Analys startad för "${title}"'; - @override - String failedToAnalyze({required Object error}) => - 'Misslyckades att analysera bibliotek: ${error}'; - @override - String get noLibrariesFound => 'Inga bibliotek hittades'; - @override - String get thisLibraryIsEmpty => 'Detta bibliotek är tomt'; - @override - String get all => 'Alla'; - @override - String get clearAll => 'Rensa alla'; - @override - String scanLibraryConfirm({required Object title}) => - 'Är du säker på att du vill skanna "${title}"?'; - @override - String analyzeLibraryConfirm({required Object title}) => - 'Är du säker på att du vill analysera "${title}"?'; - @override - String refreshMetadataConfirm({required Object title}) => - 'Är du säker på att du vill uppdatera metadata för "${title}"?'; - @override - String emptyTrashConfirm({required Object title}) => - 'Är du säker på att du vill tömma papperskorgen för "${title}"?'; - @override - String get manageLibraries => 'Hantera bibliotek'; - @override - String get sort => 'Sortera'; - @override - String get sortBy => 'Sortera efter'; - @override - String get filters => 'Filter'; - @override - String loadingLibraryWithCount({required Object count}) => - 'Laddar bibliotek... (${count} objekt laddade)'; - @override - String get confirmActionMessage => - 'Är du säker på att du vill utföra denna åtgärd?'; - @override - String get showLibrary => 'Visa bibliotek'; - @override - String get hideLibrary => 'Dölj bibliotek'; - @override - String get libraryOptions => 'Biblioteksalternativ'; - @override - String get content => 'bibliotekets innehåll'; - @override - String get selectLibrary => 'Välj bibliotek'; - @override - String filtersWithCount({required Object count}) => 'Filter (${count})'; - @override - String get noRecommendations => 'Inga rekommendationer tillgängliga'; - @override - String get noCollections => 'Inga samlingar i det här biblioteket'; - @override - String get noFoldersFound => 'Inga mappar hittades'; - @override - String get folders => 'mappar'; - @override - late final _StringsLibrariesTabsSv tabs = _StringsLibrariesTabsSv._(_root); - @override - late final _StringsLibrariesGroupingsSv groupings = - _StringsLibrariesGroupingsSv._(_root); + // Translations + @override String get title => 'Bibliotek'; + @override String get scanLibraryFiles => 'Skanna biblioteksfiler'; + @override String get scanLibrary => 'Skanna bibliotek'; + @override String get analyze => 'Analysera'; + @override String get analyzeLibrary => 'Analysera bibliotek'; + @override String get refreshMetadata => 'Uppdatera metadata'; + @override String get emptyTrash => 'Töm papperskorg'; + @override String emptyingTrash({required Object title}) => 'Tömmer papperskorg för "${title}"...'; + @override String trashEmptied({required Object title}) => 'Papperskorg tömd för "${title}"'; + @override String failedToEmptyTrash({required Object error}) => 'Misslyckades att tömma papperskorg: ${error}'; + @override String analyzing({required Object title}) => 'Analyserar "${title}"...'; + @override String analysisStarted({required Object title}) => 'Analys startad för "${title}"'; + @override String failedToAnalyze({required Object error}) => 'Misslyckades att analysera bibliotek: ${error}'; + @override String get noLibrariesFound => 'Inga bibliotek hittades'; + @override String get thisLibraryIsEmpty => 'Detta bibliotek är tomt'; + @override String get all => 'Alla'; + @override String get clearAll => 'Rensa alla'; + @override String scanLibraryConfirm({required Object title}) => 'Är du säker på att du vill skanna "${title}"?'; + @override String analyzeLibraryConfirm({required Object title}) => 'Är du säker på att du vill analysera "${title}"?'; + @override String refreshMetadataConfirm({required Object title}) => 'Är du säker på att du vill uppdatera metadata för "${title}"?'; + @override String emptyTrashConfirm({required Object title}) => 'Är du säker på att du vill tömma papperskorgen för "${title}"?'; + @override String get manageLibraries => 'Hantera bibliotek'; + @override String get sort => 'Sortera'; + @override String get sortBy => 'Sortera efter'; + @override String get filters => 'Filter'; + @override String loadingLibraryWithCount({required Object count}) => 'Laddar bibliotek... (${count} objekt laddade)'; + @override String get confirmActionMessage => 'Är du säker på att du vill utföra denna åtgärd?'; + @override String get showLibrary => 'Visa bibliotek'; + @override String get hideLibrary => 'Dölj bibliotek'; + @override String get libraryOptions => 'Biblioteksalternativ'; + @override String get content => 'bibliotekets innehåll'; + @override String get selectLibrary => 'Välj bibliotek'; + @override String filtersWithCount({required Object count}) => 'Filter (${count})'; + @override String get noRecommendations => 'Inga rekommendationer tillgängliga'; + @override String get noCollections => 'Inga samlingar i det här biblioteket'; + @override String get noFoldersFound => 'Inga mappar hittades'; + @override String get folders => 'mappar'; + @override late final _StringsLibrariesTabsSv tabs = _StringsLibrariesTabsSv._(_root); + @override late final _StringsLibrariesGroupingsSv groupings = _StringsLibrariesGroupingsSv._(_root); } // Path: about class _StringsAboutSv implements _StringsAboutEn { - _StringsAboutSv._(this._root); + _StringsAboutSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Om'; - @override - String get openSourceLicenses => 'Öppen källkod-licenser'; - @override - String versionLabel({required Object version}) => 'Version ${version}'; - @override - String get appDescription => 'En vacker Plex-klient för Flutter'; - @override - String get viewLicensesDescription => - 'Visa licenser för tredjepartsbibliotek'; + // Translations + @override String get title => 'Om'; + @override String get openSourceLicenses => 'Öppen källkod-licenser'; + @override String versionLabel({required Object version}) => 'Version ${version}'; + @override String get appDescription => 'En vacker Plex-klient för Flutter'; + @override String get viewLicensesDescription => 'Visa licenser för tredjepartsbibliotek'; } // Path: serverSelection class _StringsServerSelectionSv implements _StringsServerSelectionEn { - _StringsServerSelectionSv._(this._root); + _StringsServerSelectionSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get connectingToServer => 'Ansluter till server...'; - @override - String get connectingToAllServers => 'Ansluter till alla servrar...'; - @override - String get connectToAllServers => 'Anslut till alla servrar'; - @override - String get allServerConnectionsFailed => - 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.'; - @override - String foundServers({required Object count}) => 'Hittade ${count} server(ar)'; - @override - String get orSelectIndividually => 'Eller välj en server individuellt:'; - @override - String get serverDebugCopied => - 'Server-felsökningsdata kopierad till urklipp'; - @override - String get copyDebugData => 'Kopiera felsökningsdata'; - @override - String get noServersFound => 'Inga servrar hittades'; - @override - String malformedServerData({required Object count}) => - 'Hittade ${count} server(ar) med felformaterad data. Inga giltiga servrar tillgängliga.'; - @override - String get incompleteServerInfo => - 'Vissa servrar har ofullständig information och hoppades över. Vänligen kontrollera ditt Plex.tv-konto.'; - @override - String get incompleteConnectionInfo => - 'Server-anslutningsinformation är ofullständig. Försök igen.'; - @override - String malformedServerInfo({required Object message}) => - 'Serverinformation är felformaterad: ${message}'; - @override - String get networkConnectionFailed => - 'Nätverksanslutning misslyckades. Kontrollera din internetanslutning och försök igen.'; - @override - String get authenticationFailed => - 'Autentisering misslyckades. Logga in igen.'; - @override - String get plexServiceUnavailable => - 'Plex-tjänst otillgänglig. Försök igen senare.'; - @override - String failedToLoadServers({required Object error}) => - 'Misslyckades att ladda servrar: ${error}'; + // Translations + @override String get connectingToServer => 'Ansluter till server...'; + @override String get connectingToAllServers => 'Ansluter till alla servrar...'; + @override String get connectToAllServers => 'Anslut till alla servrar'; + @override String get allServerConnectionsFailed => 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.'; + @override String foundServers({required Object count}) => 'Hittade ${count} server(ar)'; + @override String get orSelectIndividually => 'Eller välj en server individuellt:'; + @override String get serverDebugCopied => 'Server-felsökningsdata kopierad till urklipp'; + @override String get copyDebugData => 'Kopiera felsökningsdata'; + @override String get noServersFound => 'Inga servrar hittades'; + @override String malformedServerData({required Object count}) => 'Hittade ${count} server(ar) med felformaterad data. Inga giltiga servrar tillgängliga.'; + @override String get incompleteServerInfo => 'Vissa servrar har ofullständig information och hoppades över. Vänligen kontrollera ditt Plex.tv-konto.'; + @override String get incompleteConnectionInfo => 'Server-anslutningsinformation är ofullständig. Försök igen.'; + @override String malformedServerInfo({required Object message}) => 'Serverinformation är felformaterad: ${message}'; + @override String get networkConnectionFailed => 'Nätverksanslutning misslyckades. Kontrollera din internetanslutning och försök igen.'; + @override String get authenticationFailed => 'Autentisering misslyckades. Logga in igen.'; + @override String get plexServiceUnavailable => 'Plex-tjänst otillgänglig. Försök igen senare.'; + @override String failedToLoadServers({required Object error}) => 'Misslyckades att ladda servrar: ${error}'; } // Path: hubDetail class _StringsHubDetailSv implements _StringsHubDetailEn { - _StringsHubDetailSv._(this._root); + _StringsHubDetailSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Titel'; - @override - String get releaseYear => 'Utgivningsår'; - @override - String get dateAdded => 'Datum tillagd'; - @override - String get rating => 'Betyg'; - @override - String get noItemsFound => 'Inga objekt hittades'; + // Translations + @override String get title => 'Titel'; + @override String get releaseYear => 'Utgivningsår'; + @override String get dateAdded => 'Datum tillagd'; + @override String get rating => 'Betyg'; + @override String get noItemsFound => 'Inga objekt hittades'; } // Path: logs class _StringsLogsSv implements _StringsLogsEn { - _StringsLogsSv._(this._root); + _StringsLogsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Loggar'; - @override - String get clearLogs => 'Rensa loggar'; - @override - String get copyLogs => 'Kopiera loggar'; - @override - String get exportLogs => 'Exportera loggar'; - @override - String get noLogsToShow => 'Inga loggar att visa'; - @override - String get error => 'Fel:'; - @override - String get stackTrace => 'Stack trace:'; + // Translations + @override String get title => 'Loggar'; + @override String get clearLogs => 'Rensa loggar'; + @override String get copyLogs => 'Kopiera loggar'; + @override String get exportLogs => 'Exportera loggar'; + @override String get noLogsToShow => 'Inga loggar att visa'; + @override String get error => 'Fel:'; + @override String get stackTrace => 'Stack trace:'; } // Path: licenses class _StringsLicensesSv implements _StringsLicensesEn { - _StringsLicensesSv._(this._root); + _StringsLicensesSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get relatedPackages => 'Relaterade paket'; - @override - String get license => 'Licens'; - @override - String licenseNumber({required Object number}) => 'Licens ${number}'; - @override - String licensesCount({required Object count}) => '${count} licenser'; + // Translations + @override String get relatedPackages => 'Relaterade paket'; + @override String get license => 'Licens'; + @override String licenseNumber({required Object number}) => 'Licens ${number}'; + @override String licensesCount({required Object count}) => '${count} licenser'; } // Path: navigation class _StringsNavigationSv implements _StringsNavigationEn { - _StringsNavigationSv._(this._root); + _StringsNavigationSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get home => 'Hem'; - @override - String get search => 'Sök'; - @override - String get libraries => 'Bibliotek'; - @override - String get settings => 'Inställningar'; + // Translations + @override String get home => 'Hem'; + @override String get search => 'Sök'; + @override String get libraries => 'Bibliotek'; + @override String get settings => 'Inställningar'; } // Path: playlists class _StringsPlaylistsSv implements _StringsPlaylistsEn { - _StringsPlaylistsSv._(this._root); + _StringsPlaylistsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Spellistor'; - @override - String get noPlaylists => 'Inga spellistor hittades'; - @override - String get create => 'Skapa spellista'; - @override - String get newPlaylist => 'Ny spellista'; - @override - String get playlistName => 'Spellistans namn'; - @override - String get enterPlaylistName => 'Ange spellistans namn'; - @override - String get edit => 'Redigera spellista'; - @override - String get delete => 'Ta bort spellista'; - @override - String get addTo => 'Lägg till i spellista'; - @override - String get addItems => 'Lägg till objekt'; - @override - String get removeItem => 'Ta bort från spellista'; - @override - String get clearPlaylist => 'Rensa spellista'; - @override - String get playAll => 'Spela alla'; - @override - String get shuffle => 'Blanda'; - @override - String get smartPlaylist => 'Smart spellista'; - @override - String get regularPlaylist => 'Vanlig spellista'; - @override - String itemCount({required Object count}) => '${count} objekt'; - @override - String get oneItem => '1 objekt'; - @override - String get emptyPlaylist => 'Denna spellista är tom'; - @override - String get deleteConfirm => 'Ta bort spellista?'; - @override - String deleteMessage({required Object name}) => - 'Är du säker på att du vill ta bort "${name}"?'; - @override - String get created => 'Spellista skapad'; - @override - String get updated => 'Spellista uppdaterad'; - @override - String get deleted => 'Spellista borttagen'; - @override - String get itemAdded => 'Tillagd i spellista'; - @override - String get itemRemoved => 'Borttagen från spellista'; - @override - String get selectPlaylist => 'Välj spellista'; - @override - String get createNewPlaylist => 'Skapa ny spellista'; - @override - String get errorCreating => 'Det gick inte att skapa spellista'; - @override - String get errorDeleting => 'Det gick inte att ta bort spellista'; - @override - String get errorLoading => 'Det gick inte att ladda spellistor'; - @override - String get errorAdding => 'Det gick inte att lägga till i spellista'; - @override - String get errorReordering => 'Det gick inte att omordna spellisteobjekt'; - @override - String get errorRemoving => 'Det gick inte att ta bort från spellista'; - @override - String get playlist => 'Spellista'; + // Translations + @override String get title => 'Spellistor'; + @override String get noPlaylists => 'Inga spellistor hittades'; + @override String get create => 'Skapa spellista'; + @override String get newPlaylist => 'Ny spellista'; + @override String get playlistName => 'Spellistans namn'; + @override String get enterPlaylistName => 'Ange spellistans namn'; + @override String get edit => 'Redigera spellista'; + @override String get delete => 'Ta bort spellista'; + @override String get addTo => 'Lägg till i spellista'; + @override String get addItems => 'Lägg till objekt'; + @override String get removeItem => 'Ta bort från spellista'; + @override String get clearPlaylist => 'Rensa spellista'; + @override String get playAll => 'Spela alla'; + @override String get shuffle => 'Blanda'; + @override String get smartPlaylist => 'Smart spellista'; + @override String get regularPlaylist => 'Vanlig spellista'; + @override String itemCount({required Object count}) => '${count} objekt'; + @override String get oneItem => '1 objekt'; + @override String get emptyPlaylist => 'Denna spellista är tom'; + @override String get deleteConfirm => 'Ta bort spellista?'; + @override String deleteMessage({required Object name}) => 'Är du säker på att du vill ta bort "${name}"?'; + @override String get created => 'Spellista skapad'; + @override String get updated => 'Spellista uppdaterad'; + @override String get deleted => 'Spellista borttagen'; + @override String get itemAdded => 'Tillagd i spellista'; + @override String get itemRemoved => 'Borttagen från spellista'; + @override String get selectPlaylist => 'Välj spellista'; + @override String get createNewPlaylist => 'Skapa ny spellista'; + @override String get errorCreating => 'Det gick inte att skapa spellista'; + @override String get errorDeleting => 'Det gick inte att ta bort spellista'; + @override String get errorLoading => 'Det gick inte att ladda spellistor'; + @override String get errorAdding => 'Det gick inte att lägga till i spellista'; + @override String get errorReordering => 'Det gick inte att omordna spellisteobjekt'; + @override String get errorRemoving => 'Det gick inte att ta bort från spellista'; + @override String get playlist => 'Spellista'; } // Path: collections class _StringsCollectionsSv implements _StringsCollectionsEn { - _StringsCollectionsSv._(this._root); + _StringsCollectionsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get title => 'Samlingar'; - @override - String get collection => 'Samling'; - @override - String get empty => 'Samlingen är tom'; - @override - String get noItems => 'Inga objekt i den här samlingen'; - @override - String get unknownLibrarySection => - 'Kan inte ta bort: okänd bibliotekssektion'; - @override - String get deleteCollection => 'Ta bort samling'; - @override - String deleteConfirm({required Object title}) => - 'Är du säker på att du vill ta bort "${title}"? Detta går inte att ångra.'; - @override - String get deleted => 'Samling borttagen'; - @override - String get deleteFailed => 'Det gick inte att ta bort samlingen'; - @override - String deleteFailedWithError({required Object error}) => - 'Det gick inte att ta bort samlingen: ${error}'; - @override - String failedToLoadItems({required Object error}) => - 'Det gick inte att läsa in samlingsobjekt: ${error}'; - @override - String get addTo => 'Lägg till i samling'; - @override - String get selectCollection => 'Välj samling'; - @override - String get createNewCollection => 'Skapa ny samling'; - @override - String get collectionName => 'Samlingsnamn'; - @override - String get enterCollectionName => 'Ange samlingsnamn'; - @override - String get addedToCollection => 'Tillagd i samling'; - @override - String get errorAddingToCollection => 'Fel vid tillägg i samling'; - @override - String get created => 'Samling skapad'; - @override - String get removeFromCollection => 'Ta bort från samling'; - @override - String removeFromCollectionConfirm({required Object title}) => - 'Ta bort "${title}" från denna samling?'; - @override - String get removedFromCollection => 'Borttagen från samling'; - @override - String get removeFromCollectionFailed => - 'Misslyckades med att ta bort från samling'; - @override - String removeFromCollectionError({required Object error}) => - 'Fel vid borttagning från samling: ${error}'; + // Translations + @override String get title => 'Samlingar'; + @override String get collection => 'Samling'; + @override String get empty => 'Samlingen är tom'; + @override String get noItems => 'Inga objekt i den här samlingen'; + @override String get unknownLibrarySection => 'Kan inte ta bort: okänd bibliotekssektion'; + @override String get deleteCollection => 'Ta bort samling'; + @override String deleteConfirm({required Object title}) => 'Är du säker på att du vill ta bort "${title}"? Detta går inte att ångra.'; + @override String get deleted => 'Samling borttagen'; + @override String get deleteFailed => 'Det gick inte att ta bort samlingen'; + @override String deleteFailedWithError({required Object error}) => 'Det gick inte att ta bort samlingen: ${error}'; + @override String failedToLoadItems({required Object error}) => 'Det gick inte att läsa in samlingsobjekt: ${error}'; + @override String get addTo => 'Lägg till i samling'; + @override String get selectCollection => 'Välj samling'; + @override String get createNewCollection => 'Skapa ny samling'; + @override String get collectionName => 'Samlingsnamn'; + @override String get enterCollectionName => 'Ange samlingsnamn'; + @override String get addedToCollection => 'Tillagd i samling'; + @override String get errorAddingToCollection => 'Fel vid tillägg i samling'; + @override String get created => 'Samling skapad'; + @override String get removeFromCollection => 'Ta bort från samling'; + @override String removeFromCollectionConfirm({required Object title}) => 'Ta bort "${title}" från denna samling?'; + @override String get removedFromCollection => 'Borttagen från samling'; + @override String get removeFromCollectionFailed => 'Misslyckades med att ta bort från samling'; + @override String removeFromCollectionError({required Object error}) => 'Fel vid borttagning från samling: ${error}'; } // Path: libraries.tabs class _StringsLibrariesTabsSv implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsSv._(this._root); + _StringsLibrariesTabsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get recommended => 'Rekommenderat'; - @override - String get browse => 'Bläddra'; - @override - String get collections => 'Samlingar'; - @override - String get playlists => 'Spellistor'; + // Translations + @override String get recommended => 'Rekommenderat'; + @override String get browse => 'Bläddra'; + @override String get collections => 'Samlingar'; + @override String get playlists => 'Spellistor'; } // Path: libraries.groupings class _StringsLibrariesGroupingsSv implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsSv._(this._root); + _StringsLibrariesGroupingsSv._(this._root); - @override - final _StringsSv _root; // ignore: unused_field + @override final _StringsSv _root; // ignore: unused_field - // Translations - @override - String get all => 'Alla'; - @override - String get movies => 'Filmer'; - @override - String get shows => 'Serier'; - @override - String get seasons => 'Säsonger'; - @override - String get episodes => 'Avsnitt'; - @override - String get folders => 'Mappar'; + // Translations + @override String get all => 'Alla'; + @override String get movies => 'Filmer'; + @override String get shows => 'Serier'; + @override String get seasons => 'Säsonger'; + @override String get episodes => 'Avsnitt'; + @override String get folders => 'Mappar'; } // Path: class _StringsZh implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsZh.build({ - Map? overrides, - PluralResolver? cardinalResolver, - PluralResolver? ordinalResolver, - }) : assert( - overrides == null, - 'Set "translation_overrides: true" in order to enable this feature.', - ), - $meta = TranslationMetadata( - locale: AppLocale.zh, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsZh.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) + : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), + $meta = TranslationMetadata( + locale: AppLocale.zh, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override - final TranslationMetadata $meta; + /// Metadata for the translations of . + @override final TranslationMetadata $meta; - /// Access flat map - @override - dynamic operator [](String key) => $meta.getTranslation(key); + /// Access flat map + @override dynamic operator[](String key) => $meta.getTranslation(key); - @override - late final _StringsZh _root = this; // ignore: unused_field + @override late final _StringsZh _root = this; // ignore: unused_field - // Translations - @override - late final _StringsAppZh app = _StringsAppZh._(_root); - @override - late final _StringsAuthZh auth = _StringsAuthZh._(_root); - @override - late final _StringsCommonZh common = _StringsCommonZh._(_root); - @override - late final _StringsScreensZh screens = _StringsScreensZh._(_root); - @override - late final _StringsUpdateZh update = _StringsUpdateZh._(_root); - @override - late final _StringsSettingsZh settings = _StringsSettingsZh._(_root); - @override - late final _StringsSearchZh search = _StringsSearchZh._(_root); - @override - late final _StringsHotkeysZh hotkeys = _StringsHotkeysZh._(_root); - @override - late final _StringsPinEntryZh pinEntry = _StringsPinEntryZh._(_root); - @override - late final _StringsFileInfoZh fileInfo = _StringsFileInfoZh._(_root); - @override - late final _StringsMediaMenuZh mediaMenu = _StringsMediaMenuZh._(_root); - @override - late final _StringsAccessibilityZh accessibility = _StringsAccessibilityZh._( - _root, - ); - @override - late final _StringsTooltipsZh tooltips = _StringsTooltipsZh._(_root); - @override - late final _StringsVideoControlsZh videoControls = _StringsVideoControlsZh._( - _root, - ); - @override - late final _StringsUserStatusZh userStatus = _StringsUserStatusZh._(_root); - @override - late final _StringsMessagesZh messages = _StringsMessagesZh._(_root); - @override - late final _StringsProfileZh profile = _StringsProfileZh._(_root); - @override - late final _StringsSubtitlingStylingZh subtitlingStyling = - _StringsSubtitlingStylingZh._(_root); - @override - late final _StringsDialogZh dialog = _StringsDialogZh._(_root); - @override - late final _StringsDiscoverZh discover = _StringsDiscoverZh._(_root); - @override - late final _StringsErrorsZh errors = _StringsErrorsZh._(_root); - @override - late final _StringsLibrariesZh libraries = _StringsLibrariesZh._(_root); - @override - late final _StringsAboutZh about = _StringsAboutZh._(_root); - @override - late final _StringsServerSelectionZh serverSelection = - _StringsServerSelectionZh._(_root); - @override - late final _StringsHubDetailZh hubDetail = _StringsHubDetailZh._(_root); - @override - late final _StringsLogsZh logs = _StringsLogsZh._(_root); - @override - late final _StringsLicensesZh licenses = _StringsLicensesZh._(_root); - @override - late final _StringsNavigationZh navigation = _StringsNavigationZh._(_root); - @override - late final _StringsPlaylistsZh playlists = _StringsPlaylistsZh._(_root); - @override - late final _StringsCollectionsZh collections = _StringsCollectionsZh._(_root); + // Translations + @override late final _StringsAppZh app = _StringsAppZh._(_root); + @override late final _StringsAuthZh auth = _StringsAuthZh._(_root); + @override late final _StringsCommonZh common = _StringsCommonZh._(_root); + @override late final _StringsScreensZh screens = _StringsScreensZh._(_root); + @override late final _StringsUpdateZh update = _StringsUpdateZh._(_root); + @override late final _StringsSettingsZh settings = _StringsSettingsZh._(_root); + @override late final _StringsSearchZh search = _StringsSearchZh._(_root); + @override late final _StringsHotkeysZh hotkeys = _StringsHotkeysZh._(_root); + @override late final _StringsPinEntryZh pinEntry = _StringsPinEntryZh._(_root); + @override late final _StringsFileInfoZh fileInfo = _StringsFileInfoZh._(_root); + @override late final _StringsMediaMenuZh mediaMenu = _StringsMediaMenuZh._(_root); + @override late final _StringsAccessibilityZh accessibility = _StringsAccessibilityZh._(_root); + @override late final _StringsTooltipsZh tooltips = _StringsTooltipsZh._(_root); + @override late final _StringsVideoControlsZh videoControls = _StringsVideoControlsZh._(_root); + @override late final _StringsUserStatusZh userStatus = _StringsUserStatusZh._(_root); + @override late final _StringsMessagesZh messages = _StringsMessagesZh._(_root); + @override late final _StringsProfileZh profile = _StringsProfileZh._(_root); + @override late final _StringsSubtitlingStylingZh subtitlingStyling = _StringsSubtitlingStylingZh._(_root); + @override late final _StringsDialogZh dialog = _StringsDialogZh._(_root); + @override late final _StringsDiscoverZh discover = _StringsDiscoverZh._(_root); + @override late final _StringsErrorsZh errors = _StringsErrorsZh._(_root); + @override late final _StringsLibrariesZh libraries = _StringsLibrariesZh._(_root); + @override late final _StringsAboutZh about = _StringsAboutZh._(_root); + @override late final _StringsServerSelectionZh serverSelection = _StringsServerSelectionZh._(_root); + @override late final _StringsHubDetailZh hubDetail = _StringsHubDetailZh._(_root); + @override late final _StringsLogsZh logs = _StringsLogsZh._(_root); + @override late final _StringsLicensesZh licenses = _StringsLicensesZh._(_root); + @override late final _StringsNavigationZh navigation = _StringsNavigationZh._(_root); + @override late final _StringsPlaylistsZh playlists = _StringsPlaylistsZh._(_root); + @override late final _StringsCollectionsZh collections = _StringsCollectionsZh._(_root); } // Path: app class _StringsAppZh implements _StringsAppEn { - _StringsAppZh._(this._root); + _StringsAppZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => 'Plezy'; - @override - String get loading => '加载中...'; + // Translations + @override String get title => 'Plezy'; + @override String get loading => '加载中...'; } // Path: auth class _StringsAuthZh implements _StringsAuthEn { - _StringsAuthZh._(this._root); + _StringsAuthZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get signInWithPlex => '使用 Plex 登录'; - @override - String get showQRCode => '显示二维码'; - @override - String get cancel => '取消'; - @override - String get authenticate => '验证'; - @override - String get retry => '重试'; - @override - String get debugEnterToken => '调试:输入 Plex Token'; - @override - String get plexTokenLabel => 'Plex 授权令牌 (Auth Token)'; - @override - String get plexTokenHint => '输入你的 Plex.tv 令牌'; - @override - String get authenticationTimeout => '验证超时。请重试。'; - @override - String get scanQRCodeInstruction => '请使用已登录 Plex 的设备扫描此二维码进行验证。'; - @override - String get waitingForAuth => '等待验证中...\n请在你的浏览器中完成登录。'; + // Translations + @override String get signInWithPlex => '使用 Plex 登录'; + @override String get showQRCode => '显示二维码'; + @override String get cancel => '取消'; + @override String get authenticate => '验证'; + @override String get retry => '重试'; + @override String get debugEnterToken => '调试:输入 Plex Token'; + @override String get plexTokenLabel => 'Plex 授权令牌 (Auth Token)'; + @override String get plexTokenHint => '输入你的 Plex.tv 令牌'; + @override String get authenticationTimeout => '验证超时。请重试。'; + @override String get scanQRCodeInstruction => '请使用已登录 Plex 的设备扫描此二维码进行验证。'; + @override String get waitingForAuth => '等待验证中...\n请在你的浏览器中完成登录。'; } // Path: common class _StringsCommonZh implements _StringsCommonEn { - _StringsCommonZh._(this._root); + _StringsCommonZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get cancel => '取消'; - @override - String get save => '保存'; - @override - String get close => '关闭'; - @override - String get clear => '清除'; - @override - String get reset => '重置'; - @override - String get later => '稍后'; - @override - String get submit => '提交'; - @override - String get confirm => '确认'; - @override - String get retry => '重试'; - @override - String get playNow => '立即播放'; - @override - String get logout => '登出'; - @override - String get online => '在线'; - @override - String get offline => '离线'; - @override - String get owned => '拥有'; - @override - String get shared => '共享'; - @override - String get current => '当前'; - @override - String get unknown => '未知'; - @override - String get refresh => '刷新'; - @override - String get yes => '是'; - @override - String get no => '否'; - @override - String get server => '服务器'; - @override - String get delete => '删除'; - @override - String get shuffle => '随机播放'; - @override - String get addTo => '添加到...'; + // Translations + @override String get cancel => '取消'; + @override String get save => '保存'; + @override String get close => '关闭'; + @override String get clear => '清除'; + @override String get reset => '重置'; + @override String get later => '稍后'; + @override String get submit => '提交'; + @override String get confirm => '确认'; + @override String get retry => '重试'; + @override String get playNow => '立即播放'; + @override String get logout => '登出'; + @override String get online => '在线'; + @override String get offline => '离线'; + @override String get owned => '拥有'; + @override String get shared => '共享'; + @override String get current => '当前'; + @override String get unknown => '未知'; + @override String get refresh => '刷新'; + @override String get yes => '是'; + @override String get no => '否'; + @override String get server => '服务器'; + @override String get delete => '删除'; + @override String get shuffle => '随机播放'; + @override String get addTo => '添加到...'; } // Path: screens class _StringsScreensZh implements _StringsScreensEn { - _StringsScreensZh._(this._root); + _StringsScreensZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get licenses => '许可证'; - @override - String get selectServer => '选择服务器'; - @override - String get switchProfile => '切换配置文件'; - @override - String get subtitleStyling => '字幕样式'; - @override - String get search => '搜索'; - @override - String get logs => '日志'; + // Translations + @override String get licenses => '许可证'; + @override String get selectServer => '选择服务器'; + @override String get switchProfile => '切换配置文件'; + @override String get subtitleStyling => '字幕样式'; + @override String get search => '搜索'; + @override String get logs => '日志'; } // Path: update class _StringsUpdateZh implements _StringsUpdateEn { - _StringsUpdateZh._(this._root); + _StringsUpdateZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get available => '有可用更新'; - @override - String versionAvailable({required Object version}) => '版本 ${version} 已发布'; - @override - String currentVersion({required Object version}) => '当前版本: ${version}'; - @override - String get skipVersion => '跳过此版本'; - @override - String get viewRelease => '查看发布详情'; - @override - String get latestVersion => '已安装的版本是可用的最新版本'; - @override - String get checkFailed => '无法检查更新'; + // Translations + @override String get available => '有可用更新'; + @override String versionAvailable({required Object version}) => '版本 ${version} 已发布'; + @override String currentVersion({required Object version}) => '当前版本: ${version}'; + @override String get skipVersion => '跳过此版本'; + @override String get viewRelease => '查看发布详情'; + @override String get latestVersion => '已安装的版本是可用的最新版本'; + @override String get checkFailed => '无法检查更新'; } // Path: settings class _StringsSettingsZh implements _StringsSettingsEn { - _StringsSettingsZh._(this._root); + _StringsSettingsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '设置'; - @override - String get language => '语言'; - @override - String get theme => '主题'; - @override - String get appearance => '外观'; - @override - String get videoPlayback => '视频播放'; - @override - String get shufflePlay => '随机播放'; - @override - String get advanced => '高级'; - @override - String get useSeasonPostersDescription => '为剧集显示季海报而非剧集海报'; - @override - String get showHeroSectionDescription => '在主屏幕上显示精选内容轮播区'; - @override - String get secondsLabel => '秒'; - @override - String get minutesLabel => '分钟'; - @override - String get secondsShort => 's'; - @override - String get minutesShort => 'm'; - @override - String durationHint({required Object min, required Object max}) => - '输入时长 (${min}-${max})'; - @override - String get systemTheme => '系统'; - @override - String get systemThemeDescription => '跟随系统设置'; - @override - String get lightTheme => '浅色'; - @override - String get darkTheme => '深色'; - @override - String get libraryDensity => '媒体库密度'; - @override - String get compact => '紧凑'; - @override - String get compactDescription => '卡片更小,显示更多项目'; - @override - String get normal => '标准'; - @override - String get normalDescription => '默认尺寸'; - @override - String get comfortable => '舒适'; - @override - String get comfortableDescription => '卡片更大,显示更少项目'; - @override - String get viewMode => '视图模式'; - @override - String get gridView => '网格视图'; - @override - String get gridViewDescription => '以网格布局显示项目'; - @override - String get listView => '列表视图'; - @override - String get listViewDescription => '以列表布局显示项目'; - @override - String get useSeasonPosters => '使用季海报'; - @override - String get showHeroSection => '显示主要精选区'; - @override - String get hardwareDecoding => '硬件解码'; - @override - String get hardwareDecodingDescription => '如果可用,使用硬件加速'; - @override - String get bufferSize => '缓冲区大小'; - @override - String bufferSizeMB({required Object size}) => '${size}MB'; - @override - String get subtitleStyling => '字幕样式'; - @override - String get subtitleStylingDescription => '调整字幕外观'; - @override - String get smallSkipDuration => '短跳过时长'; - @override - String get largeSkipDuration => '长跳过时长'; - @override - String secondsUnit({required Object seconds}) => '${seconds} 秒'; - @override - String get defaultSleepTimer => '默认睡眠定时器'; - @override - String minutesUnit({required Object minutes}) => '${minutes} 分钟'; - @override - String get rememberTrackSelections => '记住每个剧集/电影的音轨选择'; - @override - String get rememberTrackSelectionsDescription => '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; - @override - String get unwatchedOnly => '仅未观看'; - @override - String get unwatchedOnlyDescription => '随机队列中仅包含未观看的剧集'; - @override - String get shuffleOrderNavigation => '随机顺序导航'; - @override - String get shuffleOrderNavigationDescription => '下一集/上一集按钮遵循随机播放顺序'; - @override - String get loopShuffleQueue => '循环随机队列'; - @override - String get loopShuffleQueueDescription => '在队列结束时重新开始'; - @override - String get videoPlayerControls => '视频播放器控制'; - @override - String get keyboardShortcuts => '键盘快捷键'; - @override - String get keyboardShortcutsDescription => '自定义键盘快捷键'; - @override - String get debugLogging => '调试日志'; - @override - String get debugLoggingDescription => '启用详细日志记录以便故障排除'; - @override - String get viewLogs => '查看日志'; - @override - String get viewLogsDescription => '查看应用程序日志'; - @override - String get clearCache => '清除缓存'; - @override - String get clearCacheDescription => '这将清除所有缓存的图片和数据。清除缓存后,应用程序加载内容可能会变慢。'; - @override - String get clearCacheSuccess => '缓存清除成功'; - @override - String get resetSettings => '重置设置'; - @override - String get resetSettingsDescription => '这会将所有设置重置为其默认值。此操作无法撤销。'; - @override - String get resetSettingsSuccess => '设置重置成功'; - @override - String get shortcutsReset => '快捷键已重置为默认值'; - @override - String get about => '关于'; - @override - String get aboutDescription => '应用程序信息和许可证'; - @override - String get updates => '更新'; - @override - String get updateAvailable => '有可用更新'; - @override - String get checkForUpdates => '检查更新'; - @override - String get validationErrorEnterNumber => '请输入一个有效的数字'; - @override - String validationErrorDuration({ - required Object min, - required Object max, - required Object unit, - }) => '时长必须介于 ${min} 和 ${max} ${unit} 之间'; - @override - String shortcutAlreadyAssigned({required Object action}) => - '快捷键已被分配给 ${action}'; - @override - String shortcutUpdated({required Object action}) => '快捷键已为 ${action} 更新'; + // Translations + @override String get title => '设置'; + @override String get language => '语言'; + @override String get theme => '主题'; + @override String get appearance => '外观'; + @override String get videoPlayback => '视频播放'; + @override String get shufflePlay => '随机播放'; + @override String get advanced => '高级'; + @override String get useSeasonPostersDescription => '为剧集显示季海报而非剧集海报'; + @override String get showHeroSectionDescription => '在主屏幕上显示精选内容轮播区'; + @override String get secondsLabel => '秒'; + @override String get minutesLabel => '分钟'; + @override String get secondsShort => 's'; + @override String get minutesShort => 'm'; + @override String durationHint({required Object min, required Object max}) => '输入时长 (${min}-${max})'; + @override String get systemTheme => '系统'; + @override String get systemThemeDescription => '跟随系统设置'; + @override String get lightTheme => '浅色'; + @override String get darkTheme => '深色'; + @override String get libraryDensity => '媒体库密度'; + @override String get compact => '紧凑'; + @override String get compactDescription => '卡片更小,显示更多项目'; + @override String get normal => '标准'; + @override String get normalDescription => '默认尺寸'; + @override String get comfortable => '舒适'; + @override String get comfortableDescription => '卡片更大,显示更少项目'; + @override String get viewMode => '视图模式'; + @override String get gridView => '网格视图'; + @override String get gridViewDescription => '以网格布局显示项目'; + @override String get listView => '列表视图'; + @override String get listViewDescription => '以列表布局显示项目'; + @override String get useSeasonPosters => '使用季海报'; + @override String get showHeroSection => '显示主要精选区'; + @override String get hardwareDecoding => '硬件解码'; + @override String get hardwareDecodingDescription => '如果可用,使用硬件加速'; + @override String get bufferSize => '缓冲区大小'; + @override String bufferSizeMB({required Object size}) => '${size}MB'; + @override String get subtitleStyling => '字幕样式'; + @override String get subtitleStylingDescription => '调整字幕外观'; + @override String get smallSkipDuration => '短跳过时长'; + @override String get largeSkipDuration => '长跳过时长'; + @override String secondsUnit({required Object seconds}) => '${seconds} 秒'; + @override String get defaultSleepTimer => '默认睡眠定时器'; + @override String minutesUnit({required Object minutes}) => '${minutes} 分钟'; + @override String get rememberTrackSelections => '记住每个剧集/电影的音轨选择'; + @override String get rememberTrackSelectionsDescription => '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; + @override String get unwatchedOnly => '仅未观看'; + @override String get unwatchedOnlyDescription => '随机队列中仅包含未观看的剧集'; + @override String get shuffleOrderNavigation => '随机顺序导航'; + @override String get shuffleOrderNavigationDescription => '下一集/上一集按钮遵循随机播放顺序'; + @override String get loopShuffleQueue => '循环随机队列'; + @override String get loopShuffleQueueDescription => '在队列结束时重新开始'; + @override String get videoPlayerControls => '视频播放器控制'; + @override String get keyboardShortcuts => '键盘快捷键'; + @override String get keyboardShortcutsDescription => '自定义键盘快捷键'; + @override String get debugLogging => '调试日志'; + @override String get debugLoggingDescription => '启用详细日志记录以便故障排除'; + @override String get viewLogs => '查看日志'; + @override String get viewLogsDescription => '查看应用程序日志'; + @override String get clearCache => '清除缓存'; + @override String get clearCacheDescription => '这将清除所有缓存的图片和数据。清除缓存后,应用程序加载内容可能会变慢。'; + @override String get clearCacheSuccess => '缓存清除成功'; + @override String get resetSettings => '重置设置'; + @override String get resetSettingsDescription => '这会将所有设置重置为其默认值。此操作无法撤销。'; + @override String get resetSettingsSuccess => '设置重置成功'; + @override String get shortcutsReset => '快捷键已重置为默认值'; + @override String get about => '关于'; + @override String get aboutDescription => '应用程序信息和许可证'; + @override String get updates => '更新'; + @override String get updateAvailable => '有可用更新'; + @override String get checkForUpdates => '检查更新'; + @override String get validationErrorEnterNumber => '请输入一个有效的数字'; + @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => '时长必须介于 ${min} 和 ${max} ${unit} 之间'; + @override String shortcutAlreadyAssigned({required Object action}) => '快捷键已被分配给 ${action}'; + @override String shortcutUpdated({required Object action}) => '快捷键已为 ${action} 更新'; + @override String get autoSkip => '自动跳过'; + @override String get autoSkipIntro => '自动跳过片头'; + @override String get autoSkipIntroDescription => '几秒钟后自动跳过片头标记'; + @override String get autoSkipCredits => '自动跳过片尾'; + @override String get autoSkipCreditsDescription => '自动跳过片尾并播放下一集'; + @override String get autoSkipDelay => '自动跳过延迟'; + @override String autoSkipDelayDescription({required Object seconds}) => '自动跳过前等待 ${seconds} 秒'; } // Path: search class _StringsSearchZh implements _StringsSearchEn { - _StringsSearchZh._(this._root); + _StringsSearchZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get hint => '搜索电影、系列、音乐...'; - @override - String get tryDifferentTerm => '尝试不同的搜索词'; - @override - String get searchYourMedia => '搜索媒体'; - @override - String get enterTitleActorOrKeyword => '输入标题、演员或关键词'; + // Translations + @override String get hint => '搜索电影、系列、音乐...'; + @override String get tryDifferentTerm => '尝试不同的搜索词'; + @override String get searchYourMedia => '搜索媒体'; + @override String get enterTitleActorOrKeyword => '输入标题、演员或关键词'; } // Path: hotkeys class _StringsHotkeysZh implements _StringsHotkeysEn { - _StringsHotkeysZh._(this._root); + _StringsHotkeysZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String setShortcutFor({required Object actionName}) => - '为 ${actionName} 设置快捷键'; - @override - String get clearShortcut => '清除快捷键'; + // Translations + @override String setShortcutFor({required Object actionName}) => '为 ${actionName} 设置快捷键'; + @override String get clearShortcut => '清除快捷键'; } // Path: pinEntry class _StringsPinEntryZh implements _StringsPinEntryEn { - _StringsPinEntryZh._(this._root); + _StringsPinEntryZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get enterPin => '输入 PIN'; - @override - String get showPin => '显示 PIN'; - @override - String get hidePin => '隐藏 PIN'; + // Translations + @override String get enterPin => '输入 PIN'; + @override String get showPin => '显示 PIN'; + @override String get hidePin => '隐藏 PIN'; } // Path: fileInfo class _StringsFileInfoZh implements _StringsFileInfoEn { - _StringsFileInfoZh._(this._root); + _StringsFileInfoZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '文件信息'; - @override - String get video => '视频'; - @override - String get audio => '音频'; - @override - String get file => '文件'; - @override - String get advanced => '高级'; - @override - String get codec => '编解码器'; - @override - String get resolution => '分辨率'; - @override - String get bitrate => '比特率'; - @override - String get frameRate => '帧率'; - @override - String get aspectRatio => '宽高比'; - @override - String get profile => '配置文件'; - @override - String get bitDepth => '位深度'; - @override - String get colorSpace => '色彩空间'; - @override - String get colorRange => '色彩范围'; - @override - String get colorPrimaries => '颜色原色'; - @override - String get chromaSubsampling => '色度子采样'; - @override - String get channels => '声道'; - @override - String get path => '路径'; - @override - String get size => '大小'; - @override - String get container => '容器'; - @override - String get duration => '时长'; - @override - String get optimizedForStreaming => '已优化用于流媒体'; - @override - String get has64bitOffsets => '64位偏移量'; + // Translations + @override String get title => '文件信息'; + @override String get video => '视频'; + @override String get audio => '音频'; + @override String get file => '文件'; + @override String get advanced => '高级'; + @override String get codec => '编解码器'; + @override String get resolution => '分辨率'; + @override String get bitrate => '比特率'; + @override String get frameRate => '帧率'; + @override String get aspectRatio => '宽高比'; + @override String get profile => '配置文件'; + @override String get bitDepth => '位深度'; + @override String get colorSpace => '色彩空间'; + @override String get colorRange => '色彩范围'; + @override String get colorPrimaries => '颜色原色'; + @override String get chromaSubsampling => '色度子采样'; + @override String get channels => '声道'; + @override String get path => '路径'; + @override String get size => '大小'; + @override String get container => '容器'; + @override String get duration => '时长'; + @override String get optimizedForStreaming => '已优化用于流媒体'; + @override String get has64bitOffsets => '64位偏移量'; } // Path: mediaMenu class _StringsMediaMenuZh implements _StringsMediaMenuEn { - _StringsMediaMenuZh._(this._root); + _StringsMediaMenuZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get markAsWatched => '标记为已观看'; - @override - String get markAsUnwatched => '标记为未观看'; - @override - String get removeFromContinueWatching => '从继续观看中移除'; - @override - String get goToSeries => '转到系列'; - @override - String get goToSeason => '转到季'; - @override - String get shufflePlay => '随机播放'; - @override - String get fileInfo => '文件信息'; + // Translations + @override String get markAsWatched => '标记为已观看'; + @override String get markAsUnwatched => '标记为未观看'; + @override String get removeFromContinueWatching => '从继续观看中移除'; + @override String get goToSeries => '转到系列'; + @override String get goToSeason => '转到季'; + @override String get shufflePlay => '随机播放'; + @override String get fileInfo => '文件信息'; } // Path: accessibility class _StringsAccessibilityZh implements _StringsAccessibilityEn { - _StringsAccessibilityZh._(this._root); + _StringsAccessibilityZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String mediaCardMovie({required Object title}) => '${title}, 电影'; - @override - String mediaCardShow({required Object title}) => '${title}, 电视剧'; - @override - String mediaCardEpisode({ - required Object title, - required Object episodeInfo, - }) => '${title}, ${episodeInfo}'; - @override - String mediaCardSeason({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - @override - String get mediaCardWatched => '已观看'; - @override - String mediaCardPartiallyWatched({required Object percent}) => - '已观看 ${percent} 百分比'; - @override - String get mediaCardUnwatched => '未观看'; - @override - String get tapToPlay => '点击播放'; + // Translations + @override String mediaCardMovie({required Object title}) => '${title}, 电影'; + @override String mediaCardShow({required Object title}) => '${title}, 电视剧'; + @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + @override String get mediaCardWatched => '已观看'; + @override String mediaCardPartiallyWatched({required Object percent}) => '已观看 ${percent} 百分比'; + @override String get mediaCardUnwatched => '未观看'; + @override String get tapToPlay => '点击播放'; } // Path: tooltips class _StringsTooltipsZh implements _StringsTooltipsEn { - _StringsTooltipsZh._(this._root); + _StringsTooltipsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get shufflePlay => '随机播放'; - @override - String get markAsWatched => '标记为已观看'; - @override - String get markAsUnwatched => '标记为未观看'; + // Translations + @override String get shufflePlay => '随机播放'; + @override String get markAsWatched => '标记为已观看'; + @override String get markAsUnwatched => '标记为未观看'; } // Path: videoControls class _StringsVideoControlsZh implements _StringsVideoControlsEn { - _StringsVideoControlsZh._(this._root); + _StringsVideoControlsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get audioLabel => '音频'; - @override - String get subtitlesLabel => '字幕'; - @override - String get resetToZero => '重置为 0ms'; - @override - String addTime({required Object amount, required Object unit}) => - '+${amount}${unit}'; - @override - String minusTime({required Object amount, required Object unit}) => - '-${amount}${unit}'; - @override - String playsLater({required Object label}) => '${label} 播放较晚'; - @override - String playsEarlier({required Object label}) => '${label} 播放较早'; - @override - String get noOffset => '无偏移'; - @override - String get letterbox => '信箱模式(Letterbox)'; - @override - String get fillScreen => '填充屏幕'; - @override - String get stretch => '拉伸'; - @override - String get lockRotation => '锁定旋转'; - @override - String get unlockRotation => '解锁旋转'; - @override - String get sleepTimer => '睡眠定时器'; - @override - String get timerActive => '定时器已激活'; - @override - String playbackWillPauseIn({required Object duration}) => - '播放将在 ${duration} 后暂停'; - @override - String get sleepTimerCompleted => '睡眠定时器已完成 - 播放已暂停'; - @override - String get playButton => '播放'; - @override - String get pauseButton => '暂停'; - @override - String seekBackwardButton({required Object seconds}) => '后退 ${seconds} 秒'; - @override - String seekForwardButton({required Object seconds}) => '前进 ${seconds} 秒'; - @override - String get previousButton => '上一集'; - @override - String get nextButton => '下一集'; - @override - String get previousChapterButton => '上一章节'; - @override - String get nextChapterButton => '下一章节'; - @override - String get volumeButton => '音量'; - @override - String get muteButton => '静音'; - @override - String get unmuteButton => '取消静音'; - @override - String get settingsButton => '视频设置'; - @override - String get audioTrackButton => '音轨'; - @override - String get subtitlesButton => '字幕'; - @override - String get chaptersButton => '章节'; - @override - String get versionsButton => '视频版本'; - @override - String get aspectRatioButton => '宽高比'; - @override - String get fullscreenButton => '进入全屏'; - @override - String get exitFullscreenButton => '退出全屏'; - @override - String get rotationLockButton => '旋转锁定'; - @override - String get timelineSlider => '视频时间轴'; - @override - String get volumeSlider => '音量调节'; - @override - String get backButton => '返回'; + // Translations + @override String get audioLabel => '音频'; + @override String get subtitlesLabel => '字幕'; + @override String get resetToZero => '重置为 0ms'; + @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; + @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; + @override String playsLater({required Object label}) => '${label} 播放较晚'; + @override String playsEarlier({required Object label}) => '${label} 播放较早'; + @override String get noOffset => '无偏移'; + @override String get letterbox => '信箱模式(Letterbox)'; + @override String get fillScreen => '填充屏幕'; + @override String get stretch => '拉伸'; + @override String get lockRotation => '锁定旋转'; + @override String get unlockRotation => '解锁旋转'; + @override String get sleepTimer => '睡眠定时器'; + @override String get timerActive => '定时器已激活'; + @override String playbackWillPauseIn({required Object duration}) => '播放将在 ${duration} 后暂停'; + @override String get sleepTimerCompleted => '睡眠定时器已完成 - 播放已暂停'; + @override String get playButton => '播放'; + @override String get pauseButton => '暂停'; + @override String seekBackwardButton({required Object seconds}) => '后退 ${seconds} 秒'; + @override String seekForwardButton({required Object seconds}) => '前进 ${seconds} 秒'; + @override String get previousButton => '上一集'; + @override String get nextButton => '下一集'; + @override String get previousChapterButton => '上一章节'; + @override String get nextChapterButton => '下一章节'; + @override String get volumeButton => '音量'; + @override String get muteButton => '静音'; + @override String get unmuteButton => '取消静音'; + @override String get settingsButton => '视频设置'; + @override String get audioTrackButton => '音轨'; + @override String get subtitlesButton => '字幕'; + @override String get chaptersButton => '章节'; + @override String get versionsButton => '视频版本'; + @override String get aspectRatioButton => '宽高比'; + @override String get fullscreenButton => '进入全屏'; + @override String get exitFullscreenButton => '退出全屏'; + @override String get rotationLockButton => '旋转锁定'; + @override String get timelineSlider => '视频时间轴'; + @override String get volumeSlider => '音量调节'; + @override String get backButton => '返回'; } // Path: userStatus class _StringsUserStatusZh implements _StringsUserStatusEn { - _StringsUserStatusZh._(this._root); + _StringsUserStatusZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get admin => '管理员'; - @override - String get restricted => '受限'; - @override - String get protected => '受保护'; - @override - String get current => '当前'; + // Translations + @override String get admin => '管理员'; + @override String get restricted => '受限'; + @override String get protected => '受保护'; + @override String get current => '当前'; } // Path: messages class _StringsMessagesZh implements _StringsMessagesEn { - _StringsMessagesZh._(this._root); + _StringsMessagesZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get markedAsWatched => '已标记为已观看'; - @override - String get markedAsUnwatched => '已标记为未观看'; - @override - String get removedFromContinueWatching => '已从继续观看中移除'; - @override - String errorLoading({required Object error}) => '错误: ${error}'; - @override - String get fileInfoNotAvailable => '文件信息不可用'; - @override - String errorLoadingFileInfo({required Object error}) => '加载文件信息时出错: ${error}'; - @override - String get errorLoadingSeries => '加载系列时出错'; - @override - String get errorLoadingSeason => '加载季时出错'; - @override - String get musicNotSupported => '尚不支持播放音乐'; - @override - String get logsCleared => '日志已清除'; - @override - String get logsCopied => '日志已复制到剪贴板'; - @override - String get noLogsAvailable => '没有可用日志'; - @override - String libraryScanning({required Object title}) => '正在扫描 “${title}”...'; - @override - String libraryScanStarted({required Object title}) => '已开始扫描 “${title}” 媒体库'; - @override - String libraryScanFailed({required Object error}) => '无法扫描媒体库: ${error}'; - @override - String metadataRefreshing({required Object title}) => - '正在刷新 “${title}” 的元数据...'; - @override - String metadataRefreshStarted({required Object title}) => - '已开始刷新 “${title}” 的元数据'; - @override - String metadataRefreshFailed({required Object error}) => '无法刷新元数据: ${error}'; - @override - String get noPlexToken => '未找到 Plex 令牌。请重新登录。'; - @override - String get logoutConfirm => '你确定要登出吗?'; - @override - String get noSeasonsFound => '未找到季'; - @override - String get noEpisodesFound => '在第一季中未找到剧集'; - @override - String get noEpisodesFoundGeneral => '未找到剧集'; - @override - String get noResultsFound => '未找到结果'; - @override - String sleepTimerSet({required Object label}) => '睡眠定时器已设置为 ${label}'; - @override - String failedToSwitchProfile({required Object displayName}) => - '无法切换到 ${displayName}'; - @override - String get noItemsAvailable => '没有可用的项目'; - @override - String get failedToCreatePlayQueue => '创建播放队列失败'; - @override - String get failedToCreatePlayQueueNoItems => '创建播放队列失败 - 没有项目'; - @override - String failedPlayback({required Object action, required Object error}) => - '无法${action}: ${error}'; + // Translations + @override String get markedAsWatched => '已标记为已观看'; + @override String get markedAsUnwatched => '已标记为未观看'; + @override String get removedFromContinueWatching => '已从继续观看中移除'; + @override String errorLoading({required Object error}) => '错误: ${error}'; + @override String get fileInfoNotAvailable => '文件信息不可用'; + @override String errorLoadingFileInfo({required Object error}) => '加载文件信息时出错: ${error}'; + @override String get errorLoadingSeries => '加载系列时出错'; + @override String get errorLoadingSeason => '加载季时出错'; + @override String get musicNotSupported => '尚不支持播放音乐'; + @override String get logsCleared => '日志已清除'; + @override String get logsCopied => '日志已复制到剪贴板'; + @override String get noLogsAvailable => '没有可用日志'; + @override String libraryScanning({required Object title}) => '正在扫描 “${title}”...'; + @override String libraryScanStarted({required Object title}) => '已开始扫描 “${title}” 媒体库'; + @override String libraryScanFailed({required Object error}) => '无法扫描媒体库: ${error}'; + @override String metadataRefreshing({required Object title}) => '正在刷新 “${title}” 的元数据...'; + @override String metadataRefreshStarted({required Object title}) => '已开始刷新 “${title}” 的元数据'; + @override String metadataRefreshFailed({required Object error}) => '无法刷新元数据: ${error}'; + @override String get noPlexToken => '未找到 Plex 令牌。请重新登录。'; + @override String get logoutConfirm => '你确定要登出吗?'; + @override String get noSeasonsFound => '未找到季'; + @override String get noEpisodesFound => '在第一季中未找到剧集'; + @override String get noEpisodesFoundGeneral => '未找到剧集'; + @override String get noResultsFound => '未找到结果'; + @override String sleepTimerSet({required Object label}) => '睡眠定时器已设置为 ${label}'; + @override String failedToSwitchProfile({required Object displayName}) => '无法切换到 ${displayName}'; + @override String get noItemsAvailable => '没有可用的项目'; + @override String get failedToCreatePlayQueue => '创建播放队列失败'; + @override String get failedToCreatePlayQueueNoItems => '创建播放队列失败 - 没有项目'; + @override String failedPlayback({required Object action, required Object error}) => '无法${action}: ${error}'; } // Path: profile class _StringsProfileZh implements _StringsProfileEn { - _StringsProfileZh._(this._root); + _StringsProfileZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get noUsersAvailable => '没有可用用户'; + // Translations + @override String get noUsersAvailable => '没有可用用户'; } // Path: subtitlingStyling class _StringsSubtitlingStylingZh implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingZh._(this._root); + _StringsSubtitlingStylingZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get stylingOptions => '样式选项'; - @override - String get fontSize => '字号'; - @override - String get textColor => '文本颜色'; - @override - String get borderSize => '边框大小'; - @override - String get borderColor => '边框颜色'; - @override - String get backgroundOpacity => '背景不透明度'; - @override - String get backgroundColor => '背景颜色'; + // Translations + @override String get stylingOptions => '样式选项'; + @override String get fontSize => '字号'; + @override String get textColor => '文本颜色'; + @override String get borderSize => '边框大小'; + @override String get borderColor => '边框颜色'; + @override String get backgroundOpacity => '背景不透明度'; + @override String get backgroundColor => '背景颜色'; } // Path: dialog class _StringsDialogZh implements _StringsDialogEn { - _StringsDialogZh._(this._root); + _StringsDialogZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get confirmAction => '确认操作'; - @override - String get areYouSure => '确定要执行此操作吗?'; - @override - String get cancel => '取消'; - @override - String get playNow => '立即播放'; + // Translations + @override String get confirmAction => '确认操作'; + @override String get areYouSure => '确定要执行此操作吗?'; + @override String get cancel => '取消'; + @override String get playNow => '立即播放'; } // Path: discover class _StringsDiscoverZh implements _StringsDiscoverEn { - _StringsDiscoverZh._(this._root); + _StringsDiscoverZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '发现'; - @override - String get switchProfile => '切换配置文件'; - @override - String get switchServer => '切换服务器'; - @override - String get logout => '登出'; - @override - String get noContentAvailable => '没有可用内容'; - @override - String get addMediaToLibraries => '请向你的媒体库添加一些媒体'; - @override - String get continueWatching => '继续观看'; - @override - String get recentlyAdded => '最近添加'; - @override - String get play => '播放'; - @override - String get resume => '继续'; - @override - String playEpisode({required Object season, required Object episode}) => - '播放 S${season}, E${episode}'; - @override - String resumeEpisode({required Object season, required Object episode}) => - '继续 S${season}, E${episode}'; - @override - String get pause => '暂停'; - @override - String get overview => '概述'; - @override - String get cast => '演员表'; - @override - String get seasons => '季数'; - @override - String get studio => '制作公司'; - @override - String get rating => '年龄分级'; - @override - String get watched => '已观看'; - @override - String episodeCount({required Object count}) => '${count} 集'; - @override - String watchedProgress({required Object watched, required Object total}) => - '已观看 ${watched}/${total} 集'; - @override - String get movie => '电影'; - @override - String get tvShow => '电视剧'; - @override - String minutesLeft({required Object minutes}) => '剩余 ${minutes} 分钟'; + // Translations + @override String get title => '发现'; + @override String get switchProfile => '切换配置文件'; + @override String get switchServer => '切换服务器'; + @override String get logout => '登出'; + @override String get noContentAvailable => '没有可用内容'; + @override String get addMediaToLibraries => '请向你的媒体库添加一些媒体'; + @override String get continueWatching => '继续观看'; + @override String get recentlyAdded => '最近添加'; + @override String get play => '播放'; + @override String get resume => '继续'; + @override String playEpisode({required Object season, required Object episode}) => '播放 S${season}, E${episode}'; + @override String resumeEpisode({required Object season, required Object episode}) => '继续 S${season}, E${episode}'; + @override String get pause => '暂停'; + @override String get overview => '概述'; + @override String get cast => '演员表'; + @override String get seasons => '季数'; + @override String get studio => '制作公司'; + @override String get rating => '年龄分级'; + @override String get watched => '已观看'; + @override String episodeCount({required Object count}) => '${count} 集'; + @override String watchedProgress({required Object watched, required Object total}) => '已观看 ${watched}/${total} 集'; + @override String get movie => '电影'; + @override String get tvShow => '电视剧'; + @override String minutesLeft({required Object minutes}) => '剩余 ${minutes} 分钟'; } // Path: errors class _StringsErrorsZh implements _StringsErrorsEn { - _StringsErrorsZh._(this._root); + _StringsErrorsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String searchFailed({required Object error}) => '搜索失败: ${error}'; - @override - String connectionTimeout({required Object context}) => '加载 ${context} 时连接超时'; - @override - String get connectionFailed => '无法连接到 Plex 服务器'; - @override - String failedToLoad({required Object context, required Object error}) => - '无法加载 ${context}: ${error}'; - @override - String get noClientAvailable => '没有可用客户端'; - @override - String authenticationFailed({required Object error}) => '验证失败: ${error}'; - @override - String get couldNotLaunchUrl => '无法打开授权 URL'; - @override - String get pleaseEnterToken => '请输入一个令牌'; - @override - String get invalidToken => '令牌无效'; - @override - String failedToVerifyToken({required Object error}) => '无法验证令牌: ${error}'; - @override - String failedToSwitchProfile({required Object displayName}) => - '无法切换到 ${displayName}'; - @override - String get connectionFailedGeneric => '连接失败'; + // Translations + @override String searchFailed({required Object error}) => '搜索失败: ${error}'; + @override String connectionTimeout({required Object context}) => '加载 ${context} 时连接超时'; + @override String get connectionFailed => '无法连接到 Plex 服务器'; + @override String failedToLoad({required Object context, required Object error}) => '无法加载 ${context}: ${error}'; + @override String get noClientAvailable => '没有可用客户端'; + @override String authenticationFailed({required Object error}) => '验证失败: ${error}'; + @override String get couldNotLaunchUrl => '无法打开授权 URL'; + @override String get pleaseEnterToken => '请输入一个令牌'; + @override String get invalidToken => '令牌无效'; + @override String failedToVerifyToken({required Object error}) => '无法验证令牌: ${error}'; + @override String failedToSwitchProfile({required Object displayName}) => '无法切换到 ${displayName}'; + @override String get connectionFailedGeneric => '连接失败'; } // Path: libraries class _StringsLibrariesZh implements _StringsLibrariesEn { - _StringsLibrariesZh._(this._root); + _StringsLibrariesZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '媒体库'; - @override - String get scanLibraryFiles => '扫描媒体库文件'; - @override - String get scanLibrary => '扫描媒体库'; - @override - String get analyze => '分析'; - @override - String get analyzeLibrary => '分析媒体库'; - @override - String get refreshMetadata => '刷新元数据'; - @override - String get emptyTrash => '清空回收站'; - @override - String emptyingTrash({required Object title}) => '正在清空 “${title}” 的回收站...'; - @override - String trashEmptied({required Object title}) => '已清空 “${title}” 的回收站'; - @override - String failedToEmptyTrash({required Object error}) => '无法清空回收站: ${error}'; - @override - String analyzing({required Object title}) => '正在分析 “${title}”...'; - @override - String analysisStarted({required Object title}) => '已开始分析 “${title}”'; - @override - String failedToAnalyze({required Object error}) => '无法分析媒体库: ${error}'; - @override - String get noLibrariesFound => '未找到媒体库'; - @override - String get thisLibraryIsEmpty => '此媒体库为空'; - @override - String get all => '全部'; - @override - String get clearAll => '全部清除'; - @override - String scanLibraryConfirm({required Object title}) => '确定要扫描 “${title}” 吗?'; - @override - String analyzeLibraryConfirm({required Object title}) => - '确定要分析 “${title}” 吗?'; - @override - String refreshMetadataConfirm({required Object title}) => - '确定要刷新 “${title}” 的元数据吗?'; - @override - String emptyTrashConfirm({required Object title}) => - '确定要清空 “${title}” 的回收站吗?'; - @override - String get manageLibraries => '管理媒体库'; - @override - String get sort => '排序'; - @override - String get sortBy => '排序依据'; - @override - String get filters => '筛选器'; - @override - String loadingLibraryWithCount({required Object count}) => - '正在加载媒体库... (已加载 ${count} 个项目)'; - @override - String get confirmActionMessage => '确定要执行此操作吗?'; - @override - String get showLibrary => '显示媒体库'; - @override - String get hideLibrary => '隐藏媒体库'; - @override - String get libraryOptions => '媒体库选项'; - @override - String get content => '媒体库内容'; - @override - String get selectLibrary => '选择媒体库'; - @override - String filtersWithCount({required Object count}) => '筛选器(${count})'; - @override - String get noRecommendations => '暂无推荐'; - @override - String get noCollections => '此媒体库中没有合集'; - @override - String get noFoldersFound => '未找到文件夹'; - @override - String get folders => '文件夹'; - @override - late final _StringsLibrariesTabsZh tabs = _StringsLibrariesTabsZh._(_root); - @override - late final _StringsLibrariesGroupingsZh groupings = - _StringsLibrariesGroupingsZh._(_root); + // Translations + @override String get title => '媒体库'; + @override String get scanLibraryFiles => '扫描媒体库文件'; + @override String get scanLibrary => '扫描媒体库'; + @override String get analyze => '分析'; + @override String get analyzeLibrary => '分析媒体库'; + @override String get refreshMetadata => '刷新元数据'; + @override String get emptyTrash => '清空回收站'; + @override String emptyingTrash({required Object title}) => '正在清空 “${title}” 的回收站...'; + @override String trashEmptied({required Object title}) => '已清空 “${title}” 的回收站'; + @override String failedToEmptyTrash({required Object error}) => '无法清空回收站: ${error}'; + @override String analyzing({required Object title}) => '正在分析 “${title}”...'; + @override String analysisStarted({required Object title}) => '已开始分析 “${title}”'; + @override String failedToAnalyze({required Object error}) => '无法分析媒体库: ${error}'; + @override String get noLibrariesFound => '未找到媒体库'; + @override String get thisLibraryIsEmpty => '此媒体库为空'; + @override String get all => '全部'; + @override String get clearAll => '全部清除'; + @override String scanLibraryConfirm({required Object title}) => '确定要扫描 “${title}” 吗?'; + @override String analyzeLibraryConfirm({required Object title}) => '确定要分析 “${title}” 吗?'; + @override String refreshMetadataConfirm({required Object title}) => '确定要刷新 “${title}” 的元数据吗?'; + @override String emptyTrashConfirm({required Object title}) => '确定要清空 “${title}” 的回收站吗?'; + @override String get manageLibraries => '管理媒体库'; + @override String get sort => '排序'; + @override String get sortBy => '排序依据'; + @override String get filters => '筛选器'; + @override String loadingLibraryWithCount({required Object count}) => '正在加载媒体库... (已加载 ${count} 个项目)'; + @override String get confirmActionMessage => '确定要执行此操作吗?'; + @override String get showLibrary => '显示媒体库'; + @override String get hideLibrary => '隐藏媒体库'; + @override String get libraryOptions => '媒体库选项'; + @override String get content => '媒体库内容'; + @override String get selectLibrary => '选择媒体库'; + @override String filtersWithCount({required Object count}) => '筛选器(${count})'; + @override String get noRecommendations => '暂无推荐'; + @override String get noCollections => '此媒体库中没有合集'; + @override String get noFoldersFound => '未找到文件夹'; + @override String get folders => '文件夹'; + @override late final _StringsLibrariesTabsZh tabs = _StringsLibrariesTabsZh._(_root); + @override late final _StringsLibrariesGroupingsZh groupings = _StringsLibrariesGroupingsZh._(_root); } // Path: about class _StringsAboutZh implements _StringsAboutEn { - _StringsAboutZh._(this._root); + _StringsAboutZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '关于'; - @override - String get openSourceLicenses => '开源许可证'; - @override - String versionLabel({required Object version}) => '版本 ${version}'; - @override - String get appDescription => '一款精美的 Flutter Plex 客户端'; - @override - String get viewLicensesDescription => '查看第三方库的许可证'; + // Translations + @override String get title => '关于'; + @override String get openSourceLicenses => '开源许可证'; + @override String versionLabel({required Object version}) => '版本 ${version}'; + @override String get appDescription => '一款精美的 Flutter Plex 客户端'; + @override String get viewLicensesDescription => '查看第三方库的许可证'; } // Path: serverSelection class _StringsServerSelectionZh implements _StringsServerSelectionEn { - _StringsServerSelectionZh._(this._root); + _StringsServerSelectionZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get connectingToServer => '正在连接服务器...'; - @override - String get connectingToAllServers => '正在连接所有服务器...'; - @override - String get connectToAllServers => '连接所有服务器'; - @override - String get allServerConnectionsFailed => '无法连接到任何服务器。请检查你的网络并重试。'; - @override - String foundServers({required Object count}) => '找到 ${count} 个服务器'; - @override - String get orSelectIndividually => '或单独选择一个服务器:'; - @override - String get serverDebugCopied => '服务器调试数据已复制到剪贴板'; - @override - String get copyDebugData => '复制调试数据'; - @override - String get noServersFound => '未找到服务器'; - @override - String malformedServerData({required Object count}) => - '找到 ${count} 个数据格式错误的服务器。没有可用的有效服务器。'; - @override - String get incompleteServerInfo => '某些服务器信息不完整,已被跳过。请检查你的 Plex.tv 账户。'; - @override - String get incompleteConnectionInfo => '服务器连接信息不完整。请重试。'; - @override - String malformedServerInfo({required Object message}) => - '服务器信息格式错误: ${message}'; - @override - String get networkConnectionFailed => '网络连接失败。请检查你的网络连接并重试。'; - @override - String get authenticationFailed => '验证失败。请重新登录。'; - @override - String get plexServiceUnavailable => 'Plex 服务不可用。请稍后重试。'; - @override - String failedToLoadServers({required Object error}) => '无法加载服务器: ${error}'; + // Translations + @override String get connectingToServer => '正在连接服务器...'; + @override String get connectingToAllServers => '正在连接所有服务器...'; + @override String get connectToAllServers => '连接所有服务器'; + @override String get allServerConnectionsFailed => '无法连接到任何服务器。请检查你的网络并重试。'; + @override String foundServers({required Object count}) => '找到 ${count} 个服务器'; + @override String get orSelectIndividually => '或单独选择一个服务器:'; + @override String get serverDebugCopied => '服务器调试数据已复制到剪贴板'; + @override String get copyDebugData => '复制调试数据'; + @override String get noServersFound => '未找到服务器'; + @override String malformedServerData({required Object count}) => '找到 ${count} 个数据格式错误的服务器。没有可用的有效服务器。'; + @override String get incompleteServerInfo => '某些服务器信息不完整,已被跳过。请检查你的 Plex.tv 账户。'; + @override String get incompleteConnectionInfo => '服务器连接信息不完整。请重试。'; + @override String malformedServerInfo({required Object message}) => '服务器信息格式错误: ${message}'; + @override String get networkConnectionFailed => '网络连接失败。请检查你的网络连接并重试。'; + @override String get authenticationFailed => '验证失败。请重新登录。'; + @override String get plexServiceUnavailable => 'Plex 服务不可用。请稍后重试。'; + @override String failedToLoadServers({required Object error}) => '无法加载服务器: ${error}'; } // Path: hubDetail class _StringsHubDetailZh implements _StringsHubDetailEn { - _StringsHubDetailZh._(this._root); + _StringsHubDetailZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '标题'; - @override - String get releaseYear => '发行年份'; - @override - String get dateAdded => '添加日期'; - @override - String get rating => '评分'; - @override - String get noItemsFound => '未找到项目'; + // Translations + @override String get title => '标题'; + @override String get releaseYear => '发行年份'; + @override String get dateAdded => '添加日期'; + @override String get rating => '评分'; + @override String get noItemsFound => '未找到项目'; } // Path: logs class _StringsLogsZh implements _StringsLogsEn { - _StringsLogsZh._(this._root); + _StringsLogsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '日志'; - @override - String get clearLogs => '清除日志'; - @override - String get copyLogs => '复制日志'; - @override - String get exportLogs => '导出日志'; - @override - String get noLogsToShow => '没有可显示的日志'; - @override - String get error => '错误:'; - @override - String get stackTrace => '堆栈跟踪 (Stack Trace):'; + // Translations + @override String get title => '日志'; + @override String get clearLogs => '清除日志'; + @override String get copyLogs => '复制日志'; + @override String get exportLogs => '导出日志'; + @override String get noLogsToShow => '没有可显示的日志'; + @override String get error => '错误:'; + @override String get stackTrace => '堆栈跟踪 (Stack Trace):'; } // Path: licenses class _StringsLicensesZh implements _StringsLicensesEn { - _StringsLicensesZh._(this._root); + _StringsLicensesZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get relatedPackages => '相关软件包'; - @override - String get license => '许可证'; - @override - String licenseNumber({required Object number}) => '许可证 ${number}'; - @override - String licensesCount({required Object count}) => '${count} 个许可证'; + // Translations + @override String get relatedPackages => '相关软件包'; + @override String get license => '许可证'; + @override String licenseNumber({required Object number}) => '许可证 ${number}'; + @override String licensesCount({required Object count}) => '${count} 个许可证'; } // Path: navigation class _StringsNavigationZh implements _StringsNavigationEn { - _StringsNavigationZh._(this._root); + _StringsNavigationZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get home => '主页'; - @override - String get search => '搜索'; - @override - String get libraries => '媒体库'; - @override - String get settings => '设置'; + // Translations + @override String get home => '主页'; + @override String get search => '搜索'; + @override String get libraries => '媒体库'; + @override String get settings => '设置'; } // Path: playlists class _StringsPlaylistsZh implements _StringsPlaylistsEn { - _StringsPlaylistsZh._(this._root); + _StringsPlaylistsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '播放列表'; - @override - String get noPlaylists => '未找到播放列表'; - @override - String get create => '创建播放列表'; - @override - String get newPlaylist => '新播放列表'; - @override - String get playlistName => '播放列表名称'; - @override - String get enterPlaylistName => '输入播放列表名称'; - @override - String get edit => '编辑播放列表'; - @override - String get delete => '删除播放列表'; - @override - String get addTo => '添加到播放列表'; - @override - String get addItems => '添加项目'; - @override - String get removeItem => '从播放列表中移除'; - @override - String get clearPlaylist => '清空播放列表'; - @override - String get playAll => '全部播放'; - @override - String get shuffle => '随机播放'; - @override - String get smartPlaylist => '智能播放列表'; - @override - String get regularPlaylist => '普通播放列表'; - @override - String itemCount({required Object count}) => '${count} 个项目'; - @override - String get oneItem => '1 个项目'; - @override - String get emptyPlaylist => '此播放列表为空'; - @override - String get deleteConfirm => '删除播放列表?'; - @override - String deleteMessage({required Object name}) => '确定要删除 "${name}" 吗?'; - @override - String get created => '播放列表已创建'; - @override - String get updated => '播放列表已更新'; - @override - String get deleted => '播放列表已删除'; - @override - String get itemAdded => '已添加到播放列表'; - @override - String get itemRemoved => '已从播放列表中移除'; - @override - String get selectPlaylist => '选择播放列表'; - @override - String get createNewPlaylist => '创建新播放列表'; - @override - String get errorCreating => '创建播放列表失败'; - @override - String get errorDeleting => '删除播放列表失败'; - @override - String get errorLoading => '加载播放列表失败'; - @override - String get errorAdding => '添加到播放列表失败'; - @override - String get errorReordering => '重新排序播放列表项目失败'; - @override - String get errorRemoving => '从播放列表中移除失败'; - @override - String get playlist => '播放列表'; + // Translations + @override String get title => '播放列表'; + @override String get noPlaylists => '未找到播放列表'; + @override String get create => '创建播放列表'; + @override String get newPlaylist => '新播放列表'; + @override String get playlistName => '播放列表名称'; + @override String get enterPlaylistName => '输入播放列表名称'; + @override String get edit => '编辑播放列表'; + @override String get delete => '删除播放列表'; + @override String get addTo => '添加到播放列表'; + @override String get addItems => '添加项目'; + @override String get removeItem => '从播放列表中移除'; + @override String get clearPlaylist => '清空播放列表'; + @override String get playAll => '全部播放'; + @override String get shuffle => '随机播放'; + @override String get smartPlaylist => '智能播放列表'; + @override String get regularPlaylist => '普通播放列表'; + @override String itemCount({required Object count}) => '${count} 个项目'; + @override String get oneItem => '1 个项目'; + @override String get emptyPlaylist => '此播放列表为空'; + @override String get deleteConfirm => '删除播放列表?'; + @override String deleteMessage({required Object name}) => '确定要删除 "${name}" 吗?'; + @override String get created => '播放列表已创建'; + @override String get updated => '播放列表已更新'; + @override String get deleted => '播放列表已删除'; + @override String get itemAdded => '已添加到播放列表'; + @override String get itemRemoved => '已从播放列表中移除'; + @override String get selectPlaylist => '选择播放列表'; + @override String get createNewPlaylist => '创建新播放列表'; + @override String get errorCreating => '创建播放列表失败'; + @override String get errorDeleting => '删除播放列表失败'; + @override String get errorLoading => '加载播放列表失败'; + @override String get errorAdding => '添加到播放列表失败'; + @override String get errorReordering => '重新排序播放列表项目失败'; + @override String get errorRemoving => '从播放列表中移除失败'; + @override String get playlist => '播放列表'; } // Path: collections class _StringsCollectionsZh implements _StringsCollectionsEn { - _StringsCollectionsZh._(this._root); + _StringsCollectionsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get title => '合集'; - @override - String get collection => '合集'; - @override - String get empty => '合集为空'; - @override - String get noItems => '此合集没有项目'; - @override - String get unknownLibrarySection => '无法删除:未知的媒体库分区'; - @override - String get deleteCollection => '删除合集'; - @override - String deleteConfirm({required Object title}) => '确定要删除"${title}"吗?此操作无法撤销。'; - @override - String get deleted => '已删除合集'; - @override - String get deleteFailed => '删除合集失败'; - @override - String deleteFailedWithError({required Object error}) => '删除合集失败:${error}'; - @override - String failedToLoadItems({required Object error}) => '加载合集项目失败:${error}'; - @override - String get addTo => '添加到合集'; - @override - String get selectCollection => '选择合集'; - @override - String get createNewCollection => '创建新合集'; - @override - String get collectionName => '合集名称'; - @override - String get enterCollectionName => '输入合集名称'; - @override - String get addedToCollection => '已添加到合集'; - @override - String get errorAddingToCollection => '添加到合集失败'; - @override - String get created => '已创建合集'; - @override - String get removeFromCollection => '从合集移除'; - @override - String removeFromCollectionConfirm({required Object title}) => - '将“${title}”从此合集移除?'; - @override - String get removedFromCollection => '已从合集移除'; - @override - String get removeFromCollectionFailed => '从合集移除失败'; - @override - String removeFromCollectionError({required Object error}) => - '从合集移除时出错:${error}'; + // Translations + @override String get title => '合集'; + @override String get collection => '合集'; + @override String get empty => '合集为空'; + @override String get noItems => '此合集没有项目'; + @override String get unknownLibrarySection => '无法删除:未知的媒体库分区'; + @override String get deleteCollection => '删除合集'; + @override String deleteConfirm({required Object title}) => '确定要删除"${title}"吗?此操作无法撤销。'; + @override String get deleted => '已删除合集'; + @override String get deleteFailed => '删除合集失败'; + @override String deleteFailedWithError({required Object error}) => '删除合集失败:${error}'; + @override String failedToLoadItems({required Object error}) => '加载合集项目失败:${error}'; + @override String get addTo => '添加到合集'; + @override String get selectCollection => '选择合集'; + @override String get createNewCollection => '创建新合集'; + @override String get collectionName => '合集名称'; + @override String get enterCollectionName => '输入合集名称'; + @override String get addedToCollection => '已添加到合集'; + @override String get errorAddingToCollection => '添加到合集失败'; + @override String get created => '已创建合集'; + @override String get removeFromCollection => '从合集移除'; + @override String removeFromCollectionConfirm({required Object title}) => '将“${title}”从此合集移除?'; + @override String get removedFromCollection => '已从合集移除'; + @override String get removeFromCollectionFailed => '从合集移除失败'; + @override String removeFromCollectionError({required Object error}) => '从合集移除时出错:${error}'; } // Path: libraries.tabs class _StringsLibrariesTabsZh implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsZh._(this._root); + _StringsLibrariesTabsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get recommended => '推荐'; - @override - String get browse => '浏览'; - @override - String get collections => '合集'; - @override - String get playlists => '播放列表'; + // Translations + @override String get recommended => '推荐'; + @override String get browse => '浏览'; + @override String get collections => '合集'; + @override String get playlists => '播放列表'; } // Path: libraries.groupings class _StringsLibrariesGroupingsZh implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsZh._(this._root); + _StringsLibrariesGroupingsZh._(this._root); - @override - final _StringsZh _root; // ignore: unused_field + @override final _StringsZh _root; // ignore: unused_field - // Translations - @override - String get all => '全部'; - @override - String get movies => '电影'; - @override - String get shows => '剧集'; - @override - String get seasons => '季'; - @override - String get episodes => '集'; - @override - String get folders => '文件夹'; + // Translations + @override String get all => '全部'; + @override String get movies => '电影'; + @override String get shows => '剧集'; + @override String get seasons => '季'; + @override String get episodes => '集'; + @override String get folders => '文件夹'; } /// Flat map(s) containing all translations. /// Only for edge cases! For simple maps, use the map function of this library. extension on Translations { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': - return 'Plezy'; - case 'app.loading': - return 'Loading...'; - case 'auth.signInWithPlex': - return 'Sign in with Plex'; - case 'auth.showQRCode': - return 'Show QR Code'; - case 'auth.cancel': - return 'Cancel'; - case 'auth.authenticate': - return 'Authenticate'; - case 'auth.retry': - return 'Retry'; - case 'auth.debugEnterToken': - return 'Debug: Enter Plex Token'; - case 'auth.plexTokenLabel': - return 'Plex Auth Token'; - case 'auth.plexTokenHint': - return 'Enter your Plex.tv token'; - case 'auth.authenticationTimeout': - return 'Authentication timed out. Please try again.'; - case 'auth.scanQRCodeInstruction': - return 'Scan this QR code with a device logged into Plex to authenticate.'; - case 'auth.waitingForAuth': - return 'Waiting for authentication...\nPlease complete sign-in in your browser.'; - case 'common.cancel': - return 'Cancel'; - case 'common.save': - return 'Save'; - case 'common.close': - return 'Close'; - case 'common.clear': - return 'Clear'; - case 'common.reset': - return 'Reset'; - case 'common.later': - return 'Later'; - case 'common.submit': - return 'Submit'; - case 'common.confirm': - return 'Confirm'; - case 'common.retry': - return 'Retry'; - case 'common.playNow': - return 'Play Now'; - case 'common.logout': - return 'Logout'; - case 'common.online': - return 'Online'; - case 'common.offline': - return 'Offline'; - case 'common.owned': - return 'Owned'; - case 'common.shared': - return 'Shared'; - case 'common.current': - return 'CURRENT'; - case 'common.unknown': - return 'Unknown'; - case 'common.refresh': - return 'Refresh'; - case 'common.yes': - return 'Yes'; - case 'common.no': - return 'No'; - case 'common.server': - return 'Server'; - case 'common.delete': - return 'Delete'; - case 'common.shuffle': - return 'Shuffle'; - case 'common.addTo': - return 'Add to...'; - case 'screens.licenses': - return 'Licenses'; - case 'screens.switchProfile': - return 'Switch Profile'; - case 'screens.subtitleStyling': - return 'Subtitle Styling'; - case 'screens.search': - return 'Search'; - case 'screens.logs': - return 'Logs'; - case 'update.available': - return 'Update Available'; - case 'update.versionAvailable': - return ({required Object version}) => 'Version ${version} is available'; - case 'update.currentVersion': - return ({required Object version}) => 'Current: ${version}'; - case 'update.skipVersion': - return 'Skip This Version'; - case 'update.viewRelease': - return 'View Release'; - case 'update.latestVersion': - return 'You are on the latest version'; - case 'update.checkFailed': - return 'Failed to check for updates'; - case 'settings.title': - return 'Settings'; - case 'settings.language': - return 'Language'; - case 'settings.theme': - return 'Theme'; - case 'settings.appearance': - return 'Appearance'; - case 'settings.videoPlayback': - return 'Video Playback'; - case 'settings.shufflePlay': - return 'Shuffle Play'; - case 'settings.advanced': - return 'Advanced'; - case 'settings.useSeasonPostersDescription': - return 'Show season poster instead of series poster for episodes'; - case 'settings.showHeroSectionDescription': - return 'Display featured content carousel on home screen'; - case 'settings.secondsLabel': - return 'Seconds'; - case 'settings.minutesLabel': - return 'Minutes'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => - 'Enter duration (${min}-${max})'; - case 'settings.systemTheme': - return 'System'; - case 'settings.systemThemeDescription': - return 'Follow system settings'; - case 'settings.lightTheme': - return 'Light'; - case 'settings.darkTheme': - return 'Dark'; - case 'settings.libraryDensity': - return 'Library Density'; - case 'settings.compact': - return 'Compact'; - case 'settings.compactDescription': - return 'Smaller cards, more items visible'; - case 'settings.normal': - return 'Normal'; - case 'settings.normalDescription': - return 'Default size'; - case 'settings.comfortable': - return 'Comfortable'; - case 'settings.comfortableDescription': - return 'Larger cards, fewer items visible'; - case 'settings.viewMode': - return 'View Mode'; - case 'settings.gridView': - return 'Grid'; - case 'settings.gridViewDescription': - return 'Display items in a grid layout'; - case 'settings.listView': - return 'List'; - case 'settings.listViewDescription': - return 'Display items in a list layout'; - case 'settings.useSeasonPosters': - return 'Use Season Posters'; - case 'settings.showHeroSection': - return 'Show Hero Section'; - case 'settings.hardwareDecoding': - return 'Hardware Decoding'; - case 'settings.hardwareDecodingDescription': - return 'Use hardware acceleration when available'; - case 'settings.bufferSize': - return 'Buffer Size'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return 'Subtitle Styling'; - case 'settings.subtitleStylingDescription': - return 'Customize subtitle appearance'; - case 'settings.smallSkipDuration': - return 'Small Skip Duration'; - case 'settings.largeSkipDuration': - return 'Large Skip Duration'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} seconds'; - case 'settings.defaultSleepTimer': - return 'Default Sleep Timer'; - case 'settings.minutesUnit': - return ({required Object minutes}) => '${minutes} minutes'; - case 'settings.rememberTrackSelections': - return 'Remember track selections per show/movie'; - case 'settings.rememberTrackSelectionsDescription': - return 'Automatically save audio and subtitle language preferences when you change tracks during playback'; - case 'settings.unwatchedOnly': - return 'Unwatched Only'; - case 'settings.unwatchedOnlyDescription': - return 'Only include unwatched episodes in shuffle queue'; - case 'settings.shuffleOrderNavigation': - return 'Shuffle Order Navigation'; - case 'settings.shuffleOrderNavigationDescription': - return 'Next/previous buttons follow shuffled order'; - case 'settings.loopShuffleQueue': - return 'Loop Shuffle Queue'; - case 'settings.loopShuffleQueueDescription': - return 'Restart queue when reaching the end'; - case 'settings.videoPlayerControls': - return 'Video Player Controls'; - case 'settings.keyboardShortcuts': - return 'Keyboard Shortcuts'; - case 'settings.keyboardShortcutsDescription': - return 'Customize keyboard shortcuts'; - case 'settings.debugLogging': - return 'Debug Logging'; - case 'settings.debugLoggingDescription': - return 'Enable detailed logging for troubleshooting'; - case 'settings.viewLogs': - return 'View Logs'; - case 'settings.viewLogsDescription': - return 'View application logs'; - case 'settings.clearCache': - return 'Clear Cache'; - case 'settings.clearCacheDescription': - return 'This will clear all cached images and data. The app may take longer to load content after clearing the cache.'; - case 'settings.clearCacheSuccess': - return 'Cache cleared successfully'; - case 'settings.resetSettings': - return 'Reset Settings'; - case 'settings.resetSettingsDescription': - return 'This will reset all settings to their default values. This action cannot be undone.'; - case 'settings.resetSettingsSuccess': - return 'Settings reset successfully'; - case 'settings.shortcutsReset': - return 'Shortcuts reset to defaults'; - case 'settings.about': - return 'About'; - case 'settings.aboutDescription': - return 'App information and licenses'; - case 'settings.updates': - return 'Updates'; - case 'settings.updateAvailable': - return 'Update Available'; - case 'settings.checkForUpdates': - return 'Check for Updates'; - case 'settings.validationErrorEnterNumber': - return 'Please enter a valid number'; - case 'settings.validationErrorDuration': - return ({ - required Object min, - required Object max, - required Object unit, - }) => 'Duration must be between ${min} and ${max} ${unit}'; - case 'settings.shortcutAlreadyAssigned': - return ({required Object action}) => - 'Shortcut already assigned to ${action}'; - case 'settings.shortcutUpdated': - return ({required Object action}) => 'Shortcut updated for ${action}'; - case 'search.hint': - return 'Search movies, shows, music...'; - case 'search.tryDifferentTerm': - return 'Try a different search term'; - case 'search.searchYourMedia': - return 'Search your media'; - case 'search.enterTitleActorOrKeyword': - return 'Enter a title, actor, or keyword'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => - 'Set Shortcut for ${actionName}'; - case 'hotkeys.clearShortcut': - return 'Clear shortcut'; - case 'pinEntry.enterPin': - return 'Enter PIN'; - case 'pinEntry.showPin': - return 'Show PIN'; - case 'pinEntry.hidePin': - return 'Hide PIN'; - case 'fileInfo.title': - return 'File Info'; - case 'fileInfo.video': - return 'Video'; - case 'fileInfo.audio': - return 'Audio'; - case 'fileInfo.file': - return 'File'; - case 'fileInfo.advanced': - return 'Advanced'; - case 'fileInfo.codec': - return 'Codec'; - case 'fileInfo.resolution': - return 'Resolution'; - case 'fileInfo.bitrate': - return 'Bitrate'; - case 'fileInfo.frameRate': - return 'Frame Rate'; - case 'fileInfo.aspectRatio': - return 'Aspect Ratio'; - case 'fileInfo.profile': - return 'Profile'; - case 'fileInfo.bitDepth': - return 'Bit Depth'; - case 'fileInfo.colorSpace': - return 'Color Space'; - case 'fileInfo.colorRange': - return 'Color Range'; - case 'fileInfo.colorPrimaries': - return 'Color Primaries'; - case 'fileInfo.chromaSubsampling': - return 'Chroma Subsampling'; - case 'fileInfo.channels': - return 'Channels'; - case 'fileInfo.path': - return 'Path'; - case 'fileInfo.size': - return 'Size'; - case 'fileInfo.container': - return 'Container'; - case 'fileInfo.duration': - return 'Duration'; - case 'fileInfo.optimizedForStreaming': - return 'Optimized for Streaming'; - case 'fileInfo.has64bitOffsets': - return '64-bit Offsets'; - case 'mediaMenu.markAsWatched': - return 'Mark as Watched'; - case 'mediaMenu.markAsUnwatched': - return 'Mark as Unwatched'; - case 'mediaMenu.removeFromContinueWatching': - return 'Remove from Continue Watching'; - case 'mediaMenu.goToSeries': - return 'Go to series'; - case 'mediaMenu.goToSeason': - return 'Go to season'; - case 'mediaMenu.shufflePlay': - return 'Shuffle Play'; - case 'mediaMenu.fileInfo': - return 'File Info'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, movie'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, TV show'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => - '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return 'watched'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '${percent} percent watched'; - case 'accessibility.mediaCardUnwatched': - return 'unwatched'; - case 'accessibility.tapToPlay': - return 'Tap to play'; - case 'tooltips.shufflePlay': - return 'Shuffle play'; - case 'tooltips.markAsWatched': - return 'Mark as watched'; - case 'tooltips.markAsUnwatched': - return 'Mark as unwatched'; - case 'videoControls.audioLabel': - return 'Audio'; - case 'videoControls.subtitlesLabel': - return 'Subtitles'; - case 'videoControls.resetToZero': - return 'Reset to 0ms'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => - '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => - '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} plays later'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} plays earlier'; - case 'videoControls.noOffset': - return 'No offset'; - case 'videoControls.letterbox': - return 'Letterbox'; - case 'videoControls.fillScreen': - return 'Fill screen'; - case 'videoControls.stretch': - return 'Stretch'; - case 'videoControls.lockRotation': - return 'Lock rotation'; - case 'videoControls.unlockRotation': - return 'Unlock rotation'; - case 'videoControls.sleepTimer': - return 'Sleep Timer'; - case 'videoControls.timerActive': - return 'Timer Active'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => - 'Playback will pause in ${duration}'; - case 'videoControls.sleepTimerCompleted': - return 'Sleep timer completed - playback paused'; - case 'videoControls.playButton': - return 'Play'; - case 'videoControls.pauseButton': - return 'Pause'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => - 'Seek backward ${seconds} seconds'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => 'Seek forward ${seconds} seconds'; - case 'videoControls.previousButton': - return 'Previous episode'; - case 'videoControls.nextButton': - return 'Next episode'; - case 'videoControls.previousChapterButton': - return 'Previous chapter'; - case 'videoControls.nextChapterButton': - return 'Next chapter'; - case 'videoControls.volumeButton': - return 'Volume'; - case 'videoControls.muteButton': - return 'Mute'; - case 'videoControls.unmuteButton': - return 'Unmute'; - case 'videoControls.settingsButton': - return 'Video settings'; - case 'videoControls.audioTrackButton': - return 'Audio tracks'; - case 'videoControls.subtitlesButton': - return 'Subtitles'; - case 'videoControls.chaptersButton': - return 'Chapters'; - case 'videoControls.versionsButton': - return 'Video versions'; - case 'videoControls.aspectRatioButton': - return 'Aspect ratio'; - case 'videoControls.fullscreenButton': - return 'Enter fullscreen'; - case 'videoControls.exitFullscreenButton': - return 'Exit fullscreen'; - case 'videoControls.rotationLockButton': - return 'Rotation lock'; - case 'videoControls.timelineSlider': - return 'Video timeline'; - case 'videoControls.volumeSlider': - return 'Volume level'; - case 'videoControls.backButton': - return 'Back'; - case 'userStatus.admin': - return 'Admin'; - case 'userStatus.restricted': - return 'Restricted'; - case 'userStatus.protected': - return 'Protected'; - case 'userStatus.current': - return 'CURRENT'; - case 'messages.markedAsWatched': - return 'Marked as watched'; - case 'messages.markedAsUnwatched': - return 'Marked as unwatched'; - case 'messages.removedFromContinueWatching': - return 'Removed from Continue Watching'; - case 'messages.errorLoading': - return ({required Object error}) => 'Error: ${error}'; - case 'messages.fileInfoNotAvailable': - return 'File information not available'; - case 'messages.errorLoadingFileInfo': - return ({required Object error}) => 'Error loading file info: ${error}'; - case 'messages.errorLoadingSeries': - return 'Error loading series'; - case 'messages.errorLoadingSeason': - return 'Error loading season'; - case 'messages.musicNotSupported': - return 'Music playback is not yet supported'; - case 'messages.logsCleared': - return 'Logs cleared'; - case 'messages.logsCopied': - return 'Logs copied to clipboard'; - case 'messages.noLogsAvailable': - return 'No logs available'; - case 'messages.libraryScanning': - return ({required Object title}) => 'Scanning "${title}"...'; - case 'messages.libraryScanStarted': - return ({required Object title}) => - 'Library scan started for "${title}"'; - case 'messages.libraryScanFailed': - return ({required Object error}) => 'Failed to scan library: ${error}'; - case 'messages.metadataRefreshing': - return ({required Object title}) => - 'Refreshing metadata for "${title}"...'; - case 'messages.metadataRefreshStarted': - return ({required Object title}) => - 'Metadata refresh started for "${title}"'; - case 'messages.metadataRefreshFailed': - return ({required Object error}) => - 'Failed to refresh metadata: ${error}'; - case 'messages.noPlexToken': - return 'No Plex token found. Please login again.'; - case 'messages.logoutConfirm': - return 'Are you sure you want to logout?'; - case 'messages.noSeasonsFound': - return 'No seasons found'; - case 'messages.noEpisodesFound': - return 'No episodes found in first season'; - case 'messages.noEpisodesFoundGeneral': - return 'No episodes found'; - case 'messages.noResultsFound': - return 'No results found'; - case 'messages.sleepTimerSet': - return ({required Object label}) => 'Sleep timer set for ${label}'; - case 'messages.failedToSwitchProfile': - return ({required Object displayName}) => - 'Failed to switch to ${displayName}'; - case 'messages.noItemsAvailable': - return 'No items available'; - case 'messages.failedToCreatePlayQueue': - return 'Failed to create play queue'; - case 'messages.failedToCreatePlayQueueNoItems': - return 'Failed to create play queue - no items'; - case 'messages.failedPlayback': - return ({required Object action, required Object error}) => - 'Failed to ${action}: ${error}'; - case 'profile.noUsersAvailable': - return 'No users available'; - case 'subtitlingStyling.stylingOptions': - return 'Styling Options'; - case 'subtitlingStyling.fontSize': - return 'Font Size'; - case 'subtitlingStyling.textColor': - return 'Text Color'; - case 'subtitlingStyling.borderSize': - return 'Border Size'; - case 'subtitlingStyling.borderColor': - return 'Border Color'; - case 'subtitlingStyling.backgroundOpacity': - return 'Background Opacity'; - case 'subtitlingStyling.backgroundColor': - return 'Background Color'; - case 'dialog.confirmAction': - return 'Confirm Action'; - case 'dialog.areYouSure': - return 'Are you sure you want to perform this action?'; - case 'dialog.cancel': - return 'Cancel'; - case 'dialog.playNow': - return 'Play Now'; - case 'discover.title': - return 'Discover'; - case 'discover.switchProfile': - return 'Switch Profile'; - case 'discover.logout': - return 'Logout'; - case 'discover.noContentAvailable': - return 'No content available'; - case 'discover.addMediaToLibraries': - return 'Add some media to your libraries'; - case 'discover.continueWatching': - return 'Continue Watching'; - case 'discover.recentlyAdded': - return 'Recently Added'; - case 'discover.play': - return 'Play'; - case 'discover.resume': - return 'Resume'; - case 'discover.playEpisode': - return ({required Object season, required Object episode}) => - 'Play S${season}, E${episode}'; - case 'discover.resumeEpisode': - return ({required Object season, required Object episode}) => - 'Resume S${season}, E${episode}'; - case 'discover.pause': - return 'Pause'; - case 'discover.overview': - return 'Overview'; - case 'discover.cast': - return 'Cast'; - case 'discover.seasons': - return 'Seasons'; - case 'discover.studio': - return 'Studio'; - case 'discover.rating': - return 'Rating'; - case 'discover.watched': - return 'Watched'; - case 'discover.episodeCount': - return ({required Object count}) => '${count} episodes'; - case 'discover.watchedProgress': - return ({required Object watched, required Object total}) => - '${watched}/${total} watched'; - case 'discover.movie': - return 'Movie'; - case 'discover.tvShow': - return 'TV Show'; - case 'discover.minutesLeft': - return ({required Object minutes}) => '${minutes} min left'; - case 'errors.searchFailed': - return ({required Object error}) => 'Search failed: ${error}'; - case 'errors.connectionTimeout': - return ({required Object context}) => - 'Connection timeout while loading ${context}'; - case 'errors.connectionFailed': - return 'Unable to connect to Plex server'; - case 'errors.failedToLoad': - return ({required Object context, required Object error}) => - 'Failed to load ${context}: ${error}'; - case 'errors.noClientAvailable': - return 'No client available'; - case 'errors.authenticationFailed': - return ({required Object error}) => 'Authentication failed: ${error}'; - case 'errors.couldNotLaunchUrl': - return 'Could not launch auth URL'; - case 'errors.pleaseEnterToken': - return 'Please enter a token'; - case 'errors.invalidToken': - return 'Invalid token'; - case 'errors.failedToVerifyToken': - return ({required Object error}) => 'Failed to verify token: ${error}'; - case 'errors.failedToSwitchProfile': - return ({required Object displayName}) => - 'Failed to switch to ${displayName}'; - case 'errors.connectionFailedGeneric': - return 'Connection failed'; - case 'libraries.title': - return 'Libraries'; - case 'libraries.scanLibraryFiles': - return 'Scan Library Files'; - case 'libraries.scanLibrary': - return 'Scan Library'; - case 'libraries.analyze': - return 'Analyze'; - case 'libraries.analyzeLibrary': - return 'Analyze Library'; - case 'libraries.refreshMetadata': - return 'Refresh Metadata'; - case 'libraries.emptyTrash': - return 'Empty Trash'; - case 'libraries.emptyingTrash': - return ({required Object title}) => 'Emptying trash for "${title}"...'; - case 'libraries.trashEmptied': - return ({required Object title}) => 'Trash emptied for "${title}"'; - case 'libraries.failedToEmptyTrash': - return ({required Object error}) => 'Failed to empty trash: ${error}'; - case 'libraries.analyzing': - return ({required Object title}) => 'Analyzing "${title}"...'; - case 'libraries.analysisStarted': - return ({required Object title}) => 'Analysis started for "${title}"'; - case 'libraries.failedToAnalyze': - return ({required Object error}) => - 'Failed to analyze library: ${error}'; - case 'libraries.noLibrariesFound': - return 'No libraries found'; - case 'libraries.thisLibraryIsEmpty': - return 'This library is empty'; - case 'libraries.all': - return 'All'; - case 'libraries.clearAll': - return 'Clear All'; - case 'libraries.scanLibraryConfirm': - return ({required Object title}) => - 'Are you sure you want to scan "${title}"?'; - case 'libraries.analyzeLibraryConfirm': - return ({required Object title}) => - 'Are you sure you want to analyze "${title}"?'; - case 'libraries.refreshMetadataConfirm': - return ({required Object title}) => - 'Are you sure you want to refresh metadata for "${title}"?'; - case 'libraries.emptyTrashConfirm': - return ({required Object title}) => - 'Are you sure you want to empty trash for "${title}"?'; - case 'libraries.manageLibraries': - return 'Manage Libraries'; - case 'libraries.sort': - return 'Sort'; - case 'libraries.sortBy': - return 'Sort By'; - case 'libraries.filters': - return 'Filters'; - case 'libraries.loadingLibraryWithCount': - return ({required Object count}) => - 'Loading library... (${count} items loaded)'; - case 'libraries.confirmActionMessage': - return 'Are you sure you want to perform this action?'; - case 'libraries.showLibrary': - return 'Show library'; - case 'libraries.hideLibrary': - return 'Hide library'; - case 'libraries.libraryOptions': - return 'Library options'; - case 'libraries.content': - return 'library content'; - case 'libraries.selectLibrary': - return 'Select library'; - case 'libraries.filtersWithCount': - return ({required Object count}) => 'Filters (${count})'; - case 'libraries.noRecommendations': - return 'No recommendations available'; - case 'libraries.noCollections': - return 'No collections in this library'; - case 'libraries.noFoldersFound': - return 'No folders found'; - case 'libraries.folders': - return 'folders'; - case 'libraries.tabs.recommended': - return 'Recommended'; - case 'libraries.tabs.browse': - return 'Browse'; - case 'libraries.tabs.collections': - return 'Collections'; - case 'libraries.tabs.playlists': - return 'Playlists'; - case 'libraries.groupings.all': - return 'All'; - case 'libraries.groupings.movies': - return 'Movies'; - case 'libraries.groupings.shows': - return 'TV Shows'; - case 'libraries.groupings.seasons': - return 'Seasons'; - case 'libraries.groupings.episodes': - return 'Episodes'; - case 'libraries.groupings.folders': - return 'Folders'; - case 'about.title': - return 'About'; - case 'about.openSourceLicenses': - return 'Open Source Licenses'; - case 'about.versionLabel': - return ({required Object version}) => 'Version ${version}'; - case 'about.appDescription': - return 'A beautiful Plex client for Flutter'; - case 'about.viewLicensesDescription': - return 'View licenses of third-party libraries'; - case 'serverSelection.connectingToServer': - return 'Connecting to server...'; - case 'serverSelection.connectingToAllServers': - return 'Connecting to all servers...'; - case 'serverSelection.connectToAllServers': - return 'Connect to All Servers'; - case 'serverSelection.allServerConnectionsFailed': - return 'Failed to connect to any servers. Please check your network and try again.'; - case 'serverSelection.foundServers': - return ({required Object count}) => 'Found ${count} server(s)'; - case 'serverSelection.orSelectIndividually': - return 'Or select a server individually:'; - case 'serverSelection.serverDebugCopied': - return 'Server debug data copied to clipboard'; - case 'serverSelection.copyDebugData': - return 'Copy Debug Data'; - case 'serverSelection.noServersFound': - return 'No servers found'; - case 'serverSelection.malformedServerData': - return ({required Object count}) => - 'Found ${count} server(s) with malformed data. No valid servers available.'; - case 'serverSelection.incompleteServerInfo': - return 'Some servers have incomplete information and were skipped. Please check your Plex.tv account.'; - case 'serverSelection.incompleteConnectionInfo': - return 'Server connection information is incomplete. Please try again.'; - case 'serverSelection.malformedServerInfo': - return ({required Object message}) => - 'Server information is malformed: ${message}'; - case 'serverSelection.networkConnectionFailed': - return 'Network connection failed. Please check your internet connection and try again.'; - case 'serverSelection.authenticationFailed': - return 'Authentication failed. Please sign in again.'; - case 'serverSelection.plexServiceUnavailable': - return 'Plex service unavailable. Please try again later.'; - case 'serverSelection.failedToLoadServers': - return ({required Object error}) => 'Failed to load servers: ${error}'; - case 'hubDetail.title': - return 'Title'; - case 'hubDetail.releaseYear': - return 'Release Year'; - case 'hubDetail.dateAdded': - return 'Date Added'; - case 'hubDetail.rating': - return 'Rating'; - case 'hubDetail.noItemsFound': - return 'No items found'; - case 'logs.title': - return 'Logs'; - case 'logs.clearLogs': - return 'Clear Logs'; - case 'logs.copyLogs': - return 'Copy Logs'; - case 'logs.exportLogs': - return 'Export Logs'; - case 'logs.noLogsToShow': - return 'No logs to show'; - case 'logs.error': - return 'Error:'; - case 'logs.stackTrace': - return 'Stack Trace:'; - case 'licenses.relatedPackages': - return 'Related Packages'; - case 'licenses.license': - return 'License'; - case 'licenses.licenseNumber': - return ({required Object number}) => 'License ${number}'; - case 'licenses.licensesCount': - return ({required Object count}) => '${count} licenses'; - case 'navigation.home': - return 'Home'; - case 'navigation.search': - return 'Search'; - case 'navigation.libraries': - return 'Libraries'; - case 'navigation.settings': - return 'Settings'; - case 'collections.title': - return 'Collections'; - case 'collections.collection': - return 'Collection'; - case 'collections.empty': - return 'Collection is empty'; - case 'collections.noItems': - return 'No items in this collection'; - case 'collections.unknownLibrarySection': - return 'Cannot delete: Unknown library section'; - case 'collections.deleteCollection': - return 'Delete Collection'; - case 'collections.deleteConfirm': - return ({required Object title}) => - 'Are you sure you want to delete "${title}"? This action cannot be undone.'; - case 'collections.deleted': - return 'Collection deleted'; - case 'collections.deleteFailed': - return 'Failed to delete collection'; - case 'collections.deleteFailedWithError': - return ({required Object error}) => - 'Failed to delete collection: ${error}'; - case 'collections.failedToLoadItems': - return ({required Object error}) => - 'Failed to load collection items: ${error}'; - case 'collections.addTo': - return 'Add to collection'; - case 'collections.selectCollection': - return 'Select Collection'; - case 'collections.createNewCollection': - return 'Create New Collection'; - case 'collections.collectionName': - return 'Collection Name'; - case 'collections.enterCollectionName': - return 'Enter collection name'; - case 'collections.addedToCollection': - return 'Added to collection'; - case 'collections.errorAddingToCollection': - return 'Failed to add to collection'; - case 'collections.created': - return 'Collection created'; - case 'collections.removeFromCollection': - return 'Remove from collection'; - case 'collections.removeFromCollectionConfirm': - return ({required Object title}) => - 'Remove "${title}" from this collection?'; - case 'collections.removedFromCollection': - return 'Removed from collection'; - case 'collections.removeFromCollectionFailed': - return 'Failed to remove from collection'; - case 'collections.removeFromCollectionError': - return ({required Object error}) => - 'Error removing from collection: ${error}'; - case 'playlists.title': - return 'Playlists'; - case 'playlists.playlist': - return 'Playlist'; - case 'playlists.noPlaylists': - return 'No playlists found'; - case 'playlists.create': - return 'Create Playlist'; - case 'playlists.newPlaylist': - return 'New Playlist'; - case 'playlists.playlistName': - return 'Playlist Name'; - case 'playlists.enterPlaylistName': - return 'Enter playlist name'; - case 'playlists.edit': - return 'Edit Playlist'; - case 'playlists.delete': - return 'Delete Playlist'; - case 'playlists.addTo': - return 'Add to Playlist'; - case 'playlists.addItems': - return 'Add Items'; - case 'playlists.removeItem': - return 'Remove from Playlist'; - case 'playlists.clearPlaylist': - return 'Clear Playlist'; - case 'playlists.playAll': - return 'Play All'; - case 'playlists.shuffle': - return 'Shuffle'; - case 'playlists.smartPlaylist': - return 'Smart Playlist'; - case 'playlists.regularPlaylist': - return 'Regular Playlist'; - case 'playlists.itemCount': - return ({required Object count}) => '${count} items'; - case 'playlists.oneItem': - return '1 item'; - case 'playlists.emptyPlaylist': - return 'This playlist is empty'; - case 'playlists.deleteConfirm': - return 'Delete Playlist?'; - case 'playlists.deleteMessage': - return ({required Object name}) => - 'Are you sure you want to delete "${name}"?'; - case 'playlists.created': - return 'Playlist created'; - case 'playlists.updated': - return 'Playlist updated'; - case 'playlists.deleted': - return 'Playlist deleted'; - case 'playlists.itemAdded': - return 'Added to playlist'; - case 'playlists.itemRemoved': - return 'Removed from playlist'; - case 'playlists.selectPlaylist': - return 'Select Playlist'; - case 'playlists.createNewPlaylist': - return 'Create New Playlist'; - case 'playlists.errorCreating': - return 'Failed to create playlist'; - case 'playlists.errorDeleting': - return 'Failed to delete playlist'; - case 'playlists.errorLoading': - return 'Failed to load playlists'; - case 'playlists.errorAdding': - return 'Failed to add to playlist'; - case 'playlists.errorReordering': - return 'Failed to reorder playlist item'; - case 'playlists.errorRemoving': - return 'Failed to remove from playlist'; - default: - return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': return 'Plezy'; + case 'app.loading': return 'Loading...'; + case 'auth.signInWithPlex': return 'Sign in with Plex'; + case 'auth.showQRCode': return 'Show QR Code'; + case 'auth.cancel': return 'Cancel'; + case 'auth.authenticate': return 'Authenticate'; + case 'auth.retry': return 'Retry'; + case 'auth.debugEnterToken': return 'Debug: Enter Plex Token'; + case 'auth.plexTokenLabel': return 'Plex Auth Token'; + case 'auth.plexTokenHint': return 'Enter your Plex.tv token'; + case 'auth.authenticationTimeout': return 'Authentication timed out. Please try again.'; + case 'auth.scanQRCodeInstruction': return 'Scan this QR code with a device logged into Plex to authenticate.'; + case 'auth.waitingForAuth': return 'Waiting for authentication...\nPlease complete sign-in in your browser.'; + case 'common.cancel': return 'Cancel'; + case 'common.save': return 'Save'; + case 'common.close': return 'Close'; + case 'common.clear': return 'Clear'; + case 'common.reset': return 'Reset'; + case 'common.later': return 'Later'; + case 'common.submit': return 'Submit'; + case 'common.confirm': return 'Confirm'; + case 'common.retry': return 'Retry'; + case 'common.playNow': return 'Play Now'; + case 'common.logout': return 'Logout'; + case 'common.online': return 'Online'; + case 'common.offline': return 'Offline'; + case 'common.owned': return 'Owned'; + case 'common.shared': return 'Shared'; + case 'common.current': return 'CURRENT'; + case 'common.unknown': return 'Unknown'; + case 'common.refresh': return 'Refresh'; + case 'common.yes': return 'Yes'; + case 'common.no': return 'No'; + case 'common.server': return 'Server'; + case 'common.delete': return 'Delete'; + case 'common.shuffle': return 'Shuffle'; + case 'common.addTo': return 'Add to...'; + case 'screens.licenses': return 'Licenses'; + case 'screens.switchProfile': return 'Switch Profile'; + case 'screens.subtitleStyling': return 'Subtitle Styling'; + case 'screens.search': return 'Search'; + case 'screens.logs': return 'Logs'; + case 'update.available': return 'Update Available'; + case 'update.versionAvailable': return ({required Object version}) => 'Version ${version} is available'; + case 'update.currentVersion': return ({required Object version}) => 'Current: ${version}'; + case 'update.skipVersion': return 'Skip This Version'; + case 'update.viewRelease': return 'View Release'; + case 'update.latestVersion': return 'You are on the latest version'; + case 'update.checkFailed': return 'Failed to check for updates'; + case 'settings.title': return 'Settings'; + case 'settings.language': return 'Language'; + case 'settings.theme': return 'Theme'; + case 'settings.appearance': return 'Appearance'; + case 'settings.videoPlayback': return 'Video Playback'; + case 'settings.shufflePlay': return 'Shuffle Play'; + case 'settings.advanced': return 'Advanced'; + case 'settings.useSeasonPostersDescription': return 'Show season poster instead of series poster for episodes'; + case 'settings.showHeroSectionDescription': return 'Display featured content carousel on home screen'; + case 'settings.secondsLabel': return 'Seconds'; + case 'settings.minutesLabel': return 'Minutes'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => 'Enter duration (${min}-${max})'; + case 'settings.systemTheme': return 'System'; + case 'settings.systemThemeDescription': return 'Follow system settings'; + case 'settings.lightTheme': return 'Light'; + case 'settings.darkTheme': return 'Dark'; + case 'settings.libraryDensity': return 'Library Density'; + case 'settings.compact': return 'Compact'; + case 'settings.compactDescription': return 'Smaller cards, more items visible'; + case 'settings.normal': return 'Normal'; + case 'settings.normalDescription': return 'Default size'; + case 'settings.comfortable': return 'Comfortable'; + case 'settings.comfortableDescription': return 'Larger cards, fewer items visible'; + case 'settings.viewMode': return 'View Mode'; + case 'settings.gridView': return 'Grid'; + case 'settings.gridViewDescription': return 'Display items in a grid layout'; + case 'settings.listView': return 'List'; + case 'settings.listViewDescription': return 'Display items in a list layout'; + case 'settings.useSeasonPosters': return 'Use Season Posters'; + case 'settings.showHeroSection': return 'Show Hero Section'; + case 'settings.hardwareDecoding': return 'Hardware Decoding'; + case 'settings.hardwareDecodingDescription': return 'Use hardware acceleration when available'; + case 'settings.bufferSize': return 'Buffer Size'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return 'Subtitle Styling'; + case 'settings.subtitleStylingDescription': return 'Customize subtitle appearance'; + case 'settings.smallSkipDuration': return 'Small Skip Duration'; + case 'settings.largeSkipDuration': return 'Large Skip Duration'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} seconds'; + case 'settings.defaultSleepTimer': return 'Default Sleep Timer'; + case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} minutes'; + case 'settings.rememberTrackSelections': return 'Remember track selections per show/movie'; + case 'settings.rememberTrackSelectionsDescription': return 'Automatically save audio and subtitle language preferences when you change tracks during playback'; + case 'settings.unwatchedOnly': return 'Unwatched Only'; + case 'settings.unwatchedOnlyDescription': return 'Only include unwatched episodes in shuffle queue'; + case 'settings.shuffleOrderNavigation': return 'Shuffle Order Navigation'; + case 'settings.shuffleOrderNavigationDescription': return 'Next/previous buttons follow shuffled order'; + case 'settings.loopShuffleQueue': return 'Loop Shuffle Queue'; + case 'settings.loopShuffleQueueDescription': return 'Restart queue when reaching the end'; + case 'settings.videoPlayerControls': return 'Video Player Controls'; + case 'settings.keyboardShortcuts': return 'Keyboard Shortcuts'; + case 'settings.keyboardShortcutsDescription': return 'Customize keyboard shortcuts'; + case 'settings.debugLogging': return 'Debug Logging'; + case 'settings.debugLoggingDescription': return 'Enable detailed logging for troubleshooting'; + case 'settings.viewLogs': return 'View Logs'; + case 'settings.viewLogsDescription': return 'View application logs'; + case 'settings.clearCache': return 'Clear Cache'; + case 'settings.clearCacheDescription': return 'This will clear all cached images and data. The app may take longer to load content after clearing the cache.'; + case 'settings.clearCacheSuccess': return 'Cache cleared successfully'; + case 'settings.resetSettings': return 'Reset Settings'; + case 'settings.resetSettingsDescription': return 'This will reset all settings to their default values. This action cannot be undone.'; + case 'settings.resetSettingsSuccess': return 'Settings reset successfully'; + case 'settings.shortcutsReset': return 'Shortcuts reset to defaults'; + case 'settings.about': return 'About'; + case 'settings.aboutDescription': return 'App information and licenses'; + case 'settings.updates': return 'Updates'; + case 'settings.updateAvailable': return 'Update Available'; + case 'settings.checkForUpdates': return 'Check for Updates'; + case 'settings.validationErrorEnterNumber': return 'Please enter a valid number'; + case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => 'Duration must be between ${min} and ${max} ${unit}'; + case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => 'Shortcut already assigned to ${action}'; + case 'settings.shortcutUpdated': return ({required Object action}) => 'Shortcut updated for ${action}'; + case 'settings.autoSkip': return 'Auto Skip'; + case 'settings.autoSkipIntro': return 'Auto Skip Intro'; + case 'settings.autoSkipIntroDescription': return 'Automatically skip intro markers after a few seconds'; + case 'settings.autoSkipCredits': return 'Auto Skip Credits'; + case 'settings.autoSkipCreditsDescription': return 'Automatically skip credits and play next episode'; + case 'settings.autoSkipDelay': return 'Auto Skip Delay'; + case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => 'Wait ${seconds} seconds before auto-skipping'; + case 'search.hint': return 'Search movies, shows, music...'; + case 'search.tryDifferentTerm': return 'Try a different search term'; + case 'search.searchYourMedia': return 'Search your media'; + case 'search.enterTitleActorOrKeyword': return 'Enter a title, actor, or keyword'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Set Shortcut for ${actionName}'; + case 'hotkeys.clearShortcut': return 'Clear shortcut'; + case 'pinEntry.enterPin': return 'Enter PIN'; + case 'pinEntry.showPin': return 'Show PIN'; + case 'pinEntry.hidePin': return 'Hide PIN'; + case 'fileInfo.title': return 'File Info'; + case 'fileInfo.video': return 'Video'; + case 'fileInfo.audio': return 'Audio'; + case 'fileInfo.file': return 'File'; + case 'fileInfo.advanced': return 'Advanced'; + case 'fileInfo.codec': return 'Codec'; + case 'fileInfo.resolution': return 'Resolution'; + case 'fileInfo.bitrate': return 'Bitrate'; + case 'fileInfo.frameRate': return 'Frame Rate'; + case 'fileInfo.aspectRatio': return 'Aspect Ratio'; + case 'fileInfo.profile': return 'Profile'; + case 'fileInfo.bitDepth': return 'Bit Depth'; + case 'fileInfo.colorSpace': return 'Color Space'; + case 'fileInfo.colorRange': return 'Color Range'; + case 'fileInfo.colorPrimaries': return 'Color Primaries'; + case 'fileInfo.chromaSubsampling': return 'Chroma Subsampling'; + case 'fileInfo.channels': return 'Channels'; + case 'fileInfo.path': return 'Path'; + case 'fileInfo.size': return 'Size'; + case 'fileInfo.container': return 'Container'; + case 'fileInfo.duration': return 'Duration'; + case 'fileInfo.optimizedForStreaming': return 'Optimized for Streaming'; + case 'fileInfo.has64bitOffsets': return '64-bit Offsets'; + case 'mediaMenu.markAsWatched': return 'Mark as Watched'; + case 'mediaMenu.markAsUnwatched': return 'Mark as Unwatched'; + case 'mediaMenu.removeFromContinueWatching': return 'Remove from Continue Watching'; + case 'mediaMenu.goToSeries': return 'Go to series'; + case 'mediaMenu.goToSeason': return 'Go to season'; + case 'mediaMenu.shufflePlay': return 'Shuffle Play'; + case 'mediaMenu.fileInfo': return 'File Info'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, movie'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, TV show'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return 'watched'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} percent watched'; + case 'accessibility.mediaCardUnwatched': return 'unwatched'; + case 'accessibility.tapToPlay': return 'Tap to play'; + case 'tooltips.shufflePlay': return 'Shuffle play'; + case 'tooltips.markAsWatched': return 'Mark as watched'; + case 'tooltips.markAsUnwatched': return 'Mark as unwatched'; + case 'videoControls.audioLabel': return 'Audio'; + case 'videoControls.subtitlesLabel': return 'Subtitles'; + case 'videoControls.resetToZero': return 'Reset to 0ms'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} plays later'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} plays earlier'; + case 'videoControls.noOffset': return 'No offset'; + case 'videoControls.letterbox': return 'Letterbox'; + case 'videoControls.fillScreen': return 'Fill screen'; + case 'videoControls.stretch': return 'Stretch'; + case 'videoControls.lockRotation': return 'Lock rotation'; + case 'videoControls.unlockRotation': return 'Unlock rotation'; + case 'videoControls.sleepTimer': return 'Sleep Timer'; + case 'videoControls.timerActive': return 'Timer Active'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Playback will pause in ${duration}'; + case 'videoControls.sleepTimerCompleted': return 'Sleep timer completed - playback paused'; + case 'videoControls.playButton': return 'Play'; + case 'videoControls.pauseButton': return 'Pause'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Seek backward ${seconds} seconds'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Seek forward ${seconds} seconds'; + case 'videoControls.previousButton': return 'Previous episode'; + case 'videoControls.nextButton': return 'Next episode'; + case 'videoControls.previousChapterButton': return 'Previous chapter'; + case 'videoControls.nextChapterButton': return 'Next chapter'; + case 'videoControls.volumeButton': return 'Volume'; + case 'videoControls.muteButton': return 'Mute'; + case 'videoControls.unmuteButton': return 'Unmute'; + case 'videoControls.settingsButton': return 'Video settings'; + case 'videoControls.audioTrackButton': return 'Audio tracks'; + case 'videoControls.subtitlesButton': return 'Subtitles'; + case 'videoControls.chaptersButton': return 'Chapters'; + case 'videoControls.versionsButton': return 'Video versions'; + case 'videoControls.aspectRatioButton': return 'Aspect ratio'; + case 'videoControls.fullscreenButton': return 'Enter fullscreen'; + case 'videoControls.exitFullscreenButton': return 'Exit fullscreen'; + case 'videoControls.rotationLockButton': return 'Rotation lock'; + case 'videoControls.timelineSlider': return 'Video timeline'; + case 'videoControls.volumeSlider': return 'Volume level'; + case 'videoControls.backButton': return 'Back'; + case 'userStatus.admin': return 'Admin'; + case 'userStatus.restricted': return 'Restricted'; + case 'userStatus.protected': return 'Protected'; + case 'userStatus.current': return 'CURRENT'; + case 'messages.markedAsWatched': return 'Marked as watched'; + case 'messages.markedAsUnwatched': return 'Marked as unwatched'; + case 'messages.removedFromContinueWatching': return 'Removed from Continue Watching'; + case 'messages.errorLoading': return ({required Object error}) => 'Error: ${error}'; + case 'messages.fileInfoNotAvailable': return 'File information not available'; + case 'messages.errorLoadingFileInfo': return ({required Object error}) => 'Error loading file info: ${error}'; + case 'messages.errorLoadingSeries': return 'Error loading series'; + case 'messages.errorLoadingSeason': return 'Error loading season'; + case 'messages.musicNotSupported': return 'Music playback is not yet supported'; + case 'messages.logsCleared': return 'Logs cleared'; + case 'messages.logsCopied': return 'Logs copied to clipboard'; + case 'messages.noLogsAvailable': return 'No logs available'; + case 'messages.libraryScanning': return ({required Object title}) => 'Scanning "${title}"...'; + case 'messages.libraryScanStarted': return ({required Object title}) => 'Library scan started for "${title}"'; + case 'messages.libraryScanFailed': return ({required Object error}) => 'Failed to scan library: ${error}'; + case 'messages.metadataRefreshing': return ({required Object title}) => 'Refreshing metadata for "${title}"...'; + case 'messages.metadataRefreshStarted': return ({required Object title}) => 'Metadata refresh started for "${title}"'; + case 'messages.metadataRefreshFailed': return ({required Object error}) => 'Failed to refresh metadata: ${error}'; + case 'messages.noPlexToken': return 'No Plex token found. Please login again.'; + case 'messages.logoutConfirm': return 'Are you sure you want to logout?'; + case 'messages.noSeasonsFound': return 'No seasons found'; + case 'messages.noEpisodesFound': return 'No episodes found in first season'; + case 'messages.noEpisodesFoundGeneral': return 'No episodes found'; + case 'messages.noResultsFound': return 'No results found'; + case 'messages.sleepTimerSet': return ({required Object label}) => 'Sleep timer set for ${label}'; + case 'messages.failedToSwitchProfile': return ({required Object displayName}) => 'Failed to switch to ${displayName}'; + case 'messages.noItemsAvailable': return 'No items available'; + case 'messages.failedToCreatePlayQueue': return 'Failed to create play queue'; + case 'messages.failedToCreatePlayQueueNoItems': return 'Failed to create play queue - no items'; + case 'messages.failedPlayback': return ({required Object action, required Object error}) => 'Failed to ${action}: ${error}'; + case 'profile.noUsersAvailable': return 'No users available'; + case 'subtitlingStyling.stylingOptions': return 'Styling Options'; + case 'subtitlingStyling.fontSize': return 'Font Size'; + case 'subtitlingStyling.textColor': return 'Text Color'; + case 'subtitlingStyling.borderSize': return 'Border Size'; + case 'subtitlingStyling.borderColor': return 'Border Color'; + case 'subtitlingStyling.backgroundOpacity': return 'Background Opacity'; + case 'subtitlingStyling.backgroundColor': return 'Background Color'; + case 'dialog.confirmAction': return 'Confirm Action'; + case 'dialog.areYouSure': return 'Are you sure you want to perform this action?'; + case 'dialog.cancel': return 'Cancel'; + case 'dialog.playNow': return 'Play Now'; + case 'discover.title': return 'Discover'; + case 'discover.switchProfile': return 'Switch Profile'; + case 'discover.logout': return 'Logout'; + case 'discover.noContentAvailable': return 'No content available'; + case 'discover.addMediaToLibraries': return 'Add some media to your libraries'; + case 'discover.continueWatching': return 'Continue Watching'; + case 'discover.recentlyAdded': return 'Recently Added'; + case 'discover.play': return 'Play'; + case 'discover.resume': return 'Resume'; + case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'Play S${season}, E${episode}'; + case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => 'Resume S${season}, E${episode}'; + case 'discover.pause': return 'Pause'; + case 'discover.overview': return 'Overview'; + case 'discover.cast': return 'Cast'; + case 'discover.seasons': return 'Seasons'; + case 'discover.studio': return 'Studio'; + case 'discover.rating': return 'Rating'; + case 'discover.watched': return 'Watched'; + case 'discover.episodeCount': return ({required Object count}) => '${count} episodes'; + case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '${watched}/${total} watched'; + case 'discover.movie': return 'Movie'; + case 'discover.tvShow': return 'TV Show'; + case 'discover.minutesLeft': return ({required Object minutes}) => '${minutes} min left'; + case 'errors.searchFailed': return ({required Object error}) => 'Search failed: ${error}'; + case 'errors.connectionTimeout': return ({required Object context}) => 'Connection timeout while loading ${context}'; + case 'errors.connectionFailed': return 'Unable to connect to Plex server'; + case 'errors.failedToLoad': return ({required Object context, required Object error}) => 'Failed to load ${context}: ${error}'; + case 'errors.noClientAvailable': return 'No client available'; + case 'errors.authenticationFailed': return ({required Object error}) => 'Authentication failed: ${error}'; + case 'errors.couldNotLaunchUrl': return 'Could not launch auth URL'; + case 'errors.pleaseEnterToken': return 'Please enter a token'; + case 'errors.invalidToken': return 'Invalid token'; + case 'errors.failedToVerifyToken': return ({required Object error}) => 'Failed to verify token: ${error}'; + case 'errors.failedToSwitchProfile': return ({required Object displayName}) => 'Failed to switch to ${displayName}'; + case 'errors.connectionFailedGeneric': return 'Connection failed'; + case 'libraries.title': return 'Libraries'; + case 'libraries.scanLibraryFiles': return 'Scan Library Files'; + case 'libraries.scanLibrary': return 'Scan Library'; + case 'libraries.analyze': return 'Analyze'; + case 'libraries.analyzeLibrary': return 'Analyze Library'; + case 'libraries.refreshMetadata': return 'Refresh Metadata'; + case 'libraries.emptyTrash': return 'Empty Trash'; + case 'libraries.emptyingTrash': return ({required Object title}) => 'Emptying trash for "${title}"...'; + case 'libraries.trashEmptied': return ({required Object title}) => 'Trash emptied for "${title}"'; + case 'libraries.failedToEmptyTrash': return ({required Object error}) => 'Failed to empty trash: ${error}'; + case 'libraries.analyzing': return ({required Object title}) => 'Analyzing "${title}"...'; + case 'libraries.analysisStarted': return ({required Object title}) => 'Analysis started for "${title}"'; + case 'libraries.failedToAnalyze': return ({required Object error}) => 'Failed to analyze library: ${error}'; + case 'libraries.noLibrariesFound': return 'No libraries found'; + case 'libraries.thisLibraryIsEmpty': return 'This library is empty'; + case 'libraries.all': return 'All'; + case 'libraries.clearAll': return 'Clear All'; + case 'libraries.scanLibraryConfirm': return ({required Object title}) => 'Are you sure you want to scan "${title}"?'; + case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => 'Are you sure you want to analyze "${title}"?'; + case 'libraries.refreshMetadataConfirm': return ({required Object title}) => 'Are you sure you want to refresh metadata for "${title}"?'; + case 'libraries.emptyTrashConfirm': return ({required Object title}) => 'Are you sure you want to empty trash for "${title}"?'; + case 'libraries.manageLibraries': return 'Manage Libraries'; + case 'libraries.sort': return 'Sort'; + case 'libraries.sortBy': return 'Sort By'; + case 'libraries.filters': return 'Filters'; + case 'libraries.loadingLibraryWithCount': return ({required Object count}) => 'Loading library... (${count} items loaded)'; + case 'libraries.confirmActionMessage': return 'Are you sure you want to perform this action?'; + case 'libraries.showLibrary': return 'Show library'; + case 'libraries.hideLibrary': return 'Hide library'; + case 'libraries.libraryOptions': return 'Library options'; + case 'libraries.content': return 'library content'; + case 'libraries.selectLibrary': return 'Select library'; + case 'libraries.filtersWithCount': return ({required Object count}) => 'Filters (${count})'; + case 'libraries.noRecommendations': return 'No recommendations available'; + case 'libraries.noCollections': return 'No collections in this library'; + case 'libraries.noFoldersFound': return 'No folders found'; + case 'libraries.folders': return 'folders'; + case 'libraries.tabs.recommended': return 'Recommended'; + case 'libraries.tabs.browse': return 'Browse'; + case 'libraries.tabs.collections': return 'Collections'; + case 'libraries.tabs.playlists': return 'Playlists'; + case 'libraries.groupings.all': return 'All'; + case 'libraries.groupings.movies': return 'Movies'; + case 'libraries.groupings.shows': return 'TV Shows'; + case 'libraries.groupings.seasons': return 'Seasons'; + case 'libraries.groupings.episodes': return 'Episodes'; + case 'libraries.groupings.folders': return 'Folders'; + case 'about.title': return 'About'; + case 'about.openSourceLicenses': return 'Open Source Licenses'; + case 'about.versionLabel': return ({required Object version}) => 'Version ${version}'; + case 'about.appDescription': return 'A beautiful Plex client for Flutter'; + case 'about.viewLicensesDescription': return 'View licenses of third-party libraries'; + case 'serverSelection.connectingToServer': return 'Connecting to server...'; + case 'serverSelection.connectingToAllServers': return 'Connecting to all servers...'; + case 'serverSelection.connectToAllServers': return 'Connect to All Servers'; + case 'serverSelection.allServerConnectionsFailed': return 'Failed to connect to any servers. Please check your network and try again.'; + case 'serverSelection.foundServers': return ({required Object count}) => 'Found ${count} server(s)'; + case 'serverSelection.orSelectIndividually': return 'Or select a server individually:'; + case 'serverSelection.serverDebugCopied': return 'Server debug data copied to clipboard'; + case 'serverSelection.copyDebugData': return 'Copy Debug Data'; + case 'serverSelection.noServersFound': return 'No servers found'; + case 'serverSelection.malformedServerData': return ({required Object count}) => 'Found ${count} server(s) with malformed data. No valid servers available.'; + case 'serverSelection.incompleteServerInfo': return 'Some servers have incomplete information and were skipped. Please check your Plex.tv account.'; + case 'serverSelection.incompleteConnectionInfo': return 'Server connection information is incomplete. Please try again.'; + case 'serverSelection.malformedServerInfo': return ({required Object message}) => 'Server information is malformed: ${message}'; + case 'serverSelection.networkConnectionFailed': return 'Network connection failed. Please check your internet connection and try again.'; + case 'serverSelection.authenticationFailed': return 'Authentication failed. Please sign in again.'; + case 'serverSelection.plexServiceUnavailable': return 'Plex service unavailable. Please try again later.'; + case 'serverSelection.failedToLoadServers': return ({required Object error}) => 'Failed to load servers: ${error}'; + case 'hubDetail.title': return 'Title'; + case 'hubDetail.releaseYear': return 'Release Year'; + case 'hubDetail.dateAdded': return 'Date Added'; + case 'hubDetail.rating': return 'Rating'; + case 'hubDetail.noItemsFound': return 'No items found'; + case 'logs.title': return 'Logs'; + case 'logs.clearLogs': return 'Clear Logs'; + case 'logs.copyLogs': return 'Copy Logs'; + case 'logs.exportLogs': return 'Export Logs'; + case 'logs.noLogsToShow': return 'No logs to show'; + case 'logs.error': return 'Error:'; + case 'logs.stackTrace': return 'Stack Trace:'; + case 'licenses.relatedPackages': return 'Related Packages'; + case 'licenses.license': return 'License'; + case 'licenses.licenseNumber': return ({required Object number}) => 'License ${number}'; + case 'licenses.licensesCount': return ({required Object count}) => '${count} licenses'; + case 'navigation.home': return 'Home'; + case 'navigation.search': return 'Search'; + case 'navigation.libraries': return 'Libraries'; + case 'navigation.settings': return 'Settings'; + case 'collections.title': return 'Collections'; + case 'collections.collection': return 'Collection'; + case 'collections.empty': return 'Collection is empty'; + case 'collections.noItems': return 'No items in this collection'; + case 'collections.unknownLibrarySection': return 'Cannot delete: Unknown library section'; + case 'collections.deleteCollection': return 'Delete Collection'; + case 'collections.deleteConfirm': return ({required Object title}) => 'Are you sure you want to delete "${title}"? This action cannot be undone.'; + case 'collections.deleted': return 'Collection deleted'; + case 'collections.deleteFailed': return 'Failed to delete collection'; + case 'collections.deleteFailedWithError': return ({required Object error}) => 'Failed to delete collection: ${error}'; + case 'collections.failedToLoadItems': return ({required Object error}) => 'Failed to load collection items: ${error}'; + case 'collections.addTo': return 'Add to collection'; + case 'collections.selectCollection': return 'Select Collection'; + case 'collections.createNewCollection': return 'Create New Collection'; + case 'collections.collectionName': return 'Collection Name'; + case 'collections.enterCollectionName': return 'Enter collection name'; + case 'collections.addedToCollection': return 'Added to collection'; + case 'collections.errorAddingToCollection': return 'Failed to add to collection'; + case 'collections.created': return 'Collection created'; + case 'collections.removeFromCollection': return 'Remove from collection'; + case 'collections.removeFromCollectionConfirm': return ({required Object title}) => 'Remove "${title}" from this collection?'; + case 'collections.removedFromCollection': return 'Removed from collection'; + case 'collections.removeFromCollectionFailed': return 'Failed to remove from collection'; + case 'collections.removeFromCollectionError': return ({required Object error}) => 'Error removing from collection: ${error}'; + case 'playlists.title': return 'Playlists'; + case 'playlists.playlist': return 'Playlist'; + case 'playlists.noPlaylists': return 'No playlists found'; + case 'playlists.create': return 'Create Playlist'; + case 'playlists.newPlaylist': return 'New Playlist'; + case 'playlists.playlistName': return 'Playlist Name'; + case 'playlists.enterPlaylistName': return 'Enter playlist name'; + case 'playlists.edit': return 'Edit Playlist'; + case 'playlists.delete': return 'Delete Playlist'; + case 'playlists.addTo': return 'Add to Playlist'; + case 'playlists.addItems': return 'Add Items'; + case 'playlists.removeItem': return 'Remove from Playlist'; + case 'playlists.clearPlaylist': return 'Clear Playlist'; + case 'playlists.playAll': return 'Play All'; + case 'playlists.shuffle': return 'Shuffle'; + case 'playlists.smartPlaylist': return 'Smart Playlist'; + case 'playlists.regularPlaylist': return 'Regular Playlist'; + case 'playlists.itemCount': return ({required Object count}) => '${count} items'; + case 'playlists.oneItem': return '1 item'; + case 'playlists.emptyPlaylist': return 'This playlist is empty'; + case 'playlists.deleteConfirm': return 'Delete Playlist?'; + case 'playlists.deleteMessage': return ({required Object name}) => 'Are you sure you want to delete "${name}"?'; + case 'playlists.created': return 'Playlist created'; + case 'playlists.updated': return 'Playlist updated'; + case 'playlists.deleted': return 'Playlist deleted'; + case 'playlists.itemAdded': return 'Added to playlist'; + case 'playlists.itemRemoved': return 'Removed from playlist'; + case 'playlists.selectPlaylist': return 'Select Playlist'; + case 'playlists.createNewPlaylist': return 'Create New Playlist'; + case 'playlists.errorCreating': return 'Failed to create playlist'; + case 'playlists.errorDeleting': return 'Failed to delete playlist'; + case 'playlists.errorLoading': return 'Failed to load playlists'; + case 'playlists.errorAdding': return 'Failed to add to playlist'; + case 'playlists.errorReordering': return 'Failed to reorder playlist item'; + case 'playlists.errorRemoving': return 'Failed to remove from playlist'; + default: return null; + } + } } extension on _StringsDe { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': - return 'Plezy'; - case 'app.loading': - return 'Lädt...'; - case 'auth.signInWithPlex': - return 'Mit Plex anmelden'; - case 'auth.showQRCode': - return 'QR-Code anzeigen'; - case 'auth.cancel': - return 'Abbrechen'; - case 'auth.authenticate': - return 'Authentifizieren'; - case 'auth.retry': - return 'Erneut versuchen'; - case 'auth.debugEnterToken': - return 'Debug: Plex-Token eingeben'; - case 'auth.plexTokenLabel': - return 'Plex-Auth-Token'; - case 'auth.plexTokenHint': - return 'Plex.tv-Token eingeben'; - case 'auth.authenticationTimeout': - return 'Authentifizierung abgelaufen. Bitte erneut versuchen.'; - case 'auth.scanQRCodeInstruction': - return 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.'; - case 'auth.waitingForAuth': - return 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.'; - case 'common.cancel': - return 'Abbrechen'; - case 'common.save': - return 'Speichern'; - case 'common.close': - return 'Schließen'; - case 'common.clear': - return 'Leeren'; - case 'common.reset': - return 'Zurücksetzen'; - case 'common.later': - return 'Später'; - case 'common.submit': - return 'Senden'; - case 'common.confirm': - return 'Bestätigen'; - case 'common.retry': - return 'Erneut versuchen'; - case 'common.playNow': - return 'Jetzt abspielen'; - case 'common.logout': - return 'Abmelden'; - case 'common.online': - return 'Online'; - case 'common.offline': - return 'Offline'; - case 'common.owned': - return 'Besitzer'; - case 'common.shared': - return 'Geteilt'; - case 'common.current': - return 'AKTUELL'; - case 'common.unknown': - return 'Unbekannt'; - case 'common.refresh': - return 'Aktualisieren'; - case 'common.yes': - return 'Ja'; - case 'common.no': - return 'Nein'; - case 'common.server': - return 'Server'; - case 'common.delete': - return 'Löschen'; - case 'common.shuffle': - return 'Zufall'; - case 'common.addTo': - return 'Hinzufügen zu...'; - case 'screens.licenses': - return 'Lizenzen'; - case 'screens.selectServer': - return 'Server auswählen'; - case 'screens.switchProfile': - return 'Profil wechseln'; - case 'screens.subtitleStyling': - return 'Untertitel-Stil'; - case 'screens.search': - return 'Suche'; - case 'screens.logs': - return 'Protokolle'; - case 'update.available': - return 'Update verfügbar'; - case 'update.versionAvailable': - return ({required Object version}) => - 'Version ${version} ist verfügbar'; - case 'update.currentVersion': - return ({required Object version}) => 'Aktuell: ${version}'; - case 'update.skipVersion': - return 'Diese Version überspringen'; - case 'update.viewRelease': - return 'Release anzeigen'; - case 'update.latestVersion': - return 'Aktuellste Version installiert'; - case 'update.checkFailed': - return 'Fehler bei der Updateprüfung'; - case 'settings.title': - return 'Einstellungen'; - case 'settings.language': - return 'Sprache'; - case 'settings.theme': - return 'Design'; - case 'settings.appearance': - return 'Darstellung'; - case 'settings.videoPlayback': - return 'Videowiedergabe'; - case 'settings.shufflePlay': - return 'Zufallswiedergabe'; - case 'settings.advanced': - return 'Erweitert'; - case 'settings.useSeasonPostersDescription': - return 'Staffelposter statt Serienposter für Episoden anzeigen'; - case 'settings.showHeroSectionDescription': - return 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; - case 'settings.secondsLabel': - return 'Sekunden'; - case 'settings.minutesLabel': - return 'Minuten'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => - 'Dauer eingeben (${min}-${max})'; - case 'settings.systemTheme': - return 'System'; - case 'settings.systemThemeDescription': - return 'Systemeinstellungen folgen'; - case 'settings.lightTheme': - return 'Hell'; - case 'settings.darkTheme': - return 'Dunkel'; - case 'settings.libraryDensity': - return 'Mediathekdichte'; - case 'settings.compact': - return 'Kompakt'; - case 'settings.compactDescription': - return 'Kleinere Karten, mehr Elemente sichtbar'; - case 'settings.normal': - return 'Normal'; - case 'settings.normalDescription': - return 'Standardgröße'; - case 'settings.comfortable': - return 'Großzügig'; - case 'settings.comfortableDescription': - return 'Größere Karten, weniger Elemente sichtbar'; - case 'settings.viewMode': - return 'Ansichtsmodus'; - case 'settings.gridView': - return 'Raster'; - case 'settings.gridViewDescription': - return 'Elemente im Raster anzeigen'; - case 'settings.listView': - return 'Liste'; - case 'settings.listViewDescription': - return 'Elemente in Listenansicht anzeigen'; - case 'settings.useSeasonPosters': - return 'Staffelposter verwenden'; - case 'settings.showHeroSection': - return 'Hero-Bereich anzeigen'; - case 'settings.hardwareDecoding': - return 'Hardware-Decodierung'; - case 'settings.hardwareDecodingDescription': - return 'Hardwarebeschleunigung verwenden, sofern verfügbar'; - case 'settings.bufferSize': - return 'Puffergröße'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return 'Untertitel-Stil'; - case 'settings.subtitleStylingDescription': - return 'Aussehen von Untertiteln anpassen'; - case 'settings.smallSkipDuration': - return 'Kleine Sprungdauer'; - case 'settings.largeSkipDuration': - return 'Große Sprungdauer'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} Sekunden'; - case 'settings.defaultSleepTimer': - return 'Standard-Sleep-Timer'; - case 'settings.minutesUnit': - return ({required Object minutes}) => '${minutes} Minuten'; - case 'settings.rememberTrackSelections': - return 'Spurauswahl pro Serie/Film merken'; - case 'settings.rememberTrackSelectionsDescription': - return 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; - case 'settings.unwatchedOnly': - return 'Nur ungesehene'; - case 'settings.unwatchedOnlyDescription': - return 'Nur ungesehene Episoden in die Shuffle-Warteschlange aufnehmen'; - case 'settings.shuffleOrderNavigation': - return 'Navigation der Shuffle-Reihenfolge'; - case 'settings.shuffleOrderNavigationDescription': - return 'Weiter/Zurück folgt der zufälligen Reihenfolge'; - case 'settings.loopShuffleQueue': - return 'Shuffle-Warteschlange wiederholen'; - case 'settings.loopShuffleQueueDescription': - return 'Warteschlange neu starten, wenn das Ende erreicht ist'; - case 'settings.videoPlayerControls': - return 'Videoplayer-Steuerung'; - case 'settings.keyboardShortcuts': - return 'Tastenkürzel'; - case 'settings.keyboardShortcutsDescription': - return 'Tastenkürzel anpassen'; - case 'settings.debugLogging': - return 'Debug-Protokollierung'; - case 'settings.debugLoggingDescription': - return 'Detaillierte Protokolle zur Fehleranalyse aktivieren'; - case 'settings.viewLogs': - return 'Protokolle anzeigen'; - case 'settings.viewLogsDescription': - return 'App-Protokolle anzeigen'; - case 'settings.clearCache': - return 'Cache löschen'; - case 'settings.clearCacheDescription': - return 'Löscht alle zwischengespeicherten Bilder und Daten. Die App kann danach langsamer laden.'; - case 'settings.clearCacheSuccess': - return 'Cache erfolgreich gelöscht'; - case 'settings.resetSettings': - return 'Einstellungen zurücksetzen'; - case 'settings.resetSettingsDescription': - return 'Alle Einstellungen auf Standard zurücksetzen. Dies kann nicht rückgängig gemacht werden.'; - case 'settings.resetSettingsSuccess': - return 'Einstellungen erfolgreich zurückgesetzt'; - case 'settings.shortcutsReset': - return 'Tastenkürzel auf Standard zurückgesetzt'; - case 'settings.about': - return 'Über'; - case 'settings.aboutDescription': - return 'App-Informationen und Lizenzen'; - case 'settings.updates': - return 'Updates'; - case 'settings.updateAvailable': - return 'Update verfügbar'; - case 'settings.checkForUpdates': - return 'Nach Updates suchen'; - case 'settings.validationErrorEnterNumber': - return 'Bitte eine gültige Zahl eingeben'; - case 'settings.validationErrorDuration': - return ({ - required Object min, - required Object max, - required Object unit, - }) => 'Dauer muss zwischen ${min} und ${max} ${unit} liegen'; - case 'settings.shortcutAlreadyAssigned': - return ({required Object action}) => - 'Tastenkürzel bereits zugewiesen an ${action}'; - case 'settings.shortcutUpdated': - return ({required Object action}) => - 'Tastenkürzel aktualisiert für ${action}'; - case 'search.hint': - return 'Filme, Serien, Musik suchen...'; - case 'search.tryDifferentTerm': - return 'Anderen Suchbegriff versuchen'; - case 'search.searchYourMedia': - return 'In den eigenen Medien suchen'; - case 'search.enterTitleActorOrKeyword': - return 'Titel, Schauspieler oder Stichwort eingeben'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => - 'Tastenkürzel festlegen für ${actionName}'; - case 'hotkeys.clearShortcut': - return 'Kürzel löschen'; - case 'pinEntry.enterPin': - return 'PIN eingeben'; - case 'pinEntry.showPin': - return 'PIN anzeigen'; - case 'pinEntry.hidePin': - return 'PIN verbergen'; - case 'fileInfo.title': - return 'Dateiinfo'; - case 'fileInfo.video': - return 'Video'; - case 'fileInfo.audio': - return 'Audio'; - case 'fileInfo.file': - return 'Datei'; - case 'fileInfo.advanced': - return 'Erweitert'; - case 'fileInfo.codec': - return 'Codec'; - case 'fileInfo.resolution': - return 'Auflösung'; - case 'fileInfo.bitrate': - return 'Bitrate'; - case 'fileInfo.frameRate': - return 'Bildrate'; - case 'fileInfo.aspectRatio': - return 'Seitenverhältnis'; - case 'fileInfo.profile': - return 'Profil'; - case 'fileInfo.bitDepth': - return 'Farbtiefe'; - case 'fileInfo.colorSpace': - return 'Farbraum'; - case 'fileInfo.colorRange': - return 'Farbbereich'; - case 'fileInfo.colorPrimaries': - return 'Primärfarben'; - case 'fileInfo.chromaSubsampling': - return 'Chroma-Subsampling'; - case 'fileInfo.channels': - return 'Kanäle'; - case 'fileInfo.path': - return 'Pfad'; - case 'fileInfo.size': - return 'Größe'; - case 'fileInfo.container': - return 'Container'; - case 'fileInfo.duration': - return 'Dauer'; - case 'fileInfo.optimizedForStreaming': - return 'Für Streaming optimiert'; - case 'fileInfo.has64bitOffsets': - return '64-Bit-Offsets'; - case 'mediaMenu.markAsWatched': - return 'Als gesehen markieren'; - case 'mediaMenu.markAsUnwatched': - return 'Als ungesehen markieren'; - case 'mediaMenu.removeFromContinueWatching': - return 'Aus ‚Weiterschauen‘ entfernen'; - case 'mediaMenu.goToSeries': - return 'Zur Serie'; - case 'mediaMenu.goToSeason': - return 'Zur Staffel'; - case 'mediaMenu.shufflePlay': - return 'Zufallswiedergabe'; - case 'mediaMenu.fileInfo': - return 'Dateiinfo'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, Film'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, Serie'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => - '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return 'angesehen'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '${percent} Prozent angesehen'; - case 'accessibility.mediaCardUnwatched': - return 'ungeschaut'; - case 'accessibility.tapToPlay': - return 'Zum Abspielen tippen'; - case 'tooltips.shufflePlay': - return 'Zufallswiedergabe'; - case 'tooltips.markAsWatched': - return 'Als gesehen markieren'; - case 'tooltips.markAsUnwatched': - return 'Als ungesehen markieren'; - case 'videoControls.audioLabel': - return 'Audio'; - case 'videoControls.subtitlesLabel': - return 'Untertitel'; - case 'videoControls.resetToZero': - return 'Auf 0 ms zurücksetzen'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => - '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => - '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} spielt später'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} spielt früher'; - case 'videoControls.noOffset': - return 'Kein Offset'; - case 'videoControls.letterbox': - return 'Letterbox'; - case 'videoControls.fillScreen': - return 'Bild füllen'; - case 'videoControls.stretch': - return 'Strecken'; - case 'videoControls.lockRotation': - return 'Rotation sperren'; - case 'videoControls.unlockRotation': - return 'Rotation entsperren'; - case 'videoControls.sleepTimer': - return 'Schlaftimer'; - case 'videoControls.timerActive': - return 'Schlaftimer aktiv'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => - 'Wiedergabe wird in ${duration} pausiert'; - case 'videoControls.sleepTimerCompleted': - return 'Schlaftimer abgelaufen – Wiedergabe pausiert'; - case 'videoControls.playButton': - return 'Wiedergeben'; - case 'videoControls.pauseButton': - return 'Pause'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => '${seconds} Sekunden zurück'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => '${seconds} Sekunden vor'; - case 'videoControls.previousButton': - return 'Vorherige Episode'; - case 'videoControls.nextButton': - return 'Nächste Episode'; - case 'videoControls.previousChapterButton': - return 'Vorheriges Kapitel'; - case 'videoControls.nextChapterButton': - return 'Nächstes Kapitel'; - case 'videoControls.volumeButton': - return 'Lautstärke'; - case 'videoControls.muteButton': - return 'Stumm schalten'; - case 'videoControls.unmuteButton': - return 'Stummschaltung aufheben'; - case 'videoControls.settingsButton': - return 'Videoeinstellungen'; - case 'videoControls.audioTrackButton': - return 'Tonspuren'; - case 'videoControls.subtitlesButton': - return 'Untertitel'; - case 'videoControls.chaptersButton': - return 'Kapitel'; - case 'videoControls.versionsButton': - return 'Videoversionen'; - case 'videoControls.aspectRatioButton': - return 'Seitenverhältnis'; - case 'videoControls.fullscreenButton': - return 'Vollbild aktivieren'; - case 'videoControls.exitFullscreenButton': - return 'Vollbild verlassen'; - case 'videoControls.rotationLockButton': - return 'Dreh­sperre'; - case 'videoControls.timelineSlider': - return 'Video-Zeitleiste'; - case 'videoControls.volumeSlider': - return 'Lautstärkepegel'; - case 'videoControls.backButton': - return 'Zurück'; - case 'userStatus.admin': - return 'Eigentümer'; - case 'userStatus.restricted': - return 'Eingeschränkt'; - case 'userStatus.protected': - return 'Geschützt'; - case 'userStatus.current': - return 'AKTUELL'; - case 'messages.markedAsWatched': - return 'Als gesehen markiert'; - case 'messages.markedAsUnwatched': - return 'Als ungesehen markiert'; - case 'messages.removedFromContinueWatching': - return 'Aus ‚Weiterschauen‘ entfernt'; - case 'messages.errorLoading': - return ({required Object error}) => 'Fehler: ${error}'; - case 'messages.fileInfoNotAvailable': - return 'Dateiinfo nicht verfügbar'; - case 'messages.errorLoadingFileInfo': - return ({required Object error}) => - 'Fehler beim Laden der Dateiinfo: ${error}'; - case 'messages.errorLoadingSeries': - return 'Fehler beim Laden der Serie'; - case 'messages.errorLoadingSeason': - return 'Fehler beim Laden der Staffel'; - case 'messages.musicNotSupported': - return 'Musikwiedergabe wird noch nicht unterstützt'; - case 'messages.logsCleared': - return 'Protokolle gelöscht'; - case 'messages.logsCopied': - return 'Protokolle in Zwischenablage kopiert'; - case 'messages.noLogsAvailable': - return 'Keine Protokolle verfügbar'; - case 'messages.libraryScanning': - return ({required Object title}) => 'Scanne „${title}“...'; - case 'messages.libraryScanStarted': - return ({required Object title}) => - 'Mediathekscan gestartet für „${title}“'; - case 'messages.libraryScanFailed': - return ({required Object error}) => - 'Fehler beim Scannen der Mediathek: ${error}'; - case 'messages.metadataRefreshing': - return ({required Object title}) => - 'Metadaten werden aktualisiert für „${title}“...'; - case 'messages.metadataRefreshStarted': - return ({required Object title}) => - 'Metadaten-Aktualisierung gestartet für „${title}“'; - case 'messages.metadataRefreshFailed': - return ({required Object error}) => - 'Metadaten konnten nicht aktualisiert werden: ${error}'; - case 'messages.noPlexToken': - return 'Kein Plex-Token gefunden. Bitte erneut anmelden.'; - case 'messages.logoutConfirm': - return 'Abmeldung wirklich durchführen?'; - case 'messages.noSeasonsFound': - return 'Keine Staffeln gefunden'; - case 'messages.noEpisodesFound': - return 'Keine Episoden in der ersten Staffel gefunden'; - case 'messages.noEpisodesFoundGeneral': - return 'Keine Episoden gefunden'; - case 'messages.noResultsFound': - return 'Keine Ergebnisse gefunden'; - case 'messages.sleepTimerSet': - return ({required Object label}) => 'Sleep-Timer gesetzt auf ${label}'; - case 'messages.failedToSwitchProfile': - return ({required Object displayName}) => - 'Profilwechsel zu ${displayName} fehlgeschlagen'; - case 'messages.noItemsAvailable': - return 'Keine Elemente verfügbar'; - case 'messages.failedToCreatePlayQueue': - return 'Wiedergabewarteschlange konnte nicht erstellt werden'; - case 'messages.failedToCreatePlayQueueNoItems': - return 'Wiedergabewarteschlange konnte nicht erstellt werden – keine Elemente'; - case 'messages.failedPlayback': - return ({required Object action, required Object error}) => - 'Wiedergabe für ${action} fehlgeschlagen: ${error}'; - case 'profile.noUsersAvailable': - return 'Keine Benutzer verfügbar'; - case 'subtitlingStyling.stylingOptions': - return 'Stiloptionen'; - case 'subtitlingStyling.fontSize': - return 'Schriftgröße'; - case 'subtitlingStyling.textColor': - return 'Textfarbe'; - case 'subtitlingStyling.borderSize': - return 'Rahmengröße'; - case 'subtitlingStyling.borderColor': - return 'Rahmenfarbe'; - case 'subtitlingStyling.backgroundOpacity': - return 'Hintergrunddeckkraft'; - case 'subtitlingStyling.backgroundColor': - return 'Hintergrundfarbe'; - case 'dialog.confirmAction': - return 'Aktion bestätigen'; - case 'dialog.areYouSure': - return 'Aktion wirklich ausführen?'; - case 'dialog.cancel': - return 'Abbrechen'; - case 'dialog.playNow': - return 'Jetzt abspielen'; - case 'discover.title': - return 'Entdecken'; - case 'discover.switchProfile': - return 'Profil wechseln'; - case 'discover.switchServer': - return 'Server wechseln'; - case 'discover.logout': - return 'Abmelden'; - case 'discover.noContentAvailable': - return 'Kein Inhalt verfügbar'; - case 'discover.addMediaToLibraries': - return 'Medien zur Mediathek hinzufügen'; - case 'discover.continueWatching': - return 'Weiterschauen'; - case 'discover.recentlyAdded': - return 'Kürzlich hinzugefügt'; - case 'discover.play': - return 'Abspielen'; - case 'discover.resume': - return 'Fortsetzen'; - case 'discover.playEpisode': - return ({required Object season, required Object episode}) => - 'S${season}, E${episode} - Abspielen'; - case 'discover.resumeEpisode': - return ({required Object season, required Object episode}) => - 'S${season}, E${episode} - Fortsetzen'; - case 'discover.pause': - return 'Pause'; - case 'discover.overview': - return 'Übersicht'; - case 'discover.cast': - return 'Besetzung'; - case 'discover.seasons': - return 'Staffeln'; - case 'discover.studio': - return 'Studio'; - case 'discover.rating': - return 'Altersfreigabe'; - case 'discover.watched': - return 'Gesehen'; - case 'discover.episodeCount': - return ({required Object count}) => '${count} Episoden'; - case 'discover.watchedProgress': - return ({required Object watched, required Object total}) => - '${watched} von ${total} gesehen'; - case 'discover.movie': - return 'Film'; - case 'discover.tvShow': - return 'Serie'; - case 'discover.minutesLeft': - return ({required Object minutes}) => '${minutes} Min übrig'; - case 'errors.searchFailed': - return ({required Object error}) => 'Suche fehlgeschlagen: ${error}'; - case 'errors.connectionTimeout': - return ({required Object context}) => - 'Zeitüberschreitung beim Laden von ${context}'; - case 'errors.connectionFailed': - return 'Verbindung zum Plex-Server fehlgeschlagen'; - case 'errors.failedToLoad': - return ({required Object context, required Object error}) => - 'Fehler beim Laden von ${context}: ${error}'; - case 'errors.noClientAvailable': - return 'Kein Client verfügbar'; - case 'errors.authenticationFailed': - return ({required Object error}) => - 'Authentifizierung fehlgeschlagen: ${error}'; - case 'errors.couldNotLaunchUrl': - return 'Auth-URL konnte nicht geöffnet werden'; - case 'errors.pleaseEnterToken': - return 'Bitte Token eingeben'; - case 'errors.invalidToken': - return 'Ungültiges Token'; - case 'errors.failedToVerifyToken': - return ({required Object error}) => - 'Token-Verifizierung fehlgeschlagen: ${error}'; - case 'errors.failedToSwitchProfile': - return ({required Object displayName}) => - 'Profilwechsel zu ${displayName} fehlgeschlagen'; - case 'errors.connectionFailedGeneric': - return 'Verbindung fehlgeschlagen'; - case 'libraries.title': - return 'Mediatheken'; - case 'libraries.scanLibraryFiles': - return 'Mediatheksdateien scannen'; - case 'libraries.scanLibrary': - return 'Mediathek scannen'; - case 'libraries.analyze': - return 'Analysieren'; - case 'libraries.analyzeLibrary': - return 'Mediathek analysieren'; - case 'libraries.refreshMetadata': - return 'Metadaten aktualisieren'; - case 'libraries.emptyTrash': - return 'Papierkorb leeren'; - case 'libraries.emptyingTrash': - return ({required Object title}) => - 'Papierkorb für „${title}“ wird geleert...'; - case 'libraries.trashEmptied': - return ({required Object title}) => 'Papierkorb für „${title}“ geleert'; - case 'libraries.failedToEmptyTrash': - return ({required Object error}) => - 'Papierkorb konnte nicht geleert werden: ${error}'; - case 'libraries.analyzing': - return ({required Object title}) => 'Analysiere „${title}“...'; - case 'libraries.analysisStarted': - return ({required Object title}) => 'Analyse gestartet für „${title}“'; - case 'libraries.failedToAnalyze': - return ({required Object error}) => - 'Analyse der Mediathek fehlgeschlagen: ${error}'; - case 'libraries.noLibrariesFound': - return 'Keine Mediatheken gefunden'; - case 'libraries.thisLibraryIsEmpty': - return 'Diese Mediathek ist leer'; - case 'libraries.all': - return 'Alle'; - case 'libraries.clearAll': - return 'Alle löschen'; - case 'libraries.scanLibraryConfirm': - return ({required Object title}) => '„${title}“ wirklich scannen?'; - case 'libraries.analyzeLibraryConfirm': - return ({required Object title}) => '„${title}“ wirklich analysieren?'; - case 'libraries.refreshMetadataConfirm': - return ({required Object title}) => - 'Metadaten für „${title}“ wirklich aktualisieren?'; - case 'libraries.emptyTrashConfirm': - return ({required Object title}) => - 'Papierkorb für „${title}“ wirklich leeren?'; - case 'libraries.manageLibraries': - return 'Mediatheken verwalten'; - case 'libraries.sort': - return 'Sortieren'; - case 'libraries.sortBy': - return 'Sortieren nach'; - case 'libraries.filters': - return 'Filter'; - case 'libraries.loadingLibraryWithCount': - return ({required Object count}) => - 'Lade Mediathek... (${count} Elemente geladen)'; - case 'libraries.confirmActionMessage': - return 'Aktion wirklich durchführen?'; - case 'libraries.showLibrary': - return 'Mediathek anzeigen'; - case 'libraries.hideLibrary': - return 'Mediathek ausblenden'; - case 'libraries.libraryOptions': - return 'Mediatheksoptionen'; - case 'libraries.content': - return 'Bibliotheksinhalt'; - case 'libraries.selectLibrary': - return 'Bibliothek auswählen'; - case 'libraries.filtersWithCount': - return ({required Object count}) => 'Filter (${count})'; - case 'libraries.noRecommendations': - return 'Keine Empfehlungen verfügbar'; - case 'libraries.noCollections': - return 'Keine Sammlungen in dieser Mediathek'; - case 'libraries.noFoldersFound': - return 'Keine Ordner gefunden'; - case 'libraries.folders': - return 'Ordner'; - case 'libraries.tabs.recommended': - return 'Empfohlen'; - case 'libraries.tabs.browse': - return 'Durchsuchen'; - case 'libraries.tabs.collections': - return 'Sammlungen'; - case 'libraries.tabs.playlists': - return 'Wiedergabelisten'; - case 'libraries.groupings.all': - return 'Alle'; - case 'libraries.groupings.movies': - return 'Filme'; - case 'libraries.groupings.shows': - return 'Serien'; - case 'libraries.groupings.seasons': - return 'Staffeln'; - case 'libraries.groupings.episodes': - return 'Episoden'; - case 'libraries.groupings.folders': - return 'Ordner'; - case 'about.title': - return 'Über'; - case 'about.openSourceLicenses': - return 'Open-Source-Lizenzen'; - case 'about.versionLabel': - return ({required Object version}) => 'Version ${version}'; - case 'about.appDescription': - return 'Ein schöner Plex-Client für Flutter'; - case 'about.viewLicensesDescription': - return 'Lizenzen von Drittanbieter-Bibliotheken anzeigen'; - case 'serverSelection.connectingToServer': - return 'Verbinde mit Server...'; - case 'serverSelection.connectingToAllServers': - return 'Verbinde mit allen Servern...'; - case 'serverSelection.connectToAllServers': - return 'Mit allen Servern verbinden'; - case 'serverSelection.allServerConnectionsFailed': - return 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.'; - case 'serverSelection.foundServers': - return ({required Object count}) => '${count} Server gefunden'; - case 'serverSelection.orSelectIndividually': - return 'Oder einzelnen Server auswählen:'; - case 'serverSelection.serverDebugCopied': - return 'Server-Debugdaten kopiert'; - case 'serverSelection.copyDebugData': - return 'Debugdaten kopieren'; - case 'serverSelection.noServersFound': - return 'Keine Server gefunden'; - case 'serverSelection.malformedServerData': - return ({required Object count}) => - '${count} Server mit fehlerhaften Daten gefunden. Keine gültigen Server verfügbar.'; - case 'serverSelection.incompleteServerInfo': - return 'Einige Serverinformationen sind unvollständig und wurden übersprungen. Plex.tv-Konto prüfen.'; - case 'serverSelection.incompleteConnectionInfo': - return 'Serververbindungsinformationen unvollständig. Bitte erneut versuchen.'; - case 'serverSelection.malformedServerInfo': - return ({required Object message}) => - 'Serverinformationen fehlerhaft: ${message}'; - case 'serverSelection.networkConnectionFailed': - return 'Netzwerkverbindung fehlgeschlagen. Internetverbindung prüfen und erneut versuchen.'; - case 'serverSelection.authenticationFailed': - return 'Authentifizierung fehlgeschlagen. Bitte erneut anmelden.'; - case 'serverSelection.plexServiceUnavailable': - return 'Plex-Dienst nicht verfügbar. Bitte später erneut versuchen.'; - case 'serverSelection.failedToLoadServers': - return ({required Object error}) => - 'Server konnten nicht geladen werden: ${error}'; - case 'hubDetail.title': - return 'Titel'; - case 'hubDetail.releaseYear': - return 'Erscheinungsjahr'; - case 'hubDetail.dateAdded': - return 'Hinzugefügt am'; - case 'hubDetail.rating': - return 'Bewertung'; - case 'hubDetail.noItemsFound': - return 'Keine Elemente gefunden'; - case 'logs.title': - return 'Protokolle'; - case 'logs.clearLogs': - return 'Protokolle löschen'; - case 'logs.copyLogs': - return 'Protokolle kopieren'; - case 'logs.exportLogs': - return 'Protokolle exportieren'; - case 'logs.noLogsToShow': - return 'Keine Protokolle zum Anzeigen'; - case 'logs.error': - return 'Fehler:'; - case 'logs.stackTrace': - return 'Stacktrace:'; - case 'licenses.relatedPackages': - return 'Verwandte Pakete'; - case 'licenses.license': - return 'Lizenz'; - case 'licenses.licenseNumber': - return ({required Object number}) => 'Lizenz ${number}'; - case 'licenses.licensesCount': - return ({required Object count}) => '${count} Lizenzen'; - case 'navigation.home': - return 'Start'; - case 'navigation.search': - return 'Suche'; - case 'navigation.libraries': - return 'Mediatheken'; - case 'navigation.settings': - return 'Einstellungen'; - case 'playlists.title': - return 'Wiedergabelisten'; - case 'playlists.noPlaylists': - return 'Keine Wiedergabelisten gefunden'; - case 'playlists.create': - return 'Wiedergabeliste erstellen'; - case 'playlists.newPlaylist': - return 'Neue Wiedergabeliste'; - case 'playlists.playlistName': - return 'Name der Wiedergabeliste'; - case 'playlists.enterPlaylistName': - return 'Name der Wiedergabeliste eingeben'; - case 'playlists.edit': - return 'Wiedergabeliste bearbeiten'; - case 'playlists.delete': - return 'Wiedergabeliste löschen'; - case 'playlists.addTo': - return 'Zur Wiedergabeliste hinzufügen'; - case 'playlists.addItems': - return 'Elemente hinzufügen'; - case 'playlists.removeItem': - return 'Aus Wiedergabeliste entfernen'; - case 'playlists.clearPlaylist': - return 'Wiedergabeliste leeren'; - case 'playlists.playAll': - return 'Alle abspielen'; - case 'playlists.shuffle': - return 'Zufällig'; - case 'playlists.smartPlaylist': - return 'Intelligente Wiedergabeliste'; - case 'playlists.regularPlaylist': - return 'Normale Wiedergabeliste'; - case 'playlists.itemCount': - return ({required Object count}) => '${count} Elemente'; - case 'playlists.oneItem': - return '1 Element'; - case 'playlists.emptyPlaylist': - return 'Diese Wiedergabeliste ist leer'; - case 'playlists.deleteConfirm': - return 'Wiedergabeliste löschen?'; - case 'playlists.deleteMessage': - return ({required Object name}) => - 'Soll "${name}" wirklich gelöscht werden?'; - case 'playlists.created': - return 'Wiedergabeliste erstellt'; - case 'playlists.updated': - return 'Wiedergabeliste aktualisiert'; - case 'playlists.deleted': - return 'Wiedergabeliste gelöscht'; - case 'playlists.itemAdded': - return 'Zur Wiedergabeliste hinzugefügt'; - case 'playlists.itemRemoved': - return 'Aus Wiedergabeliste entfernt'; - case 'playlists.selectPlaylist': - return 'Wiedergabeliste auswählen'; - case 'playlists.createNewPlaylist': - return 'Neue Wiedergabeliste erstellen'; - case 'playlists.errorCreating': - return 'Wiedergabeliste konnte nicht erstellt werden'; - case 'playlists.errorDeleting': - return 'Wiedergabeliste konnte nicht gelöscht werden'; - case 'playlists.errorLoading': - return 'Wiedergabelisten konnten nicht geladen werden'; - case 'playlists.errorAdding': - return 'Konnte nicht zur Wiedergabeliste hinzugefügt werden'; - case 'playlists.errorReordering': - return 'Element der Wiedergabeliste konnte nicht neu geordnet werden'; - case 'playlists.errorRemoving': - return 'Konnte nicht aus der Wiedergabeliste entfernt werden'; - case 'playlists.playlist': - return 'Wiedergabeliste'; - case 'collections.title': - return 'Sammlungen'; - case 'collections.collection': - return 'Sammlung'; - case 'collections.empty': - return 'Sammlung ist leer'; - case 'collections.noItems': - return 'Keine Elemente in dieser Sammlung'; - case 'collections.unknownLibrarySection': - return 'Löschen nicht möglich: Unbekannte Bibliothekssektion'; - case 'collections.deleteCollection': - return 'Sammlung löschen'; - case 'collections.deleteConfirm': - return ({required Object title}) => - 'Sind Sie sicher, dass Sie "${title}" löschen möchten? Dies kann nicht rückgängig gemacht werden.'; - case 'collections.deleted': - return 'Sammlung gelöscht'; - case 'collections.deleteFailed': - return 'Sammlung konnte nicht gelöscht werden'; - case 'collections.deleteFailedWithError': - return ({required Object error}) => - 'Sammlung konnte nicht gelöscht werden: ${error}'; - case 'collections.failedToLoadItems': - return ({required Object error}) => - 'Sammlungselemente konnten nicht geladen werden: ${error}'; - case 'collections.addTo': - return 'Zur Sammlung hinzufügen'; - case 'collections.selectCollection': - return 'Sammlung auswählen'; - case 'collections.createNewCollection': - return 'Neue Sammlung erstellen'; - case 'collections.collectionName': - return 'Sammlungsname'; - case 'collections.enterCollectionName': - return 'Sammlungsnamen eingeben'; - case 'collections.addedToCollection': - return 'Zur Sammlung hinzugefügt'; - case 'collections.errorAddingToCollection': - return 'Fehler beim Hinzufügen zur Sammlung'; - case 'collections.created': - return 'Sammlung erstellt'; - case 'collections.removeFromCollection': - return 'Aus Sammlung entfernen'; - case 'collections.removeFromCollectionConfirm': - return ({required Object title}) => - '"${title}" aus dieser Sammlung entfernen?'; - case 'collections.removedFromCollection': - return 'Aus Sammlung entfernt'; - case 'collections.removeFromCollectionFailed': - return 'Entfernen aus Sammlung fehlgeschlagen'; - case 'collections.removeFromCollectionError': - return ({required Object error}) => - 'Fehler beim Entfernen aus der Sammlung: ${error}'; - default: - return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': return 'Plezy'; + case 'app.loading': return 'Lädt...'; + case 'auth.signInWithPlex': return 'Mit Plex anmelden'; + case 'auth.showQRCode': return 'QR-Code anzeigen'; + case 'auth.cancel': return 'Abbrechen'; + case 'auth.authenticate': return 'Authentifizieren'; + case 'auth.retry': return 'Erneut versuchen'; + case 'auth.debugEnterToken': return 'Debug: Plex-Token eingeben'; + case 'auth.plexTokenLabel': return 'Plex-Auth-Token'; + case 'auth.plexTokenHint': return 'Plex.tv-Token eingeben'; + case 'auth.authenticationTimeout': return 'Authentifizierung abgelaufen. Bitte erneut versuchen.'; + case 'auth.scanQRCodeInstruction': return 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.'; + case 'auth.waitingForAuth': return 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.'; + case 'common.cancel': return 'Abbrechen'; + case 'common.save': return 'Speichern'; + case 'common.close': return 'Schließen'; + case 'common.clear': return 'Leeren'; + case 'common.reset': return 'Zurücksetzen'; + case 'common.later': return 'Später'; + case 'common.submit': return 'Senden'; + case 'common.confirm': return 'Bestätigen'; + case 'common.retry': return 'Erneut versuchen'; + case 'common.playNow': return 'Jetzt abspielen'; + case 'common.logout': return 'Abmelden'; + case 'common.online': return 'Online'; + case 'common.offline': return 'Offline'; + case 'common.owned': return 'Besitzer'; + case 'common.shared': return 'Geteilt'; + case 'common.current': return 'AKTUELL'; + case 'common.unknown': return 'Unbekannt'; + case 'common.refresh': return 'Aktualisieren'; + case 'common.yes': return 'Ja'; + case 'common.no': return 'Nein'; + case 'common.server': return 'Server'; + case 'common.delete': return 'Löschen'; + case 'common.shuffle': return 'Zufall'; + case 'common.addTo': return 'Hinzufügen zu...'; + case 'screens.licenses': return 'Lizenzen'; + case 'screens.selectServer': return 'Server auswählen'; + case 'screens.switchProfile': return 'Profil wechseln'; + case 'screens.subtitleStyling': return 'Untertitel-Stil'; + case 'screens.search': return 'Suche'; + case 'screens.logs': return 'Protokolle'; + case 'update.available': return 'Update verfügbar'; + case 'update.versionAvailable': return ({required Object version}) => 'Version ${version} ist verfügbar'; + case 'update.currentVersion': return ({required Object version}) => 'Aktuell: ${version}'; + case 'update.skipVersion': return 'Diese Version überspringen'; + case 'update.viewRelease': return 'Release anzeigen'; + case 'update.latestVersion': return 'Aktuellste Version installiert'; + case 'update.checkFailed': return 'Fehler bei der Updateprüfung'; + case 'settings.title': return 'Einstellungen'; + case 'settings.language': return 'Sprache'; + case 'settings.theme': return 'Design'; + case 'settings.appearance': return 'Darstellung'; + case 'settings.videoPlayback': return 'Videowiedergabe'; + case 'settings.shufflePlay': return 'Zufallswiedergabe'; + case 'settings.advanced': return 'Erweitert'; + case 'settings.useSeasonPostersDescription': return 'Staffelposter statt Serienposter für Episoden anzeigen'; + case 'settings.showHeroSectionDescription': return 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; + case 'settings.secondsLabel': return 'Sekunden'; + case 'settings.minutesLabel': return 'Minuten'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => 'Dauer eingeben (${min}-${max})'; + case 'settings.systemTheme': return 'System'; + case 'settings.systemThemeDescription': return 'Systemeinstellungen folgen'; + case 'settings.lightTheme': return 'Hell'; + case 'settings.darkTheme': return 'Dunkel'; + case 'settings.libraryDensity': return 'Mediathekdichte'; + case 'settings.compact': return 'Kompakt'; + case 'settings.compactDescription': return 'Kleinere Karten, mehr Elemente sichtbar'; + case 'settings.normal': return 'Normal'; + case 'settings.normalDescription': return 'Standardgröße'; + case 'settings.comfortable': return 'Großzügig'; + case 'settings.comfortableDescription': return 'Größere Karten, weniger Elemente sichtbar'; + case 'settings.viewMode': return 'Ansichtsmodus'; + case 'settings.gridView': return 'Raster'; + case 'settings.gridViewDescription': return 'Elemente im Raster anzeigen'; + case 'settings.listView': return 'Liste'; + case 'settings.listViewDescription': return 'Elemente in Listenansicht anzeigen'; + case 'settings.useSeasonPosters': return 'Staffelposter verwenden'; + case 'settings.showHeroSection': return 'Hero-Bereich anzeigen'; + case 'settings.hardwareDecoding': return 'Hardware-Decodierung'; + case 'settings.hardwareDecodingDescription': return 'Hardwarebeschleunigung verwenden, sofern verfügbar'; + case 'settings.bufferSize': return 'Puffergröße'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return 'Untertitel-Stil'; + case 'settings.subtitleStylingDescription': return 'Aussehen von Untertiteln anpassen'; + case 'settings.smallSkipDuration': return 'Kleine Sprungdauer'; + case 'settings.largeSkipDuration': return 'Große Sprungdauer'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} Sekunden'; + case 'settings.defaultSleepTimer': return 'Standard-Sleep-Timer'; + case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} Minuten'; + case 'settings.rememberTrackSelections': return 'Spurauswahl pro Serie/Film merken'; + case 'settings.rememberTrackSelectionsDescription': return 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; + case 'settings.unwatchedOnly': return 'Nur ungesehene'; + case 'settings.unwatchedOnlyDescription': return 'Nur ungesehene Episoden in die Shuffle-Warteschlange aufnehmen'; + case 'settings.shuffleOrderNavigation': return 'Navigation der Shuffle-Reihenfolge'; + case 'settings.shuffleOrderNavigationDescription': return 'Weiter/Zurück folgt der zufälligen Reihenfolge'; + case 'settings.loopShuffleQueue': return 'Shuffle-Warteschlange wiederholen'; + case 'settings.loopShuffleQueueDescription': return 'Warteschlange neu starten, wenn das Ende erreicht ist'; + case 'settings.videoPlayerControls': return 'Videoplayer-Steuerung'; + case 'settings.keyboardShortcuts': return 'Tastenkürzel'; + case 'settings.keyboardShortcutsDescription': return 'Tastenkürzel anpassen'; + case 'settings.debugLogging': return 'Debug-Protokollierung'; + case 'settings.debugLoggingDescription': return 'Detaillierte Protokolle zur Fehleranalyse aktivieren'; + case 'settings.viewLogs': return 'Protokolle anzeigen'; + case 'settings.viewLogsDescription': return 'App-Protokolle anzeigen'; + case 'settings.clearCache': return 'Cache löschen'; + case 'settings.clearCacheDescription': return 'Löscht alle zwischengespeicherten Bilder und Daten. Die App kann danach langsamer laden.'; + case 'settings.clearCacheSuccess': return 'Cache erfolgreich gelöscht'; + case 'settings.resetSettings': return 'Einstellungen zurücksetzen'; + case 'settings.resetSettingsDescription': return 'Alle Einstellungen auf Standard zurücksetzen. Dies kann nicht rückgängig gemacht werden.'; + case 'settings.resetSettingsSuccess': return 'Einstellungen erfolgreich zurückgesetzt'; + case 'settings.shortcutsReset': return 'Tastenkürzel auf Standard zurückgesetzt'; + case 'settings.about': return 'Über'; + case 'settings.aboutDescription': return 'App-Informationen und Lizenzen'; + case 'settings.updates': return 'Updates'; + case 'settings.updateAvailable': return 'Update verfügbar'; + case 'settings.checkForUpdates': return 'Nach Updates suchen'; + case 'settings.validationErrorEnterNumber': return 'Bitte eine gültige Zahl eingeben'; + case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => 'Dauer muss zwischen ${min} und ${max} ${unit} liegen'; + case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => 'Tastenkürzel bereits zugewiesen an ${action}'; + case 'settings.shortcutUpdated': return ({required Object action}) => 'Tastenkürzel aktualisiert für ${action}'; + case 'settings.autoSkip': return 'Automatisches Überspringen'; + case 'settings.autoSkipIntro': return 'Intro automatisch überspringen'; + case 'settings.autoSkipIntroDescription': return 'Intro-Marker nach wenigen Sekunden automatisch überspringen'; + case 'settings.autoSkipCredits': return 'Abspann automatisch überspringen'; + case 'settings.autoSkipCreditsDescription': return 'Abspann automatisch überspringen und nächste Episode abspielen'; + case 'settings.autoSkipDelay': return 'Verzögerung für automatisches Überspringen'; + case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => '${seconds} Sekunden vor dem automatischen Überspringen warten'; + case 'search.hint': return 'Filme, Serien, Musik suchen...'; + case 'search.tryDifferentTerm': return 'Anderen Suchbegriff versuchen'; + case 'search.searchYourMedia': return 'In den eigenen Medien suchen'; + case 'search.enterTitleActorOrKeyword': return 'Titel, Schauspieler oder Stichwort eingeben'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Tastenkürzel festlegen für ${actionName}'; + case 'hotkeys.clearShortcut': return 'Kürzel löschen'; + case 'pinEntry.enterPin': return 'PIN eingeben'; + case 'pinEntry.showPin': return 'PIN anzeigen'; + case 'pinEntry.hidePin': return 'PIN verbergen'; + case 'fileInfo.title': return 'Dateiinfo'; + case 'fileInfo.video': return 'Video'; + case 'fileInfo.audio': return 'Audio'; + case 'fileInfo.file': return 'Datei'; + case 'fileInfo.advanced': return 'Erweitert'; + case 'fileInfo.codec': return 'Codec'; + case 'fileInfo.resolution': return 'Auflösung'; + case 'fileInfo.bitrate': return 'Bitrate'; + case 'fileInfo.frameRate': return 'Bildrate'; + case 'fileInfo.aspectRatio': return 'Seitenverhältnis'; + case 'fileInfo.profile': return 'Profil'; + case 'fileInfo.bitDepth': return 'Farbtiefe'; + case 'fileInfo.colorSpace': return 'Farbraum'; + case 'fileInfo.colorRange': return 'Farbbereich'; + case 'fileInfo.colorPrimaries': return 'Primärfarben'; + case 'fileInfo.chromaSubsampling': return 'Chroma-Subsampling'; + case 'fileInfo.channels': return 'Kanäle'; + case 'fileInfo.path': return 'Pfad'; + case 'fileInfo.size': return 'Größe'; + case 'fileInfo.container': return 'Container'; + case 'fileInfo.duration': return 'Dauer'; + case 'fileInfo.optimizedForStreaming': return 'Für Streaming optimiert'; + case 'fileInfo.has64bitOffsets': return '64-Bit-Offsets'; + case 'mediaMenu.markAsWatched': return 'Als gesehen markieren'; + case 'mediaMenu.markAsUnwatched': return 'Als ungesehen markieren'; + case 'mediaMenu.removeFromContinueWatching': return 'Aus ‚Weiterschauen‘ entfernen'; + case 'mediaMenu.goToSeries': return 'Zur Serie'; + case 'mediaMenu.goToSeason': return 'Zur Staffel'; + case 'mediaMenu.shufflePlay': return 'Zufallswiedergabe'; + case 'mediaMenu.fileInfo': return 'Dateiinfo'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, Film'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, Serie'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return 'angesehen'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} Prozent angesehen'; + case 'accessibility.mediaCardUnwatched': return 'ungeschaut'; + case 'accessibility.tapToPlay': return 'Zum Abspielen tippen'; + case 'tooltips.shufflePlay': return 'Zufallswiedergabe'; + case 'tooltips.markAsWatched': return 'Als gesehen markieren'; + case 'tooltips.markAsUnwatched': return 'Als ungesehen markieren'; + case 'videoControls.audioLabel': return 'Audio'; + case 'videoControls.subtitlesLabel': return 'Untertitel'; + case 'videoControls.resetToZero': return 'Auf 0 ms zurücksetzen'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} spielt später'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} spielt früher'; + case 'videoControls.noOffset': return 'Kein Offset'; + case 'videoControls.letterbox': return 'Letterbox'; + case 'videoControls.fillScreen': return 'Bild füllen'; + case 'videoControls.stretch': return 'Strecken'; + case 'videoControls.lockRotation': return 'Rotation sperren'; + case 'videoControls.unlockRotation': return 'Rotation entsperren'; + case 'videoControls.sleepTimer': return 'Schlaftimer'; + case 'videoControls.timerActive': return 'Schlaftimer aktiv'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Wiedergabe wird in ${duration} pausiert'; + case 'videoControls.sleepTimerCompleted': return 'Schlaftimer abgelaufen – Wiedergabe pausiert'; + case 'videoControls.playButton': return 'Wiedergeben'; + case 'videoControls.pauseButton': return 'Pause'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => '${seconds} Sekunden zurück'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => '${seconds} Sekunden vor'; + case 'videoControls.previousButton': return 'Vorherige Episode'; + case 'videoControls.nextButton': return 'Nächste Episode'; + case 'videoControls.previousChapterButton': return 'Vorheriges Kapitel'; + case 'videoControls.nextChapterButton': return 'Nächstes Kapitel'; + case 'videoControls.volumeButton': return 'Lautstärke'; + case 'videoControls.muteButton': return 'Stumm schalten'; + case 'videoControls.unmuteButton': return 'Stummschaltung aufheben'; + case 'videoControls.settingsButton': return 'Videoeinstellungen'; + case 'videoControls.audioTrackButton': return 'Tonspuren'; + case 'videoControls.subtitlesButton': return 'Untertitel'; + case 'videoControls.chaptersButton': return 'Kapitel'; + case 'videoControls.versionsButton': return 'Videoversionen'; + case 'videoControls.aspectRatioButton': return 'Seitenverhältnis'; + case 'videoControls.fullscreenButton': return 'Vollbild aktivieren'; + case 'videoControls.exitFullscreenButton': return 'Vollbild verlassen'; + case 'videoControls.rotationLockButton': return 'Dreh­sperre'; + case 'videoControls.timelineSlider': return 'Video-Zeitleiste'; + case 'videoControls.volumeSlider': return 'Lautstärkepegel'; + case 'videoControls.backButton': return 'Zurück'; + case 'userStatus.admin': return 'Eigentümer'; + case 'userStatus.restricted': return 'Eingeschränkt'; + case 'userStatus.protected': return 'Geschützt'; + case 'userStatus.current': return 'AKTUELL'; + case 'messages.markedAsWatched': return 'Als gesehen markiert'; + case 'messages.markedAsUnwatched': return 'Als ungesehen markiert'; + case 'messages.removedFromContinueWatching': return 'Aus ‚Weiterschauen‘ entfernt'; + case 'messages.errorLoading': return ({required Object error}) => 'Fehler: ${error}'; + case 'messages.fileInfoNotAvailable': return 'Dateiinfo nicht verfügbar'; + case 'messages.errorLoadingFileInfo': return ({required Object error}) => 'Fehler beim Laden der Dateiinfo: ${error}'; + case 'messages.errorLoadingSeries': return 'Fehler beim Laden der Serie'; + case 'messages.errorLoadingSeason': return 'Fehler beim Laden der Staffel'; + case 'messages.musicNotSupported': return 'Musikwiedergabe wird noch nicht unterstützt'; + case 'messages.logsCleared': return 'Protokolle gelöscht'; + case 'messages.logsCopied': return 'Protokolle in Zwischenablage kopiert'; + case 'messages.noLogsAvailable': return 'Keine Protokolle verfügbar'; + case 'messages.libraryScanning': return ({required Object title}) => 'Scanne „${title}“...'; + case 'messages.libraryScanStarted': return ({required Object title}) => 'Mediathekscan gestartet für „${title}“'; + case 'messages.libraryScanFailed': return ({required Object error}) => 'Fehler beim Scannen der Mediathek: ${error}'; + case 'messages.metadataRefreshing': return ({required Object title}) => 'Metadaten werden aktualisiert für „${title}“...'; + case 'messages.metadataRefreshStarted': return ({required Object title}) => 'Metadaten-Aktualisierung gestartet für „${title}“'; + case 'messages.metadataRefreshFailed': return ({required Object error}) => 'Metadaten konnten nicht aktualisiert werden: ${error}'; + case 'messages.noPlexToken': return 'Kein Plex-Token gefunden. Bitte erneut anmelden.'; + case 'messages.logoutConfirm': return 'Abmeldung wirklich durchführen?'; + case 'messages.noSeasonsFound': return 'Keine Staffeln gefunden'; + case 'messages.noEpisodesFound': return 'Keine Episoden in der ersten Staffel gefunden'; + case 'messages.noEpisodesFoundGeneral': return 'Keine Episoden gefunden'; + case 'messages.noResultsFound': return 'Keine Ergebnisse gefunden'; + case 'messages.sleepTimerSet': return ({required Object label}) => 'Sleep-Timer gesetzt auf ${label}'; + case 'messages.failedToSwitchProfile': return ({required Object displayName}) => 'Profilwechsel zu ${displayName} fehlgeschlagen'; + case 'messages.noItemsAvailable': return 'Keine Elemente verfügbar'; + case 'messages.failedToCreatePlayQueue': return 'Wiedergabewarteschlange konnte nicht erstellt werden'; + case 'messages.failedToCreatePlayQueueNoItems': return 'Wiedergabewarteschlange konnte nicht erstellt werden – keine Elemente'; + case 'messages.failedPlayback': return ({required Object action, required Object error}) => 'Wiedergabe für ${action} fehlgeschlagen: ${error}'; + case 'profile.noUsersAvailable': return 'Keine Benutzer verfügbar'; + case 'subtitlingStyling.stylingOptions': return 'Stiloptionen'; + case 'subtitlingStyling.fontSize': return 'Schriftgröße'; + case 'subtitlingStyling.textColor': return 'Textfarbe'; + case 'subtitlingStyling.borderSize': return 'Rahmengröße'; + case 'subtitlingStyling.borderColor': return 'Rahmenfarbe'; + case 'subtitlingStyling.backgroundOpacity': return 'Hintergrunddeckkraft'; + case 'subtitlingStyling.backgroundColor': return 'Hintergrundfarbe'; + case 'dialog.confirmAction': return 'Aktion bestätigen'; + case 'dialog.areYouSure': return 'Aktion wirklich ausführen?'; + case 'dialog.cancel': return 'Abbrechen'; + case 'dialog.playNow': return 'Jetzt abspielen'; + case 'discover.title': return 'Entdecken'; + case 'discover.switchProfile': return 'Profil wechseln'; + case 'discover.switchServer': return 'Server wechseln'; + case 'discover.logout': return 'Abmelden'; + case 'discover.noContentAvailable': return 'Kein Inhalt verfügbar'; + case 'discover.addMediaToLibraries': return 'Medien zur Mediathek hinzufügen'; + case 'discover.continueWatching': return 'Weiterschauen'; + case 'discover.recentlyAdded': return 'Kürzlich hinzugefügt'; + case 'discover.play': return 'Abspielen'; + case 'discover.resume': return 'Fortsetzen'; + case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'S${season}, E${episode} - Abspielen'; + case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => 'S${season}, E${episode} - Fortsetzen'; + case 'discover.pause': return 'Pause'; + case 'discover.overview': return 'Übersicht'; + case 'discover.cast': return 'Besetzung'; + case 'discover.seasons': return 'Staffeln'; + case 'discover.studio': return 'Studio'; + case 'discover.rating': return 'Altersfreigabe'; + case 'discover.watched': return 'Gesehen'; + case 'discover.episodeCount': return ({required Object count}) => '${count} Episoden'; + case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '${watched} von ${total} gesehen'; + case 'discover.movie': return 'Film'; + case 'discover.tvShow': return 'Serie'; + case 'discover.minutesLeft': return ({required Object minutes}) => '${minutes} Min übrig'; + case 'errors.searchFailed': return ({required Object error}) => 'Suche fehlgeschlagen: ${error}'; + case 'errors.connectionTimeout': return ({required Object context}) => 'Zeitüberschreitung beim Laden von ${context}'; + case 'errors.connectionFailed': return 'Verbindung zum Plex-Server fehlgeschlagen'; + case 'errors.failedToLoad': return ({required Object context, required Object error}) => 'Fehler beim Laden von ${context}: ${error}'; + case 'errors.noClientAvailable': return 'Kein Client verfügbar'; + case 'errors.authenticationFailed': return ({required Object error}) => 'Authentifizierung fehlgeschlagen: ${error}'; + case 'errors.couldNotLaunchUrl': return 'Auth-URL konnte nicht geöffnet werden'; + case 'errors.pleaseEnterToken': return 'Bitte Token eingeben'; + case 'errors.invalidToken': return 'Ungültiges Token'; + case 'errors.failedToVerifyToken': return ({required Object error}) => 'Token-Verifizierung fehlgeschlagen: ${error}'; + case 'errors.failedToSwitchProfile': return ({required Object displayName}) => 'Profilwechsel zu ${displayName} fehlgeschlagen'; + case 'errors.connectionFailedGeneric': return 'Verbindung fehlgeschlagen'; + case 'libraries.title': return 'Mediatheken'; + case 'libraries.scanLibraryFiles': return 'Mediatheksdateien scannen'; + case 'libraries.scanLibrary': return 'Mediathek scannen'; + case 'libraries.analyze': return 'Analysieren'; + case 'libraries.analyzeLibrary': return 'Mediathek analysieren'; + case 'libraries.refreshMetadata': return 'Metadaten aktualisieren'; + case 'libraries.emptyTrash': return 'Papierkorb leeren'; + case 'libraries.emptyingTrash': return ({required Object title}) => 'Papierkorb für „${title}“ wird geleert...'; + case 'libraries.trashEmptied': return ({required Object title}) => 'Papierkorb für „${title}“ geleert'; + case 'libraries.failedToEmptyTrash': return ({required Object error}) => 'Papierkorb konnte nicht geleert werden: ${error}'; + case 'libraries.analyzing': return ({required Object title}) => 'Analysiere „${title}“...'; + case 'libraries.analysisStarted': return ({required Object title}) => 'Analyse gestartet für „${title}“'; + case 'libraries.failedToAnalyze': return ({required Object error}) => 'Analyse der Mediathek fehlgeschlagen: ${error}'; + case 'libraries.noLibrariesFound': return 'Keine Mediatheken gefunden'; + case 'libraries.thisLibraryIsEmpty': return 'Diese Mediathek ist leer'; + case 'libraries.all': return 'Alle'; + case 'libraries.clearAll': return 'Alle löschen'; + case 'libraries.scanLibraryConfirm': return ({required Object title}) => '„${title}“ wirklich scannen?'; + case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => '„${title}“ wirklich analysieren?'; + case 'libraries.refreshMetadataConfirm': return ({required Object title}) => 'Metadaten für „${title}“ wirklich aktualisieren?'; + case 'libraries.emptyTrashConfirm': return ({required Object title}) => 'Papierkorb für „${title}“ wirklich leeren?'; + case 'libraries.manageLibraries': return 'Mediatheken verwalten'; + case 'libraries.sort': return 'Sortieren'; + case 'libraries.sortBy': return 'Sortieren nach'; + case 'libraries.filters': return 'Filter'; + case 'libraries.loadingLibraryWithCount': return ({required Object count}) => 'Lade Mediathek... (${count} Elemente geladen)'; + case 'libraries.confirmActionMessage': return 'Aktion wirklich durchführen?'; + case 'libraries.showLibrary': return 'Mediathek anzeigen'; + case 'libraries.hideLibrary': return 'Mediathek ausblenden'; + case 'libraries.libraryOptions': return 'Mediatheksoptionen'; + case 'libraries.content': return 'Bibliotheksinhalt'; + case 'libraries.selectLibrary': return 'Bibliothek auswählen'; + case 'libraries.filtersWithCount': return ({required Object count}) => 'Filter (${count})'; + case 'libraries.noRecommendations': return 'Keine Empfehlungen verfügbar'; + case 'libraries.noCollections': return 'Keine Sammlungen in dieser Mediathek'; + case 'libraries.noFoldersFound': return 'Keine Ordner gefunden'; + case 'libraries.folders': return 'Ordner'; + case 'libraries.tabs.recommended': return 'Empfohlen'; + case 'libraries.tabs.browse': return 'Durchsuchen'; + case 'libraries.tabs.collections': return 'Sammlungen'; + case 'libraries.tabs.playlists': return 'Wiedergabelisten'; + case 'libraries.groupings.all': return 'Alle'; + case 'libraries.groupings.movies': return 'Filme'; + case 'libraries.groupings.shows': return 'Serien'; + case 'libraries.groupings.seasons': return 'Staffeln'; + case 'libraries.groupings.episodes': return 'Episoden'; + case 'libraries.groupings.folders': return 'Ordner'; + case 'about.title': return 'Über'; + case 'about.openSourceLicenses': return 'Open-Source-Lizenzen'; + case 'about.versionLabel': return ({required Object version}) => 'Version ${version}'; + case 'about.appDescription': return 'Ein schöner Plex-Client für Flutter'; + case 'about.viewLicensesDescription': return 'Lizenzen von Drittanbieter-Bibliotheken anzeigen'; + case 'serverSelection.connectingToServer': return 'Verbinde mit Server...'; + case 'serverSelection.connectingToAllServers': return 'Verbinde mit allen Servern...'; + case 'serverSelection.connectToAllServers': return 'Mit allen Servern verbinden'; + case 'serverSelection.allServerConnectionsFailed': return 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.'; + case 'serverSelection.foundServers': return ({required Object count}) => '${count} Server gefunden'; + case 'serverSelection.orSelectIndividually': return 'Oder einzelnen Server auswählen:'; + case 'serverSelection.serverDebugCopied': return 'Server-Debugdaten kopiert'; + case 'serverSelection.copyDebugData': return 'Debugdaten kopieren'; + case 'serverSelection.noServersFound': return 'Keine Server gefunden'; + case 'serverSelection.malformedServerData': return ({required Object count}) => '${count} Server mit fehlerhaften Daten gefunden. Keine gültigen Server verfügbar.'; + case 'serverSelection.incompleteServerInfo': return 'Einige Serverinformationen sind unvollständig und wurden übersprungen. Plex.tv-Konto prüfen.'; + case 'serverSelection.incompleteConnectionInfo': return 'Serververbindungsinformationen unvollständig. Bitte erneut versuchen.'; + case 'serverSelection.malformedServerInfo': return ({required Object message}) => 'Serverinformationen fehlerhaft: ${message}'; + case 'serverSelection.networkConnectionFailed': return 'Netzwerkverbindung fehlgeschlagen. Internetverbindung prüfen und erneut versuchen.'; + case 'serverSelection.authenticationFailed': return 'Authentifizierung fehlgeschlagen. Bitte erneut anmelden.'; + case 'serverSelection.plexServiceUnavailable': return 'Plex-Dienst nicht verfügbar. Bitte später erneut versuchen.'; + case 'serverSelection.failedToLoadServers': return ({required Object error}) => 'Server konnten nicht geladen werden: ${error}'; + case 'hubDetail.title': return 'Titel'; + case 'hubDetail.releaseYear': return 'Erscheinungsjahr'; + case 'hubDetail.dateAdded': return 'Hinzugefügt am'; + case 'hubDetail.rating': return 'Bewertung'; + case 'hubDetail.noItemsFound': return 'Keine Elemente gefunden'; + case 'logs.title': return 'Protokolle'; + case 'logs.clearLogs': return 'Protokolle löschen'; + case 'logs.copyLogs': return 'Protokolle kopieren'; + case 'logs.exportLogs': return 'Protokolle exportieren'; + case 'logs.noLogsToShow': return 'Keine Protokolle zum Anzeigen'; + case 'logs.error': return 'Fehler:'; + case 'logs.stackTrace': return 'Stacktrace:'; + case 'licenses.relatedPackages': return 'Verwandte Pakete'; + case 'licenses.license': return 'Lizenz'; + case 'licenses.licenseNumber': return ({required Object number}) => 'Lizenz ${number}'; + case 'licenses.licensesCount': return ({required Object count}) => '${count} Lizenzen'; + case 'navigation.home': return 'Start'; + case 'navigation.search': return 'Suche'; + case 'navigation.libraries': return 'Mediatheken'; + case 'navigation.settings': return 'Einstellungen'; + case 'playlists.title': return 'Wiedergabelisten'; + case 'playlists.noPlaylists': return 'Keine Wiedergabelisten gefunden'; + case 'playlists.create': return 'Wiedergabeliste erstellen'; + case 'playlists.newPlaylist': return 'Neue Wiedergabeliste'; + case 'playlists.playlistName': return 'Name der Wiedergabeliste'; + case 'playlists.enterPlaylistName': return 'Name der Wiedergabeliste eingeben'; + case 'playlists.edit': return 'Wiedergabeliste bearbeiten'; + case 'playlists.delete': return 'Wiedergabeliste löschen'; + case 'playlists.addTo': return 'Zur Wiedergabeliste hinzufügen'; + case 'playlists.addItems': return 'Elemente hinzufügen'; + case 'playlists.removeItem': return 'Aus Wiedergabeliste entfernen'; + case 'playlists.clearPlaylist': return 'Wiedergabeliste leeren'; + case 'playlists.playAll': return 'Alle abspielen'; + case 'playlists.shuffle': return 'Zufällig'; + case 'playlists.smartPlaylist': return 'Intelligente Wiedergabeliste'; + case 'playlists.regularPlaylist': return 'Normale Wiedergabeliste'; + case 'playlists.itemCount': return ({required Object count}) => '${count} Elemente'; + case 'playlists.oneItem': return '1 Element'; + case 'playlists.emptyPlaylist': return 'Diese Wiedergabeliste ist leer'; + case 'playlists.deleteConfirm': return 'Wiedergabeliste löschen?'; + case 'playlists.deleteMessage': return ({required Object name}) => 'Soll "${name}" wirklich gelöscht werden?'; + case 'playlists.created': return 'Wiedergabeliste erstellt'; + case 'playlists.updated': return 'Wiedergabeliste aktualisiert'; + case 'playlists.deleted': return 'Wiedergabeliste gelöscht'; + case 'playlists.itemAdded': return 'Zur Wiedergabeliste hinzugefügt'; + case 'playlists.itemRemoved': return 'Aus Wiedergabeliste entfernt'; + case 'playlists.selectPlaylist': return 'Wiedergabeliste auswählen'; + case 'playlists.createNewPlaylist': return 'Neue Wiedergabeliste erstellen'; + case 'playlists.errorCreating': return 'Wiedergabeliste konnte nicht erstellt werden'; + case 'playlists.errorDeleting': return 'Wiedergabeliste konnte nicht gelöscht werden'; + case 'playlists.errorLoading': return 'Wiedergabelisten konnten nicht geladen werden'; + case 'playlists.errorAdding': return 'Konnte nicht zur Wiedergabeliste hinzugefügt werden'; + case 'playlists.errorReordering': return 'Element der Wiedergabeliste konnte nicht neu geordnet werden'; + case 'playlists.errorRemoving': return 'Konnte nicht aus der Wiedergabeliste entfernt werden'; + case 'playlists.playlist': return 'Wiedergabeliste'; + case 'collections.title': return 'Sammlungen'; + case 'collections.collection': return 'Sammlung'; + case 'collections.empty': return 'Sammlung ist leer'; + case 'collections.noItems': return 'Keine Elemente in dieser Sammlung'; + case 'collections.unknownLibrarySection': return 'Löschen nicht möglich: Unbekannte Bibliothekssektion'; + case 'collections.deleteCollection': return 'Sammlung löschen'; + case 'collections.deleteConfirm': return ({required Object title}) => 'Sind Sie sicher, dass Sie "${title}" löschen möchten? Dies kann nicht rückgängig gemacht werden.'; + case 'collections.deleted': return 'Sammlung gelöscht'; + case 'collections.deleteFailed': return 'Sammlung konnte nicht gelöscht werden'; + case 'collections.deleteFailedWithError': return ({required Object error}) => 'Sammlung konnte nicht gelöscht werden: ${error}'; + case 'collections.failedToLoadItems': return ({required Object error}) => 'Sammlungselemente konnten nicht geladen werden: ${error}'; + case 'collections.addTo': return 'Zur Sammlung hinzufügen'; + case 'collections.selectCollection': return 'Sammlung auswählen'; + case 'collections.createNewCollection': return 'Neue Sammlung erstellen'; + case 'collections.collectionName': return 'Sammlungsname'; + case 'collections.enterCollectionName': return 'Sammlungsnamen eingeben'; + case 'collections.addedToCollection': return 'Zur Sammlung hinzugefügt'; + case 'collections.errorAddingToCollection': return 'Fehler beim Hinzufügen zur Sammlung'; + case 'collections.created': return 'Sammlung erstellt'; + case 'collections.removeFromCollection': return 'Aus Sammlung entfernen'; + case 'collections.removeFromCollectionConfirm': return ({required Object title}) => '"${title}" aus dieser Sammlung entfernen?'; + case 'collections.removedFromCollection': return 'Aus Sammlung entfernt'; + case 'collections.removeFromCollectionFailed': return 'Entfernen aus Sammlung fehlgeschlagen'; + case 'collections.removeFromCollectionError': return ({required Object error}) => 'Fehler beim Entfernen aus der Sammlung: ${error}'; + default: return null; + } + } } extension on _StringsIt { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': - return 'Plezy'; - case 'app.loading': - return 'Caricamento...'; - case 'auth.signInWithPlex': - return 'Accedi con Plex'; - case 'auth.showQRCode': - return 'Mostra QR Code'; - case 'auth.cancel': - return 'Cancella'; - case 'auth.authenticate': - return 'Autenticazione'; - case 'auth.retry': - return 'Riprova'; - case 'auth.debugEnterToken': - return 'Debug: Inserisci Token Plex'; - case 'auth.plexTokenLabel': - return 'Token Auth Plex'; - case 'auth.plexTokenHint': - return 'Inserisci il tuo token di Plex.tv'; - case 'auth.authenticationTimeout': - return 'Autenticazione scaduta. Riprova.'; - case 'auth.scanQRCodeInstruction': - return 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.'; - case 'auth.waitingForAuth': - return 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.'; - case 'common.cancel': - return 'Cancella'; - case 'common.save': - return 'Salva'; - case 'common.close': - return 'Chiudi'; - case 'common.clear': - return 'Pulisci'; - case 'common.reset': - return 'Ripristina'; - case 'common.later': - return 'Più tardi'; - case 'common.submit': - return 'Invia'; - case 'common.confirm': - return 'Conferma'; - case 'common.retry': - return 'Riprova'; - case 'common.playNow': - return 'Riproduci ora'; - case 'common.logout': - return 'Disconnetti'; - case 'common.online': - return 'Online'; - case 'common.offline': - return 'Offline'; - case 'common.owned': - return 'Di proprietà'; - case 'common.shared': - return 'Condiviso'; - case 'common.current': - return 'CORRENTE'; - case 'common.unknown': - return 'Sconosciuto'; - case 'common.refresh': - return 'Aggiorna'; - case 'common.yes': - return 'Sì'; - case 'common.no': - return 'No'; - case 'common.server': - return 'Server'; - case 'common.delete': - return 'Elimina'; - case 'common.shuffle': - return 'Casuale'; - case 'common.addTo': - return 'Aggiungi a...'; - case 'screens.licenses': - return 'Licenze'; - case 'screens.selectServer': - return 'Seleziona server'; - case 'screens.switchProfile': - return 'Cambia profilo'; - case 'screens.subtitleStyling': - return 'Stile sottotitoli'; - case 'screens.search': - return 'Cerca'; - case 'screens.logs': - return 'Registro'; - case 'update.available': - return 'Aggiornamento disponibile'; - case 'update.versionAvailable': - return ({required Object version}) => 'Versione ${version} disponibile'; - case 'update.currentVersion': - return ({required Object version}) => 'Corrente: ${version}'; - case 'update.skipVersion': - return 'Salta questa versione'; - case 'update.viewRelease': - return 'Visualizza dettagli release'; - case 'update.latestVersion': - return 'La versione installata è l\'ultima disponibile'; - case 'update.checkFailed': - return 'Impossibile controllare gli aggiornamenti'; - case 'settings.title': - return 'Impostazioni'; - case 'settings.language': - return 'Lingua'; - case 'settings.theme': - return 'Tema'; - case 'settings.appearance': - return 'Aspetto'; - case 'settings.videoPlayback': - return 'Riproduzione video'; - case 'settings.shufflePlay': - return 'Riproduzione casuale'; - case 'settings.advanced': - return 'Avanzate'; - case 'settings.useSeasonPostersDescription': - return 'Mostra il poster della stagione invece del poster della serie per gli episodi'; - case 'settings.showHeroSectionDescription': - return 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; - case 'settings.secondsLabel': - return 'Secondi'; - case 'settings.minutesLabel': - return 'Minuti'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => - 'Inserisci durata (${min}-${max})'; - case 'settings.systemTheme': - return 'Sistema'; - case 'settings.systemThemeDescription': - return 'Segui le impostazioni di sistema'; - case 'settings.lightTheme': - return 'Chiaro'; - case 'settings.darkTheme': - return 'Scuro'; - case 'settings.libraryDensity': - return 'Densità libreria'; - case 'settings.compact': - return 'Compatta'; - case 'settings.compactDescription': - return 'Schede più piccole, più elementi visibili'; - case 'settings.normal': - return 'Normale'; - case 'settings.normalDescription': - return 'Dimensione predefinita'; - case 'settings.comfortable': - return 'Comoda'; - case 'settings.comfortableDescription': - return 'Schede più grandi, meno elementi visibili'; - case 'settings.viewMode': - return 'Modalità di visualizzazione'; - case 'settings.gridView': - return 'Griglia'; - case 'settings.gridViewDescription': - return 'Visualizza gli elementi in un layout a griglia'; - case 'settings.listView': - return 'Elenco'; - case 'settings.listViewDescription': - return 'Visualizza gli elementi in un layout a elenco'; - case 'settings.useSeasonPosters': - return 'Usa poster delle stagioni'; - case 'settings.showHeroSection': - return 'Mostra sezione principale'; - case 'settings.hardwareDecoding': - return 'Decodifica Hardware'; - case 'settings.hardwareDecodingDescription': - return 'Utilizza l\'accelerazione hardware quando disponibile'; - case 'settings.bufferSize': - return 'Dimensione buffer'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return 'Stile sottotitoli'; - case 'settings.subtitleStylingDescription': - return 'Personalizza l\'aspetto dei sottotitoli'; - case 'settings.smallSkipDuration': - return 'Durata skip breve'; - case 'settings.largeSkipDuration': - return 'Durata skip lungo'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} secondi'; - case 'settings.defaultSleepTimer': - return 'Timer spegnimento predefinito'; - case 'settings.minutesUnit': - return ({required Object minutes}) => '${minutes} minuti'; - case 'settings.rememberTrackSelections': - return 'Ricorda selezioni tracce per serie/film'; - case 'settings.rememberTrackSelectionsDescription': - return 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; - case 'settings.unwatchedOnly': - return 'Solo non guardati'; - case 'settings.unwatchedOnlyDescription': - return 'Includi solo gli episodi non guardati nella coda di riproduzione casuale'; - case 'settings.shuffleOrderNavigation': - return 'Navigazione in ordine casuale'; - case 'settings.shuffleOrderNavigationDescription': - return 'I pulsanti Avanti/Indietro seguono l\'ordine casuale'; - case 'settings.loopShuffleQueue': - return 'Coda di riproduzione casuale in loop'; - case 'settings.loopShuffleQueueDescription': - return 'Riavvia la coda quando raggiungi la fine'; - case 'settings.videoPlayerControls': - return 'Controlli del lettore video'; - case 'settings.keyboardShortcuts': - return 'Scorciatoie da tastiera'; - case 'settings.keyboardShortcutsDescription': - return 'Personalizza le scorciatoie da tastiera'; - case 'settings.debugLogging': - return 'Log di debug'; - case 'settings.debugLoggingDescription': - return 'Abilita il logging dettagliato per la risoluzione dei problemi'; - case 'settings.viewLogs': - return 'Visualizza log'; - case 'settings.viewLogsDescription': - return 'Visualizza i log dell\'applicazione'; - case 'settings.clearCache': - return 'Svuota cache'; - case 'settings.clearCacheDescription': - return 'Questa opzione cancellerà tutte le immagini e i dati memorizzati nella cache. Dopo aver cancellato la cache, l\'app potrebbe impiegare più tempo per caricare i contenuti.'; - case 'settings.clearCacheSuccess': - return 'Cache cancellata correttamente'; - case 'settings.resetSettings': - return 'Ripristina impostazioni'; - case 'settings.resetSettingsDescription': - return 'Questa opzione ripristinerà tutte le impostazioni ai valori predefiniti. Non può essere annullata.'; - case 'settings.resetSettingsSuccess': - return 'Impostazioni ripristinate correttamente'; - case 'settings.shortcutsReset': - return 'Scorciatoie ripristinate alle impostazioni predefinite'; - case 'settings.about': - return 'Informazioni'; - case 'settings.aboutDescription': - return 'Informazioni sull\'app e le licenze'; - case 'settings.updates': - return 'Aggiornamenti'; - case 'settings.updateAvailable': - return 'Aggiornamento disponibile'; - case 'settings.checkForUpdates': - return 'Controlla aggiornamenti'; - case 'settings.validationErrorEnterNumber': - return 'Inserisci un numero valido'; - case 'settings.validationErrorDuration': - return ({ - required Object min, - required Object max, - required Object unit, - }) => 'la durata deve essere compresa tra ${min} e ${max} ${unit}'; - case 'settings.shortcutAlreadyAssigned': - return ({required Object action}) => - 'Scorciatoia già assegnata a ${action}'; - case 'settings.shortcutUpdated': - return ({required Object action}) => - 'Scorciatoia aggiornata per ${action}'; - case 'search.hint': - return 'Cerca film. spettacoli, musica...'; - case 'search.tryDifferentTerm': - return 'Prova altri termini di ricerca'; - case 'search.searchYourMedia': - return 'Cerca nei tuoi media'; - case 'search.enterTitleActorOrKeyword': - return 'Inserisci un titolo, attore o parola chiave'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => - 'Imposta scorciatoia per ${actionName}'; - case 'hotkeys.clearShortcut': - return 'Elimina scorciatoia'; - case 'pinEntry.enterPin': - return 'Inserisci PIN'; - case 'pinEntry.showPin': - return 'Mostra PIN'; - case 'pinEntry.hidePin': - return 'Nascondi PIN'; - case 'fileInfo.title': - return 'Info sul file'; - case 'fileInfo.video': - return 'Video'; - case 'fileInfo.audio': - return 'Audio'; - case 'fileInfo.file': - return 'File'; - case 'fileInfo.advanced': - return 'Avanzate'; - case 'fileInfo.codec': - return 'Codec'; - case 'fileInfo.resolution': - return 'Risoluzione'; - case 'fileInfo.bitrate': - return 'Bitrate'; - case 'fileInfo.frameRate': - return 'Frame Rate'; - case 'fileInfo.aspectRatio': - return 'Aspect Ratio'; - case 'fileInfo.profile': - return 'Profilo'; - case 'fileInfo.bitDepth': - return 'Profondità colore'; - case 'fileInfo.colorSpace': - return 'Spazio colore'; - case 'fileInfo.colorRange': - return 'Gamma colori'; - case 'fileInfo.colorPrimaries': - return 'Colori primari'; - case 'fileInfo.chromaSubsampling': - return 'Sottocampionamento cromatico'; - case 'fileInfo.channels': - return 'Canali'; - case 'fileInfo.path': - return 'Percorso'; - case 'fileInfo.size': - return 'Dimensione'; - case 'fileInfo.container': - return 'Contenitore'; - case 'fileInfo.duration': - return 'Durata'; - case 'fileInfo.optimizedForStreaming': - return 'Ottimizzato per lo streaming'; - case 'fileInfo.has64bitOffsets': - return 'Offset a 64-bit'; - case 'mediaMenu.markAsWatched': - return 'Segna come visto'; - case 'mediaMenu.markAsUnwatched': - return 'Segna come non visto'; - case 'mediaMenu.removeFromContinueWatching': - return 'Rimuovi da Continua a guardare'; - case 'mediaMenu.goToSeries': - return 'Vai alle serie'; - case 'mediaMenu.goToSeason': - return 'Vai alla stagione'; - case 'mediaMenu.shufflePlay': - return 'Riproduzione casuale'; - case 'mediaMenu.fileInfo': - return 'Info sul file'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, film'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, serie TV'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => - '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return 'visto'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '${percent} percento visto'; - case 'accessibility.mediaCardUnwatched': - return 'non visto'; - case 'accessibility.tapToPlay': - return 'Tocca per riprodurre'; - case 'tooltips.shufflePlay': - return 'Riproduzione casuale'; - case 'tooltips.markAsWatched': - return 'Segna come visto'; - case 'tooltips.markAsUnwatched': - return 'Segna come non visto'; - case 'videoControls.audioLabel': - return 'Audio'; - case 'videoControls.subtitlesLabel': - return 'Sottotitoli'; - case 'videoControls.resetToZero': - return 'Riporta a 0ms'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => - '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => - '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} riprodotto dopo'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} riprodotto prima'; - case 'videoControls.noOffset': - return 'Nessun offset'; - case 'videoControls.letterbox': - return 'Letterbox'; - case 'videoControls.fillScreen': - return 'Riempi schermo'; - case 'videoControls.stretch': - return 'Allunga'; - case 'videoControls.lockRotation': - return 'Blocca rotazione'; - case 'videoControls.unlockRotation': - return 'Sblocca rotazione'; - case 'videoControls.sleepTimer': - return 'Timer di spegnimento'; - case 'videoControls.timerActive': - return 'Timer attivo'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => - 'La riproduzione si interromperà tra ${duration}'; - case 'videoControls.sleepTimerCompleted': - return 'Timer di spegnimento completato - riproduzione in pausa'; - case 'videoControls.playButton': - return 'Riproduci'; - case 'videoControls.pauseButton': - return 'Pausa'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => 'Riavvolgi di ${seconds} secondi'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => 'Avanza di ${seconds} secondi'; - case 'videoControls.previousButton': - return 'Episodio precedente'; - case 'videoControls.nextButton': - return 'Episodio successivo'; - case 'videoControls.previousChapterButton': - return 'Capitolo precedente'; - case 'videoControls.nextChapterButton': - return 'Capitolo successivo'; - case 'videoControls.volumeButton': - return 'Volume'; - case 'videoControls.muteButton': - return 'Silenzia'; - case 'videoControls.unmuteButton': - return 'Riattiva audio'; - case 'videoControls.settingsButton': - return 'Impostazioni video'; - case 'videoControls.audioTrackButton': - return 'Tracce audio'; - case 'videoControls.subtitlesButton': - return 'Sottotitoli'; - case 'videoControls.chaptersButton': - return 'Capitoli'; - case 'videoControls.versionsButton': - return 'Versioni video'; - case 'videoControls.aspectRatioButton': - return 'Proporzioni'; - case 'videoControls.fullscreenButton': - return 'Attiva schermo intero'; - case 'videoControls.exitFullscreenButton': - return 'Esci da schermo intero'; - case 'videoControls.rotationLockButton': - return 'Blocco rotazione'; - case 'videoControls.timelineSlider': - return 'Timeline video'; - case 'videoControls.volumeSlider': - return 'Livello volume'; - case 'videoControls.backButton': - return 'Indietro'; - case 'userStatus.admin': - return 'Admin'; - case 'userStatus.restricted': - return 'Limitato'; - case 'userStatus.protected': - return 'Protetto'; - case 'userStatus.current': - return 'ATTUALE'; - case 'messages.markedAsWatched': - return 'Segna come visto'; - case 'messages.markedAsUnwatched': - return 'Segna come non visto'; - case 'messages.removedFromContinueWatching': - return 'Rimosso da Continua a guardare'; - case 'messages.errorLoading': - return ({required Object error}) => 'Errore: ${error}'; - case 'messages.fileInfoNotAvailable': - return 'Informazioni sul file non disponibili'; - case 'messages.errorLoadingFileInfo': - return ({required Object error}) => - 'Errore caricamento informazioni sul file: ${error}'; - case 'messages.errorLoadingSeries': - return 'Errore caricamento serie'; - case 'messages.errorLoadingSeason': - return 'Errore caricamento stagione'; - case 'messages.musicNotSupported': - return 'La riproduzione musicale non è ancora supportata'; - case 'messages.logsCleared': - return 'Log eliminati'; - case 'messages.logsCopied': - return 'Log copiati negli appunti'; - case 'messages.noLogsAvailable': - return 'Nessun log disponibile'; - case 'messages.libraryScanning': - return ({required Object title}) => 'Scansione "${title}"...'; - case 'messages.libraryScanStarted': - return ({required Object title}) => - 'Scansione libreria iniziata per "${title}"'; - case 'messages.libraryScanFailed': - return ({required Object error}) => - 'Impossibile eseguire scansione della libreria: ${error}'; - case 'messages.metadataRefreshing': - return ({required Object title}) => - 'Aggiornamento metadati per "${title}"...'; - case 'messages.metadataRefreshStarted': - return ({required Object title}) => - 'Aggiornamento metadati per "${title}"'; - case 'messages.metadataRefreshFailed': - return ({required Object error}) => - 'Errore aggiornamento metadati: ${error}'; - case 'messages.noPlexToken': - return 'Nessun token Plex trovato. Riesegui l\'accesso.'; - case 'messages.logoutConfirm': - return 'Sei sicuro di volerti disconnettere?'; - case 'messages.noSeasonsFound': - return 'Nessuna stagione trovata'; - case 'messages.noEpisodesFound': - return 'Nessun episodio trovato nella prima stagione'; - case 'messages.noEpisodesFoundGeneral': - return 'Nessun episodio trovato'; - case 'messages.noResultsFound': - return 'Nessun risultato'; - case 'messages.sleepTimerSet': - return ({required Object label}) => - 'Imposta timer spegnimento per ${label}'; - case 'messages.failedToSwitchProfile': - return ({required Object displayName}) => - 'Impossibile passare a ${displayName}'; - case 'messages.noItemsAvailable': - return 'Nessun elemento disponibile'; - case 'messages.failedToCreatePlayQueue': - return 'Impossibile creare la coda di riproduzione'; - case 'messages.failedToCreatePlayQueueNoItems': - return 'Impossibile creare la coda di riproduzione - nessun elemento'; - case 'messages.failedPlayback': - return ({required Object action, required Object error}) => - 'Impossibile ${action}: ${error}'; - case 'profile.noUsersAvailable': - return 'Nessun utente disponibile'; - case 'subtitlingStyling.stylingOptions': - return 'Opzioni stile'; - case 'subtitlingStyling.fontSize': - return 'Dimensione'; - case 'subtitlingStyling.textColor': - return 'Colore testo'; - case 'subtitlingStyling.borderSize': - return 'Dimensione bordo'; - case 'subtitlingStyling.borderColor': - return 'Colore bordo'; - case 'subtitlingStyling.backgroundOpacity': - return 'Opacità sfondo'; - case 'subtitlingStyling.backgroundColor': - return 'Colore sfondo'; - case 'dialog.confirmAction': - return 'Conferma azione'; - case 'dialog.areYouSure': - return 'Sei sicuro di voler eseguire questa azione?'; - case 'dialog.cancel': - return 'Cancella'; - case 'dialog.playNow': - return 'Riproduci ora'; - case 'discover.title': - return 'Esplora'; - case 'discover.switchProfile': - return 'Cambia profilo'; - case 'discover.switchServer': - return 'Cambia server'; - case 'discover.logout': - return 'Disconnetti'; - case 'discover.noContentAvailable': - return 'Nessun contenuto disponibile'; - case 'discover.addMediaToLibraries': - return 'Aggiungi alcuni file multimediali alle tue librerie'; - case 'discover.continueWatching': - return 'Continua a guardare'; - case 'discover.recentlyAdded': - return 'Aggiunti di recente'; - case 'discover.play': - return 'Riproduci'; - case 'discover.resume': - return 'Riprendi'; - case 'discover.playEpisode': - return ({required Object season, required Object episode}) => - 'Riproduci S${season}, E${episode}'; - case 'discover.resumeEpisode': - return ({required Object season, required Object episode}) => - 'Riprendi S${season}, E${episode}'; - case 'discover.pause': - return 'Pausa'; - case 'discover.overview': - return 'Panoramica'; - case 'discover.cast': - return 'Attori'; - case 'discover.seasons': - return 'Stagioni'; - case 'discover.studio': - return 'Studio'; - case 'discover.rating': - return 'Classificazione'; - case 'discover.watched': - return 'Guardato'; - case 'discover.episodeCount': - return ({required Object count}) => '${count} episodi'; - case 'discover.watchedProgress': - return ({required Object watched, required Object total}) => - '${watched}/${total} guardati'; - case 'discover.movie': - return 'Film'; - case 'discover.tvShow': - return 'Serie TV'; - case 'discover.minutesLeft': - return ({required Object minutes}) => '${minutes} minuti rimanenti'; - case 'errors.searchFailed': - return ({required Object error}) => 'Ricerca fallita: ${error}'; - case 'errors.connectionTimeout': - return ({required Object context}) => - 'Timeout connessione durante caricamento di ${context}'; - case 'errors.connectionFailed': - return 'Impossibile connettersi al server Plex.'; - case 'errors.failedToLoad': - return ({required Object context, required Object error}) => - 'Impossibile caricare ${context}: ${error}'; - case 'errors.noClientAvailable': - return 'Nessun client disponibile'; - case 'errors.authenticationFailed': - return ({required Object error}) => 'Autenticazione fallita: ${error}'; - case 'errors.couldNotLaunchUrl': - return 'Impossibile avviare URL di autenticazione'; - case 'errors.pleaseEnterToken': - return 'Inserisci token'; - case 'errors.invalidToken': - return 'Token non valido'; - case 'errors.failedToVerifyToken': - return ({required Object error}) => 'Verifica token fallita: ${error}'; - case 'errors.failedToSwitchProfile': - return ({required Object displayName}) => - 'Impossibile passare a ${displayName}'; - case 'errors.connectionFailedGeneric': - return 'Connessione fallita'; - case 'libraries.title': - return 'Librerie'; - case 'libraries.scanLibraryFiles': - return 'Scansiona file libreria'; - case 'libraries.scanLibrary': - return 'Scansiona libreria'; - case 'libraries.analyze': - return 'Analizza'; - case 'libraries.analyzeLibrary': - return 'Analizza libreria'; - case 'libraries.refreshMetadata': - return 'Aggiorna metadati'; - case 'libraries.emptyTrash': - return 'Svuota cestino'; - case 'libraries.emptyingTrash': - return ({required Object title}) => - 'Svuotamento cestino per "${title}"...'; - case 'libraries.trashEmptied': - return ({required Object title}) => 'Cestino svuotato per "${title}"'; - case 'libraries.failedToEmptyTrash': - return ({required Object error}) => - 'Impossibile svuotare cestino: ${error}'; - case 'libraries.analyzing': - return ({required Object title}) => 'Analisi "${title}"...'; - case 'libraries.analysisStarted': - return ({required Object title}) => 'Analisi iniziata per "${title}"'; - case 'libraries.failedToAnalyze': - return ({required Object error}) => - 'Impossibile analizzare libreria: ${error}'; - case 'libraries.noLibrariesFound': - return 'Nessuna libreria trovata'; - case 'libraries.thisLibraryIsEmpty': - return 'Questa libreria è vuota'; - case 'libraries.all': - return 'Tutto'; - case 'libraries.clearAll': - return 'Cancella tutto'; - case 'libraries.scanLibraryConfirm': - return ({required Object title}) => - 'Sei sicuro di voler scansionare "${title}"?'; - case 'libraries.analyzeLibraryConfirm': - return ({required Object title}) => - 'Sei sicuro di voler analizzare "${title}"?'; - case 'libraries.refreshMetadataConfirm': - return ({required Object title}) => - 'Sei sicuro di voler aggiornare i metadati per "${title}"?'; - case 'libraries.emptyTrashConfirm': - return ({required Object title}) => - 'Sei sicuro di voler svuotare il cestino per "${title}"?'; - case 'libraries.manageLibraries': - return 'Gestisci librerie'; - case 'libraries.sort': - return 'Ordina'; - case 'libraries.sortBy': - return 'Ordina per'; - case 'libraries.filters': - return 'Filtri'; - case 'libraries.loadingLibraryWithCount': - return ({required Object count}) => - 'Caricamento librerie... (${count} oggetti caricati)'; - case 'libraries.confirmActionMessage': - return 'Sei sicuro di voler eseguire questa azione?'; - case 'libraries.showLibrary': - return 'Mostra libreria'; - case 'libraries.hideLibrary': - return 'Nascondi libreria'; - case 'libraries.libraryOptions': - return 'Opzioni libreria'; - case 'libraries.content': - return 'contenuto della libreria'; - case 'libraries.selectLibrary': - return 'Seleziona libreria'; - case 'libraries.filtersWithCount': - return ({required Object count}) => 'Filtri (${count})'; - case 'libraries.noRecommendations': - return 'Nessun consiglio disponibile'; - case 'libraries.noCollections': - return 'Nessuna raccolta in questa libreria'; - case 'libraries.noFoldersFound': - return 'Nessuna cartella trovata'; - case 'libraries.folders': - return 'cartelle'; - case 'libraries.tabs.recommended': - return 'Consigliati'; - case 'libraries.tabs.browse': - return 'Esplora'; - case 'libraries.tabs.collections': - return 'Raccolte'; - case 'libraries.tabs.playlists': - return 'Playlist'; - case 'libraries.groupings.all': - return 'Tutti'; - case 'libraries.groupings.movies': - return 'Film'; - case 'libraries.groupings.shows': - return 'Serie TV'; - case 'libraries.groupings.seasons': - return 'Stagioni'; - case 'libraries.groupings.episodes': - return 'Episodi'; - case 'libraries.groupings.folders': - return 'Cartelle'; - case 'about.title': - return 'Informazioni'; - case 'about.openSourceLicenses': - return 'Licenze Open Source'; - case 'about.versionLabel': - return ({required Object version}) => 'Versione ${version}'; - case 'about.appDescription': - return 'Un bellissimo client Plex per Flutter'; - case 'about.viewLicensesDescription': - return 'Visualizza le licenze delle librerie di terze parti'; - case 'serverSelection.connectingToServer': - return 'Connessione al server...'; - case 'serverSelection.connectingToAllServers': - return 'Connessione a tutti i server...'; - case 'serverSelection.connectToAllServers': - return 'Connetti a tutti i server'; - case 'serverSelection.allServerConnectionsFailed': - return 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.'; - case 'serverSelection.foundServers': - return ({required Object count}) => 'Trovati ${count} server'; - case 'serverSelection.orSelectIndividually': - return 'Oppure seleziona un server singolarmente:'; - case 'serverSelection.serverDebugCopied': - return 'Dati di debug del server copiati negli appunti'; - case 'serverSelection.copyDebugData': - return 'Copia dati di debug'; - case 'serverSelection.noServersFound': - return 'Nessun server trovato'; - case 'serverSelection.malformedServerData': - return ({required Object count}) => - 'Trovato ${count} server con dati difettosi. Nessun server valido disponibile.'; - case 'serverSelection.incompleteServerInfo': - return 'Alcuni server presentano informazioni incomplete e sono stati ignorati. Controlla il tuo account Plex.tv.'; - case 'serverSelection.incompleteConnectionInfo': - return 'Le informazioni di connessione al server sono incomplete. Riprova.'; - case 'serverSelection.malformedServerInfo': - return ({required Object message}) => - 'Le informazioni sul server sono errate: ${message}'; - case 'serverSelection.networkConnectionFailed': - return 'Connessione di rete non riuscita. Controlla la tua connessione Internet e riprova.'; - case 'serverSelection.authenticationFailed': - return 'Autenticazione fallita. Effettua nuovamente l\'accesso.'; - case 'serverSelection.plexServiceUnavailable': - return 'Servizio Plex non disponibile. Riprova più tardi.'; - case 'serverSelection.failedToLoadServers': - return ({required Object error}) => - 'Impossibile caricare i server: ${error}'; - case 'hubDetail.title': - return 'Titolo'; - case 'hubDetail.releaseYear': - return 'Anno rilascio'; - case 'hubDetail.dateAdded': - return 'Data aggiunta'; - case 'hubDetail.rating': - return 'Valutazione'; - case 'hubDetail.noItemsFound': - return 'Nessun elemento trovato'; - case 'logs.title': - return 'Registro'; - case 'logs.clearLogs': - return 'Cancella log'; - case 'logs.copyLogs': - return 'Copia log'; - case 'logs.exportLogs': - return 'Esporta log'; - case 'logs.noLogsToShow': - return 'Nessun log da mostrare'; - case 'logs.error': - return 'Errore:'; - case 'logs.stackTrace': - return 'Traccia dello stack:'; - case 'licenses.relatedPackages': - return 'Pacchetti correlati'; - case 'licenses.license': - return 'Licenza'; - case 'licenses.licenseNumber': - return ({required Object number}) => 'Licenza ${number}'; - case 'licenses.licensesCount': - return ({required Object count}) => '${count} licenze'; - case 'navigation.home': - return 'Home'; - case 'navigation.search': - return 'Cerca'; - case 'navigation.libraries': - return 'Librerie'; - case 'navigation.settings': - return 'Impostazioni'; - case 'playlists.title': - return 'Playlist'; - case 'playlists.noPlaylists': - return 'Nessuna playlist trovata'; - case 'playlists.create': - return 'Crea playlist'; - case 'playlists.newPlaylist': - return 'Nuova playlist'; - case 'playlists.playlistName': - return 'Nome playlist'; - case 'playlists.enterPlaylistName': - return 'Inserisci nome playlist'; - case 'playlists.edit': - return 'Modifica playlist'; - case 'playlists.delete': - return 'Elimina playlist'; - case 'playlists.addTo': - return 'Aggiungi a playlist'; - case 'playlists.addItems': - return 'Aggiungi elementi'; - case 'playlists.removeItem': - return 'Rimuovi da playlist'; - case 'playlists.clearPlaylist': - return 'Svuota playlist'; - case 'playlists.playAll': - return 'Riproduci tutto'; - case 'playlists.shuffle': - return 'Casuale'; - case 'playlists.smartPlaylist': - return 'Playlist intelligente'; - case 'playlists.regularPlaylist': - return 'Playlist normale'; - case 'playlists.itemCount': - return ({required Object count}) => '${count} elementi'; - case 'playlists.oneItem': - return '1 elemento'; - case 'playlists.emptyPlaylist': - return 'Questa playlist è vuota'; - case 'playlists.deleteConfirm': - return 'Eliminare playlist?'; - case 'playlists.deleteMessage': - return ({required Object name}) => - 'Sei sicuro di voler eliminare "${name}"?'; - case 'playlists.created': - return 'Playlist creata'; - case 'playlists.updated': - return 'Playlist aggiornata'; - case 'playlists.deleted': - return 'Playlist eliminata'; - case 'playlists.itemAdded': - return 'Aggiunto alla playlist'; - case 'playlists.itemRemoved': - return 'Rimosso dalla playlist'; - case 'playlists.selectPlaylist': - return 'Seleziona playlist'; - case 'playlists.createNewPlaylist': - return 'Crea nuova playlist'; - case 'playlists.errorCreating': - return 'Errore durante la creazione della playlist'; - case 'playlists.errorDeleting': - return 'Errore durante l\'eliminazione della playlist'; - case 'playlists.errorLoading': - return 'Errore durante il caricamento delle playlist'; - case 'playlists.errorAdding': - return 'Errore durante l\'aggiunta alla playlist'; - case 'playlists.errorReordering': - return 'Errore durante il riordino dell\'elemento della playlist'; - case 'playlists.errorRemoving': - return 'Errore durante la rimozione dalla playlist'; - case 'playlists.playlist': - return 'Playlist'; - case 'collections.title': - return 'Raccolte'; - case 'collections.collection': - return 'Raccolta'; - case 'collections.empty': - return 'La raccolta è vuota'; - case 'collections.noItems': - return 'Nessun elemento in questa raccolta'; - case 'collections.unknownLibrarySection': - return 'Impossibile eliminare: sezione libreria sconosciuta'; - case 'collections.deleteCollection': - return 'Elimina raccolta'; - case 'collections.deleteConfirm': - return ({required Object title}) => - 'Sei sicuro di voler eliminare "${title}"? Questa azione non può essere annullata.'; - case 'collections.deleted': - return 'Raccolta eliminata'; - case 'collections.deleteFailed': - return 'Impossibile eliminare la raccolta'; - case 'collections.deleteFailedWithError': - return ({required Object error}) => - 'Impossibile eliminare la raccolta: ${error}'; - case 'collections.failedToLoadItems': - return ({required Object error}) => - 'Impossibile caricare gli elementi della raccolta: ${error}'; - case 'collections.addTo': - return 'Aggiungi alla raccolta'; - case 'collections.selectCollection': - return 'Seleziona raccolta'; - case 'collections.createNewCollection': - return 'Crea nuova raccolta'; - case 'collections.collectionName': - return 'Nome raccolta'; - case 'collections.enterCollectionName': - return 'Inserisci nome raccolta'; - case 'collections.addedToCollection': - return 'Aggiunto alla raccolta'; - case 'collections.errorAddingToCollection': - return 'Errore nell\'aggiunta alla raccolta'; - case 'collections.created': - return 'Raccolta creata'; - case 'collections.removeFromCollection': - return 'Rimuovi dalla raccolta'; - case 'collections.removeFromCollectionConfirm': - return ({required Object title}) => - 'Rimuovere "${title}" da questa raccolta?'; - case 'collections.removedFromCollection': - return 'Rimosso dalla raccolta'; - case 'collections.removeFromCollectionFailed': - return 'Impossibile rimuovere dalla raccolta'; - case 'collections.removeFromCollectionError': - return ({required Object error}) => - 'Errore durante la rimozione dalla raccolta: ${error}'; - default: - return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': return 'Plezy'; + case 'app.loading': return 'Caricamento...'; + case 'auth.signInWithPlex': return 'Accedi con Plex'; + case 'auth.showQRCode': return 'Mostra QR Code'; + case 'auth.cancel': return 'Cancella'; + case 'auth.authenticate': return 'Autenticazione'; + case 'auth.retry': return 'Riprova'; + case 'auth.debugEnterToken': return 'Debug: Inserisci Token Plex'; + case 'auth.plexTokenLabel': return 'Token Auth Plex'; + case 'auth.plexTokenHint': return 'Inserisci il tuo token di Plex.tv'; + case 'auth.authenticationTimeout': return 'Autenticazione scaduta. Riprova.'; + case 'auth.scanQRCodeInstruction': return 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.'; + case 'auth.waitingForAuth': return 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.'; + case 'common.cancel': return 'Cancella'; + case 'common.save': return 'Salva'; + case 'common.close': return 'Chiudi'; + case 'common.clear': return 'Pulisci'; + case 'common.reset': return 'Ripristina'; + case 'common.later': return 'Più tardi'; + case 'common.submit': return 'Invia'; + case 'common.confirm': return 'Conferma'; + case 'common.retry': return 'Riprova'; + case 'common.playNow': return 'Riproduci ora'; + case 'common.logout': return 'Disconnetti'; + case 'common.online': return 'Online'; + case 'common.offline': return 'Offline'; + case 'common.owned': return 'Di proprietà'; + case 'common.shared': return 'Condiviso'; + case 'common.current': return 'CORRENTE'; + case 'common.unknown': return 'Sconosciuto'; + case 'common.refresh': return 'Aggiorna'; + case 'common.yes': return 'Sì'; + case 'common.no': return 'No'; + case 'common.server': return 'Server'; + case 'common.delete': return 'Elimina'; + case 'common.shuffle': return 'Casuale'; + case 'common.addTo': return 'Aggiungi a...'; + case 'screens.licenses': return 'Licenze'; + case 'screens.selectServer': return 'Seleziona server'; + case 'screens.switchProfile': return 'Cambia profilo'; + case 'screens.subtitleStyling': return 'Stile sottotitoli'; + case 'screens.search': return 'Cerca'; + case 'screens.logs': return 'Registro'; + case 'update.available': return 'Aggiornamento disponibile'; + case 'update.versionAvailable': return ({required Object version}) => 'Versione ${version} disponibile'; + case 'update.currentVersion': return ({required Object version}) => 'Corrente: ${version}'; + case 'update.skipVersion': return 'Salta questa versione'; + case 'update.viewRelease': return 'Visualizza dettagli release'; + case 'update.latestVersion': return 'La versione installata è l\'ultima disponibile'; + case 'update.checkFailed': return 'Impossibile controllare gli aggiornamenti'; + case 'settings.title': return 'Impostazioni'; + case 'settings.language': return 'Lingua'; + case 'settings.theme': return 'Tema'; + case 'settings.appearance': return 'Aspetto'; + case 'settings.videoPlayback': return 'Riproduzione video'; + case 'settings.shufflePlay': return 'Riproduzione casuale'; + case 'settings.advanced': return 'Avanzate'; + case 'settings.useSeasonPostersDescription': return 'Mostra il poster della stagione invece del poster della serie per gli episodi'; + case 'settings.showHeroSectionDescription': return 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; + case 'settings.secondsLabel': return 'Secondi'; + case 'settings.minutesLabel': return 'Minuti'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => 'Inserisci durata (${min}-${max})'; + case 'settings.systemTheme': return 'Sistema'; + case 'settings.systemThemeDescription': return 'Segui le impostazioni di sistema'; + case 'settings.lightTheme': return 'Chiaro'; + case 'settings.darkTheme': return 'Scuro'; + case 'settings.libraryDensity': return 'Densità libreria'; + case 'settings.compact': return 'Compatta'; + case 'settings.compactDescription': return 'Schede più piccole, più elementi visibili'; + case 'settings.normal': return 'Normale'; + case 'settings.normalDescription': return 'Dimensione predefinita'; + case 'settings.comfortable': return 'Comoda'; + case 'settings.comfortableDescription': return 'Schede più grandi, meno elementi visibili'; + case 'settings.viewMode': return 'Modalità di visualizzazione'; + case 'settings.gridView': return 'Griglia'; + case 'settings.gridViewDescription': return 'Visualizza gli elementi in un layout a griglia'; + case 'settings.listView': return 'Elenco'; + case 'settings.listViewDescription': return 'Visualizza gli elementi in un layout a elenco'; + case 'settings.useSeasonPosters': return 'Usa poster delle stagioni'; + case 'settings.showHeroSection': return 'Mostra sezione principale'; + case 'settings.hardwareDecoding': return 'Decodifica Hardware'; + case 'settings.hardwareDecodingDescription': return 'Utilizza l\'accelerazione hardware quando disponibile'; + case 'settings.bufferSize': return 'Dimensione buffer'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return 'Stile sottotitoli'; + case 'settings.subtitleStylingDescription': return 'Personalizza l\'aspetto dei sottotitoli'; + case 'settings.smallSkipDuration': return 'Durata skip breve'; + case 'settings.largeSkipDuration': return 'Durata skip lungo'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} secondi'; + case 'settings.defaultSleepTimer': return 'Timer spegnimento predefinito'; + case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} minuti'; + case 'settings.rememberTrackSelections': return 'Ricorda selezioni tracce per serie/film'; + case 'settings.rememberTrackSelectionsDescription': return 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; + case 'settings.unwatchedOnly': return 'Solo non guardati'; + case 'settings.unwatchedOnlyDescription': return 'Includi solo gli episodi non guardati nella coda di riproduzione casuale'; + case 'settings.shuffleOrderNavigation': return 'Navigazione in ordine casuale'; + case 'settings.shuffleOrderNavigationDescription': return 'I pulsanti Avanti/Indietro seguono l\'ordine casuale'; + case 'settings.loopShuffleQueue': return 'Coda di riproduzione casuale in loop'; + case 'settings.loopShuffleQueueDescription': return 'Riavvia la coda quando raggiungi la fine'; + case 'settings.videoPlayerControls': return 'Controlli del lettore video'; + case 'settings.keyboardShortcuts': return 'Scorciatoie da tastiera'; + case 'settings.keyboardShortcutsDescription': return 'Personalizza le scorciatoie da tastiera'; + case 'settings.debugLogging': return 'Log di debug'; + case 'settings.debugLoggingDescription': return 'Abilita il logging dettagliato per la risoluzione dei problemi'; + case 'settings.viewLogs': return 'Visualizza log'; + case 'settings.viewLogsDescription': return 'Visualizza i log dell\'applicazione'; + case 'settings.clearCache': return 'Svuota cache'; + case 'settings.clearCacheDescription': return 'Questa opzione cancellerà tutte le immagini e i dati memorizzati nella cache. Dopo aver cancellato la cache, l\'app potrebbe impiegare più tempo per caricare i contenuti.'; + case 'settings.clearCacheSuccess': return 'Cache cancellata correttamente'; + case 'settings.resetSettings': return 'Ripristina impostazioni'; + case 'settings.resetSettingsDescription': return 'Questa opzione ripristinerà tutte le impostazioni ai valori predefiniti. Non può essere annullata.'; + case 'settings.resetSettingsSuccess': return 'Impostazioni ripristinate correttamente'; + case 'settings.shortcutsReset': return 'Scorciatoie ripristinate alle impostazioni predefinite'; + case 'settings.about': return 'Informazioni'; + case 'settings.aboutDescription': return 'Informazioni sull\'app e le licenze'; + case 'settings.updates': return 'Aggiornamenti'; + case 'settings.updateAvailable': return 'Aggiornamento disponibile'; + case 'settings.checkForUpdates': return 'Controlla aggiornamenti'; + case 'settings.validationErrorEnterNumber': return 'Inserisci un numero valido'; + case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => 'la durata deve essere compresa tra ${min} e ${max} ${unit}'; + case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => 'Scorciatoia già assegnata a ${action}'; + case 'settings.shortcutUpdated': return ({required Object action}) => 'Scorciatoia aggiornata per ${action}'; + case 'settings.autoSkip': return 'Salto Automatico'; + case 'settings.autoSkipIntro': return 'Salta Intro Automaticamente'; + case 'settings.autoSkipIntroDescription': return 'Salta automaticamente i marcatori dell\'intro dopo alcuni secondi'; + case 'settings.autoSkipCredits': return 'Salta Crediti Automaticamente'; + case 'settings.autoSkipCreditsDescription': return 'Salta automaticamente i crediti e riproduci l\'episodio successivo'; + case 'settings.autoSkipDelay': return 'Ritardo Salto Automatico'; + case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => 'Aspetta ${seconds} secondi prima del salto automatico'; + case 'search.hint': return 'Cerca film. spettacoli, musica...'; + case 'search.tryDifferentTerm': return 'Prova altri termini di ricerca'; + case 'search.searchYourMedia': return 'Cerca nei tuoi media'; + case 'search.enterTitleActorOrKeyword': return 'Inserisci un titolo, attore o parola chiave'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Imposta scorciatoia per ${actionName}'; + case 'hotkeys.clearShortcut': return 'Elimina scorciatoia'; + case 'pinEntry.enterPin': return 'Inserisci PIN'; + case 'pinEntry.showPin': return 'Mostra PIN'; + case 'pinEntry.hidePin': return 'Nascondi PIN'; + case 'fileInfo.title': return 'Info sul file'; + case 'fileInfo.video': return 'Video'; + case 'fileInfo.audio': return 'Audio'; + case 'fileInfo.file': return 'File'; + case 'fileInfo.advanced': return 'Avanzate'; + case 'fileInfo.codec': return 'Codec'; + case 'fileInfo.resolution': return 'Risoluzione'; + case 'fileInfo.bitrate': return 'Bitrate'; + case 'fileInfo.frameRate': return 'Frame Rate'; + case 'fileInfo.aspectRatio': return 'Aspect Ratio'; + case 'fileInfo.profile': return 'Profilo'; + case 'fileInfo.bitDepth': return 'Profondità colore'; + case 'fileInfo.colorSpace': return 'Spazio colore'; + case 'fileInfo.colorRange': return 'Gamma colori'; + case 'fileInfo.colorPrimaries': return 'Colori primari'; + case 'fileInfo.chromaSubsampling': return 'Sottocampionamento cromatico'; + case 'fileInfo.channels': return 'Canali'; + case 'fileInfo.path': return 'Percorso'; + case 'fileInfo.size': return 'Dimensione'; + case 'fileInfo.container': return 'Contenitore'; + case 'fileInfo.duration': return 'Durata'; + case 'fileInfo.optimizedForStreaming': return 'Ottimizzato per lo streaming'; + case 'fileInfo.has64bitOffsets': return 'Offset a 64-bit'; + case 'mediaMenu.markAsWatched': return 'Segna come visto'; + case 'mediaMenu.markAsUnwatched': return 'Segna come non visto'; + case 'mediaMenu.removeFromContinueWatching': return 'Rimuovi da Continua a guardare'; + case 'mediaMenu.goToSeries': return 'Vai alle serie'; + case 'mediaMenu.goToSeason': return 'Vai alla stagione'; + case 'mediaMenu.shufflePlay': return 'Riproduzione casuale'; + case 'mediaMenu.fileInfo': return 'Info sul file'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, film'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, serie TV'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return 'visto'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} percento visto'; + case 'accessibility.mediaCardUnwatched': return 'non visto'; + case 'accessibility.tapToPlay': return 'Tocca per riprodurre'; + case 'tooltips.shufflePlay': return 'Riproduzione casuale'; + case 'tooltips.markAsWatched': return 'Segna come visto'; + case 'tooltips.markAsUnwatched': return 'Segna come non visto'; + case 'videoControls.audioLabel': return 'Audio'; + case 'videoControls.subtitlesLabel': return 'Sottotitoli'; + case 'videoControls.resetToZero': return 'Riporta a 0ms'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} riprodotto dopo'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} riprodotto prima'; + case 'videoControls.noOffset': return 'Nessun offset'; + case 'videoControls.letterbox': return 'Letterbox'; + case 'videoControls.fillScreen': return 'Riempi schermo'; + case 'videoControls.stretch': return 'Allunga'; + case 'videoControls.lockRotation': return 'Blocca rotazione'; + case 'videoControls.unlockRotation': return 'Sblocca rotazione'; + case 'videoControls.sleepTimer': return 'Timer di spegnimento'; + case 'videoControls.timerActive': return 'Timer attivo'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'La riproduzione si interromperà tra ${duration}'; + case 'videoControls.sleepTimerCompleted': return 'Timer di spegnimento completato - riproduzione in pausa'; + case 'videoControls.playButton': return 'Riproduci'; + case 'videoControls.pauseButton': return 'Pausa'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Riavvolgi di ${seconds} secondi'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Avanza di ${seconds} secondi'; + case 'videoControls.previousButton': return 'Episodio precedente'; + case 'videoControls.nextButton': return 'Episodio successivo'; + case 'videoControls.previousChapterButton': return 'Capitolo precedente'; + case 'videoControls.nextChapterButton': return 'Capitolo successivo'; + case 'videoControls.volumeButton': return 'Volume'; + case 'videoControls.muteButton': return 'Silenzia'; + case 'videoControls.unmuteButton': return 'Riattiva audio'; + case 'videoControls.settingsButton': return 'Impostazioni video'; + case 'videoControls.audioTrackButton': return 'Tracce audio'; + case 'videoControls.subtitlesButton': return 'Sottotitoli'; + case 'videoControls.chaptersButton': return 'Capitoli'; + case 'videoControls.versionsButton': return 'Versioni video'; + case 'videoControls.aspectRatioButton': return 'Proporzioni'; + case 'videoControls.fullscreenButton': return 'Attiva schermo intero'; + case 'videoControls.exitFullscreenButton': return 'Esci da schermo intero'; + case 'videoControls.rotationLockButton': return 'Blocco rotazione'; + case 'videoControls.timelineSlider': return 'Timeline video'; + case 'videoControls.volumeSlider': return 'Livello volume'; + case 'videoControls.backButton': return 'Indietro'; + case 'userStatus.admin': return 'Admin'; + case 'userStatus.restricted': return 'Limitato'; + case 'userStatus.protected': return 'Protetto'; + case 'userStatus.current': return 'ATTUALE'; + case 'messages.markedAsWatched': return 'Segna come visto'; + case 'messages.markedAsUnwatched': return 'Segna come non visto'; + case 'messages.removedFromContinueWatching': return 'Rimosso da Continua a guardare'; + case 'messages.errorLoading': return ({required Object error}) => 'Errore: ${error}'; + case 'messages.fileInfoNotAvailable': return 'Informazioni sul file non disponibili'; + case 'messages.errorLoadingFileInfo': return ({required Object error}) => 'Errore caricamento informazioni sul file: ${error}'; + case 'messages.errorLoadingSeries': return 'Errore caricamento serie'; + case 'messages.errorLoadingSeason': return 'Errore caricamento stagione'; + case 'messages.musicNotSupported': return 'La riproduzione musicale non è ancora supportata'; + case 'messages.logsCleared': return 'Log eliminati'; + case 'messages.logsCopied': return 'Log copiati negli appunti'; + case 'messages.noLogsAvailable': return 'Nessun log disponibile'; + case 'messages.libraryScanning': return ({required Object title}) => 'Scansione "${title}"...'; + case 'messages.libraryScanStarted': return ({required Object title}) => 'Scansione libreria iniziata per "${title}"'; + case 'messages.libraryScanFailed': return ({required Object error}) => 'Impossibile eseguire scansione della libreria: ${error}'; + case 'messages.metadataRefreshing': return ({required Object title}) => 'Aggiornamento metadati per "${title}"...'; + case 'messages.metadataRefreshStarted': return ({required Object title}) => 'Aggiornamento metadati per "${title}"'; + case 'messages.metadataRefreshFailed': return ({required Object error}) => 'Errore aggiornamento metadati: ${error}'; + case 'messages.noPlexToken': return 'Nessun token Plex trovato. Riesegui l\'accesso.'; + case 'messages.logoutConfirm': return 'Sei sicuro di volerti disconnettere?'; + case 'messages.noSeasonsFound': return 'Nessuna stagione trovata'; + case 'messages.noEpisodesFound': return 'Nessun episodio trovato nella prima stagione'; + case 'messages.noEpisodesFoundGeneral': return 'Nessun episodio trovato'; + case 'messages.noResultsFound': return 'Nessun risultato'; + case 'messages.sleepTimerSet': return ({required Object label}) => 'Imposta timer spegnimento per ${label}'; + case 'messages.failedToSwitchProfile': return ({required Object displayName}) => 'Impossibile passare a ${displayName}'; + case 'messages.noItemsAvailable': return 'Nessun elemento disponibile'; + case 'messages.failedToCreatePlayQueue': return 'Impossibile creare la coda di riproduzione'; + case 'messages.failedToCreatePlayQueueNoItems': return 'Impossibile creare la coda di riproduzione - nessun elemento'; + case 'messages.failedPlayback': return ({required Object action, required Object error}) => 'Impossibile ${action}: ${error}'; + case 'profile.noUsersAvailable': return 'Nessun utente disponibile'; + case 'subtitlingStyling.stylingOptions': return 'Opzioni stile'; + case 'subtitlingStyling.fontSize': return 'Dimensione'; + case 'subtitlingStyling.textColor': return 'Colore testo'; + case 'subtitlingStyling.borderSize': return 'Dimensione bordo'; + case 'subtitlingStyling.borderColor': return 'Colore bordo'; + case 'subtitlingStyling.backgroundOpacity': return 'Opacità sfondo'; + case 'subtitlingStyling.backgroundColor': return 'Colore sfondo'; + case 'dialog.confirmAction': return 'Conferma azione'; + case 'dialog.areYouSure': return 'Sei sicuro di voler eseguire questa azione?'; + case 'dialog.cancel': return 'Cancella'; + case 'dialog.playNow': return 'Riproduci ora'; + case 'discover.title': return 'Esplora'; + case 'discover.switchProfile': return 'Cambia profilo'; + case 'discover.switchServer': return 'Cambia server'; + case 'discover.logout': return 'Disconnetti'; + case 'discover.noContentAvailable': return 'Nessun contenuto disponibile'; + case 'discover.addMediaToLibraries': return 'Aggiungi alcuni file multimediali alle tue librerie'; + case 'discover.continueWatching': return 'Continua a guardare'; + case 'discover.recentlyAdded': return 'Aggiunti di recente'; + case 'discover.play': return 'Riproduci'; + case 'discover.resume': return 'Riprendi'; + case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'Riproduci S${season}, E${episode}'; + case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => 'Riprendi S${season}, E${episode}'; + case 'discover.pause': return 'Pausa'; + case 'discover.overview': return 'Panoramica'; + case 'discover.cast': return 'Attori'; + case 'discover.seasons': return 'Stagioni'; + case 'discover.studio': return 'Studio'; + case 'discover.rating': return 'Classificazione'; + case 'discover.watched': return 'Guardato'; + case 'discover.episodeCount': return ({required Object count}) => '${count} episodi'; + case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '${watched}/${total} guardati'; + case 'discover.movie': return 'Film'; + case 'discover.tvShow': return 'Serie TV'; + case 'discover.minutesLeft': return ({required Object minutes}) => '${minutes} minuti rimanenti'; + case 'errors.searchFailed': return ({required Object error}) => 'Ricerca fallita: ${error}'; + case 'errors.connectionTimeout': return ({required Object context}) => 'Timeout connessione durante caricamento di ${context}'; + case 'errors.connectionFailed': return 'Impossibile connettersi al server Plex.'; + case 'errors.failedToLoad': return ({required Object context, required Object error}) => 'Impossibile caricare ${context}: ${error}'; + case 'errors.noClientAvailable': return 'Nessun client disponibile'; + case 'errors.authenticationFailed': return ({required Object error}) => 'Autenticazione fallita: ${error}'; + case 'errors.couldNotLaunchUrl': return 'Impossibile avviare URL di autenticazione'; + case 'errors.pleaseEnterToken': return 'Inserisci token'; + case 'errors.invalidToken': return 'Token non valido'; + case 'errors.failedToVerifyToken': return ({required Object error}) => 'Verifica token fallita: ${error}'; + case 'errors.failedToSwitchProfile': return ({required Object displayName}) => 'Impossibile passare a ${displayName}'; + case 'errors.connectionFailedGeneric': return 'Connessione fallita'; + case 'libraries.title': return 'Librerie'; + case 'libraries.scanLibraryFiles': return 'Scansiona file libreria'; + case 'libraries.scanLibrary': return 'Scansiona libreria'; + case 'libraries.analyze': return 'Analizza'; + case 'libraries.analyzeLibrary': return 'Analizza libreria'; + case 'libraries.refreshMetadata': return 'Aggiorna metadati'; + case 'libraries.emptyTrash': return 'Svuota cestino'; + case 'libraries.emptyingTrash': return ({required Object title}) => 'Svuotamento cestino per "${title}"...'; + case 'libraries.trashEmptied': return ({required Object title}) => 'Cestino svuotato per "${title}"'; + case 'libraries.failedToEmptyTrash': return ({required Object error}) => 'Impossibile svuotare cestino: ${error}'; + case 'libraries.analyzing': return ({required Object title}) => 'Analisi "${title}"...'; + case 'libraries.analysisStarted': return ({required Object title}) => 'Analisi iniziata per "${title}"'; + case 'libraries.failedToAnalyze': return ({required Object error}) => 'Impossibile analizzare libreria: ${error}'; + case 'libraries.noLibrariesFound': return 'Nessuna libreria trovata'; + case 'libraries.thisLibraryIsEmpty': return 'Questa libreria è vuota'; + case 'libraries.all': return 'Tutto'; + case 'libraries.clearAll': return 'Cancella tutto'; + case 'libraries.scanLibraryConfirm': return ({required Object title}) => 'Sei sicuro di voler scansionare "${title}"?'; + case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => 'Sei sicuro di voler analizzare "${title}"?'; + case 'libraries.refreshMetadataConfirm': return ({required Object title}) => 'Sei sicuro di voler aggiornare i metadati per "${title}"?'; + case 'libraries.emptyTrashConfirm': return ({required Object title}) => 'Sei sicuro di voler svuotare il cestino per "${title}"?'; + case 'libraries.manageLibraries': return 'Gestisci librerie'; + case 'libraries.sort': return 'Ordina'; + case 'libraries.sortBy': return 'Ordina per'; + case 'libraries.filters': return 'Filtri'; + case 'libraries.loadingLibraryWithCount': return ({required Object count}) => 'Caricamento librerie... (${count} oggetti caricati)'; + case 'libraries.confirmActionMessage': return 'Sei sicuro di voler eseguire questa azione?'; + case 'libraries.showLibrary': return 'Mostra libreria'; + case 'libraries.hideLibrary': return 'Nascondi libreria'; + case 'libraries.libraryOptions': return 'Opzioni libreria'; + case 'libraries.content': return 'contenuto della libreria'; + case 'libraries.selectLibrary': return 'Seleziona libreria'; + case 'libraries.filtersWithCount': return ({required Object count}) => 'Filtri (${count})'; + case 'libraries.noRecommendations': return 'Nessun consiglio disponibile'; + case 'libraries.noCollections': return 'Nessuna raccolta in questa libreria'; + case 'libraries.noFoldersFound': return 'Nessuna cartella trovata'; + case 'libraries.folders': return 'cartelle'; + case 'libraries.tabs.recommended': return 'Consigliati'; + case 'libraries.tabs.browse': return 'Esplora'; + case 'libraries.tabs.collections': return 'Raccolte'; + case 'libraries.tabs.playlists': return 'Playlist'; + case 'libraries.groupings.all': return 'Tutti'; + case 'libraries.groupings.movies': return 'Film'; + case 'libraries.groupings.shows': return 'Serie TV'; + case 'libraries.groupings.seasons': return 'Stagioni'; + case 'libraries.groupings.episodes': return 'Episodi'; + case 'libraries.groupings.folders': return 'Cartelle'; + case 'about.title': return 'Informazioni'; + case 'about.openSourceLicenses': return 'Licenze Open Source'; + case 'about.versionLabel': return ({required Object version}) => 'Versione ${version}'; + case 'about.appDescription': return 'Un bellissimo client Plex per Flutter'; + case 'about.viewLicensesDescription': return 'Visualizza le licenze delle librerie di terze parti'; + case 'serverSelection.connectingToServer': return 'Connessione al server...'; + case 'serverSelection.connectingToAllServers': return 'Connessione a tutti i server...'; + case 'serverSelection.connectToAllServers': return 'Connetti a tutti i server'; + case 'serverSelection.allServerConnectionsFailed': return 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.'; + case 'serverSelection.foundServers': return ({required Object count}) => 'Trovati ${count} server'; + case 'serverSelection.orSelectIndividually': return 'Oppure seleziona un server singolarmente:'; + case 'serverSelection.serverDebugCopied': return 'Dati di debug del server copiati negli appunti'; + case 'serverSelection.copyDebugData': return 'Copia dati di debug'; + case 'serverSelection.noServersFound': return 'Nessun server trovato'; + case 'serverSelection.malformedServerData': return ({required Object count}) => 'Trovato ${count} server con dati difettosi. Nessun server valido disponibile.'; + case 'serverSelection.incompleteServerInfo': return 'Alcuni server presentano informazioni incomplete e sono stati ignorati. Controlla il tuo account Plex.tv.'; + case 'serverSelection.incompleteConnectionInfo': return 'Le informazioni di connessione al server sono incomplete. Riprova.'; + case 'serverSelection.malformedServerInfo': return ({required Object message}) => 'Le informazioni sul server sono errate: ${message}'; + case 'serverSelection.networkConnectionFailed': return 'Connessione di rete non riuscita. Controlla la tua connessione Internet e riprova.'; + case 'serverSelection.authenticationFailed': return 'Autenticazione fallita. Effettua nuovamente l\'accesso.'; + case 'serverSelection.plexServiceUnavailable': return 'Servizio Plex non disponibile. Riprova più tardi.'; + case 'serverSelection.failedToLoadServers': return ({required Object error}) => 'Impossibile caricare i server: ${error}'; + case 'hubDetail.title': return 'Titolo'; + case 'hubDetail.releaseYear': return 'Anno rilascio'; + case 'hubDetail.dateAdded': return 'Data aggiunta'; + case 'hubDetail.rating': return 'Valutazione'; + case 'hubDetail.noItemsFound': return 'Nessun elemento trovato'; + case 'logs.title': return 'Registro'; + case 'logs.clearLogs': return 'Cancella log'; + case 'logs.copyLogs': return 'Copia log'; + case 'logs.exportLogs': return 'Esporta log'; + case 'logs.noLogsToShow': return 'Nessun log da mostrare'; + case 'logs.error': return 'Errore:'; + case 'logs.stackTrace': return 'Traccia dello stack:'; + case 'licenses.relatedPackages': return 'Pacchetti correlati'; + case 'licenses.license': return 'Licenza'; + case 'licenses.licenseNumber': return ({required Object number}) => 'Licenza ${number}'; + case 'licenses.licensesCount': return ({required Object count}) => '${count} licenze'; + case 'navigation.home': return 'Home'; + case 'navigation.search': return 'Cerca'; + case 'navigation.libraries': return 'Librerie'; + case 'navigation.settings': return 'Impostazioni'; + case 'playlists.title': return 'Playlist'; + case 'playlists.noPlaylists': return 'Nessuna playlist trovata'; + case 'playlists.create': return 'Crea playlist'; + case 'playlists.newPlaylist': return 'Nuova playlist'; + case 'playlists.playlistName': return 'Nome playlist'; + case 'playlists.enterPlaylistName': return 'Inserisci nome playlist'; + case 'playlists.edit': return 'Modifica playlist'; + case 'playlists.delete': return 'Elimina playlist'; + case 'playlists.addTo': return 'Aggiungi a playlist'; + case 'playlists.addItems': return 'Aggiungi elementi'; + case 'playlists.removeItem': return 'Rimuovi da playlist'; + case 'playlists.clearPlaylist': return 'Svuota playlist'; + case 'playlists.playAll': return 'Riproduci tutto'; + case 'playlists.shuffle': return 'Casuale'; + case 'playlists.smartPlaylist': return 'Playlist intelligente'; + case 'playlists.regularPlaylist': return 'Playlist normale'; + case 'playlists.itemCount': return ({required Object count}) => '${count} elementi'; + case 'playlists.oneItem': return '1 elemento'; + case 'playlists.emptyPlaylist': return 'Questa playlist è vuota'; + case 'playlists.deleteConfirm': return 'Eliminare playlist?'; + case 'playlists.deleteMessage': return ({required Object name}) => 'Sei sicuro di voler eliminare "${name}"?'; + case 'playlists.created': return 'Playlist creata'; + case 'playlists.updated': return 'Playlist aggiornata'; + case 'playlists.deleted': return 'Playlist eliminata'; + case 'playlists.itemAdded': return 'Aggiunto alla playlist'; + case 'playlists.itemRemoved': return 'Rimosso dalla playlist'; + case 'playlists.selectPlaylist': return 'Seleziona playlist'; + case 'playlists.createNewPlaylist': return 'Crea nuova playlist'; + case 'playlists.errorCreating': return 'Errore durante la creazione della playlist'; + case 'playlists.errorDeleting': return 'Errore durante l\'eliminazione della playlist'; + case 'playlists.errorLoading': return 'Errore durante il caricamento delle playlist'; + case 'playlists.errorAdding': return 'Errore durante l\'aggiunta alla playlist'; + case 'playlists.errorReordering': return 'Errore durante il riordino dell\'elemento della playlist'; + case 'playlists.errorRemoving': return 'Errore durante la rimozione dalla playlist'; + case 'playlists.playlist': return 'Playlist'; + case 'collections.title': return 'Raccolte'; + case 'collections.collection': return 'Raccolta'; + case 'collections.empty': return 'La raccolta è vuota'; + case 'collections.noItems': return 'Nessun elemento in questa raccolta'; + case 'collections.unknownLibrarySection': return 'Impossibile eliminare: sezione libreria sconosciuta'; + case 'collections.deleteCollection': return 'Elimina raccolta'; + case 'collections.deleteConfirm': return ({required Object title}) => 'Sei sicuro di voler eliminare "${title}"? Questa azione non può essere annullata.'; + case 'collections.deleted': return 'Raccolta eliminata'; + case 'collections.deleteFailed': return 'Impossibile eliminare la raccolta'; + case 'collections.deleteFailedWithError': return ({required Object error}) => 'Impossibile eliminare la raccolta: ${error}'; + case 'collections.failedToLoadItems': return ({required Object error}) => 'Impossibile caricare gli elementi della raccolta: ${error}'; + case 'collections.addTo': return 'Aggiungi alla raccolta'; + case 'collections.selectCollection': return 'Seleziona raccolta'; + case 'collections.createNewCollection': return 'Crea nuova raccolta'; + case 'collections.collectionName': return 'Nome raccolta'; + case 'collections.enterCollectionName': return 'Inserisci nome raccolta'; + case 'collections.addedToCollection': return 'Aggiunto alla raccolta'; + case 'collections.errorAddingToCollection': return 'Errore nell\'aggiunta alla raccolta'; + case 'collections.created': return 'Raccolta creata'; + case 'collections.removeFromCollection': return 'Rimuovi dalla raccolta'; + case 'collections.removeFromCollectionConfirm': return ({required Object title}) => 'Rimuovere "${title}" da questa raccolta?'; + case 'collections.removedFromCollection': return 'Rimosso dalla raccolta'; + case 'collections.removeFromCollectionFailed': return 'Impossibile rimuovere dalla raccolta'; + case 'collections.removeFromCollectionError': return ({required Object error}) => 'Errore durante la rimozione dalla raccolta: ${error}'; + default: return null; + } + } } extension on _StringsNl { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': - return 'Plezy'; - case 'app.loading': - return 'Laden...'; - case 'auth.signInWithPlex': - return 'Inloggen met Plex'; - case 'auth.showQRCode': - return 'Toon QR-code'; - case 'auth.cancel': - return 'Annuleren'; - case 'auth.authenticate': - return 'Authenticeren'; - case 'auth.retry': - return 'Opnieuw proberen'; - case 'auth.debugEnterToken': - return 'Debug: Voer Plex Token in'; - case 'auth.plexTokenLabel': - return 'Plex Authenticatietoken'; - case 'auth.plexTokenHint': - return 'Voer je Plex.tv token in'; - case 'auth.authenticationTimeout': - return 'Authenticatie verlopen. Probeer opnieuw.'; - case 'auth.scanQRCodeInstruction': - return 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.'; - case 'auth.waitingForAuth': - return 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.'; - case 'common.cancel': - return 'Annuleren'; - case 'common.save': - return 'Opslaan'; - case 'common.close': - return 'Sluiten'; - case 'common.clear': - return 'Wissen'; - case 'common.reset': - return 'Resetten'; - case 'common.later': - return 'Later'; - case 'common.submit': - return 'Verzenden'; - case 'common.confirm': - return 'Bevestigen'; - case 'common.retry': - return 'Opnieuw proberen'; - case 'common.playNow': - return 'Nu afspelen'; - case 'common.logout': - return 'Uitloggen'; - case 'common.online': - return 'Online'; - case 'common.offline': - return 'Offline'; - case 'common.owned': - return 'Eigendom'; - case 'common.shared': - return 'Gedeeld'; - case 'common.current': - return 'HUIDIG'; - case 'common.unknown': - return 'Onbekend'; - case 'common.refresh': - return 'Vernieuwen'; - case 'common.yes': - return 'Ja'; - case 'common.no': - return 'Nee'; - case 'common.server': - return 'Server'; - case 'common.delete': - return 'Verwijderen'; - case 'common.shuffle': - return 'Willekeurig'; - case 'common.addTo': - return 'Toevoegen aan...'; - case 'screens.licenses': - return 'Licenties'; - case 'screens.selectServer': - return 'Selecteer server'; - case 'screens.switchProfile': - return 'Wissel van profiel'; - case 'screens.subtitleStyling': - return 'Ondertitel opmaak'; - case 'screens.search': - return 'Zoeken'; - case 'screens.logs': - return 'Logbestanden'; - case 'update.available': - return 'Update beschikbaar'; - case 'update.versionAvailable': - return ({required Object version}) => - 'Versie ${version} is beschikbaar'; - case 'update.currentVersion': - return ({required Object version}) => 'Huidig: ${version}'; - case 'update.skipVersion': - return 'Deze versie overslaan'; - case 'update.viewRelease': - return 'Bekijk release'; - case 'update.latestVersion': - return 'Je hebt de nieuwste versie'; - case 'update.checkFailed': - return 'Kon niet controleren op updates'; - case 'settings.title': - return 'Instellingen'; - case 'settings.language': - return 'Taal'; - case 'settings.theme': - return 'Thema'; - case 'settings.appearance': - return 'Uiterlijk'; - case 'settings.videoPlayback': - return 'Video afspelen'; - case 'settings.shufflePlay': - return 'Willekeurig afspelen'; - case 'settings.advanced': - return 'Geavanceerd'; - case 'settings.useSeasonPostersDescription': - return 'Toon seizoenposter in plaats van serieposter voor afleveringen'; - case 'settings.showHeroSectionDescription': - return 'Toon uitgelichte inhoud carrousel op startscherm'; - case 'settings.secondsLabel': - return 'Seconden'; - case 'settings.minutesLabel': - return 'Minuten'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => - 'Voer duur in (${min}-${max})'; - case 'settings.systemTheme': - return 'Systeem'; - case 'settings.systemThemeDescription': - return 'Volg systeeminstellingen'; - case 'settings.lightTheme': - return 'Licht'; - case 'settings.darkTheme': - return 'Donker'; - case 'settings.libraryDensity': - return 'Bibliotheek dichtheid'; - case 'settings.compact': - return 'Compact'; - case 'settings.compactDescription': - return 'Kleinere kaarten, meer items zichtbaar'; - case 'settings.normal': - return 'Normaal'; - case 'settings.normalDescription': - return 'Standaard grootte'; - case 'settings.comfortable': - return 'Comfortabel'; - case 'settings.comfortableDescription': - return 'Grotere kaarten, minder items zichtbaar'; - case 'settings.viewMode': - return 'Weergavemodus'; - case 'settings.gridView': - return 'Raster'; - case 'settings.gridViewDescription': - return 'Items weergeven in een rasterindeling'; - case 'settings.listView': - return 'Lijst'; - case 'settings.listViewDescription': - return 'Items weergeven in een lijstindeling'; - case 'settings.useSeasonPosters': - return 'Gebruik seizoenposters'; - case 'settings.showHeroSection': - return 'Toon hoofdsectie'; - case 'settings.hardwareDecoding': - return 'Hardware decodering'; - case 'settings.hardwareDecodingDescription': - return 'Gebruik hardware versnelling indien beschikbaar'; - case 'settings.bufferSize': - return 'Buffer grootte'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return 'Ondertitel opmaak'; - case 'settings.subtitleStylingDescription': - return 'Pas ondertitel uiterlijk aan'; - case 'settings.smallSkipDuration': - return 'Korte skip duur'; - case 'settings.largeSkipDuration': - return 'Lange skip duur'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} seconden'; - case 'settings.defaultSleepTimer': - return 'Standaard slaap timer'; - case 'settings.minutesUnit': - return ({required Object minutes}) => 'bij ${minutes} minuten'; - case 'settings.rememberTrackSelections': - return 'Onthoud track selecties per serie/film'; - case 'settings.rememberTrackSelectionsDescription': - return 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; - case 'settings.unwatchedOnly': - return 'Alleen ongekeken'; - case 'settings.unwatchedOnlyDescription': - return 'Alleen ongekeken afleveringen opnemen in willekeurige wachtrij'; - case 'settings.shuffleOrderNavigation': - return 'Willekeurige volgorde navigatie'; - case 'settings.shuffleOrderNavigationDescription': - return 'Volgende/vorige knoppen volgen willekeurige volgorde'; - case 'settings.loopShuffleQueue': - return 'Herhaal willekeurige wachtrij'; - case 'settings.loopShuffleQueueDescription': - return 'Start wachtrij opnieuw bij het einde'; - case 'settings.videoPlayerControls': - return 'Videospeler bediening'; - case 'settings.keyboardShortcuts': - return 'Toetsenbord sneltoetsen'; - case 'settings.keyboardShortcutsDescription': - return 'Pas toetsenbord sneltoetsen aan'; - case 'settings.debugLogging': - return 'Debug logging'; - case 'settings.debugLoggingDescription': - return 'Schakel gedetailleerde logging in voor probleemoplossing'; - case 'settings.viewLogs': - return 'Bekijk logs'; - case 'settings.viewLogsDescription': - return 'Bekijk applicatie logs'; - case 'settings.clearCache': - return 'Cache wissen'; - case 'settings.clearCacheDescription': - return 'Dit wist alle gecachte afbeeldingen en gegevens. De app kan langer duren om inhoud te laden na het wissen van de cache.'; - case 'settings.clearCacheSuccess': - return 'Cache succesvol gewist'; - case 'settings.resetSettings': - return 'Instellingen resetten'; - case 'settings.resetSettingsDescription': - return 'Dit reset alle instellingen naar hun standaard waarden. Deze actie kan niet ongedaan gemaakt worden.'; - case 'settings.resetSettingsSuccess': - return 'Instellingen succesvol gereset'; - case 'settings.shortcutsReset': - return 'Sneltoetsen gereset naar standaard'; - case 'settings.about': - return 'Over'; - case 'settings.aboutDescription': - return 'App informatie en licenties'; - case 'settings.updates': - return 'Updates'; - case 'settings.updateAvailable': - return 'Update beschikbaar'; - case 'settings.checkForUpdates': - return 'Controleer op updates'; - case 'settings.validationErrorEnterNumber': - return 'Voer een geldig nummer in'; - case 'settings.validationErrorDuration': - return ({ - required Object min, - required Object max, - required Object unit, - }) => 'Duur moet tussen ${min} en ${max} ${unit} zijn'; - case 'settings.shortcutAlreadyAssigned': - return ({required Object action}) => - 'Sneltoets al toegewezen aan ${action}'; - case 'settings.shortcutUpdated': - return ({required Object action}) => - 'Sneltoets bijgewerkt voor ${action}'; - case 'search.hint': - return 'Zoek films, series, muziek...'; - case 'search.tryDifferentTerm': - return 'Probeer een andere zoekterm'; - case 'search.searchYourMedia': - return 'Zoek in je media'; - case 'search.enterTitleActorOrKeyword': - return 'Voer een titel, acteur of trefwoord in'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => - 'Stel sneltoets in voor ${actionName}'; - case 'hotkeys.clearShortcut': - return 'Wis sneltoets'; - case 'pinEntry.enterPin': - return 'Voer PIN in'; - case 'pinEntry.showPin': - return 'Toon PIN'; - case 'pinEntry.hidePin': - return 'Verberg PIN'; - case 'fileInfo.title': - return 'Bestand info'; - case 'fileInfo.video': - return 'Video'; - case 'fileInfo.audio': - return 'Audio'; - case 'fileInfo.file': - return 'Bestand'; - case 'fileInfo.advanced': - return 'Geavanceerd'; - case 'fileInfo.codec': - return 'Codec'; - case 'fileInfo.resolution': - return 'Resolutie'; - case 'fileInfo.bitrate': - return 'Bitrate'; - case 'fileInfo.frameRate': - return 'Frame rate'; - case 'fileInfo.aspectRatio': - return 'Beeldverhouding'; - case 'fileInfo.profile': - return 'Profiel'; - case 'fileInfo.bitDepth': - return 'Bit diepte'; - case 'fileInfo.colorSpace': - return 'Kleurruimte'; - case 'fileInfo.colorRange': - return 'Kleurbereik'; - case 'fileInfo.colorPrimaries': - return 'Kleurprimaires'; - case 'fileInfo.chromaSubsampling': - return 'Chroma subsampling'; - case 'fileInfo.channels': - return 'Kanalen'; - case 'fileInfo.path': - return 'Pad'; - case 'fileInfo.size': - return 'Grootte'; - case 'fileInfo.container': - return 'Container'; - case 'fileInfo.duration': - return 'Duur'; - case 'fileInfo.optimizedForStreaming': - return 'Geoptimaliseerd voor streaming'; - case 'fileInfo.has64bitOffsets': - return '64-bit Offsets'; - case 'mediaMenu.markAsWatched': - return 'Markeer als gekeken'; - case 'mediaMenu.markAsUnwatched': - return 'Markeer als ongekeken'; - case 'mediaMenu.removeFromContinueWatching': - return 'Verwijder uit Doorgaan met kijken'; - case 'mediaMenu.goToSeries': - return 'Ga naar serie'; - case 'mediaMenu.goToSeason': - return 'Ga naar seizoen'; - case 'mediaMenu.shufflePlay': - return 'Willekeurig afspelen'; - case 'mediaMenu.fileInfo': - return 'Bestand info'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, film'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, TV-serie'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => - '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return 'bekeken'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '${percent} procent bekeken'; - case 'accessibility.mediaCardUnwatched': - return 'niet bekeken'; - case 'accessibility.tapToPlay': - return 'Tik om af te spelen'; - case 'tooltips.shufflePlay': - return 'Willekeurig afspelen'; - case 'tooltips.markAsWatched': - return 'Markeer als gekeken'; - case 'tooltips.markAsUnwatched': - return 'Markeer als ongekeken'; - case 'videoControls.audioLabel': - return 'Audio'; - case 'videoControls.subtitlesLabel': - return 'Ondertitels'; - case 'videoControls.resetToZero': - return 'Reset naar 0ms'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => - '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => - '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} speelt later af'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} speelt eerder af'; - case 'videoControls.noOffset': - return 'Geen offset'; - case 'videoControls.letterbox': - return 'Letterbox'; - case 'videoControls.fillScreen': - return 'Vul scherm'; - case 'videoControls.stretch': - return 'Uitrekken'; - case 'videoControls.lockRotation': - return 'Vergrendel rotatie'; - case 'videoControls.unlockRotation': - return 'Ontgrendel rotatie'; - case 'videoControls.sleepTimer': - return 'Slaaptimer'; - case 'videoControls.timerActive': - return 'Timer actief'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => - 'Afspelen wordt gepauzeerd over ${duration}'; - case 'videoControls.sleepTimerCompleted': - return 'Slaaptimer voltooid - afspelen gepauzeerd'; - case 'videoControls.playButton': - return 'Afspelen'; - case 'videoControls.pauseButton': - return 'Pauzeren'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => - 'Terugspoelen ${seconds} seconden'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => - 'Vooruitspoelen ${seconds} seconden'; - case 'videoControls.previousButton': - return 'Vorige aflevering'; - case 'videoControls.nextButton': - return 'Volgende aflevering'; - case 'videoControls.previousChapterButton': - return 'Vorig hoofdstuk'; - case 'videoControls.nextChapterButton': - return 'Volgend hoofdstuk'; - case 'videoControls.volumeButton': - return 'Volume'; - case 'videoControls.muteButton': - return 'Dempen'; - case 'videoControls.unmuteButton': - return 'Dempen opheffen'; - case 'videoControls.settingsButton': - return 'Video-instellingen'; - case 'videoControls.audioTrackButton': - return 'Audiosporen'; - case 'videoControls.subtitlesButton': - return 'Ondertitels'; - case 'videoControls.chaptersButton': - return 'Hoofdstukken'; - case 'videoControls.versionsButton': - return 'Videoversies'; - case 'videoControls.aspectRatioButton': - return 'Beeldverhouding'; - case 'videoControls.fullscreenButton': - return 'Volledig scherm activeren'; - case 'videoControls.exitFullscreenButton': - return 'Volledig scherm verlaten'; - case 'videoControls.rotationLockButton': - return 'Rotatievergrendeling'; - case 'videoControls.timelineSlider': - return 'Videotijdlijn'; - case 'videoControls.volumeSlider': - return 'Volumeniveau'; - case 'videoControls.backButton': - return 'Terug'; - case 'userStatus.admin': - return 'Beheerder'; - case 'userStatus.restricted': - return 'Beperkt'; - case 'userStatus.protected': - return 'Beschermd'; - case 'userStatus.current': - return 'HUIDIG'; - case 'messages.markedAsWatched': - return 'Gemarkeerd als gekeken'; - case 'messages.markedAsUnwatched': - return 'Gemarkeerd als ongekeken'; - case 'messages.removedFromContinueWatching': - return 'Verwijderd uit Doorgaan met kijken'; - case 'messages.errorLoading': - return ({required Object error}) => 'Fout: ${error}'; - case 'messages.fileInfoNotAvailable': - return 'Bestand informatie niet beschikbaar'; - case 'messages.errorLoadingFileInfo': - return ({required Object error}) => - 'Fout bij laden bestand info: ${error}'; - case 'messages.errorLoadingSeries': - return 'Fout bij laden serie'; - case 'messages.errorLoadingSeason': - return 'Fout bij laden seizoen'; - case 'messages.musicNotSupported': - return 'Muziek afspelen wordt nog niet ondersteund'; - case 'messages.logsCleared': - return 'Logs gewist'; - case 'messages.logsCopied': - return 'Logs gekopieerd naar klembord'; - case 'messages.noLogsAvailable': - return 'Geen logs beschikbaar'; - case 'messages.libraryScanning': - return ({required Object title}) => 'Scannen "${title}"...'; - case 'messages.libraryScanStarted': - return ({required Object title}) => - 'Bibliotheek scan gestart voor "${title}"'; - case 'messages.libraryScanFailed': - return ({required Object error}) => - 'Kon bibliotheek niet scannen: ${error}'; - case 'messages.metadataRefreshing': - return ({required Object title}) => - 'Metadata vernieuwen voor "${title}"...'; - case 'messages.metadataRefreshStarted': - return ({required Object title}) => - 'Metadata vernieuwen gestart voor "${title}"'; - case 'messages.metadataRefreshFailed': - return ({required Object error}) => - 'Kon metadata niet vernieuwen: ${error}'; - case 'messages.noPlexToken': - return 'Geen Plex token gevonden. Log opnieuw in.'; - case 'messages.logoutConfirm': - return 'Weet je zeker dat je wilt uitloggen?'; - case 'messages.noSeasonsFound': - return 'Geen seizoenen gevonden'; - case 'messages.noEpisodesFound': - return 'Geen afleveringen gevonden in eerste seizoen'; - case 'messages.noEpisodesFoundGeneral': - return 'Geen afleveringen gevonden'; - case 'messages.noResultsFound': - return 'Geen resultaten gevonden'; - case 'messages.sleepTimerSet': - return ({required Object label}) => - 'Slaap timer ingesteld voor ${label}'; - case 'messages.failedToSwitchProfile': - return ({required Object displayName}) => - 'Kon niet wisselen naar ${displayName}'; - case 'messages.noItemsAvailable': - return 'Geen items beschikbaar'; - case 'messages.failedToCreatePlayQueue': - return 'Kan afspeelwachtrij niet maken'; - case 'messages.failedToCreatePlayQueueNoItems': - return 'Kan afspeelwachtrij niet maken - geen items'; - case 'messages.failedPlayback': - return ({required Object action, required Object error}) => - 'Afspelen van ${action} mislukt: ${error}'; - case 'profile.noUsersAvailable': - return 'Geen gebruikers beschikbaar'; - case 'subtitlingStyling.stylingOptions': - return 'Opmaak opties'; - case 'subtitlingStyling.fontSize': - return 'Lettergrootte'; - case 'subtitlingStyling.textColor': - return 'Tekstkleur'; - case 'subtitlingStyling.borderSize': - return 'Rand grootte'; - case 'subtitlingStyling.borderColor': - return 'Randkleur'; - case 'subtitlingStyling.backgroundOpacity': - return 'Achtergrond transparantie'; - case 'subtitlingStyling.backgroundColor': - return 'Achtergrondkleur'; - case 'dialog.confirmAction': - return 'Bevestig actie'; - case 'dialog.areYouSure': - return 'Weet je zeker dat je deze actie wilt uitvoeren?'; - case 'dialog.cancel': - return 'Annuleren'; - case 'dialog.playNow': - return 'Nu afspelen'; - case 'discover.title': - return 'Ontdekken'; - case 'discover.switchProfile': - return 'Wissel van profiel'; - case 'discover.switchServer': - return 'Wissel van server'; - case 'discover.logout': - return 'Uitloggen'; - case 'discover.noContentAvailable': - return 'Geen inhoud beschikbaar'; - case 'discover.addMediaToLibraries': - return 'Voeg wat media toe aan je bibliotheken'; - case 'discover.continueWatching': - return 'Verder kijken'; - case 'discover.recentlyAdded': - return 'Recent toegevoegd'; - case 'discover.play': - return 'Afspelen'; - case 'discover.resume': - return 'Hervatten'; - case 'discover.playEpisode': - return ({required Object season, required Object episode}) => - 'Speel S${season}, E${episode}'; - case 'discover.resumeEpisode': - return ({required Object season, required Object episode}) => - 'Hervat S${season}, E${episode}'; - case 'discover.pause': - return 'Pauzeren'; - case 'discover.overview': - return 'Overzicht'; - case 'discover.cast': - return 'Acteurs'; - case 'discover.seasons': - return 'Seizoenen'; - case 'discover.studio': - return 'Studio'; - case 'discover.rating': - return 'Leeftijd'; - case 'discover.watched': - return 'Bekeken'; - case 'discover.episodeCount': - return ({required Object count}) => '${count} afleveringen'; - case 'discover.watchedProgress': - return ({required Object watched, required Object total}) => - '${watched}/${total} gekeken'; - case 'discover.movie': - return 'Film'; - case 'discover.tvShow': - return 'TV Serie'; - case 'discover.minutesLeft': - return ({required Object minutes}) => '${minutes} min over'; - case 'errors.searchFailed': - return ({required Object error}) => 'Zoeken mislukt: ${error}'; - case 'errors.connectionTimeout': - return ({required Object context}) => - 'Verbinding time-out tijdens laden ${context}'; - case 'errors.connectionFailed': - return 'Kan geen verbinding maken met Plex server'; - case 'errors.failedToLoad': - return ({required Object context, required Object error}) => - 'Kon ${context} niet laden: ${error}'; - case 'errors.noClientAvailable': - return 'Geen client beschikbaar'; - case 'errors.authenticationFailed': - return ({required Object error}) => 'Authenticatie mislukt: ${error}'; - case 'errors.couldNotLaunchUrl': - return 'Kon auth URL niet openen'; - case 'errors.pleaseEnterToken': - return 'Voer een token in'; - case 'errors.invalidToken': - return 'Ongeldig token'; - case 'errors.failedToVerifyToken': - return ({required Object error}) => - 'Kon token niet verifiëren: ${error}'; - case 'errors.failedToSwitchProfile': - return ({required Object displayName}) => - 'Kon niet wisselen naar ${displayName}'; - case 'errors.connectionFailedGeneric': - return 'Verbinding mislukt'; - case 'libraries.title': - return 'Bibliotheken'; - case 'libraries.scanLibraryFiles': - return 'Scan bibliotheek bestanden'; - case 'libraries.scanLibrary': - return 'Scan bibliotheek'; - case 'libraries.analyze': - return 'Analyseren'; - case 'libraries.analyzeLibrary': - return 'Analyseer bibliotheek'; - case 'libraries.refreshMetadata': - return 'Vernieuw metadata'; - case 'libraries.emptyTrash': - return 'Prullenbak legen'; - case 'libraries.emptyingTrash': - return ({required Object title}) => - 'Prullenbak legen voor "${title}"...'; - case 'libraries.trashEmptied': - return ({required Object title}) => - 'Prullenbak geleegd voor "${title}"'; - case 'libraries.failedToEmptyTrash': - return ({required Object error}) => - 'Kon prullenbak niet legen: ${error}'; - case 'libraries.analyzing': - return ({required Object title}) => 'Analyseren "${title}"...'; - case 'libraries.analysisStarted': - return ({required Object title}) => 'Analyse gestart voor "${title}"'; - case 'libraries.failedToAnalyze': - return ({required Object error}) => - 'Kon bibliotheek niet analyseren: ${error}'; - case 'libraries.noLibrariesFound': - return 'Geen bibliotheken gevonden'; - case 'libraries.thisLibraryIsEmpty': - return 'Deze bibliotheek is leeg'; - case 'libraries.all': - return 'Alles'; - case 'libraries.clearAll': - return 'Alles wissen'; - case 'libraries.scanLibraryConfirm': - return ({required Object title}) => - 'Weet je zeker dat je "${title}" wilt scannen?'; - case 'libraries.analyzeLibraryConfirm': - return ({required Object title}) => - 'Weet je zeker dat je "${title}" wilt analyseren?'; - case 'libraries.refreshMetadataConfirm': - return ({required Object title}) => - 'Weet je zeker dat je metadata wilt vernieuwen voor "${title}"?'; - case 'libraries.emptyTrashConfirm': - return ({required Object title}) => - 'Weet je zeker dat je de prullenbak wilt legen voor "${title}"?'; - case 'libraries.manageLibraries': - return 'Beheer bibliotheken'; - case 'libraries.sort': - return 'Sorteren'; - case 'libraries.sortBy': - return 'Sorteer op'; - case 'libraries.filters': - return 'Filters'; - case 'libraries.loadingLibraryWithCount': - return ({required Object count}) => - 'Bibliotheek laden... (${count} items geladen)'; - case 'libraries.confirmActionMessage': - return 'Weet je zeker dat je deze actie wilt uitvoeren?'; - case 'libraries.showLibrary': - return 'Toon bibliotheek'; - case 'libraries.hideLibrary': - return 'Verberg bibliotheek'; - case 'libraries.libraryOptions': - return 'Bibliotheek opties'; - case 'libraries.content': - return 'bibliotheekinhoud'; - case 'libraries.selectLibrary': - return 'Bibliotheek kiezen'; - case 'libraries.filtersWithCount': - return ({required Object count}) => 'Filters (${count})'; - case 'libraries.noRecommendations': - return 'Geen aanbevelingen beschikbaar'; - case 'libraries.noCollections': - return 'Geen collecties in deze bibliotheek'; - case 'libraries.noFoldersFound': - return 'Geen mappen gevonden'; - case 'libraries.folders': - return 'mappen'; - case 'libraries.tabs.recommended': - return 'Aanbevolen'; - case 'libraries.tabs.browse': - return 'Bladeren'; - case 'libraries.tabs.collections': - return 'Collecties'; - case 'libraries.tabs.playlists': - return 'Afspeellijsten'; - case 'libraries.groupings.all': - return 'Alles'; - case 'libraries.groupings.movies': - return 'Films'; - case 'libraries.groupings.shows': - return 'Series'; - case 'libraries.groupings.seasons': - return 'Seizoenen'; - case 'libraries.groupings.episodes': - return 'Afleveringen'; - case 'libraries.groupings.folders': - return 'Mappen'; - case 'about.title': - return 'Over'; - case 'about.openSourceLicenses': - return 'Open Source licenties'; - case 'about.versionLabel': - return ({required Object version}) => 'Versie ${version}'; - case 'about.appDescription': - return 'Een mooie Plex client voor Flutter'; - case 'about.viewLicensesDescription': - return 'Bekijk licenties van third-party bibliotheken'; - case 'serverSelection.connectingToServer': - return 'Verbinden met server...'; - case 'serverSelection.connectingToAllServers': - return 'Verbinden met alle servers...'; - case 'serverSelection.connectToAllServers': - return 'Verbind met alle servers'; - case 'serverSelection.allServerConnectionsFailed': - return 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.'; - case 'serverSelection.foundServers': - return ({required Object count}) => '${count} server(s) gevonden'; - case 'serverSelection.orSelectIndividually': - return 'Of selecteer een server individueel:'; - case 'serverSelection.serverDebugCopied': - return 'Server debug gegevens gekopieerd naar klembord'; - case 'serverSelection.copyDebugData': - return 'Kopieer debug gegevens'; - case 'serverSelection.noServersFound': - return 'Geen servers gevonden'; - case 'serverSelection.malformedServerData': - return ({required Object count}) => - '${count} server(s) gevonden met verkeerde data. Geen geldige servers beschikbaar.'; - case 'serverSelection.incompleteServerInfo': - return 'Sommige servers hebben incomplete informatie en zijn overgeslagen. Controleer je Plex.tv account.'; - case 'serverSelection.incompleteConnectionInfo': - return 'Server verbinding informatie is incompleet. Probeer opnieuw.'; - case 'serverSelection.malformedServerInfo': - return ({required Object message}) => - 'Server informatie is verkeerd geformatteerd: ${message}'; - case 'serverSelection.networkConnectionFailed': - return 'Netwerkverbinding mislukt. Controleer je internetverbinding en probeer opnieuw.'; - case 'serverSelection.authenticationFailed': - return 'Authenticatie mislukt. Log opnieuw in.'; - case 'serverSelection.plexServiceUnavailable': - return 'Plex service niet beschikbaar. Probeer later opnieuw.'; - case 'serverSelection.failedToLoadServers': - return ({required Object error}) => 'Kon servers niet laden: ${error}'; - case 'hubDetail.title': - return 'Titel'; - case 'hubDetail.releaseYear': - return 'Uitgavejaar'; - case 'hubDetail.dateAdded': - return 'Datum toegevoegd'; - case 'hubDetail.rating': - return 'Beoordeling'; - case 'hubDetail.noItemsFound': - return 'Geen items gevonden'; - case 'logs.title': - return 'Logbestanden'; - case 'logs.clearLogs': - return 'Wis logs'; - case 'logs.copyLogs': - return 'Kopieer logs'; - case 'logs.exportLogs': - return 'Exporteer logs'; - case 'logs.noLogsToShow': - return 'Geen logs om te tonen'; - case 'logs.error': - return 'Fout:'; - case 'logs.stackTrace': - return 'Stacktracering:'; - case 'licenses.relatedPackages': - return 'Gerelateerde pakketten'; - case 'licenses.license': - return 'Licentie'; - case 'licenses.licenseNumber': - return ({required Object number}) => 'Licentie ${number}'; - case 'licenses.licensesCount': - return ({required Object count}) => '${count} licenties'; - case 'navigation.home': - return 'Thuis'; - case 'navigation.search': - return 'Zoeken'; - case 'navigation.libraries': - return 'Bibliotheken'; - case 'navigation.settings': - return 'Instellingen'; - case 'playlists.title': - return 'Afspeellijsten'; - case 'playlists.noPlaylists': - return 'Geen afspeellijsten gevonden'; - case 'playlists.create': - return 'Afspeellijst maken'; - case 'playlists.newPlaylist': - return 'Nieuwe afspeellijst'; - case 'playlists.playlistName': - return 'Naam afspeellijst'; - case 'playlists.enterPlaylistName': - return 'Voer naam afspeellijst in'; - case 'playlists.edit': - return 'Afspeellijst bewerken'; - case 'playlists.delete': - return 'Afspeellijst verwijderen'; - case 'playlists.addTo': - return 'Toevoegen aan afspeellijst'; - case 'playlists.addItems': - return 'Items toevoegen'; - case 'playlists.removeItem': - return 'Verwijderen uit afspeellijst'; - case 'playlists.clearPlaylist': - return 'Afspeellijst wissen'; - case 'playlists.playAll': - return 'Alles afspelen'; - case 'playlists.shuffle': - return 'Willekeurig'; - case 'playlists.smartPlaylist': - return 'Slimme afspeellijst'; - case 'playlists.regularPlaylist': - return 'Normale afspeellijst'; - case 'playlists.itemCount': - return ({required Object count}) => '${count} items'; - case 'playlists.oneItem': - return '1 item'; - case 'playlists.emptyPlaylist': - return 'Deze afspeellijst is leeg'; - case 'playlists.deleteConfirm': - return 'Afspeellijst verwijderen?'; - case 'playlists.deleteMessage': - return ({required Object name}) => - 'Weet je zeker dat je "${name}" wilt verwijderen?'; - case 'playlists.created': - return 'Afspeellijst gemaakt'; - case 'playlists.updated': - return 'Afspeellijst bijgewerkt'; - case 'playlists.deleted': - return 'Afspeellijst verwijderd'; - case 'playlists.itemAdded': - return 'Toegevoegd aan afspeellijst'; - case 'playlists.itemRemoved': - return 'Verwijderd uit afspeellijst'; - case 'playlists.selectPlaylist': - return 'Selecteer afspeellijst'; - case 'playlists.createNewPlaylist': - return 'Nieuwe afspeellijst maken'; - case 'playlists.errorCreating': - return 'Fout bij maken afspeellijst'; - case 'playlists.errorDeleting': - return 'Fout bij verwijderen afspeellijst'; - case 'playlists.errorLoading': - return 'Fout bij laden afspeellijsten'; - case 'playlists.errorAdding': - return 'Fout bij toevoegen aan afspeellijst'; - case 'playlists.errorReordering': - return 'Fout bij herschikken van afspeellijstitem'; - case 'playlists.errorRemoving': - return 'Fout bij verwijderen uit afspeellijst'; - case 'playlists.playlist': - return 'Afspeellijst'; - case 'collections.title': - return 'Collecties'; - case 'collections.collection': - return 'Collectie'; - case 'collections.empty': - return 'Collectie is leeg'; - case 'collections.noItems': - return 'Geen items in deze collectie'; - case 'collections.unknownLibrarySection': - return 'Kan niet verwijderen: onbekende bibliotheeksectie'; - case 'collections.deleteCollection': - return 'Collectie verwijderen'; - case 'collections.deleteConfirm': - return ({required Object title}) => - 'Weet je zeker dat je "${title}" wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.'; - case 'collections.deleted': - return 'Collectie verwijderd'; - case 'collections.deleteFailed': - return 'Collectie verwijderen mislukt'; - case 'collections.deleteFailedWithError': - return ({required Object error}) => - 'Collectie verwijderen mislukt: ${error}'; - case 'collections.failedToLoadItems': - return ({required Object error}) => - 'Collectie-items laden mislukt: ${error}'; - case 'collections.addTo': - return 'Toevoegen aan collectie'; - case 'collections.selectCollection': - return 'Selecteer collectie'; - case 'collections.createNewCollection': - return 'Nieuwe collectie maken'; - case 'collections.collectionName': - return 'Collectienaam'; - case 'collections.enterCollectionName': - return 'Voer collectienaam in'; - case 'collections.addedToCollection': - return 'Toegevoegd aan collectie'; - case 'collections.errorAddingToCollection': - return 'Fout bij toevoegen aan collectie'; - case 'collections.created': - return 'Collectie gemaakt'; - case 'collections.removeFromCollection': - return 'Verwijderen uit collectie'; - case 'collections.removeFromCollectionConfirm': - return ({required Object title}) => - '"${title}" uit deze collectie verwijderen?'; - case 'collections.removedFromCollection': - return 'Uit collectie verwijderd'; - case 'collections.removeFromCollectionFailed': - return 'Verwijderen uit collectie mislukt'; - case 'collections.removeFromCollectionError': - return ({required Object error}) => - 'Fout bij verwijderen uit collectie: ${error}'; - default: - return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': return 'Plezy'; + case 'app.loading': return 'Laden...'; + case 'auth.signInWithPlex': return 'Inloggen met Plex'; + case 'auth.showQRCode': return 'Toon QR-code'; + case 'auth.cancel': return 'Annuleren'; + case 'auth.authenticate': return 'Authenticeren'; + case 'auth.retry': return 'Opnieuw proberen'; + case 'auth.debugEnterToken': return 'Debug: Voer Plex Token in'; + case 'auth.plexTokenLabel': return 'Plex Authenticatietoken'; + case 'auth.plexTokenHint': return 'Voer je Plex.tv token in'; + case 'auth.authenticationTimeout': return 'Authenticatie verlopen. Probeer opnieuw.'; + case 'auth.scanQRCodeInstruction': return 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.'; + case 'auth.waitingForAuth': return 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.'; + case 'common.cancel': return 'Annuleren'; + case 'common.save': return 'Opslaan'; + case 'common.close': return 'Sluiten'; + case 'common.clear': return 'Wissen'; + case 'common.reset': return 'Resetten'; + case 'common.later': return 'Later'; + case 'common.submit': return 'Verzenden'; + case 'common.confirm': return 'Bevestigen'; + case 'common.retry': return 'Opnieuw proberen'; + case 'common.playNow': return 'Nu afspelen'; + case 'common.logout': return 'Uitloggen'; + case 'common.online': return 'Online'; + case 'common.offline': return 'Offline'; + case 'common.owned': return 'Eigendom'; + case 'common.shared': return 'Gedeeld'; + case 'common.current': return 'HUIDIG'; + case 'common.unknown': return 'Onbekend'; + case 'common.refresh': return 'Vernieuwen'; + case 'common.yes': return 'Ja'; + case 'common.no': return 'Nee'; + case 'common.server': return 'Server'; + case 'common.delete': return 'Verwijderen'; + case 'common.shuffle': return 'Willekeurig'; + case 'common.addTo': return 'Toevoegen aan...'; + case 'screens.licenses': return 'Licenties'; + case 'screens.selectServer': return 'Selecteer server'; + case 'screens.switchProfile': return 'Wissel van profiel'; + case 'screens.subtitleStyling': return 'Ondertitel opmaak'; + case 'screens.search': return 'Zoeken'; + case 'screens.logs': return 'Logbestanden'; + case 'update.available': return 'Update beschikbaar'; + case 'update.versionAvailable': return ({required Object version}) => 'Versie ${version} is beschikbaar'; + case 'update.currentVersion': return ({required Object version}) => 'Huidig: ${version}'; + case 'update.skipVersion': return 'Deze versie overslaan'; + case 'update.viewRelease': return 'Bekijk release'; + case 'update.latestVersion': return 'Je hebt de nieuwste versie'; + case 'update.checkFailed': return 'Kon niet controleren op updates'; + case 'settings.title': return 'Instellingen'; + case 'settings.language': return 'Taal'; + case 'settings.theme': return 'Thema'; + case 'settings.appearance': return 'Uiterlijk'; + case 'settings.videoPlayback': return 'Video afspelen'; + case 'settings.shufflePlay': return 'Willekeurig afspelen'; + case 'settings.advanced': return 'Geavanceerd'; + case 'settings.useSeasonPostersDescription': return 'Toon seizoenposter in plaats van serieposter voor afleveringen'; + case 'settings.showHeroSectionDescription': return 'Toon uitgelichte inhoud carrousel op startscherm'; + case 'settings.secondsLabel': return 'Seconden'; + case 'settings.minutesLabel': return 'Minuten'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => 'Voer duur in (${min}-${max})'; + case 'settings.systemTheme': return 'Systeem'; + case 'settings.systemThemeDescription': return 'Volg systeeminstellingen'; + case 'settings.lightTheme': return 'Licht'; + case 'settings.darkTheme': return 'Donker'; + case 'settings.libraryDensity': return 'Bibliotheek dichtheid'; + case 'settings.compact': return 'Compact'; + case 'settings.compactDescription': return 'Kleinere kaarten, meer items zichtbaar'; + case 'settings.normal': return 'Normaal'; + case 'settings.normalDescription': return 'Standaard grootte'; + case 'settings.comfortable': return 'Comfortabel'; + case 'settings.comfortableDescription': return 'Grotere kaarten, minder items zichtbaar'; + case 'settings.viewMode': return 'Weergavemodus'; + case 'settings.gridView': return 'Raster'; + case 'settings.gridViewDescription': return 'Items weergeven in een rasterindeling'; + case 'settings.listView': return 'Lijst'; + case 'settings.listViewDescription': return 'Items weergeven in een lijstindeling'; + case 'settings.useSeasonPosters': return 'Gebruik seizoenposters'; + case 'settings.showHeroSection': return 'Toon hoofdsectie'; + case 'settings.hardwareDecoding': return 'Hardware decodering'; + case 'settings.hardwareDecodingDescription': return 'Gebruik hardware versnelling indien beschikbaar'; + case 'settings.bufferSize': return 'Buffer grootte'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return 'Ondertitel opmaak'; + case 'settings.subtitleStylingDescription': return 'Pas ondertitel uiterlijk aan'; + case 'settings.smallSkipDuration': return 'Korte skip duur'; + case 'settings.largeSkipDuration': return 'Lange skip duur'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} seconden'; + case 'settings.defaultSleepTimer': return 'Standaard slaap timer'; + case 'settings.minutesUnit': return ({required Object minutes}) => 'bij ${minutes} minuten'; + case 'settings.rememberTrackSelections': return 'Onthoud track selecties per serie/film'; + case 'settings.rememberTrackSelectionsDescription': return 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; + case 'settings.unwatchedOnly': return 'Alleen ongekeken'; + case 'settings.unwatchedOnlyDescription': return 'Alleen ongekeken afleveringen opnemen in willekeurige wachtrij'; + case 'settings.shuffleOrderNavigation': return 'Willekeurige volgorde navigatie'; + case 'settings.shuffleOrderNavigationDescription': return 'Volgende/vorige knoppen volgen willekeurige volgorde'; + case 'settings.loopShuffleQueue': return 'Herhaal willekeurige wachtrij'; + case 'settings.loopShuffleQueueDescription': return 'Start wachtrij opnieuw bij het einde'; + case 'settings.videoPlayerControls': return 'Videospeler bediening'; + case 'settings.keyboardShortcuts': return 'Toetsenbord sneltoetsen'; + case 'settings.keyboardShortcutsDescription': return 'Pas toetsenbord sneltoetsen aan'; + case 'settings.debugLogging': return 'Debug logging'; + case 'settings.debugLoggingDescription': return 'Schakel gedetailleerde logging in voor probleemoplossing'; + case 'settings.viewLogs': return 'Bekijk logs'; + case 'settings.viewLogsDescription': return 'Bekijk applicatie logs'; + case 'settings.clearCache': return 'Cache wissen'; + case 'settings.clearCacheDescription': return 'Dit wist alle gecachte afbeeldingen en gegevens. De app kan langer duren om inhoud te laden na het wissen van de cache.'; + case 'settings.clearCacheSuccess': return 'Cache succesvol gewist'; + case 'settings.resetSettings': return 'Instellingen resetten'; + case 'settings.resetSettingsDescription': return 'Dit reset alle instellingen naar hun standaard waarden. Deze actie kan niet ongedaan gemaakt worden.'; + case 'settings.resetSettingsSuccess': return 'Instellingen succesvol gereset'; + case 'settings.shortcutsReset': return 'Sneltoetsen gereset naar standaard'; + case 'settings.about': return 'Over'; + case 'settings.aboutDescription': return 'App informatie en licenties'; + case 'settings.updates': return 'Updates'; + case 'settings.updateAvailable': return 'Update beschikbaar'; + case 'settings.checkForUpdates': return 'Controleer op updates'; + case 'settings.validationErrorEnterNumber': return 'Voer een geldig nummer in'; + case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => 'Duur moet tussen ${min} en ${max} ${unit} zijn'; + case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => 'Sneltoets al toegewezen aan ${action}'; + case 'settings.shortcutUpdated': return ({required Object action}) => 'Sneltoets bijgewerkt voor ${action}'; + case 'settings.autoSkip': return 'Automatisch Overslaan'; + case 'settings.autoSkipIntro': return 'Intro Automatisch Overslaan'; + case 'settings.autoSkipIntroDescription': return 'Intro-markeringen na enkele seconden automatisch overslaan'; + case 'settings.autoSkipCredits': return 'Credits Automatisch Overslaan'; + case 'settings.autoSkipCreditsDescription': return 'Credits automatisch overslaan en volgende aflevering afspelen'; + case 'settings.autoSkipDelay': return 'Vertraging Automatisch Overslaan'; + case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => '${seconds} seconden wachten voor automatisch overslaan'; + case 'search.hint': return 'Zoek films, series, muziek...'; + case 'search.tryDifferentTerm': return 'Probeer een andere zoekterm'; + case 'search.searchYourMedia': return 'Zoek in je media'; + case 'search.enterTitleActorOrKeyword': return 'Voer een titel, acteur of trefwoord in'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Stel sneltoets in voor ${actionName}'; + case 'hotkeys.clearShortcut': return 'Wis sneltoets'; + case 'pinEntry.enterPin': return 'Voer PIN in'; + case 'pinEntry.showPin': return 'Toon PIN'; + case 'pinEntry.hidePin': return 'Verberg PIN'; + case 'fileInfo.title': return 'Bestand info'; + case 'fileInfo.video': return 'Video'; + case 'fileInfo.audio': return 'Audio'; + case 'fileInfo.file': return 'Bestand'; + case 'fileInfo.advanced': return 'Geavanceerd'; + case 'fileInfo.codec': return 'Codec'; + case 'fileInfo.resolution': return 'Resolutie'; + case 'fileInfo.bitrate': return 'Bitrate'; + case 'fileInfo.frameRate': return 'Frame rate'; + case 'fileInfo.aspectRatio': return 'Beeldverhouding'; + case 'fileInfo.profile': return 'Profiel'; + case 'fileInfo.bitDepth': return 'Bit diepte'; + case 'fileInfo.colorSpace': return 'Kleurruimte'; + case 'fileInfo.colorRange': return 'Kleurbereik'; + case 'fileInfo.colorPrimaries': return 'Kleurprimaires'; + case 'fileInfo.chromaSubsampling': return 'Chroma subsampling'; + case 'fileInfo.channels': return 'Kanalen'; + case 'fileInfo.path': return 'Pad'; + case 'fileInfo.size': return 'Grootte'; + case 'fileInfo.container': return 'Container'; + case 'fileInfo.duration': return 'Duur'; + case 'fileInfo.optimizedForStreaming': return 'Geoptimaliseerd voor streaming'; + case 'fileInfo.has64bitOffsets': return '64-bit Offsets'; + case 'mediaMenu.markAsWatched': return 'Markeer als gekeken'; + case 'mediaMenu.markAsUnwatched': return 'Markeer als ongekeken'; + case 'mediaMenu.removeFromContinueWatching': return 'Verwijder uit Doorgaan met kijken'; + case 'mediaMenu.goToSeries': return 'Ga naar serie'; + case 'mediaMenu.goToSeason': return 'Ga naar seizoen'; + case 'mediaMenu.shufflePlay': return 'Willekeurig afspelen'; + case 'mediaMenu.fileInfo': return 'Bestand info'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, film'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, TV-serie'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return 'bekeken'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} procent bekeken'; + case 'accessibility.mediaCardUnwatched': return 'niet bekeken'; + case 'accessibility.tapToPlay': return 'Tik om af te spelen'; + case 'tooltips.shufflePlay': return 'Willekeurig afspelen'; + case 'tooltips.markAsWatched': return 'Markeer als gekeken'; + case 'tooltips.markAsUnwatched': return 'Markeer als ongekeken'; + case 'videoControls.audioLabel': return 'Audio'; + case 'videoControls.subtitlesLabel': return 'Ondertitels'; + case 'videoControls.resetToZero': return 'Reset naar 0ms'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} speelt later af'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} speelt eerder af'; + case 'videoControls.noOffset': return 'Geen offset'; + case 'videoControls.letterbox': return 'Letterbox'; + case 'videoControls.fillScreen': return 'Vul scherm'; + case 'videoControls.stretch': return 'Uitrekken'; + case 'videoControls.lockRotation': return 'Vergrendel rotatie'; + case 'videoControls.unlockRotation': return 'Ontgrendel rotatie'; + case 'videoControls.sleepTimer': return 'Slaaptimer'; + case 'videoControls.timerActive': return 'Timer actief'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Afspelen wordt gepauzeerd over ${duration}'; + case 'videoControls.sleepTimerCompleted': return 'Slaaptimer voltooid - afspelen gepauzeerd'; + case 'videoControls.playButton': return 'Afspelen'; + case 'videoControls.pauseButton': return 'Pauzeren'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Terugspoelen ${seconds} seconden'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Vooruitspoelen ${seconds} seconden'; + case 'videoControls.previousButton': return 'Vorige aflevering'; + case 'videoControls.nextButton': return 'Volgende aflevering'; + case 'videoControls.previousChapterButton': return 'Vorig hoofdstuk'; + case 'videoControls.nextChapterButton': return 'Volgend hoofdstuk'; + case 'videoControls.volumeButton': return 'Volume'; + case 'videoControls.muteButton': return 'Dempen'; + case 'videoControls.unmuteButton': return 'Dempen opheffen'; + case 'videoControls.settingsButton': return 'Video-instellingen'; + case 'videoControls.audioTrackButton': return 'Audiosporen'; + case 'videoControls.subtitlesButton': return 'Ondertitels'; + case 'videoControls.chaptersButton': return 'Hoofdstukken'; + case 'videoControls.versionsButton': return 'Videoversies'; + case 'videoControls.aspectRatioButton': return 'Beeldverhouding'; + case 'videoControls.fullscreenButton': return 'Volledig scherm activeren'; + case 'videoControls.exitFullscreenButton': return 'Volledig scherm verlaten'; + case 'videoControls.rotationLockButton': return 'Rotatievergrendeling'; + case 'videoControls.timelineSlider': return 'Videotijdlijn'; + case 'videoControls.volumeSlider': return 'Volumeniveau'; + case 'videoControls.backButton': return 'Terug'; + case 'userStatus.admin': return 'Beheerder'; + case 'userStatus.restricted': return 'Beperkt'; + case 'userStatus.protected': return 'Beschermd'; + case 'userStatus.current': return 'HUIDIG'; + case 'messages.markedAsWatched': return 'Gemarkeerd als gekeken'; + case 'messages.markedAsUnwatched': return 'Gemarkeerd als ongekeken'; + case 'messages.removedFromContinueWatching': return 'Verwijderd uit Doorgaan met kijken'; + case 'messages.errorLoading': return ({required Object error}) => 'Fout: ${error}'; + case 'messages.fileInfoNotAvailable': return 'Bestand informatie niet beschikbaar'; + case 'messages.errorLoadingFileInfo': return ({required Object error}) => 'Fout bij laden bestand info: ${error}'; + case 'messages.errorLoadingSeries': return 'Fout bij laden serie'; + case 'messages.errorLoadingSeason': return 'Fout bij laden seizoen'; + case 'messages.musicNotSupported': return 'Muziek afspelen wordt nog niet ondersteund'; + case 'messages.logsCleared': return 'Logs gewist'; + case 'messages.logsCopied': return 'Logs gekopieerd naar klembord'; + case 'messages.noLogsAvailable': return 'Geen logs beschikbaar'; + case 'messages.libraryScanning': return ({required Object title}) => 'Scannen "${title}"...'; + case 'messages.libraryScanStarted': return ({required Object title}) => 'Bibliotheek scan gestart voor "${title}"'; + case 'messages.libraryScanFailed': return ({required Object error}) => 'Kon bibliotheek niet scannen: ${error}'; + case 'messages.metadataRefreshing': return ({required Object title}) => 'Metadata vernieuwen voor "${title}"...'; + case 'messages.metadataRefreshStarted': return ({required Object title}) => 'Metadata vernieuwen gestart voor "${title}"'; + case 'messages.metadataRefreshFailed': return ({required Object error}) => 'Kon metadata niet vernieuwen: ${error}'; + case 'messages.noPlexToken': return 'Geen Plex token gevonden. Log opnieuw in.'; + case 'messages.logoutConfirm': return 'Weet je zeker dat je wilt uitloggen?'; + case 'messages.noSeasonsFound': return 'Geen seizoenen gevonden'; + case 'messages.noEpisodesFound': return 'Geen afleveringen gevonden in eerste seizoen'; + case 'messages.noEpisodesFoundGeneral': return 'Geen afleveringen gevonden'; + case 'messages.noResultsFound': return 'Geen resultaten gevonden'; + case 'messages.sleepTimerSet': return ({required Object label}) => 'Slaap timer ingesteld voor ${label}'; + case 'messages.failedToSwitchProfile': return ({required Object displayName}) => 'Kon niet wisselen naar ${displayName}'; + case 'messages.noItemsAvailable': return 'Geen items beschikbaar'; + case 'messages.failedToCreatePlayQueue': return 'Kan afspeelwachtrij niet maken'; + case 'messages.failedToCreatePlayQueueNoItems': return 'Kan afspeelwachtrij niet maken - geen items'; + case 'messages.failedPlayback': return ({required Object action, required Object error}) => 'Afspelen van ${action} mislukt: ${error}'; + case 'profile.noUsersAvailable': return 'Geen gebruikers beschikbaar'; + case 'subtitlingStyling.stylingOptions': return 'Opmaak opties'; + case 'subtitlingStyling.fontSize': return 'Lettergrootte'; + case 'subtitlingStyling.textColor': return 'Tekstkleur'; + case 'subtitlingStyling.borderSize': return 'Rand grootte'; + case 'subtitlingStyling.borderColor': return 'Randkleur'; + case 'subtitlingStyling.backgroundOpacity': return 'Achtergrond transparantie'; + case 'subtitlingStyling.backgroundColor': return 'Achtergrondkleur'; + case 'dialog.confirmAction': return 'Bevestig actie'; + case 'dialog.areYouSure': return 'Weet je zeker dat je deze actie wilt uitvoeren?'; + case 'dialog.cancel': return 'Annuleren'; + case 'dialog.playNow': return 'Nu afspelen'; + case 'discover.title': return 'Ontdekken'; + case 'discover.switchProfile': return 'Wissel van profiel'; + case 'discover.switchServer': return 'Wissel van server'; + case 'discover.logout': return 'Uitloggen'; + case 'discover.noContentAvailable': return 'Geen inhoud beschikbaar'; + case 'discover.addMediaToLibraries': return 'Voeg wat media toe aan je bibliotheken'; + case 'discover.continueWatching': return 'Verder kijken'; + case 'discover.recentlyAdded': return 'Recent toegevoegd'; + case 'discover.play': return 'Afspelen'; + case 'discover.resume': return 'Hervatten'; + case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'Speel S${season}, E${episode}'; + case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => 'Hervat S${season}, E${episode}'; + case 'discover.pause': return 'Pauzeren'; + case 'discover.overview': return 'Overzicht'; + case 'discover.cast': return 'Acteurs'; + case 'discover.seasons': return 'Seizoenen'; + case 'discover.studio': return 'Studio'; + case 'discover.rating': return 'Leeftijd'; + case 'discover.watched': return 'Bekeken'; + case 'discover.episodeCount': return ({required Object count}) => '${count} afleveringen'; + case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '${watched}/${total} gekeken'; + case 'discover.movie': return 'Film'; + case 'discover.tvShow': return 'TV Serie'; + case 'discover.minutesLeft': return ({required Object minutes}) => '${minutes} min over'; + case 'errors.searchFailed': return ({required Object error}) => 'Zoeken mislukt: ${error}'; + case 'errors.connectionTimeout': return ({required Object context}) => 'Verbinding time-out tijdens laden ${context}'; + case 'errors.connectionFailed': return 'Kan geen verbinding maken met Plex server'; + case 'errors.failedToLoad': return ({required Object context, required Object error}) => 'Kon ${context} niet laden: ${error}'; + case 'errors.noClientAvailable': return 'Geen client beschikbaar'; + case 'errors.authenticationFailed': return ({required Object error}) => 'Authenticatie mislukt: ${error}'; + case 'errors.couldNotLaunchUrl': return 'Kon auth URL niet openen'; + case 'errors.pleaseEnterToken': return 'Voer een token in'; + case 'errors.invalidToken': return 'Ongeldig token'; + case 'errors.failedToVerifyToken': return ({required Object error}) => 'Kon token niet verifiëren: ${error}'; + case 'errors.failedToSwitchProfile': return ({required Object displayName}) => 'Kon niet wisselen naar ${displayName}'; + case 'errors.connectionFailedGeneric': return 'Verbinding mislukt'; + case 'libraries.title': return 'Bibliotheken'; + case 'libraries.scanLibraryFiles': return 'Scan bibliotheek bestanden'; + case 'libraries.scanLibrary': return 'Scan bibliotheek'; + case 'libraries.analyze': return 'Analyseren'; + case 'libraries.analyzeLibrary': return 'Analyseer bibliotheek'; + case 'libraries.refreshMetadata': return 'Vernieuw metadata'; + case 'libraries.emptyTrash': return 'Prullenbak legen'; + case 'libraries.emptyingTrash': return ({required Object title}) => 'Prullenbak legen voor "${title}"...'; + case 'libraries.trashEmptied': return ({required Object title}) => 'Prullenbak geleegd voor "${title}"'; + case 'libraries.failedToEmptyTrash': return ({required Object error}) => 'Kon prullenbak niet legen: ${error}'; + case 'libraries.analyzing': return ({required Object title}) => 'Analyseren "${title}"...'; + case 'libraries.analysisStarted': return ({required Object title}) => 'Analyse gestart voor "${title}"'; + case 'libraries.failedToAnalyze': return ({required Object error}) => 'Kon bibliotheek niet analyseren: ${error}'; + case 'libraries.noLibrariesFound': return 'Geen bibliotheken gevonden'; + case 'libraries.thisLibraryIsEmpty': return 'Deze bibliotheek is leeg'; + case 'libraries.all': return 'Alles'; + case 'libraries.clearAll': return 'Alles wissen'; + case 'libraries.scanLibraryConfirm': return ({required Object title}) => 'Weet je zeker dat je "${title}" wilt scannen?'; + case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => 'Weet je zeker dat je "${title}" wilt analyseren?'; + case 'libraries.refreshMetadataConfirm': return ({required Object title}) => 'Weet je zeker dat je metadata wilt vernieuwen voor "${title}"?'; + case 'libraries.emptyTrashConfirm': return ({required Object title}) => 'Weet je zeker dat je de prullenbak wilt legen voor "${title}"?'; + case 'libraries.manageLibraries': return 'Beheer bibliotheken'; + case 'libraries.sort': return 'Sorteren'; + case 'libraries.sortBy': return 'Sorteer op'; + case 'libraries.filters': return 'Filters'; + case 'libraries.loadingLibraryWithCount': return ({required Object count}) => 'Bibliotheek laden... (${count} items geladen)'; + case 'libraries.confirmActionMessage': return 'Weet je zeker dat je deze actie wilt uitvoeren?'; + case 'libraries.showLibrary': return 'Toon bibliotheek'; + case 'libraries.hideLibrary': return 'Verberg bibliotheek'; + case 'libraries.libraryOptions': return 'Bibliotheek opties'; + case 'libraries.content': return 'bibliotheekinhoud'; + case 'libraries.selectLibrary': return 'Bibliotheek kiezen'; + case 'libraries.filtersWithCount': return ({required Object count}) => 'Filters (${count})'; + case 'libraries.noRecommendations': return 'Geen aanbevelingen beschikbaar'; + case 'libraries.noCollections': return 'Geen collecties in deze bibliotheek'; + case 'libraries.noFoldersFound': return 'Geen mappen gevonden'; + case 'libraries.folders': return 'mappen'; + case 'libraries.tabs.recommended': return 'Aanbevolen'; + case 'libraries.tabs.browse': return 'Bladeren'; + case 'libraries.tabs.collections': return 'Collecties'; + case 'libraries.tabs.playlists': return 'Afspeellijsten'; + case 'libraries.groupings.all': return 'Alles'; + case 'libraries.groupings.movies': return 'Films'; + case 'libraries.groupings.shows': return 'Series'; + case 'libraries.groupings.seasons': return 'Seizoenen'; + case 'libraries.groupings.episodes': return 'Afleveringen'; + case 'libraries.groupings.folders': return 'Mappen'; + case 'about.title': return 'Over'; + case 'about.openSourceLicenses': return 'Open Source licenties'; + case 'about.versionLabel': return ({required Object version}) => 'Versie ${version}'; + case 'about.appDescription': return 'Een mooie Plex client voor Flutter'; + case 'about.viewLicensesDescription': return 'Bekijk licenties van third-party bibliotheken'; + case 'serverSelection.connectingToServer': return 'Verbinden met server...'; + case 'serverSelection.connectingToAllServers': return 'Verbinden met alle servers...'; + case 'serverSelection.connectToAllServers': return 'Verbind met alle servers'; + case 'serverSelection.allServerConnectionsFailed': return 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.'; + case 'serverSelection.foundServers': return ({required Object count}) => '${count} server(s) gevonden'; + case 'serverSelection.orSelectIndividually': return 'Of selecteer een server individueel:'; + case 'serverSelection.serverDebugCopied': return 'Server debug gegevens gekopieerd naar klembord'; + case 'serverSelection.copyDebugData': return 'Kopieer debug gegevens'; + case 'serverSelection.noServersFound': return 'Geen servers gevonden'; + case 'serverSelection.malformedServerData': return ({required Object count}) => '${count} server(s) gevonden met verkeerde data. Geen geldige servers beschikbaar.'; + case 'serverSelection.incompleteServerInfo': return 'Sommige servers hebben incomplete informatie en zijn overgeslagen. Controleer je Plex.tv account.'; + case 'serverSelection.incompleteConnectionInfo': return 'Server verbinding informatie is incompleet. Probeer opnieuw.'; + case 'serverSelection.malformedServerInfo': return ({required Object message}) => 'Server informatie is verkeerd geformatteerd: ${message}'; + case 'serverSelection.networkConnectionFailed': return 'Netwerkverbinding mislukt. Controleer je internetverbinding en probeer opnieuw.'; + case 'serverSelection.authenticationFailed': return 'Authenticatie mislukt. Log opnieuw in.'; + case 'serverSelection.plexServiceUnavailable': return 'Plex service niet beschikbaar. Probeer later opnieuw.'; + case 'serverSelection.failedToLoadServers': return ({required Object error}) => 'Kon servers niet laden: ${error}'; + case 'hubDetail.title': return 'Titel'; + case 'hubDetail.releaseYear': return 'Uitgavejaar'; + case 'hubDetail.dateAdded': return 'Datum toegevoegd'; + case 'hubDetail.rating': return 'Beoordeling'; + case 'hubDetail.noItemsFound': return 'Geen items gevonden'; + case 'logs.title': return 'Logbestanden'; + case 'logs.clearLogs': return 'Wis logs'; + case 'logs.copyLogs': return 'Kopieer logs'; + case 'logs.exportLogs': return 'Exporteer logs'; + case 'logs.noLogsToShow': return 'Geen logs om te tonen'; + case 'logs.error': return 'Fout:'; + case 'logs.stackTrace': return 'Stacktracering:'; + case 'licenses.relatedPackages': return 'Gerelateerde pakketten'; + case 'licenses.license': return 'Licentie'; + case 'licenses.licenseNumber': return ({required Object number}) => 'Licentie ${number}'; + case 'licenses.licensesCount': return ({required Object count}) => '${count} licenties'; + case 'navigation.home': return 'Thuis'; + case 'navigation.search': return 'Zoeken'; + case 'navigation.libraries': return 'Bibliotheken'; + case 'navigation.settings': return 'Instellingen'; + case 'playlists.title': return 'Afspeellijsten'; + case 'playlists.noPlaylists': return 'Geen afspeellijsten gevonden'; + case 'playlists.create': return 'Afspeellijst maken'; + case 'playlists.newPlaylist': return 'Nieuwe afspeellijst'; + case 'playlists.playlistName': return 'Naam afspeellijst'; + case 'playlists.enterPlaylistName': return 'Voer naam afspeellijst in'; + case 'playlists.edit': return 'Afspeellijst bewerken'; + case 'playlists.delete': return 'Afspeellijst verwijderen'; + case 'playlists.addTo': return 'Toevoegen aan afspeellijst'; + case 'playlists.addItems': return 'Items toevoegen'; + case 'playlists.removeItem': return 'Verwijderen uit afspeellijst'; + case 'playlists.clearPlaylist': return 'Afspeellijst wissen'; + case 'playlists.playAll': return 'Alles afspelen'; + case 'playlists.shuffle': return 'Willekeurig'; + case 'playlists.smartPlaylist': return 'Slimme afspeellijst'; + case 'playlists.regularPlaylist': return 'Normale afspeellijst'; + case 'playlists.itemCount': return ({required Object count}) => '${count} items'; + case 'playlists.oneItem': return '1 item'; + case 'playlists.emptyPlaylist': return 'Deze afspeellijst is leeg'; + case 'playlists.deleteConfirm': return 'Afspeellijst verwijderen?'; + case 'playlists.deleteMessage': return ({required Object name}) => 'Weet je zeker dat je "${name}" wilt verwijderen?'; + case 'playlists.created': return 'Afspeellijst gemaakt'; + case 'playlists.updated': return 'Afspeellijst bijgewerkt'; + case 'playlists.deleted': return 'Afspeellijst verwijderd'; + case 'playlists.itemAdded': return 'Toegevoegd aan afspeellijst'; + case 'playlists.itemRemoved': return 'Verwijderd uit afspeellijst'; + case 'playlists.selectPlaylist': return 'Selecteer afspeellijst'; + case 'playlists.createNewPlaylist': return 'Nieuwe afspeellijst maken'; + case 'playlists.errorCreating': return 'Fout bij maken afspeellijst'; + case 'playlists.errorDeleting': return 'Fout bij verwijderen afspeellijst'; + case 'playlists.errorLoading': return 'Fout bij laden afspeellijsten'; + case 'playlists.errorAdding': return 'Fout bij toevoegen aan afspeellijst'; + case 'playlists.errorReordering': return 'Fout bij herschikken van afspeellijstitem'; + case 'playlists.errorRemoving': return 'Fout bij verwijderen uit afspeellijst'; + case 'playlists.playlist': return 'Afspeellijst'; + case 'collections.title': return 'Collecties'; + case 'collections.collection': return 'Collectie'; + case 'collections.empty': return 'Collectie is leeg'; + case 'collections.noItems': return 'Geen items in deze collectie'; + case 'collections.unknownLibrarySection': return 'Kan niet verwijderen: onbekende bibliotheeksectie'; + case 'collections.deleteCollection': return 'Collectie verwijderen'; + case 'collections.deleteConfirm': return ({required Object title}) => 'Weet je zeker dat je "${title}" wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.'; + case 'collections.deleted': return 'Collectie verwijderd'; + case 'collections.deleteFailed': return 'Collectie verwijderen mislukt'; + case 'collections.deleteFailedWithError': return ({required Object error}) => 'Collectie verwijderen mislukt: ${error}'; + case 'collections.failedToLoadItems': return ({required Object error}) => 'Collectie-items laden mislukt: ${error}'; + case 'collections.addTo': return 'Toevoegen aan collectie'; + case 'collections.selectCollection': return 'Selecteer collectie'; + case 'collections.createNewCollection': return 'Nieuwe collectie maken'; + case 'collections.collectionName': return 'Collectienaam'; + case 'collections.enterCollectionName': return 'Voer collectienaam in'; + case 'collections.addedToCollection': return 'Toegevoegd aan collectie'; + case 'collections.errorAddingToCollection': return 'Fout bij toevoegen aan collectie'; + case 'collections.created': return 'Collectie gemaakt'; + case 'collections.removeFromCollection': return 'Verwijderen uit collectie'; + case 'collections.removeFromCollectionConfirm': return ({required Object title}) => '"${title}" uit deze collectie verwijderen?'; + case 'collections.removedFromCollection': return 'Uit collectie verwijderd'; + case 'collections.removeFromCollectionFailed': return 'Verwijderen uit collectie mislukt'; + case 'collections.removeFromCollectionError': return ({required Object error}) => 'Fout bij verwijderen uit collectie: ${error}'; + default: return null; + } + } } extension on _StringsSv { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': - return 'Plezy'; - case 'app.loading': - return 'Laddar...'; - case 'auth.signInWithPlex': - return 'Logga in med Plex'; - case 'auth.showQRCode': - return 'Visa QR-kod'; - case 'auth.cancel': - return 'Avbryt'; - case 'auth.authenticate': - return 'Autentisera'; - case 'auth.retry': - return 'Försök igen'; - case 'auth.debugEnterToken': - return 'Debug: Ange Plex-token'; - case 'auth.plexTokenLabel': - return 'Plex-autentiseringstoken'; - case 'auth.plexTokenHint': - return 'Ange din Plex.tv-token'; - case 'auth.authenticationTimeout': - return 'Autentisering tog för lång tid. Försök igen.'; - case 'auth.scanQRCodeInstruction': - return 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.'; - case 'auth.waitingForAuth': - return 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.'; - case 'common.cancel': - return 'Avbryt'; - case 'common.save': - return 'Spara'; - case 'common.close': - return 'Stäng'; - case 'common.clear': - return 'Rensa'; - case 'common.reset': - return 'Återställ'; - case 'common.later': - return 'Senare'; - case 'common.submit': - return 'Skicka'; - case 'common.confirm': - return 'Bekräfta'; - case 'common.retry': - return 'Försök igen'; - case 'common.playNow': - return 'Spela nu'; - case 'common.logout': - return 'Logga ut'; - case 'common.online': - return 'Online'; - case 'common.offline': - return 'Offline'; - case 'common.owned': - return 'Egen'; - case 'common.shared': - return 'Delad'; - case 'common.current': - return 'NUVARANDE'; - case 'common.unknown': - return 'Okänd'; - case 'common.refresh': - return 'Uppdatera'; - case 'common.yes': - return 'Ja'; - case 'common.no': - return 'Nej'; - case 'common.server': - return 'Server'; - case 'common.delete': - return 'Ta bort'; - case 'common.shuffle': - return 'Blanda'; - case 'common.addTo': - return 'Lägg till i...'; - case 'screens.licenses': - return 'Licenser'; - case 'screens.selectServer': - return 'Välj server'; - case 'screens.switchProfile': - return 'Byt profil'; - case 'screens.subtitleStyling': - return 'Undertext-styling'; - case 'screens.search': - return 'Sök'; - case 'screens.logs': - return 'Loggar'; - case 'update.available': - return 'Uppdatering tillgänglig'; - case 'update.versionAvailable': - return ({required Object version}) => - 'Version ${version} är tillgänglig'; - case 'update.currentVersion': - return ({required Object version}) => 'Nuvarande: ${version}'; - case 'update.skipVersion': - return 'Hoppa över denna version'; - case 'update.viewRelease': - return 'Visa release'; - case 'update.latestVersion': - return 'Du har den senaste versionen'; - case 'update.checkFailed': - return 'Misslyckades att kontrollera uppdateringar'; - case 'settings.title': - return 'Inställningar'; - case 'settings.language': - return 'Språk'; - case 'settings.theme': - return 'Tema'; - case 'settings.appearance': - return 'Utseende'; - case 'settings.videoPlayback': - return 'Videouppspelning'; - case 'settings.shufflePlay': - return 'Blanda uppspelning'; - case 'settings.advanced': - return 'Avancerat'; - case 'settings.useSeasonPostersDescription': - return 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; - case 'settings.showHeroSectionDescription': - return 'Visa utvalda innehållskarusell på startsidan'; - case 'settings.secondsLabel': - return 'Sekunder'; - case 'settings.minutesLabel': - return 'Minuter'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => - 'Ange tid (${min}-${max})'; - case 'settings.systemTheme': - return 'System'; - case 'settings.systemThemeDescription': - return 'Följ systeminställningar'; - case 'settings.lightTheme': - return 'Ljust'; - case 'settings.darkTheme': - return 'Mörkt'; - case 'settings.libraryDensity': - return 'Biblioteksdensitet'; - case 'settings.compact': - return 'Kompakt'; - case 'settings.compactDescription': - return 'Mindre kort, fler objekt synliga'; - case 'settings.normal': - return 'Normal'; - case 'settings.normalDescription': - return 'Standardstorlek'; - case 'settings.comfortable': - return 'Bekväm'; - case 'settings.comfortableDescription': - return 'Större kort, färre objekt synliga'; - case 'settings.viewMode': - return 'Visningsläge'; - case 'settings.gridView': - return 'Rutnät'; - case 'settings.gridViewDescription': - return 'Visa objekt i rutnätslayout'; - case 'settings.listView': - return 'Lista'; - case 'settings.listViewDescription': - return 'Visa objekt i listlayout'; - case 'settings.useSeasonPosters': - return 'Använd säsongsaffischer'; - case 'settings.showHeroSection': - return 'Visa hjältesektion'; - case 'settings.hardwareDecoding': - return 'Hårdvaruavkodning'; - case 'settings.hardwareDecodingDescription': - return 'Använd hårdvaruacceleration när tillgängligt'; - case 'settings.bufferSize': - return 'Bufferstorlek'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return 'Undertext-styling'; - case 'settings.subtitleStylingDescription': - return 'Anpassa undertextutseende'; - case 'settings.smallSkipDuration': - return 'Kort hoppvaraktighet'; - case 'settings.largeSkipDuration': - return 'Lång hoppvaraktighet'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} sekunder'; - case 'settings.defaultSleepTimer': - return 'Standard sovtimer'; - case 'settings.minutesUnit': - return ({required Object minutes}) => '${minutes} minuter'; - case 'settings.rememberTrackSelections': - return 'Kom ihåg spårval per serie/film'; - case 'settings.rememberTrackSelectionsDescription': - return 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; - case 'settings.unwatchedOnly': - return 'Endast osedda'; - case 'settings.unwatchedOnlyDescription': - return 'Inkludera endast osedda avsnitt i blandningskön'; - case 'settings.shuffleOrderNavigation': - return 'Blandningsordning-navigation'; - case 'settings.shuffleOrderNavigationDescription': - return 'Nästa/föregående knappar följer blandad ordning'; - case 'settings.loopShuffleQueue': - return 'Loopa blandningskö'; - case 'settings.loopShuffleQueueDescription': - return 'Starta om kö när slutet nås'; - case 'settings.videoPlayerControls': - return 'Videospelar-kontroller'; - case 'settings.keyboardShortcuts': - return 'Tangentbordsgenvägar'; - case 'settings.keyboardShortcutsDescription': - return 'Anpassa tangentbordsgenvägar'; - case 'settings.debugLogging': - return 'Felsökningsloggning'; - case 'settings.debugLoggingDescription': - return 'Aktivera detaljerad loggning för felsökning'; - case 'settings.viewLogs': - return 'Visa loggar'; - case 'settings.viewLogsDescription': - return 'Visa applikationsloggar'; - case 'settings.clearCache': - return 'Rensa cache'; - case 'settings.clearCacheDescription': - return 'Detta rensar alla cachade bilder och data. Appen kan ta längre tid att ladda innehåll efter cache-rensning.'; - case 'settings.clearCacheSuccess': - return 'Cache rensad framgångsrikt'; - case 'settings.resetSettings': - return 'Återställ inställningar'; - case 'settings.resetSettingsDescription': - return 'Detta återställer alla inställningar till standardvärden. Denna åtgärd kan inte ångras.'; - case 'settings.resetSettingsSuccess': - return 'Inställningar återställda framgångsrikt'; - case 'settings.shortcutsReset': - return 'Genvägar återställda till standard'; - case 'settings.about': - return 'Om'; - case 'settings.aboutDescription': - return 'Appinformation och licenser'; - case 'settings.updates': - return 'Uppdateringar'; - case 'settings.updateAvailable': - return 'Uppdatering tillgänglig'; - case 'settings.checkForUpdates': - return 'Kontrollera uppdateringar'; - case 'settings.validationErrorEnterNumber': - return 'Vänligen ange ett giltigt nummer'; - case 'settings.validationErrorDuration': - return ({ - required Object min, - required Object max, - required Object unit, - }) => 'Tiden måste vara mellan ${min} och ${max} ${unit}'; - case 'settings.shortcutAlreadyAssigned': - return ({required Object action}) => 'Genväg redan tilldelad ${action}'; - case 'settings.shortcutUpdated': - return ({required Object action}) => 'Genväg uppdaterad för ${action}'; - case 'search.hint': - return 'Sök filmer, serier, musik...'; - case 'search.tryDifferentTerm': - return 'Prova en annan sökterm'; - case 'search.searchYourMedia': - return 'Sök i dina media'; - case 'search.enterTitleActorOrKeyword': - return 'Ange en titel, skådespelare eller nyckelord'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => - 'Sätt genväg för ${actionName}'; - case 'hotkeys.clearShortcut': - return 'Rensa genväg'; - case 'pinEntry.enterPin': - return 'Ange PIN'; - case 'pinEntry.showPin': - return 'Visa PIN'; - case 'pinEntry.hidePin': - return 'Dölj PIN'; - case 'fileInfo.title': - return 'Filinformation'; - case 'fileInfo.video': - return 'Video'; - case 'fileInfo.audio': - return 'Ljud'; - case 'fileInfo.file': - return 'Fil'; - case 'fileInfo.advanced': - return 'Avancerat'; - case 'fileInfo.codec': - return 'Kodek'; - case 'fileInfo.resolution': - return 'Upplösning'; - case 'fileInfo.bitrate': - return 'Bithastighet'; - case 'fileInfo.frameRate': - return 'Bildfrekvens'; - case 'fileInfo.aspectRatio': - return 'Bildförhållande'; - case 'fileInfo.profile': - return 'Profil'; - case 'fileInfo.bitDepth': - return 'Bitdjup'; - case 'fileInfo.colorSpace': - return 'Färgrymd'; - case 'fileInfo.colorRange': - return 'Färgområde'; - case 'fileInfo.colorPrimaries': - return 'Färggrunder'; - case 'fileInfo.chromaSubsampling': - return 'Kroma-undersampling'; - case 'fileInfo.channels': - return 'Kanaler'; - case 'fileInfo.path': - return 'Sökväg'; - case 'fileInfo.size': - return 'Storlek'; - case 'fileInfo.container': - return 'Container'; - case 'fileInfo.duration': - return 'Varaktighet'; - case 'fileInfo.optimizedForStreaming': - return 'Optimerad för streaming'; - case 'fileInfo.has64bitOffsets': - return '64-bit offset'; - case 'mediaMenu.markAsWatched': - return 'Markera som sedd'; - case 'mediaMenu.markAsUnwatched': - return 'Markera som osedd'; - case 'mediaMenu.removeFromContinueWatching': - return 'Ta bort från Fortsätt titta'; - case 'mediaMenu.goToSeries': - return 'Gå till serie'; - case 'mediaMenu.goToSeason': - return 'Gå till säsong'; - case 'mediaMenu.shufflePlay': - return 'Blanda uppspelning'; - case 'mediaMenu.fileInfo': - return 'Filinformation'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, film'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, TV-serie'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => - '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return 'sedd'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '${percent} procent sedd'; - case 'accessibility.mediaCardUnwatched': - return 'osedd'; - case 'accessibility.tapToPlay': - return 'Tryck för att spela'; - case 'tooltips.shufflePlay': - return 'Blanda uppspelning'; - case 'tooltips.markAsWatched': - return 'Markera som sedd'; - case 'tooltips.markAsUnwatched': - return 'Markera som osedd'; - case 'videoControls.audioLabel': - return 'Ljud'; - case 'videoControls.subtitlesLabel': - return 'Undertexter'; - case 'videoControls.resetToZero': - return 'Återställ till 0ms'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => - '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => - '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} spelas senare'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} spelas tidigare'; - case 'videoControls.noOffset': - return 'Ingen offset'; - case 'videoControls.letterbox': - return 'Letterbox'; - case 'videoControls.fillScreen': - return 'Fyll skärm'; - case 'videoControls.stretch': - return 'Sträck'; - case 'videoControls.lockRotation': - return 'Lås rotation'; - case 'videoControls.unlockRotation': - return 'Lås upp rotation'; - case 'videoControls.sleepTimer': - return 'Sovtimer'; - case 'videoControls.timerActive': - return 'Timer aktiv'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => - 'Uppspelningen pausas om ${duration}'; - case 'videoControls.sleepTimerCompleted': - return 'Sovtimer slutförd - uppspelning pausad'; - case 'videoControls.playButton': - return 'Spela'; - case 'videoControls.pauseButton': - return 'Pausa'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => 'Spola bakåt ${seconds} sekunder'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => - 'Spola framåt ${seconds} sekunder'; - case 'videoControls.previousButton': - return 'Föregående avsnitt'; - case 'videoControls.nextButton': - return 'Nästa avsnitt'; - case 'videoControls.previousChapterButton': - return 'Föregående kapitel'; - case 'videoControls.nextChapterButton': - return 'Nästa kapitel'; - case 'videoControls.volumeButton': - return 'Volym'; - case 'videoControls.muteButton': - return 'Tysta'; - case 'videoControls.unmuteButton': - return 'Slå på ljud'; - case 'videoControls.settingsButton': - return 'Videoinställningar'; - case 'videoControls.audioTrackButton': - return 'Ljudspår'; - case 'videoControls.subtitlesButton': - return 'Undertexter'; - case 'videoControls.chaptersButton': - return 'Kapitel'; - case 'videoControls.versionsButton': - return 'Videoversioner'; - case 'videoControls.aspectRatioButton': - return 'Bildförhållande'; - case 'videoControls.fullscreenButton': - return 'Aktivera helskärm'; - case 'videoControls.exitFullscreenButton': - return 'Avsluta helskärm'; - case 'videoControls.rotationLockButton': - return 'Rotationslås'; - case 'videoControls.timelineSlider': - return 'Videotidslinje'; - case 'videoControls.volumeSlider': - return 'Volymnivå'; - case 'videoControls.backButton': - return 'Tillbaka'; - case 'userStatus.admin': - return 'Admin'; - case 'userStatus.restricted': - return 'Begränsad'; - case 'userStatus.protected': - return 'Skyddad'; - case 'userStatus.current': - return 'NUVARANDE'; - case 'messages.markedAsWatched': - return 'Markerad som sedd'; - case 'messages.markedAsUnwatched': - return 'Markerad som osedd'; - case 'messages.removedFromContinueWatching': - return 'Borttagen från Fortsätt titta'; - case 'messages.errorLoading': - return ({required Object error}) => 'Fel: ${error}'; - case 'messages.fileInfoNotAvailable': - return 'Filinformation inte tillgänglig'; - case 'messages.errorLoadingFileInfo': - return ({required Object error}) => - 'Fel vid laddning av filinformation: ${error}'; - case 'messages.errorLoadingSeries': - return 'Fel vid laddning av serie'; - case 'messages.errorLoadingSeason': - return 'Fel vid laddning av säsong'; - case 'messages.musicNotSupported': - return 'Musikuppspelning stöds inte ännu'; - case 'messages.logsCleared': - return 'Loggar rensade'; - case 'messages.logsCopied': - return 'Loggar kopierade till urklipp'; - case 'messages.noLogsAvailable': - return 'Inga loggar tillgängliga'; - case 'messages.libraryScanning': - return ({required Object title}) => 'Skannar "${title}"...'; - case 'messages.libraryScanStarted': - return ({required Object title}) => - 'Biblioteksskanning startad för "${title}"'; - case 'messages.libraryScanFailed': - return ({required Object error}) => - 'Misslyckades att skanna bibliotek: ${error}'; - case 'messages.metadataRefreshing': - return ({required Object title}) => - 'Uppdaterar metadata för "${title}"...'; - case 'messages.metadataRefreshStarted': - return ({required Object title}) => - 'Metadata-uppdatering startad för "${title}"'; - case 'messages.metadataRefreshFailed': - return ({required Object error}) => - 'Misslyckades att uppdatera metadata: ${error}'; - case 'messages.noPlexToken': - return 'Ingen Plex-token hittad. Vänligen logga in igen.'; - case 'messages.logoutConfirm': - return 'Är du säker på att du vill logga ut?'; - case 'messages.noSeasonsFound': - return 'Inga säsonger hittades'; - case 'messages.noEpisodesFound': - return 'Inga avsnitt hittades i första säsongen'; - case 'messages.noEpisodesFoundGeneral': - return 'Inga avsnitt hittades'; - case 'messages.noResultsFound': - return 'Inga resultat hittades'; - case 'messages.sleepTimerSet': - return ({required Object label}) => 'Sovtimer inställd för ${label}'; - case 'messages.failedToSwitchProfile': - return ({required Object displayName}) => - 'Misslyckades att byta till ${displayName}'; - case 'messages.noItemsAvailable': - return 'Inga objekt tillgängliga'; - case 'messages.failedToCreatePlayQueue': - return 'Det gick inte att skapa uppspelningskö'; - case 'messages.failedToCreatePlayQueueNoItems': - return 'Det gick inte att skapa uppspelningskö – inga objekt'; - case 'messages.failedPlayback': - return ({required Object action, required Object error}) => - 'Kunde inte ${action}: ${error}'; - case 'profile.noUsersAvailable': - return 'Inga användare tillgängliga'; - case 'subtitlingStyling.stylingOptions': - return 'Stilalternativ'; - case 'subtitlingStyling.fontSize': - return 'Teckenstorlek'; - case 'subtitlingStyling.textColor': - return 'Textfärg'; - case 'subtitlingStyling.borderSize': - return 'Kantstorlek'; - case 'subtitlingStyling.borderColor': - return 'Kantfärg'; - case 'subtitlingStyling.backgroundOpacity': - return 'Bakgrundsopacitet'; - case 'subtitlingStyling.backgroundColor': - return 'Bakgrundsfärg'; - case 'dialog.confirmAction': - return 'Bekräfta åtgärd'; - case 'dialog.areYouSure': - return 'Är du säker på att du vill utföra denna åtgärd?'; - case 'dialog.cancel': - return 'Avbryt'; - case 'dialog.playNow': - return 'Spela nu'; - case 'discover.title': - return 'Upptäck'; - case 'discover.switchProfile': - return 'Byt profil'; - case 'discover.switchServer': - return 'Byt server'; - case 'discover.logout': - return 'Logga ut'; - case 'discover.noContentAvailable': - return 'Inget innehåll tillgängligt'; - case 'discover.addMediaToLibraries': - return 'Lägg till media till dina bibliotek'; - case 'discover.continueWatching': - return 'Fortsätt titta'; - case 'discover.recentlyAdded': - return 'Nyligen tillagda'; - case 'discover.play': - return 'Spela'; - case 'discover.resume': - return 'Återuppta'; - case 'discover.playEpisode': - return ({required Object season, required Object episode}) => - 'Spela S${season}, E${episode}'; - case 'discover.resumeEpisode': - return ({required Object season, required Object episode}) => - 'Återuppta S${season}, E${episode}'; - case 'discover.pause': - return 'Pausa'; - case 'discover.overview': - return 'Översikt'; - case 'discover.cast': - return 'Rollbesättning'; - case 'discover.seasons': - return 'Säsonger'; - case 'discover.studio': - return 'Studio'; - case 'discover.rating': - return 'Åldersgräns'; - case 'discover.watched': - return 'Tittad'; - case 'discover.episodeCount': - return ({required Object count}) => '${count} avsnitt'; - case 'discover.watchedProgress': - return ({required Object watched, required Object total}) => - '${watched}/${total} sedda'; - case 'discover.movie': - return 'Film'; - case 'discover.tvShow': - return 'TV-serie'; - case 'discover.minutesLeft': - return ({required Object minutes}) => '${minutes} min kvar'; - case 'errors.searchFailed': - return ({required Object error}) => 'Sökning misslyckades: ${error}'; - case 'errors.connectionTimeout': - return ({required Object context}) => - 'Anslutnings-timeout vid laddning ${context}'; - case 'errors.connectionFailed': - return 'Kan inte ansluta till Plex-server'; - case 'errors.failedToLoad': - return ({required Object context, required Object error}) => - 'Misslyckades att ladda ${context}: ${error}'; - case 'errors.noClientAvailable': - return 'Ingen klient tillgänglig'; - case 'errors.authenticationFailed': - return ({required Object error}) => - 'Autentisering misslyckades: ${error}'; - case 'errors.couldNotLaunchUrl': - return 'Kunde inte öppna autentiserings-URL'; - case 'errors.pleaseEnterToken': - return 'Vänligen ange en token'; - case 'errors.invalidToken': - return 'Ogiltig token'; - case 'errors.failedToVerifyToken': - return ({required Object error}) => - 'Misslyckades att verifiera token: ${error}'; - case 'errors.failedToSwitchProfile': - return ({required Object displayName}) => - 'Misslyckades att byta till ${displayName}'; - case 'errors.connectionFailedGeneric': - return 'Anslutning misslyckades'; - case 'libraries.title': - return 'Bibliotek'; - case 'libraries.scanLibraryFiles': - return 'Skanna biblioteksfiler'; - case 'libraries.scanLibrary': - return 'Skanna bibliotek'; - case 'libraries.analyze': - return 'Analysera'; - case 'libraries.analyzeLibrary': - return 'Analysera bibliotek'; - case 'libraries.refreshMetadata': - return 'Uppdatera metadata'; - case 'libraries.emptyTrash': - return 'Töm papperskorg'; - case 'libraries.emptyingTrash': - return ({required Object title}) => - 'Tömmer papperskorg för "${title}"...'; - case 'libraries.trashEmptied': - return ({required Object title}) => 'Papperskorg tömd för "${title}"'; - case 'libraries.failedToEmptyTrash': - return ({required Object error}) => - 'Misslyckades att tömma papperskorg: ${error}'; - case 'libraries.analyzing': - return ({required Object title}) => 'Analyserar "${title}"...'; - case 'libraries.analysisStarted': - return ({required Object title}) => 'Analys startad för "${title}"'; - case 'libraries.failedToAnalyze': - return ({required Object error}) => - 'Misslyckades att analysera bibliotek: ${error}'; - case 'libraries.noLibrariesFound': - return 'Inga bibliotek hittades'; - case 'libraries.thisLibraryIsEmpty': - return 'Detta bibliotek är tomt'; - case 'libraries.all': - return 'Alla'; - case 'libraries.clearAll': - return 'Rensa alla'; - case 'libraries.scanLibraryConfirm': - return ({required Object title}) => - 'Är du säker på att du vill skanna "${title}"?'; - case 'libraries.analyzeLibraryConfirm': - return ({required Object title}) => - 'Är du säker på att du vill analysera "${title}"?'; - case 'libraries.refreshMetadataConfirm': - return ({required Object title}) => - 'Är du säker på att du vill uppdatera metadata för "${title}"?'; - case 'libraries.emptyTrashConfirm': - return ({required Object title}) => - 'Är du säker på att du vill tömma papperskorgen för "${title}"?'; - case 'libraries.manageLibraries': - return 'Hantera bibliotek'; - case 'libraries.sort': - return 'Sortera'; - case 'libraries.sortBy': - return 'Sortera efter'; - case 'libraries.filters': - return 'Filter'; - case 'libraries.loadingLibraryWithCount': - return ({required Object count}) => - 'Laddar bibliotek... (${count} objekt laddade)'; - case 'libraries.confirmActionMessage': - return 'Är du säker på att du vill utföra denna åtgärd?'; - case 'libraries.showLibrary': - return 'Visa bibliotek'; - case 'libraries.hideLibrary': - return 'Dölj bibliotek'; - case 'libraries.libraryOptions': - return 'Biblioteksalternativ'; - case 'libraries.content': - return 'bibliotekets innehåll'; - case 'libraries.selectLibrary': - return 'Välj bibliotek'; - case 'libraries.filtersWithCount': - return ({required Object count}) => 'Filter (${count})'; - case 'libraries.noRecommendations': - return 'Inga rekommendationer tillgängliga'; - case 'libraries.noCollections': - return 'Inga samlingar i det här biblioteket'; - case 'libraries.noFoldersFound': - return 'Inga mappar hittades'; - case 'libraries.folders': - return 'mappar'; - case 'libraries.tabs.recommended': - return 'Rekommenderat'; - case 'libraries.tabs.browse': - return 'Bläddra'; - case 'libraries.tabs.collections': - return 'Samlingar'; - case 'libraries.tabs.playlists': - return 'Spellistor'; - case 'libraries.groupings.all': - return 'Alla'; - case 'libraries.groupings.movies': - return 'Filmer'; - case 'libraries.groupings.shows': - return 'Serier'; - case 'libraries.groupings.seasons': - return 'Säsonger'; - case 'libraries.groupings.episodes': - return 'Avsnitt'; - case 'libraries.groupings.folders': - return 'Mappar'; - case 'about.title': - return 'Om'; - case 'about.openSourceLicenses': - return 'Öppen källkod-licenser'; - case 'about.versionLabel': - return ({required Object version}) => 'Version ${version}'; - case 'about.appDescription': - return 'En vacker Plex-klient för Flutter'; - case 'about.viewLicensesDescription': - return 'Visa licenser för tredjepartsbibliotek'; - case 'serverSelection.connectingToServer': - return 'Ansluter till server...'; - case 'serverSelection.connectingToAllServers': - return 'Ansluter till alla servrar...'; - case 'serverSelection.connectToAllServers': - return 'Anslut till alla servrar'; - case 'serverSelection.allServerConnectionsFailed': - return 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.'; - case 'serverSelection.foundServers': - return ({required Object count}) => 'Hittade ${count} server(ar)'; - case 'serverSelection.orSelectIndividually': - return 'Eller välj en server individuellt:'; - case 'serverSelection.serverDebugCopied': - return 'Server-felsökningsdata kopierad till urklipp'; - case 'serverSelection.copyDebugData': - return 'Kopiera felsökningsdata'; - case 'serverSelection.noServersFound': - return 'Inga servrar hittades'; - case 'serverSelection.malformedServerData': - return ({required Object count}) => - 'Hittade ${count} server(ar) med felformaterad data. Inga giltiga servrar tillgängliga.'; - case 'serverSelection.incompleteServerInfo': - return 'Vissa servrar har ofullständig information och hoppades över. Vänligen kontrollera ditt Plex.tv-konto.'; - case 'serverSelection.incompleteConnectionInfo': - return 'Server-anslutningsinformation är ofullständig. Försök igen.'; - case 'serverSelection.malformedServerInfo': - return ({required Object message}) => - 'Serverinformation är felformaterad: ${message}'; - case 'serverSelection.networkConnectionFailed': - return 'Nätverksanslutning misslyckades. Kontrollera din internetanslutning och försök igen.'; - case 'serverSelection.authenticationFailed': - return 'Autentisering misslyckades. Logga in igen.'; - case 'serverSelection.plexServiceUnavailable': - return 'Plex-tjänst otillgänglig. Försök igen senare.'; - case 'serverSelection.failedToLoadServers': - return ({required Object error}) => - 'Misslyckades att ladda servrar: ${error}'; - case 'hubDetail.title': - return 'Titel'; - case 'hubDetail.releaseYear': - return 'Utgivningsår'; - case 'hubDetail.dateAdded': - return 'Datum tillagd'; - case 'hubDetail.rating': - return 'Betyg'; - case 'hubDetail.noItemsFound': - return 'Inga objekt hittades'; - case 'logs.title': - return 'Loggar'; - case 'logs.clearLogs': - return 'Rensa loggar'; - case 'logs.copyLogs': - return 'Kopiera loggar'; - case 'logs.exportLogs': - return 'Exportera loggar'; - case 'logs.noLogsToShow': - return 'Inga loggar att visa'; - case 'logs.error': - return 'Fel:'; - case 'logs.stackTrace': - return 'Stack trace:'; - case 'licenses.relatedPackages': - return 'Relaterade paket'; - case 'licenses.license': - return 'Licens'; - case 'licenses.licenseNumber': - return ({required Object number}) => 'Licens ${number}'; - case 'licenses.licensesCount': - return ({required Object count}) => '${count} licenser'; - case 'navigation.home': - return 'Hem'; - case 'navigation.search': - return 'Sök'; - case 'navigation.libraries': - return 'Bibliotek'; - case 'navigation.settings': - return 'Inställningar'; - case 'playlists.title': - return 'Spellistor'; - case 'playlists.noPlaylists': - return 'Inga spellistor hittades'; - case 'playlists.create': - return 'Skapa spellista'; - case 'playlists.newPlaylist': - return 'Ny spellista'; - case 'playlists.playlistName': - return 'Spellistans namn'; - case 'playlists.enterPlaylistName': - return 'Ange spellistans namn'; - case 'playlists.edit': - return 'Redigera spellista'; - case 'playlists.delete': - return 'Ta bort spellista'; - case 'playlists.addTo': - return 'Lägg till i spellista'; - case 'playlists.addItems': - return 'Lägg till objekt'; - case 'playlists.removeItem': - return 'Ta bort från spellista'; - case 'playlists.clearPlaylist': - return 'Rensa spellista'; - case 'playlists.playAll': - return 'Spela alla'; - case 'playlists.shuffle': - return 'Blanda'; - case 'playlists.smartPlaylist': - return 'Smart spellista'; - case 'playlists.regularPlaylist': - return 'Vanlig spellista'; - case 'playlists.itemCount': - return ({required Object count}) => '${count} objekt'; - case 'playlists.oneItem': - return '1 objekt'; - case 'playlists.emptyPlaylist': - return 'Denna spellista är tom'; - case 'playlists.deleteConfirm': - return 'Ta bort spellista?'; - case 'playlists.deleteMessage': - return ({required Object name}) => - 'Är du säker på att du vill ta bort "${name}"?'; - case 'playlists.created': - return 'Spellista skapad'; - case 'playlists.updated': - return 'Spellista uppdaterad'; - case 'playlists.deleted': - return 'Spellista borttagen'; - case 'playlists.itemAdded': - return 'Tillagd i spellista'; - case 'playlists.itemRemoved': - return 'Borttagen från spellista'; - case 'playlists.selectPlaylist': - return 'Välj spellista'; - case 'playlists.createNewPlaylist': - return 'Skapa ny spellista'; - case 'playlists.errorCreating': - return 'Det gick inte att skapa spellista'; - case 'playlists.errorDeleting': - return 'Det gick inte att ta bort spellista'; - case 'playlists.errorLoading': - return 'Det gick inte att ladda spellistor'; - case 'playlists.errorAdding': - return 'Det gick inte att lägga till i spellista'; - case 'playlists.errorReordering': - return 'Det gick inte att omordna spellisteobjekt'; - case 'playlists.errorRemoving': - return 'Det gick inte att ta bort från spellista'; - case 'playlists.playlist': - return 'Spellista'; - case 'collections.title': - return 'Samlingar'; - case 'collections.collection': - return 'Samling'; - case 'collections.empty': - return 'Samlingen är tom'; - case 'collections.noItems': - return 'Inga objekt i den här samlingen'; - case 'collections.unknownLibrarySection': - return 'Kan inte ta bort: okänd bibliotekssektion'; - case 'collections.deleteCollection': - return 'Ta bort samling'; - case 'collections.deleteConfirm': - return ({required Object title}) => - 'Är du säker på att du vill ta bort "${title}"? Detta går inte att ångra.'; - case 'collections.deleted': - return 'Samling borttagen'; - case 'collections.deleteFailed': - return 'Det gick inte att ta bort samlingen'; - case 'collections.deleteFailedWithError': - return ({required Object error}) => - 'Det gick inte att ta bort samlingen: ${error}'; - case 'collections.failedToLoadItems': - return ({required Object error}) => - 'Det gick inte att läsa in samlingsobjekt: ${error}'; - case 'collections.addTo': - return 'Lägg till i samling'; - case 'collections.selectCollection': - return 'Välj samling'; - case 'collections.createNewCollection': - return 'Skapa ny samling'; - case 'collections.collectionName': - return 'Samlingsnamn'; - case 'collections.enterCollectionName': - return 'Ange samlingsnamn'; - case 'collections.addedToCollection': - return 'Tillagd i samling'; - case 'collections.errorAddingToCollection': - return 'Fel vid tillägg i samling'; - case 'collections.created': - return 'Samling skapad'; - case 'collections.removeFromCollection': - return 'Ta bort från samling'; - case 'collections.removeFromCollectionConfirm': - return ({required Object title}) => - 'Ta bort "${title}" från denna samling?'; - case 'collections.removedFromCollection': - return 'Borttagen från samling'; - case 'collections.removeFromCollectionFailed': - return 'Misslyckades med att ta bort från samling'; - case 'collections.removeFromCollectionError': - return ({required Object error}) => - 'Fel vid borttagning från samling: ${error}'; - default: - return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': return 'Plezy'; + case 'app.loading': return 'Laddar...'; + case 'auth.signInWithPlex': return 'Logga in med Plex'; + case 'auth.showQRCode': return 'Visa QR-kod'; + case 'auth.cancel': return 'Avbryt'; + case 'auth.authenticate': return 'Autentisera'; + case 'auth.retry': return 'Försök igen'; + case 'auth.debugEnterToken': return 'Debug: Ange Plex-token'; + case 'auth.plexTokenLabel': return 'Plex-autentiseringstoken'; + case 'auth.plexTokenHint': return 'Ange din Plex.tv-token'; + case 'auth.authenticationTimeout': return 'Autentisering tog för lång tid. Försök igen.'; + case 'auth.scanQRCodeInstruction': return 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.'; + case 'auth.waitingForAuth': return 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.'; + case 'common.cancel': return 'Avbryt'; + case 'common.save': return 'Spara'; + case 'common.close': return 'Stäng'; + case 'common.clear': return 'Rensa'; + case 'common.reset': return 'Återställ'; + case 'common.later': return 'Senare'; + case 'common.submit': return 'Skicka'; + case 'common.confirm': return 'Bekräfta'; + case 'common.retry': return 'Försök igen'; + case 'common.playNow': return 'Spela nu'; + case 'common.logout': return 'Logga ut'; + case 'common.online': return 'Online'; + case 'common.offline': return 'Offline'; + case 'common.owned': return 'Egen'; + case 'common.shared': return 'Delad'; + case 'common.current': return 'NUVARANDE'; + case 'common.unknown': return 'Okänd'; + case 'common.refresh': return 'Uppdatera'; + case 'common.yes': return 'Ja'; + case 'common.no': return 'Nej'; + case 'common.server': return 'Server'; + case 'common.delete': return 'Ta bort'; + case 'common.shuffle': return 'Blanda'; + case 'common.addTo': return 'Lägg till i...'; + case 'screens.licenses': return 'Licenser'; + case 'screens.selectServer': return 'Välj server'; + case 'screens.switchProfile': return 'Byt profil'; + case 'screens.subtitleStyling': return 'Undertext-styling'; + case 'screens.search': return 'Sök'; + case 'screens.logs': return 'Loggar'; + case 'update.available': return 'Uppdatering tillgänglig'; + case 'update.versionAvailable': return ({required Object version}) => 'Version ${version} är tillgänglig'; + case 'update.currentVersion': return ({required Object version}) => 'Nuvarande: ${version}'; + case 'update.skipVersion': return 'Hoppa över denna version'; + case 'update.viewRelease': return 'Visa release'; + case 'update.latestVersion': return 'Du har den senaste versionen'; + case 'update.checkFailed': return 'Misslyckades att kontrollera uppdateringar'; + case 'settings.title': return 'Inställningar'; + case 'settings.language': return 'Språk'; + case 'settings.theme': return 'Tema'; + case 'settings.appearance': return 'Utseende'; + case 'settings.videoPlayback': return 'Videouppspelning'; + case 'settings.shufflePlay': return 'Blanda uppspelning'; + case 'settings.advanced': return 'Avancerat'; + case 'settings.useSeasonPostersDescription': return 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; + case 'settings.showHeroSectionDescription': return 'Visa utvalda innehållskarusell på startsidan'; + case 'settings.secondsLabel': return 'Sekunder'; + case 'settings.minutesLabel': return 'Minuter'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => 'Ange tid (${min}-${max})'; + case 'settings.systemTheme': return 'System'; + case 'settings.systemThemeDescription': return 'Följ systeminställningar'; + case 'settings.lightTheme': return 'Ljust'; + case 'settings.darkTheme': return 'Mörkt'; + case 'settings.libraryDensity': return 'Biblioteksdensitet'; + case 'settings.compact': return 'Kompakt'; + case 'settings.compactDescription': return 'Mindre kort, fler objekt synliga'; + case 'settings.normal': return 'Normal'; + case 'settings.normalDescription': return 'Standardstorlek'; + case 'settings.comfortable': return 'Bekväm'; + case 'settings.comfortableDescription': return 'Större kort, färre objekt synliga'; + case 'settings.viewMode': return 'Visningsläge'; + case 'settings.gridView': return 'Rutnät'; + case 'settings.gridViewDescription': return 'Visa objekt i rutnätslayout'; + case 'settings.listView': return 'Lista'; + case 'settings.listViewDescription': return 'Visa objekt i listlayout'; + case 'settings.useSeasonPosters': return 'Använd säsongsaffischer'; + case 'settings.showHeroSection': return 'Visa hjältesektion'; + case 'settings.hardwareDecoding': return 'Hårdvaruavkodning'; + case 'settings.hardwareDecodingDescription': return 'Använd hårdvaruacceleration när tillgängligt'; + case 'settings.bufferSize': return 'Bufferstorlek'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return 'Undertext-styling'; + case 'settings.subtitleStylingDescription': return 'Anpassa undertextutseende'; + case 'settings.smallSkipDuration': return 'Kort hoppvaraktighet'; + case 'settings.largeSkipDuration': return 'Lång hoppvaraktighet'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} sekunder'; + case 'settings.defaultSleepTimer': return 'Standard sovtimer'; + case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} minuter'; + case 'settings.rememberTrackSelections': return 'Kom ihåg spårval per serie/film'; + case 'settings.rememberTrackSelectionsDescription': return 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; + case 'settings.unwatchedOnly': return 'Endast osedda'; + case 'settings.unwatchedOnlyDescription': return 'Inkludera endast osedda avsnitt i blandningskön'; + case 'settings.shuffleOrderNavigation': return 'Blandningsordning-navigation'; + case 'settings.shuffleOrderNavigationDescription': return 'Nästa/föregående knappar följer blandad ordning'; + case 'settings.loopShuffleQueue': return 'Loopa blandningskö'; + case 'settings.loopShuffleQueueDescription': return 'Starta om kö när slutet nås'; + case 'settings.videoPlayerControls': return 'Videospelar-kontroller'; + case 'settings.keyboardShortcuts': return 'Tangentbordsgenvägar'; + case 'settings.keyboardShortcutsDescription': return 'Anpassa tangentbordsgenvägar'; + case 'settings.debugLogging': return 'Felsökningsloggning'; + case 'settings.debugLoggingDescription': return 'Aktivera detaljerad loggning för felsökning'; + case 'settings.viewLogs': return 'Visa loggar'; + case 'settings.viewLogsDescription': return 'Visa applikationsloggar'; + case 'settings.clearCache': return 'Rensa cache'; + case 'settings.clearCacheDescription': return 'Detta rensar alla cachade bilder och data. Appen kan ta längre tid att ladda innehåll efter cache-rensning.'; + case 'settings.clearCacheSuccess': return 'Cache rensad framgångsrikt'; + case 'settings.resetSettings': return 'Återställ inställningar'; + case 'settings.resetSettingsDescription': return 'Detta återställer alla inställningar till standardvärden. Denna åtgärd kan inte ångras.'; + case 'settings.resetSettingsSuccess': return 'Inställningar återställda framgångsrikt'; + case 'settings.shortcutsReset': return 'Genvägar återställda till standard'; + case 'settings.about': return 'Om'; + case 'settings.aboutDescription': return 'Appinformation och licenser'; + case 'settings.updates': return 'Uppdateringar'; + case 'settings.updateAvailable': return 'Uppdatering tillgänglig'; + case 'settings.checkForUpdates': return 'Kontrollera uppdateringar'; + case 'settings.validationErrorEnterNumber': return 'Vänligen ange ett giltigt nummer'; + case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => 'Tiden måste vara mellan ${min} och ${max} ${unit}'; + case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => 'Genväg redan tilldelad ${action}'; + case 'settings.shortcutUpdated': return ({required Object action}) => 'Genväg uppdaterad för ${action}'; + case 'settings.autoSkip': return 'Auto Hoppa Över'; + case 'settings.autoSkipIntro': return 'Hoppa Över Intro Automatiskt'; + case 'settings.autoSkipIntroDescription': return 'Hoppa automatiskt över intro-markörer efter några sekunder'; + case 'settings.autoSkipCredits': return 'Hoppa Över Credits Automatiskt'; + case 'settings.autoSkipCreditsDescription': return 'Hoppa automatiskt över credits och spela nästa avsnitt'; + case 'settings.autoSkipDelay': return 'Fördröjning Auto Hoppa Över'; + case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => 'Vänta ${seconds} sekunder innan automatisk överhoppning'; + case 'search.hint': return 'Sök filmer, serier, musik...'; + case 'search.tryDifferentTerm': return 'Prova en annan sökterm'; + case 'search.searchYourMedia': return 'Sök i dina media'; + case 'search.enterTitleActorOrKeyword': return 'Ange en titel, skådespelare eller nyckelord'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Sätt genväg för ${actionName}'; + case 'hotkeys.clearShortcut': return 'Rensa genväg'; + case 'pinEntry.enterPin': return 'Ange PIN'; + case 'pinEntry.showPin': return 'Visa PIN'; + case 'pinEntry.hidePin': return 'Dölj PIN'; + case 'fileInfo.title': return 'Filinformation'; + case 'fileInfo.video': return 'Video'; + case 'fileInfo.audio': return 'Ljud'; + case 'fileInfo.file': return 'Fil'; + case 'fileInfo.advanced': return 'Avancerat'; + case 'fileInfo.codec': return 'Kodek'; + case 'fileInfo.resolution': return 'Upplösning'; + case 'fileInfo.bitrate': return 'Bithastighet'; + case 'fileInfo.frameRate': return 'Bildfrekvens'; + case 'fileInfo.aspectRatio': return 'Bildförhållande'; + case 'fileInfo.profile': return 'Profil'; + case 'fileInfo.bitDepth': return 'Bitdjup'; + case 'fileInfo.colorSpace': return 'Färgrymd'; + case 'fileInfo.colorRange': return 'Färgområde'; + case 'fileInfo.colorPrimaries': return 'Färggrunder'; + case 'fileInfo.chromaSubsampling': return 'Kroma-undersampling'; + case 'fileInfo.channels': return 'Kanaler'; + case 'fileInfo.path': return 'Sökväg'; + case 'fileInfo.size': return 'Storlek'; + case 'fileInfo.container': return 'Container'; + case 'fileInfo.duration': return 'Varaktighet'; + case 'fileInfo.optimizedForStreaming': return 'Optimerad för streaming'; + case 'fileInfo.has64bitOffsets': return '64-bit offset'; + case 'mediaMenu.markAsWatched': return 'Markera som sedd'; + case 'mediaMenu.markAsUnwatched': return 'Markera som osedd'; + case 'mediaMenu.removeFromContinueWatching': return 'Ta bort från Fortsätt titta'; + case 'mediaMenu.goToSeries': return 'Gå till serie'; + case 'mediaMenu.goToSeason': return 'Gå till säsong'; + case 'mediaMenu.shufflePlay': return 'Blanda uppspelning'; + case 'mediaMenu.fileInfo': return 'Filinformation'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, film'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, TV-serie'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return 'sedd'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} procent sedd'; + case 'accessibility.mediaCardUnwatched': return 'osedd'; + case 'accessibility.tapToPlay': return 'Tryck för att spela'; + case 'tooltips.shufflePlay': return 'Blanda uppspelning'; + case 'tooltips.markAsWatched': return 'Markera som sedd'; + case 'tooltips.markAsUnwatched': return 'Markera som osedd'; + case 'videoControls.audioLabel': return 'Ljud'; + case 'videoControls.subtitlesLabel': return 'Undertexter'; + case 'videoControls.resetToZero': return 'Återställ till 0ms'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} spelas senare'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} spelas tidigare'; + case 'videoControls.noOffset': return 'Ingen offset'; + case 'videoControls.letterbox': return 'Letterbox'; + case 'videoControls.fillScreen': return 'Fyll skärm'; + case 'videoControls.stretch': return 'Sträck'; + case 'videoControls.lockRotation': return 'Lås rotation'; + case 'videoControls.unlockRotation': return 'Lås upp rotation'; + case 'videoControls.sleepTimer': return 'Sovtimer'; + case 'videoControls.timerActive': return 'Timer aktiv'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Uppspelningen pausas om ${duration}'; + case 'videoControls.sleepTimerCompleted': return 'Sovtimer slutförd - uppspelning pausad'; + case 'videoControls.playButton': return 'Spela'; + case 'videoControls.pauseButton': return 'Pausa'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Spola bakåt ${seconds} sekunder'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Spola framåt ${seconds} sekunder'; + case 'videoControls.previousButton': return 'Föregående avsnitt'; + case 'videoControls.nextButton': return 'Nästa avsnitt'; + case 'videoControls.previousChapterButton': return 'Föregående kapitel'; + case 'videoControls.nextChapterButton': return 'Nästa kapitel'; + case 'videoControls.volumeButton': return 'Volym'; + case 'videoControls.muteButton': return 'Tysta'; + case 'videoControls.unmuteButton': return 'Slå på ljud'; + case 'videoControls.settingsButton': return 'Videoinställningar'; + case 'videoControls.audioTrackButton': return 'Ljudspår'; + case 'videoControls.subtitlesButton': return 'Undertexter'; + case 'videoControls.chaptersButton': return 'Kapitel'; + case 'videoControls.versionsButton': return 'Videoversioner'; + case 'videoControls.aspectRatioButton': return 'Bildförhållande'; + case 'videoControls.fullscreenButton': return 'Aktivera helskärm'; + case 'videoControls.exitFullscreenButton': return 'Avsluta helskärm'; + case 'videoControls.rotationLockButton': return 'Rotationslås'; + case 'videoControls.timelineSlider': return 'Videotidslinje'; + case 'videoControls.volumeSlider': return 'Volymnivå'; + case 'videoControls.backButton': return 'Tillbaka'; + case 'userStatus.admin': return 'Admin'; + case 'userStatus.restricted': return 'Begränsad'; + case 'userStatus.protected': return 'Skyddad'; + case 'userStatus.current': return 'NUVARANDE'; + case 'messages.markedAsWatched': return 'Markerad som sedd'; + case 'messages.markedAsUnwatched': return 'Markerad som osedd'; + case 'messages.removedFromContinueWatching': return 'Borttagen från Fortsätt titta'; + case 'messages.errorLoading': return ({required Object error}) => 'Fel: ${error}'; + case 'messages.fileInfoNotAvailable': return 'Filinformation inte tillgänglig'; + case 'messages.errorLoadingFileInfo': return ({required Object error}) => 'Fel vid laddning av filinformation: ${error}'; + case 'messages.errorLoadingSeries': return 'Fel vid laddning av serie'; + case 'messages.errorLoadingSeason': return 'Fel vid laddning av säsong'; + case 'messages.musicNotSupported': return 'Musikuppspelning stöds inte ännu'; + case 'messages.logsCleared': return 'Loggar rensade'; + case 'messages.logsCopied': return 'Loggar kopierade till urklipp'; + case 'messages.noLogsAvailable': return 'Inga loggar tillgängliga'; + case 'messages.libraryScanning': return ({required Object title}) => 'Skannar "${title}"...'; + case 'messages.libraryScanStarted': return ({required Object title}) => 'Biblioteksskanning startad för "${title}"'; + case 'messages.libraryScanFailed': return ({required Object error}) => 'Misslyckades att skanna bibliotek: ${error}'; + case 'messages.metadataRefreshing': return ({required Object title}) => 'Uppdaterar metadata för "${title}"...'; + case 'messages.metadataRefreshStarted': return ({required Object title}) => 'Metadata-uppdatering startad för "${title}"'; + case 'messages.metadataRefreshFailed': return ({required Object error}) => 'Misslyckades att uppdatera metadata: ${error}'; + case 'messages.noPlexToken': return 'Ingen Plex-token hittad. Vänligen logga in igen.'; + case 'messages.logoutConfirm': return 'Är du säker på att du vill logga ut?'; + case 'messages.noSeasonsFound': return 'Inga säsonger hittades'; + case 'messages.noEpisodesFound': return 'Inga avsnitt hittades i första säsongen'; + case 'messages.noEpisodesFoundGeneral': return 'Inga avsnitt hittades'; + case 'messages.noResultsFound': return 'Inga resultat hittades'; + case 'messages.sleepTimerSet': return ({required Object label}) => 'Sovtimer inställd för ${label}'; + case 'messages.failedToSwitchProfile': return ({required Object displayName}) => 'Misslyckades att byta till ${displayName}'; + case 'messages.noItemsAvailable': return 'Inga objekt tillgängliga'; + case 'messages.failedToCreatePlayQueue': return 'Det gick inte att skapa uppspelningskö'; + case 'messages.failedToCreatePlayQueueNoItems': return 'Det gick inte att skapa uppspelningskö – inga objekt'; + case 'messages.failedPlayback': return ({required Object action, required Object error}) => 'Kunde inte ${action}: ${error}'; + case 'profile.noUsersAvailable': return 'Inga användare tillgängliga'; + case 'subtitlingStyling.stylingOptions': return 'Stilalternativ'; + case 'subtitlingStyling.fontSize': return 'Teckenstorlek'; + case 'subtitlingStyling.textColor': return 'Textfärg'; + case 'subtitlingStyling.borderSize': return 'Kantstorlek'; + case 'subtitlingStyling.borderColor': return 'Kantfärg'; + case 'subtitlingStyling.backgroundOpacity': return 'Bakgrundsopacitet'; + case 'subtitlingStyling.backgroundColor': return 'Bakgrundsfärg'; + case 'dialog.confirmAction': return 'Bekräfta åtgärd'; + case 'dialog.areYouSure': return 'Är du säker på att du vill utföra denna åtgärd?'; + case 'dialog.cancel': return 'Avbryt'; + case 'dialog.playNow': return 'Spela nu'; + case 'discover.title': return 'Upptäck'; + case 'discover.switchProfile': return 'Byt profil'; + case 'discover.switchServer': return 'Byt server'; + case 'discover.logout': return 'Logga ut'; + case 'discover.noContentAvailable': return 'Inget innehåll tillgängligt'; + case 'discover.addMediaToLibraries': return 'Lägg till media till dina bibliotek'; + case 'discover.continueWatching': return 'Fortsätt titta'; + case 'discover.recentlyAdded': return 'Nyligen tillagda'; + case 'discover.play': return 'Spela'; + case 'discover.resume': return 'Återuppta'; + case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'Spela S${season}, E${episode}'; + case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => 'Återuppta S${season}, E${episode}'; + case 'discover.pause': return 'Pausa'; + case 'discover.overview': return 'Översikt'; + case 'discover.cast': return 'Rollbesättning'; + case 'discover.seasons': return 'Säsonger'; + case 'discover.studio': return 'Studio'; + case 'discover.rating': return 'Åldersgräns'; + case 'discover.watched': return 'Tittad'; + case 'discover.episodeCount': return ({required Object count}) => '${count} avsnitt'; + case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '${watched}/${total} sedda'; + case 'discover.movie': return 'Film'; + case 'discover.tvShow': return 'TV-serie'; + case 'discover.minutesLeft': return ({required Object minutes}) => '${minutes} min kvar'; + case 'errors.searchFailed': return ({required Object error}) => 'Sökning misslyckades: ${error}'; + case 'errors.connectionTimeout': return ({required Object context}) => 'Anslutnings-timeout vid laddning ${context}'; + case 'errors.connectionFailed': return 'Kan inte ansluta till Plex-server'; + case 'errors.failedToLoad': return ({required Object context, required Object error}) => 'Misslyckades att ladda ${context}: ${error}'; + case 'errors.noClientAvailable': return 'Ingen klient tillgänglig'; + case 'errors.authenticationFailed': return ({required Object error}) => 'Autentisering misslyckades: ${error}'; + case 'errors.couldNotLaunchUrl': return 'Kunde inte öppna autentiserings-URL'; + case 'errors.pleaseEnterToken': return 'Vänligen ange en token'; + case 'errors.invalidToken': return 'Ogiltig token'; + case 'errors.failedToVerifyToken': return ({required Object error}) => 'Misslyckades att verifiera token: ${error}'; + case 'errors.failedToSwitchProfile': return ({required Object displayName}) => 'Misslyckades att byta till ${displayName}'; + case 'errors.connectionFailedGeneric': return 'Anslutning misslyckades'; + case 'libraries.title': return 'Bibliotek'; + case 'libraries.scanLibraryFiles': return 'Skanna biblioteksfiler'; + case 'libraries.scanLibrary': return 'Skanna bibliotek'; + case 'libraries.analyze': return 'Analysera'; + case 'libraries.analyzeLibrary': return 'Analysera bibliotek'; + case 'libraries.refreshMetadata': return 'Uppdatera metadata'; + case 'libraries.emptyTrash': return 'Töm papperskorg'; + case 'libraries.emptyingTrash': return ({required Object title}) => 'Tömmer papperskorg för "${title}"...'; + case 'libraries.trashEmptied': return ({required Object title}) => 'Papperskorg tömd för "${title}"'; + case 'libraries.failedToEmptyTrash': return ({required Object error}) => 'Misslyckades att tömma papperskorg: ${error}'; + case 'libraries.analyzing': return ({required Object title}) => 'Analyserar "${title}"...'; + case 'libraries.analysisStarted': return ({required Object title}) => 'Analys startad för "${title}"'; + case 'libraries.failedToAnalyze': return ({required Object error}) => 'Misslyckades att analysera bibliotek: ${error}'; + case 'libraries.noLibrariesFound': return 'Inga bibliotek hittades'; + case 'libraries.thisLibraryIsEmpty': return 'Detta bibliotek är tomt'; + case 'libraries.all': return 'Alla'; + case 'libraries.clearAll': return 'Rensa alla'; + case 'libraries.scanLibraryConfirm': return ({required Object title}) => 'Är du säker på att du vill skanna "${title}"?'; + case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => 'Är du säker på att du vill analysera "${title}"?'; + case 'libraries.refreshMetadataConfirm': return ({required Object title}) => 'Är du säker på att du vill uppdatera metadata för "${title}"?'; + case 'libraries.emptyTrashConfirm': return ({required Object title}) => 'Är du säker på att du vill tömma papperskorgen för "${title}"?'; + case 'libraries.manageLibraries': return 'Hantera bibliotek'; + case 'libraries.sort': return 'Sortera'; + case 'libraries.sortBy': return 'Sortera efter'; + case 'libraries.filters': return 'Filter'; + case 'libraries.loadingLibraryWithCount': return ({required Object count}) => 'Laddar bibliotek... (${count} objekt laddade)'; + case 'libraries.confirmActionMessage': return 'Är du säker på att du vill utföra denna åtgärd?'; + case 'libraries.showLibrary': return 'Visa bibliotek'; + case 'libraries.hideLibrary': return 'Dölj bibliotek'; + case 'libraries.libraryOptions': return 'Biblioteksalternativ'; + case 'libraries.content': return 'bibliotekets innehåll'; + case 'libraries.selectLibrary': return 'Välj bibliotek'; + case 'libraries.filtersWithCount': return ({required Object count}) => 'Filter (${count})'; + case 'libraries.noRecommendations': return 'Inga rekommendationer tillgängliga'; + case 'libraries.noCollections': return 'Inga samlingar i det här biblioteket'; + case 'libraries.noFoldersFound': return 'Inga mappar hittades'; + case 'libraries.folders': return 'mappar'; + case 'libraries.tabs.recommended': return 'Rekommenderat'; + case 'libraries.tabs.browse': return 'Bläddra'; + case 'libraries.tabs.collections': return 'Samlingar'; + case 'libraries.tabs.playlists': return 'Spellistor'; + case 'libraries.groupings.all': return 'Alla'; + case 'libraries.groupings.movies': return 'Filmer'; + case 'libraries.groupings.shows': return 'Serier'; + case 'libraries.groupings.seasons': return 'Säsonger'; + case 'libraries.groupings.episodes': return 'Avsnitt'; + case 'libraries.groupings.folders': return 'Mappar'; + case 'about.title': return 'Om'; + case 'about.openSourceLicenses': return 'Öppen källkod-licenser'; + case 'about.versionLabel': return ({required Object version}) => 'Version ${version}'; + case 'about.appDescription': return 'En vacker Plex-klient för Flutter'; + case 'about.viewLicensesDescription': return 'Visa licenser för tredjepartsbibliotek'; + case 'serverSelection.connectingToServer': return 'Ansluter till server...'; + case 'serverSelection.connectingToAllServers': return 'Ansluter till alla servrar...'; + case 'serverSelection.connectToAllServers': return 'Anslut till alla servrar'; + case 'serverSelection.allServerConnectionsFailed': return 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.'; + case 'serverSelection.foundServers': return ({required Object count}) => 'Hittade ${count} server(ar)'; + case 'serverSelection.orSelectIndividually': return 'Eller välj en server individuellt:'; + case 'serverSelection.serverDebugCopied': return 'Server-felsökningsdata kopierad till urklipp'; + case 'serverSelection.copyDebugData': return 'Kopiera felsökningsdata'; + case 'serverSelection.noServersFound': return 'Inga servrar hittades'; + case 'serverSelection.malformedServerData': return ({required Object count}) => 'Hittade ${count} server(ar) med felformaterad data. Inga giltiga servrar tillgängliga.'; + case 'serverSelection.incompleteServerInfo': return 'Vissa servrar har ofullständig information och hoppades över. Vänligen kontrollera ditt Plex.tv-konto.'; + case 'serverSelection.incompleteConnectionInfo': return 'Server-anslutningsinformation är ofullständig. Försök igen.'; + case 'serverSelection.malformedServerInfo': return ({required Object message}) => 'Serverinformation är felformaterad: ${message}'; + case 'serverSelection.networkConnectionFailed': return 'Nätverksanslutning misslyckades. Kontrollera din internetanslutning och försök igen.'; + case 'serverSelection.authenticationFailed': return 'Autentisering misslyckades. Logga in igen.'; + case 'serverSelection.plexServiceUnavailable': return 'Plex-tjänst otillgänglig. Försök igen senare.'; + case 'serverSelection.failedToLoadServers': return ({required Object error}) => 'Misslyckades att ladda servrar: ${error}'; + case 'hubDetail.title': return 'Titel'; + case 'hubDetail.releaseYear': return 'Utgivningsår'; + case 'hubDetail.dateAdded': return 'Datum tillagd'; + case 'hubDetail.rating': return 'Betyg'; + case 'hubDetail.noItemsFound': return 'Inga objekt hittades'; + case 'logs.title': return 'Loggar'; + case 'logs.clearLogs': return 'Rensa loggar'; + case 'logs.copyLogs': return 'Kopiera loggar'; + case 'logs.exportLogs': return 'Exportera loggar'; + case 'logs.noLogsToShow': return 'Inga loggar att visa'; + case 'logs.error': return 'Fel:'; + case 'logs.stackTrace': return 'Stack trace:'; + case 'licenses.relatedPackages': return 'Relaterade paket'; + case 'licenses.license': return 'Licens'; + case 'licenses.licenseNumber': return ({required Object number}) => 'Licens ${number}'; + case 'licenses.licensesCount': return ({required Object count}) => '${count} licenser'; + case 'navigation.home': return 'Hem'; + case 'navigation.search': return 'Sök'; + case 'navigation.libraries': return 'Bibliotek'; + case 'navigation.settings': return 'Inställningar'; + case 'playlists.title': return 'Spellistor'; + case 'playlists.noPlaylists': return 'Inga spellistor hittades'; + case 'playlists.create': return 'Skapa spellista'; + case 'playlists.newPlaylist': return 'Ny spellista'; + case 'playlists.playlistName': return 'Spellistans namn'; + case 'playlists.enterPlaylistName': return 'Ange spellistans namn'; + case 'playlists.edit': return 'Redigera spellista'; + case 'playlists.delete': return 'Ta bort spellista'; + case 'playlists.addTo': return 'Lägg till i spellista'; + case 'playlists.addItems': return 'Lägg till objekt'; + case 'playlists.removeItem': return 'Ta bort från spellista'; + case 'playlists.clearPlaylist': return 'Rensa spellista'; + case 'playlists.playAll': return 'Spela alla'; + case 'playlists.shuffle': return 'Blanda'; + case 'playlists.smartPlaylist': return 'Smart spellista'; + case 'playlists.regularPlaylist': return 'Vanlig spellista'; + case 'playlists.itemCount': return ({required Object count}) => '${count} objekt'; + case 'playlists.oneItem': return '1 objekt'; + case 'playlists.emptyPlaylist': return 'Denna spellista är tom'; + case 'playlists.deleteConfirm': return 'Ta bort spellista?'; + case 'playlists.deleteMessage': return ({required Object name}) => 'Är du säker på att du vill ta bort "${name}"?'; + case 'playlists.created': return 'Spellista skapad'; + case 'playlists.updated': return 'Spellista uppdaterad'; + case 'playlists.deleted': return 'Spellista borttagen'; + case 'playlists.itemAdded': return 'Tillagd i spellista'; + case 'playlists.itemRemoved': return 'Borttagen från spellista'; + case 'playlists.selectPlaylist': return 'Välj spellista'; + case 'playlists.createNewPlaylist': return 'Skapa ny spellista'; + case 'playlists.errorCreating': return 'Det gick inte att skapa spellista'; + case 'playlists.errorDeleting': return 'Det gick inte att ta bort spellista'; + case 'playlists.errorLoading': return 'Det gick inte att ladda spellistor'; + case 'playlists.errorAdding': return 'Det gick inte att lägga till i spellista'; + case 'playlists.errorReordering': return 'Det gick inte att omordna spellisteobjekt'; + case 'playlists.errorRemoving': return 'Det gick inte att ta bort från spellista'; + case 'playlists.playlist': return 'Spellista'; + case 'collections.title': return 'Samlingar'; + case 'collections.collection': return 'Samling'; + case 'collections.empty': return 'Samlingen är tom'; + case 'collections.noItems': return 'Inga objekt i den här samlingen'; + case 'collections.unknownLibrarySection': return 'Kan inte ta bort: okänd bibliotekssektion'; + case 'collections.deleteCollection': return 'Ta bort samling'; + case 'collections.deleteConfirm': return ({required Object title}) => 'Är du säker på att du vill ta bort "${title}"? Detta går inte att ångra.'; + case 'collections.deleted': return 'Samling borttagen'; + case 'collections.deleteFailed': return 'Det gick inte att ta bort samlingen'; + case 'collections.deleteFailedWithError': return ({required Object error}) => 'Det gick inte att ta bort samlingen: ${error}'; + case 'collections.failedToLoadItems': return ({required Object error}) => 'Det gick inte att läsa in samlingsobjekt: ${error}'; + case 'collections.addTo': return 'Lägg till i samling'; + case 'collections.selectCollection': return 'Välj samling'; + case 'collections.createNewCollection': return 'Skapa ny samling'; + case 'collections.collectionName': return 'Samlingsnamn'; + case 'collections.enterCollectionName': return 'Ange samlingsnamn'; + case 'collections.addedToCollection': return 'Tillagd i samling'; + case 'collections.errorAddingToCollection': return 'Fel vid tillägg i samling'; + case 'collections.created': return 'Samling skapad'; + case 'collections.removeFromCollection': return 'Ta bort från samling'; + case 'collections.removeFromCollectionConfirm': return ({required Object title}) => 'Ta bort "${title}" från denna samling?'; + case 'collections.removedFromCollection': return 'Borttagen från samling'; + case 'collections.removeFromCollectionFailed': return 'Misslyckades med att ta bort från samling'; + case 'collections.removeFromCollectionError': return ({required Object error}) => 'Fel vid borttagning från samling: ${error}'; + default: return null; + } + } } extension on _StringsZh { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': - return 'Plezy'; - case 'app.loading': - return '加载中...'; - case 'auth.signInWithPlex': - return '使用 Plex 登录'; - case 'auth.showQRCode': - return '显示二维码'; - case 'auth.cancel': - return '取消'; - case 'auth.authenticate': - return '验证'; - case 'auth.retry': - return '重试'; - case 'auth.debugEnterToken': - return '调试:输入 Plex Token'; - case 'auth.plexTokenLabel': - return 'Plex 授权令牌 (Auth Token)'; - case 'auth.plexTokenHint': - return '输入你的 Plex.tv 令牌'; - case 'auth.authenticationTimeout': - return '验证超时。请重试。'; - case 'auth.scanQRCodeInstruction': - return '请使用已登录 Plex 的设备扫描此二维码进行验证。'; - case 'auth.waitingForAuth': - return '等待验证中...\n请在你的浏览器中完成登录。'; - case 'common.cancel': - return '取消'; - case 'common.save': - return '保存'; - case 'common.close': - return '关闭'; - case 'common.clear': - return '清除'; - case 'common.reset': - return '重置'; - case 'common.later': - return '稍后'; - case 'common.submit': - return '提交'; - case 'common.confirm': - return '确认'; - case 'common.retry': - return '重试'; - case 'common.playNow': - return '立即播放'; - case 'common.logout': - return '登出'; - case 'common.online': - return '在线'; - case 'common.offline': - return '离线'; - case 'common.owned': - return '拥有'; - case 'common.shared': - return '共享'; - case 'common.current': - return '当前'; - case 'common.unknown': - return '未知'; - case 'common.refresh': - return '刷新'; - case 'common.yes': - return '是'; - case 'common.no': - return '否'; - case 'common.server': - return '服务器'; - case 'common.delete': - return '删除'; - case 'common.shuffle': - return '随机播放'; - case 'common.addTo': - return '添加到...'; - case 'screens.licenses': - return '许可证'; - case 'screens.selectServer': - return '选择服务器'; - case 'screens.switchProfile': - return '切换配置文件'; - case 'screens.subtitleStyling': - return '字幕样式'; - case 'screens.search': - return '搜索'; - case 'screens.logs': - return '日志'; - case 'update.available': - return '有可用更新'; - case 'update.versionAvailable': - return ({required Object version}) => '版本 ${version} 已发布'; - case 'update.currentVersion': - return ({required Object version}) => '当前版本: ${version}'; - case 'update.skipVersion': - return '跳过此版本'; - case 'update.viewRelease': - return '查看发布详情'; - case 'update.latestVersion': - return '已安装的版本是可用的最新版本'; - case 'update.checkFailed': - return '无法检查更新'; - case 'settings.title': - return '设置'; - case 'settings.language': - return '语言'; - case 'settings.theme': - return '主题'; - case 'settings.appearance': - return '外观'; - case 'settings.videoPlayback': - return '视频播放'; - case 'settings.shufflePlay': - return '随机播放'; - case 'settings.advanced': - return '高级'; - case 'settings.useSeasonPostersDescription': - return '为剧集显示季海报而非剧集海报'; - case 'settings.showHeroSectionDescription': - return '在主屏幕上显示精选内容轮播区'; - case 'settings.secondsLabel': - return '秒'; - case 'settings.minutesLabel': - return '分钟'; - case 'settings.secondsShort': - return 's'; - case 'settings.minutesShort': - return 'm'; - case 'settings.durationHint': - return ({required Object min, required Object max}) => - '输入时长 (${min}-${max})'; - case 'settings.systemTheme': - return '系统'; - case 'settings.systemThemeDescription': - return '跟随系统设置'; - case 'settings.lightTheme': - return '浅色'; - case 'settings.darkTheme': - return '深色'; - case 'settings.libraryDensity': - return '媒体库密度'; - case 'settings.compact': - return '紧凑'; - case 'settings.compactDescription': - return '卡片更小,显示更多项目'; - case 'settings.normal': - return '标准'; - case 'settings.normalDescription': - return '默认尺寸'; - case 'settings.comfortable': - return '舒适'; - case 'settings.comfortableDescription': - return '卡片更大,显示更少项目'; - case 'settings.viewMode': - return '视图模式'; - case 'settings.gridView': - return '网格视图'; - case 'settings.gridViewDescription': - return '以网格布局显示项目'; - case 'settings.listView': - return '列表视图'; - case 'settings.listViewDescription': - return '以列表布局显示项目'; - case 'settings.useSeasonPosters': - return '使用季海报'; - case 'settings.showHeroSection': - return '显示主要精选区'; - case 'settings.hardwareDecoding': - return '硬件解码'; - case 'settings.hardwareDecodingDescription': - return '如果可用,使用硬件加速'; - case 'settings.bufferSize': - return '缓冲区大小'; - case 'settings.bufferSizeMB': - return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': - return '字幕样式'; - case 'settings.subtitleStylingDescription': - return '调整字幕外观'; - case 'settings.smallSkipDuration': - return '短跳过时长'; - case 'settings.largeSkipDuration': - return '长跳过时长'; - case 'settings.secondsUnit': - return ({required Object seconds}) => '${seconds} 秒'; - case 'settings.defaultSleepTimer': - return '默认睡眠定时器'; - case 'settings.minutesUnit': - return ({required Object minutes}) => '${minutes} 分钟'; - case 'settings.rememberTrackSelections': - return '记住每个剧集/电影的音轨选择'; - case 'settings.rememberTrackSelectionsDescription': - return '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; - case 'settings.unwatchedOnly': - return '仅未观看'; - case 'settings.unwatchedOnlyDescription': - return '随机队列中仅包含未观看的剧集'; - case 'settings.shuffleOrderNavigation': - return '随机顺序导航'; - case 'settings.shuffleOrderNavigationDescription': - return '下一集/上一集按钮遵循随机播放顺序'; - case 'settings.loopShuffleQueue': - return '循环随机队列'; - case 'settings.loopShuffleQueueDescription': - return '在队列结束时重新开始'; - case 'settings.videoPlayerControls': - return '视频播放器控制'; - case 'settings.keyboardShortcuts': - return '键盘快捷键'; - case 'settings.keyboardShortcutsDescription': - return '自定义键盘快捷键'; - case 'settings.debugLogging': - return '调试日志'; - case 'settings.debugLoggingDescription': - return '启用详细日志记录以便故障排除'; - case 'settings.viewLogs': - return '查看日志'; - case 'settings.viewLogsDescription': - return '查看应用程序日志'; - case 'settings.clearCache': - return '清除缓存'; - case 'settings.clearCacheDescription': - return '这将清除所有缓存的图片和数据。清除缓存后,应用程序加载内容可能会变慢。'; - case 'settings.clearCacheSuccess': - return '缓存清除成功'; - case 'settings.resetSettings': - return '重置设置'; - case 'settings.resetSettingsDescription': - return '这会将所有设置重置为其默认值。此操作无法撤销。'; - case 'settings.resetSettingsSuccess': - return '设置重置成功'; - case 'settings.shortcutsReset': - return '快捷键已重置为默认值'; - case 'settings.about': - return '关于'; - case 'settings.aboutDescription': - return '应用程序信息和许可证'; - case 'settings.updates': - return '更新'; - case 'settings.updateAvailable': - return '有可用更新'; - case 'settings.checkForUpdates': - return '检查更新'; - case 'settings.validationErrorEnterNumber': - return '请输入一个有效的数字'; - case 'settings.validationErrorDuration': - return ({ - required Object min, - required Object max, - required Object unit, - }) => '时长必须介于 ${min} 和 ${max} ${unit} 之间'; - case 'settings.shortcutAlreadyAssigned': - return ({required Object action}) => '快捷键已被分配给 ${action}'; - case 'settings.shortcutUpdated': - return ({required Object action}) => '快捷键已为 ${action} 更新'; - case 'search.hint': - return '搜索电影、系列、音乐...'; - case 'search.tryDifferentTerm': - return '尝试不同的搜索词'; - case 'search.searchYourMedia': - return '搜索媒体'; - case 'search.enterTitleActorOrKeyword': - return '输入标题、演员或关键词'; - case 'hotkeys.setShortcutFor': - return ({required Object actionName}) => '为 ${actionName} 设置快捷键'; - case 'hotkeys.clearShortcut': - return '清除快捷键'; - case 'pinEntry.enterPin': - return '输入 PIN'; - case 'pinEntry.showPin': - return '显示 PIN'; - case 'pinEntry.hidePin': - return '隐藏 PIN'; - case 'fileInfo.title': - return '文件信息'; - case 'fileInfo.video': - return '视频'; - case 'fileInfo.audio': - return '音频'; - case 'fileInfo.file': - return '文件'; - case 'fileInfo.advanced': - return '高级'; - case 'fileInfo.codec': - return '编解码器'; - case 'fileInfo.resolution': - return '分辨率'; - case 'fileInfo.bitrate': - return '比特率'; - case 'fileInfo.frameRate': - return '帧率'; - case 'fileInfo.aspectRatio': - return '宽高比'; - case 'fileInfo.profile': - return '配置文件'; - case 'fileInfo.bitDepth': - return '位深度'; - case 'fileInfo.colorSpace': - return '色彩空间'; - case 'fileInfo.colorRange': - return '色彩范围'; - case 'fileInfo.colorPrimaries': - return '颜色原色'; - case 'fileInfo.chromaSubsampling': - return '色度子采样'; - case 'fileInfo.channels': - return '声道'; - case 'fileInfo.path': - return '路径'; - case 'fileInfo.size': - return '大小'; - case 'fileInfo.container': - return '容器'; - case 'fileInfo.duration': - return '时长'; - case 'fileInfo.optimizedForStreaming': - return '已优化用于流媒体'; - case 'fileInfo.has64bitOffsets': - return '64位偏移量'; - case 'mediaMenu.markAsWatched': - return '标记为已观看'; - case 'mediaMenu.markAsUnwatched': - return '标记为未观看'; - case 'mediaMenu.removeFromContinueWatching': - return '从继续观看中移除'; - case 'mediaMenu.goToSeries': - return '转到系列'; - case 'mediaMenu.goToSeason': - return '转到季'; - case 'mediaMenu.shufflePlay': - return '随机播放'; - case 'mediaMenu.fileInfo': - return '文件信息'; - case 'accessibility.mediaCardMovie': - return ({required Object title}) => '${title}, 电影'; - case 'accessibility.mediaCardShow': - return ({required Object title}) => '${title}, 电视剧'; - case 'accessibility.mediaCardEpisode': - return ({required Object title, required Object episodeInfo}) => - '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': - return ({required Object title, required Object seasonInfo}) => - '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': - return '已观看'; - case 'accessibility.mediaCardPartiallyWatched': - return ({required Object percent}) => '已观看 ${percent} 百分比'; - case 'accessibility.mediaCardUnwatched': - return '未观看'; - case 'accessibility.tapToPlay': - return '点击播放'; - case 'tooltips.shufflePlay': - return '随机播放'; - case 'tooltips.markAsWatched': - return '标记为已观看'; - case 'tooltips.markAsUnwatched': - return '标记为未观看'; - case 'videoControls.audioLabel': - return '音频'; - case 'videoControls.subtitlesLabel': - return '字幕'; - case 'videoControls.resetToZero': - return '重置为 0ms'; - case 'videoControls.addTime': - return ({required Object amount, required Object unit}) => - '+${amount}${unit}'; - case 'videoControls.minusTime': - return ({required Object amount, required Object unit}) => - '-${amount}${unit}'; - case 'videoControls.playsLater': - return ({required Object label}) => '${label} 播放较晚'; - case 'videoControls.playsEarlier': - return ({required Object label}) => '${label} 播放较早'; - case 'videoControls.noOffset': - return '无偏移'; - case 'videoControls.letterbox': - return '信箱模式(Letterbox)'; - case 'videoControls.fillScreen': - return '填充屏幕'; - case 'videoControls.stretch': - return '拉伸'; - case 'videoControls.lockRotation': - return '锁定旋转'; - case 'videoControls.unlockRotation': - return '解锁旋转'; - case 'videoControls.sleepTimer': - return '睡眠定时器'; - case 'videoControls.timerActive': - return '定时器已激活'; - case 'videoControls.playbackWillPauseIn': - return ({required Object duration}) => '播放将在 ${duration} 后暂停'; - case 'videoControls.sleepTimerCompleted': - return '睡眠定时器已完成 - 播放已暂停'; - case 'videoControls.playButton': - return '播放'; - case 'videoControls.pauseButton': - return '暂停'; - case 'videoControls.seekBackwardButton': - return ({required Object seconds}) => '后退 ${seconds} 秒'; - case 'videoControls.seekForwardButton': - return ({required Object seconds}) => '前进 ${seconds} 秒'; - case 'videoControls.previousButton': - return '上一集'; - case 'videoControls.nextButton': - return '下一集'; - case 'videoControls.previousChapterButton': - return '上一章节'; - case 'videoControls.nextChapterButton': - return '下一章节'; - case 'videoControls.volumeButton': - return '音量'; - case 'videoControls.muteButton': - return '静音'; - case 'videoControls.unmuteButton': - return '取消静音'; - case 'videoControls.settingsButton': - return '视频设置'; - case 'videoControls.audioTrackButton': - return '音轨'; - case 'videoControls.subtitlesButton': - return '字幕'; - case 'videoControls.chaptersButton': - return '章节'; - case 'videoControls.versionsButton': - return '视频版本'; - case 'videoControls.aspectRatioButton': - return '宽高比'; - case 'videoControls.fullscreenButton': - return '进入全屏'; - case 'videoControls.exitFullscreenButton': - return '退出全屏'; - case 'videoControls.rotationLockButton': - return '旋转锁定'; - case 'videoControls.timelineSlider': - return '视频时间轴'; - case 'videoControls.volumeSlider': - return '音量调节'; - case 'videoControls.backButton': - return '返回'; - case 'userStatus.admin': - return '管理员'; - case 'userStatus.restricted': - return '受限'; - case 'userStatus.protected': - return '受保护'; - case 'userStatus.current': - return '当前'; - case 'messages.markedAsWatched': - return '已标记为已观看'; - case 'messages.markedAsUnwatched': - return '已标记为未观看'; - case 'messages.removedFromContinueWatching': - return '已从继续观看中移除'; - case 'messages.errorLoading': - return ({required Object error}) => '错误: ${error}'; - case 'messages.fileInfoNotAvailable': - return '文件信息不可用'; - case 'messages.errorLoadingFileInfo': - return ({required Object error}) => '加载文件信息时出错: ${error}'; - case 'messages.errorLoadingSeries': - return '加载系列时出错'; - case 'messages.errorLoadingSeason': - return '加载季时出错'; - case 'messages.musicNotSupported': - return '尚不支持播放音乐'; - case 'messages.logsCleared': - return '日志已清除'; - case 'messages.logsCopied': - return '日志已复制到剪贴板'; - case 'messages.noLogsAvailable': - return '没有可用日志'; - case 'messages.libraryScanning': - return ({required Object title}) => '正在扫描 “${title}”...'; - case 'messages.libraryScanStarted': - return ({required Object title}) => '已开始扫描 “${title}” 媒体库'; - case 'messages.libraryScanFailed': - return ({required Object error}) => '无法扫描媒体库: ${error}'; - case 'messages.metadataRefreshing': - return ({required Object title}) => '正在刷新 “${title}” 的元数据...'; - case 'messages.metadataRefreshStarted': - return ({required Object title}) => '已开始刷新 “${title}” 的元数据'; - case 'messages.metadataRefreshFailed': - return ({required Object error}) => '无法刷新元数据: ${error}'; - case 'messages.noPlexToken': - return '未找到 Plex 令牌。请重新登录。'; - case 'messages.logoutConfirm': - return '你确定要登出吗?'; - case 'messages.noSeasonsFound': - return '未找到季'; - case 'messages.noEpisodesFound': - return '在第一季中未找到剧集'; - case 'messages.noEpisodesFoundGeneral': - return '未找到剧集'; - case 'messages.noResultsFound': - return '未找到结果'; - case 'messages.sleepTimerSet': - return ({required Object label}) => '睡眠定时器已设置为 ${label}'; - case 'messages.failedToSwitchProfile': - return ({required Object displayName}) => '无法切换到 ${displayName}'; - case 'messages.noItemsAvailable': - return '没有可用的项目'; - case 'messages.failedToCreatePlayQueue': - return '创建播放队列失败'; - case 'messages.failedToCreatePlayQueueNoItems': - return '创建播放队列失败 - 没有项目'; - case 'messages.failedPlayback': - return ({required Object action, required Object error}) => - '无法${action}: ${error}'; - case 'profile.noUsersAvailable': - return '没有可用用户'; - case 'subtitlingStyling.stylingOptions': - return '样式选项'; - case 'subtitlingStyling.fontSize': - return '字号'; - case 'subtitlingStyling.textColor': - return '文本颜色'; - case 'subtitlingStyling.borderSize': - return '边框大小'; - case 'subtitlingStyling.borderColor': - return '边框颜色'; - case 'subtitlingStyling.backgroundOpacity': - return '背景不透明度'; - case 'subtitlingStyling.backgroundColor': - return '背景颜色'; - case 'dialog.confirmAction': - return '确认操作'; - case 'dialog.areYouSure': - return '确定要执行此操作吗?'; - case 'dialog.cancel': - return '取消'; - case 'dialog.playNow': - return '立即播放'; - case 'discover.title': - return '发现'; - case 'discover.switchProfile': - return '切换配置文件'; - case 'discover.switchServer': - return '切换服务器'; - case 'discover.logout': - return '登出'; - case 'discover.noContentAvailable': - return '没有可用内容'; - case 'discover.addMediaToLibraries': - return '请向你的媒体库添加一些媒体'; - case 'discover.continueWatching': - return '继续观看'; - case 'discover.recentlyAdded': - return '最近添加'; - case 'discover.play': - return '播放'; - case 'discover.resume': - return '继续'; - case 'discover.playEpisode': - return ({required Object season, required Object episode}) => - '播放 S${season}, E${episode}'; - case 'discover.resumeEpisode': - return ({required Object season, required Object episode}) => - '继续 S${season}, E${episode}'; - case 'discover.pause': - return '暂停'; - case 'discover.overview': - return '概述'; - case 'discover.cast': - return '演员表'; - case 'discover.seasons': - return '季数'; - case 'discover.studio': - return '制作公司'; - case 'discover.rating': - return '年龄分级'; - case 'discover.watched': - return '已观看'; - case 'discover.episodeCount': - return ({required Object count}) => '${count} 集'; - case 'discover.watchedProgress': - return ({required Object watched, required Object total}) => - '已观看 ${watched}/${total} 集'; - case 'discover.movie': - return '电影'; - case 'discover.tvShow': - return '电视剧'; - case 'discover.minutesLeft': - return ({required Object minutes}) => '剩余 ${minutes} 分钟'; - case 'errors.searchFailed': - return ({required Object error}) => '搜索失败: ${error}'; - case 'errors.connectionTimeout': - return ({required Object context}) => '加载 ${context} 时连接超时'; - case 'errors.connectionFailed': - return '无法连接到 Plex 服务器'; - case 'errors.failedToLoad': - return ({required Object context, required Object error}) => - '无法加载 ${context}: ${error}'; - case 'errors.noClientAvailable': - return '没有可用客户端'; - case 'errors.authenticationFailed': - return ({required Object error}) => '验证失败: ${error}'; - case 'errors.couldNotLaunchUrl': - return '无法打开授权 URL'; - case 'errors.pleaseEnterToken': - return '请输入一个令牌'; - case 'errors.invalidToken': - return '令牌无效'; - case 'errors.failedToVerifyToken': - return ({required Object error}) => '无法验证令牌: ${error}'; - case 'errors.failedToSwitchProfile': - return ({required Object displayName}) => '无法切换到 ${displayName}'; - case 'errors.connectionFailedGeneric': - return '连接失败'; - case 'libraries.title': - return '媒体库'; - case 'libraries.scanLibraryFiles': - return '扫描媒体库文件'; - case 'libraries.scanLibrary': - return '扫描媒体库'; - case 'libraries.analyze': - return '分析'; - case 'libraries.analyzeLibrary': - return '分析媒体库'; - case 'libraries.refreshMetadata': - return '刷新元数据'; - case 'libraries.emptyTrash': - return '清空回收站'; - case 'libraries.emptyingTrash': - return ({required Object title}) => '正在清空 “${title}” 的回收站...'; - case 'libraries.trashEmptied': - return ({required Object title}) => '已清空 “${title}” 的回收站'; - case 'libraries.failedToEmptyTrash': - return ({required Object error}) => '无法清空回收站: ${error}'; - case 'libraries.analyzing': - return ({required Object title}) => '正在分析 “${title}”...'; - case 'libraries.analysisStarted': - return ({required Object title}) => '已开始分析 “${title}”'; - case 'libraries.failedToAnalyze': - return ({required Object error}) => '无法分析媒体库: ${error}'; - case 'libraries.noLibrariesFound': - return '未找到媒体库'; - case 'libraries.thisLibraryIsEmpty': - return '此媒体库为空'; - case 'libraries.all': - return '全部'; - case 'libraries.clearAll': - return '全部清除'; - case 'libraries.scanLibraryConfirm': - return ({required Object title}) => '确定要扫描 “${title}” 吗?'; - case 'libraries.analyzeLibraryConfirm': - return ({required Object title}) => '确定要分析 “${title}” 吗?'; - case 'libraries.refreshMetadataConfirm': - return ({required Object title}) => '确定要刷新 “${title}” 的元数据吗?'; - case 'libraries.emptyTrashConfirm': - return ({required Object title}) => '确定要清空 “${title}” 的回收站吗?'; - case 'libraries.manageLibraries': - return '管理媒体库'; - case 'libraries.sort': - return '排序'; - case 'libraries.sortBy': - return '排序依据'; - case 'libraries.filters': - return '筛选器'; - case 'libraries.loadingLibraryWithCount': - return ({required Object count}) => '正在加载媒体库... (已加载 ${count} 个项目)'; - case 'libraries.confirmActionMessage': - return '确定要执行此操作吗?'; - case 'libraries.showLibrary': - return '显示媒体库'; - case 'libraries.hideLibrary': - return '隐藏媒体库'; - case 'libraries.libraryOptions': - return '媒体库选项'; - case 'libraries.content': - return '媒体库内容'; - case 'libraries.selectLibrary': - return '选择媒体库'; - case 'libraries.filtersWithCount': - return ({required Object count}) => '筛选器(${count})'; - case 'libraries.noRecommendations': - return '暂无推荐'; - case 'libraries.noCollections': - return '此媒体库中没有合集'; - case 'libraries.noFoldersFound': - return '未找到文件夹'; - case 'libraries.folders': - return '文件夹'; - case 'libraries.tabs.recommended': - return '推荐'; - case 'libraries.tabs.browse': - return '浏览'; - case 'libraries.tabs.collections': - return '合集'; - case 'libraries.tabs.playlists': - return '播放列表'; - case 'libraries.groupings.all': - return '全部'; - case 'libraries.groupings.movies': - return '电影'; - case 'libraries.groupings.shows': - return '剧集'; - case 'libraries.groupings.seasons': - return '季'; - case 'libraries.groupings.episodes': - return '集'; - case 'libraries.groupings.folders': - return '文件夹'; - case 'about.title': - return '关于'; - case 'about.openSourceLicenses': - return '开源许可证'; - case 'about.versionLabel': - return ({required Object version}) => '版本 ${version}'; - case 'about.appDescription': - return '一款精美的 Flutter Plex 客户端'; - case 'about.viewLicensesDescription': - return '查看第三方库的许可证'; - case 'serverSelection.connectingToServer': - return '正在连接服务器...'; - case 'serverSelection.connectingToAllServers': - return '正在连接所有服务器...'; - case 'serverSelection.connectToAllServers': - return '连接所有服务器'; - case 'serverSelection.allServerConnectionsFailed': - return '无法连接到任何服务器。请检查你的网络并重试。'; - case 'serverSelection.foundServers': - return ({required Object count}) => '找到 ${count} 个服务器'; - case 'serverSelection.orSelectIndividually': - return '或单独选择一个服务器:'; - case 'serverSelection.serverDebugCopied': - return '服务器调试数据已复制到剪贴板'; - case 'serverSelection.copyDebugData': - return '复制调试数据'; - case 'serverSelection.noServersFound': - return '未找到服务器'; - case 'serverSelection.malformedServerData': - return ({required Object count}) => - '找到 ${count} 个数据格式错误的服务器。没有可用的有效服务器。'; - case 'serverSelection.incompleteServerInfo': - return '某些服务器信息不完整,已被跳过。请检查你的 Plex.tv 账户。'; - case 'serverSelection.incompleteConnectionInfo': - return '服务器连接信息不完整。请重试。'; - case 'serverSelection.malformedServerInfo': - return ({required Object message}) => '服务器信息格式错误: ${message}'; - case 'serverSelection.networkConnectionFailed': - return '网络连接失败。请检查你的网络连接并重试。'; - case 'serverSelection.authenticationFailed': - return '验证失败。请重新登录。'; - case 'serverSelection.plexServiceUnavailable': - return 'Plex 服务不可用。请稍后重试。'; - case 'serverSelection.failedToLoadServers': - return ({required Object error}) => '无法加载服务器: ${error}'; - case 'hubDetail.title': - return '标题'; - case 'hubDetail.releaseYear': - return '发行年份'; - case 'hubDetail.dateAdded': - return '添加日期'; - case 'hubDetail.rating': - return '评分'; - case 'hubDetail.noItemsFound': - return '未找到项目'; - case 'logs.title': - return '日志'; - case 'logs.clearLogs': - return '清除日志'; - case 'logs.copyLogs': - return '复制日志'; - case 'logs.exportLogs': - return '导出日志'; - case 'logs.noLogsToShow': - return '没有可显示的日志'; - case 'logs.error': - return '错误:'; - case 'logs.stackTrace': - return '堆栈跟踪 (Stack Trace):'; - case 'licenses.relatedPackages': - return '相关软件包'; - case 'licenses.license': - return '许可证'; - case 'licenses.licenseNumber': - return ({required Object number}) => '许可证 ${number}'; - case 'licenses.licensesCount': - return ({required Object count}) => '${count} 个许可证'; - case 'navigation.home': - return '主页'; - case 'navigation.search': - return '搜索'; - case 'navigation.libraries': - return '媒体库'; - case 'navigation.settings': - return '设置'; - case 'playlists.title': - return '播放列表'; - case 'playlists.noPlaylists': - return '未找到播放列表'; - case 'playlists.create': - return '创建播放列表'; - case 'playlists.newPlaylist': - return '新播放列表'; - case 'playlists.playlistName': - return '播放列表名称'; - case 'playlists.enterPlaylistName': - return '输入播放列表名称'; - case 'playlists.edit': - return '编辑播放列表'; - case 'playlists.delete': - return '删除播放列表'; - case 'playlists.addTo': - return '添加到播放列表'; - case 'playlists.addItems': - return '添加项目'; - case 'playlists.removeItem': - return '从播放列表中移除'; - case 'playlists.clearPlaylist': - return '清空播放列表'; - case 'playlists.playAll': - return '全部播放'; - case 'playlists.shuffle': - return '随机播放'; - case 'playlists.smartPlaylist': - return '智能播放列表'; - case 'playlists.regularPlaylist': - return '普通播放列表'; - case 'playlists.itemCount': - return ({required Object count}) => '${count} 个项目'; - case 'playlists.oneItem': - return '1 个项目'; - case 'playlists.emptyPlaylist': - return '此播放列表为空'; - case 'playlists.deleteConfirm': - return '删除播放列表?'; - case 'playlists.deleteMessage': - return ({required Object name}) => '确定要删除 "${name}" 吗?'; - case 'playlists.created': - return '播放列表已创建'; - case 'playlists.updated': - return '播放列表已更新'; - case 'playlists.deleted': - return '播放列表已删除'; - case 'playlists.itemAdded': - return '已添加到播放列表'; - case 'playlists.itemRemoved': - return '已从播放列表中移除'; - case 'playlists.selectPlaylist': - return '选择播放列表'; - case 'playlists.createNewPlaylist': - return '创建新播放列表'; - case 'playlists.errorCreating': - return '创建播放列表失败'; - case 'playlists.errorDeleting': - return '删除播放列表失败'; - case 'playlists.errorLoading': - return '加载播放列表失败'; - case 'playlists.errorAdding': - return '添加到播放列表失败'; - case 'playlists.errorReordering': - return '重新排序播放列表项目失败'; - case 'playlists.errorRemoving': - return '从播放列表中移除失败'; - case 'playlists.playlist': - return '播放列表'; - case 'collections.title': - return '合集'; - case 'collections.collection': - return '合集'; - case 'collections.empty': - return '合集为空'; - case 'collections.noItems': - return '此合集没有项目'; - case 'collections.unknownLibrarySection': - return '无法删除:未知的媒体库分区'; - case 'collections.deleteCollection': - return '删除合集'; - case 'collections.deleteConfirm': - return ({required Object title}) => '确定要删除"${title}"吗?此操作无法撤销。'; - case 'collections.deleted': - return '已删除合集'; - case 'collections.deleteFailed': - return '删除合集失败'; - case 'collections.deleteFailedWithError': - return ({required Object error}) => '删除合集失败:${error}'; - case 'collections.failedToLoadItems': - return ({required Object error}) => '加载合集项目失败:${error}'; - case 'collections.addTo': - return '添加到合集'; - case 'collections.selectCollection': - return '选择合集'; - case 'collections.createNewCollection': - return '创建新合集'; - case 'collections.collectionName': - return '合集名称'; - case 'collections.enterCollectionName': - return '输入合集名称'; - case 'collections.addedToCollection': - return '已添加到合集'; - case 'collections.errorAddingToCollection': - return '添加到合集失败'; - case 'collections.created': - return '已创建合集'; - case 'collections.removeFromCollection': - return '从合集移除'; - case 'collections.removeFromCollectionConfirm': - return ({required Object title}) => '将“${title}”从此合集移除?'; - case 'collections.removedFromCollection': - return '已从合集移除'; - case 'collections.removeFromCollectionFailed': - return '从合集移除失败'; - case 'collections.removeFromCollectionError': - return ({required Object error}) => '从合集移除时出错:${error}'; - default: - return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': return 'Plezy'; + case 'app.loading': return '加载中...'; + case 'auth.signInWithPlex': return '使用 Plex 登录'; + case 'auth.showQRCode': return '显示二维码'; + case 'auth.cancel': return '取消'; + case 'auth.authenticate': return '验证'; + case 'auth.retry': return '重试'; + case 'auth.debugEnterToken': return '调试:输入 Plex Token'; + case 'auth.plexTokenLabel': return 'Plex 授权令牌 (Auth Token)'; + case 'auth.plexTokenHint': return '输入你的 Plex.tv 令牌'; + case 'auth.authenticationTimeout': return '验证超时。请重试。'; + case 'auth.scanQRCodeInstruction': return '请使用已登录 Plex 的设备扫描此二维码进行验证。'; + case 'auth.waitingForAuth': return '等待验证中...\n请在你的浏览器中完成登录。'; + case 'common.cancel': return '取消'; + case 'common.save': return '保存'; + case 'common.close': return '关闭'; + case 'common.clear': return '清除'; + case 'common.reset': return '重置'; + case 'common.later': return '稍后'; + case 'common.submit': return '提交'; + case 'common.confirm': return '确认'; + case 'common.retry': return '重试'; + case 'common.playNow': return '立即播放'; + case 'common.logout': return '登出'; + case 'common.online': return '在线'; + case 'common.offline': return '离线'; + case 'common.owned': return '拥有'; + case 'common.shared': return '共享'; + case 'common.current': return '当前'; + case 'common.unknown': return '未知'; + case 'common.refresh': return '刷新'; + case 'common.yes': return '是'; + case 'common.no': return '否'; + case 'common.server': return '服务器'; + case 'common.delete': return '删除'; + case 'common.shuffle': return '随机播放'; + case 'common.addTo': return '添加到...'; + case 'screens.licenses': return '许可证'; + case 'screens.selectServer': return '选择服务器'; + case 'screens.switchProfile': return '切换配置文件'; + case 'screens.subtitleStyling': return '字幕样式'; + case 'screens.search': return '搜索'; + case 'screens.logs': return '日志'; + case 'update.available': return '有可用更新'; + case 'update.versionAvailable': return ({required Object version}) => '版本 ${version} 已发布'; + case 'update.currentVersion': return ({required Object version}) => '当前版本: ${version}'; + case 'update.skipVersion': return '跳过此版本'; + case 'update.viewRelease': return '查看发布详情'; + case 'update.latestVersion': return '已安装的版本是可用的最新版本'; + case 'update.checkFailed': return '无法检查更新'; + case 'settings.title': return '设置'; + case 'settings.language': return '语言'; + case 'settings.theme': return '主题'; + case 'settings.appearance': return '外观'; + case 'settings.videoPlayback': return '视频播放'; + case 'settings.shufflePlay': return '随机播放'; + case 'settings.advanced': return '高级'; + case 'settings.useSeasonPostersDescription': return '为剧集显示季海报而非剧集海报'; + case 'settings.showHeroSectionDescription': return '在主屏幕上显示精选内容轮播区'; + case 'settings.secondsLabel': return '秒'; + case 'settings.minutesLabel': return '分钟'; + case 'settings.secondsShort': return 's'; + case 'settings.minutesShort': return 'm'; + case 'settings.durationHint': return ({required Object min, required Object max}) => '输入时长 (${min}-${max})'; + case 'settings.systemTheme': return '系统'; + case 'settings.systemThemeDescription': return '跟随系统设置'; + case 'settings.lightTheme': return '浅色'; + case 'settings.darkTheme': return '深色'; + case 'settings.libraryDensity': return '媒体库密度'; + case 'settings.compact': return '紧凑'; + case 'settings.compactDescription': return '卡片更小,显示更多项目'; + case 'settings.normal': return '标准'; + case 'settings.normalDescription': return '默认尺寸'; + case 'settings.comfortable': return '舒适'; + case 'settings.comfortableDescription': return '卡片更大,显示更少项目'; + case 'settings.viewMode': return '视图模式'; + case 'settings.gridView': return '网格视图'; + case 'settings.gridViewDescription': return '以网格布局显示项目'; + case 'settings.listView': return '列表视图'; + case 'settings.listViewDescription': return '以列表布局显示项目'; + case 'settings.useSeasonPosters': return '使用季海报'; + case 'settings.showHeroSection': return '显示主要精选区'; + case 'settings.hardwareDecoding': return '硬件解码'; + case 'settings.hardwareDecodingDescription': return '如果可用,使用硬件加速'; + case 'settings.bufferSize': return '缓冲区大小'; + case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': return '字幕样式'; + case 'settings.subtitleStylingDescription': return '调整字幕外观'; + case 'settings.smallSkipDuration': return '短跳过时长'; + case 'settings.largeSkipDuration': return '长跳过时长'; + case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} 秒'; + case 'settings.defaultSleepTimer': return '默认睡眠定时器'; + case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} 分钟'; + case 'settings.rememberTrackSelections': return '记住每个剧集/电影的音轨选择'; + case 'settings.rememberTrackSelectionsDescription': return '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; + case 'settings.unwatchedOnly': return '仅未观看'; + case 'settings.unwatchedOnlyDescription': return '随机队列中仅包含未观看的剧集'; + case 'settings.shuffleOrderNavigation': return '随机顺序导航'; + case 'settings.shuffleOrderNavigationDescription': return '下一集/上一集按钮遵循随机播放顺序'; + case 'settings.loopShuffleQueue': return '循环随机队列'; + case 'settings.loopShuffleQueueDescription': return '在队列结束时重新开始'; + case 'settings.videoPlayerControls': return '视频播放器控制'; + case 'settings.keyboardShortcuts': return '键盘快捷键'; + case 'settings.keyboardShortcutsDescription': return '自定义键盘快捷键'; + case 'settings.debugLogging': return '调试日志'; + case 'settings.debugLoggingDescription': return '启用详细日志记录以便故障排除'; + case 'settings.viewLogs': return '查看日志'; + case 'settings.viewLogsDescription': return '查看应用程序日志'; + case 'settings.clearCache': return '清除缓存'; + case 'settings.clearCacheDescription': return '这将清除所有缓存的图片和数据。清除缓存后,应用程序加载内容可能会变慢。'; + case 'settings.clearCacheSuccess': return '缓存清除成功'; + case 'settings.resetSettings': return '重置设置'; + case 'settings.resetSettingsDescription': return '这会将所有设置重置为其默认值。此操作无法撤销。'; + case 'settings.resetSettingsSuccess': return '设置重置成功'; + case 'settings.shortcutsReset': return '快捷键已重置为默认值'; + case 'settings.about': return '关于'; + case 'settings.aboutDescription': return '应用程序信息和许可证'; + case 'settings.updates': return '更新'; + case 'settings.updateAvailable': return '有可用更新'; + case 'settings.checkForUpdates': return '检查更新'; + case 'settings.validationErrorEnterNumber': return '请输入一个有效的数字'; + case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => '时长必须介于 ${min} 和 ${max} ${unit} 之间'; + case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => '快捷键已被分配给 ${action}'; + case 'settings.shortcutUpdated': return ({required Object action}) => '快捷键已为 ${action} 更新'; + case 'settings.autoSkip': return '自动跳过'; + case 'settings.autoSkipIntro': return '自动跳过片头'; + case 'settings.autoSkipIntroDescription': return '几秒钟后自动跳过片头标记'; + case 'settings.autoSkipCredits': return '自动跳过片尾'; + case 'settings.autoSkipCreditsDescription': return '自动跳过片尾并播放下一集'; + case 'settings.autoSkipDelay': return '自动跳过延迟'; + case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => '自动跳过前等待 ${seconds} 秒'; + case 'search.hint': return '搜索电影、系列、音乐...'; + case 'search.tryDifferentTerm': return '尝试不同的搜索词'; + case 'search.searchYourMedia': return '搜索媒体'; + case 'search.enterTitleActorOrKeyword': return '输入标题、演员或关键词'; + case 'hotkeys.setShortcutFor': return ({required Object actionName}) => '为 ${actionName} 设置快捷键'; + case 'hotkeys.clearShortcut': return '清除快捷键'; + case 'pinEntry.enterPin': return '输入 PIN'; + case 'pinEntry.showPin': return '显示 PIN'; + case 'pinEntry.hidePin': return '隐藏 PIN'; + case 'fileInfo.title': return '文件信息'; + case 'fileInfo.video': return '视频'; + case 'fileInfo.audio': return '音频'; + case 'fileInfo.file': return '文件'; + case 'fileInfo.advanced': return '高级'; + case 'fileInfo.codec': return '编解码器'; + case 'fileInfo.resolution': return '分辨率'; + case 'fileInfo.bitrate': return '比特率'; + case 'fileInfo.frameRate': return '帧率'; + case 'fileInfo.aspectRatio': return '宽高比'; + case 'fileInfo.profile': return '配置文件'; + case 'fileInfo.bitDepth': return '位深度'; + case 'fileInfo.colorSpace': return '色彩空间'; + case 'fileInfo.colorRange': return '色彩范围'; + case 'fileInfo.colorPrimaries': return '颜色原色'; + case 'fileInfo.chromaSubsampling': return '色度子采样'; + case 'fileInfo.channels': return '声道'; + case 'fileInfo.path': return '路径'; + case 'fileInfo.size': return '大小'; + case 'fileInfo.container': return '容器'; + case 'fileInfo.duration': return '时长'; + case 'fileInfo.optimizedForStreaming': return '已优化用于流媒体'; + case 'fileInfo.has64bitOffsets': return '64位偏移量'; + case 'mediaMenu.markAsWatched': return '标记为已观看'; + case 'mediaMenu.markAsUnwatched': return '标记为未观看'; + case 'mediaMenu.removeFromContinueWatching': return '从继续观看中移除'; + case 'mediaMenu.goToSeries': return '转到系列'; + case 'mediaMenu.goToSeason': return '转到季'; + case 'mediaMenu.shufflePlay': return '随机播放'; + case 'mediaMenu.fileInfo': return '文件信息'; + case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, 电影'; + case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, 电视剧'; + case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': return '已观看'; + case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '已观看 ${percent} 百分比'; + case 'accessibility.mediaCardUnwatched': return '未观看'; + case 'accessibility.tapToPlay': return '点击播放'; + case 'tooltips.shufflePlay': return '随机播放'; + case 'tooltips.markAsWatched': return '标记为已观看'; + case 'tooltips.markAsUnwatched': return '标记为未观看'; + case 'videoControls.audioLabel': return '音频'; + case 'videoControls.subtitlesLabel': return '字幕'; + case 'videoControls.resetToZero': return '重置为 0ms'; + case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; + case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; + case 'videoControls.playsLater': return ({required Object label}) => '${label} 播放较晚'; + case 'videoControls.playsEarlier': return ({required Object label}) => '${label} 播放较早'; + case 'videoControls.noOffset': return '无偏移'; + case 'videoControls.letterbox': return '信箱模式(Letterbox)'; + case 'videoControls.fillScreen': return '填充屏幕'; + case 'videoControls.stretch': return '拉伸'; + case 'videoControls.lockRotation': return '锁定旋转'; + case 'videoControls.unlockRotation': return '解锁旋转'; + case 'videoControls.sleepTimer': return '睡眠定时器'; + case 'videoControls.timerActive': return '定时器已激活'; + case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => '播放将在 ${duration} 后暂停'; + case 'videoControls.sleepTimerCompleted': return '睡眠定时器已完成 - 播放已暂停'; + case 'videoControls.playButton': return '播放'; + case 'videoControls.pauseButton': return '暂停'; + case 'videoControls.seekBackwardButton': return ({required Object seconds}) => '后退 ${seconds} 秒'; + case 'videoControls.seekForwardButton': return ({required Object seconds}) => '前进 ${seconds} 秒'; + case 'videoControls.previousButton': return '上一集'; + case 'videoControls.nextButton': return '下一集'; + case 'videoControls.previousChapterButton': return '上一章节'; + case 'videoControls.nextChapterButton': return '下一章节'; + case 'videoControls.volumeButton': return '音量'; + case 'videoControls.muteButton': return '静音'; + case 'videoControls.unmuteButton': return '取消静音'; + case 'videoControls.settingsButton': return '视频设置'; + case 'videoControls.audioTrackButton': return '音轨'; + case 'videoControls.subtitlesButton': return '字幕'; + case 'videoControls.chaptersButton': return '章节'; + case 'videoControls.versionsButton': return '视频版本'; + case 'videoControls.aspectRatioButton': return '宽高比'; + case 'videoControls.fullscreenButton': return '进入全屏'; + case 'videoControls.exitFullscreenButton': return '退出全屏'; + case 'videoControls.rotationLockButton': return '旋转锁定'; + case 'videoControls.timelineSlider': return '视频时间轴'; + case 'videoControls.volumeSlider': return '音量调节'; + case 'videoControls.backButton': return '返回'; + case 'userStatus.admin': return '管理员'; + case 'userStatus.restricted': return '受限'; + case 'userStatus.protected': return '受保护'; + case 'userStatus.current': return '当前'; + case 'messages.markedAsWatched': return '已标记为已观看'; + case 'messages.markedAsUnwatched': return '已标记为未观看'; + case 'messages.removedFromContinueWatching': return '已从继续观看中移除'; + case 'messages.errorLoading': return ({required Object error}) => '错误: ${error}'; + case 'messages.fileInfoNotAvailable': return '文件信息不可用'; + case 'messages.errorLoadingFileInfo': return ({required Object error}) => '加载文件信息时出错: ${error}'; + case 'messages.errorLoadingSeries': return '加载系列时出错'; + case 'messages.errorLoadingSeason': return '加载季时出错'; + case 'messages.musicNotSupported': return '尚不支持播放音乐'; + case 'messages.logsCleared': return '日志已清除'; + case 'messages.logsCopied': return '日志已复制到剪贴板'; + case 'messages.noLogsAvailable': return '没有可用日志'; + case 'messages.libraryScanning': return ({required Object title}) => '正在扫描 “${title}”...'; + case 'messages.libraryScanStarted': return ({required Object title}) => '已开始扫描 “${title}” 媒体库'; + case 'messages.libraryScanFailed': return ({required Object error}) => '无法扫描媒体库: ${error}'; + case 'messages.metadataRefreshing': return ({required Object title}) => '正在刷新 “${title}” 的元数据...'; + case 'messages.metadataRefreshStarted': return ({required Object title}) => '已开始刷新 “${title}” 的元数据'; + case 'messages.metadataRefreshFailed': return ({required Object error}) => '无法刷新元数据: ${error}'; + case 'messages.noPlexToken': return '未找到 Plex 令牌。请重新登录。'; + case 'messages.logoutConfirm': return '你确定要登出吗?'; + case 'messages.noSeasonsFound': return '未找到季'; + case 'messages.noEpisodesFound': return '在第一季中未找到剧集'; + case 'messages.noEpisodesFoundGeneral': return '未找到剧集'; + case 'messages.noResultsFound': return '未找到结果'; + case 'messages.sleepTimerSet': return ({required Object label}) => '睡眠定时器已设置为 ${label}'; + case 'messages.failedToSwitchProfile': return ({required Object displayName}) => '无法切换到 ${displayName}'; + case 'messages.noItemsAvailable': return '没有可用的项目'; + case 'messages.failedToCreatePlayQueue': return '创建播放队列失败'; + case 'messages.failedToCreatePlayQueueNoItems': return '创建播放队列失败 - 没有项目'; + case 'messages.failedPlayback': return ({required Object action, required Object error}) => '无法${action}: ${error}'; + case 'profile.noUsersAvailable': return '没有可用用户'; + case 'subtitlingStyling.stylingOptions': return '样式选项'; + case 'subtitlingStyling.fontSize': return '字号'; + case 'subtitlingStyling.textColor': return '文本颜色'; + case 'subtitlingStyling.borderSize': return '边框大小'; + case 'subtitlingStyling.borderColor': return '边框颜色'; + case 'subtitlingStyling.backgroundOpacity': return '背景不透明度'; + case 'subtitlingStyling.backgroundColor': return '背景颜色'; + case 'dialog.confirmAction': return '确认操作'; + case 'dialog.areYouSure': return '确定要执行此操作吗?'; + case 'dialog.cancel': return '取消'; + case 'dialog.playNow': return '立即播放'; + case 'discover.title': return '发现'; + case 'discover.switchProfile': return '切换配置文件'; + case 'discover.switchServer': return '切换服务器'; + case 'discover.logout': return '登出'; + case 'discover.noContentAvailable': return '没有可用内容'; + case 'discover.addMediaToLibraries': return '请向你的媒体库添加一些媒体'; + case 'discover.continueWatching': return '继续观看'; + case 'discover.recentlyAdded': return '最近添加'; + case 'discover.play': return '播放'; + case 'discover.resume': return '继续'; + case 'discover.playEpisode': return ({required Object season, required Object episode}) => '播放 S${season}, E${episode}'; + case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => '继续 S${season}, E${episode}'; + case 'discover.pause': return '暂停'; + case 'discover.overview': return '概述'; + case 'discover.cast': return '演员表'; + case 'discover.seasons': return '季数'; + case 'discover.studio': return '制作公司'; + case 'discover.rating': return '年龄分级'; + case 'discover.watched': return '已观看'; + case 'discover.episodeCount': return ({required Object count}) => '${count} 集'; + case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '已观看 ${watched}/${total} 集'; + case 'discover.movie': return '电影'; + case 'discover.tvShow': return '电视剧'; + case 'discover.minutesLeft': return ({required Object minutes}) => '剩余 ${minutes} 分钟'; + case 'errors.searchFailed': return ({required Object error}) => '搜索失败: ${error}'; + case 'errors.connectionTimeout': return ({required Object context}) => '加载 ${context} 时连接超时'; + case 'errors.connectionFailed': return '无法连接到 Plex 服务器'; + case 'errors.failedToLoad': return ({required Object context, required Object error}) => '无法加载 ${context}: ${error}'; + case 'errors.noClientAvailable': return '没有可用客户端'; + case 'errors.authenticationFailed': return ({required Object error}) => '验证失败: ${error}'; + case 'errors.couldNotLaunchUrl': return '无法打开授权 URL'; + case 'errors.pleaseEnterToken': return '请输入一个令牌'; + case 'errors.invalidToken': return '令牌无效'; + case 'errors.failedToVerifyToken': return ({required Object error}) => '无法验证令牌: ${error}'; + case 'errors.failedToSwitchProfile': return ({required Object displayName}) => '无法切换到 ${displayName}'; + case 'errors.connectionFailedGeneric': return '连接失败'; + case 'libraries.title': return '媒体库'; + case 'libraries.scanLibraryFiles': return '扫描媒体库文件'; + case 'libraries.scanLibrary': return '扫描媒体库'; + case 'libraries.analyze': return '分析'; + case 'libraries.analyzeLibrary': return '分析媒体库'; + case 'libraries.refreshMetadata': return '刷新元数据'; + case 'libraries.emptyTrash': return '清空回收站'; + case 'libraries.emptyingTrash': return ({required Object title}) => '正在清空 “${title}” 的回收站...'; + case 'libraries.trashEmptied': return ({required Object title}) => '已清空 “${title}” 的回收站'; + case 'libraries.failedToEmptyTrash': return ({required Object error}) => '无法清空回收站: ${error}'; + case 'libraries.analyzing': return ({required Object title}) => '正在分析 “${title}”...'; + case 'libraries.analysisStarted': return ({required Object title}) => '已开始分析 “${title}”'; + case 'libraries.failedToAnalyze': return ({required Object error}) => '无法分析媒体库: ${error}'; + case 'libraries.noLibrariesFound': return '未找到媒体库'; + case 'libraries.thisLibraryIsEmpty': return '此媒体库为空'; + case 'libraries.all': return '全部'; + case 'libraries.clearAll': return '全部清除'; + case 'libraries.scanLibraryConfirm': return ({required Object title}) => '确定要扫描 “${title}” 吗?'; + case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => '确定要分析 “${title}” 吗?'; + case 'libraries.refreshMetadataConfirm': return ({required Object title}) => '确定要刷新 “${title}” 的元数据吗?'; + case 'libraries.emptyTrashConfirm': return ({required Object title}) => '确定要清空 “${title}” 的回收站吗?'; + case 'libraries.manageLibraries': return '管理媒体库'; + case 'libraries.sort': return '排序'; + case 'libraries.sortBy': return '排序依据'; + case 'libraries.filters': return '筛选器'; + case 'libraries.loadingLibraryWithCount': return ({required Object count}) => '正在加载媒体库... (已加载 ${count} 个项目)'; + case 'libraries.confirmActionMessage': return '确定要执行此操作吗?'; + case 'libraries.showLibrary': return '显示媒体库'; + case 'libraries.hideLibrary': return '隐藏媒体库'; + case 'libraries.libraryOptions': return '媒体库选项'; + case 'libraries.content': return '媒体库内容'; + case 'libraries.selectLibrary': return '选择媒体库'; + case 'libraries.filtersWithCount': return ({required Object count}) => '筛选器(${count})'; + case 'libraries.noRecommendations': return '暂无推荐'; + case 'libraries.noCollections': return '此媒体库中没有合集'; + case 'libraries.noFoldersFound': return '未找到文件夹'; + case 'libraries.folders': return '文件夹'; + case 'libraries.tabs.recommended': return '推荐'; + case 'libraries.tabs.browse': return '浏览'; + case 'libraries.tabs.collections': return '合集'; + case 'libraries.tabs.playlists': return '播放列表'; + case 'libraries.groupings.all': return '全部'; + case 'libraries.groupings.movies': return '电影'; + case 'libraries.groupings.shows': return '剧集'; + case 'libraries.groupings.seasons': return '季'; + case 'libraries.groupings.episodes': return '集'; + case 'libraries.groupings.folders': return '文件夹'; + case 'about.title': return '关于'; + case 'about.openSourceLicenses': return '开源许可证'; + case 'about.versionLabel': return ({required Object version}) => '版本 ${version}'; + case 'about.appDescription': return '一款精美的 Flutter Plex 客户端'; + case 'about.viewLicensesDescription': return '查看第三方库的许可证'; + case 'serverSelection.connectingToServer': return '正在连接服务器...'; + case 'serverSelection.connectingToAllServers': return '正在连接所有服务器...'; + case 'serverSelection.connectToAllServers': return '连接所有服务器'; + case 'serverSelection.allServerConnectionsFailed': return '无法连接到任何服务器。请检查你的网络并重试。'; + case 'serverSelection.foundServers': return ({required Object count}) => '找到 ${count} 个服务器'; + case 'serverSelection.orSelectIndividually': return '或单独选择一个服务器:'; + case 'serverSelection.serverDebugCopied': return '服务器调试数据已复制到剪贴板'; + case 'serverSelection.copyDebugData': return '复制调试数据'; + case 'serverSelection.noServersFound': return '未找到服务器'; + case 'serverSelection.malformedServerData': return ({required Object count}) => '找到 ${count} 个数据格式错误的服务器。没有可用的有效服务器。'; + case 'serverSelection.incompleteServerInfo': return '某些服务器信息不完整,已被跳过。请检查你的 Plex.tv 账户。'; + case 'serverSelection.incompleteConnectionInfo': return '服务器连接信息不完整。请重试。'; + case 'serverSelection.malformedServerInfo': return ({required Object message}) => '服务器信息格式错误: ${message}'; + case 'serverSelection.networkConnectionFailed': return '网络连接失败。请检查你的网络连接并重试。'; + case 'serverSelection.authenticationFailed': return '验证失败。请重新登录。'; + case 'serverSelection.plexServiceUnavailable': return 'Plex 服务不可用。请稍后重试。'; + case 'serverSelection.failedToLoadServers': return ({required Object error}) => '无法加载服务器: ${error}'; + case 'hubDetail.title': return '标题'; + case 'hubDetail.releaseYear': return '发行年份'; + case 'hubDetail.dateAdded': return '添加日期'; + case 'hubDetail.rating': return '评分'; + case 'hubDetail.noItemsFound': return '未找到项目'; + case 'logs.title': return '日志'; + case 'logs.clearLogs': return '清除日志'; + case 'logs.copyLogs': return '复制日志'; + case 'logs.exportLogs': return '导出日志'; + case 'logs.noLogsToShow': return '没有可显示的日志'; + case 'logs.error': return '错误:'; + case 'logs.stackTrace': return '堆栈跟踪 (Stack Trace):'; + case 'licenses.relatedPackages': return '相关软件包'; + case 'licenses.license': return '许可证'; + case 'licenses.licenseNumber': return ({required Object number}) => '许可证 ${number}'; + case 'licenses.licensesCount': return ({required Object count}) => '${count} 个许可证'; + case 'navigation.home': return '主页'; + case 'navigation.search': return '搜索'; + case 'navigation.libraries': return '媒体库'; + case 'navigation.settings': return '设置'; + case 'playlists.title': return '播放列表'; + case 'playlists.noPlaylists': return '未找到播放列表'; + case 'playlists.create': return '创建播放列表'; + case 'playlists.newPlaylist': return '新播放列表'; + case 'playlists.playlistName': return '播放列表名称'; + case 'playlists.enterPlaylistName': return '输入播放列表名称'; + case 'playlists.edit': return '编辑播放列表'; + case 'playlists.delete': return '删除播放列表'; + case 'playlists.addTo': return '添加到播放列表'; + case 'playlists.addItems': return '添加项目'; + case 'playlists.removeItem': return '从播放列表中移除'; + case 'playlists.clearPlaylist': return '清空播放列表'; + case 'playlists.playAll': return '全部播放'; + case 'playlists.shuffle': return '随机播放'; + case 'playlists.smartPlaylist': return '智能播放列表'; + case 'playlists.regularPlaylist': return '普通播放列表'; + case 'playlists.itemCount': return ({required Object count}) => '${count} 个项目'; + case 'playlists.oneItem': return '1 个项目'; + case 'playlists.emptyPlaylist': return '此播放列表为空'; + case 'playlists.deleteConfirm': return '删除播放列表?'; + case 'playlists.deleteMessage': return ({required Object name}) => '确定要删除 "${name}" 吗?'; + case 'playlists.created': return '播放列表已创建'; + case 'playlists.updated': return '播放列表已更新'; + case 'playlists.deleted': return '播放列表已删除'; + case 'playlists.itemAdded': return '已添加到播放列表'; + case 'playlists.itemRemoved': return '已从播放列表中移除'; + case 'playlists.selectPlaylist': return '选择播放列表'; + case 'playlists.createNewPlaylist': return '创建新播放列表'; + case 'playlists.errorCreating': return '创建播放列表失败'; + case 'playlists.errorDeleting': return '删除播放列表失败'; + case 'playlists.errorLoading': return '加载播放列表失败'; + case 'playlists.errorAdding': return '添加到播放列表失败'; + case 'playlists.errorReordering': return '重新排序播放列表项目失败'; + case 'playlists.errorRemoving': return '从播放列表中移除失败'; + case 'playlists.playlist': return '播放列表'; + case 'collections.title': return '合集'; + case 'collections.collection': return '合集'; + case 'collections.empty': return '合集为空'; + case 'collections.noItems': return '此合集没有项目'; + case 'collections.unknownLibrarySection': return '无法删除:未知的媒体库分区'; + case 'collections.deleteCollection': return '删除合集'; + case 'collections.deleteConfirm': return ({required Object title}) => '确定要删除"${title}"吗?此操作无法撤销。'; + case 'collections.deleted': return '已删除合集'; + case 'collections.deleteFailed': return '删除合集失败'; + case 'collections.deleteFailedWithError': return ({required Object error}) => '删除合集失败:${error}'; + case 'collections.failedToLoadItems': return ({required Object error}) => '加载合集项目失败:${error}'; + case 'collections.addTo': return '添加到合集'; + case 'collections.selectCollection': return '选择合集'; + case 'collections.createNewCollection': return '创建新合集'; + case 'collections.collectionName': return '合集名称'; + case 'collections.enterCollectionName': return '输入合集名称'; + case 'collections.addedToCollection': return '已添加到合集'; + case 'collections.errorAddingToCollection': return '添加到合集失败'; + case 'collections.created': return '已创建合集'; + case 'collections.removeFromCollection': return '从合集移除'; + case 'collections.removeFromCollectionConfirm': return ({required Object title}) => '将“${title}”从此合集移除?'; + case 'collections.removedFromCollection': return '已从合集移除'; + case 'collections.removeFromCollectionFailed': return '从合集移除失败'; + case 'collections.removeFromCollectionError': return ({required Object error}) => '从合集移除时出错:${error}'; + default: return null; + } + } } diff --git a/lib/i18n/strings.i18n.json b/lib/i18n/strings.i18n.json index 99d1f4a2..33b36eff 100644 --- a/lib/i18n/strings.i18n.json +++ b/lib/i18n/strings.i18n.json @@ -132,7 +132,14 @@ "validationErrorEnterNumber": "Please enter a valid number", "validationErrorDuration": "Duration must be between ${min} and ${max} ${unit}", "shortcutAlreadyAssigned": "Shortcut already assigned to ${action}", - "shortcutUpdated": "Shortcut updated for ${action}" + "shortcutUpdated": "Shortcut updated for ${action}", + "autoSkip": "Auto Skip", + "autoSkipIntro": "Auto Skip Intro", + "autoSkipIntroDescription": "Automatically skip intro markers after a few seconds", + "autoSkipCredits": "Auto Skip Credits", + "autoSkipCreditsDescription": "Automatically skip credits and play next episode", + "autoSkipDelay": "Auto Skip Delay", + "autoSkipDelayDescription": "Wait ${seconds} seconds before auto-skipping" }, "search": { "hint": "Search movies, shows, music...", diff --git a/lib/i18n/strings_de.i18n.json b/lib/i18n/strings_de.i18n.json index c1e36df3..dc504c5a 100644 --- a/lib/i18n/strings_de.i18n.json +++ b/lib/i18n/strings_de.i18n.json @@ -133,7 +133,14 @@ "validationErrorEnterNumber": "Bitte eine gültige Zahl eingeben", "validationErrorDuration": "Dauer muss zwischen ${min} und ${max} ${unit} liegen", "shortcutAlreadyAssigned": "Tastenkürzel bereits zugewiesen an ${action}", - "shortcutUpdated": "Tastenkürzel aktualisiert für ${action}" + "shortcutUpdated": "Tastenkürzel aktualisiert für ${action}", + "autoSkip": "Automatisches Überspringen", + "autoSkipIntro": "Intro automatisch überspringen", + "autoSkipIntroDescription": "Intro-Marker nach wenigen Sekunden automatisch überspringen", + "autoSkipCredits": "Abspann automatisch überspringen", + "autoSkipCreditsDescription": "Abspann automatisch überspringen und nächste Episode abspielen", + "autoSkipDelay": "Verzögerung für automatisches Überspringen", + "autoSkipDelayDescription": "${seconds} Sekunden vor dem automatischen Überspringen warten" }, "search": { "hint": "Filme, Serien, Musik suchen...", diff --git a/lib/i18n/strings_it.i18n.json b/lib/i18n/strings_it.i18n.json index e298f688..428111a4 100644 --- a/lib/i18n/strings_it.i18n.json +++ b/lib/i18n/strings_it.i18n.json @@ -133,7 +133,14 @@ "validationErrorEnterNumber": "Inserisci un numero valido", "validationErrorDuration": "la durata deve essere compresa tra ${min} e ${max} ${unit}", "shortcutAlreadyAssigned": "Scorciatoia già assegnata a ${action}", - "shortcutUpdated": "Scorciatoia aggiornata per ${action}" + "shortcutUpdated": "Scorciatoia aggiornata per ${action}", + "autoSkip": "Salto Automatico", + "autoSkipIntro": "Salta Intro Automaticamente", + "autoSkipIntroDescription": "Salta automaticamente i marcatori dell'intro dopo alcuni secondi", + "autoSkipCredits": "Salta Crediti Automaticamente", + "autoSkipCreditsDescription": "Salta automaticamente i crediti e riproduci l'episodio successivo", + "autoSkipDelay": "Ritardo Salto Automatico", + "autoSkipDelayDescription": "Aspetta ${seconds} secondi prima del salto automatico" }, "search": { "hint": "Cerca film. spettacoli, musica...", diff --git a/lib/i18n/strings_nl.i18n.json b/lib/i18n/strings_nl.i18n.json index 02360f8f..2d9c8017 100644 --- a/lib/i18n/strings_nl.i18n.json +++ b/lib/i18n/strings_nl.i18n.json @@ -133,7 +133,14 @@ "validationErrorEnterNumber": "Voer een geldig nummer in", "validationErrorDuration": "Duur moet tussen ${min} en ${max} ${unit} zijn", "shortcutAlreadyAssigned": "Sneltoets al toegewezen aan ${action}", - "shortcutUpdated": "Sneltoets bijgewerkt voor ${action}" + "shortcutUpdated": "Sneltoets bijgewerkt voor ${action}", + "autoSkip": "Automatisch Overslaan", + "autoSkipIntro": "Intro Automatisch Overslaan", + "autoSkipIntroDescription": "Intro-markeringen na enkele seconden automatisch overslaan", + "autoSkipCredits": "Credits Automatisch Overslaan", + "autoSkipCreditsDescription": "Credits automatisch overslaan en volgende aflevering afspelen", + "autoSkipDelay": "Vertraging Automatisch Overslaan", + "autoSkipDelayDescription": "${seconds} seconden wachten voor automatisch overslaan" }, "search": { "hint": "Zoek films, series, muziek...", diff --git a/lib/i18n/strings_sv.i18n.json b/lib/i18n/strings_sv.i18n.json index a8d5a0a5..f76d64c5 100644 --- a/lib/i18n/strings_sv.i18n.json +++ b/lib/i18n/strings_sv.i18n.json @@ -133,7 +133,14 @@ "validationErrorEnterNumber": "Vänligen ange ett giltigt nummer", "validationErrorDuration": "Tiden måste vara mellan ${min} och ${max} ${unit}", "shortcutAlreadyAssigned": "Genväg redan tilldelad ${action}", - "shortcutUpdated": "Genväg uppdaterad för ${action}" + "shortcutUpdated": "Genväg uppdaterad för ${action}", + "autoSkip": "Auto Hoppa Över", + "autoSkipIntro": "Hoppa Över Intro Automatiskt", + "autoSkipIntroDescription": "Hoppa automatiskt över intro-markörer efter några sekunder", + "autoSkipCredits": "Hoppa Över Credits Automatiskt", + "autoSkipCreditsDescription": "Hoppa automatiskt över credits och spela nästa avsnitt", + "autoSkipDelay": "Fördröjning Auto Hoppa Över", + "autoSkipDelayDescription": "Vänta ${seconds} sekunder innan automatisk överhoppning" }, "search": { "hint": "Sök filmer, serier, musik...", diff --git a/lib/i18n/strings_zh.i18n.json b/lib/i18n/strings_zh.i18n.json index 10b5133c..027455f2 100644 --- a/lib/i18n/strings_zh.i18n.json +++ b/lib/i18n/strings_zh.i18n.json @@ -133,7 +133,14 @@ "validationErrorEnterNumber": "请输入一个有效的数字", "validationErrorDuration": "时长必须介于 ${min} 和 ${max} ${unit} 之间", "shortcutAlreadyAssigned": "快捷键已被分配给 ${action}", - "shortcutUpdated": "快捷键已为 ${action} 更新" + "shortcutUpdated": "快捷键已为 ${action} 更新", + "autoSkip": "自动跳过", + "autoSkipIntro": "自动跳过片头", + "autoSkipIntroDescription": "几秒钟后自动跳过片头标记", + "autoSkipCredits": "自动跳过片尾", + "autoSkipCreditsDescription": "自动跳过片尾并播放下一集", + "autoSkipDelay": "自动跳过延迟", + "autoSkipDelayDescription": "自动跳过前等待 ${seconds} 秒" }, "search": { "hint": "搜索电影、系列、音乐...", diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 4f815802..526b354c 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -301,7 +301,7 @@ class _SettingsScreenState extends State { Padding( padding: const EdgeInsets.fromLTRB(16, 8, 16, 0), child: Text( - 'Auto Skip', + t.settings.autoSkip, style: Theme.of(context).textTheme.titleSmall?.copyWith( fontWeight: FontWeight.w600, color: Theme.of(context).colorScheme.primary, @@ -310,8 +310,8 @@ class _SettingsScreenState extends State { ), SwitchListTile( secondary: const Icon(Icons.fast_forward), - title: const Text('Auto Skip Intro'), - subtitle: const Text('Automatically skip intro markers after a few seconds'), + title: Text(t.settings.autoSkipIntro), + subtitle: Text(t.settings.autoSkipIntroDescription), value: _autoSkipIntro, onChanged: (value) async { setState(() { @@ -322,8 +322,8 @@ class _SettingsScreenState extends State { ), SwitchListTile( secondary: const Icon(Icons.skip_next), - title: const Text('Auto Skip Credits'), - subtitle: const Text('Automatically skip credits and play next episode'), + title: Text(t.settings.autoSkipCredits), + subtitle: Text(t.settings.autoSkipCreditsDescription), value: _autoSkipCredits, onChanged: (value) async { setState(() { @@ -334,8 +334,8 @@ class _SettingsScreenState extends State { ), ListTile( leading: const Icon(Icons.timer), - title: const Text('Auto Skip Delay'), - subtitle: Text('Wait $_autoSkipDelay seconds before auto-skipping'), + title: Text(t.settings.autoSkipDelay), + subtitle: Text(t.settings.autoSkipDelayDescription(seconds: _autoSkipDelay.toString())), trailing: const Icon(Icons.chevron_right), onTap: () => _showAutoSkipDelayDialog(), ), @@ -811,24 +811,28 @@ class _SettingsScreenState extends State { return StatefulBuilder( builder: (context, setDialogState) { return AlertDialog( - title: const Text('Auto Skip Delay'), + title: Text(t.settings.autoSkipDelay), content: TextField( controller: controller, keyboardType: TextInputType.number, decoration: InputDecoration( - labelText: 'Seconds', - hintText: 'Enter delay between 1-30 seconds', + labelText: t.settings.secondsLabel, + hintText: t.settings.durationHint(min: 1, max: 30), errorText: errorText, - suffixText: 's', + suffixText: t.settings.secondsShort, ), autofocus: true, onChanged: (value) { final parsed = int.tryParse(value); setDialogState(() { if (parsed == null) { - errorText = 'Please enter a valid number'; + errorText = t.settings.validationErrorEnterNumber; } else if (parsed < 1 || parsed > 30) { - errorText = 'Delay must be between 1 and 30 seconds'; + errorText = t.settings.validationErrorDuration( + min: 1, + max: 30, + unit: t.settings.secondsLabel.toLowerCase(), + ); } else { errorText = null; } From bc6ee79aef1c5334f09952aa4752b7d029e4e038 Mon Sep 17 00:00:00 2001 From: Tazio Date: Mon, 1 Dec 2025 11:08:03 +0100 Subject: [PATCH 7/7] chore: code quality --- lib/i18n/strings.g.dart | 18856 ++++++++++------ lib/screens/settings_screen.dart | 6 +- .../video_controls/video_controls.dart | 15 +- 3 files changed, 12510 insertions(+), 6367 deletions(-) diff --git a/lib/i18n/strings.g.dart b/lib/i18n/strings.g.dart index d7010854..47f75c08 100644 --- a/lib/i18n/strings.g.dart +++ b/lib/i18n/strings.g.dart @@ -25,22 +25,32 @@ const AppLocale _baseLocale = AppLocale.en; /// - Locale locale = AppLocale.en.flutterLocale // get flutter locale from enum /// - if (LocaleSettings.currentLocale == AppLocale.en) // locale check enum AppLocale with BaseAppLocale { - en(languageCode: 'en', build: Translations.build), - de(languageCode: 'de', build: _StringsDe.build), - it(languageCode: 'it', build: _StringsIt.build), - nl(languageCode: 'nl', build: _StringsNl.build), - sv(languageCode: 'sv', build: _StringsSv.build), - zh(languageCode: 'zh', build: _StringsZh.build); + en(languageCode: 'en', build: Translations.build), + de(languageCode: 'de', build: _StringsDe.build), + it(languageCode: 'it', build: _StringsIt.build), + nl(languageCode: 'nl', build: _StringsNl.build), + sv(languageCode: 'sv', build: _StringsSv.build), + zh(languageCode: 'zh', build: _StringsZh.build); - const AppLocale({required this.languageCode, this.scriptCode, this.countryCode, required this.build}); // ignore: unused_element + const AppLocale({ + required this.languageCode, + this.scriptCode, + this.countryCode, + required this.build, + }); // ignore: unused_element - @override final String languageCode; - @override final String? scriptCode; - @override final String? countryCode; - @override final TranslationBuilder build; + @override + final String languageCode; + @override + final String? scriptCode; + @override + final String? countryCode; + @override + final TranslationBuilder build; - /// Gets current instance managed by [LocaleSettings]. - Translations get translations => LocaleSettings.instance.translationMap[this]!; + /// Gets current instance managed by [LocaleSettings]. + Translations get translations => + LocaleSettings.instance.translationMap[this]!; } /// Method A: Simple @@ -69,10 +79,14 @@ Translations get t => LocaleSettings.instance.currentTranslations; /// final t = Translations.of(context); // Get t variable. /// String a = t.someKey.anotherKey; // Use t variable. /// String b = t['someKey.anotherKey']; // Only for edge cases! -class TranslationProvider extends BaseTranslationProvider { - TranslationProvider({required super.child}) : super(settings: LocaleSettings.instance); +class TranslationProvider + extends BaseTranslationProvider { + TranslationProvider({required super.child}) + : super(settings: LocaleSettings.instance); - static InheritedLocaleData of(BuildContext context) => InheritedLocaleData.of(context); + static InheritedLocaleData of( + BuildContext context, + ) => InheritedLocaleData.of(context); } /// Method B shorthand via [BuildContext] extension method. @@ -81,7584 +95,13704 @@ class TranslationProvider extends BaseTranslationProvider TranslationProvider.of(this).translations; + Translations get t => TranslationProvider.of(this).translations; } /// Manages all translation instances and the current locale -class LocaleSettings extends BaseFlutterLocaleSettings { - LocaleSettings._() : super(utils: AppLocaleUtils.instance); +class LocaleSettings + extends BaseFlutterLocaleSettings { + LocaleSettings._() : super(utils: AppLocaleUtils.instance); - static final instance = LocaleSettings._(); + static final instance = LocaleSettings._(); - // static aliases (checkout base methods for documentation) - static AppLocale get currentLocale => instance.currentLocale; - static Stream getLocaleStream() => instance.getLocaleStream(); - static AppLocale setLocale(AppLocale locale, {bool? listenToDeviceLocale = false}) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale); - static AppLocale setLocaleRaw(String rawLocale, {bool? listenToDeviceLocale = false}) => instance.setLocaleRaw(rawLocale, listenToDeviceLocale: listenToDeviceLocale); - static AppLocale useDeviceLocale() => instance.useDeviceLocale(); - @Deprecated('Use [AppLocaleUtils.supportedLocales]') static List get supportedLocales => instance.supportedLocales; - @Deprecated('Use [AppLocaleUtils.supportedLocalesRaw]') static List get supportedLocalesRaw => instance.supportedLocalesRaw; - static void setPluralResolver({String? language, AppLocale? locale, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) => instance.setPluralResolver( - language: language, - locale: locale, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ); + // static aliases (checkout base methods for documentation) + static AppLocale get currentLocale => instance.currentLocale; + static Stream getLocaleStream() => instance.getLocaleStream(); + static AppLocale setLocale( + AppLocale locale, { + bool? listenToDeviceLocale = false, + }) => instance.setLocale(locale, listenToDeviceLocale: listenToDeviceLocale); + static AppLocale setLocaleRaw( + String rawLocale, { + bool? listenToDeviceLocale = false, + }) => instance.setLocaleRaw( + rawLocale, + listenToDeviceLocale: listenToDeviceLocale, + ); + static AppLocale useDeviceLocale() => instance.useDeviceLocale(); + @Deprecated('Use [AppLocaleUtils.supportedLocales]') + static List get supportedLocales => instance.supportedLocales; + @Deprecated('Use [AppLocaleUtils.supportedLocalesRaw]') + static List get supportedLocalesRaw => instance.supportedLocalesRaw; + static void setPluralResolver({ + String? language, + AppLocale? locale, + PluralResolver? cardinalResolver, + PluralResolver? ordinalResolver, + }) => instance.setPluralResolver( + language: language, + locale: locale, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ); } /// Provides utility functions without any side effects. class AppLocaleUtils extends BaseAppLocaleUtils { - AppLocaleUtils._() : super(baseLocale: _baseLocale, locales: AppLocale.values); + AppLocaleUtils._() + : super(baseLocale: _baseLocale, locales: AppLocale.values); - static final instance = AppLocaleUtils._(); + static final instance = AppLocaleUtils._(); - // static aliases (checkout base methods for documentation) - static AppLocale parse(String rawLocale) => instance.parse(rawLocale); - static AppLocale parseLocaleParts({required String languageCode, String? scriptCode, String? countryCode}) => instance.parseLocaleParts(languageCode: languageCode, scriptCode: scriptCode, countryCode: countryCode); - static AppLocale findDeviceLocale() => instance.findDeviceLocale(); - static List get supportedLocales => instance.supportedLocales; - static List get supportedLocalesRaw => instance.supportedLocalesRaw; + // static aliases (checkout base methods for documentation) + static AppLocale parse(String rawLocale) => instance.parse(rawLocale); + static AppLocale parseLocaleParts({ + required String languageCode, + String? scriptCode, + String? countryCode, + }) => instance.parseLocaleParts( + languageCode: languageCode, + scriptCode: scriptCode, + countryCode: countryCode, + ); + static AppLocale findDeviceLocale() => instance.findDeviceLocale(); + static List get supportedLocales => instance.supportedLocales; + static List get supportedLocalesRaw => instance.supportedLocalesRaw; } // translations // Path: class Translations implements BaseTranslations { - /// Returns the current translations of the given [context]. - /// - /// Usage: - /// final t = Translations.of(context); - static Translations of(BuildContext context) => InheritedLocaleData.of(context).translations; + /// Returns the current translations of the given [context]. + /// + /// Usage: + /// final t = Translations.of(context); + static Translations of(BuildContext context) => + InheritedLocaleData.of(context).translations; - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - Translations.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.en, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + Translations.build({ + Map? overrides, + PluralResolver? cardinalResolver, + PluralResolver? ordinalResolver, + }) : assert( + overrides == null, + 'Set "translation_overrides: true" in order to enable this feature.', + ), + $meta = TranslationMetadata( + locale: AppLocale.en, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override final TranslationMetadata $meta; + /// Metadata for the translations of . + @override + final TranslationMetadata $meta; - /// Access flat map - dynamic operator[](String key) => $meta.getTranslation(key); + /// Access flat map + dynamic operator [](String key) => $meta.getTranslation(key); - late final Translations _root = this; // ignore: unused_field + late final Translations _root = this; // ignore: unused_field - // Translations - late final _StringsAppEn app = _StringsAppEn._(_root); - late final _StringsAuthEn auth = _StringsAuthEn._(_root); - late final _StringsCommonEn common = _StringsCommonEn._(_root); - late final _StringsScreensEn screens = _StringsScreensEn._(_root); - late final _StringsUpdateEn update = _StringsUpdateEn._(_root); - late final _StringsSettingsEn settings = _StringsSettingsEn._(_root); - late final _StringsSearchEn search = _StringsSearchEn._(_root); - late final _StringsHotkeysEn hotkeys = _StringsHotkeysEn._(_root); - late final _StringsPinEntryEn pinEntry = _StringsPinEntryEn._(_root); - late final _StringsFileInfoEn fileInfo = _StringsFileInfoEn._(_root); - late final _StringsMediaMenuEn mediaMenu = _StringsMediaMenuEn._(_root); - late final _StringsAccessibilityEn accessibility = _StringsAccessibilityEn._(_root); - late final _StringsTooltipsEn tooltips = _StringsTooltipsEn._(_root); - late final _StringsVideoControlsEn videoControls = _StringsVideoControlsEn._(_root); - late final _StringsUserStatusEn userStatus = _StringsUserStatusEn._(_root); - late final _StringsMessagesEn messages = _StringsMessagesEn._(_root); - late final _StringsProfileEn profile = _StringsProfileEn._(_root); - late final _StringsSubtitlingStylingEn subtitlingStyling = _StringsSubtitlingStylingEn._(_root); - late final _StringsDialogEn dialog = _StringsDialogEn._(_root); - late final _StringsDiscoverEn discover = _StringsDiscoverEn._(_root); - late final _StringsErrorsEn errors = _StringsErrorsEn._(_root); - late final _StringsLibrariesEn libraries = _StringsLibrariesEn._(_root); - late final _StringsAboutEn about = _StringsAboutEn._(_root); - late final _StringsServerSelectionEn serverSelection = _StringsServerSelectionEn._(_root); - late final _StringsHubDetailEn hubDetail = _StringsHubDetailEn._(_root); - late final _StringsLogsEn logs = _StringsLogsEn._(_root); - late final _StringsLicensesEn licenses = _StringsLicensesEn._(_root); - late final _StringsNavigationEn navigation = _StringsNavigationEn._(_root); - late final _StringsCollectionsEn collections = _StringsCollectionsEn._(_root); - late final _StringsPlaylistsEn playlists = _StringsPlaylistsEn._(_root); + // Translations + late final _StringsAppEn app = _StringsAppEn._(_root); + late final _StringsAuthEn auth = _StringsAuthEn._(_root); + late final _StringsCommonEn common = _StringsCommonEn._(_root); + late final _StringsScreensEn screens = _StringsScreensEn._(_root); + late final _StringsUpdateEn update = _StringsUpdateEn._(_root); + late final _StringsSettingsEn settings = _StringsSettingsEn._(_root); + late final _StringsSearchEn search = _StringsSearchEn._(_root); + late final _StringsHotkeysEn hotkeys = _StringsHotkeysEn._(_root); + late final _StringsPinEntryEn pinEntry = _StringsPinEntryEn._(_root); + late final _StringsFileInfoEn fileInfo = _StringsFileInfoEn._(_root); + late final _StringsMediaMenuEn mediaMenu = _StringsMediaMenuEn._(_root); + late final _StringsAccessibilityEn accessibility = _StringsAccessibilityEn._( + _root, + ); + late final _StringsTooltipsEn tooltips = _StringsTooltipsEn._(_root); + late final _StringsVideoControlsEn videoControls = _StringsVideoControlsEn._( + _root, + ); + late final _StringsUserStatusEn userStatus = _StringsUserStatusEn._(_root); + late final _StringsMessagesEn messages = _StringsMessagesEn._(_root); + late final _StringsProfileEn profile = _StringsProfileEn._(_root); + late final _StringsSubtitlingStylingEn subtitlingStyling = + _StringsSubtitlingStylingEn._(_root); + late final _StringsDialogEn dialog = _StringsDialogEn._(_root); + late final _StringsDiscoverEn discover = _StringsDiscoverEn._(_root); + late final _StringsErrorsEn errors = _StringsErrorsEn._(_root); + late final _StringsLibrariesEn libraries = _StringsLibrariesEn._(_root); + late final _StringsAboutEn about = _StringsAboutEn._(_root); + late final _StringsServerSelectionEn serverSelection = + _StringsServerSelectionEn._(_root); + late final _StringsHubDetailEn hubDetail = _StringsHubDetailEn._(_root); + late final _StringsLogsEn logs = _StringsLogsEn._(_root); + late final _StringsLicensesEn licenses = _StringsLicensesEn._(_root); + late final _StringsNavigationEn navigation = _StringsNavigationEn._(_root); + late final _StringsCollectionsEn collections = _StringsCollectionsEn._(_root); + late final _StringsPlaylistsEn playlists = _StringsPlaylistsEn._(_root); } // Path: app class _StringsAppEn { - _StringsAppEn._(this._root); + _StringsAppEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Plezy'; - String get loading => 'Loading...'; + // Translations + String get title => 'Plezy'; + String get loading => 'Loading...'; } // Path: auth class _StringsAuthEn { - _StringsAuthEn._(this._root); + _StringsAuthEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get signInWithPlex => 'Sign in with Plex'; - String get showQRCode => 'Show QR Code'; - String get cancel => 'Cancel'; - String get authenticate => 'Authenticate'; - String get retry => 'Retry'; - String get debugEnterToken => 'Debug: Enter Plex Token'; - String get plexTokenLabel => 'Plex Auth Token'; - String get plexTokenHint => 'Enter your Plex.tv token'; - String get authenticationTimeout => 'Authentication timed out. Please try again.'; - String get scanQRCodeInstruction => 'Scan this QR code with a device logged into Plex to authenticate.'; - String get waitingForAuth => 'Waiting for authentication...\nPlease complete sign-in in your browser.'; + // Translations + String get signInWithPlex => 'Sign in with Plex'; + String get showQRCode => 'Show QR Code'; + String get cancel => 'Cancel'; + String get authenticate => 'Authenticate'; + String get retry => 'Retry'; + String get debugEnterToken => 'Debug: Enter Plex Token'; + String get plexTokenLabel => 'Plex Auth Token'; + String get plexTokenHint => 'Enter your Plex.tv token'; + String get authenticationTimeout => + 'Authentication timed out. Please try again.'; + String get scanQRCodeInstruction => + 'Scan this QR code with a device logged into Plex to authenticate.'; + String get waitingForAuth => + 'Waiting for authentication...\nPlease complete sign-in in your browser.'; } // Path: common class _StringsCommonEn { - _StringsCommonEn._(this._root); + _StringsCommonEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get cancel => 'Cancel'; - String get save => 'Save'; - String get close => 'Close'; - String get clear => 'Clear'; - String get reset => 'Reset'; - String get later => 'Later'; - String get submit => 'Submit'; - String get confirm => 'Confirm'; - String get retry => 'Retry'; - String get playNow => 'Play Now'; - String get logout => 'Logout'; - String get online => 'Online'; - String get offline => 'Offline'; - String get owned => 'Owned'; - String get shared => 'Shared'; - String get current => 'CURRENT'; - String get unknown => 'Unknown'; - String get refresh => 'Refresh'; - String get yes => 'Yes'; - String get no => 'No'; - String get server => 'Server'; - String get delete => 'Delete'; - String get shuffle => 'Shuffle'; - String get addTo => 'Add to...'; + // Translations + String get cancel => 'Cancel'; + String get save => 'Save'; + String get close => 'Close'; + String get clear => 'Clear'; + String get reset => 'Reset'; + String get later => 'Later'; + String get submit => 'Submit'; + String get confirm => 'Confirm'; + String get retry => 'Retry'; + String get playNow => 'Play Now'; + String get logout => 'Logout'; + String get online => 'Online'; + String get offline => 'Offline'; + String get owned => 'Owned'; + String get shared => 'Shared'; + String get current => 'CURRENT'; + String get unknown => 'Unknown'; + String get refresh => 'Refresh'; + String get yes => 'Yes'; + String get no => 'No'; + String get server => 'Server'; + String get delete => 'Delete'; + String get shuffle => 'Shuffle'; + String get addTo => 'Add to...'; } // Path: screens class _StringsScreensEn { - _StringsScreensEn._(this._root); + _StringsScreensEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get licenses => 'Licenses'; - String get switchProfile => 'Switch Profile'; - String get subtitleStyling => 'Subtitle Styling'; - String get search => 'Search'; - String get logs => 'Logs'; + // Translations + String get licenses => 'Licenses'; + String get switchProfile => 'Switch Profile'; + String get subtitleStyling => 'Subtitle Styling'; + String get search => 'Search'; + String get logs => 'Logs'; } // Path: update class _StringsUpdateEn { - _StringsUpdateEn._(this._root); + _StringsUpdateEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get available => 'Update Available'; - String versionAvailable({required Object version}) => 'Version ${version} is available'; - String currentVersion({required Object version}) => 'Current: ${version}'; - String get skipVersion => 'Skip This Version'; - String get viewRelease => 'View Release'; - String get latestVersion => 'You are on the latest version'; - String get checkFailed => 'Failed to check for updates'; + // Translations + String get available => 'Update Available'; + String versionAvailable({required Object version}) => + 'Version ${version} is available'; + String currentVersion({required Object version}) => 'Current: ${version}'; + String get skipVersion => 'Skip This Version'; + String get viewRelease => 'View Release'; + String get latestVersion => 'You are on the latest version'; + String get checkFailed => 'Failed to check for updates'; } // Path: settings class _StringsSettingsEn { - _StringsSettingsEn._(this._root); + _StringsSettingsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Settings'; - String get language => 'Language'; - String get theme => 'Theme'; - String get appearance => 'Appearance'; - String get videoPlayback => 'Video Playback'; - String get shufflePlay => 'Shuffle Play'; - String get advanced => 'Advanced'; - String get useSeasonPostersDescription => 'Show season poster instead of series poster for episodes'; - String get showHeroSectionDescription => 'Display featured content carousel on home screen'; - String get secondsLabel => 'Seconds'; - String get minutesLabel => 'Minutes'; - String get secondsShort => 's'; - String get minutesShort => 'm'; - String durationHint({required Object min, required Object max}) => 'Enter duration (${min}-${max})'; - String get systemTheme => 'System'; - String get systemThemeDescription => 'Follow system settings'; - String get lightTheme => 'Light'; - String get darkTheme => 'Dark'; - String get libraryDensity => 'Library Density'; - String get compact => 'Compact'; - String get compactDescription => 'Smaller cards, more items visible'; - String get normal => 'Normal'; - String get normalDescription => 'Default size'; - String get comfortable => 'Comfortable'; - String get comfortableDescription => 'Larger cards, fewer items visible'; - String get viewMode => 'View Mode'; - String get gridView => 'Grid'; - String get gridViewDescription => 'Display items in a grid layout'; - String get listView => 'List'; - String get listViewDescription => 'Display items in a list layout'; - String get useSeasonPosters => 'Use Season Posters'; - String get showHeroSection => 'Show Hero Section'; - String get hardwareDecoding => 'Hardware Decoding'; - String get hardwareDecodingDescription => 'Use hardware acceleration when available'; - String get bufferSize => 'Buffer Size'; - String bufferSizeMB({required Object size}) => '${size}MB'; - String get subtitleStyling => 'Subtitle Styling'; - String get subtitleStylingDescription => 'Customize subtitle appearance'; - String get smallSkipDuration => 'Small Skip Duration'; - String get largeSkipDuration => 'Large Skip Duration'; - String secondsUnit({required Object seconds}) => '${seconds} seconds'; - String get defaultSleepTimer => 'Default Sleep Timer'; - String minutesUnit({required Object minutes}) => '${minutes} minutes'; - String get rememberTrackSelections => 'Remember track selections per show/movie'; - String get rememberTrackSelectionsDescription => 'Automatically save audio and subtitle language preferences when you change tracks during playback'; - String get unwatchedOnly => 'Unwatched Only'; - String get unwatchedOnlyDescription => 'Only include unwatched episodes in shuffle queue'; - String get shuffleOrderNavigation => 'Shuffle Order Navigation'; - String get shuffleOrderNavigationDescription => 'Next/previous buttons follow shuffled order'; - String get loopShuffleQueue => 'Loop Shuffle Queue'; - String get loopShuffleQueueDescription => 'Restart queue when reaching the end'; - String get videoPlayerControls => 'Video Player Controls'; - String get keyboardShortcuts => 'Keyboard Shortcuts'; - String get keyboardShortcutsDescription => 'Customize keyboard shortcuts'; - String get debugLogging => 'Debug Logging'; - String get debugLoggingDescription => 'Enable detailed logging for troubleshooting'; - String get viewLogs => 'View Logs'; - String get viewLogsDescription => 'View application logs'; - String get clearCache => 'Clear Cache'; - String get clearCacheDescription => 'This will clear all cached images and data. The app may take longer to load content after clearing the cache.'; - String get clearCacheSuccess => 'Cache cleared successfully'; - String get resetSettings => 'Reset Settings'; - String get resetSettingsDescription => 'This will reset all settings to their default values. This action cannot be undone.'; - String get resetSettingsSuccess => 'Settings reset successfully'; - String get shortcutsReset => 'Shortcuts reset to defaults'; - String get about => 'About'; - String get aboutDescription => 'App information and licenses'; - String get updates => 'Updates'; - String get updateAvailable => 'Update Available'; - String get checkForUpdates => 'Check for Updates'; - String get validationErrorEnterNumber => 'Please enter a valid number'; - String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Duration must be between ${min} and ${max} ${unit}'; - String shortcutAlreadyAssigned({required Object action}) => 'Shortcut already assigned to ${action}'; - String shortcutUpdated({required Object action}) => 'Shortcut updated for ${action}'; - String get autoSkip => 'Auto Skip'; - String get autoSkipIntro => 'Auto Skip Intro'; - String get autoSkipIntroDescription => 'Automatically skip intro markers after a few seconds'; - String get autoSkipCredits => 'Auto Skip Credits'; - String get autoSkipCreditsDescription => 'Automatically skip credits and play next episode'; - String get autoSkipDelay => 'Auto Skip Delay'; - String autoSkipDelayDescription({required Object seconds}) => 'Wait ${seconds} seconds before auto-skipping'; + // Translations + String get title => 'Settings'; + String get language => 'Language'; + String get theme => 'Theme'; + String get appearance => 'Appearance'; + String get videoPlayback => 'Video Playback'; + String get shufflePlay => 'Shuffle Play'; + String get advanced => 'Advanced'; + String get useSeasonPostersDescription => + 'Show season poster instead of series poster for episodes'; + String get showHeroSectionDescription => + 'Display featured content carousel on home screen'; + String get secondsLabel => 'Seconds'; + String get minutesLabel => 'Minutes'; + String get secondsShort => 's'; + String get minutesShort => 'm'; + String durationHint({required Object min, required Object max}) => + 'Enter duration (${min}-${max})'; + String get systemTheme => 'System'; + String get systemThemeDescription => 'Follow system settings'; + String get lightTheme => 'Light'; + String get darkTheme => 'Dark'; + String get libraryDensity => 'Library Density'; + String get compact => 'Compact'; + String get compactDescription => 'Smaller cards, more items visible'; + String get normal => 'Normal'; + String get normalDescription => 'Default size'; + String get comfortable => 'Comfortable'; + String get comfortableDescription => 'Larger cards, fewer items visible'; + String get viewMode => 'View Mode'; + String get gridView => 'Grid'; + String get gridViewDescription => 'Display items in a grid layout'; + String get listView => 'List'; + String get listViewDescription => 'Display items in a list layout'; + String get useSeasonPosters => 'Use Season Posters'; + String get showHeroSection => 'Show Hero Section'; + String get hardwareDecoding => 'Hardware Decoding'; + String get hardwareDecodingDescription => + 'Use hardware acceleration when available'; + String get bufferSize => 'Buffer Size'; + String bufferSizeMB({required Object size}) => '${size}MB'; + String get subtitleStyling => 'Subtitle Styling'; + String get subtitleStylingDescription => 'Customize subtitle appearance'; + String get smallSkipDuration => 'Small Skip Duration'; + String get largeSkipDuration => 'Large Skip Duration'; + String secondsUnit({required Object seconds}) => '${seconds} seconds'; + String get defaultSleepTimer => 'Default Sleep Timer'; + String minutesUnit({required Object minutes}) => '${minutes} minutes'; + String get rememberTrackSelections => + 'Remember track selections per show/movie'; + String get rememberTrackSelectionsDescription => + 'Automatically save audio and subtitle language preferences when you change tracks during playback'; + String get unwatchedOnly => 'Unwatched Only'; + String get unwatchedOnlyDescription => + 'Only include unwatched episodes in shuffle queue'; + String get shuffleOrderNavigation => 'Shuffle Order Navigation'; + String get shuffleOrderNavigationDescription => + 'Next/previous buttons follow shuffled order'; + String get loopShuffleQueue => 'Loop Shuffle Queue'; + String get loopShuffleQueueDescription => + 'Restart queue when reaching the end'; + String get videoPlayerControls => 'Video Player Controls'; + String get keyboardShortcuts => 'Keyboard Shortcuts'; + String get keyboardShortcutsDescription => 'Customize keyboard shortcuts'; + String get debugLogging => 'Debug Logging'; + String get debugLoggingDescription => + 'Enable detailed logging for troubleshooting'; + String get viewLogs => 'View Logs'; + String get viewLogsDescription => 'View application logs'; + String get clearCache => 'Clear Cache'; + String get clearCacheDescription => + 'This will clear all cached images and data. The app may take longer to load content after clearing the cache.'; + String get clearCacheSuccess => 'Cache cleared successfully'; + String get resetSettings => 'Reset Settings'; + String get resetSettingsDescription => + 'This will reset all settings to their default values. This action cannot be undone.'; + String get resetSettingsSuccess => 'Settings reset successfully'; + String get shortcutsReset => 'Shortcuts reset to defaults'; + String get about => 'About'; + String get aboutDescription => 'App information and licenses'; + String get updates => 'Updates'; + String get updateAvailable => 'Update Available'; + String get checkForUpdates => 'Check for Updates'; + String get validationErrorEnterNumber => 'Please enter a valid number'; + String validationErrorDuration({ + required Object min, + required Object max, + required Object unit, + }) => 'Duration must be between ${min} and ${max} ${unit}'; + String shortcutAlreadyAssigned({required Object action}) => + 'Shortcut already assigned to ${action}'; + String shortcutUpdated({required Object action}) => + 'Shortcut updated for ${action}'; + String get autoSkip => 'Auto Skip'; + String get autoSkipIntro => 'Auto Skip Intro'; + String get autoSkipIntroDescription => + 'Automatically skip intro markers after a few seconds'; + String get autoSkipCredits => 'Auto Skip Credits'; + String get autoSkipCreditsDescription => + 'Automatically skip credits and play next episode'; + String get autoSkipDelay => 'Auto Skip Delay'; + String autoSkipDelayDescription({required Object seconds}) => + 'Wait ${seconds} seconds before auto-skipping'; } // Path: search class _StringsSearchEn { - _StringsSearchEn._(this._root); + _StringsSearchEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get hint => 'Search movies, shows, music...'; - String get tryDifferentTerm => 'Try a different search term'; - String get searchYourMedia => 'Search your media'; - String get enterTitleActorOrKeyword => 'Enter a title, actor, or keyword'; + // Translations + String get hint => 'Search movies, shows, music...'; + String get tryDifferentTerm => 'Try a different search term'; + String get searchYourMedia => 'Search your media'; + String get enterTitleActorOrKeyword => 'Enter a title, actor, or keyword'; } // Path: hotkeys class _StringsHotkeysEn { - _StringsHotkeysEn._(this._root); + _StringsHotkeysEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String setShortcutFor({required Object actionName}) => 'Set Shortcut for ${actionName}'; - String get clearShortcut => 'Clear shortcut'; + // Translations + String setShortcutFor({required Object actionName}) => + 'Set Shortcut for ${actionName}'; + String get clearShortcut => 'Clear shortcut'; } // Path: pinEntry class _StringsPinEntryEn { - _StringsPinEntryEn._(this._root); + _StringsPinEntryEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get enterPin => 'Enter PIN'; - String get showPin => 'Show PIN'; - String get hidePin => 'Hide PIN'; + // Translations + String get enterPin => 'Enter PIN'; + String get showPin => 'Show PIN'; + String get hidePin => 'Hide PIN'; } // Path: fileInfo class _StringsFileInfoEn { - _StringsFileInfoEn._(this._root); + _StringsFileInfoEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'File Info'; - String get video => 'Video'; - String get audio => 'Audio'; - String get file => 'File'; - String get advanced => 'Advanced'; - String get codec => 'Codec'; - String get resolution => 'Resolution'; - String get bitrate => 'Bitrate'; - String get frameRate => 'Frame Rate'; - String get aspectRatio => 'Aspect Ratio'; - String get profile => 'Profile'; - String get bitDepth => 'Bit Depth'; - String get colorSpace => 'Color Space'; - String get colorRange => 'Color Range'; - String get colorPrimaries => 'Color Primaries'; - String get chromaSubsampling => 'Chroma Subsampling'; - String get channels => 'Channels'; - String get path => 'Path'; - String get size => 'Size'; - String get container => 'Container'; - String get duration => 'Duration'; - String get optimizedForStreaming => 'Optimized for Streaming'; - String get has64bitOffsets => '64-bit Offsets'; + // Translations + String get title => 'File Info'; + String get video => 'Video'; + String get audio => 'Audio'; + String get file => 'File'; + String get advanced => 'Advanced'; + String get codec => 'Codec'; + String get resolution => 'Resolution'; + String get bitrate => 'Bitrate'; + String get frameRate => 'Frame Rate'; + String get aspectRatio => 'Aspect Ratio'; + String get profile => 'Profile'; + String get bitDepth => 'Bit Depth'; + String get colorSpace => 'Color Space'; + String get colorRange => 'Color Range'; + String get colorPrimaries => 'Color Primaries'; + String get chromaSubsampling => 'Chroma Subsampling'; + String get channels => 'Channels'; + String get path => 'Path'; + String get size => 'Size'; + String get container => 'Container'; + String get duration => 'Duration'; + String get optimizedForStreaming => 'Optimized for Streaming'; + String get has64bitOffsets => '64-bit Offsets'; } // Path: mediaMenu class _StringsMediaMenuEn { - _StringsMediaMenuEn._(this._root); + _StringsMediaMenuEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get markAsWatched => 'Mark as Watched'; - String get markAsUnwatched => 'Mark as Unwatched'; - String get removeFromContinueWatching => 'Remove from Continue Watching'; - String get goToSeries => 'Go to series'; - String get goToSeason => 'Go to season'; - String get shufflePlay => 'Shuffle Play'; - String get fileInfo => 'File Info'; + // Translations + String get markAsWatched => 'Mark as Watched'; + String get markAsUnwatched => 'Mark as Unwatched'; + String get removeFromContinueWatching => 'Remove from Continue Watching'; + String get goToSeries => 'Go to series'; + String get goToSeason => 'Go to season'; + String get shufflePlay => 'Shuffle Play'; + String get fileInfo => 'File Info'; } // Path: accessibility class _StringsAccessibilityEn { - _StringsAccessibilityEn._(this._root); + _StringsAccessibilityEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String mediaCardMovie({required Object title}) => '${title}, movie'; - String mediaCardShow({required Object title}) => '${title}, TV show'; - String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - String get mediaCardWatched => 'watched'; - String mediaCardPartiallyWatched({required Object percent}) => '${percent} percent watched'; - String get mediaCardUnwatched => 'unwatched'; - String get tapToPlay => 'Tap to play'; + // Translations + String mediaCardMovie({required Object title}) => '${title}, movie'; + String mediaCardShow({required Object title}) => '${title}, TV show'; + String mediaCardEpisode({ + required Object title, + required Object episodeInfo, + }) => '${title}, ${episodeInfo}'; + String mediaCardSeason({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + String get mediaCardWatched => 'watched'; + String mediaCardPartiallyWatched({required Object percent}) => + '${percent} percent watched'; + String get mediaCardUnwatched => 'unwatched'; + String get tapToPlay => 'Tap to play'; } // Path: tooltips class _StringsTooltipsEn { - _StringsTooltipsEn._(this._root); + _StringsTooltipsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get shufflePlay => 'Shuffle play'; - String get markAsWatched => 'Mark as watched'; - String get markAsUnwatched => 'Mark as unwatched'; + // Translations + String get shufflePlay => 'Shuffle play'; + String get markAsWatched => 'Mark as watched'; + String get markAsUnwatched => 'Mark as unwatched'; } // Path: videoControls class _StringsVideoControlsEn { - _StringsVideoControlsEn._(this._root); + _StringsVideoControlsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get audioLabel => 'Audio'; - String get subtitlesLabel => 'Subtitles'; - String get resetToZero => 'Reset to 0ms'; - String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - String playsLater({required Object label}) => '${label} plays later'; - String playsEarlier({required Object label}) => '${label} plays earlier'; - String get noOffset => 'No offset'; - String get letterbox => 'Letterbox'; - String get fillScreen => 'Fill screen'; - String get stretch => 'Stretch'; - String get lockRotation => 'Lock rotation'; - String get unlockRotation => 'Unlock rotation'; - String get sleepTimer => 'Sleep Timer'; - String get timerActive => 'Timer Active'; - String playbackWillPauseIn({required Object duration}) => 'Playback will pause in ${duration}'; - String get sleepTimerCompleted => 'Sleep timer completed - playback paused'; - String get playButton => 'Play'; - String get pauseButton => 'Pause'; - String seekBackwardButton({required Object seconds}) => 'Seek backward ${seconds} seconds'; - String seekForwardButton({required Object seconds}) => 'Seek forward ${seconds} seconds'; - String get previousButton => 'Previous episode'; - String get nextButton => 'Next episode'; - String get previousChapterButton => 'Previous chapter'; - String get nextChapterButton => 'Next chapter'; - String get volumeButton => 'Volume'; - String get muteButton => 'Mute'; - String get unmuteButton => 'Unmute'; - String get settingsButton => 'Video settings'; - String get audioTrackButton => 'Audio tracks'; - String get subtitlesButton => 'Subtitles'; - String get chaptersButton => 'Chapters'; - String get versionsButton => 'Video versions'; - String get aspectRatioButton => 'Aspect ratio'; - String get fullscreenButton => 'Enter fullscreen'; - String get exitFullscreenButton => 'Exit fullscreen'; - String get rotationLockButton => 'Rotation lock'; - String get timelineSlider => 'Video timeline'; - String get volumeSlider => 'Volume level'; - String get backButton => 'Back'; + // Translations + String get audioLabel => 'Audio'; + String get subtitlesLabel => 'Subtitles'; + String get resetToZero => 'Reset to 0ms'; + String addTime({required Object amount, required Object unit}) => + '+${amount}${unit}'; + String minusTime({required Object amount, required Object unit}) => + '-${amount}${unit}'; + String playsLater({required Object label}) => '${label} plays later'; + String playsEarlier({required Object label}) => '${label} plays earlier'; + String get noOffset => 'No offset'; + String get letterbox => 'Letterbox'; + String get fillScreen => 'Fill screen'; + String get stretch => 'Stretch'; + String get lockRotation => 'Lock rotation'; + String get unlockRotation => 'Unlock rotation'; + String get sleepTimer => 'Sleep Timer'; + String get timerActive => 'Timer Active'; + String playbackWillPauseIn({required Object duration}) => + 'Playback will pause in ${duration}'; + String get sleepTimerCompleted => 'Sleep timer completed - playback paused'; + String get playButton => 'Play'; + String get pauseButton => 'Pause'; + String seekBackwardButton({required Object seconds}) => + 'Seek backward ${seconds} seconds'; + String seekForwardButton({required Object seconds}) => + 'Seek forward ${seconds} seconds'; + String get previousButton => 'Previous episode'; + String get nextButton => 'Next episode'; + String get previousChapterButton => 'Previous chapter'; + String get nextChapterButton => 'Next chapter'; + String get volumeButton => 'Volume'; + String get muteButton => 'Mute'; + String get unmuteButton => 'Unmute'; + String get settingsButton => 'Video settings'; + String get audioTrackButton => 'Audio tracks'; + String get subtitlesButton => 'Subtitles'; + String get chaptersButton => 'Chapters'; + String get versionsButton => 'Video versions'; + String get aspectRatioButton => 'Aspect ratio'; + String get fullscreenButton => 'Enter fullscreen'; + String get exitFullscreenButton => 'Exit fullscreen'; + String get rotationLockButton => 'Rotation lock'; + String get timelineSlider => 'Video timeline'; + String get volumeSlider => 'Volume level'; + String get backButton => 'Back'; } // Path: userStatus class _StringsUserStatusEn { - _StringsUserStatusEn._(this._root); + _StringsUserStatusEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get admin => 'Admin'; - String get restricted => 'Restricted'; - String get protected => 'Protected'; - String get current => 'CURRENT'; + // Translations + String get admin => 'Admin'; + String get restricted => 'Restricted'; + String get protected => 'Protected'; + String get current => 'CURRENT'; } // Path: messages class _StringsMessagesEn { - _StringsMessagesEn._(this._root); + _StringsMessagesEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get markedAsWatched => 'Marked as watched'; - String get markedAsUnwatched => 'Marked as unwatched'; - String get removedFromContinueWatching => 'Removed from Continue Watching'; - String errorLoading({required Object error}) => 'Error: ${error}'; - String get fileInfoNotAvailable => 'File information not available'; - String errorLoadingFileInfo({required Object error}) => 'Error loading file info: ${error}'; - String get errorLoadingSeries => 'Error loading series'; - String get errorLoadingSeason => 'Error loading season'; - String get musicNotSupported => 'Music playback is not yet supported'; - String get logsCleared => 'Logs cleared'; - String get logsCopied => 'Logs copied to clipboard'; - String get noLogsAvailable => 'No logs available'; - String libraryScanning({required Object title}) => 'Scanning "${title}"...'; - String libraryScanStarted({required Object title}) => 'Library scan started for "${title}"'; - String libraryScanFailed({required Object error}) => 'Failed to scan library: ${error}'; - String metadataRefreshing({required Object title}) => 'Refreshing metadata for "${title}"...'; - String metadataRefreshStarted({required Object title}) => 'Metadata refresh started for "${title}"'; - String metadataRefreshFailed({required Object error}) => 'Failed to refresh metadata: ${error}'; - String get noPlexToken => 'No Plex token found. Please login again.'; - String get logoutConfirm => 'Are you sure you want to logout?'; - String get noSeasonsFound => 'No seasons found'; - String get noEpisodesFound => 'No episodes found in first season'; - String get noEpisodesFoundGeneral => 'No episodes found'; - String get noResultsFound => 'No results found'; - String sleepTimerSet({required Object label}) => 'Sleep timer set for ${label}'; - String failedToSwitchProfile({required Object displayName}) => 'Failed to switch to ${displayName}'; - String get noItemsAvailable => 'No items available'; - String get failedToCreatePlayQueue => 'Failed to create play queue'; - String get failedToCreatePlayQueueNoItems => 'Failed to create play queue - no items'; - String failedPlayback({required Object action, required Object error}) => 'Failed to ${action}: ${error}'; + // Translations + String get markedAsWatched => 'Marked as watched'; + String get markedAsUnwatched => 'Marked as unwatched'; + String get removedFromContinueWatching => 'Removed from Continue Watching'; + String errorLoading({required Object error}) => 'Error: ${error}'; + String get fileInfoNotAvailable => 'File information not available'; + String errorLoadingFileInfo({required Object error}) => + 'Error loading file info: ${error}'; + String get errorLoadingSeries => 'Error loading series'; + String get errorLoadingSeason => 'Error loading season'; + String get musicNotSupported => 'Music playback is not yet supported'; + String get logsCleared => 'Logs cleared'; + String get logsCopied => 'Logs copied to clipboard'; + String get noLogsAvailable => 'No logs available'; + String libraryScanning({required Object title}) => 'Scanning "${title}"...'; + String libraryScanStarted({required Object title}) => + 'Library scan started for "${title}"'; + String libraryScanFailed({required Object error}) => + 'Failed to scan library: ${error}'; + String metadataRefreshing({required Object title}) => + 'Refreshing metadata for "${title}"...'; + String metadataRefreshStarted({required Object title}) => + 'Metadata refresh started for "${title}"'; + String metadataRefreshFailed({required Object error}) => + 'Failed to refresh metadata: ${error}'; + String get noPlexToken => 'No Plex token found. Please login again.'; + String get logoutConfirm => 'Are you sure you want to logout?'; + String get noSeasonsFound => 'No seasons found'; + String get noEpisodesFound => 'No episodes found in first season'; + String get noEpisodesFoundGeneral => 'No episodes found'; + String get noResultsFound => 'No results found'; + String sleepTimerSet({required Object label}) => + 'Sleep timer set for ${label}'; + String failedToSwitchProfile({required Object displayName}) => + 'Failed to switch to ${displayName}'; + String get noItemsAvailable => 'No items available'; + String get failedToCreatePlayQueue => 'Failed to create play queue'; + String get failedToCreatePlayQueueNoItems => + 'Failed to create play queue - no items'; + String failedPlayback({required Object action, required Object error}) => + 'Failed to ${action}: ${error}'; } // Path: profile class _StringsProfileEn { - _StringsProfileEn._(this._root); + _StringsProfileEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get noUsersAvailable => 'No users available'; + // Translations + String get noUsersAvailable => 'No users available'; } // Path: subtitlingStyling class _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingEn._(this._root); + _StringsSubtitlingStylingEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get stylingOptions => 'Styling Options'; - String get fontSize => 'Font Size'; - String get textColor => 'Text Color'; - String get borderSize => 'Border Size'; - String get borderColor => 'Border Color'; - String get backgroundOpacity => 'Background Opacity'; - String get backgroundColor => 'Background Color'; + // Translations + String get stylingOptions => 'Styling Options'; + String get fontSize => 'Font Size'; + String get textColor => 'Text Color'; + String get borderSize => 'Border Size'; + String get borderColor => 'Border Color'; + String get backgroundOpacity => 'Background Opacity'; + String get backgroundColor => 'Background Color'; } // Path: dialog class _StringsDialogEn { - _StringsDialogEn._(this._root); + _StringsDialogEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get confirmAction => 'Confirm Action'; - String get areYouSure => 'Are you sure you want to perform this action?'; - String get cancel => 'Cancel'; - String get playNow => 'Play Now'; + // Translations + String get confirmAction => 'Confirm Action'; + String get areYouSure => 'Are you sure you want to perform this action?'; + String get cancel => 'Cancel'; + String get playNow => 'Play Now'; } // Path: discover class _StringsDiscoverEn { - _StringsDiscoverEn._(this._root); + _StringsDiscoverEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Discover'; - String get switchProfile => 'Switch Profile'; - String get logout => 'Logout'; - String get noContentAvailable => 'No content available'; - String get addMediaToLibraries => 'Add some media to your libraries'; - String get continueWatching => 'Continue Watching'; - String get recentlyAdded => 'Recently Added'; - String get play => 'Play'; - String get resume => 'Resume'; - String playEpisode({required Object season, required Object episode}) => 'Play S${season}, E${episode}'; - String resumeEpisode({required Object season, required Object episode}) => 'Resume S${season}, E${episode}'; - String get pause => 'Pause'; - String get overview => 'Overview'; - String get cast => 'Cast'; - String get seasons => 'Seasons'; - String get studio => 'Studio'; - String get rating => 'Rating'; - String get watched => 'Watched'; - String episodeCount({required Object count}) => '${count} episodes'; - String watchedProgress({required Object watched, required Object total}) => '${watched}/${total} watched'; - String get movie => 'Movie'; - String get tvShow => 'TV Show'; - String minutesLeft({required Object minutes}) => '${minutes} min left'; + // Translations + String get title => 'Discover'; + String get switchProfile => 'Switch Profile'; + String get logout => 'Logout'; + String get noContentAvailable => 'No content available'; + String get addMediaToLibraries => 'Add some media to your libraries'; + String get continueWatching => 'Continue Watching'; + String get recentlyAdded => 'Recently Added'; + String get play => 'Play'; + String get resume => 'Resume'; + String playEpisode({required Object season, required Object episode}) => + 'Play S${season}, E${episode}'; + String resumeEpisode({required Object season, required Object episode}) => + 'Resume S${season}, E${episode}'; + String get pause => 'Pause'; + String get overview => 'Overview'; + String get cast => 'Cast'; + String get seasons => 'Seasons'; + String get studio => 'Studio'; + String get rating => 'Rating'; + String get watched => 'Watched'; + String episodeCount({required Object count}) => '${count} episodes'; + String watchedProgress({required Object watched, required Object total}) => + '${watched}/${total} watched'; + String get movie => 'Movie'; + String get tvShow => 'TV Show'; + String minutesLeft({required Object minutes}) => '${minutes} min left'; } // Path: errors class _StringsErrorsEn { - _StringsErrorsEn._(this._root); + _StringsErrorsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String searchFailed({required Object error}) => 'Search failed: ${error}'; - String connectionTimeout({required Object context}) => 'Connection timeout while loading ${context}'; - String get connectionFailed => 'Unable to connect to Plex server'; - String failedToLoad({required Object context, required Object error}) => 'Failed to load ${context}: ${error}'; - String get noClientAvailable => 'No client available'; - String authenticationFailed({required Object error}) => 'Authentication failed: ${error}'; - String get couldNotLaunchUrl => 'Could not launch auth URL'; - String get pleaseEnterToken => 'Please enter a token'; - String get invalidToken => 'Invalid token'; - String failedToVerifyToken({required Object error}) => 'Failed to verify token: ${error}'; - String failedToSwitchProfile({required Object displayName}) => 'Failed to switch to ${displayName}'; - String get connectionFailedGeneric => 'Connection failed'; + // Translations + String searchFailed({required Object error}) => 'Search failed: ${error}'; + String connectionTimeout({required Object context}) => + 'Connection timeout while loading ${context}'; + String get connectionFailed => 'Unable to connect to Plex server'; + String failedToLoad({required Object context, required Object error}) => + 'Failed to load ${context}: ${error}'; + String get noClientAvailable => 'No client available'; + String authenticationFailed({required Object error}) => + 'Authentication failed: ${error}'; + String get couldNotLaunchUrl => 'Could not launch auth URL'; + String get pleaseEnterToken => 'Please enter a token'; + String get invalidToken => 'Invalid token'; + String failedToVerifyToken({required Object error}) => + 'Failed to verify token: ${error}'; + String failedToSwitchProfile({required Object displayName}) => + 'Failed to switch to ${displayName}'; + String get connectionFailedGeneric => 'Connection failed'; } // Path: libraries class _StringsLibrariesEn { - _StringsLibrariesEn._(this._root); + _StringsLibrariesEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Libraries'; - String get scanLibraryFiles => 'Scan Library Files'; - String get scanLibrary => 'Scan Library'; - String get analyze => 'Analyze'; - String get analyzeLibrary => 'Analyze Library'; - String get refreshMetadata => 'Refresh Metadata'; - String get emptyTrash => 'Empty Trash'; - String emptyingTrash({required Object title}) => 'Emptying trash for "${title}"...'; - String trashEmptied({required Object title}) => 'Trash emptied for "${title}"'; - String failedToEmptyTrash({required Object error}) => 'Failed to empty trash: ${error}'; - String analyzing({required Object title}) => 'Analyzing "${title}"...'; - String analysisStarted({required Object title}) => 'Analysis started for "${title}"'; - String failedToAnalyze({required Object error}) => 'Failed to analyze library: ${error}'; - String get noLibrariesFound => 'No libraries found'; - String get thisLibraryIsEmpty => 'This library is empty'; - String get all => 'All'; - String get clearAll => 'Clear All'; - String scanLibraryConfirm({required Object title}) => 'Are you sure you want to scan "${title}"?'; - String analyzeLibraryConfirm({required Object title}) => 'Are you sure you want to analyze "${title}"?'; - String refreshMetadataConfirm({required Object title}) => 'Are you sure you want to refresh metadata for "${title}"?'; - String emptyTrashConfirm({required Object title}) => 'Are you sure you want to empty trash for "${title}"?'; - String get manageLibraries => 'Manage Libraries'; - String get sort => 'Sort'; - String get sortBy => 'Sort By'; - String get filters => 'Filters'; - String loadingLibraryWithCount({required Object count}) => 'Loading library... (${count} items loaded)'; - String get confirmActionMessage => 'Are you sure you want to perform this action?'; - String get showLibrary => 'Show library'; - String get hideLibrary => 'Hide library'; - String get libraryOptions => 'Library options'; - String get content => 'library content'; - String get selectLibrary => 'Select library'; - String filtersWithCount({required Object count}) => 'Filters (${count})'; - String get noRecommendations => 'No recommendations available'; - String get noCollections => 'No collections in this library'; - String get noFoldersFound => 'No folders found'; - String get folders => 'folders'; - late final _StringsLibrariesTabsEn tabs = _StringsLibrariesTabsEn._(_root); - late final _StringsLibrariesGroupingsEn groupings = _StringsLibrariesGroupingsEn._(_root); + // Translations + String get title => 'Libraries'; + String get scanLibraryFiles => 'Scan Library Files'; + String get scanLibrary => 'Scan Library'; + String get analyze => 'Analyze'; + String get analyzeLibrary => 'Analyze Library'; + String get refreshMetadata => 'Refresh Metadata'; + String get emptyTrash => 'Empty Trash'; + String emptyingTrash({required Object title}) => + 'Emptying trash for "${title}"...'; + String trashEmptied({required Object title}) => + 'Trash emptied for "${title}"'; + String failedToEmptyTrash({required Object error}) => + 'Failed to empty trash: ${error}'; + String analyzing({required Object title}) => 'Analyzing "${title}"...'; + String analysisStarted({required Object title}) => + 'Analysis started for "${title}"'; + String failedToAnalyze({required Object error}) => + 'Failed to analyze library: ${error}'; + String get noLibrariesFound => 'No libraries found'; + String get thisLibraryIsEmpty => 'This library is empty'; + String get all => 'All'; + String get clearAll => 'Clear All'; + String scanLibraryConfirm({required Object title}) => + 'Are you sure you want to scan "${title}"?'; + String analyzeLibraryConfirm({required Object title}) => + 'Are you sure you want to analyze "${title}"?'; + String refreshMetadataConfirm({required Object title}) => + 'Are you sure you want to refresh metadata for "${title}"?'; + String emptyTrashConfirm({required Object title}) => + 'Are you sure you want to empty trash for "${title}"?'; + String get manageLibraries => 'Manage Libraries'; + String get sort => 'Sort'; + String get sortBy => 'Sort By'; + String get filters => 'Filters'; + String loadingLibraryWithCount({required Object count}) => + 'Loading library... (${count} items loaded)'; + String get confirmActionMessage => + 'Are you sure you want to perform this action?'; + String get showLibrary => 'Show library'; + String get hideLibrary => 'Hide library'; + String get libraryOptions => 'Library options'; + String get content => 'library content'; + String get selectLibrary => 'Select library'; + String filtersWithCount({required Object count}) => 'Filters (${count})'; + String get noRecommendations => 'No recommendations available'; + String get noCollections => 'No collections in this library'; + String get noFoldersFound => 'No folders found'; + String get folders => 'folders'; + late final _StringsLibrariesTabsEn tabs = _StringsLibrariesTabsEn._(_root); + late final _StringsLibrariesGroupingsEn groupings = + _StringsLibrariesGroupingsEn._(_root); } // Path: about class _StringsAboutEn { - _StringsAboutEn._(this._root); + _StringsAboutEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'About'; - String get openSourceLicenses => 'Open Source Licenses'; - String versionLabel({required Object version}) => 'Version ${version}'; - String get appDescription => 'A beautiful Plex client for Flutter'; - String get viewLicensesDescription => 'View licenses of third-party libraries'; + // Translations + String get title => 'About'; + String get openSourceLicenses => 'Open Source Licenses'; + String versionLabel({required Object version}) => 'Version ${version}'; + String get appDescription => 'A beautiful Plex client for Flutter'; + String get viewLicensesDescription => + 'View licenses of third-party libraries'; } // Path: serverSelection class _StringsServerSelectionEn { - _StringsServerSelectionEn._(this._root); + _StringsServerSelectionEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get connectingToServer => 'Connecting to server...'; - String get connectingToAllServers => 'Connecting to all servers...'; - String get connectToAllServers => 'Connect to All Servers'; - String get allServerConnectionsFailed => 'Failed to connect to any servers. Please check your network and try again.'; - String foundServers({required Object count}) => 'Found ${count} server(s)'; - String get orSelectIndividually => 'Or select a server individually:'; - String get serverDebugCopied => 'Server debug data copied to clipboard'; - String get copyDebugData => 'Copy Debug Data'; - String get noServersFound => 'No servers found'; - String malformedServerData({required Object count}) => 'Found ${count} server(s) with malformed data. No valid servers available.'; - String get incompleteServerInfo => 'Some servers have incomplete information and were skipped. Please check your Plex.tv account.'; - String get incompleteConnectionInfo => 'Server connection information is incomplete. Please try again.'; - String malformedServerInfo({required Object message}) => 'Server information is malformed: ${message}'; - String get networkConnectionFailed => 'Network connection failed. Please check your internet connection and try again.'; - String get authenticationFailed => 'Authentication failed. Please sign in again.'; - String get plexServiceUnavailable => 'Plex service unavailable. Please try again later.'; - String failedToLoadServers({required Object error}) => 'Failed to load servers: ${error}'; + // Translations + String get connectingToServer => 'Connecting to server...'; + String get connectingToAllServers => 'Connecting to all servers...'; + String get connectToAllServers => 'Connect to All Servers'; + String get allServerConnectionsFailed => + 'Failed to connect to any servers. Please check your network and try again.'; + String foundServers({required Object count}) => 'Found ${count} server(s)'; + String get orSelectIndividually => 'Or select a server individually:'; + String get serverDebugCopied => 'Server debug data copied to clipboard'; + String get copyDebugData => 'Copy Debug Data'; + String get noServersFound => 'No servers found'; + String malformedServerData({required Object count}) => + 'Found ${count} server(s) with malformed data. No valid servers available.'; + String get incompleteServerInfo => + 'Some servers have incomplete information and were skipped. Please check your Plex.tv account.'; + String get incompleteConnectionInfo => + 'Server connection information is incomplete. Please try again.'; + String malformedServerInfo({required Object message}) => + 'Server information is malformed: ${message}'; + String get networkConnectionFailed => + 'Network connection failed. Please check your internet connection and try again.'; + String get authenticationFailed => + 'Authentication failed. Please sign in again.'; + String get plexServiceUnavailable => + 'Plex service unavailable. Please try again later.'; + String failedToLoadServers({required Object error}) => + 'Failed to load servers: ${error}'; } // Path: hubDetail class _StringsHubDetailEn { - _StringsHubDetailEn._(this._root); + _StringsHubDetailEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Title'; - String get releaseYear => 'Release Year'; - String get dateAdded => 'Date Added'; - String get rating => 'Rating'; - String get noItemsFound => 'No items found'; + // Translations + String get title => 'Title'; + String get releaseYear => 'Release Year'; + String get dateAdded => 'Date Added'; + String get rating => 'Rating'; + String get noItemsFound => 'No items found'; } // Path: logs class _StringsLogsEn { - _StringsLogsEn._(this._root); + _StringsLogsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Logs'; - String get clearLogs => 'Clear Logs'; - String get copyLogs => 'Copy Logs'; - String get exportLogs => 'Export Logs'; - String get noLogsToShow => 'No logs to show'; - String get error => 'Error:'; - String get stackTrace => 'Stack Trace:'; + // Translations + String get title => 'Logs'; + String get clearLogs => 'Clear Logs'; + String get copyLogs => 'Copy Logs'; + String get exportLogs => 'Export Logs'; + String get noLogsToShow => 'No logs to show'; + String get error => 'Error:'; + String get stackTrace => 'Stack Trace:'; } // Path: licenses class _StringsLicensesEn { - _StringsLicensesEn._(this._root); + _StringsLicensesEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get relatedPackages => 'Related Packages'; - String get license => 'License'; - String licenseNumber({required Object number}) => 'License ${number}'; - String licensesCount({required Object count}) => '${count} licenses'; + // Translations + String get relatedPackages => 'Related Packages'; + String get license => 'License'; + String licenseNumber({required Object number}) => 'License ${number}'; + String licensesCount({required Object count}) => '${count} licenses'; } // Path: navigation class _StringsNavigationEn { - _StringsNavigationEn._(this._root); + _StringsNavigationEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get home => 'Home'; - String get search => 'Search'; - String get libraries => 'Libraries'; - String get settings => 'Settings'; + // Translations + String get home => 'Home'; + String get search => 'Search'; + String get libraries => 'Libraries'; + String get settings => 'Settings'; } // Path: collections class _StringsCollectionsEn { - _StringsCollectionsEn._(this._root); + _StringsCollectionsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Collections'; - String get collection => 'Collection'; - String get empty => 'Collection is empty'; - String get noItems => 'No items in this collection'; - String get unknownLibrarySection => 'Cannot delete: Unknown library section'; - String get deleteCollection => 'Delete Collection'; - String deleteConfirm({required Object title}) => 'Are you sure you want to delete "${title}"? This action cannot be undone.'; - String get deleted => 'Collection deleted'; - String get deleteFailed => 'Failed to delete collection'; - String deleteFailedWithError({required Object error}) => 'Failed to delete collection: ${error}'; - String failedToLoadItems({required Object error}) => 'Failed to load collection items: ${error}'; - String get addTo => 'Add to collection'; - String get selectCollection => 'Select Collection'; - String get createNewCollection => 'Create New Collection'; - String get collectionName => 'Collection Name'; - String get enterCollectionName => 'Enter collection name'; - String get addedToCollection => 'Added to collection'; - String get errorAddingToCollection => 'Failed to add to collection'; - String get created => 'Collection created'; - String get removeFromCollection => 'Remove from collection'; - String removeFromCollectionConfirm({required Object title}) => 'Remove "${title}" from this collection?'; - String get removedFromCollection => 'Removed from collection'; - String get removeFromCollectionFailed => 'Failed to remove from collection'; - String removeFromCollectionError({required Object error}) => 'Error removing from collection: ${error}'; + // Translations + String get title => 'Collections'; + String get collection => 'Collection'; + String get empty => 'Collection is empty'; + String get noItems => 'No items in this collection'; + String get unknownLibrarySection => 'Cannot delete: Unknown library section'; + String get deleteCollection => 'Delete Collection'; + String deleteConfirm({required Object title}) => + 'Are you sure you want to delete "${title}"? This action cannot be undone.'; + String get deleted => 'Collection deleted'; + String get deleteFailed => 'Failed to delete collection'; + String deleteFailedWithError({required Object error}) => + 'Failed to delete collection: ${error}'; + String failedToLoadItems({required Object error}) => + 'Failed to load collection items: ${error}'; + String get addTo => 'Add to collection'; + String get selectCollection => 'Select Collection'; + String get createNewCollection => 'Create New Collection'; + String get collectionName => 'Collection Name'; + String get enterCollectionName => 'Enter collection name'; + String get addedToCollection => 'Added to collection'; + String get errorAddingToCollection => 'Failed to add to collection'; + String get created => 'Collection created'; + String get removeFromCollection => 'Remove from collection'; + String removeFromCollectionConfirm({required Object title}) => + 'Remove "${title}" from this collection?'; + String get removedFromCollection => 'Removed from collection'; + String get removeFromCollectionFailed => 'Failed to remove from collection'; + String removeFromCollectionError({required Object error}) => + 'Error removing from collection: ${error}'; } // Path: playlists class _StringsPlaylistsEn { - _StringsPlaylistsEn._(this._root); + _StringsPlaylistsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get title => 'Playlists'; - String get playlist => 'Playlist'; - String get noPlaylists => 'No playlists found'; - String get create => 'Create Playlist'; - String get newPlaylist => 'New Playlist'; - String get playlistName => 'Playlist Name'; - String get enterPlaylistName => 'Enter playlist name'; - String get edit => 'Edit Playlist'; - String get delete => 'Delete Playlist'; - String get addTo => 'Add to Playlist'; - String get addItems => 'Add Items'; - String get removeItem => 'Remove from Playlist'; - String get clearPlaylist => 'Clear Playlist'; - String get playAll => 'Play All'; - String get shuffle => 'Shuffle'; - String get smartPlaylist => 'Smart Playlist'; - String get regularPlaylist => 'Regular Playlist'; - String itemCount({required Object count}) => '${count} items'; - String get oneItem => '1 item'; - String get emptyPlaylist => 'This playlist is empty'; - String get deleteConfirm => 'Delete Playlist?'; - String deleteMessage({required Object name}) => 'Are you sure you want to delete "${name}"?'; - String get created => 'Playlist created'; - String get updated => 'Playlist updated'; - String get deleted => 'Playlist deleted'; - String get itemAdded => 'Added to playlist'; - String get itemRemoved => 'Removed from playlist'; - String get selectPlaylist => 'Select Playlist'; - String get createNewPlaylist => 'Create New Playlist'; - String get errorCreating => 'Failed to create playlist'; - String get errorDeleting => 'Failed to delete playlist'; - String get errorLoading => 'Failed to load playlists'; - String get errorAdding => 'Failed to add to playlist'; - String get errorReordering => 'Failed to reorder playlist item'; - String get errorRemoving => 'Failed to remove from playlist'; + // Translations + String get title => 'Playlists'; + String get playlist => 'Playlist'; + String get noPlaylists => 'No playlists found'; + String get create => 'Create Playlist'; + String get newPlaylist => 'New Playlist'; + String get playlistName => 'Playlist Name'; + String get enterPlaylistName => 'Enter playlist name'; + String get edit => 'Edit Playlist'; + String get delete => 'Delete Playlist'; + String get addTo => 'Add to Playlist'; + String get addItems => 'Add Items'; + String get removeItem => 'Remove from Playlist'; + String get clearPlaylist => 'Clear Playlist'; + String get playAll => 'Play All'; + String get shuffle => 'Shuffle'; + String get smartPlaylist => 'Smart Playlist'; + String get regularPlaylist => 'Regular Playlist'; + String itemCount({required Object count}) => '${count} items'; + String get oneItem => '1 item'; + String get emptyPlaylist => 'This playlist is empty'; + String get deleteConfirm => 'Delete Playlist?'; + String deleteMessage({required Object name}) => + 'Are you sure you want to delete "${name}"?'; + String get created => 'Playlist created'; + String get updated => 'Playlist updated'; + String get deleted => 'Playlist deleted'; + String get itemAdded => 'Added to playlist'; + String get itemRemoved => 'Removed from playlist'; + String get selectPlaylist => 'Select Playlist'; + String get createNewPlaylist => 'Create New Playlist'; + String get errorCreating => 'Failed to create playlist'; + String get errorDeleting => 'Failed to delete playlist'; + String get errorLoading => 'Failed to load playlists'; + String get errorAdding => 'Failed to add to playlist'; + String get errorReordering => 'Failed to reorder playlist item'; + String get errorRemoving => 'Failed to remove from playlist'; } // Path: libraries.tabs class _StringsLibrariesTabsEn { - _StringsLibrariesTabsEn._(this._root); + _StringsLibrariesTabsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get recommended => 'Recommended'; - String get browse => 'Browse'; - String get collections => 'Collections'; - String get playlists => 'Playlists'; + // Translations + String get recommended => 'Recommended'; + String get browse => 'Browse'; + String get collections => 'Collections'; + String get playlists => 'Playlists'; } // Path: libraries.groupings class _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsEn._(this._root); + _StringsLibrariesGroupingsEn._(this._root); - final Translations _root; // ignore: unused_field + final Translations _root; // ignore: unused_field - // Translations - String get all => 'All'; - String get movies => 'Movies'; - String get shows => 'TV Shows'; - String get seasons => 'Seasons'; - String get episodes => 'Episodes'; - String get folders => 'Folders'; + // Translations + String get all => 'All'; + String get movies => 'Movies'; + String get shows => 'TV Shows'; + String get seasons => 'Seasons'; + String get episodes => 'Episodes'; + String get folders => 'Folders'; } // Path: class _StringsDe implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsDe.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.de, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsDe.build({ + Map? overrides, + PluralResolver? cardinalResolver, + PluralResolver? ordinalResolver, + }) : assert( + overrides == null, + 'Set "translation_overrides: true" in order to enable this feature.', + ), + $meta = TranslationMetadata( + locale: AppLocale.de, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override final TranslationMetadata $meta; + /// Metadata for the translations of . + @override + final TranslationMetadata $meta; - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); + /// Access flat map + @override + dynamic operator [](String key) => $meta.getTranslation(key); - @override late final _StringsDe _root = this; // ignore: unused_field + @override + late final _StringsDe _root = this; // ignore: unused_field - // Translations - @override late final _StringsAppDe app = _StringsAppDe._(_root); - @override late final _StringsAuthDe auth = _StringsAuthDe._(_root); - @override late final _StringsCommonDe common = _StringsCommonDe._(_root); - @override late final _StringsScreensDe screens = _StringsScreensDe._(_root); - @override late final _StringsUpdateDe update = _StringsUpdateDe._(_root); - @override late final _StringsSettingsDe settings = _StringsSettingsDe._(_root); - @override late final _StringsSearchDe search = _StringsSearchDe._(_root); - @override late final _StringsHotkeysDe hotkeys = _StringsHotkeysDe._(_root); - @override late final _StringsPinEntryDe pinEntry = _StringsPinEntryDe._(_root); - @override late final _StringsFileInfoDe fileInfo = _StringsFileInfoDe._(_root); - @override late final _StringsMediaMenuDe mediaMenu = _StringsMediaMenuDe._(_root); - @override late final _StringsAccessibilityDe accessibility = _StringsAccessibilityDe._(_root); - @override late final _StringsTooltipsDe tooltips = _StringsTooltipsDe._(_root); - @override late final _StringsVideoControlsDe videoControls = _StringsVideoControlsDe._(_root); - @override late final _StringsUserStatusDe userStatus = _StringsUserStatusDe._(_root); - @override late final _StringsMessagesDe messages = _StringsMessagesDe._(_root); - @override late final _StringsProfileDe profile = _StringsProfileDe._(_root); - @override late final _StringsSubtitlingStylingDe subtitlingStyling = _StringsSubtitlingStylingDe._(_root); - @override late final _StringsDialogDe dialog = _StringsDialogDe._(_root); - @override late final _StringsDiscoverDe discover = _StringsDiscoverDe._(_root); - @override late final _StringsErrorsDe errors = _StringsErrorsDe._(_root); - @override late final _StringsLibrariesDe libraries = _StringsLibrariesDe._(_root); - @override late final _StringsAboutDe about = _StringsAboutDe._(_root); - @override late final _StringsServerSelectionDe serverSelection = _StringsServerSelectionDe._(_root); - @override late final _StringsHubDetailDe hubDetail = _StringsHubDetailDe._(_root); - @override late final _StringsLogsDe logs = _StringsLogsDe._(_root); - @override late final _StringsLicensesDe licenses = _StringsLicensesDe._(_root); - @override late final _StringsNavigationDe navigation = _StringsNavigationDe._(_root); - @override late final _StringsPlaylistsDe playlists = _StringsPlaylistsDe._(_root); - @override late final _StringsCollectionsDe collections = _StringsCollectionsDe._(_root); + // Translations + @override + late final _StringsAppDe app = _StringsAppDe._(_root); + @override + late final _StringsAuthDe auth = _StringsAuthDe._(_root); + @override + late final _StringsCommonDe common = _StringsCommonDe._(_root); + @override + late final _StringsScreensDe screens = _StringsScreensDe._(_root); + @override + late final _StringsUpdateDe update = _StringsUpdateDe._(_root); + @override + late final _StringsSettingsDe settings = _StringsSettingsDe._(_root); + @override + late final _StringsSearchDe search = _StringsSearchDe._(_root); + @override + late final _StringsHotkeysDe hotkeys = _StringsHotkeysDe._(_root); + @override + late final _StringsPinEntryDe pinEntry = _StringsPinEntryDe._(_root); + @override + late final _StringsFileInfoDe fileInfo = _StringsFileInfoDe._(_root); + @override + late final _StringsMediaMenuDe mediaMenu = _StringsMediaMenuDe._(_root); + @override + late final _StringsAccessibilityDe accessibility = _StringsAccessibilityDe._( + _root, + ); + @override + late final _StringsTooltipsDe tooltips = _StringsTooltipsDe._(_root); + @override + late final _StringsVideoControlsDe videoControls = _StringsVideoControlsDe._( + _root, + ); + @override + late final _StringsUserStatusDe userStatus = _StringsUserStatusDe._(_root); + @override + late final _StringsMessagesDe messages = _StringsMessagesDe._(_root); + @override + late final _StringsProfileDe profile = _StringsProfileDe._(_root); + @override + late final _StringsSubtitlingStylingDe subtitlingStyling = + _StringsSubtitlingStylingDe._(_root); + @override + late final _StringsDialogDe dialog = _StringsDialogDe._(_root); + @override + late final _StringsDiscoverDe discover = _StringsDiscoverDe._(_root); + @override + late final _StringsErrorsDe errors = _StringsErrorsDe._(_root); + @override + late final _StringsLibrariesDe libraries = _StringsLibrariesDe._(_root); + @override + late final _StringsAboutDe about = _StringsAboutDe._(_root); + @override + late final _StringsServerSelectionDe serverSelection = + _StringsServerSelectionDe._(_root); + @override + late final _StringsHubDetailDe hubDetail = _StringsHubDetailDe._(_root); + @override + late final _StringsLogsDe logs = _StringsLogsDe._(_root); + @override + late final _StringsLicensesDe licenses = _StringsLicensesDe._(_root); + @override + late final _StringsNavigationDe navigation = _StringsNavigationDe._(_root); + @override + late final _StringsPlaylistsDe playlists = _StringsPlaylistsDe._(_root); + @override + late final _StringsCollectionsDe collections = _StringsCollectionsDe._(_root); } // Path: app class _StringsAppDe implements _StringsAppEn { - _StringsAppDe._(this._root); + _StringsAppDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get title => 'Plezy'; - @override String get loading => 'Lädt...'; + // Translations + @override + String get title => 'Plezy'; + @override + String get loading => 'Lädt...'; } // Path: auth class _StringsAuthDe implements _StringsAuthEn { - _StringsAuthDe._(this._root); + _StringsAuthDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get signInWithPlex => 'Mit Plex anmelden'; - @override String get showQRCode => 'QR-Code anzeigen'; - @override String get cancel => 'Abbrechen'; - @override String get authenticate => 'Authentifizieren'; - @override String get retry => 'Erneut versuchen'; - @override String get debugEnterToken => 'Debug: Plex-Token eingeben'; - @override String get plexTokenLabel => 'Plex-Auth-Token'; - @override String get plexTokenHint => 'Plex.tv-Token eingeben'; - @override String get authenticationTimeout => 'Authentifizierung abgelaufen. Bitte erneut versuchen.'; - @override String get scanQRCodeInstruction => 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.'; - @override String get waitingForAuth => 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.'; + // Translations + @override + String get signInWithPlex => 'Mit Plex anmelden'; + @override + String get showQRCode => 'QR-Code anzeigen'; + @override + String get cancel => 'Abbrechen'; + @override + String get authenticate => 'Authentifizieren'; + @override + String get retry => 'Erneut versuchen'; + @override + String get debugEnterToken => 'Debug: Plex-Token eingeben'; + @override + String get plexTokenLabel => 'Plex-Auth-Token'; + @override + String get plexTokenHint => 'Plex.tv-Token eingeben'; + @override + String get authenticationTimeout => + 'Authentifizierung abgelaufen. Bitte erneut versuchen.'; + @override + String get scanQRCodeInstruction => + 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.'; + @override + String get waitingForAuth => + 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.'; } // Path: common class _StringsCommonDe implements _StringsCommonEn { - _StringsCommonDe._(this._root); + _StringsCommonDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get cancel => 'Abbrechen'; - @override String get save => 'Speichern'; - @override String get close => 'Schließen'; - @override String get clear => 'Leeren'; - @override String get reset => 'Zurücksetzen'; - @override String get later => 'Später'; - @override String get submit => 'Senden'; - @override String get confirm => 'Bestätigen'; - @override String get retry => 'Erneut versuchen'; - @override String get playNow => 'Jetzt abspielen'; - @override String get logout => 'Abmelden'; - @override String get online => 'Online'; - @override String get offline => 'Offline'; - @override String get owned => 'Besitzer'; - @override String get shared => 'Geteilt'; - @override String get current => 'AKTUELL'; - @override String get unknown => 'Unbekannt'; - @override String get refresh => 'Aktualisieren'; - @override String get yes => 'Ja'; - @override String get no => 'Nein'; - @override String get server => 'Server'; - @override String get delete => 'Löschen'; - @override String get shuffle => 'Zufall'; - @override String get addTo => 'Hinzufügen zu...'; + // Translations + @override + String get cancel => 'Abbrechen'; + @override + String get save => 'Speichern'; + @override + String get close => 'Schließen'; + @override + String get clear => 'Leeren'; + @override + String get reset => 'Zurücksetzen'; + @override + String get later => 'Später'; + @override + String get submit => 'Senden'; + @override + String get confirm => 'Bestätigen'; + @override + String get retry => 'Erneut versuchen'; + @override + String get playNow => 'Jetzt abspielen'; + @override + String get logout => 'Abmelden'; + @override + String get online => 'Online'; + @override + String get offline => 'Offline'; + @override + String get owned => 'Besitzer'; + @override + String get shared => 'Geteilt'; + @override + String get current => 'AKTUELL'; + @override + String get unknown => 'Unbekannt'; + @override + String get refresh => 'Aktualisieren'; + @override + String get yes => 'Ja'; + @override + String get no => 'Nein'; + @override + String get server => 'Server'; + @override + String get delete => 'Löschen'; + @override + String get shuffle => 'Zufall'; + @override + String get addTo => 'Hinzufügen zu...'; } // Path: screens class _StringsScreensDe implements _StringsScreensEn { - _StringsScreensDe._(this._root); + _StringsScreensDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get licenses => 'Lizenzen'; - @override String get selectServer => 'Server auswählen'; - @override String get switchProfile => 'Profil wechseln'; - @override String get subtitleStyling => 'Untertitel-Stil'; - @override String get search => 'Suche'; - @override String get logs => 'Protokolle'; + // Translations + @override + String get licenses => 'Lizenzen'; + @override + String get selectServer => 'Server auswählen'; + @override + String get switchProfile => 'Profil wechseln'; + @override + String get subtitleStyling => 'Untertitel-Stil'; + @override + String get search => 'Suche'; + @override + String get logs => 'Protokolle'; } // Path: update class _StringsUpdateDe implements _StringsUpdateEn { - _StringsUpdateDe._(this._root); + _StringsUpdateDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get available => 'Update verfügbar'; - @override String versionAvailable({required Object version}) => 'Version ${version} ist verfügbar'; - @override String currentVersion({required Object version}) => 'Aktuell: ${version}'; - @override String get skipVersion => 'Diese Version überspringen'; - @override String get viewRelease => 'Release anzeigen'; - @override String get latestVersion => 'Aktuellste Version installiert'; - @override String get checkFailed => 'Fehler bei der Updateprüfung'; + // Translations + @override + String get available => 'Update verfügbar'; + @override + String versionAvailable({required Object version}) => + 'Version ${version} ist verfügbar'; + @override + String currentVersion({required Object version}) => 'Aktuell: ${version}'; + @override + String get skipVersion => 'Diese Version überspringen'; + @override + String get viewRelease => 'Release anzeigen'; + @override + String get latestVersion => 'Aktuellste Version installiert'; + @override + String get checkFailed => 'Fehler bei der Updateprüfung'; } // Path: settings class _StringsSettingsDe implements _StringsSettingsEn { - _StringsSettingsDe._(this._root); + _StringsSettingsDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get title => 'Einstellungen'; - @override String get language => 'Sprache'; - @override String get theme => 'Design'; - @override String get appearance => 'Darstellung'; - @override String get videoPlayback => 'Videowiedergabe'; - @override String get shufflePlay => 'Zufallswiedergabe'; - @override String get advanced => 'Erweitert'; - @override String get useSeasonPostersDescription => 'Staffelposter statt Serienposter für Episoden anzeigen'; - @override String get showHeroSectionDescription => 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; - @override String get secondsLabel => 'Sekunden'; - @override String get minutesLabel => 'Minuten'; - @override String get secondsShort => 's'; - @override String get minutesShort => 'm'; - @override String durationHint({required Object min, required Object max}) => 'Dauer eingeben (${min}-${max})'; - @override String get systemTheme => 'System'; - @override String get systemThemeDescription => 'Systemeinstellungen folgen'; - @override String get lightTheme => 'Hell'; - @override String get darkTheme => 'Dunkel'; - @override String get libraryDensity => 'Mediathekdichte'; - @override String get compact => 'Kompakt'; - @override String get compactDescription => 'Kleinere Karten, mehr Elemente sichtbar'; - @override String get normal => 'Normal'; - @override String get normalDescription => 'Standardgröße'; - @override String get comfortable => 'Großzügig'; - @override String get comfortableDescription => 'Größere Karten, weniger Elemente sichtbar'; - @override String get viewMode => 'Ansichtsmodus'; - @override String get gridView => 'Raster'; - @override String get gridViewDescription => 'Elemente im Raster anzeigen'; - @override String get listView => 'Liste'; - @override String get listViewDescription => 'Elemente in Listenansicht anzeigen'; - @override String get useSeasonPosters => 'Staffelposter verwenden'; - @override String get showHeroSection => 'Hero-Bereich anzeigen'; - @override String get hardwareDecoding => 'Hardware-Decodierung'; - @override String get hardwareDecodingDescription => 'Hardwarebeschleunigung verwenden, sofern verfügbar'; - @override String get bufferSize => 'Puffergröße'; - @override String bufferSizeMB({required Object size}) => '${size}MB'; - @override String get subtitleStyling => 'Untertitel-Stil'; - @override String get subtitleStylingDescription => 'Aussehen von Untertiteln anpassen'; - @override String get smallSkipDuration => 'Kleine Sprungdauer'; - @override String get largeSkipDuration => 'Große Sprungdauer'; - @override String secondsUnit({required Object seconds}) => '${seconds} Sekunden'; - @override String get defaultSleepTimer => 'Standard-Sleep-Timer'; - @override String minutesUnit({required Object minutes}) => '${minutes} Minuten'; - @override String get rememberTrackSelections => 'Spurauswahl pro Serie/Film merken'; - @override String get rememberTrackSelectionsDescription => 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; - @override String get unwatchedOnly => 'Nur ungesehene'; - @override String get unwatchedOnlyDescription => 'Nur ungesehene Episoden in die Shuffle-Warteschlange aufnehmen'; - @override String get shuffleOrderNavigation => 'Navigation der Shuffle-Reihenfolge'; - @override String get shuffleOrderNavigationDescription => 'Weiter/Zurück folgt der zufälligen Reihenfolge'; - @override String get loopShuffleQueue => 'Shuffle-Warteschlange wiederholen'; - @override String get loopShuffleQueueDescription => 'Warteschlange neu starten, wenn das Ende erreicht ist'; - @override String get videoPlayerControls => 'Videoplayer-Steuerung'; - @override String get keyboardShortcuts => 'Tastenkürzel'; - @override String get keyboardShortcutsDescription => 'Tastenkürzel anpassen'; - @override String get debugLogging => 'Debug-Protokollierung'; - @override String get debugLoggingDescription => 'Detaillierte Protokolle zur Fehleranalyse aktivieren'; - @override String get viewLogs => 'Protokolle anzeigen'; - @override String get viewLogsDescription => 'App-Protokolle anzeigen'; - @override String get clearCache => 'Cache löschen'; - @override String get clearCacheDescription => 'Löscht alle zwischengespeicherten Bilder und Daten. Die App kann danach langsamer laden.'; - @override String get clearCacheSuccess => 'Cache erfolgreich gelöscht'; - @override String get resetSettings => 'Einstellungen zurücksetzen'; - @override String get resetSettingsDescription => 'Alle Einstellungen auf Standard zurücksetzen. Dies kann nicht rückgängig gemacht werden.'; - @override String get resetSettingsSuccess => 'Einstellungen erfolgreich zurückgesetzt'; - @override String get shortcutsReset => 'Tastenkürzel auf Standard zurückgesetzt'; - @override String get about => 'Über'; - @override String get aboutDescription => 'App-Informationen und Lizenzen'; - @override String get updates => 'Updates'; - @override String get updateAvailable => 'Update verfügbar'; - @override String get checkForUpdates => 'Nach Updates suchen'; - @override String get validationErrorEnterNumber => 'Bitte eine gültige Zahl eingeben'; - @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Dauer muss zwischen ${min} und ${max} ${unit} liegen'; - @override String shortcutAlreadyAssigned({required Object action}) => 'Tastenkürzel bereits zugewiesen an ${action}'; - @override String shortcutUpdated({required Object action}) => 'Tastenkürzel aktualisiert für ${action}'; - @override String get autoSkip => 'Automatisches Überspringen'; - @override String get autoSkipIntro => 'Intro automatisch überspringen'; - @override String get autoSkipIntroDescription => 'Intro-Marker nach wenigen Sekunden automatisch überspringen'; - @override String get autoSkipCredits => 'Abspann automatisch überspringen'; - @override String get autoSkipCreditsDescription => 'Abspann automatisch überspringen und nächste Episode abspielen'; - @override String get autoSkipDelay => 'Verzögerung für automatisches Überspringen'; - @override String autoSkipDelayDescription({required Object seconds}) => '${seconds} Sekunden vor dem automatischen Überspringen warten'; + // Translations + @override + String get title => 'Einstellungen'; + @override + String get language => 'Sprache'; + @override + String get theme => 'Design'; + @override + String get appearance => 'Darstellung'; + @override + String get videoPlayback => 'Videowiedergabe'; + @override + String get shufflePlay => 'Zufallswiedergabe'; + @override + String get advanced => 'Erweitert'; + @override + String get useSeasonPostersDescription => + 'Staffelposter statt Serienposter für Episoden anzeigen'; + @override + String get showHeroSectionDescription => + 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; + @override + String get secondsLabel => 'Sekunden'; + @override + String get minutesLabel => 'Minuten'; + @override + String get secondsShort => 's'; + @override + String get minutesShort => 'm'; + @override + String durationHint({required Object min, required Object max}) => + 'Dauer eingeben (${min}-${max})'; + @override + String get systemTheme => 'System'; + @override + String get systemThemeDescription => 'Systemeinstellungen folgen'; + @override + String get lightTheme => 'Hell'; + @override + String get darkTheme => 'Dunkel'; + @override + String get libraryDensity => 'Mediathekdichte'; + @override + String get compact => 'Kompakt'; + @override + String get compactDescription => 'Kleinere Karten, mehr Elemente sichtbar'; + @override + String get normal => 'Normal'; + @override + String get normalDescription => 'Standardgröße'; + @override + String get comfortable => 'Großzügig'; + @override + String get comfortableDescription => + 'Größere Karten, weniger Elemente sichtbar'; + @override + String get viewMode => 'Ansichtsmodus'; + @override + String get gridView => 'Raster'; + @override + String get gridViewDescription => 'Elemente im Raster anzeigen'; + @override + String get listView => 'Liste'; + @override + String get listViewDescription => 'Elemente in Listenansicht anzeigen'; + @override + String get useSeasonPosters => 'Staffelposter verwenden'; + @override + String get showHeroSection => 'Hero-Bereich anzeigen'; + @override + String get hardwareDecoding => 'Hardware-Decodierung'; + @override + String get hardwareDecodingDescription => + 'Hardwarebeschleunigung verwenden, sofern verfügbar'; + @override + String get bufferSize => 'Puffergröße'; + @override + String bufferSizeMB({required Object size}) => '${size}MB'; + @override + String get subtitleStyling => 'Untertitel-Stil'; + @override + String get subtitleStylingDescription => 'Aussehen von Untertiteln anpassen'; + @override + String get smallSkipDuration => 'Kleine Sprungdauer'; + @override + String get largeSkipDuration => 'Große Sprungdauer'; + @override + String secondsUnit({required Object seconds}) => '${seconds} Sekunden'; + @override + String get defaultSleepTimer => 'Standard-Sleep-Timer'; + @override + String minutesUnit({required Object minutes}) => '${minutes} Minuten'; + @override + String get rememberTrackSelections => 'Spurauswahl pro Serie/Film merken'; + @override + String get rememberTrackSelectionsDescription => + 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; + @override + String get unwatchedOnly => 'Nur ungesehene'; + @override + String get unwatchedOnlyDescription => + 'Nur ungesehene Episoden in die Shuffle-Warteschlange aufnehmen'; + @override + String get shuffleOrderNavigation => 'Navigation der Shuffle-Reihenfolge'; + @override + String get shuffleOrderNavigationDescription => + 'Weiter/Zurück folgt der zufälligen Reihenfolge'; + @override + String get loopShuffleQueue => 'Shuffle-Warteschlange wiederholen'; + @override + String get loopShuffleQueueDescription => + 'Warteschlange neu starten, wenn das Ende erreicht ist'; + @override + String get videoPlayerControls => 'Videoplayer-Steuerung'; + @override + String get keyboardShortcuts => 'Tastenkürzel'; + @override + String get keyboardShortcutsDescription => 'Tastenkürzel anpassen'; + @override + String get debugLogging => 'Debug-Protokollierung'; + @override + String get debugLoggingDescription => + 'Detaillierte Protokolle zur Fehleranalyse aktivieren'; + @override + String get viewLogs => 'Protokolle anzeigen'; + @override + String get viewLogsDescription => 'App-Protokolle anzeigen'; + @override + String get clearCache => 'Cache löschen'; + @override + String get clearCacheDescription => + 'Löscht alle zwischengespeicherten Bilder und Daten. Die App kann danach langsamer laden.'; + @override + String get clearCacheSuccess => 'Cache erfolgreich gelöscht'; + @override + String get resetSettings => 'Einstellungen zurücksetzen'; + @override + String get resetSettingsDescription => + 'Alle Einstellungen auf Standard zurücksetzen. Dies kann nicht rückgängig gemacht werden.'; + @override + String get resetSettingsSuccess => 'Einstellungen erfolgreich zurückgesetzt'; + @override + String get shortcutsReset => 'Tastenkürzel auf Standard zurückgesetzt'; + @override + String get about => 'Über'; + @override + String get aboutDescription => 'App-Informationen und Lizenzen'; + @override + String get updates => 'Updates'; + @override + String get updateAvailable => 'Update verfügbar'; + @override + String get checkForUpdates => 'Nach Updates suchen'; + @override + String get validationErrorEnterNumber => 'Bitte eine gültige Zahl eingeben'; + @override + String validationErrorDuration({ + required Object min, + required Object max, + required Object unit, + }) => 'Dauer muss zwischen ${min} und ${max} ${unit} liegen'; + @override + String shortcutAlreadyAssigned({required Object action}) => + 'Tastenkürzel bereits zugewiesen an ${action}'; + @override + String shortcutUpdated({required Object action}) => + 'Tastenkürzel aktualisiert für ${action}'; + @override + String get autoSkip => 'Automatisches Überspringen'; + @override + String get autoSkipIntro => 'Intro automatisch überspringen'; + @override + String get autoSkipIntroDescription => + 'Intro-Marker nach wenigen Sekunden automatisch überspringen'; + @override + String get autoSkipCredits => 'Abspann automatisch überspringen'; + @override + String get autoSkipCreditsDescription => + 'Abspann automatisch überspringen und nächste Episode abspielen'; + @override + String get autoSkipDelay => 'Verzögerung für automatisches Überspringen'; + @override + String autoSkipDelayDescription({required Object seconds}) => + '${seconds} Sekunden vor dem automatischen Überspringen warten'; } // Path: search class _StringsSearchDe implements _StringsSearchEn { - _StringsSearchDe._(this._root); + _StringsSearchDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get hint => 'Filme, Serien, Musik suchen...'; - @override String get tryDifferentTerm => 'Anderen Suchbegriff versuchen'; - @override String get searchYourMedia => 'In den eigenen Medien suchen'; - @override String get enterTitleActorOrKeyword => 'Titel, Schauspieler oder Stichwort eingeben'; + // Translations + @override + String get hint => 'Filme, Serien, Musik suchen...'; + @override + String get tryDifferentTerm => 'Anderen Suchbegriff versuchen'; + @override + String get searchYourMedia => 'In den eigenen Medien suchen'; + @override + String get enterTitleActorOrKeyword => + 'Titel, Schauspieler oder Stichwort eingeben'; } // Path: hotkeys class _StringsHotkeysDe implements _StringsHotkeysEn { - _StringsHotkeysDe._(this._root); + _StringsHotkeysDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String setShortcutFor({required Object actionName}) => 'Tastenkürzel festlegen für ${actionName}'; - @override String get clearShortcut => 'Kürzel löschen'; + // Translations + @override + String setShortcutFor({required Object actionName}) => + 'Tastenkürzel festlegen für ${actionName}'; + @override + String get clearShortcut => 'Kürzel löschen'; } // Path: pinEntry class _StringsPinEntryDe implements _StringsPinEntryEn { - _StringsPinEntryDe._(this._root); + _StringsPinEntryDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get enterPin => 'PIN eingeben'; - @override String get showPin => 'PIN anzeigen'; - @override String get hidePin => 'PIN verbergen'; + // Translations + @override + String get enterPin => 'PIN eingeben'; + @override + String get showPin => 'PIN anzeigen'; + @override + String get hidePin => 'PIN verbergen'; } // Path: fileInfo class _StringsFileInfoDe implements _StringsFileInfoEn { - _StringsFileInfoDe._(this._root); + _StringsFileInfoDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get title => 'Dateiinfo'; - @override String get video => 'Video'; - @override String get audio => 'Audio'; - @override String get file => 'Datei'; - @override String get advanced => 'Erweitert'; - @override String get codec => 'Codec'; - @override String get resolution => 'Auflösung'; - @override String get bitrate => 'Bitrate'; - @override String get frameRate => 'Bildrate'; - @override String get aspectRatio => 'Seitenverhältnis'; - @override String get profile => 'Profil'; - @override String get bitDepth => 'Farbtiefe'; - @override String get colorSpace => 'Farbraum'; - @override String get colorRange => 'Farbbereich'; - @override String get colorPrimaries => 'Primärfarben'; - @override String get chromaSubsampling => 'Chroma-Subsampling'; - @override String get channels => 'Kanäle'; - @override String get path => 'Pfad'; - @override String get size => 'Größe'; - @override String get container => 'Container'; - @override String get duration => 'Dauer'; - @override String get optimizedForStreaming => 'Für Streaming optimiert'; - @override String get has64bitOffsets => '64-Bit-Offsets'; + // Translations + @override + String get title => 'Dateiinfo'; + @override + String get video => 'Video'; + @override + String get audio => 'Audio'; + @override + String get file => 'Datei'; + @override + String get advanced => 'Erweitert'; + @override + String get codec => 'Codec'; + @override + String get resolution => 'Auflösung'; + @override + String get bitrate => 'Bitrate'; + @override + String get frameRate => 'Bildrate'; + @override + String get aspectRatio => 'Seitenverhältnis'; + @override + String get profile => 'Profil'; + @override + String get bitDepth => 'Farbtiefe'; + @override + String get colorSpace => 'Farbraum'; + @override + String get colorRange => 'Farbbereich'; + @override + String get colorPrimaries => 'Primärfarben'; + @override + String get chromaSubsampling => 'Chroma-Subsampling'; + @override + String get channels => 'Kanäle'; + @override + String get path => 'Pfad'; + @override + String get size => 'Größe'; + @override + String get container => 'Container'; + @override + String get duration => 'Dauer'; + @override + String get optimizedForStreaming => 'Für Streaming optimiert'; + @override + String get has64bitOffsets => '64-Bit-Offsets'; } // Path: mediaMenu class _StringsMediaMenuDe implements _StringsMediaMenuEn { - _StringsMediaMenuDe._(this._root); + _StringsMediaMenuDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get markAsWatched => 'Als gesehen markieren'; - @override String get markAsUnwatched => 'Als ungesehen markieren'; - @override String get removeFromContinueWatching => 'Aus ‚Weiterschauen‘ entfernen'; - @override String get goToSeries => 'Zur Serie'; - @override String get goToSeason => 'Zur Staffel'; - @override String get shufflePlay => 'Zufallswiedergabe'; - @override String get fileInfo => 'Dateiinfo'; + // Translations + @override + String get markAsWatched => 'Als gesehen markieren'; + @override + String get markAsUnwatched => 'Als ungesehen markieren'; + @override + String get removeFromContinueWatching => 'Aus ‚Weiterschauen‘ entfernen'; + @override + String get goToSeries => 'Zur Serie'; + @override + String get goToSeason => 'Zur Staffel'; + @override + String get shufflePlay => 'Zufallswiedergabe'; + @override + String get fileInfo => 'Dateiinfo'; } // Path: accessibility class _StringsAccessibilityDe implements _StringsAccessibilityEn { - _StringsAccessibilityDe._(this._root); + _StringsAccessibilityDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String mediaCardMovie({required Object title}) => '${title}, Film'; - @override String mediaCardShow({required Object title}) => '${title}, Serie'; - @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - @override String get mediaCardWatched => 'angesehen'; - @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} Prozent angesehen'; - @override String get mediaCardUnwatched => 'ungeschaut'; - @override String get tapToPlay => 'Zum Abspielen tippen'; + // Translations + @override + String mediaCardMovie({required Object title}) => '${title}, Film'; + @override + String mediaCardShow({required Object title}) => '${title}, Serie'; + @override + String mediaCardEpisode({ + required Object title, + required Object episodeInfo, + }) => '${title}, ${episodeInfo}'; + @override + String mediaCardSeason({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + @override + String get mediaCardWatched => 'angesehen'; + @override + String mediaCardPartiallyWatched({required Object percent}) => + '${percent} Prozent angesehen'; + @override + String get mediaCardUnwatched => 'ungeschaut'; + @override + String get tapToPlay => 'Zum Abspielen tippen'; } // Path: tooltips class _StringsTooltipsDe implements _StringsTooltipsEn { - _StringsTooltipsDe._(this._root); + _StringsTooltipsDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get shufflePlay => 'Zufallswiedergabe'; - @override String get markAsWatched => 'Als gesehen markieren'; - @override String get markAsUnwatched => 'Als ungesehen markieren'; + // Translations + @override + String get shufflePlay => 'Zufallswiedergabe'; + @override + String get markAsWatched => 'Als gesehen markieren'; + @override + String get markAsUnwatched => 'Als ungesehen markieren'; } // Path: videoControls class _StringsVideoControlsDe implements _StringsVideoControlsEn { - _StringsVideoControlsDe._(this._root); + _StringsVideoControlsDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get audioLabel => 'Audio'; - @override String get subtitlesLabel => 'Untertitel'; - @override String get resetToZero => 'Auf 0 ms zurücksetzen'; - @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - @override String playsLater({required Object label}) => '${label} spielt später'; - @override String playsEarlier({required Object label}) => '${label} spielt früher'; - @override String get noOffset => 'Kein Offset'; - @override String get letterbox => 'Letterbox'; - @override String get fillScreen => 'Bild füllen'; - @override String get stretch => 'Strecken'; - @override String get lockRotation => 'Rotation sperren'; - @override String get unlockRotation => 'Rotation entsperren'; - @override String get sleepTimer => 'Schlaftimer'; - @override String get timerActive => 'Schlaftimer aktiv'; - @override String playbackWillPauseIn({required Object duration}) => 'Wiedergabe wird in ${duration} pausiert'; - @override String get sleepTimerCompleted => 'Schlaftimer abgelaufen – Wiedergabe pausiert'; - @override String get playButton => 'Wiedergeben'; - @override String get pauseButton => 'Pause'; - @override String seekBackwardButton({required Object seconds}) => '${seconds} Sekunden zurück'; - @override String seekForwardButton({required Object seconds}) => '${seconds} Sekunden vor'; - @override String get previousButton => 'Vorherige Episode'; - @override String get nextButton => 'Nächste Episode'; - @override String get previousChapterButton => 'Vorheriges Kapitel'; - @override String get nextChapterButton => 'Nächstes Kapitel'; - @override String get volumeButton => 'Lautstärke'; - @override String get muteButton => 'Stumm schalten'; - @override String get unmuteButton => 'Stummschaltung aufheben'; - @override String get settingsButton => 'Videoeinstellungen'; - @override String get audioTrackButton => 'Tonspuren'; - @override String get subtitlesButton => 'Untertitel'; - @override String get chaptersButton => 'Kapitel'; - @override String get versionsButton => 'Videoversionen'; - @override String get aspectRatioButton => 'Seitenverhältnis'; - @override String get fullscreenButton => 'Vollbild aktivieren'; - @override String get exitFullscreenButton => 'Vollbild verlassen'; - @override String get rotationLockButton => 'Dreh­sperre'; - @override String get timelineSlider => 'Video-Zeitleiste'; - @override String get volumeSlider => 'Lautstärkepegel'; - @override String get backButton => 'Zurück'; + // Translations + @override + String get audioLabel => 'Audio'; + @override + String get subtitlesLabel => 'Untertitel'; + @override + String get resetToZero => 'Auf 0 ms zurücksetzen'; + @override + String addTime({required Object amount, required Object unit}) => + '+${amount}${unit}'; + @override + String minusTime({required Object amount, required Object unit}) => + '-${amount}${unit}'; + @override + String playsLater({required Object label}) => '${label} spielt später'; + @override + String playsEarlier({required Object label}) => '${label} spielt früher'; + @override + String get noOffset => 'Kein Offset'; + @override + String get letterbox => 'Letterbox'; + @override + String get fillScreen => 'Bild füllen'; + @override + String get stretch => 'Strecken'; + @override + String get lockRotation => 'Rotation sperren'; + @override + String get unlockRotation => 'Rotation entsperren'; + @override + String get sleepTimer => 'Schlaftimer'; + @override + String get timerActive => 'Schlaftimer aktiv'; + @override + String playbackWillPauseIn({required Object duration}) => + 'Wiedergabe wird in ${duration} pausiert'; + @override + String get sleepTimerCompleted => + 'Schlaftimer abgelaufen – Wiedergabe pausiert'; + @override + String get playButton => 'Wiedergeben'; + @override + String get pauseButton => 'Pause'; + @override + String seekBackwardButton({required Object seconds}) => + '${seconds} Sekunden zurück'; + @override + String seekForwardButton({required Object seconds}) => + '${seconds} Sekunden vor'; + @override + String get previousButton => 'Vorherige Episode'; + @override + String get nextButton => 'Nächste Episode'; + @override + String get previousChapterButton => 'Vorheriges Kapitel'; + @override + String get nextChapterButton => 'Nächstes Kapitel'; + @override + String get volumeButton => 'Lautstärke'; + @override + String get muteButton => 'Stumm schalten'; + @override + String get unmuteButton => 'Stummschaltung aufheben'; + @override + String get settingsButton => 'Videoeinstellungen'; + @override + String get audioTrackButton => 'Tonspuren'; + @override + String get subtitlesButton => 'Untertitel'; + @override + String get chaptersButton => 'Kapitel'; + @override + String get versionsButton => 'Videoversionen'; + @override + String get aspectRatioButton => 'Seitenverhältnis'; + @override + String get fullscreenButton => 'Vollbild aktivieren'; + @override + String get exitFullscreenButton => 'Vollbild verlassen'; + @override + String get rotationLockButton => 'Dreh­sperre'; + @override + String get timelineSlider => 'Video-Zeitleiste'; + @override + String get volumeSlider => 'Lautstärkepegel'; + @override + String get backButton => 'Zurück'; } // Path: userStatus class _StringsUserStatusDe implements _StringsUserStatusEn { - _StringsUserStatusDe._(this._root); + _StringsUserStatusDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get admin => 'Eigentümer'; - @override String get restricted => 'Eingeschränkt'; - @override String get protected => 'Geschützt'; - @override String get current => 'AKTUELL'; + // Translations + @override + String get admin => 'Eigentümer'; + @override + String get restricted => 'Eingeschränkt'; + @override + String get protected => 'Geschützt'; + @override + String get current => 'AKTUELL'; } // Path: messages class _StringsMessagesDe implements _StringsMessagesEn { - _StringsMessagesDe._(this._root); + _StringsMessagesDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get markedAsWatched => 'Als gesehen markiert'; - @override String get markedAsUnwatched => 'Als ungesehen markiert'; - @override String get removedFromContinueWatching => 'Aus ‚Weiterschauen‘ entfernt'; - @override String errorLoading({required Object error}) => 'Fehler: ${error}'; - @override String get fileInfoNotAvailable => 'Dateiinfo nicht verfügbar'; - @override String errorLoadingFileInfo({required Object error}) => 'Fehler beim Laden der Dateiinfo: ${error}'; - @override String get errorLoadingSeries => 'Fehler beim Laden der Serie'; - @override String get errorLoadingSeason => 'Fehler beim Laden der Staffel'; - @override String get musicNotSupported => 'Musikwiedergabe wird noch nicht unterstützt'; - @override String get logsCleared => 'Protokolle gelöscht'; - @override String get logsCopied => 'Protokolle in Zwischenablage kopiert'; - @override String get noLogsAvailable => 'Keine Protokolle verfügbar'; - @override String libraryScanning({required Object title}) => 'Scanne „${title}“...'; - @override String libraryScanStarted({required Object title}) => 'Mediathekscan gestartet für „${title}“'; - @override String libraryScanFailed({required Object error}) => 'Fehler beim Scannen der Mediathek: ${error}'; - @override String metadataRefreshing({required Object title}) => 'Metadaten werden aktualisiert für „${title}“...'; - @override String metadataRefreshStarted({required Object title}) => 'Metadaten-Aktualisierung gestartet für „${title}“'; - @override String metadataRefreshFailed({required Object error}) => 'Metadaten konnten nicht aktualisiert werden: ${error}'; - @override String get noPlexToken => 'Kein Plex-Token gefunden. Bitte erneut anmelden.'; - @override String get logoutConfirm => 'Abmeldung wirklich durchführen?'; - @override String get noSeasonsFound => 'Keine Staffeln gefunden'; - @override String get noEpisodesFound => 'Keine Episoden in der ersten Staffel gefunden'; - @override String get noEpisodesFoundGeneral => 'Keine Episoden gefunden'; - @override String get noResultsFound => 'Keine Ergebnisse gefunden'; - @override String sleepTimerSet({required Object label}) => 'Sleep-Timer gesetzt auf ${label}'; - @override String failedToSwitchProfile({required Object displayName}) => 'Profilwechsel zu ${displayName} fehlgeschlagen'; - @override String get noItemsAvailable => 'Keine Elemente verfügbar'; - @override String get failedToCreatePlayQueue => 'Wiedergabewarteschlange konnte nicht erstellt werden'; - @override String get failedToCreatePlayQueueNoItems => 'Wiedergabewarteschlange konnte nicht erstellt werden – keine Elemente'; - @override String failedPlayback({required Object action, required Object error}) => 'Wiedergabe für ${action} fehlgeschlagen: ${error}'; + // Translations + @override + String get markedAsWatched => 'Als gesehen markiert'; + @override + String get markedAsUnwatched => 'Als ungesehen markiert'; + @override + String get removedFromContinueWatching => 'Aus ‚Weiterschauen‘ entfernt'; + @override + String errorLoading({required Object error}) => 'Fehler: ${error}'; + @override + String get fileInfoNotAvailable => 'Dateiinfo nicht verfügbar'; + @override + String errorLoadingFileInfo({required Object error}) => + 'Fehler beim Laden der Dateiinfo: ${error}'; + @override + String get errorLoadingSeries => 'Fehler beim Laden der Serie'; + @override + String get errorLoadingSeason => 'Fehler beim Laden der Staffel'; + @override + String get musicNotSupported => 'Musikwiedergabe wird noch nicht unterstützt'; + @override + String get logsCleared => 'Protokolle gelöscht'; + @override + String get logsCopied => 'Protokolle in Zwischenablage kopiert'; + @override + String get noLogsAvailable => 'Keine Protokolle verfügbar'; + @override + String libraryScanning({required Object title}) => 'Scanne „${title}“...'; + @override + String libraryScanStarted({required Object title}) => + 'Mediathekscan gestartet für „${title}“'; + @override + String libraryScanFailed({required Object error}) => + 'Fehler beim Scannen der Mediathek: ${error}'; + @override + String metadataRefreshing({required Object title}) => + 'Metadaten werden aktualisiert für „${title}“...'; + @override + String metadataRefreshStarted({required Object title}) => + 'Metadaten-Aktualisierung gestartet für „${title}“'; + @override + String metadataRefreshFailed({required Object error}) => + 'Metadaten konnten nicht aktualisiert werden: ${error}'; + @override + String get noPlexToken => 'Kein Plex-Token gefunden. Bitte erneut anmelden.'; + @override + String get logoutConfirm => 'Abmeldung wirklich durchführen?'; + @override + String get noSeasonsFound => 'Keine Staffeln gefunden'; + @override + String get noEpisodesFound => 'Keine Episoden in der ersten Staffel gefunden'; + @override + String get noEpisodesFoundGeneral => 'Keine Episoden gefunden'; + @override + String get noResultsFound => 'Keine Ergebnisse gefunden'; + @override + String sleepTimerSet({required Object label}) => + 'Sleep-Timer gesetzt auf ${label}'; + @override + String failedToSwitchProfile({required Object displayName}) => + 'Profilwechsel zu ${displayName} fehlgeschlagen'; + @override + String get noItemsAvailable => 'Keine Elemente verfügbar'; + @override + String get failedToCreatePlayQueue => + 'Wiedergabewarteschlange konnte nicht erstellt werden'; + @override + String get failedToCreatePlayQueueNoItems => + 'Wiedergabewarteschlange konnte nicht erstellt werden – keine Elemente'; + @override + String failedPlayback({required Object action, required Object error}) => + 'Wiedergabe für ${action} fehlgeschlagen: ${error}'; } // Path: profile class _StringsProfileDe implements _StringsProfileEn { - _StringsProfileDe._(this._root); + _StringsProfileDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get noUsersAvailable => 'Keine Benutzer verfügbar'; + // Translations + @override + String get noUsersAvailable => 'Keine Benutzer verfügbar'; } // Path: subtitlingStyling class _StringsSubtitlingStylingDe implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingDe._(this._root); + _StringsSubtitlingStylingDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get stylingOptions => 'Stiloptionen'; - @override String get fontSize => 'Schriftgröße'; - @override String get textColor => 'Textfarbe'; - @override String get borderSize => 'Rahmengröße'; - @override String get borderColor => 'Rahmenfarbe'; - @override String get backgroundOpacity => 'Hintergrunddeckkraft'; - @override String get backgroundColor => 'Hintergrundfarbe'; + // Translations + @override + String get stylingOptions => 'Stiloptionen'; + @override + String get fontSize => 'Schriftgröße'; + @override + String get textColor => 'Textfarbe'; + @override + String get borderSize => 'Rahmengröße'; + @override + String get borderColor => 'Rahmenfarbe'; + @override + String get backgroundOpacity => 'Hintergrunddeckkraft'; + @override + String get backgroundColor => 'Hintergrundfarbe'; } // Path: dialog class _StringsDialogDe implements _StringsDialogEn { - _StringsDialogDe._(this._root); + _StringsDialogDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get confirmAction => 'Aktion bestätigen'; - @override String get areYouSure => 'Aktion wirklich ausführen?'; - @override String get cancel => 'Abbrechen'; - @override String get playNow => 'Jetzt abspielen'; + // Translations + @override + String get confirmAction => 'Aktion bestätigen'; + @override + String get areYouSure => 'Aktion wirklich ausführen?'; + @override + String get cancel => 'Abbrechen'; + @override + String get playNow => 'Jetzt abspielen'; } // Path: discover class _StringsDiscoverDe implements _StringsDiscoverEn { - _StringsDiscoverDe._(this._root); + _StringsDiscoverDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get title => 'Entdecken'; - @override String get switchProfile => 'Profil wechseln'; - @override String get switchServer => 'Server wechseln'; - @override String get logout => 'Abmelden'; - @override String get noContentAvailable => 'Kein Inhalt verfügbar'; - @override String get addMediaToLibraries => 'Medien zur Mediathek hinzufügen'; - @override String get continueWatching => 'Weiterschauen'; - @override String get recentlyAdded => 'Kürzlich hinzugefügt'; - @override String get play => 'Abspielen'; - @override String get resume => 'Fortsetzen'; - @override String playEpisode({required Object season, required Object episode}) => 'S${season}, E${episode} - Abspielen'; - @override String resumeEpisode({required Object season, required Object episode}) => 'S${season}, E${episode} - Fortsetzen'; - @override String get pause => 'Pause'; - @override String get overview => 'Übersicht'; - @override String get cast => 'Besetzung'; - @override String get seasons => 'Staffeln'; - @override String get studio => 'Studio'; - @override String get rating => 'Altersfreigabe'; - @override String get watched => 'Gesehen'; - @override String episodeCount({required Object count}) => '${count} Episoden'; - @override String watchedProgress({required Object watched, required Object total}) => '${watched} von ${total} gesehen'; - @override String get movie => 'Film'; - @override String get tvShow => 'Serie'; - @override String minutesLeft({required Object minutes}) => '${minutes} Min übrig'; + // Translations + @override + String get title => 'Entdecken'; + @override + String get switchProfile => 'Profil wechseln'; + @override + String get switchServer => 'Server wechseln'; + @override + String get logout => 'Abmelden'; + @override + String get noContentAvailable => 'Kein Inhalt verfügbar'; + @override + String get addMediaToLibraries => 'Medien zur Mediathek hinzufügen'; + @override + String get continueWatching => 'Weiterschauen'; + @override + String get recentlyAdded => 'Kürzlich hinzugefügt'; + @override + String get play => 'Abspielen'; + @override + String get resume => 'Fortsetzen'; + @override + String playEpisode({required Object season, required Object episode}) => + 'S${season}, E${episode} - Abspielen'; + @override + String resumeEpisode({required Object season, required Object episode}) => + 'S${season}, E${episode} - Fortsetzen'; + @override + String get pause => 'Pause'; + @override + String get overview => 'Übersicht'; + @override + String get cast => 'Besetzung'; + @override + String get seasons => 'Staffeln'; + @override + String get studio => 'Studio'; + @override + String get rating => 'Altersfreigabe'; + @override + String get watched => 'Gesehen'; + @override + String episodeCount({required Object count}) => '${count} Episoden'; + @override + String watchedProgress({required Object watched, required Object total}) => + '${watched} von ${total} gesehen'; + @override + String get movie => 'Film'; + @override + String get tvShow => 'Serie'; + @override + String minutesLeft({required Object minutes}) => '${minutes} Min übrig'; } // Path: errors class _StringsErrorsDe implements _StringsErrorsEn { - _StringsErrorsDe._(this._root); + _StringsErrorsDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String searchFailed({required Object error}) => 'Suche fehlgeschlagen: ${error}'; - @override String connectionTimeout({required Object context}) => 'Zeitüberschreitung beim Laden von ${context}'; - @override String get connectionFailed => 'Verbindung zum Plex-Server fehlgeschlagen'; - @override String failedToLoad({required Object context, required Object error}) => 'Fehler beim Laden von ${context}: ${error}'; - @override String get noClientAvailable => 'Kein Client verfügbar'; - @override String authenticationFailed({required Object error}) => 'Authentifizierung fehlgeschlagen: ${error}'; - @override String get couldNotLaunchUrl => 'Auth-URL konnte nicht geöffnet werden'; - @override String get pleaseEnterToken => 'Bitte Token eingeben'; - @override String get invalidToken => 'Ungültiges Token'; - @override String failedToVerifyToken({required Object error}) => 'Token-Verifizierung fehlgeschlagen: ${error}'; - @override String failedToSwitchProfile({required Object displayName}) => 'Profilwechsel zu ${displayName} fehlgeschlagen'; - @override String get connectionFailedGeneric => 'Verbindung fehlgeschlagen'; + // Translations + @override + String searchFailed({required Object error}) => + 'Suche fehlgeschlagen: ${error}'; + @override + String connectionTimeout({required Object context}) => + 'Zeitüberschreitung beim Laden von ${context}'; + @override + String get connectionFailed => 'Verbindung zum Plex-Server fehlgeschlagen'; + @override + String failedToLoad({required Object context, required Object error}) => + 'Fehler beim Laden von ${context}: ${error}'; + @override + String get noClientAvailable => 'Kein Client verfügbar'; + @override + String authenticationFailed({required Object error}) => + 'Authentifizierung fehlgeschlagen: ${error}'; + @override + String get couldNotLaunchUrl => 'Auth-URL konnte nicht geöffnet werden'; + @override + String get pleaseEnterToken => 'Bitte Token eingeben'; + @override + String get invalidToken => 'Ungültiges Token'; + @override + String failedToVerifyToken({required Object error}) => + 'Token-Verifizierung fehlgeschlagen: ${error}'; + @override + String failedToSwitchProfile({required Object displayName}) => + 'Profilwechsel zu ${displayName} fehlgeschlagen'; + @override + String get connectionFailedGeneric => 'Verbindung fehlgeschlagen'; } // Path: libraries class _StringsLibrariesDe implements _StringsLibrariesEn { - _StringsLibrariesDe._(this._root); + _StringsLibrariesDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get title => 'Mediatheken'; - @override String get scanLibraryFiles => 'Mediatheksdateien scannen'; - @override String get scanLibrary => 'Mediathek scannen'; - @override String get analyze => 'Analysieren'; - @override String get analyzeLibrary => 'Mediathek analysieren'; - @override String get refreshMetadata => 'Metadaten aktualisieren'; - @override String get emptyTrash => 'Papierkorb leeren'; - @override String emptyingTrash({required Object title}) => 'Papierkorb für „${title}“ wird geleert...'; - @override String trashEmptied({required Object title}) => 'Papierkorb für „${title}“ geleert'; - @override String failedToEmptyTrash({required Object error}) => 'Papierkorb konnte nicht geleert werden: ${error}'; - @override String analyzing({required Object title}) => 'Analysiere „${title}“...'; - @override String analysisStarted({required Object title}) => 'Analyse gestartet für „${title}“'; - @override String failedToAnalyze({required Object error}) => 'Analyse der Mediathek fehlgeschlagen: ${error}'; - @override String get noLibrariesFound => 'Keine Mediatheken gefunden'; - @override String get thisLibraryIsEmpty => 'Diese Mediathek ist leer'; - @override String get all => 'Alle'; - @override String get clearAll => 'Alle löschen'; - @override String scanLibraryConfirm({required Object title}) => '„${title}“ wirklich scannen?'; - @override String analyzeLibraryConfirm({required Object title}) => '„${title}“ wirklich analysieren?'; - @override String refreshMetadataConfirm({required Object title}) => 'Metadaten für „${title}“ wirklich aktualisieren?'; - @override String emptyTrashConfirm({required Object title}) => 'Papierkorb für „${title}“ wirklich leeren?'; - @override String get manageLibraries => 'Mediatheken verwalten'; - @override String get sort => 'Sortieren'; - @override String get sortBy => 'Sortieren nach'; - @override String get filters => 'Filter'; - @override String loadingLibraryWithCount({required Object count}) => 'Lade Mediathek... (${count} Elemente geladen)'; - @override String get confirmActionMessage => 'Aktion wirklich durchführen?'; - @override String get showLibrary => 'Mediathek anzeigen'; - @override String get hideLibrary => 'Mediathek ausblenden'; - @override String get libraryOptions => 'Mediatheksoptionen'; - @override String get content => 'Bibliotheksinhalt'; - @override String get selectLibrary => 'Bibliothek auswählen'; - @override String filtersWithCount({required Object count}) => 'Filter (${count})'; - @override String get noRecommendations => 'Keine Empfehlungen verfügbar'; - @override String get noCollections => 'Keine Sammlungen in dieser Mediathek'; - @override String get noFoldersFound => 'Keine Ordner gefunden'; - @override String get folders => 'Ordner'; - @override late final _StringsLibrariesTabsDe tabs = _StringsLibrariesTabsDe._(_root); - @override late final _StringsLibrariesGroupingsDe groupings = _StringsLibrariesGroupingsDe._(_root); + // Translations + @override + String get title => 'Mediatheken'; + @override + String get scanLibraryFiles => 'Mediatheksdateien scannen'; + @override + String get scanLibrary => 'Mediathek scannen'; + @override + String get analyze => 'Analysieren'; + @override + String get analyzeLibrary => 'Mediathek analysieren'; + @override + String get refreshMetadata => 'Metadaten aktualisieren'; + @override + String get emptyTrash => 'Papierkorb leeren'; + @override + String emptyingTrash({required Object title}) => + 'Papierkorb für „${title}“ wird geleert...'; + @override + String trashEmptied({required Object title}) => + 'Papierkorb für „${title}“ geleert'; + @override + String failedToEmptyTrash({required Object error}) => + 'Papierkorb konnte nicht geleert werden: ${error}'; + @override + String analyzing({required Object title}) => 'Analysiere „${title}“...'; + @override + String analysisStarted({required Object title}) => + 'Analyse gestartet für „${title}“'; + @override + String failedToAnalyze({required Object error}) => + 'Analyse der Mediathek fehlgeschlagen: ${error}'; + @override + String get noLibrariesFound => 'Keine Mediatheken gefunden'; + @override + String get thisLibraryIsEmpty => 'Diese Mediathek ist leer'; + @override + String get all => 'Alle'; + @override + String get clearAll => 'Alle löschen'; + @override + String scanLibraryConfirm({required Object title}) => + '„${title}“ wirklich scannen?'; + @override + String analyzeLibraryConfirm({required Object title}) => + '„${title}“ wirklich analysieren?'; + @override + String refreshMetadataConfirm({required Object title}) => + 'Metadaten für „${title}“ wirklich aktualisieren?'; + @override + String emptyTrashConfirm({required Object title}) => + 'Papierkorb für „${title}“ wirklich leeren?'; + @override + String get manageLibraries => 'Mediatheken verwalten'; + @override + String get sort => 'Sortieren'; + @override + String get sortBy => 'Sortieren nach'; + @override + String get filters => 'Filter'; + @override + String loadingLibraryWithCount({required Object count}) => + 'Lade Mediathek... (${count} Elemente geladen)'; + @override + String get confirmActionMessage => 'Aktion wirklich durchführen?'; + @override + String get showLibrary => 'Mediathek anzeigen'; + @override + String get hideLibrary => 'Mediathek ausblenden'; + @override + String get libraryOptions => 'Mediatheksoptionen'; + @override + String get content => 'Bibliotheksinhalt'; + @override + String get selectLibrary => 'Bibliothek auswählen'; + @override + String filtersWithCount({required Object count}) => 'Filter (${count})'; + @override + String get noRecommendations => 'Keine Empfehlungen verfügbar'; + @override + String get noCollections => 'Keine Sammlungen in dieser Mediathek'; + @override + String get noFoldersFound => 'Keine Ordner gefunden'; + @override + String get folders => 'Ordner'; + @override + late final _StringsLibrariesTabsDe tabs = _StringsLibrariesTabsDe._(_root); + @override + late final _StringsLibrariesGroupingsDe groupings = + _StringsLibrariesGroupingsDe._(_root); } // Path: about class _StringsAboutDe implements _StringsAboutEn { - _StringsAboutDe._(this._root); + _StringsAboutDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get title => 'Über'; - @override String get openSourceLicenses => 'Open-Source-Lizenzen'; - @override String versionLabel({required Object version}) => 'Version ${version}'; - @override String get appDescription => 'Ein schöner Plex-Client für Flutter'; - @override String get viewLicensesDescription => 'Lizenzen von Drittanbieter-Bibliotheken anzeigen'; + // Translations + @override + String get title => 'Über'; + @override + String get openSourceLicenses => 'Open-Source-Lizenzen'; + @override + String versionLabel({required Object version}) => 'Version ${version}'; + @override + String get appDescription => 'Ein schöner Plex-Client für Flutter'; + @override + String get viewLicensesDescription => + 'Lizenzen von Drittanbieter-Bibliotheken anzeigen'; } // Path: serverSelection class _StringsServerSelectionDe implements _StringsServerSelectionEn { - _StringsServerSelectionDe._(this._root); + _StringsServerSelectionDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get connectingToServer => 'Verbinde mit Server...'; - @override String get connectingToAllServers => 'Verbinde mit allen Servern...'; - @override String get connectToAllServers => 'Mit allen Servern verbinden'; - @override String get allServerConnectionsFailed => 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.'; - @override String foundServers({required Object count}) => '${count} Server gefunden'; - @override String get orSelectIndividually => 'Oder einzelnen Server auswählen:'; - @override String get serverDebugCopied => 'Server-Debugdaten kopiert'; - @override String get copyDebugData => 'Debugdaten kopieren'; - @override String get noServersFound => 'Keine Server gefunden'; - @override String malformedServerData({required Object count}) => '${count} Server mit fehlerhaften Daten gefunden. Keine gültigen Server verfügbar.'; - @override String get incompleteServerInfo => 'Einige Serverinformationen sind unvollständig und wurden übersprungen. Plex.tv-Konto prüfen.'; - @override String get incompleteConnectionInfo => 'Serververbindungsinformationen unvollständig. Bitte erneut versuchen.'; - @override String malformedServerInfo({required Object message}) => 'Serverinformationen fehlerhaft: ${message}'; - @override String get networkConnectionFailed => 'Netzwerkverbindung fehlgeschlagen. Internetverbindung prüfen und erneut versuchen.'; - @override String get authenticationFailed => 'Authentifizierung fehlgeschlagen. Bitte erneut anmelden.'; - @override String get plexServiceUnavailable => 'Plex-Dienst nicht verfügbar. Bitte später erneut versuchen.'; - @override String failedToLoadServers({required Object error}) => 'Server konnten nicht geladen werden: ${error}'; + // Translations + @override + String get connectingToServer => 'Verbinde mit Server...'; + @override + String get connectingToAllServers => 'Verbinde mit allen Servern...'; + @override + String get connectToAllServers => 'Mit allen Servern verbinden'; + @override + String get allServerConnectionsFailed => + 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.'; + @override + String foundServers({required Object count}) => '${count} Server gefunden'; + @override + String get orSelectIndividually => 'Oder einzelnen Server auswählen:'; + @override + String get serverDebugCopied => 'Server-Debugdaten kopiert'; + @override + String get copyDebugData => 'Debugdaten kopieren'; + @override + String get noServersFound => 'Keine Server gefunden'; + @override + String malformedServerData({required Object count}) => + '${count} Server mit fehlerhaften Daten gefunden. Keine gültigen Server verfügbar.'; + @override + String get incompleteServerInfo => + 'Einige Serverinformationen sind unvollständig und wurden übersprungen. Plex.tv-Konto prüfen.'; + @override + String get incompleteConnectionInfo => + 'Serververbindungsinformationen unvollständig. Bitte erneut versuchen.'; + @override + String malformedServerInfo({required Object message}) => + 'Serverinformationen fehlerhaft: ${message}'; + @override + String get networkConnectionFailed => + 'Netzwerkverbindung fehlgeschlagen. Internetverbindung prüfen und erneut versuchen.'; + @override + String get authenticationFailed => + 'Authentifizierung fehlgeschlagen. Bitte erneut anmelden.'; + @override + String get plexServiceUnavailable => + 'Plex-Dienst nicht verfügbar. Bitte später erneut versuchen.'; + @override + String failedToLoadServers({required Object error}) => + 'Server konnten nicht geladen werden: ${error}'; } // Path: hubDetail class _StringsHubDetailDe implements _StringsHubDetailEn { - _StringsHubDetailDe._(this._root); + _StringsHubDetailDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get title => 'Titel'; - @override String get releaseYear => 'Erscheinungsjahr'; - @override String get dateAdded => 'Hinzugefügt am'; - @override String get rating => 'Bewertung'; - @override String get noItemsFound => 'Keine Elemente gefunden'; + // Translations + @override + String get title => 'Titel'; + @override + String get releaseYear => 'Erscheinungsjahr'; + @override + String get dateAdded => 'Hinzugefügt am'; + @override + String get rating => 'Bewertung'; + @override + String get noItemsFound => 'Keine Elemente gefunden'; } // Path: logs class _StringsLogsDe implements _StringsLogsEn { - _StringsLogsDe._(this._root); + _StringsLogsDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get title => 'Protokolle'; - @override String get clearLogs => 'Protokolle löschen'; - @override String get copyLogs => 'Protokolle kopieren'; - @override String get exportLogs => 'Protokolle exportieren'; - @override String get noLogsToShow => 'Keine Protokolle zum Anzeigen'; - @override String get error => 'Fehler:'; - @override String get stackTrace => 'Stacktrace:'; + // Translations + @override + String get title => 'Protokolle'; + @override + String get clearLogs => 'Protokolle löschen'; + @override + String get copyLogs => 'Protokolle kopieren'; + @override + String get exportLogs => 'Protokolle exportieren'; + @override + String get noLogsToShow => 'Keine Protokolle zum Anzeigen'; + @override + String get error => 'Fehler:'; + @override + String get stackTrace => 'Stacktrace:'; } // Path: licenses class _StringsLicensesDe implements _StringsLicensesEn { - _StringsLicensesDe._(this._root); + _StringsLicensesDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get relatedPackages => 'Verwandte Pakete'; - @override String get license => 'Lizenz'; - @override String licenseNumber({required Object number}) => 'Lizenz ${number}'; - @override String licensesCount({required Object count}) => '${count} Lizenzen'; + // Translations + @override + String get relatedPackages => 'Verwandte Pakete'; + @override + String get license => 'Lizenz'; + @override + String licenseNumber({required Object number}) => 'Lizenz ${number}'; + @override + String licensesCount({required Object count}) => '${count} Lizenzen'; } // Path: navigation class _StringsNavigationDe implements _StringsNavigationEn { - _StringsNavigationDe._(this._root); + _StringsNavigationDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get home => 'Start'; - @override String get search => 'Suche'; - @override String get libraries => 'Mediatheken'; - @override String get settings => 'Einstellungen'; + // Translations + @override + String get home => 'Start'; + @override + String get search => 'Suche'; + @override + String get libraries => 'Mediatheken'; + @override + String get settings => 'Einstellungen'; } // Path: playlists class _StringsPlaylistsDe implements _StringsPlaylistsEn { - _StringsPlaylistsDe._(this._root); + _StringsPlaylistsDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get title => 'Wiedergabelisten'; - @override String get noPlaylists => 'Keine Wiedergabelisten gefunden'; - @override String get create => 'Wiedergabeliste erstellen'; - @override String get newPlaylist => 'Neue Wiedergabeliste'; - @override String get playlistName => 'Name der Wiedergabeliste'; - @override String get enterPlaylistName => 'Name der Wiedergabeliste eingeben'; - @override String get edit => 'Wiedergabeliste bearbeiten'; - @override String get delete => 'Wiedergabeliste löschen'; - @override String get addTo => 'Zur Wiedergabeliste hinzufügen'; - @override String get addItems => 'Elemente hinzufügen'; - @override String get removeItem => 'Aus Wiedergabeliste entfernen'; - @override String get clearPlaylist => 'Wiedergabeliste leeren'; - @override String get playAll => 'Alle abspielen'; - @override String get shuffle => 'Zufällig'; - @override String get smartPlaylist => 'Intelligente Wiedergabeliste'; - @override String get regularPlaylist => 'Normale Wiedergabeliste'; - @override String itemCount({required Object count}) => '${count} Elemente'; - @override String get oneItem => '1 Element'; - @override String get emptyPlaylist => 'Diese Wiedergabeliste ist leer'; - @override String get deleteConfirm => 'Wiedergabeliste löschen?'; - @override String deleteMessage({required Object name}) => 'Soll "${name}" wirklich gelöscht werden?'; - @override String get created => 'Wiedergabeliste erstellt'; - @override String get updated => 'Wiedergabeliste aktualisiert'; - @override String get deleted => 'Wiedergabeliste gelöscht'; - @override String get itemAdded => 'Zur Wiedergabeliste hinzugefügt'; - @override String get itemRemoved => 'Aus Wiedergabeliste entfernt'; - @override String get selectPlaylist => 'Wiedergabeliste auswählen'; - @override String get createNewPlaylist => 'Neue Wiedergabeliste erstellen'; - @override String get errorCreating => 'Wiedergabeliste konnte nicht erstellt werden'; - @override String get errorDeleting => 'Wiedergabeliste konnte nicht gelöscht werden'; - @override String get errorLoading => 'Wiedergabelisten konnten nicht geladen werden'; - @override String get errorAdding => 'Konnte nicht zur Wiedergabeliste hinzugefügt werden'; - @override String get errorReordering => 'Element der Wiedergabeliste konnte nicht neu geordnet werden'; - @override String get errorRemoving => 'Konnte nicht aus der Wiedergabeliste entfernt werden'; - @override String get playlist => 'Wiedergabeliste'; + // Translations + @override + String get title => 'Wiedergabelisten'; + @override + String get noPlaylists => 'Keine Wiedergabelisten gefunden'; + @override + String get create => 'Wiedergabeliste erstellen'; + @override + String get newPlaylist => 'Neue Wiedergabeliste'; + @override + String get playlistName => 'Name der Wiedergabeliste'; + @override + String get enterPlaylistName => 'Name der Wiedergabeliste eingeben'; + @override + String get edit => 'Wiedergabeliste bearbeiten'; + @override + String get delete => 'Wiedergabeliste löschen'; + @override + String get addTo => 'Zur Wiedergabeliste hinzufügen'; + @override + String get addItems => 'Elemente hinzufügen'; + @override + String get removeItem => 'Aus Wiedergabeliste entfernen'; + @override + String get clearPlaylist => 'Wiedergabeliste leeren'; + @override + String get playAll => 'Alle abspielen'; + @override + String get shuffle => 'Zufällig'; + @override + String get smartPlaylist => 'Intelligente Wiedergabeliste'; + @override + String get regularPlaylist => 'Normale Wiedergabeliste'; + @override + String itemCount({required Object count}) => '${count} Elemente'; + @override + String get oneItem => '1 Element'; + @override + String get emptyPlaylist => 'Diese Wiedergabeliste ist leer'; + @override + String get deleteConfirm => 'Wiedergabeliste löschen?'; + @override + String deleteMessage({required Object name}) => + 'Soll "${name}" wirklich gelöscht werden?'; + @override + String get created => 'Wiedergabeliste erstellt'; + @override + String get updated => 'Wiedergabeliste aktualisiert'; + @override + String get deleted => 'Wiedergabeliste gelöscht'; + @override + String get itemAdded => 'Zur Wiedergabeliste hinzugefügt'; + @override + String get itemRemoved => 'Aus Wiedergabeliste entfernt'; + @override + String get selectPlaylist => 'Wiedergabeliste auswählen'; + @override + String get createNewPlaylist => 'Neue Wiedergabeliste erstellen'; + @override + String get errorCreating => 'Wiedergabeliste konnte nicht erstellt werden'; + @override + String get errorDeleting => 'Wiedergabeliste konnte nicht gelöscht werden'; + @override + String get errorLoading => 'Wiedergabelisten konnten nicht geladen werden'; + @override + String get errorAdding => + 'Konnte nicht zur Wiedergabeliste hinzugefügt werden'; + @override + String get errorReordering => + 'Element der Wiedergabeliste konnte nicht neu geordnet werden'; + @override + String get errorRemoving => + 'Konnte nicht aus der Wiedergabeliste entfernt werden'; + @override + String get playlist => 'Wiedergabeliste'; } // Path: collections class _StringsCollectionsDe implements _StringsCollectionsEn { - _StringsCollectionsDe._(this._root); + _StringsCollectionsDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get title => 'Sammlungen'; - @override String get collection => 'Sammlung'; - @override String get empty => 'Sammlung ist leer'; - @override String get noItems => 'Keine Elemente in dieser Sammlung'; - @override String get unknownLibrarySection => 'Löschen nicht möglich: Unbekannte Bibliothekssektion'; - @override String get deleteCollection => 'Sammlung löschen'; - @override String deleteConfirm({required Object title}) => 'Sind Sie sicher, dass Sie "${title}" löschen möchten? Dies kann nicht rückgängig gemacht werden.'; - @override String get deleted => 'Sammlung gelöscht'; - @override String get deleteFailed => 'Sammlung konnte nicht gelöscht werden'; - @override String deleteFailedWithError({required Object error}) => 'Sammlung konnte nicht gelöscht werden: ${error}'; - @override String failedToLoadItems({required Object error}) => 'Sammlungselemente konnten nicht geladen werden: ${error}'; - @override String get addTo => 'Zur Sammlung hinzufügen'; - @override String get selectCollection => 'Sammlung auswählen'; - @override String get createNewCollection => 'Neue Sammlung erstellen'; - @override String get collectionName => 'Sammlungsname'; - @override String get enterCollectionName => 'Sammlungsnamen eingeben'; - @override String get addedToCollection => 'Zur Sammlung hinzugefügt'; - @override String get errorAddingToCollection => 'Fehler beim Hinzufügen zur Sammlung'; - @override String get created => 'Sammlung erstellt'; - @override String get removeFromCollection => 'Aus Sammlung entfernen'; - @override String removeFromCollectionConfirm({required Object title}) => '"${title}" aus dieser Sammlung entfernen?'; - @override String get removedFromCollection => 'Aus Sammlung entfernt'; - @override String get removeFromCollectionFailed => 'Entfernen aus Sammlung fehlgeschlagen'; - @override String removeFromCollectionError({required Object error}) => 'Fehler beim Entfernen aus der Sammlung: ${error}'; + // Translations + @override + String get title => 'Sammlungen'; + @override + String get collection => 'Sammlung'; + @override + String get empty => 'Sammlung ist leer'; + @override + String get noItems => 'Keine Elemente in dieser Sammlung'; + @override + String get unknownLibrarySection => + 'Löschen nicht möglich: Unbekannte Bibliothekssektion'; + @override + String get deleteCollection => 'Sammlung löschen'; + @override + String deleteConfirm({required Object title}) => + 'Sind Sie sicher, dass Sie "${title}" löschen möchten? Dies kann nicht rückgängig gemacht werden.'; + @override + String get deleted => 'Sammlung gelöscht'; + @override + String get deleteFailed => 'Sammlung konnte nicht gelöscht werden'; + @override + String deleteFailedWithError({required Object error}) => + 'Sammlung konnte nicht gelöscht werden: ${error}'; + @override + String failedToLoadItems({required Object error}) => + 'Sammlungselemente konnten nicht geladen werden: ${error}'; + @override + String get addTo => 'Zur Sammlung hinzufügen'; + @override + String get selectCollection => 'Sammlung auswählen'; + @override + String get createNewCollection => 'Neue Sammlung erstellen'; + @override + String get collectionName => 'Sammlungsname'; + @override + String get enterCollectionName => 'Sammlungsnamen eingeben'; + @override + String get addedToCollection => 'Zur Sammlung hinzugefügt'; + @override + String get errorAddingToCollection => 'Fehler beim Hinzufügen zur Sammlung'; + @override + String get created => 'Sammlung erstellt'; + @override + String get removeFromCollection => 'Aus Sammlung entfernen'; + @override + String removeFromCollectionConfirm({required Object title}) => + '"${title}" aus dieser Sammlung entfernen?'; + @override + String get removedFromCollection => 'Aus Sammlung entfernt'; + @override + String get removeFromCollectionFailed => + 'Entfernen aus Sammlung fehlgeschlagen'; + @override + String removeFromCollectionError({required Object error}) => + 'Fehler beim Entfernen aus der Sammlung: ${error}'; } // Path: libraries.tabs class _StringsLibrariesTabsDe implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsDe._(this._root); + _StringsLibrariesTabsDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get recommended => 'Empfohlen'; - @override String get browse => 'Durchsuchen'; - @override String get collections => 'Sammlungen'; - @override String get playlists => 'Wiedergabelisten'; + // Translations + @override + String get recommended => 'Empfohlen'; + @override + String get browse => 'Durchsuchen'; + @override + String get collections => 'Sammlungen'; + @override + String get playlists => 'Wiedergabelisten'; } // Path: libraries.groupings class _StringsLibrariesGroupingsDe implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsDe._(this._root); + _StringsLibrariesGroupingsDe._(this._root); - @override final _StringsDe _root; // ignore: unused_field + @override + final _StringsDe _root; // ignore: unused_field - // Translations - @override String get all => 'Alle'; - @override String get movies => 'Filme'; - @override String get shows => 'Serien'; - @override String get seasons => 'Staffeln'; - @override String get episodes => 'Episoden'; - @override String get folders => 'Ordner'; + // Translations + @override + String get all => 'Alle'; + @override + String get movies => 'Filme'; + @override + String get shows => 'Serien'; + @override + String get seasons => 'Staffeln'; + @override + String get episodes => 'Episoden'; + @override + String get folders => 'Ordner'; } // Path: class _StringsIt implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsIt.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.it, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsIt.build({ + Map? overrides, + PluralResolver? cardinalResolver, + PluralResolver? ordinalResolver, + }) : assert( + overrides == null, + 'Set "translation_overrides: true" in order to enable this feature.', + ), + $meta = TranslationMetadata( + locale: AppLocale.it, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override final TranslationMetadata $meta; + /// Metadata for the translations of . + @override + final TranslationMetadata $meta; - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); + /// Access flat map + @override + dynamic operator [](String key) => $meta.getTranslation(key); - @override late final _StringsIt _root = this; // ignore: unused_field + @override + late final _StringsIt _root = this; // ignore: unused_field - // Translations - @override late final _StringsAppIt app = _StringsAppIt._(_root); - @override late final _StringsAuthIt auth = _StringsAuthIt._(_root); - @override late final _StringsCommonIt common = _StringsCommonIt._(_root); - @override late final _StringsScreensIt screens = _StringsScreensIt._(_root); - @override late final _StringsUpdateIt update = _StringsUpdateIt._(_root); - @override late final _StringsSettingsIt settings = _StringsSettingsIt._(_root); - @override late final _StringsSearchIt search = _StringsSearchIt._(_root); - @override late final _StringsHotkeysIt hotkeys = _StringsHotkeysIt._(_root); - @override late final _StringsPinEntryIt pinEntry = _StringsPinEntryIt._(_root); - @override late final _StringsFileInfoIt fileInfo = _StringsFileInfoIt._(_root); - @override late final _StringsMediaMenuIt mediaMenu = _StringsMediaMenuIt._(_root); - @override late final _StringsAccessibilityIt accessibility = _StringsAccessibilityIt._(_root); - @override late final _StringsTooltipsIt tooltips = _StringsTooltipsIt._(_root); - @override late final _StringsVideoControlsIt videoControls = _StringsVideoControlsIt._(_root); - @override late final _StringsUserStatusIt userStatus = _StringsUserStatusIt._(_root); - @override late final _StringsMessagesIt messages = _StringsMessagesIt._(_root); - @override late final _StringsProfileIt profile = _StringsProfileIt._(_root); - @override late final _StringsSubtitlingStylingIt subtitlingStyling = _StringsSubtitlingStylingIt._(_root); - @override late final _StringsDialogIt dialog = _StringsDialogIt._(_root); - @override late final _StringsDiscoverIt discover = _StringsDiscoverIt._(_root); - @override late final _StringsErrorsIt errors = _StringsErrorsIt._(_root); - @override late final _StringsLibrariesIt libraries = _StringsLibrariesIt._(_root); - @override late final _StringsAboutIt about = _StringsAboutIt._(_root); - @override late final _StringsServerSelectionIt serverSelection = _StringsServerSelectionIt._(_root); - @override late final _StringsHubDetailIt hubDetail = _StringsHubDetailIt._(_root); - @override late final _StringsLogsIt logs = _StringsLogsIt._(_root); - @override late final _StringsLicensesIt licenses = _StringsLicensesIt._(_root); - @override late final _StringsNavigationIt navigation = _StringsNavigationIt._(_root); - @override late final _StringsPlaylistsIt playlists = _StringsPlaylistsIt._(_root); - @override late final _StringsCollectionsIt collections = _StringsCollectionsIt._(_root); + // Translations + @override + late final _StringsAppIt app = _StringsAppIt._(_root); + @override + late final _StringsAuthIt auth = _StringsAuthIt._(_root); + @override + late final _StringsCommonIt common = _StringsCommonIt._(_root); + @override + late final _StringsScreensIt screens = _StringsScreensIt._(_root); + @override + late final _StringsUpdateIt update = _StringsUpdateIt._(_root); + @override + late final _StringsSettingsIt settings = _StringsSettingsIt._(_root); + @override + late final _StringsSearchIt search = _StringsSearchIt._(_root); + @override + late final _StringsHotkeysIt hotkeys = _StringsHotkeysIt._(_root); + @override + late final _StringsPinEntryIt pinEntry = _StringsPinEntryIt._(_root); + @override + late final _StringsFileInfoIt fileInfo = _StringsFileInfoIt._(_root); + @override + late final _StringsMediaMenuIt mediaMenu = _StringsMediaMenuIt._(_root); + @override + late final _StringsAccessibilityIt accessibility = _StringsAccessibilityIt._( + _root, + ); + @override + late final _StringsTooltipsIt tooltips = _StringsTooltipsIt._(_root); + @override + late final _StringsVideoControlsIt videoControls = _StringsVideoControlsIt._( + _root, + ); + @override + late final _StringsUserStatusIt userStatus = _StringsUserStatusIt._(_root); + @override + late final _StringsMessagesIt messages = _StringsMessagesIt._(_root); + @override + late final _StringsProfileIt profile = _StringsProfileIt._(_root); + @override + late final _StringsSubtitlingStylingIt subtitlingStyling = + _StringsSubtitlingStylingIt._(_root); + @override + late final _StringsDialogIt dialog = _StringsDialogIt._(_root); + @override + late final _StringsDiscoverIt discover = _StringsDiscoverIt._(_root); + @override + late final _StringsErrorsIt errors = _StringsErrorsIt._(_root); + @override + late final _StringsLibrariesIt libraries = _StringsLibrariesIt._(_root); + @override + late final _StringsAboutIt about = _StringsAboutIt._(_root); + @override + late final _StringsServerSelectionIt serverSelection = + _StringsServerSelectionIt._(_root); + @override + late final _StringsHubDetailIt hubDetail = _StringsHubDetailIt._(_root); + @override + late final _StringsLogsIt logs = _StringsLogsIt._(_root); + @override + late final _StringsLicensesIt licenses = _StringsLicensesIt._(_root); + @override + late final _StringsNavigationIt navigation = _StringsNavigationIt._(_root); + @override + late final _StringsPlaylistsIt playlists = _StringsPlaylistsIt._(_root); + @override + late final _StringsCollectionsIt collections = _StringsCollectionsIt._(_root); } // Path: app class _StringsAppIt implements _StringsAppEn { - _StringsAppIt._(this._root); + _StringsAppIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get title => 'Plezy'; - @override String get loading => 'Caricamento...'; + // Translations + @override + String get title => 'Plezy'; + @override + String get loading => 'Caricamento...'; } // Path: auth class _StringsAuthIt implements _StringsAuthEn { - _StringsAuthIt._(this._root); + _StringsAuthIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get signInWithPlex => 'Accedi con Plex'; - @override String get showQRCode => 'Mostra QR Code'; - @override String get cancel => 'Cancella'; - @override String get authenticate => 'Autenticazione'; - @override String get retry => 'Riprova'; - @override String get debugEnterToken => 'Debug: Inserisci Token Plex'; - @override String get plexTokenLabel => 'Token Auth Plex'; - @override String get plexTokenHint => 'Inserisci il tuo token di Plex.tv'; - @override String get authenticationTimeout => 'Autenticazione scaduta. Riprova.'; - @override String get scanQRCodeInstruction => 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.'; - @override String get waitingForAuth => 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.'; + // Translations + @override + String get signInWithPlex => 'Accedi con Plex'; + @override + String get showQRCode => 'Mostra QR Code'; + @override + String get cancel => 'Cancella'; + @override + String get authenticate => 'Autenticazione'; + @override + String get retry => 'Riprova'; + @override + String get debugEnterToken => 'Debug: Inserisci Token Plex'; + @override + String get plexTokenLabel => 'Token Auth Plex'; + @override + String get plexTokenHint => 'Inserisci il tuo token di Plex.tv'; + @override + String get authenticationTimeout => 'Autenticazione scaduta. Riprova.'; + @override + String get scanQRCodeInstruction => + 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.'; + @override + String get waitingForAuth => + 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.'; } // Path: common class _StringsCommonIt implements _StringsCommonEn { - _StringsCommonIt._(this._root); + _StringsCommonIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get cancel => 'Cancella'; - @override String get save => 'Salva'; - @override String get close => 'Chiudi'; - @override String get clear => 'Pulisci'; - @override String get reset => 'Ripristina'; - @override String get later => 'Più tardi'; - @override String get submit => 'Invia'; - @override String get confirm => 'Conferma'; - @override String get retry => 'Riprova'; - @override String get playNow => 'Riproduci ora'; - @override String get logout => 'Disconnetti'; - @override String get online => 'Online'; - @override String get offline => 'Offline'; - @override String get owned => 'Di proprietà'; - @override String get shared => 'Condiviso'; - @override String get current => 'CORRENTE'; - @override String get unknown => 'Sconosciuto'; - @override String get refresh => 'Aggiorna'; - @override String get yes => 'Sì'; - @override String get no => 'No'; - @override String get server => 'Server'; - @override String get delete => 'Elimina'; - @override String get shuffle => 'Casuale'; - @override String get addTo => 'Aggiungi a...'; + // Translations + @override + String get cancel => 'Cancella'; + @override + String get save => 'Salva'; + @override + String get close => 'Chiudi'; + @override + String get clear => 'Pulisci'; + @override + String get reset => 'Ripristina'; + @override + String get later => 'Più tardi'; + @override + String get submit => 'Invia'; + @override + String get confirm => 'Conferma'; + @override + String get retry => 'Riprova'; + @override + String get playNow => 'Riproduci ora'; + @override + String get logout => 'Disconnetti'; + @override + String get online => 'Online'; + @override + String get offline => 'Offline'; + @override + String get owned => 'Di proprietà'; + @override + String get shared => 'Condiviso'; + @override + String get current => 'CORRENTE'; + @override + String get unknown => 'Sconosciuto'; + @override + String get refresh => 'Aggiorna'; + @override + String get yes => 'Sì'; + @override + String get no => 'No'; + @override + String get server => 'Server'; + @override + String get delete => 'Elimina'; + @override + String get shuffle => 'Casuale'; + @override + String get addTo => 'Aggiungi a...'; } // Path: screens class _StringsScreensIt implements _StringsScreensEn { - _StringsScreensIt._(this._root); + _StringsScreensIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get licenses => 'Licenze'; - @override String get selectServer => 'Seleziona server'; - @override String get switchProfile => 'Cambia profilo'; - @override String get subtitleStyling => 'Stile sottotitoli'; - @override String get search => 'Cerca'; - @override String get logs => 'Registro'; + // Translations + @override + String get licenses => 'Licenze'; + @override + String get selectServer => 'Seleziona server'; + @override + String get switchProfile => 'Cambia profilo'; + @override + String get subtitleStyling => 'Stile sottotitoli'; + @override + String get search => 'Cerca'; + @override + String get logs => 'Registro'; } // Path: update class _StringsUpdateIt implements _StringsUpdateEn { - _StringsUpdateIt._(this._root); + _StringsUpdateIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get available => 'Aggiornamento disponibile'; - @override String versionAvailable({required Object version}) => 'Versione ${version} disponibile'; - @override String currentVersion({required Object version}) => 'Corrente: ${version}'; - @override String get skipVersion => 'Salta questa versione'; - @override String get viewRelease => 'Visualizza dettagli release'; - @override String get latestVersion => 'La versione installata è l\'ultima disponibile'; - @override String get checkFailed => 'Impossibile controllare gli aggiornamenti'; + // Translations + @override + String get available => 'Aggiornamento disponibile'; + @override + String versionAvailable({required Object version}) => + 'Versione ${version} disponibile'; + @override + String currentVersion({required Object version}) => 'Corrente: ${version}'; + @override + String get skipVersion => 'Salta questa versione'; + @override + String get viewRelease => 'Visualizza dettagli release'; + @override + String get latestVersion => 'La versione installata è l\'ultima disponibile'; + @override + String get checkFailed => 'Impossibile controllare gli aggiornamenti'; } // Path: settings class _StringsSettingsIt implements _StringsSettingsEn { - _StringsSettingsIt._(this._root); + _StringsSettingsIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get title => 'Impostazioni'; - @override String get language => 'Lingua'; - @override String get theme => 'Tema'; - @override String get appearance => 'Aspetto'; - @override String get videoPlayback => 'Riproduzione video'; - @override String get shufflePlay => 'Riproduzione casuale'; - @override String get advanced => 'Avanzate'; - @override String get useSeasonPostersDescription => 'Mostra il poster della stagione invece del poster della serie per gli episodi'; - @override String get showHeroSectionDescription => 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; - @override String get secondsLabel => 'Secondi'; - @override String get minutesLabel => 'Minuti'; - @override String get secondsShort => 's'; - @override String get minutesShort => 'm'; - @override String durationHint({required Object min, required Object max}) => 'Inserisci durata (${min}-${max})'; - @override String get systemTheme => 'Sistema'; - @override String get systemThemeDescription => 'Segui le impostazioni di sistema'; - @override String get lightTheme => 'Chiaro'; - @override String get darkTheme => 'Scuro'; - @override String get libraryDensity => 'Densità libreria'; - @override String get compact => 'Compatta'; - @override String get compactDescription => 'Schede più piccole, più elementi visibili'; - @override String get normal => 'Normale'; - @override String get normalDescription => 'Dimensione predefinita'; - @override String get comfortable => 'Comoda'; - @override String get comfortableDescription => 'Schede più grandi, meno elementi visibili'; - @override String get viewMode => 'Modalità di visualizzazione'; - @override String get gridView => 'Griglia'; - @override String get gridViewDescription => 'Visualizza gli elementi in un layout a griglia'; - @override String get listView => 'Elenco'; - @override String get listViewDescription => 'Visualizza gli elementi in un layout a elenco'; - @override String get useSeasonPosters => 'Usa poster delle stagioni'; - @override String get showHeroSection => 'Mostra sezione principale'; - @override String get hardwareDecoding => 'Decodifica Hardware'; - @override String get hardwareDecodingDescription => 'Utilizza l\'accelerazione hardware quando disponibile'; - @override String get bufferSize => 'Dimensione buffer'; - @override String bufferSizeMB({required Object size}) => '${size}MB'; - @override String get subtitleStyling => 'Stile sottotitoli'; - @override String get subtitleStylingDescription => 'Personalizza l\'aspetto dei sottotitoli'; - @override String get smallSkipDuration => 'Durata skip breve'; - @override String get largeSkipDuration => 'Durata skip lungo'; - @override String secondsUnit({required Object seconds}) => '${seconds} secondi'; - @override String get defaultSleepTimer => 'Timer spegnimento predefinito'; - @override String minutesUnit({required Object minutes}) => '${minutes} minuti'; - @override String get rememberTrackSelections => 'Ricorda selezioni tracce per serie/film'; - @override String get rememberTrackSelectionsDescription => 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; - @override String get unwatchedOnly => 'Solo non guardati'; - @override String get unwatchedOnlyDescription => 'Includi solo gli episodi non guardati nella coda di riproduzione casuale'; - @override String get shuffleOrderNavigation => 'Navigazione in ordine casuale'; - @override String get shuffleOrderNavigationDescription => 'I pulsanti Avanti/Indietro seguono l\'ordine casuale'; - @override String get loopShuffleQueue => 'Coda di riproduzione casuale in loop'; - @override String get loopShuffleQueueDescription => 'Riavvia la coda quando raggiungi la fine'; - @override String get videoPlayerControls => 'Controlli del lettore video'; - @override String get keyboardShortcuts => 'Scorciatoie da tastiera'; - @override String get keyboardShortcutsDescription => 'Personalizza le scorciatoie da tastiera'; - @override String get debugLogging => 'Log di debug'; - @override String get debugLoggingDescription => 'Abilita il logging dettagliato per la risoluzione dei problemi'; - @override String get viewLogs => 'Visualizza log'; - @override String get viewLogsDescription => 'Visualizza i log dell\'applicazione'; - @override String get clearCache => 'Svuota cache'; - @override String get clearCacheDescription => 'Questa opzione cancellerà tutte le immagini e i dati memorizzati nella cache. Dopo aver cancellato la cache, l\'app potrebbe impiegare più tempo per caricare i contenuti.'; - @override String get clearCacheSuccess => 'Cache cancellata correttamente'; - @override String get resetSettings => 'Ripristina impostazioni'; - @override String get resetSettingsDescription => 'Questa opzione ripristinerà tutte le impostazioni ai valori predefiniti. Non può essere annullata.'; - @override String get resetSettingsSuccess => 'Impostazioni ripristinate correttamente'; - @override String get shortcutsReset => 'Scorciatoie ripristinate alle impostazioni predefinite'; - @override String get about => 'Informazioni'; - @override String get aboutDescription => 'Informazioni sull\'app e le licenze'; - @override String get updates => 'Aggiornamenti'; - @override String get updateAvailable => 'Aggiornamento disponibile'; - @override String get checkForUpdates => 'Controlla aggiornamenti'; - @override String get validationErrorEnterNumber => 'Inserisci un numero valido'; - @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'la durata deve essere compresa tra ${min} e ${max} ${unit}'; - @override String shortcutAlreadyAssigned({required Object action}) => 'Scorciatoia già assegnata a ${action}'; - @override String shortcutUpdated({required Object action}) => 'Scorciatoia aggiornata per ${action}'; - @override String get autoSkip => 'Salto Automatico'; - @override String get autoSkipIntro => 'Salta Intro Automaticamente'; - @override String get autoSkipIntroDescription => 'Salta automaticamente i marcatori dell\'intro dopo alcuni secondi'; - @override String get autoSkipCredits => 'Salta Crediti Automaticamente'; - @override String get autoSkipCreditsDescription => 'Salta automaticamente i crediti e riproduci l\'episodio successivo'; - @override String get autoSkipDelay => 'Ritardo Salto Automatico'; - @override String autoSkipDelayDescription({required Object seconds}) => 'Aspetta ${seconds} secondi prima del salto automatico'; + // Translations + @override + String get title => 'Impostazioni'; + @override + String get language => 'Lingua'; + @override + String get theme => 'Tema'; + @override + String get appearance => 'Aspetto'; + @override + String get videoPlayback => 'Riproduzione video'; + @override + String get shufflePlay => 'Riproduzione casuale'; + @override + String get advanced => 'Avanzate'; + @override + String get useSeasonPostersDescription => + 'Mostra il poster della stagione invece del poster della serie per gli episodi'; + @override + String get showHeroSectionDescription => + 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; + @override + String get secondsLabel => 'Secondi'; + @override + String get minutesLabel => 'Minuti'; + @override + String get secondsShort => 's'; + @override + String get minutesShort => 'm'; + @override + String durationHint({required Object min, required Object max}) => + 'Inserisci durata (${min}-${max})'; + @override + String get systemTheme => 'Sistema'; + @override + String get systemThemeDescription => 'Segui le impostazioni di sistema'; + @override + String get lightTheme => 'Chiaro'; + @override + String get darkTheme => 'Scuro'; + @override + String get libraryDensity => 'Densità libreria'; + @override + String get compact => 'Compatta'; + @override + String get compactDescription => 'Schede più piccole, più elementi visibili'; + @override + String get normal => 'Normale'; + @override + String get normalDescription => 'Dimensione predefinita'; + @override + String get comfortable => 'Comoda'; + @override + String get comfortableDescription => + 'Schede più grandi, meno elementi visibili'; + @override + String get viewMode => 'Modalità di visualizzazione'; + @override + String get gridView => 'Griglia'; + @override + String get gridViewDescription => + 'Visualizza gli elementi in un layout a griglia'; + @override + String get listView => 'Elenco'; + @override + String get listViewDescription => + 'Visualizza gli elementi in un layout a elenco'; + @override + String get useSeasonPosters => 'Usa poster delle stagioni'; + @override + String get showHeroSection => 'Mostra sezione principale'; + @override + String get hardwareDecoding => 'Decodifica Hardware'; + @override + String get hardwareDecodingDescription => + 'Utilizza l\'accelerazione hardware quando disponibile'; + @override + String get bufferSize => 'Dimensione buffer'; + @override + String bufferSizeMB({required Object size}) => '${size}MB'; + @override + String get subtitleStyling => 'Stile sottotitoli'; + @override + String get subtitleStylingDescription => + 'Personalizza l\'aspetto dei sottotitoli'; + @override + String get smallSkipDuration => 'Durata skip breve'; + @override + String get largeSkipDuration => 'Durata skip lungo'; + @override + String secondsUnit({required Object seconds}) => '${seconds} secondi'; + @override + String get defaultSleepTimer => 'Timer spegnimento predefinito'; + @override + String minutesUnit({required Object minutes}) => '${minutes} minuti'; + @override + String get rememberTrackSelections => + 'Ricorda selezioni tracce per serie/film'; + @override + String get rememberTrackSelectionsDescription => + 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; + @override + String get unwatchedOnly => 'Solo non guardati'; + @override + String get unwatchedOnlyDescription => + 'Includi solo gli episodi non guardati nella coda di riproduzione casuale'; + @override + String get shuffleOrderNavigation => 'Navigazione in ordine casuale'; + @override + String get shuffleOrderNavigationDescription => + 'I pulsanti Avanti/Indietro seguono l\'ordine casuale'; + @override + String get loopShuffleQueue => 'Coda di riproduzione casuale in loop'; + @override + String get loopShuffleQueueDescription => + 'Riavvia la coda quando raggiungi la fine'; + @override + String get videoPlayerControls => 'Controlli del lettore video'; + @override + String get keyboardShortcuts => 'Scorciatoie da tastiera'; + @override + String get keyboardShortcutsDescription => + 'Personalizza le scorciatoie da tastiera'; + @override + String get debugLogging => 'Log di debug'; + @override + String get debugLoggingDescription => + 'Abilita il logging dettagliato per la risoluzione dei problemi'; + @override + String get viewLogs => 'Visualizza log'; + @override + String get viewLogsDescription => 'Visualizza i log dell\'applicazione'; + @override + String get clearCache => 'Svuota cache'; + @override + String get clearCacheDescription => + 'Questa opzione cancellerà tutte le immagini e i dati memorizzati nella cache. Dopo aver cancellato la cache, l\'app potrebbe impiegare più tempo per caricare i contenuti.'; + @override + String get clearCacheSuccess => 'Cache cancellata correttamente'; + @override + String get resetSettings => 'Ripristina impostazioni'; + @override + String get resetSettingsDescription => + 'Questa opzione ripristinerà tutte le impostazioni ai valori predefiniti. Non può essere annullata.'; + @override + String get resetSettingsSuccess => 'Impostazioni ripristinate correttamente'; + @override + String get shortcutsReset => + 'Scorciatoie ripristinate alle impostazioni predefinite'; + @override + String get about => 'Informazioni'; + @override + String get aboutDescription => 'Informazioni sull\'app e le licenze'; + @override + String get updates => 'Aggiornamenti'; + @override + String get updateAvailable => 'Aggiornamento disponibile'; + @override + String get checkForUpdates => 'Controlla aggiornamenti'; + @override + String get validationErrorEnterNumber => 'Inserisci un numero valido'; + @override + String validationErrorDuration({ + required Object min, + required Object max, + required Object unit, + }) => 'la durata deve essere compresa tra ${min} e ${max} ${unit}'; + @override + String shortcutAlreadyAssigned({required Object action}) => + 'Scorciatoia già assegnata a ${action}'; + @override + String shortcutUpdated({required Object action}) => + 'Scorciatoia aggiornata per ${action}'; + @override + String get autoSkip => 'Salto Automatico'; + @override + String get autoSkipIntro => 'Salta Intro Automaticamente'; + @override + String get autoSkipIntroDescription => + 'Salta automaticamente i marcatori dell\'intro dopo alcuni secondi'; + @override + String get autoSkipCredits => 'Salta Crediti Automaticamente'; + @override + String get autoSkipCreditsDescription => + 'Salta automaticamente i crediti e riproduci l\'episodio successivo'; + @override + String get autoSkipDelay => 'Ritardo Salto Automatico'; + @override + String autoSkipDelayDescription({required Object seconds}) => + 'Aspetta ${seconds} secondi prima del salto automatico'; } // Path: search class _StringsSearchIt implements _StringsSearchEn { - _StringsSearchIt._(this._root); + _StringsSearchIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get hint => 'Cerca film. spettacoli, musica...'; - @override String get tryDifferentTerm => 'Prova altri termini di ricerca'; - @override String get searchYourMedia => 'Cerca nei tuoi media'; - @override String get enterTitleActorOrKeyword => 'Inserisci un titolo, attore o parola chiave'; + // Translations + @override + String get hint => 'Cerca film. spettacoli, musica...'; + @override + String get tryDifferentTerm => 'Prova altri termini di ricerca'; + @override + String get searchYourMedia => 'Cerca nei tuoi media'; + @override + String get enterTitleActorOrKeyword => + 'Inserisci un titolo, attore o parola chiave'; } // Path: hotkeys class _StringsHotkeysIt implements _StringsHotkeysEn { - _StringsHotkeysIt._(this._root); + _StringsHotkeysIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String setShortcutFor({required Object actionName}) => 'Imposta scorciatoia per ${actionName}'; - @override String get clearShortcut => 'Elimina scorciatoia'; + // Translations + @override + String setShortcutFor({required Object actionName}) => + 'Imposta scorciatoia per ${actionName}'; + @override + String get clearShortcut => 'Elimina scorciatoia'; } // Path: pinEntry class _StringsPinEntryIt implements _StringsPinEntryEn { - _StringsPinEntryIt._(this._root); + _StringsPinEntryIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get enterPin => 'Inserisci PIN'; - @override String get showPin => 'Mostra PIN'; - @override String get hidePin => 'Nascondi PIN'; + // Translations + @override + String get enterPin => 'Inserisci PIN'; + @override + String get showPin => 'Mostra PIN'; + @override + String get hidePin => 'Nascondi PIN'; } // Path: fileInfo class _StringsFileInfoIt implements _StringsFileInfoEn { - _StringsFileInfoIt._(this._root); + _StringsFileInfoIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get title => 'Info sul file'; - @override String get video => 'Video'; - @override String get audio => 'Audio'; - @override String get file => 'File'; - @override String get advanced => 'Avanzate'; - @override String get codec => 'Codec'; - @override String get resolution => 'Risoluzione'; - @override String get bitrate => 'Bitrate'; - @override String get frameRate => 'Frame Rate'; - @override String get aspectRatio => 'Aspect Ratio'; - @override String get profile => 'Profilo'; - @override String get bitDepth => 'Profondità colore'; - @override String get colorSpace => 'Spazio colore'; - @override String get colorRange => 'Gamma colori'; - @override String get colorPrimaries => 'Colori primari'; - @override String get chromaSubsampling => 'Sottocampionamento cromatico'; - @override String get channels => 'Canali'; - @override String get path => 'Percorso'; - @override String get size => 'Dimensione'; - @override String get container => 'Contenitore'; - @override String get duration => 'Durata'; - @override String get optimizedForStreaming => 'Ottimizzato per lo streaming'; - @override String get has64bitOffsets => 'Offset a 64-bit'; + // Translations + @override + String get title => 'Info sul file'; + @override + String get video => 'Video'; + @override + String get audio => 'Audio'; + @override + String get file => 'File'; + @override + String get advanced => 'Avanzate'; + @override + String get codec => 'Codec'; + @override + String get resolution => 'Risoluzione'; + @override + String get bitrate => 'Bitrate'; + @override + String get frameRate => 'Frame Rate'; + @override + String get aspectRatio => 'Aspect Ratio'; + @override + String get profile => 'Profilo'; + @override + String get bitDepth => 'Profondità colore'; + @override + String get colorSpace => 'Spazio colore'; + @override + String get colorRange => 'Gamma colori'; + @override + String get colorPrimaries => 'Colori primari'; + @override + String get chromaSubsampling => 'Sottocampionamento cromatico'; + @override + String get channels => 'Canali'; + @override + String get path => 'Percorso'; + @override + String get size => 'Dimensione'; + @override + String get container => 'Contenitore'; + @override + String get duration => 'Durata'; + @override + String get optimizedForStreaming => 'Ottimizzato per lo streaming'; + @override + String get has64bitOffsets => 'Offset a 64-bit'; } // Path: mediaMenu class _StringsMediaMenuIt implements _StringsMediaMenuEn { - _StringsMediaMenuIt._(this._root); + _StringsMediaMenuIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get markAsWatched => 'Segna come visto'; - @override String get markAsUnwatched => 'Segna come non visto'; - @override String get removeFromContinueWatching => 'Rimuovi da Continua a guardare'; - @override String get goToSeries => 'Vai alle serie'; - @override String get goToSeason => 'Vai alla stagione'; - @override String get shufflePlay => 'Riproduzione casuale'; - @override String get fileInfo => 'Info sul file'; + // Translations + @override + String get markAsWatched => 'Segna come visto'; + @override + String get markAsUnwatched => 'Segna come non visto'; + @override + String get removeFromContinueWatching => 'Rimuovi da Continua a guardare'; + @override + String get goToSeries => 'Vai alle serie'; + @override + String get goToSeason => 'Vai alla stagione'; + @override + String get shufflePlay => 'Riproduzione casuale'; + @override + String get fileInfo => 'Info sul file'; } // Path: accessibility class _StringsAccessibilityIt implements _StringsAccessibilityEn { - _StringsAccessibilityIt._(this._root); + _StringsAccessibilityIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String mediaCardMovie({required Object title}) => '${title}, film'; - @override String mediaCardShow({required Object title}) => '${title}, serie TV'; - @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - @override String get mediaCardWatched => 'visto'; - @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} percento visto'; - @override String get mediaCardUnwatched => 'non visto'; - @override String get tapToPlay => 'Tocca per riprodurre'; + // Translations + @override + String mediaCardMovie({required Object title}) => '${title}, film'; + @override + String mediaCardShow({required Object title}) => '${title}, serie TV'; + @override + String mediaCardEpisode({ + required Object title, + required Object episodeInfo, + }) => '${title}, ${episodeInfo}'; + @override + String mediaCardSeason({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + @override + String get mediaCardWatched => 'visto'; + @override + String mediaCardPartiallyWatched({required Object percent}) => + '${percent} percento visto'; + @override + String get mediaCardUnwatched => 'non visto'; + @override + String get tapToPlay => 'Tocca per riprodurre'; } // Path: tooltips class _StringsTooltipsIt implements _StringsTooltipsEn { - _StringsTooltipsIt._(this._root); + _StringsTooltipsIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get shufflePlay => 'Riproduzione casuale'; - @override String get markAsWatched => 'Segna come visto'; - @override String get markAsUnwatched => 'Segna come non visto'; + // Translations + @override + String get shufflePlay => 'Riproduzione casuale'; + @override + String get markAsWatched => 'Segna come visto'; + @override + String get markAsUnwatched => 'Segna come non visto'; } // Path: videoControls class _StringsVideoControlsIt implements _StringsVideoControlsEn { - _StringsVideoControlsIt._(this._root); + _StringsVideoControlsIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get audioLabel => 'Audio'; - @override String get subtitlesLabel => 'Sottotitoli'; - @override String get resetToZero => 'Riporta a 0ms'; - @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - @override String playsLater({required Object label}) => '${label} riprodotto dopo'; - @override String playsEarlier({required Object label}) => '${label} riprodotto prima'; - @override String get noOffset => 'Nessun offset'; - @override String get letterbox => 'Letterbox'; - @override String get fillScreen => 'Riempi schermo'; - @override String get stretch => 'Allunga'; - @override String get lockRotation => 'Blocca rotazione'; - @override String get unlockRotation => 'Sblocca rotazione'; - @override String get sleepTimer => 'Timer di spegnimento'; - @override String get timerActive => 'Timer attivo'; - @override String playbackWillPauseIn({required Object duration}) => 'La riproduzione si interromperà tra ${duration}'; - @override String get sleepTimerCompleted => 'Timer di spegnimento completato - riproduzione in pausa'; - @override String get playButton => 'Riproduci'; - @override String get pauseButton => 'Pausa'; - @override String seekBackwardButton({required Object seconds}) => 'Riavvolgi di ${seconds} secondi'; - @override String seekForwardButton({required Object seconds}) => 'Avanza di ${seconds} secondi'; - @override String get previousButton => 'Episodio precedente'; - @override String get nextButton => 'Episodio successivo'; - @override String get previousChapterButton => 'Capitolo precedente'; - @override String get nextChapterButton => 'Capitolo successivo'; - @override String get volumeButton => 'Volume'; - @override String get muteButton => 'Silenzia'; - @override String get unmuteButton => 'Riattiva audio'; - @override String get settingsButton => 'Impostazioni video'; - @override String get audioTrackButton => 'Tracce audio'; - @override String get subtitlesButton => 'Sottotitoli'; - @override String get chaptersButton => 'Capitoli'; - @override String get versionsButton => 'Versioni video'; - @override String get aspectRatioButton => 'Proporzioni'; - @override String get fullscreenButton => 'Attiva schermo intero'; - @override String get exitFullscreenButton => 'Esci da schermo intero'; - @override String get rotationLockButton => 'Blocco rotazione'; - @override String get timelineSlider => 'Timeline video'; - @override String get volumeSlider => 'Livello volume'; - @override String get backButton => 'Indietro'; + // Translations + @override + String get audioLabel => 'Audio'; + @override + String get subtitlesLabel => 'Sottotitoli'; + @override + String get resetToZero => 'Riporta a 0ms'; + @override + String addTime({required Object amount, required Object unit}) => + '+${amount}${unit}'; + @override + String minusTime({required Object amount, required Object unit}) => + '-${amount}${unit}'; + @override + String playsLater({required Object label}) => '${label} riprodotto dopo'; + @override + String playsEarlier({required Object label}) => '${label} riprodotto prima'; + @override + String get noOffset => 'Nessun offset'; + @override + String get letterbox => 'Letterbox'; + @override + String get fillScreen => 'Riempi schermo'; + @override + String get stretch => 'Allunga'; + @override + String get lockRotation => 'Blocca rotazione'; + @override + String get unlockRotation => 'Sblocca rotazione'; + @override + String get sleepTimer => 'Timer di spegnimento'; + @override + String get timerActive => 'Timer attivo'; + @override + String playbackWillPauseIn({required Object duration}) => + 'La riproduzione si interromperà tra ${duration}'; + @override + String get sleepTimerCompleted => + 'Timer di spegnimento completato - riproduzione in pausa'; + @override + String get playButton => 'Riproduci'; + @override + String get pauseButton => 'Pausa'; + @override + String seekBackwardButton({required Object seconds}) => + 'Riavvolgi di ${seconds} secondi'; + @override + String seekForwardButton({required Object seconds}) => + 'Avanza di ${seconds} secondi'; + @override + String get previousButton => 'Episodio precedente'; + @override + String get nextButton => 'Episodio successivo'; + @override + String get previousChapterButton => 'Capitolo precedente'; + @override + String get nextChapterButton => 'Capitolo successivo'; + @override + String get volumeButton => 'Volume'; + @override + String get muteButton => 'Silenzia'; + @override + String get unmuteButton => 'Riattiva audio'; + @override + String get settingsButton => 'Impostazioni video'; + @override + String get audioTrackButton => 'Tracce audio'; + @override + String get subtitlesButton => 'Sottotitoli'; + @override + String get chaptersButton => 'Capitoli'; + @override + String get versionsButton => 'Versioni video'; + @override + String get aspectRatioButton => 'Proporzioni'; + @override + String get fullscreenButton => 'Attiva schermo intero'; + @override + String get exitFullscreenButton => 'Esci da schermo intero'; + @override + String get rotationLockButton => 'Blocco rotazione'; + @override + String get timelineSlider => 'Timeline video'; + @override + String get volumeSlider => 'Livello volume'; + @override + String get backButton => 'Indietro'; } // Path: userStatus class _StringsUserStatusIt implements _StringsUserStatusEn { - _StringsUserStatusIt._(this._root); + _StringsUserStatusIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get admin => 'Admin'; - @override String get restricted => 'Limitato'; - @override String get protected => 'Protetto'; - @override String get current => 'ATTUALE'; + // Translations + @override + String get admin => 'Admin'; + @override + String get restricted => 'Limitato'; + @override + String get protected => 'Protetto'; + @override + String get current => 'ATTUALE'; } // Path: messages class _StringsMessagesIt implements _StringsMessagesEn { - _StringsMessagesIt._(this._root); + _StringsMessagesIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get markedAsWatched => 'Segna come visto'; - @override String get markedAsUnwatched => 'Segna come non visto'; - @override String get removedFromContinueWatching => 'Rimosso da Continua a guardare'; - @override String errorLoading({required Object error}) => 'Errore: ${error}'; - @override String get fileInfoNotAvailable => 'Informazioni sul file non disponibili'; - @override String errorLoadingFileInfo({required Object error}) => 'Errore caricamento informazioni sul file: ${error}'; - @override String get errorLoadingSeries => 'Errore caricamento serie'; - @override String get errorLoadingSeason => 'Errore caricamento stagione'; - @override String get musicNotSupported => 'La riproduzione musicale non è ancora supportata'; - @override String get logsCleared => 'Log eliminati'; - @override String get logsCopied => 'Log copiati negli appunti'; - @override String get noLogsAvailable => 'Nessun log disponibile'; - @override String libraryScanning({required Object title}) => 'Scansione "${title}"...'; - @override String libraryScanStarted({required Object title}) => 'Scansione libreria iniziata per "${title}"'; - @override String libraryScanFailed({required Object error}) => 'Impossibile eseguire scansione della libreria: ${error}'; - @override String metadataRefreshing({required Object title}) => 'Aggiornamento metadati per "${title}"...'; - @override String metadataRefreshStarted({required Object title}) => 'Aggiornamento metadati per "${title}"'; - @override String metadataRefreshFailed({required Object error}) => 'Errore aggiornamento metadati: ${error}'; - @override String get noPlexToken => 'Nessun token Plex trovato. Riesegui l\'accesso.'; - @override String get logoutConfirm => 'Sei sicuro di volerti disconnettere?'; - @override String get noSeasonsFound => 'Nessuna stagione trovata'; - @override String get noEpisodesFound => 'Nessun episodio trovato nella prima stagione'; - @override String get noEpisodesFoundGeneral => 'Nessun episodio trovato'; - @override String get noResultsFound => 'Nessun risultato'; - @override String sleepTimerSet({required Object label}) => 'Imposta timer spegnimento per ${label}'; - @override String failedToSwitchProfile({required Object displayName}) => 'Impossibile passare a ${displayName}'; - @override String get noItemsAvailable => 'Nessun elemento disponibile'; - @override String get failedToCreatePlayQueue => 'Impossibile creare la coda di riproduzione'; - @override String get failedToCreatePlayQueueNoItems => 'Impossibile creare la coda di riproduzione - nessun elemento'; - @override String failedPlayback({required Object action, required Object error}) => 'Impossibile ${action}: ${error}'; + // Translations + @override + String get markedAsWatched => 'Segna come visto'; + @override + String get markedAsUnwatched => 'Segna come non visto'; + @override + String get removedFromContinueWatching => 'Rimosso da Continua a guardare'; + @override + String errorLoading({required Object error}) => 'Errore: ${error}'; + @override + String get fileInfoNotAvailable => 'Informazioni sul file non disponibili'; + @override + String errorLoadingFileInfo({required Object error}) => + 'Errore caricamento informazioni sul file: ${error}'; + @override + String get errorLoadingSeries => 'Errore caricamento serie'; + @override + String get errorLoadingSeason => 'Errore caricamento stagione'; + @override + String get musicNotSupported => + 'La riproduzione musicale non è ancora supportata'; + @override + String get logsCleared => 'Log eliminati'; + @override + String get logsCopied => 'Log copiati negli appunti'; + @override + String get noLogsAvailable => 'Nessun log disponibile'; + @override + String libraryScanning({required Object title}) => 'Scansione "${title}"...'; + @override + String libraryScanStarted({required Object title}) => + 'Scansione libreria iniziata per "${title}"'; + @override + String libraryScanFailed({required Object error}) => + 'Impossibile eseguire scansione della libreria: ${error}'; + @override + String metadataRefreshing({required Object title}) => + 'Aggiornamento metadati per "${title}"...'; + @override + String metadataRefreshStarted({required Object title}) => + 'Aggiornamento metadati per "${title}"'; + @override + String metadataRefreshFailed({required Object error}) => + 'Errore aggiornamento metadati: ${error}'; + @override + String get noPlexToken => 'Nessun token Plex trovato. Riesegui l\'accesso.'; + @override + String get logoutConfirm => 'Sei sicuro di volerti disconnettere?'; + @override + String get noSeasonsFound => 'Nessuna stagione trovata'; + @override + String get noEpisodesFound => 'Nessun episodio trovato nella prima stagione'; + @override + String get noEpisodesFoundGeneral => 'Nessun episodio trovato'; + @override + String get noResultsFound => 'Nessun risultato'; + @override + String sleepTimerSet({required Object label}) => + 'Imposta timer spegnimento per ${label}'; + @override + String failedToSwitchProfile({required Object displayName}) => + 'Impossibile passare a ${displayName}'; + @override + String get noItemsAvailable => 'Nessun elemento disponibile'; + @override + String get failedToCreatePlayQueue => + 'Impossibile creare la coda di riproduzione'; + @override + String get failedToCreatePlayQueueNoItems => + 'Impossibile creare la coda di riproduzione - nessun elemento'; + @override + String failedPlayback({required Object action, required Object error}) => + 'Impossibile ${action}: ${error}'; } // Path: profile class _StringsProfileIt implements _StringsProfileEn { - _StringsProfileIt._(this._root); + _StringsProfileIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get noUsersAvailable => 'Nessun utente disponibile'; + // Translations + @override + String get noUsersAvailable => 'Nessun utente disponibile'; } // Path: subtitlingStyling class _StringsSubtitlingStylingIt implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingIt._(this._root); + _StringsSubtitlingStylingIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get stylingOptions => 'Opzioni stile'; - @override String get fontSize => 'Dimensione'; - @override String get textColor => 'Colore testo'; - @override String get borderSize => 'Dimensione bordo'; - @override String get borderColor => 'Colore bordo'; - @override String get backgroundOpacity => 'Opacità sfondo'; - @override String get backgroundColor => 'Colore sfondo'; + // Translations + @override + String get stylingOptions => 'Opzioni stile'; + @override + String get fontSize => 'Dimensione'; + @override + String get textColor => 'Colore testo'; + @override + String get borderSize => 'Dimensione bordo'; + @override + String get borderColor => 'Colore bordo'; + @override + String get backgroundOpacity => 'Opacità sfondo'; + @override + String get backgroundColor => 'Colore sfondo'; } // Path: dialog class _StringsDialogIt implements _StringsDialogEn { - _StringsDialogIt._(this._root); + _StringsDialogIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get confirmAction => 'Conferma azione'; - @override String get areYouSure => 'Sei sicuro di voler eseguire questa azione?'; - @override String get cancel => 'Cancella'; - @override String get playNow => 'Riproduci ora'; + // Translations + @override + String get confirmAction => 'Conferma azione'; + @override + String get areYouSure => 'Sei sicuro di voler eseguire questa azione?'; + @override + String get cancel => 'Cancella'; + @override + String get playNow => 'Riproduci ora'; } // Path: discover class _StringsDiscoverIt implements _StringsDiscoverEn { - _StringsDiscoverIt._(this._root); + _StringsDiscoverIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get title => 'Esplora'; - @override String get switchProfile => 'Cambia profilo'; - @override String get switchServer => 'Cambia server'; - @override String get logout => 'Disconnetti'; - @override String get noContentAvailable => 'Nessun contenuto disponibile'; - @override String get addMediaToLibraries => 'Aggiungi alcuni file multimediali alle tue librerie'; - @override String get continueWatching => 'Continua a guardare'; - @override String get recentlyAdded => 'Aggiunti di recente'; - @override String get play => 'Riproduci'; - @override String get resume => 'Riprendi'; - @override String playEpisode({required Object season, required Object episode}) => 'Riproduci S${season}, E${episode}'; - @override String resumeEpisode({required Object season, required Object episode}) => 'Riprendi S${season}, E${episode}'; - @override String get pause => 'Pausa'; - @override String get overview => 'Panoramica'; - @override String get cast => 'Attori'; - @override String get seasons => 'Stagioni'; - @override String get studio => 'Studio'; - @override String get rating => 'Classificazione'; - @override String get watched => 'Guardato'; - @override String episodeCount({required Object count}) => '${count} episodi'; - @override String watchedProgress({required Object watched, required Object total}) => '${watched}/${total} guardati'; - @override String get movie => 'Film'; - @override String get tvShow => 'Serie TV'; - @override String minutesLeft({required Object minutes}) => '${minutes} minuti rimanenti'; + // Translations + @override + String get title => 'Esplora'; + @override + String get switchProfile => 'Cambia profilo'; + @override + String get switchServer => 'Cambia server'; + @override + String get logout => 'Disconnetti'; + @override + String get noContentAvailable => 'Nessun contenuto disponibile'; + @override + String get addMediaToLibraries => + 'Aggiungi alcuni file multimediali alle tue librerie'; + @override + String get continueWatching => 'Continua a guardare'; + @override + String get recentlyAdded => 'Aggiunti di recente'; + @override + String get play => 'Riproduci'; + @override + String get resume => 'Riprendi'; + @override + String playEpisode({required Object season, required Object episode}) => + 'Riproduci S${season}, E${episode}'; + @override + String resumeEpisode({required Object season, required Object episode}) => + 'Riprendi S${season}, E${episode}'; + @override + String get pause => 'Pausa'; + @override + String get overview => 'Panoramica'; + @override + String get cast => 'Attori'; + @override + String get seasons => 'Stagioni'; + @override + String get studio => 'Studio'; + @override + String get rating => 'Classificazione'; + @override + String get watched => 'Guardato'; + @override + String episodeCount({required Object count}) => '${count} episodi'; + @override + String watchedProgress({required Object watched, required Object total}) => + '${watched}/${total} guardati'; + @override + String get movie => 'Film'; + @override + String get tvShow => 'Serie TV'; + @override + String minutesLeft({required Object minutes}) => + '${minutes} minuti rimanenti'; } // Path: errors class _StringsErrorsIt implements _StringsErrorsEn { - _StringsErrorsIt._(this._root); + _StringsErrorsIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String searchFailed({required Object error}) => 'Ricerca fallita: ${error}'; - @override String connectionTimeout({required Object context}) => 'Timeout connessione durante caricamento di ${context}'; - @override String get connectionFailed => 'Impossibile connettersi al server Plex.'; - @override String failedToLoad({required Object context, required Object error}) => 'Impossibile caricare ${context}: ${error}'; - @override String get noClientAvailable => 'Nessun client disponibile'; - @override String authenticationFailed({required Object error}) => 'Autenticazione fallita: ${error}'; - @override String get couldNotLaunchUrl => 'Impossibile avviare URL di autenticazione'; - @override String get pleaseEnterToken => 'Inserisci token'; - @override String get invalidToken => 'Token non valido'; - @override String failedToVerifyToken({required Object error}) => 'Verifica token fallita: ${error}'; - @override String failedToSwitchProfile({required Object displayName}) => 'Impossibile passare a ${displayName}'; - @override String get connectionFailedGeneric => 'Connessione fallita'; + // Translations + @override + String searchFailed({required Object error}) => 'Ricerca fallita: ${error}'; + @override + String connectionTimeout({required Object context}) => + 'Timeout connessione durante caricamento di ${context}'; + @override + String get connectionFailed => 'Impossibile connettersi al server Plex.'; + @override + String failedToLoad({required Object context, required Object error}) => + 'Impossibile caricare ${context}: ${error}'; + @override + String get noClientAvailable => 'Nessun client disponibile'; + @override + String authenticationFailed({required Object error}) => + 'Autenticazione fallita: ${error}'; + @override + String get couldNotLaunchUrl => 'Impossibile avviare URL di autenticazione'; + @override + String get pleaseEnterToken => 'Inserisci token'; + @override + String get invalidToken => 'Token non valido'; + @override + String failedToVerifyToken({required Object error}) => + 'Verifica token fallita: ${error}'; + @override + String failedToSwitchProfile({required Object displayName}) => + 'Impossibile passare a ${displayName}'; + @override + String get connectionFailedGeneric => 'Connessione fallita'; } // Path: libraries class _StringsLibrariesIt implements _StringsLibrariesEn { - _StringsLibrariesIt._(this._root); + _StringsLibrariesIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get title => 'Librerie'; - @override String get scanLibraryFiles => 'Scansiona file libreria'; - @override String get scanLibrary => 'Scansiona libreria'; - @override String get analyze => 'Analizza'; - @override String get analyzeLibrary => 'Analizza libreria'; - @override String get refreshMetadata => 'Aggiorna metadati'; - @override String get emptyTrash => 'Svuota cestino'; - @override String emptyingTrash({required Object title}) => 'Svuotamento cestino per "${title}"...'; - @override String trashEmptied({required Object title}) => 'Cestino svuotato per "${title}"'; - @override String failedToEmptyTrash({required Object error}) => 'Impossibile svuotare cestino: ${error}'; - @override String analyzing({required Object title}) => 'Analisi "${title}"...'; - @override String analysisStarted({required Object title}) => 'Analisi iniziata per "${title}"'; - @override String failedToAnalyze({required Object error}) => 'Impossibile analizzare libreria: ${error}'; - @override String get noLibrariesFound => 'Nessuna libreria trovata'; - @override String get thisLibraryIsEmpty => 'Questa libreria è vuota'; - @override String get all => 'Tutto'; - @override String get clearAll => 'Cancella tutto'; - @override String scanLibraryConfirm({required Object title}) => 'Sei sicuro di voler scansionare "${title}"?'; - @override String analyzeLibraryConfirm({required Object title}) => 'Sei sicuro di voler analizzare "${title}"?'; - @override String refreshMetadataConfirm({required Object title}) => 'Sei sicuro di voler aggiornare i metadati per "${title}"?'; - @override String emptyTrashConfirm({required Object title}) => 'Sei sicuro di voler svuotare il cestino per "${title}"?'; - @override String get manageLibraries => 'Gestisci librerie'; - @override String get sort => 'Ordina'; - @override String get sortBy => 'Ordina per'; - @override String get filters => 'Filtri'; - @override String loadingLibraryWithCount({required Object count}) => 'Caricamento librerie... (${count} oggetti caricati)'; - @override String get confirmActionMessage => 'Sei sicuro di voler eseguire questa azione?'; - @override String get showLibrary => 'Mostra libreria'; - @override String get hideLibrary => 'Nascondi libreria'; - @override String get libraryOptions => 'Opzioni libreria'; - @override String get content => 'contenuto della libreria'; - @override String get selectLibrary => 'Seleziona libreria'; - @override String filtersWithCount({required Object count}) => 'Filtri (${count})'; - @override String get noRecommendations => 'Nessun consiglio disponibile'; - @override String get noCollections => 'Nessuna raccolta in questa libreria'; - @override String get noFoldersFound => 'Nessuna cartella trovata'; - @override String get folders => 'cartelle'; - @override late final _StringsLibrariesTabsIt tabs = _StringsLibrariesTabsIt._(_root); - @override late final _StringsLibrariesGroupingsIt groupings = _StringsLibrariesGroupingsIt._(_root); + // Translations + @override + String get title => 'Librerie'; + @override + String get scanLibraryFiles => 'Scansiona file libreria'; + @override + String get scanLibrary => 'Scansiona libreria'; + @override + String get analyze => 'Analizza'; + @override + String get analyzeLibrary => 'Analizza libreria'; + @override + String get refreshMetadata => 'Aggiorna metadati'; + @override + String get emptyTrash => 'Svuota cestino'; + @override + String emptyingTrash({required Object title}) => + 'Svuotamento cestino per "${title}"...'; + @override + String trashEmptied({required Object title}) => + 'Cestino svuotato per "${title}"'; + @override + String failedToEmptyTrash({required Object error}) => + 'Impossibile svuotare cestino: ${error}'; + @override + String analyzing({required Object title}) => 'Analisi "${title}"...'; + @override + String analysisStarted({required Object title}) => + 'Analisi iniziata per "${title}"'; + @override + String failedToAnalyze({required Object error}) => + 'Impossibile analizzare libreria: ${error}'; + @override + String get noLibrariesFound => 'Nessuna libreria trovata'; + @override + String get thisLibraryIsEmpty => 'Questa libreria è vuota'; + @override + String get all => 'Tutto'; + @override + String get clearAll => 'Cancella tutto'; + @override + String scanLibraryConfirm({required Object title}) => + 'Sei sicuro di voler scansionare "${title}"?'; + @override + String analyzeLibraryConfirm({required Object title}) => + 'Sei sicuro di voler analizzare "${title}"?'; + @override + String refreshMetadataConfirm({required Object title}) => + 'Sei sicuro di voler aggiornare i metadati per "${title}"?'; + @override + String emptyTrashConfirm({required Object title}) => + 'Sei sicuro di voler svuotare il cestino per "${title}"?'; + @override + String get manageLibraries => 'Gestisci librerie'; + @override + String get sort => 'Ordina'; + @override + String get sortBy => 'Ordina per'; + @override + String get filters => 'Filtri'; + @override + String loadingLibraryWithCount({required Object count}) => + 'Caricamento librerie... (${count} oggetti caricati)'; + @override + String get confirmActionMessage => + 'Sei sicuro di voler eseguire questa azione?'; + @override + String get showLibrary => 'Mostra libreria'; + @override + String get hideLibrary => 'Nascondi libreria'; + @override + String get libraryOptions => 'Opzioni libreria'; + @override + String get content => 'contenuto della libreria'; + @override + String get selectLibrary => 'Seleziona libreria'; + @override + String filtersWithCount({required Object count}) => 'Filtri (${count})'; + @override + String get noRecommendations => 'Nessun consiglio disponibile'; + @override + String get noCollections => 'Nessuna raccolta in questa libreria'; + @override + String get noFoldersFound => 'Nessuna cartella trovata'; + @override + String get folders => 'cartelle'; + @override + late final _StringsLibrariesTabsIt tabs = _StringsLibrariesTabsIt._(_root); + @override + late final _StringsLibrariesGroupingsIt groupings = + _StringsLibrariesGroupingsIt._(_root); } // Path: about class _StringsAboutIt implements _StringsAboutEn { - _StringsAboutIt._(this._root); + _StringsAboutIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get title => 'Informazioni'; - @override String get openSourceLicenses => 'Licenze Open Source'; - @override String versionLabel({required Object version}) => 'Versione ${version}'; - @override String get appDescription => 'Un bellissimo client Plex per Flutter'; - @override String get viewLicensesDescription => 'Visualizza le licenze delle librerie di terze parti'; + // Translations + @override + String get title => 'Informazioni'; + @override + String get openSourceLicenses => 'Licenze Open Source'; + @override + String versionLabel({required Object version}) => 'Versione ${version}'; + @override + String get appDescription => 'Un bellissimo client Plex per Flutter'; + @override + String get viewLicensesDescription => + 'Visualizza le licenze delle librerie di terze parti'; } // Path: serverSelection class _StringsServerSelectionIt implements _StringsServerSelectionEn { - _StringsServerSelectionIt._(this._root); + _StringsServerSelectionIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get connectingToServer => 'Connessione al server...'; - @override String get connectingToAllServers => 'Connessione a tutti i server...'; - @override String get connectToAllServers => 'Connetti a tutti i server'; - @override String get allServerConnectionsFailed => 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.'; - @override String foundServers({required Object count}) => 'Trovati ${count} server'; - @override String get orSelectIndividually => 'Oppure seleziona un server singolarmente:'; - @override String get serverDebugCopied => 'Dati di debug del server copiati negli appunti'; - @override String get copyDebugData => 'Copia dati di debug'; - @override String get noServersFound => 'Nessun server trovato'; - @override String malformedServerData({required Object count}) => 'Trovato ${count} server con dati difettosi. Nessun server valido disponibile.'; - @override String get incompleteServerInfo => 'Alcuni server presentano informazioni incomplete e sono stati ignorati. Controlla il tuo account Plex.tv.'; - @override String get incompleteConnectionInfo => 'Le informazioni di connessione al server sono incomplete. Riprova.'; - @override String malformedServerInfo({required Object message}) => 'Le informazioni sul server sono errate: ${message}'; - @override String get networkConnectionFailed => 'Connessione di rete non riuscita. Controlla la tua connessione Internet e riprova.'; - @override String get authenticationFailed => 'Autenticazione fallita. Effettua nuovamente l\'accesso.'; - @override String get plexServiceUnavailable => 'Servizio Plex non disponibile. Riprova più tardi.'; - @override String failedToLoadServers({required Object error}) => 'Impossibile caricare i server: ${error}'; + // Translations + @override + String get connectingToServer => 'Connessione al server...'; + @override + String get connectingToAllServers => 'Connessione a tutti i server...'; + @override + String get connectToAllServers => 'Connetti a tutti i server'; + @override + String get allServerConnectionsFailed => + 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.'; + @override + String foundServers({required Object count}) => 'Trovati ${count} server'; + @override + String get orSelectIndividually => + 'Oppure seleziona un server singolarmente:'; + @override + String get serverDebugCopied => + 'Dati di debug del server copiati negli appunti'; + @override + String get copyDebugData => 'Copia dati di debug'; + @override + String get noServersFound => 'Nessun server trovato'; + @override + String malformedServerData({required Object count}) => + 'Trovato ${count} server con dati difettosi. Nessun server valido disponibile.'; + @override + String get incompleteServerInfo => + 'Alcuni server presentano informazioni incomplete e sono stati ignorati. Controlla il tuo account Plex.tv.'; + @override + String get incompleteConnectionInfo => + 'Le informazioni di connessione al server sono incomplete. Riprova.'; + @override + String malformedServerInfo({required Object message}) => + 'Le informazioni sul server sono errate: ${message}'; + @override + String get networkConnectionFailed => + 'Connessione di rete non riuscita. Controlla la tua connessione Internet e riprova.'; + @override + String get authenticationFailed => + 'Autenticazione fallita. Effettua nuovamente l\'accesso.'; + @override + String get plexServiceUnavailable => + 'Servizio Plex non disponibile. Riprova più tardi.'; + @override + String failedToLoadServers({required Object error}) => + 'Impossibile caricare i server: ${error}'; } // Path: hubDetail class _StringsHubDetailIt implements _StringsHubDetailEn { - _StringsHubDetailIt._(this._root); + _StringsHubDetailIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get title => 'Titolo'; - @override String get releaseYear => 'Anno rilascio'; - @override String get dateAdded => 'Data aggiunta'; - @override String get rating => 'Valutazione'; - @override String get noItemsFound => 'Nessun elemento trovato'; + // Translations + @override + String get title => 'Titolo'; + @override + String get releaseYear => 'Anno rilascio'; + @override + String get dateAdded => 'Data aggiunta'; + @override + String get rating => 'Valutazione'; + @override + String get noItemsFound => 'Nessun elemento trovato'; } // Path: logs class _StringsLogsIt implements _StringsLogsEn { - _StringsLogsIt._(this._root); + _StringsLogsIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get title => 'Registro'; - @override String get clearLogs => 'Cancella log'; - @override String get copyLogs => 'Copia log'; - @override String get exportLogs => 'Esporta log'; - @override String get noLogsToShow => 'Nessun log da mostrare'; - @override String get error => 'Errore:'; - @override String get stackTrace => 'Traccia dello stack:'; + // Translations + @override + String get title => 'Registro'; + @override + String get clearLogs => 'Cancella log'; + @override + String get copyLogs => 'Copia log'; + @override + String get exportLogs => 'Esporta log'; + @override + String get noLogsToShow => 'Nessun log da mostrare'; + @override + String get error => 'Errore:'; + @override + String get stackTrace => 'Traccia dello stack:'; } // Path: licenses class _StringsLicensesIt implements _StringsLicensesEn { - _StringsLicensesIt._(this._root); + _StringsLicensesIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get relatedPackages => 'Pacchetti correlati'; - @override String get license => 'Licenza'; - @override String licenseNumber({required Object number}) => 'Licenza ${number}'; - @override String licensesCount({required Object count}) => '${count} licenze'; + // Translations + @override + String get relatedPackages => 'Pacchetti correlati'; + @override + String get license => 'Licenza'; + @override + String licenseNumber({required Object number}) => 'Licenza ${number}'; + @override + String licensesCount({required Object count}) => '${count} licenze'; } // Path: navigation class _StringsNavigationIt implements _StringsNavigationEn { - _StringsNavigationIt._(this._root); + _StringsNavigationIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get home => 'Home'; - @override String get search => 'Cerca'; - @override String get libraries => 'Librerie'; - @override String get settings => 'Impostazioni'; + // Translations + @override + String get home => 'Home'; + @override + String get search => 'Cerca'; + @override + String get libraries => 'Librerie'; + @override + String get settings => 'Impostazioni'; } // Path: playlists class _StringsPlaylistsIt implements _StringsPlaylistsEn { - _StringsPlaylistsIt._(this._root); + _StringsPlaylistsIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get title => 'Playlist'; - @override String get noPlaylists => 'Nessuna playlist trovata'; - @override String get create => 'Crea playlist'; - @override String get newPlaylist => 'Nuova playlist'; - @override String get playlistName => 'Nome playlist'; - @override String get enterPlaylistName => 'Inserisci nome playlist'; - @override String get edit => 'Modifica playlist'; - @override String get delete => 'Elimina playlist'; - @override String get addTo => 'Aggiungi a playlist'; - @override String get addItems => 'Aggiungi elementi'; - @override String get removeItem => 'Rimuovi da playlist'; - @override String get clearPlaylist => 'Svuota playlist'; - @override String get playAll => 'Riproduci tutto'; - @override String get shuffle => 'Casuale'; - @override String get smartPlaylist => 'Playlist intelligente'; - @override String get regularPlaylist => 'Playlist normale'; - @override String itemCount({required Object count}) => '${count} elementi'; - @override String get oneItem => '1 elemento'; - @override String get emptyPlaylist => 'Questa playlist è vuota'; - @override String get deleteConfirm => 'Eliminare playlist?'; - @override String deleteMessage({required Object name}) => 'Sei sicuro di voler eliminare "${name}"?'; - @override String get created => 'Playlist creata'; - @override String get updated => 'Playlist aggiornata'; - @override String get deleted => 'Playlist eliminata'; - @override String get itemAdded => 'Aggiunto alla playlist'; - @override String get itemRemoved => 'Rimosso dalla playlist'; - @override String get selectPlaylist => 'Seleziona playlist'; - @override String get createNewPlaylist => 'Crea nuova playlist'; - @override String get errorCreating => 'Errore durante la creazione della playlist'; - @override String get errorDeleting => 'Errore durante l\'eliminazione della playlist'; - @override String get errorLoading => 'Errore durante il caricamento delle playlist'; - @override String get errorAdding => 'Errore durante l\'aggiunta alla playlist'; - @override String get errorReordering => 'Errore durante il riordino dell\'elemento della playlist'; - @override String get errorRemoving => 'Errore durante la rimozione dalla playlist'; - @override String get playlist => 'Playlist'; + // Translations + @override + String get title => 'Playlist'; + @override + String get noPlaylists => 'Nessuna playlist trovata'; + @override + String get create => 'Crea playlist'; + @override + String get newPlaylist => 'Nuova playlist'; + @override + String get playlistName => 'Nome playlist'; + @override + String get enterPlaylistName => 'Inserisci nome playlist'; + @override + String get edit => 'Modifica playlist'; + @override + String get delete => 'Elimina playlist'; + @override + String get addTo => 'Aggiungi a playlist'; + @override + String get addItems => 'Aggiungi elementi'; + @override + String get removeItem => 'Rimuovi da playlist'; + @override + String get clearPlaylist => 'Svuota playlist'; + @override + String get playAll => 'Riproduci tutto'; + @override + String get shuffle => 'Casuale'; + @override + String get smartPlaylist => 'Playlist intelligente'; + @override + String get regularPlaylist => 'Playlist normale'; + @override + String itemCount({required Object count}) => '${count} elementi'; + @override + String get oneItem => '1 elemento'; + @override + String get emptyPlaylist => 'Questa playlist è vuota'; + @override + String get deleteConfirm => 'Eliminare playlist?'; + @override + String deleteMessage({required Object name}) => + 'Sei sicuro di voler eliminare "${name}"?'; + @override + String get created => 'Playlist creata'; + @override + String get updated => 'Playlist aggiornata'; + @override + String get deleted => 'Playlist eliminata'; + @override + String get itemAdded => 'Aggiunto alla playlist'; + @override + String get itemRemoved => 'Rimosso dalla playlist'; + @override + String get selectPlaylist => 'Seleziona playlist'; + @override + String get createNewPlaylist => 'Crea nuova playlist'; + @override + String get errorCreating => 'Errore durante la creazione della playlist'; + @override + String get errorDeleting => 'Errore durante l\'eliminazione della playlist'; + @override + String get errorLoading => 'Errore durante il caricamento delle playlist'; + @override + String get errorAdding => 'Errore durante l\'aggiunta alla playlist'; + @override + String get errorReordering => + 'Errore durante il riordino dell\'elemento della playlist'; + @override + String get errorRemoving => 'Errore durante la rimozione dalla playlist'; + @override + String get playlist => 'Playlist'; } // Path: collections class _StringsCollectionsIt implements _StringsCollectionsEn { - _StringsCollectionsIt._(this._root); + _StringsCollectionsIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get title => 'Raccolte'; - @override String get collection => 'Raccolta'; - @override String get empty => 'La raccolta è vuota'; - @override String get noItems => 'Nessun elemento in questa raccolta'; - @override String get unknownLibrarySection => 'Impossibile eliminare: sezione libreria sconosciuta'; - @override String get deleteCollection => 'Elimina raccolta'; - @override String deleteConfirm({required Object title}) => 'Sei sicuro di voler eliminare "${title}"? Questa azione non può essere annullata.'; - @override String get deleted => 'Raccolta eliminata'; - @override String get deleteFailed => 'Impossibile eliminare la raccolta'; - @override String deleteFailedWithError({required Object error}) => 'Impossibile eliminare la raccolta: ${error}'; - @override String failedToLoadItems({required Object error}) => 'Impossibile caricare gli elementi della raccolta: ${error}'; - @override String get addTo => 'Aggiungi alla raccolta'; - @override String get selectCollection => 'Seleziona raccolta'; - @override String get createNewCollection => 'Crea nuova raccolta'; - @override String get collectionName => 'Nome raccolta'; - @override String get enterCollectionName => 'Inserisci nome raccolta'; - @override String get addedToCollection => 'Aggiunto alla raccolta'; - @override String get errorAddingToCollection => 'Errore nell\'aggiunta alla raccolta'; - @override String get created => 'Raccolta creata'; - @override String get removeFromCollection => 'Rimuovi dalla raccolta'; - @override String removeFromCollectionConfirm({required Object title}) => 'Rimuovere "${title}" da questa raccolta?'; - @override String get removedFromCollection => 'Rimosso dalla raccolta'; - @override String get removeFromCollectionFailed => 'Impossibile rimuovere dalla raccolta'; - @override String removeFromCollectionError({required Object error}) => 'Errore durante la rimozione dalla raccolta: ${error}'; + // Translations + @override + String get title => 'Raccolte'; + @override + String get collection => 'Raccolta'; + @override + String get empty => 'La raccolta è vuota'; + @override + String get noItems => 'Nessun elemento in questa raccolta'; + @override + String get unknownLibrarySection => + 'Impossibile eliminare: sezione libreria sconosciuta'; + @override + String get deleteCollection => 'Elimina raccolta'; + @override + String deleteConfirm({required Object title}) => + 'Sei sicuro di voler eliminare "${title}"? Questa azione non può essere annullata.'; + @override + String get deleted => 'Raccolta eliminata'; + @override + String get deleteFailed => 'Impossibile eliminare la raccolta'; + @override + String deleteFailedWithError({required Object error}) => + 'Impossibile eliminare la raccolta: ${error}'; + @override + String failedToLoadItems({required Object error}) => + 'Impossibile caricare gli elementi della raccolta: ${error}'; + @override + String get addTo => 'Aggiungi alla raccolta'; + @override + String get selectCollection => 'Seleziona raccolta'; + @override + String get createNewCollection => 'Crea nuova raccolta'; + @override + String get collectionName => 'Nome raccolta'; + @override + String get enterCollectionName => 'Inserisci nome raccolta'; + @override + String get addedToCollection => 'Aggiunto alla raccolta'; + @override + String get errorAddingToCollection => 'Errore nell\'aggiunta alla raccolta'; + @override + String get created => 'Raccolta creata'; + @override + String get removeFromCollection => 'Rimuovi dalla raccolta'; + @override + String removeFromCollectionConfirm({required Object title}) => + 'Rimuovere "${title}" da questa raccolta?'; + @override + String get removedFromCollection => 'Rimosso dalla raccolta'; + @override + String get removeFromCollectionFailed => + 'Impossibile rimuovere dalla raccolta'; + @override + String removeFromCollectionError({required Object error}) => + 'Errore durante la rimozione dalla raccolta: ${error}'; } // Path: libraries.tabs class _StringsLibrariesTabsIt implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsIt._(this._root); + _StringsLibrariesTabsIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get recommended => 'Consigliati'; - @override String get browse => 'Esplora'; - @override String get collections => 'Raccolte'; - @override String get playlists => 'Playlist'; + // Translations + @override + String get recommended => 'Consigliati'; + @override + String get browse => 'Esplora'; + @override + String get collections => 'Raccolte'; + @override + String get playlists => 'Playlist'; } // Path: libraries.groupings class _StringsLibrariesGroupingsIt implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsIt._(this._root); + _StringsLibrariesGroupingsIt._(this._root); - @override final _StringsIt _root; // ignore: unused_field + @override + final _StringsIt _root; // ignore: unused_field - // Translations - @override String get all => 'Tutti'; - @override String get movies => 'Film'; - @override String get shows => 'Serie TV'; - @override String get seasons => 'Stagioni'; - @override String get episodes => 'Episodi'; - @override String get folders => 'Cartelle'; + // Translations + @override + String get all => 'Tutti'; + @override + String get movies => 'Film'; + @override + String get shows => 'Serie TV'; + @override + String get seasons => 'Stagioni'; + @override + String get episodes => 'Episodi'; + @override + String get folders => 'Cartelle'; } // Path: class _StringsNl implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsNl.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.nl, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsNl.build({ + Map? overrides, + PluralResolver? cardinalResolver, + PluralResolver? ordinalResolver, + }) : assert( + overrides == null, + 'Set "translation_overrides: true" in order to enable this feature.', + ), + $meta = TranslationMetadata( + locale: AppLocale.nl, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override final TranslationMetadata $meta; + /// Metadata for the translations of . + @override + final TranslationMetadata $meta; - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); + /// Access flat map + @override + dynamic operator [](String key) => $meta.getTranslation(key); - @override late final _StringsNl _root = this; // ignore: unused_field + @override + late final _StringsNl _root = this; // ignore: unused_field - // Translations - @override late final _StringsAppNl app = _StringsAppNl._(_root); - @override late final _StringsAuthNl auth = _StringsAuthNl._(_root); - @override late final _StringsCommonNl common = _StringsCommonNl._(_root); - @override late final _StringsScreensNl screens = _StringsScreensNl._(_root); - @override late final _StringsUpdateNl update = _StringsUpdateNl._(_root); - @override late final _StringsSettingsNl settings = _StringsSettingsNl._(_root); - @override late final _StringsSearchNl search = _StringsSearchNl._(_root); - @override late final _StringsHotkeysNl hotkeys = _StringsHotkeysNl._(_root); - @override late final _StringsPinEntryNl pinEntry = _StringsPinEntryNl._(_root); - @override late final _StringsFileInfoNl fileInfo = _StringsFileInfoNl._(_root); - @override late final _StringsMediaMenuNl mediaMenu = _StringsMediaMenuNl._(_root); - @override late final _StringsAccessibilityNl accessibility = _StringsAccessibilityNl._(_root); - @override late final _StringsTooltipsNl tooltips = _StringsTooltipsNl._(_root); - @override late final _StringsVideoControlsNl videoControls = _StringsVideoControlsNl._(_root); - @override late final _StringsUserStatusNl userStatus = _StringsUserStatusNl._(_root); - @override late final _StringsMessagesNl messages = _StringsMessagesNl._(_root); - @override late final _StringsProfileNl profile = _StringsProfileNl._(_root); - @override late final _StringsSubtitlingStylingNl subtitlingStyling = _StringsSubtitlingStylingNl._(_root); - @override late final _StringsDialogNl dialog = _StringsDialogNl._(_root); - @override late final _StringsDiscoverNl discover = _StringsDiscoverNl._(_root); - @override late final _StringsErrorsNl errors = _StringsErrorsNl._(_root); - @override late final _StringsLibrariesNl libraries = _StringsLibrariesNl._(_root); - @override late final _StringsAboutNl about = _StringsAboutNl._(_root); - @override late final _StringsServerSelectionNl serverSelection = _StringsServerSelectionNl._(_root); - @override late final _StringsHubDetailNl hubDetail = _StringsHubDetailNl._(_root); - @override late final _StringsLogsNl logs = _StringsLogsNl._(_root); - @override late final _StringsLicensesNl licenses = _StringsLicensesNl._(_root); - @override late final _StringsNavigationNl navigation = _StringsNavigationNl._(_root); - @override late final _StringsPlaylistsNl playlists = _StringsPlaylistsNl._(_root); - @override late final _StringsCollectionsNl collections = _StringsCollectionsNl._(_root); + // Translations + @override + late final _StringsAppNl app = _StringsAppNl._(_root); + @override + late final _StringsAuthNl auth = _StringsAuthNl._(_root); + @override + late final _StringsCommonNl common = _StringsCommonNl._(_root); + @override + late final _StringsScreensNl screens = _StringsScreensNl._(_root); + @override + late final _StringsUpdateNl update = _StringsUpdateNl._(_root); + @override + late final _StringsSettingsNl settings = _StringsSettingsNl._(_root); + @override + late final _StringsSearchNl search = _StringsSearchNl._(_root); + @override + late final _StringsHotkeysNl hotkeys = _StringsHotkeysNl._(_root); + @override + late final _StringsPinEntryNl pinEntry = _StringsPinEntryNl._(_root); + @override + late final _StringsFileInfoNl fileInfo = _StringsFileInfoNl._(_root); + @override + late final _StringsMediaMenuNl mediaMenu = _StringsMediaMenuNl._(_root); + @override + late final _StringsAccessibilityNl accessibility = _StringsAccessibilityNl._( + _root, + ); + @override + late final _StringsTooltipsNl tooltips = _StringsTooltipsNl._(_root); + @override + late final _StringsVideoControlsNl videoControls = _StringsVideoControlsNl._( + _root, + ); + @override + late final _StringsUserStatusNl userStatus = _StringsUserStatusNl._(_root); + @override + late final _StringsMessagesNl messages = _StringsMessagesNl._(_root); + @override + late final _StringsProfileNl profile = _StringsProfileNl._(_root); + @override + late final _StringsSubtitlingStylingNl subtitlingStyling = + _StringsSubtitlingStylingNl._(_root); + @override + late final _StringsDialogNl dialog = _StringsDialogNl._(_root); + @override + late final _StringsDiscoverNl discover = _StringsDiscoverNl._(_root); + @override + late final _StringsErrorsNl errors = _StringsErrorsNl._(_root); + @override + late final _StringsLibrariesNl libraries = _StringsLibrariesNl._(_root); + @override + late final _StringsAboutNl about = _StringsAboutNl._(_root); + @override + late final _StringsServerSelectionNl serverSelection = + _StringsServerSelectionNl._(_root); + @override + late final _StringsHubDetailNl hubDetail = _StringsHubDetailNl._(_root); + @override + late final _StringsLogsNl logs = _StringsLogsNl._(_root); + @override + late final _StringsLicensesNl licenses = _StringsLicensesNl._(_root); + @override + late final _StringsNavigationNl navigation = _StringsNavigationNl._(_root); + @override + late final _StringsPlaylistsNl playlists = _StringsPlaylistsNl._(_root); + @override + late final _StringsCollectionsNl collections = _StringsCollectionsNl._(_root); } // Path: app class _StringsAppNl implements _StringsAppEn { - _StringsAppNl._(this._root); + _StringsAppNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get title => 'Plezy'; - @override String get loading => 'Laden...'; + // Translations + @override + String get title => 'Plezy'; + @override + String get loading => 'Laden...'; } // Path: auth class _StringsAuthNl implements _StringsAuthEn { - _StringsAuthNl._(this._root); + _StringsAuthNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get signInWithPlex => 'Inloggen met Plex'; - @override String get showQRCode => 'Toon QR-code'; - @override String get cancel => 'Annuleren'; - @override String get authenticate => 'Authenticeren'; - @override String get retry => 'Opnieuw proberen'; - @override String get debugEnterToken => 'Debug: Voer Plex Token in'; - @override String get plexTokenLabel => 'Plex Authenticatietoken'; - @override String get plexTokenHint => 'Voer je Plex.tv token in'; - @override String get authenticationTimeout => 'Authenticatie verlopen. Probeer opnieuw.'; - @override String get scanQRCodeInstruction => 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.'; - @override String get waitingForAuth => 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.'; + // Translations + @override + String get signInWithPlex => 'Inloggen met Plex'; + @override + String get showQRCode => 'Toon QR-code'; + @override + String get cancel => 'Annuleren'; + @override + String get authenticate => 'Authenticeren'; + @override + String get retry => 'Opnieuw proberen'; + @override + String get debugEnterToken => 'Debug: Voer Plex Token in'; + @override + String get plexTokenLabel => 'Plex Authenticatietoken'; + @override + String get plexTokenHint => 'Voer je Plex.tv token in'; + @override + String get authenticationTimeout => + 'Authenticatie verlopen. Probeer opnieuw.'; + @override + String get scanQRCodeInstruction => + 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.'; + @override + String get waitingForAuth => + 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.'; } // Path: common class _StringsCommonNl implements _StringsCommonEn { - _StringsCommonNl._(this._root); + _StringsCommonNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get cancel => 'Annuleren'; - @override String get save => 'Opslaan'; - @override String get close => 'Sluiten'; - @override String get clear => 'Wissen'; - @override String get reset => 'Resetten'; - @override String get later => 'Later'; - @override String get submit => 'Verzenden'; - @override String get confirm => 'Bevestigen'; - @override String get retry => 'Opnieuw proberen'; - @override String get playNow => 'Nu afspelen'; - @override String get logout => 'Uitloggen'; - @override String get online => 'Online'; - @override String get offline => 'Offline'; - @override String get owned => 'Eigendom'; - @override String get shared => 'Gedeeld'; - @override String get current => 'HUIDIG'; - @override String get unknown => 'Onbekend'; - @override String get refresh => 'Vernieuwen'; - @override String get yes => 'Ja'; - @override String get no => 'Nee'; - @override String get server => 'Server'; - @override String get delete => 'Verwijderen'; - @override String get shuffle => 'Willekeurig'; - @override String get addTo => 'Toevoegen aan...'; + // Translations + @override + String get cancel => 'Annuleren'; + @override + String get save => 'Opslaan'; + @override + String get close => 'Sluiten'; + @override + String get clear => 'Wissen'; + @override + String get reset => 'Resetten'; + @override + String get later => 'Later'; + @override + String get submit => 'Verzenden'; + @override + String get confirm => 'Bevestigen'; + @override + String get retry => 'Opnieuw proberen'; + @override + String get playNow => 'Nu afspelen'; + @override + String get logout => 'Uitloggen'; + @override + String get online => 'Online'; + @override + String get offline => 'Offline'; + @override + String get owned => 'Eigendom'; + @override + String get shared => 'Gedeeld'; + @override + String get current => 'HUIDIG'; + @override + String get unknown => 'Onbekend'; + @override + String get refresh => 'Vernieuwen'; + @override + String get yes => 'Ja'; + @override + String get no => 'Nee'; + @override + String get server => 'Server'; + @override + String get delete => 'Verwijderen'; + @override + String get shuffle => 'Willekeurig'; + @override + String get addTo => 'Toevoegen aan...'; } // Path: screens class _StringsScreensNl implements _StringsScreensEn { - _StringsScreensNl._(this._root); + _StringsScreensNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get licenses => 'Licenties'; - @override String get selectServer => 'Selecteer server'; - @override String get switchProfile => 'Wissel van profiel'; - @override String get subtitleStyling => 'Ondertitel opmaak'; - @override String get search => 'Zoeken'; - @override String get logs => 'Logbestanden'; + // Translations + @override + String get licenses => 'Licenties'; + @override + String get selectServer => 'Selecteer server'; + @override + String get switchProfile => 'Wissel van profiel'; + @override + String get subtitleStyling => 'Ondertitel opmaak'; + @override + String get search => 'Zoeken'; + @override + String get logs => 'Logbestanden'; } // Path: update class _StringsUpdateNl implements _StringsUpdateEn { - _StringsUpdateNl._(this._root); + _StringsUpdateNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get available => 'Update beschikbaar'; - @override String versionAvailable({required Object version}) => 'Versie ${version} is beschikbaar'; - @override String currentVersion({required Object version}) => 'Huidig: ${version}'; - @override String get skipVersion => 'Deze versie overslaan'; - @override String get viewRelease => 'Bekijk release'; - @override String get latestVersion => 'Je hebt de nieuwste versie'; - @override String get checkFailed => 'Kon niet controleren op updates'; + // Translations + @override + String get available => 'Update beschikbaar'; + @override + String versionAvailable({required Object version}) => + 'Versie ${version} is beschikbaar'; + @override + String currentVersion({required Object version}) => 'Huidig: ${version}'; + @override + String get skipVersion => 'Deze versie overslaan'; + @override + String get viewRelease => 'Bekijk release'; + @override + String get latestVersion => 'Je hebt de nieuwste versie'; + @override + String get checkFailed => 'Kon niet controleren op updates'; } // Path: settings class _StringsSettingsNl implements _StringsSettingsEn { - _StringsSettingsNl._(this._root); + _StringsSettingsNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get title => 'Instellingen'; - @override String get language => 'Taal'; - @override String get theme => 'Thema'; - @override String get appearance => 'Uiterlijk'; - @override String get videoPlayback => 'Video afspelen'; - @override String get shufflePlay => 'Willekeurig afspelen'; - @override String get advanced => 'Geavanceerd'; - @override String get useSeasonPostersDescription => 'Toon seizoenposter in plaats van serieposter voor afleveringen'; - @override String get showHeroSectionDescription => 'Toon uitgelichte inhoud carrousel op startscherm'; - @override String get secondsLabel => 'Seconden'; - @override String get minutesLabel => 'Minuten'; - @override String get secondsShort => 's'; - @override String get minutesShort => 'm'; - @override String durationHint({required Object min, required Object max}) => 'Voer duur in (${min}-${max})'; - @override String get systemTheme => 'Systeem'; - @override String get systemThemeDescription => 'Volg systeeminstellingen'; - @override String get lightTheme => 'Licht'; - @override String get darkTheme => 'Donker'; - @override String get libraryDensity => 'Bibliotheek dichtheid'; - @override String get compact => 'Compact'; - @override String get compactDescription => 'Kleinere kaarten, meer items zichtbaar'; - @override String get normal => 'Normaal'; - @override String get normalDescription => 'Standaard grootte'; - @override String get comfortable => 'Comfortabel'; - @override String get comfortableDescription => 'Grotere kaarten, minder items zichtbaar'; - @override String get viewMode => 'Weergavemodus'; - @override String get gridView => 'Raster'; - @override String get gridViewDescription => 'Items weergeven in een rasterindeling'; - @override String get listView => 'Lijst'; - @override String get listViewDescription => 'Items weergeven in een lijstindeling'; - @override String get useSeasonPosters => 'Gebruik seizoenposters'; - @override String get showHeroSection => 'Toon hoofdsectie'; - @override String get hardwareDecoding => 'Hardware decodering'; - @override String get hardwareDecodingDescription => 'Gebruik hardware versnelling indien beschikbaar'; - @override String get bufferSize => 'Buffer grootte'; - @override String bufferSizeMB({required Object size}) => '${size}MB'; - @override String get subtitleStyling => 'Ondertitel opmaak'; - @override String get subtitleStylingDescription => 'Pas ondertitel uiterlijk aan'; - @override String get smallSkipDuration => 'Korte skip duur'; - @override String get largeSkipDuration => 'Lange skip duur'; - @override String secondsUnit({required Object seconds}) => '${seconds} seconden'; - @override String get defaultSleepTimer => 'Standaard slaap timer'; - @override String minutesUnit({required Object minutes}) => 'bij ${minutes} minuten'; - @override String get rememberTrackSelections => 'Onthoud track selecties per serie/film'; - @override String get rememberTrackSelectionsDescription => 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; - @override String get unwatchedOnly => 'Alleen ongekeken'; - @override String get unwatchedOnlyDescription => 'Alleen ongekeken afleveringen opnemen in willekeurige wachtrij'; - @override String get shuffleOrderNavigation => 'Willekeurige volgorde navigatie'; - @override String get shuffleOrderNavigationDescription => 'Volgende/vorige knoppen volgen willekeurige volgorde'; - @override String get loopShuffleQueue => 'Herhaal willekeurige wachtrij'; - @override String get loopShuffleQueueDescription => 'Start wachtrij opnieuw bij het einde'; - @override String get videoPlayerControls => 'Videospeler bediening'; - @override String get keyboardShortcuts => 'Toetsenbord sneltoetsen'; - @override String get keyboardShortcutsDescription => 'Pas toetsenbord sneltoetsen aan'; - @override String get debugLogging => 'Debug logging'; - @override String get debugLoggingDescription => 'Schakel gedetailleerde logging in voor probleemoplossing'; - @override String get viewLogs => 'Bekijk logs'; - @override String get viewLogsDescription => 'Bekijk applicatie logs'; - @override String get clearCache => 'Cache wissen'; - @override String get clearCacheDescription => 'Dit wist alle gecachte afbeeldingen en gegevens. De app kan langer duren om inhoud te laden na het wissen van de cache.'; - @override String get clearCacheSuccess => 'Cache succesvol gewist'; - @override String get resetSettings => 'Instellingen resetten'; - @override String get resetSettingsDescription => 'Dit reset alle instellingen naar hun standaard waarden. Deze actie kan niet ongedaan gemaakt worden.'; - @override String get resetSettingsSuccess => 'Instellingen succesvol gereset'; - @override String get shortcutsReset => 'Sneltoetsen gereset naar standaard'; - @override String get about => 'Over'; - @override String get aboutDescription => 'App informatie en licenties'; - @override String get updates => 'Updates'; - @override String get updateAvailable => 'Update beschikbaar'; - @override String get checkForUpdates => 'Controleer op updates'; - @override String get validationErrorEnterNumber => 'Voer een geldig nummer in'; - @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Duur moet tussen ${min} en ${max} ${unit} zijn'; - @override String shortcutAlreadyAssigned({required Object action}) => 'Sneltoets al toegewezen aan ${action}'; - @override String shortcutUpdated({required Object action}) => 'Sneltoets bijgewerkt voor ${action}'; - @override String get autoSkip => 'Automatisch Overslaan'; - @override String get autoSkipIntro => 'Intro Automatisch Overslaan'; - @override String get autoSkipIntroDescription => 'Intro-markeringen na enkele seconden automatisch overslaan'; - @override String get autoSkipCredits => 'Credits Automatisch Overslaan'; - @override String get autoSkipCreditsDescription => 'Credits automatisch overslaan en volgende aflevering afspelen'; - @override String get autoSkipDelay => 'Vertraging Automatisch Overslaan'; - @override String autoSkipDelayDescription({required Object seconds}) => '${seconds} seconden wachten voor automatisch overslaan'; + // Translations + @override + String get title => 'Instellingen'; + @override + String get language => 'Taal'; + @override + String get theme => 'Thema'; + @override + String get appearance => 'Uiterlijk'; + @override + String get videoPlayback => 'Video afspelen'; + @override + String get shufflePlay => 'Willekeurig afspelen'; + @override + String get advanced => 'Geavanceerd'; + @override + String get useSeasonPostersDescription => + 'Toon seizoenposter in plaats van serieposter voor afleveringen'; + @override + String get showHeroSectionDescription => + 'Toon uitgelichte inhoud carrousel op startscherm'; + @override + String get secondsLabel => 'Seconden'; + @override + String get minutesLabel => 'Minuten'; + @override + String get secondsShort => 's'; + @override + String get minutesShort => 'm'; + @override + String durationHint({required Object min, required Object max}) => + 'Voer duur in (${min}-${max})'; + @override + String get systemTheme => 'Systeem'; + @override + String get systemThemeDescription => 'Volg systeeminstellingen'; + @override + String get lightTheme => 'Licht'; + @override + String get darkTheme => 'Donker'; + @override + String get libraryDensity => 'Bibliotheek dichtheid'; + @override + String get compact => 'Compact'; + @override + String get compactDescription => 'Kleinere kaarten, meer items zichtbaar'; + @override + String get normal => 'Normaal'; + @override + String get normalDescription => 'Standaard grootte'; + @override + String get comfortable => 'Comfortabel'; + @override + String get comfortableDescription => + 'Grotere kaarten, minder items zichtbaar'; + @override + String get viewMode => 'Weergavemodus'; + @override + String get gridView => 'Raster'; + @override + String get gridViewDescription => 'Items weergeven in een rasterindeling'; + @override + String get listView => 'Lijst'; + @override + String get listViewDescription => 'Items weergeven in een lijstindeling'; + @override + String get useSeasonPosters => 'Gebruik seizoenposters'; + @override + String get showHeroSection => 'Toon hoofdsectie'; + @override + String get hardwareDecoding => 'Hardware decodering'; + @override + String get hardwareDecodingDescription => + 'Gebruik hardware versnelling indien beschikbaar'; + @override + String get bufferSize => 'Buffer grootte'; + @override + String bufferSizeMB({required Object size}) => '${size}MB'; + @override + String get subtitleStyling => 'Ondertitel opmaak'; + @override + String get subtitleStylingDescription => 'Pas ondertitel uiterlijk aan'; + @override + String get smallSkipDuration => 'Korte skip duur'; + @override + String get largeSkipDuration => 'Lange skip duur'; + @override + String secondsUnit({required Object seconds}) => '${seconds} seconden'; + @override + String get defaultSleepTimer => 'Standaard slaap timer'; + @override + String minutesUnit({required Object minutes}) => 'bij ${minutes} minuten'; + @override + String get rememberTrackSelections => + 'Onthoud track selecties per serie/film'; + @override + String get rememberTrackSelectionsDescription => + 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; + @override + String get unwatchedOnly => 'Alleen ongekeken'; + @override + String get unwatchedOnlyDescription => + 'Alleen ongekeken afleveringen opnemen in willekeurige wachtrij'; + @override + String get shuffleOrderNavigation => 'Willekeurige volgorde navigatie'; + @override + String get shuffleOrderNavigationDescription => + 'Volgende/vorige knoppen volgen willekeurige volgorde'; + @override + String get loopShuffleQueue => 'Herhaal willekeurige wachtrij'; + @override + String get loopShuffleQueueDescription => + 'Start wachtrij opnieuw bij het einde'; + @override + String get videoPlayerControls => 'Videospeler bediening'; + @override + String get keyboardShortcuts => 'Toetsenbord sneltoetsen'; + @override + String get keyboardShortcutsDescription => 'Pas toetsenbord sneltoetsen aan'; + @override + String get debugLogging => 'Debug logging'; + @override + String get debugLoggingDescription => + 'Schakel gedetailleerde logging in voor probleemoplossing'; + @override + String get viewLogs => 'Bekijk logs'; + @override + String get viewLogsDescription => 'Bekijk applicatie logs'; + @override + String get clearCache => 'Cache wissen'; + @override + String get clearCacheDescription => + 'Dit wist alle gecachte afbeeldingen en gegevens. De app kan langer duren om inhoud te laden na het wissen van de cache.'; + @override + String get clearCacheSuccess => 'Cache succesvol gewist'; + @override + String get resetSettings => 'Instellingen resetten'; + @override + String get resetSettingsDescription => + 'Dit reset alle instellingen naar hun standaard waarden. Deze actie kan niet ongedaan gemaakt worden.'; + @override + String get resetSettingsSuccess => 'Instellingen succesvol gereset'; + @override + String get shortcutsReset => 'Sneltoetsen gereset naar standaard'; + @override + String get about => 'Over'; + @override + String get aboutDescription => 'App informatie en licenties'; + @override + String get updates => 'Updates'; + @override + String get updateAvailable => 'Update beschikbaar'; + @override + String get checkForUpdates => 'Controleer op updates'; + @override + String get validationErrorEnterNumber => 'Voer een geldig nummer in'; + @override + String validationErrorDuration({ + required Object min, + required Object max, + required Object unit, + }) => 'Duur moet tussen ${min} en ${max} ${unit} zijn'; + @override + String shortcutAlreadyAssigned({required Object action}) => + 'Sneltoets al toegewezen aan ${action}'; + @override + String shortcutUpdated({required Object action}) => + 'Sneltoets bijgewerkt voor ${action}'; + @override + String get autoSkip => 'Automatisch Overslaan'; + @override + String get autoSkipIntro => 'Intro Automatisch Overslaan'; + @override + String get autoSkipIntroDescription => + 'Intro-markeringen na enkele seconden automatisch overslaan'; + @override + String get autoSkipCredits => 'Credits Automatisch Overslaan'; + @override + String get autoSkipCreditsDescription => + 'Credits automatisch overslaan en volgende aflevering afspelen'; + @override + String get autoSkipDelay => 'Vertraging Automatisch Overslaan'; + @override + String autoSkipDelayDescription({required Object seconds}) => + '${seconds} seconden wachten voor automatisch overslaan'; } // Path: search class _StringsSearchNl implements _StringsSearchEn { - _StringsSearchNl._(this._root); + _StringsSearchNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get hint => 'Zoek films, series, muziek...'; - @override String get tryDifferentTerm => 'Probeer een andere zoekterm'; - @override String get searchYourMedia => 'Zoek in je media'; - @override String get enterTitleActorOrKeyword => 'Voer een titel, acteur of trefwoord in'; + // Translations + @override + String get hint => 'Zoek films, series, muziek...'; + @override + String get tryDifferentTerm => 'Probeer een andere zoekterm'; + @override + String get searchYourMedia => 'Zoek in je media'; + @override + String get enterTitleActorOrKeyword => + 'Voer een titel, acteur of trefwoord in'; } // Path: hotkeys class _StringsHotkeysNl implements _StringsHotkeysEn { - _StringsHotkeysNl._(this._root); + _StringsHotkeysNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String setShortcutFor({required Object actionName}) => 'Stel sneltoets in voor ${actionName}'; - @override String get clearShortcut => 'Wis sneltoets'; + // Translations + @override + String setShortcutFor({required Object actionName}) => + 'Stel sneltoets in voor ${actionName}'; + @override + String get clearShortcut => 'Wis sneltoets'; } // Path: pinEntry class _StringsPinEntryNl implements _StringsPinEntryEn { - _StringsPinEntryNl._(this._root); + _StringsPinEntryNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get enterPin => 'Voer PIN in'; - @override String get showPin => 'Toon PIN'; - @override String get hidePin => 'Verberg PIN'; + // Translations + @override + String get enterPin => 'Voer PIN in'; + @override + String get showPin => 'Toon PIN'; + @override + String get hidePin => 'Verberg PIN'; } // Path: fileInfo class _StringsFileInfoNl implements _StringsFileInfoEn { - _StringsFileInfoNl._(this._root); + _StringsFileInfoNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get title => 'Bestand info'; - @override String get video => 'Video'; - @override String get audio => 'Audio'; - @override String get file => 'Bestand'; - @override String get advanced => 'Geavanceerd'; - @override String get codec => 'Codec'; - @override String get resolution => 'Resolutie'; - @override String get bitrate => 'Bitrate'; - @override String get frameRate => 'Frame rate'; - @override String get aspectRatio => 'Beeldverhouding'; - @override String get profile => 'Profiel'; - @override String get bitDepth => 'Bit diepte'; - @override String get colorSpace => 'Kleurruimte'; - @override String get colorRange => 'Kleurbereik'; - @override String get colorPrimaries => 'Kleurprimaires'; - @override String get chromaSubsampling => 'Chroma subsampling'; - @override String get channels => 'Kanalen'; - @override String get path => 'Pad'; - @override String get size => 'Grootte'; - @override String get container => 'Container'; - @override String get duration => 'Duur'; - @override String get optimizedForStreaming => 'Geoptimaliseerd voor streaming'; - @override String get has64bitOffsets => '64-bit Offsets'; + // Translations + @override + String get title => 'Bestand info'; + @override + String get video => 'Video'; + @override + String get audio => 'Audio'; + @override + String get file => 'Bestand'; + @override + String get advanced => 'Geavanceerd'; + @override + String get codec => 'Codec'; + @override + String get resolution => 'Resolutie'; + @override + String get bitrate => 'Bitrate'; + @override + String get frameRate => 'Frame rate'; + @override + String get aspectRatio => 'Beeldverhouding'; + @override + String get profile => 'Profiel'; + @override + String get bitDepth => 'Bit diepte'; + @override + String get colorSpace => 'Kleurruimte'; + @override + String get colorRange => 'Kleurbereik'; + @override + String get colorPrimaries => 'Kleurprimaires'; + @override + String get chromaSubsampling => 'Chroma subsampling'; + @override + String get channels => 'Kanalen'; + @override + String get path => 'Pad'; + @override + String get size => 'Grootte'; + @override + String get container => 'Container'; + @override + String get duration => 'Duur'; + @override + String get optimizedForStreaming => 'Geoptimaliseerd voor streaming'; + @override + String get has64bitOffsets => '64-bit Offsets'; } // Path: mediaMenu class _StringsMediaMenuNl implements _StringsMediaMenuEn { - _StringsMediaMenuNl._(this._root); + _StringsMediaMenuNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get markAsWatched => 'Markeer als gekeken'; - @override String get markAsUnwatched => 'Markeer als ongekeken'; - @override String get removeFromContinueWatching => 'Verwijder uit Doorgaan met kijken'; - @override String get goToSeries => 'Ga naar serie'; - @override String get goToSeason => 'Ga naar seizoen'; - @override String get shufflePlay => 'Willekeurig afspelen'; - @override String get fileInfo => 'Bestand info'; + // Translations + @override + String get markAsWatched => 'Markeer als gekeken'; + @override + String get markAsUnwatched => 'Markeer als ongekeken'; + @override + String get removeFromContinueWatching => 'Verwijder uit Doorgaan met kijken'; + @override + String get goToSeries => 'Ga naar serie'; + @override + String get goToSeason => 'Ga naar seizoen'; + @override + String get shufflePlay => 'Willekeurig afspelen'; + @override + String get fileInfo => 'Bestand info'; } // Path: accessibility class _StringsAccessibilityNl implements _StringsAccessibilityEn { - _StringsAccessibilityNl._(this._root); + _StringsAccessibilityNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String mediaCardMovie({required Object title}) => '${title}, film'; - @override String mediaCardShow({required Object title}) => '${title}, TV-serie'; - @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - @override String get mediaCardWatched => 'bekeken'; - @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent bekeken'; - @override String get mediaCardUnwatched => 'niet bekeken'; - @override String get tapToPlay => 'Tik om af te spelen'; + // Translations + @override + String mediaCardMovie({required Object title}) => '${title}, film'; + @override + String mediaCardShow({required Object title}) => '${title}, TV-serie'; + @override + String mediaCardEpisode({ + required Object title, + required Object episodeInfo, + }) => '${title}, ${episodeInfo}'; + @override + String mediaCardSeason({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + @override + String get mediaCardWatched => 'bekeken'; + @override + String mediaCardPartiallyWatched({required Object percent}) => + '${percent} procent bekeken'; + @override + String get mediaCardUnwatched => 'niet bekeken'; + @override + String get tapToPlay => 'Tik om af te spelen'; } // Path: tooltips class _StringsTooltipsNl implements _StringsTooltipsEn { - _StringsTooltipsNl._(this._root); + _StringsTooltipsNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get shufflePlay => 'Willekeurig afspelen'; - @override String get markAsWatched => 'Markeer als gekeken'; - @override String get markAsUnwatched => 'Markeer als ongekeken'; + // Translations + @override + String get shufflePlay => 'Willekeurig afspelen'; + @override + String get markAsWatched => 'Markeer als gekeken'; + @override + String get markAsUnwatched => 'Markeer als ongekeken'; } // Path: videoControls class _StringsVideoControlsNl implements _StringsVideoControlsEn { - _StringsVideoControlsNl._(this._root); + _StringsVideoControlsNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get audioLabel => 'Audio'; - @override String get subtitlesLabel => 'Ondertitels'; - @override String get resetToZero => 'Reset naar 0ms'; - @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - @override String playsLater({required Object label}) => '${label} speelt later af'; - @override String playsEarlier({required Object label}) => '${label} speelt eerder af'; - @override String get noOffset => 'Geen offset'; - @override String get letterbox => 'Letterbox'; - @override String get fillScreen => 'Vul scherm'; - @override String get stretch => 'Uitrekken'; - @override String get lockRotation => 'Vergrendel rotatie'; - @override String get unlockRotation => 'Ontgrendel rotatie'; - @override String get sleepTimer => 'Slaaptimer'; - @override String get timerActive => 'Timer actief'; - @override String playbackWillPauseIn({required Object duration}) => 'Afspelen wordt gepauzeerd over ${duration}'; - @override String get sleepTimerCompleted => 'Slaaptimer voltooid - afspelen gepauzeerd'; - @override String get playButton => 'Afspelen'; - @override String get pauseButton => 'Pauzeren'; - @override String seekBackwardButton({required Object seconds}) => 'Terugspoelen ${seconds} seconden'; - @override String seekForwardButton({required Object seconds}) => 'Vooruitspoelen ${seconds} seconden'; - @override String get previousButton => 'Vorige aflevering'; - @override String get nextButton => 'Volgende aflevering'; - @override String get previousChapterButton => 'Vorig hoofdstuk'; - @override String get nextChapterButton => 'Volgend hoofdstuk'; - @override String get volumeButton => 'Volume'; - @override String get muteButton => 'Dempen'; - @override String get unmuteButton => 'Dempen opheffen'; - @override String get settingsButton => 'Video-instellingen'; - @override String get audioTrackButton => 'Audiosporen'; - @override String get subtitlesButton => 'Ondertitels'; - @override String get chaptersButton => 'Hoofdstukken'; - @override String get versionsButton => 'Videoversies'; - @override String get aspectRatioButton => 'Beeldverhouding'; - @override String get fullscreenButton => 'Volledig scherm activeren'; - @override String get exitFullscreenButton => 'Volledig scherm verlaten'; - @override String get rotationLockButton => 'Rotatievergrendeling'; - @override String get timelineSlider => 'Videotijdlijn'; - @override String get volumeSlider => 'Volumeniveau'; - @override String get backButton => 'Terug'; + // Translations + @override + String get audioLabel => 'Audio'; + @override + String get subtitlesLabel => 'Ondertitels'; + @override + String get resetToZero => 'Reset naar 0ms'; + @override + String addTime({required Object amount, required Object unit}) => + '+${amount}${unit}'; + @override + String minusTime({required Object amount, required Object unit}) => + '-${amount}${unit}'; + @override + String playsLater({required Object label}) => '${label} speelt later af'; + @override + String playsEarlier({required Object label}) => '${label} speelt eerder af'; + @override + String get noOffset => 'Geen offset'; + @override + String get letterbox => 'Letterbox'; + @override + String get fillScreen => 'Vul scherm'; + @override + String get stretch => 'Uitrekken'; + @override + String get lockRotation => 'Vergrendel rotatie'; + @override + String get unlockRotation => 'Ontgrendel rotatie'; + @override + String get sleepTimer => 'Slaaptimer'; + @override + String get timerActive => 'Timer actief'; + @override + String playbackWillPauseIn({required Object duration}) => + 'Afspelen wordt gepauzeerd over ${duration}'; + @override + String get sleepTimerCompleted => 'Slaaptimer voltooid - afspelen gepauzeerd'; + @override + String get playButton => 'Afspelen'; + @override + String get pauseButton => 'Pauzeren'; + @override + String seekBackwardButton({required Object seconds}) => + 'Terugspoelen ${seconds} seconden'; + @override + String seekForwardButton({required Object seconds}) => + 'Vooruitspoelen ${seconds} seconden'; + @override + String get previousButton => 'Vorige aflevering'; + @override + String get nextButton => 'Volgende aflevering'; + @override + String get previousChapterButton => 'Vorig hoofdstuk'; + @override + String get nextChapterButton => 'Volgend hoofdstuk'; + @override + String get volumeButton => 'Volume'; + @override + String get muteButton => 'Dempen'; + @override + String get unmuteButton => 'Dempen opheffen'; + @override + String get settingsButton => 'Video-instellingen'; + @override + String get audioTrackButton => 'Audiosporen'; + @override + String get subtitlesButton => 'Ondertitels'; + @override + String get chaptersButton => 'Hoofdstukken'; + @override + String get versionsButton => 'Videoversies'; + @override + String get aspectRatioButton => 'Beeldverhouding'; + @override + String get fullscreenButton => 'Volledig scherm activeren'; + @override + String get exitFullscreenButton => 'Volledig scherm verlaten'; + @override + String get rotationLockButton => 'Rotatievergrendeling'; + @override + String get timelineSlider => 'Videotijdlijn'; + @override + String get volumeSlider => 'Volumeniveau'; + @override + String get backButton => 'Terug'; } // Path: userStatus class _StringsUserStatusNl implements _StringsUserStatusEn { - _StringsUserStatusNl._(this._root); + _StringsUserStatusNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get admin => 'Beheerder'; - @override String get restricted => 'Beperkt'; - @override String get protected => 'Beschermd'; - @override String get current => 'HUIDIG'; + // Translations + @override + String get admin => 'Beheerder'; + @override + String get restricted => 'Beperkt'; + @override + String get protected => 'Beschermd'; + @override + String get current => 'HUIDIG'; } // Path: messages class _StringsMessagesNl implements _StringsMessagesEn { - _StringsMessagesNl._(this._root); + _StringsMessagesNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get markedAsWatched => 'Gemarkeerd als gekeken'; - @override String get markedAsUnwatched => 'Gemarkeerd als ongekeken'; - @override String get removedFromContinueWatching => 'Verwijderd uit Doorgaan met kijken'; - @override String errorLoading({required Object error}) => 'Fout: ${error}'; - @override String get fileInfoNotAvailable => 'Bestand informatie niet beschikbaar'; - @override String errorLoadingFileInfo({required Object error}) => 'Fout bij laden bestand info: ${error}'; - @override String get errorLoadingSeries => 'Fout bij laden serie'; - @override String get errorLoadingSeason => 'Fout bij laden seizoen'; - @override String get musicNotSupported => 'Muziek afspelen wordt nog niet ondersteund'; - @override String get logsCleared => 'Logs gewist'; - @override String get logsCopied => 'Logs gekopieerd naar klembord'; - @override String get noLogsAvailable => 'Geen logs beschikbaar'; - @override String libraryScanning({required Object title}) => 'Scannen "${title}"...'; - @override String libraryScanStarted({required Object title}) => 'Bibliotheek scan gestart voor "${title}"'; - @override String libraryScanFailed({required Object error}) => 'Kon bibliotheek niet scannen: ${error}'; - @override String metadataRefreshing({required Object title}) => 'Metadata vernieuwen voor "${title}"...'; - @override String metadataRefreshStarted({required Object title}) => 'Metadata vernieuwen gestart voor "${title}"'; - @override String metadataRefreshFailed({required Object error}) => 'Kon metadata niet vernieuwen: ${error}'; - @override String get noPlexToken => 'Geen Plex token gevonden. Log opnieuw in.'; - @override String get logoutConfirm => 'Weet je zeker dat je wilt uitloggen?'; - @override String get noSeasonsFound => 'Geen seizoenen gevonden'; - @override String get noEpisodesFound => 'Geen afleveringen gevonden in eerste seizoen'; - @override String get noEpisodesFoundGeneral => 'Geen afleveringen gevonden'; - @override String get noResultsFound => 'Geen resultaten gevonden'; - @override String sleepTimerSet({required Object label}) => 'Slaap timer ingesteld voor ${label}'; - @override String failedToSwitchProfile({required Object displayName}) => 'Kon niet wisselen naar ${displayName}'; - @override String get noItemsAvailable => 'Geen items beschikbaar'; - @override String get failedToCreatePlayQueue => 'Kan afspeelwachtrij niet maken'; - @override String get failedToCreatePlayQueueNoItems => 'Kan afspeelwachtrij niet maken - geen items'; - @override String failedPlayback({required Object action, required Object error}) => 'Afspelen van ${action} mislukt: ${error}'; + // Translations + @override + String get markedAsWatched => 'Gemarkeerd als gekeken'; + @override + String get markedAsUnwatched => 'Gemarkeerd als ongekeken'; + @override + String get removedFromContinueWatching => + 'Verwijderd uit Doorgaan met kijken'; + @override + String errorLoading({required Object error}) => 'Fout: ${error}'; + @override + String get fileInfoNotAvailable => 'Bestand informatie niet beschikbaar'; + @override + String errorLoadingFileInfo({required Object error}) => + 'Fout bij laden bestand info: ${error}'; + @override + String get errorLoadingSeries => 'Fout bij laden serie'; + @override + String get errorLoadingSeason => 'Fout bij laden seizoen'; + @override + String get musicNotSupported => 'Muziek afspelen wordt nog niet ondersteund'; + @override + String get logsCleared => 'Logs gewist'; + @override + String get logsCopied => 'Logs gekopieerd naar klembord'; + @override + String get noLogsAvailable => 'Geen logs beschikbaar'; + @override + String libraryScanning({required Object title}) => 'Scannen "${title}"...'; + @override + String libraryScanStarted({required Object title}) => + 'Bibliotheek scan gestart voor "${title}"'; + @override + String libraryScanFailed({required Object error}) => + 'Kon bibliotheek niet scannen: ${error}'; + @override + String metadataRefreshing({required Object title}) => + 'Metadata vernieuwen voor "${title}"...'; + @override + String metadataRefreshStarted({required Object title}) => + 'Metadata vernieuwen gestart voor "${title}"'; + @override + String metadataRefreshFailed({required Object error}) => + 'Kon metadata niet vernieuwen: ${error}'; + @override + String get noPlexToken => 'Geen Plex token gevonden. Log opnieuw in.'; + @override + String get logoutConfirm => 'Weet je zeker dat je wilt uitloggen?'; + @override + String get noSeasonsFound => 'Geen seizoenen gevonden'; + @override + String get noEpisodesFound => 'Geen afleveringen gevonden in eerste seizoen'; + @override + String get noEpisodesFoundGeneral => 'Geen afleveringen gevonden'; + @override + String get noResultsFound => 'Geen resultaten gevonden'; + @override + String sleepTimerSet({required Object label}) => + 'Slaap timer ingesteld voor ${label}'; + @override + String failedToSwitchProfile({required Object displayName}) => + 'Kon niet wisselen naar ${displayName}'; + @override + String get noItemsAvailable => 'Geen items beschikbaar'; + @override + String get failedToCreatePlayQueue => 'Kan afspeelwachtrij niet maken'; + @override + String get failedToCreatePlayQueueNoItems => + 'Kan afspeelwachtrij niet maken - geen items'; + @override + String failedPlayback({required Object action, required Object error}) => + 'Afspelen van ${action} mislukt: ${error}'; } // Path: profile class _StringsProfileNl implements _StringsProfileEn { - _StringsProfileNl._(this._root); + _StringsProfileNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get noUsersAvailable => 'Geen gebruikers beschikbaar'; + // Translations + @override + String get noUsersAvailable => 'Geen gebruikers beschikbaar'; } // Path: subtitlingStyling class _StringsSubtitlingStylingNl implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingNl._(this._root); + _StringsSubtitlingStylingNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get stylingOptions => 'Opmaak opties'; - @override String get fontSize => 'Lettergrootte'; - @override String get textColor => 'Tekstkleur'; - @override String get borderSize => 'Rand grootte'; - @override String get borderColor => 'Randkleur'; - @override String get backgroundOpacity => 'Achtergrond transparantie'; - @override String get backgroundColor => 'Achtergrondkleur'; + // Translations + @override + String get stylingOptions => 'Opmaak opties'; + @override + String get fontSize => 'Lettergrootte'; + @override + String get textColor => 'Tekstkleur'; + @override + String get borderSize => 'Rand grootte'; + @override + String get borderColor => 'Randkleur'; + @override + String get backgroundOpacity => 'Achtergrond transparantie'; + @override + String get backgroundColor => 'Achtergrondkleur'; } // Path: dialog class _StringsDialogNl implements _StringsDialogEn { - _StringsDialogNl._(this._root); + _StringsDialogNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get confirmAction => 'Bevestig actie'; - @override String get areYouSure => 'Weet je zeker dat je deze actie wilt uitvoeren?'; - @override String get cancel => 'Annuleren'; - @override String get playNow => 'Nu afspelen'; + // Translations + @override + String get confirmAction => 'Bevestig actie'; + @override + String get areYouSure => 'Weet je zeker dat je deze actie wilt uitvoeren?'; + @override + String get cancel => 'Annuleren'; + @override + String get playNow => 'Nu afspelen'; } // Path: discover class _StringsDiscoverNl implements _StringsDiscoverEn { - _StringsDiscoverNl._(this._root); + _StringsDiscoverNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get title => 'Ontdekken'; - @override String get switchProfile => 'Wissel van profiel'; - @override String get switchServer => 'Wissel van server'; - @override String get logout => 'Uitloggen'; - @override String get noContentAvailable => 'Geen inhoud beschikbaar'; - @override String get addMediaToLibraries => 'Voeg wat media toe aan je bibliotheken'; - @override String get continueWatching => 'Verder kijken'; - @override String get recentlyAdded => 'Recent toegevoegd'; - @override String get play => 'Afspelen'; - @override String get resume => 'Hervatten'; - @override String playEpisode({required Object season, required Object episode}) => 'Speel S${season}, E${episode}'; - @override String resumeEpisode({required Object season, required Object episode}) => 'Hervat S${season}, E${episode}'; - @override String get pause => 'Pauzeren'; - @override String get overview => 'Overzicht'; - @override String get cast => 'Acteurs'; - @override String get seasons => 'Seizoenen'; - @override String get studio => 'Studio'; - @override String get rating => 'Leeftijd'; - @override String get watched => 'Bekeken'; - @override String episodeCount({required Object count}) => '${count} afleveringen'; - @override String watchedProgress({required Object watched, required Object total}) => '${watched}/${total} gekeken'; - @override String get movie => 'Film'; - @override String get tvShow => 'TV Serie'; - @override String minutesLeft({required Object minutes}) => '${minutes} min over'; + // Translations + @override + String get title => 'Ontdekken'; + @override + String get switchProfile => 'Wissel van profiel'; + @override + String get switchServer => 'Wissel van server'; + @override + String get logout => 'Uitloggen'; + @override + String get noContentAvailable => 'Geen inhoud beschikbaar'; + @override + String get addMediaToLibraries => 'Voeg wat media toe aan je bibliotheken'; + @override + String get continueWatching => 'Verder kijken'; + @override + String get recentlyAdded => 'Recent toegevoegd'; + @override + String get play => 'Afspelen'; + @override + String get resume => 'Hervatten'; + @override + String playEpisode({required Object season, required Object episode}) => + 'Speel S${season}, E${episode}'; + @override + String resumeEpisode({required Object season, required Object episode}) => + 'Hervat S${season}, E${episode}'; + @override + String get pause => 'Pauzeren'; + @override + String get overview => 'Overzicht'; + @override + String get cast => 'Acteurs'; + @override + String get seasons => 'Seizoenen'; + @override + String get studio => 'Studio'; + @override + String get rating => 'Leeftijd'; + @override + String get watched => 'Bekeken'; + @override + String episodeCount({required Object count}) => '${count} afleveringen'; + @override + String watchedProgress({required Object watched, required Object total}) => + '${watched}/${total} gekeken'; + @override + String get movie => 'Film'; + @override + String get tvShow => 'TV Serie'; + @override + String minutesLeft({required Object minutes}) => '${minutes} min over'; } // Path: errors class _StringsErrorsNl implements _StringsErrorsEn { - _StringsErrorsNl._(this._root); + _StringsErrorsNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String searchFailed({required Object error}) => 'Zoeken mislukt: ${error}'; - @override String connectionTimeout({required Object context}) => 'Verbinding time-out tijdens laden ${context}'; - @override String get connectionFailed => 'Kan geen verbinding maken met Plex server'; - @override String failedToLoad({required Object context, required Object error}) => 'Kon ${context} niet laden: ${error}'; - @override String get noClientAvailable => 'Geen client beschikbaar'; - @override String authenticationFailed({required Object error}) => 'Authenticatie mislukt: ${error}'; - @override String get couldNotLaunchUrl => 'Kon auth URL niet openen'; - @override String get pleaseEnterToken => 'Voer een token in'; - @override String get invalidToken => 'Ongeldig token'; - @override String failedToVerifyToken({required Object error}) => 'Kon token niet verifiëren: ${error}'; - @override String failedToSwitchProfile({required Object displayName}) => 'Kon niet wisselen naar ${displayName}'; - @override String get connectionFailedGeneric => 'Verbinding mislukt'; + // Translations + @override + String searchFailed({required Object error}) => 'Zoeken mislukt: ${error}'; + @override + String connectionTimeout({required Object context}) => + 'Verbinding time-out tijdens laden ${context}'; + @override + String get connectionFailed => 'Kan geen verbinding maken met Plex server'; + @override + String failedToLoad({required Object context, required Object error}) => + 'Kon ${context} niet laden: ${error}'; + @override + String get noClientAvailable => 'Geen client beschikbaar'; + @override + String authenticationFailed({required Object error}) => + 'Authenticatie mislukt: ${error}'; + @override + String get couldNotLaunchUrl => 'Kon auth URL niet openen'; + @override + String get pleaseEnterToken => 'Voer een token in'; + @override + String get invalidToken => 'Ongeldig token'; + @override + String failedToVerifyToken({required Object error}) => + 'Kon token niet verifiëren: ${error}'; + @override + String failedToSwitchProfile({required Object displayName}) => + 'Kon niet wisselen naar ${displayName}'; + @override + String get connectionFailedGeneric => 'Verbinding mislukt'; } // Path: libraries class _StringsLibrariesNl implements _StringsLibrariesEn { - _StringsLibrariesNl._(this._root); + _StringsLibrariesNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get title => 'Bibliotheken'; - @override String get scanLibraryFiles => 'Scan bibliotheek bestanden'; - @override String get scanLibrary => 'Scan bibliotheek'; - @override String get analyze => 'Analyseren'; - @override String get analyzeLibrary => 'Analyseer bibliotheek'; - @override String get refreshMetadata => 'Vernieuw metadata'; - @override String get emptyTrash => 'Prullenbak legen'; - @override String emptyingTrash({required Object title}) => 'Prullenbak legen voor "${title}"...'; - @override String trashEmptied({required Object title}) => 'Prullenbak geleegd voor "${title}"'; - @override String failedToEmptyTrash({required Object error}) => 'Kon prullenbak niet legen: ${error}'; - @override String analyzing({required Object title}) => 'Analyseren "${title}"...'; - @override String analysisStarted({required Object title}) => 'Analyse gestart voor "${title}"'; - @override String failedToAnalyze({required Object error}) => 'Kon bibliotheek niet analyseren: ${error}'; - @override String get noLibrariesFound => 'Geen bibliotheken gevonden'; - @override String get thisLibraryIsEmpty => 'Deze bibliotheek is leeg'; - @override String get all => 'Alles'; - @override String get clearAll => 'Alles wissen'; - @override String scanLibraryConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt scannen?'; - @override String analyzeLibraryConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt analyseren?'; - @override String refreshMetadataConfirm({required Object title}) => 'Weet je zeker dat je metadata wilt vernieuwen voor "${title}"?'; - @override String emptyTrashConfirm({required Object title}) => 'Weet je zeker dat je de prullenbak wilt legen voor "${title}"?'; - @override String get manageLibraries => 'Beheer bibliotheken'; - @override String get sort => 'Sorteren'; - @override String get sortBy => 'Sorteer op'; - @override String get filters => 'Filters'; - @override String loadingLibraryWithCount({required Object count}) => 'Bibliotheek laden... (${count} items geladen)'; - @override String get confirmActionMessage => 'Weet je zeker dat je deze actie wilt uitvoeren?'; - @override String get showLibrary => 'Toon bibliotheek'; - @override String get hideLibrary => 'Verberg bibliotheek'; - @override String get libraryOptions => 'Bibliotheek opties'; - @override String get content => 'bibliotheekinhoud'; - @override String get selectLibrary => 'Bibliotheek kiezen'; - @override String filtersWithCount({required Object count}) => 'Filters (${count})'; - @override String get noRecommendations => 'Geen aanbevelingen beschikbaar'; - @override String get noCollections => 'Geen collecties in deze bibliotheek'; - @override String get noFoldersFound => 'Geen mappen gevonden'; - @override String get folders => 'mappen'; - @override late final _StringsLibrariesTabsNl tabs = _StringsLibrariesTabsNl._(_root); - @override late final _StringsLibrariesGroupingsNl groupings = _StringsLibrariesGroupingsNl._(_root); + // Translations + @override + String get title => 'Bibliotheken'; + @override + String get scanLibraryFiles => 'Scan bibliotheek bestanden'; + @override + String get scanLibrary => 'Scan bibliotheek'; + @override + String get analyze => 'Analyseren'; + @override + String get analyzeLibrary => 'Analyseer bibliotheek'; + @override + String get refreshMetadata => 'Vernieuw metadata'; + @override + String get emptyTrash => 'Prullenbak legen'; + @override + String emptyingTrash({required Object title}) => + 'Prullenbak legen voor "${title}"...'; + @override + String trashEmptied({required Object title}) => + 'Prullenbak geleegd voor "${title}"'; + @override + String failedToEmptyTrash({required Object error}) => + 'Kon prullenbak niet legen: ${error}'; + @override + String analyzing({required Object title}) => 'Analyseren "${title}"...'; + @override + String analysisStarted({required Object title}) => + 'Analyse gestart voor "${title}"'; + @override + String failedToAnalyze({required Object error}) => + 'Kon bibliotheek niet analyseren: ${error}'; + @override + String get noLibrariesFound => 'Geen bibliotheken gevonden'; + @override + String get thisLibraryIsEmpty => 'Deze bibliotheek is leeg'; + @override + String get all => 'Alles'; + @override + String get clearAll => 'Alles wissen'; + @override + String scanLibraryConfirm({required Object title}) => + 'Weet je zeker dat je "${title}" wilt scannen?'; + @override + String analyzeLibraryConfirm({required Object title}) => + 'Weet je zeker dat je "${title}" wilt analyseren?'; + @override + String refreshMetadataConfirm({required Object title}) => + 'Weet je zeker dat je metadata wilt vernieuwen voor "${title}"?'; + @override + String emptyTrashConfirm({required Object title}) => + 'Weet je zeker dat je de prullenbak wilt legen voor "${title}"?'; + @override + String get manageLibraries => 'Beheer bibliotheken'; + @override + String get sort => 'Sorteren'; + @override + String get sortBy => 'Sorteer op'; + @override + String get filters => 'Filters'; + @override + String loadingLibraryWithCount({required Object count}) => + 'Bibliotheek laden... (${count} items geladen)'; + @override + String get confirmActionMessage => + 'Weet je zeker dat je deze actie wilt uitvoeren?'; + @override + String get showLibrary => 'Toon bibliotheek'; + @override + String get hideLibrary => 'Verberg bibliotheek'; + @override + String get libraryOptions => 'Bibliotheek opties'; + @override + String get content => 'bibliotheekinhoud'; + @override + String get selectLibrary => 'Bibliotheek kiezen'; + @override + String filtersWithCount({required Object count}) => 'Filters (${count})'; + @override + String get noRecommendations => 'Geen aanbevelingen beschikbaar'; + @override + String get noCollections => 'Geen collecties in deze bibliotheek'; + @override + String get noFoldersFound => 'Geen mappen gevonden'; + @override + String get folders => 'mappen'; + @override + late final _StringsLibrariesTabsNl tabs = _StringsLibrariesTabsNl._(_root); + @override + late final _StringsLibrariesGroupingsNl groupings = + _StringsLibrariesGroupingsNl._(_root); } // Path: about class _StringsAboutNl implements _StringsAboutEn { - _StringsAboutNl._(this._root); + _StringsAboutNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get title => 'Over'; - @override String get openSourceLicenses => 'Open Source licenties'; - @override String versionLabel({required Object version}) => 'Versie ${version}'; - @override String get appDescription => 'Een mooie Plex client voor Flutter'; - @override String get viewLicensesDescription => 'Bekijk licenties van third-party bibliotheken'; + // Translations + @override + String get title => 'Over'; + @override + String get openSourceLicenses => 'Open Source licenties'; + @override + String versionLabel({required Object version}) => 'Versie ${version}'; + @override + String get appDescription => 'Een mooie Plex client voor Flutter'; + @override + String get viewLicensesDescription => + 'Bekijk licenties van third-party bibliotheken'; } // Path: serverSelection class _StringsServerSelectionNl implements _StringsServerSelectionEn { - _StringsServerSelectionNl._(this._root); + _StringsServerSelectionNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get connectingToServer => 'Verbinden met server...'; - @override String get connectingToAllServers => 'Verbinden met alle servers...'; - @override String get connectToAllServers => 'Verbind met alle servers'; - @override String get allServerConnectionsFailed => 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.'; - @override String foundServers({required Object count}) => '${count} server(s) gevonden'; - @override String get orSelectIndividually => 'Of selecteer een server individueel:'; - @override String get serverDebugCopied => 'Server debug gegevens gekopieerd naar klembord'; - @override String get copyDebugData => 'Kopieer debug gegevens'; - @override String get noServersFound => 'Geen servers gevonden'; - @override String malformedServerData({required Object count}) => '${count} server(s) gevonden met verkeerde data. Geen geldige servers beschikbaar.'; - @override String get incompleteServerInfo => 'Sommige servers hebben incomplete informatie en zijn overgeslagen. Controleer je Plex.tv account.'; - @override String get incompleteConnectionInfo => 'Server verbinding informatie is incompleet. Probeer opnieuw.'; - @override String malformedServerInfo({required Object message}) => 'Server informatie is verkeerd geformatteerd: ${message}'; - @override String get networkConnectionFailed => 'Netwerkverbinding mislukt. Controleer je internetverbinding en probeer opnieuw.'; - @override String get authenticationFailed => 'Authenticatie mislukt. Log opnieuw in.'; - @override String get plexServiceUnavailable => 'Plex service niet beschikbaar. Probeer later opnieuw.'; - @override String failedToLoadServers({required Object error}) => 'Kon servers niet laden: ${error}'; + // Translations + @override + String get connectingToServer => 'Verbinden met server...'; + @override + String get connectingToAllServers => 'Verbinden met alle servers...'; + @override + String get connectToAllServers => 'Verbind met alle servers'; + @override + String get allServerConnectionsFailed => + 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.'; + @override + String foundServers({required Object count}) => '${count} server(s) gevonden'; + @override + String get orSelectIndividually => 'Of selecteer een server individueel:'; + @override + String get serverDebugCopied => + 'Server debug gegevens gekopieerd naar klembord'; + @override + String get copyDebugData => 'Kopieer debug gegevens'; + @override + String get noServersFound => 'Geen servers gevonden'; + @override + String malformedServerData({required Object count}) => + '${count} server(s) gevonden met verkeerde data. Geen geldige servers beschikbaar.'; + @override + String get incompleteServerInfo => + 'Sommige servers hebben incomplete informatie en zijn overgeslagen. Controleer je Plex.tv account.'; + @override + String get incompleteConnectionInfo => + 'Server verbinding informatie is incompleet. Probeer opnieuw.'; + @override + String malformedServerInfo({required Object message}) => + 'Server informatie is verkeerd geformatteerd: ${message}'; + @override + String get networkConnectionFailed => + 'Netwerkverbinding mislukt. Controleer je internetverbinding en probeer opnieuw.'; + @override + String get authenticationFailed => 'Authenticatie mislukt. Log opnieuw in.'; + @override + String get plexServiceUnavailable => + 'Plex service niet beschikbaar. Probeer later opnieuw.'; + @override + String failedToLoadServers({required Object error}) => + 'Kon servers niet laden: ${error}'; } // Path: hubDetail class _StringsHubDetailNl implements _StringsHubDetailEn { - _StringsHubDetailNl._(this._root); + _StringsHubDetailNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get title => 'Titel'; - @override String get releaseYear => 'Uitgavejaar'; - @override String get dateAdded => 'Datum toegevoegd'; - @override String get rating => 'Beoordeling'; - @override String get noItemsFound => 'Geen items gevonden'; + // Translations + @override + String get title => 'Titel'; + @override + String get releaseYear => 'Uitgavejaar'; + @override + String get dateAdded => 'Datum toegevoegd'; + @override + String get rating => 'Beoordeling'; + @override + String get noItemsFound => 'Geen items gevonden'; } // Path: logs class _StringsLogsNl implements _StringsLogsEn { - _StringsLogsNl._(this._root); + _StringsLogsNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get title => 'Logbestanden'; - @override String get clearLogs => 'Wis logs'; - @override String get copyLogs => 'Kopieer logs'; - @override String get exportLogs => 'Exporteer logs'; - @override String get noLogsToShow => 'Geen logs om te tonen'; - @override String get error => 'Fout:'; - @override String get stackTrace => 'Stacktracering:'; + // Translations + @override + String get title => 'Logbestanden'; + @override + String get clearLogs => 'Wis logs'; + @override + String get copyLogs => 'Kopieer logs'; + @override + String get exportLogs => 'Exporteer logs'; + @override + String get noLogsToShow => 'Geen logs om te tonen'; + @override + String get error => 'Fout:'; + @override + String get stackTrace => 'Stacktracering:'; } // Path: licenses class _StringsLicensesNl implements _StringsLicensesEn { - _StringsLicensesNl._(this._root); + _StringsLicensesNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get relatedPackages => 'Gerelateerde pakketten'; - @override String get license => 'Licentie'; - @override String licenseNumber({required Object number}) => 'Licentie ${number}'; - @override String licensesCount({required Object count}) => '${count} licenties'; + // Translations + @override + String get relatedPackages => 'Gerelateerde pakketten'; + @override + String get license => 'Licentie'; + @override + String licenseNumber({required Object number}) => 'Licentie ${number}'; + @override + String licensesCount({required Object count}) => '${count} licenties'; } // Path: navigation class _StringsNavigationNl implements _StringsNavigationEn { - _StringsNavigationNl._(this._root); + _StringsNavigationNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get home => 'Thuis'; - @override String get search => 'Zoeken'; - @override String get libraries => 'Bibliotheken'; - @override String get settings => 'Instellingen'; + // Translations + @override + String get home => 'Thuis'; + @override + String get search => 'Zoeken'; + @override + String get libraries => 'Bibliotheken'; + @override + String get settings => 'Instellingen'; } // Path: playlists class _StringsPlaylistsNl implements _StringsPlaylistsEn { - _StringsPlaylistsNl._(this._root); + _StringsPlaylistsNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get title => 'Afspeellijsten'; - @override String get noPlaylists => 'Geen afspeellijsten gevonden'; - @override String get create => 'Afspeellijst maken'; - @override String get newPlaylist => 'Nieuwe afspeellijst'; - @override String get playlistName => 'Naam afspeellijst'; - @override String get enterPlaylistName => 'Voer naam afspeellijst in'; - @override String get edit => 'Afspeellijst bewerken'; - @override String get delete => 'Afspeellijst verwijderen'; - @override String get addTo => 'Toevoegen aan afspeellijst'; - @override String get addItems => 'Items toevoegen'; - @override String get removeItem => 'Verwijderen uit afspeellijst'; - @override String get clearPlaylist => 'Afspeellijst wissen'; - @override String get playAll => 'Alles afspelen'; - @override String get shuffle => 'Willekeurig'; - @override String get smartPlaylist => 'Slimme afspeellijst'; - @override String get regularPlaylist => 'Normale afspeellijst'; - @override String itemCount({required Object count}) => '${count} items'; - @override String get oneItem => '1 item'; - @override String get emptyPlaylist => 'Deze afspeellijst is leeg'; - @override String get deleteConfirm => 'Afspeellijst verwijderen?'; - @override String deleteMessage({required Object name}) => 'Weet je zeker dat je "${name}" wilt verwijderen?'; - @override String get created => 'Afspeellijst gemaakt'; - @override String get updated => 'Afspeellijst bijgewerkt'; - @override String get deleted => 'Afspeellijst verwijderd'; - @override String get itemAdded => 'Toegevoegd aan afspeellijst'; - @override String get itemRemoved => 'Verwijderd uit afspeellijst'; - @override String get selectPlaylist => 'Selecteer afspeellijst'; - @override String get createNewPlaylist => 'Nieuwe afspeellijst maken'; - @override String get errorCreating => 'Fout bij maken afspeellijst'; - @override String get errorDeleting => 'Fout bij verwijderen afspeellijst'; - @override String get errorLoading => 'Fout bij laden afspeellijsten'; - @override String get errorAdding => 'Fout bij toevoegen aan afspeellijst'; - @override String get errorReordering => 'Fout bij herschikken van afspeellijstitem'; - @override String get errorRemoving => 'Fout bij verwijderen uit afspeellijst'; - @override String get playlist => 'Afspeellijst'; + // Translations + @override + String get title => 'Afspeellijsten'; + @override + String get noPlaylists => 'Geen afspeellijsten gevonden'; + @override + String get create => 'Afspeellijst maken'; + @override + String get newPlaylist => 'Nieuwe afspeellijst'; + @override + String get playlistName => 'Naam afspeellijst'; + @override + String get enterPlaylistName => 'Voer naam afspeellijst in'; + @override + String get edit => 'Afspeellijst bewerken'; + @override + String get delete => 'Afspeellijst verwijderen'; + @override + String get addTo => 'Toevoegen aan afspeellijst'; + @override + String get addItems => 'Items toevoegen'; + @override + String get removeItem => 'Verwijderen uit afspeellijst'; + @override + String get clearPlaylist => 'Afspeellijst wissen'; + @override + String get playAll => 'Alles afspelen'; + @override + String get shuffle => 'Willekeurig'; + @override + String get smartPlaylist => 'Slimme afspeellijst'; + @override + String get regularPlaylist => 'Normale afspeellijst'; + @override + String itemCount({required Object count}) => '${count} items'; + @override + String get oneItem => '1 item'; + @override + String get emptyPlaylist => 'Deze afspeellijst is leeg'; + @override + String get deleteConfirm => 'Afspeellijst verwijderen?'; + @override + String deleteMessage({required Object name}) => + 'Weet je zeker dat je "${name}" wilt verwijderen?'; + @override + String get created => 'Afspeellijst gemaakt'; + @override + String get updated => 'Afspeellijst bijgewerkt'; + @override + String get deleted => 'Afspeellijst verwijderd'; + @override + String get itemAdded => 'Toegevoegd aan afspeellijst'; + @override + String get itemRemoved => 'Verwijderd uit afspeellijst'; + @override + String get selectPlaylist => 'Selecteer afspeellijst'; + @override + String get createNewPlaylist => 'Nieuwe afspeellijst maken'; + @override + String get errorCreating => 'Fout bij maken afspeellijst'; + @override + String get errorDeleting => 'Fout bij verwijderen afspeellijst'; + @override + String get errorLoading => 'Fout bij laden afspeellijsten'; + @override + String get errorAdding => 'Fout bij toevoegen aan afspeellijst'; + @override + String get errorReordering => 'Fout bij herschikken van afspeellijstitem'; + @override + String get errorRemoving => 'Fout bij verwijderen uit afspeellijst'; + @override + String get playlist => 'Afspeellijst'; } // Path: collections class _StringsCollectionsNl implements _StringsCollectionsEn { - _StringsCollectionsNl._(this._root); + _StringsCollectionsNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get title => 'Collecties'; - @override String get collection => 'Collectie'; - @override String get empty => 'Collectie is leeg'; - @override String get noItems => 'Geen items in deze collectie'; - @override String get unknownLibrarySection => 'Kan niet verwijderen: onbekende bibliotheeksectie'; - @override String get deleteCollection => 'Collectie verwijderen'; - @override String deleteConfirm({required Object title}) => 'Weet je zeker dat je "${title}" wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.'; - @override String get deleted => 'Collectie verwijderd'; - @override String get deleteFailed => 'Collectie verwijderen mislukt'; - @override String deleteFailedWithError({required Object error}) => 'Collectie verwijderen mislukt: ${error}'; - @override String failedToLoadItems({required Object error}) => 'Collectie-items laden mislukt: ${error}'; - @override String get addTo => 'Toevoegen aan collectie'; - @override String get selectCollection => 'Selecteer collectie'; - @override String get createNewCollection => 'Nieuwe collectie maken'; - @override String get collectionName => 'Collectienaam'; - @override String get enterCollectionName => 'Voer collectienaam in'; - @override String get addedToCollection => 'Toegevoegd aan collectie'; - @override String get errorAddingToCollection => 'Fout bij toevoegen aan collectie'; - @override String get created => 'Collectie gemaakt'; - @override String get removeFromCollection => 'Verwijderen uit collectie'; - @override String removeFromCollectionConfirm({required Object title}) => '"${title}" uit deze collectie verwijderen?'; - @override String get removedFromCollection => 'Uit collectie verwijderd'; - @override String get removeFromCollectionFailed => 'Verwijderen uit collectie mislukt'; - @override String removeFromCollectionError({required Object error}) => 'Fout bij verwijderen uit collectie: ${error}'; + // Translations + @override + String get title => 'Collecties'; + @override + String get collection => 'Collectie'; + @override + String get empty => 'Collectie is leeg'; + @override + String get noItems => 'Geen items in deze collectie'; + @override + String get unknownLibrarySection => + 'Kan niet verwijderen: onbekende bibliotheeksectie'; + @override + String get deleteCollection => 'Collectie verwijderen'; + @override + String deleteConfirm({required Object title}) => + 'Weet je zeker dat je "${title}" wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.'; + @override + String get deleted => 'Collectie verwijderd'; + @override + String get deleteFailed => 'Collectie verwijderen mislukt'; + @override + String deleteFailedWithError({required Object error}) => + 'Collectie verwijderen mislukt: ${error}'; + @override + String failedToLoadItems({required Object error}) => + 'Collectie-items laden mislukt: ${error}'; + @override + String get addTo => 'Toevoegen aan collectie'; + @override + String get selectCollection => 'Selecteer collectie'; + @override + String get createNewCollection => 'Nieuwe collectie maken'; + @override + String get collectionName => 'Collectienaam'; + @override + String get enterCollectionName => 'Voer collectienaam in'; + @override + String get addedToCollection => 'Toegevoegd aan collectie'; + @override + String get errorAddingToCollection => 'Fout bij toevoegen aan collectie'; + @override + String get created => 'Collectie gemaakt'; + @override + String get removeFromCollection => 'Verwijderen uit collectie'; + @override + String removeFromCollectionConfirm({required Object title}) => + '"${title}" uit deze collectie verwijderen?'; + @override + String get removedFromCollection => 'Uit collectie verwijderd'; + @override + String get removeFromCollectionFailed => 'Verwijderen uit collectie mislukt'; + @override + String removeFromCollectionError({required Object error}) => + 'Fout bij verwijderen uit collectie: ${error}'; } // Path: libraries.tabs class _StringsLibrariesTabsNl implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsNl._(this._root); + _StringsLibrariesTabsNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get recommended => 'Aanbevolen'; - @override String get browse => 'Bladeren'; - @override String get collections => 'Collecties'; - @override String get playlists => 'Afspeellijsten'; + // Translations + @override + String get recommended => 'Aanbevolen'; + @override + String get browse => 'Bladeren'; + @override + String get collections => 'Collecties'; + @override + String get playlists => 'Afspeellijsten'; } // Path: libraries.groupings class _StringsLibrariesGroupingsNl implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsNl._(this._root); + _StringsLibrariesGroupingsNl._(this._root); - @override final _StringsNl _root; // ignore: unused_field + @override + final _StringsNl _root; // ignore: unused_field - // Translations - @override String get all => 'Alles'; - @override String get movies => 'Films'; - @override String get shows => 'Series'; - @override String get seasons => 'Seizoenen'; - @override String get episodes => 'Afleveringen'; - @override String get folders => 'Mappen'; + // Translations + @override + String get all => 'Alles'; + @override + String get movies => 'Films'; + @override + String get shows => 'Series'; + @override + String get seasons => 'Seizoenen'; + @override + String get episodes => 'Afleveringen'; + @override + String get folders => 'Mappen'; } // Path: class _StringsSv implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsSv.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.sv, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsSv.build({ + Map? overrides, + PluralResolver? cardinalResolver, + PluralResolver? ordinalResolver, + }) : assert( + overrides == null, + 'Set "translation_overrides: true" in order to enable this feature.', + ), + $meta = TranslationMetadata( + locale: AppLocale.sv, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override final TranslationMetadata $meta; + /// Metadata for the translations of . + @override + final TranslationMetadata $meta; - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); + /// Access flat map + @override + dynamic operator [](String key) => $meta.getTranslation(key); - @override late final _StringsSv _root = this; // ignore: unused_field + @override + late final _StringsSv _root = this; // ignore: unused_field - // Translations - @override late final _StringsAppSv app = _StringsAppSv._(_root); - @override late final _StringsAuthSv auth = _StringsAuthSv._(_root); - @override late final _StringsCommonSv common = _StringsCommonSv._(_root); - @override late final _StringsScreensSv screens = _StringsScreensSv._(_root); - @override late final _StringsUpdateSv update = _StringsUpdateSv._(_root); - @override late final _StringsSettingsSv settings = _StringsSettingsSv._(_root); - @override late final _StringsSearchSv search = _StringsSearchSv._(_root); - @override late final _StringsHotkeysSv hotkeys = _StringsHotkeysSv._(_root); - @override late final _StringsPinEntrySv pinEntry = _StringsPinEntrySv._(_root); - @override late final _StringsFileInfoSv fileInfo = _StringsFileInfoSv._(_root); - @override late final _StringsMediaMenuSv mediaMenu = _StringsMediaMenuSv._(_root); - @override late final _StringsAccessibilitySv accessibility = _StringsAccessibilitySv._(_root); - @override late final _StringsTooltipsSv tooltips = _StringsTooltipsSv._(_root); - @override late final _StringsVideoControlsSv videoControls = _StringsVideoControlsSv._(_root); - @override late final _StringsUserStatusSv userStatus = _StringsUserStatusSv._(_root); - @override late final _StringsMessagesSv messages = _StringsMessagesSv._(_root); - @override late final _StringsProfileSv profile = _StringsProfileSv._(_root); - @override late final _StringsSubtitlingStylingSv subtitlingStyling = _StringsSubtitlingStylingSv._(_root); - @override late final _StringsDialogSv dialog = _StringsDialogSv._(_root); - @override late final _StringsDiscoverSv discover = _StringsDiscoverSv._(_root); - @override late final _StringsErrorsSv errors = _StringsErrorsSv._(_root); - @override late final _StringsLibrariesSv libraries = _StringsLibrariesSv._(_root); - @override late final _StringsAboutSv about = _StringsAboutSv._(_root); - @override late final _StringsServerSelectionSv serverSelection = _StringsServerSelectionSv._(_root); - @override late final _StringsHubDetailSv hubDetail = _StringsHubDetailSv._(_root); - @override late final _StringsLogsSv logs = _StringsLogsSv._(_root); - @override late final _StringsLicensesSv licenses = _StringsLicensesSv._(_root); - @override late final _StringsNavigationSv navigation = _StringsNavigationSv._(_root); - @override late final _StringsPlaylistsSv playlists = _StringsPlaylistsSv._(_root); - @override late final _StringsCollectionsSv collections = _StringsCollectionsSv._(_root); + // Translations + @override + late final _StringsAppSv app = _StringsAppSv._(_root); + @override + late final _StringsAuthSv auth = _StringsAuthSv._(_root); + @override + late final _StringsCommonSv common = _StringsCommonSv._(_root); + @override + late final _StringsScreensSv screens = _StringsScreensSv._(_root); + @override + late final _StringsUpdateSv update = _StringsUpdateSv._(_root); + @override + late final _StringsSettingsSv settings = _StringsSettingsSv._(_root); + @override + late final _StringsSearchSv search = _StringsSearchSv._(_root); + @override + late final _StringsHotkeysSv hotkeys = _StringsHotkeysSv._(_root); + @override + late final _StringsPinEntrySv pinEntry = _StringsPinEntrySv._(_root); + @override + late final _StringsFileInfoSv fileInfo = _StringsFileInfoSv._(_root); + @override + late final _StringsMediaMenuSv mediaMenu = _StringsMediaMenuSv._(_root); + @override + late final _StringsAccessibilitySv accessibility = _StringsAccessibilitySv._( + _root, + ); + @override + late final _StringsTooltipsSv tooltips = _StringsTooltipsSv._(_root); + @override + late final _StringsVideoControlsSv videoControls = _StringsVideoControlsSv._( + _root, + ); + @override + late final _StringsUserStatusSv userStatus = _StringsUserStatusSv._(_root); + @override + late final _StringsMessagesSv messages = _StringsMessagesSv._(_root); + @override + late final _StringsProfileSv profile = _StringsProfileSv._(_root); + @override + late final _StringsSubtitlingStylingSv subtitlingStyling = + _StringsSubtitlingStylingSv._(_root); + @override + late final _StringsDialogSv dialog = _StringsDialogSv._(_root); + @override + late final _StringsDiscoverSv discover = _StringsDiscoverSv._(_root); + @override + late final _StringsErrorsSv errors = _StringsErrorsSv._(_root); + @override + late final _StringsLibrariesSv libraries = _StringsLibrariesSv._(_root); + @override + late final _StringsAboutSv about = _StringsAboutSv._(_root); + @override + late final _StringsServerSelectionSv serverSelection = + _StringsServerSelectionSv._(_root); + @override + late final _StringsHubDetailSv hubDetail = _StringsHubDetailSv._(_root); + @override + late final _StringsLogsSv logs = _StringsLogsSv._(_root); + @override + late final _StringsLicensesSv licenses = _StringsLicensesSv._(_root); + @override + late final _StringsNavigationSv navigation = _StringsNavigationSv._(_root); + @override + late final _StringsPlaylistsSv playlists = _StringsPlaylistsSv._(_root); + @override + late final _StringsCollectionsSv collections = _StringsCollectionsSv._(_root); } // Path: app class _StringsAppSv implements _StringsAppEn { - _StringsAppSv._(this._root); + _StringsAppSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get title => 'Plezy'; - @override String get loading => 'Laddar...'; + // Translations + @override + String get title => 'Plezy'; + @override + String get loading => 'Laddar...'; } // Path: auth class _StringsAuthSv implements _StringsAuthEn { - _StringsAuthSv._(this._root); + _StringsAuthSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get signInWithPlex => 'Logga in med Plex'; - @override String get showQRCode => 'Visa QR-kod'; - @override String get cancel => 'Avbryt'; - @override String get authenticate => 'Autentisera'; - @override String get retry => 'Försök igen'; - @override String get debugEnterToken => 'Debug: Ange Plex-token'; - @override String get plexTokenLabel => 'Plex-autentiseringstoken'; - @override String get plexTokenHint => 'Ange din Plex.tv-token'; - @override String get authenticationTimeout => 'Autentisering tog för lång tid. Försök igen.'; - @override String get scanQRCodeInstruction => 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.'; - @override String get waitingForAuth => 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.'; + // Translations + @override + String get signInWithPlex => 'Logga in med Plex'; + @override + String get showQRCode => 'Visa QR-kod'; + @override + String get cancel => 'Avbryt'; + @override + String get authenticate => 'Autentisera'; + @override + String get retry => 'Försök igen'; + @override + String get debugEnterToken => 'Debug: Ange Plex-token'; + @override + String get plexTokenLabel => 'Plex-autentiseringstoken'; + @override + String get plexTokenHint => 'Ange din Plex.tv-token'; + @override + String get authenticationTimeout => + 'Autentisering tog för lång tid. Försök igen.'; + @override + String get scanQRCodeInstruction => + 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.'; + @override + String get waitingForAuth => + 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.'; } // Path: common class _StringsCommonSv implements _StringsCommonEn { - _StringsCommonSv._(this._root); + _StringsCommonSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get cancel => 'Avbryt'; - @override String get save => 'Spara'; - @override String get close => 'Stäng'; - @override String get clear => 'Rensa'; - @override String get reset => 'Återställ'; - @override String get later => 'Senare'; - @override String get submit => 'Skicka'; - @override String get confirm => 'Bekräfta'; - @override String get retry => 'Försök igen'; - @override String get playNow => 'Spela nu'; - @override String get logout => 'Logga ut'; - @override String get online => 'Online'; - @override String get offline => 'Offline'; - @override String get owned => 'Egen'; - @override String get shared => 'Delad'; - @override String get current => 'NUVARANDE'; - @override String get unknown => 'Okänd'; - @override String get refresh => 'Uppdatera'; - @override String get yes => 'Ja'; - @override String get no => 'Nej'; - @override String get server => 'Server'; - @override String get delete => 'Ta bort'; - @override String get shuffle => 'Blanda'; - @override String get addTo => 'Lägg till i...'; + // Translations + @override + String get cancel => 'Avbryt'; + @override + String get save => 'Spara'; + @override + String get close => 'Stäng'; + @override + String get clear => 'Rensa'; + @override + String get reset => 'Återställ'; + @override + String get later => 'Senare'; + @override + String get submit => 'Skicka'; + @override + String get confirm => 'Bekräfta'; + @override + String get retry => 'Försök igen'; + @override + String get playNow => 'Spela nu'; + @override + String get logout => 'Logga ut'; + @override + String get online => 'Online'; + @override + String get offline => 'Offline'; + @override + String get owned => 'Egen'; + @override + String get shared => 'Delad'; + @override + String get current => 'NUVARANDE'; + @override + String get unknown => 'Okänd'; + @override + String get refresh => 'Uppdatera'; + @override + String get yes => 'Ja'; + @override + String get no => 'Nej'; + @override + String get server => 'Server'; + @override + String get delete => 'Ta bort'; + @override + String get shuffle => 'Blanda'; + @override + String get addTo => 'Lägg till i...'; } // Path: screens class _StringsScreensSv implements _StringsScreensEn { - _StringsScreensSv._(this._root); + _StringsScreensSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get licenses => 'Licenser'; - @override String get selectServer => 'Välj server'; - @override String get switchProfile => 'Byt profil'; - @override String get subtitleStyling => 'Undertext-styling'; - @override String get search => 'Sök'; - @override String get logs => 'Loggar'; + // Translations + @override + String get licenses => 'Licenser'; + @override + String get selectServer => 'Välj server'; + @override + String get switchProfile => 'Byt profil'; + @override + String get subtitleStyling => 'Undertext-styling'; + @override + String get search => 'Sök'; + @override + String get logs => 'Loggar'; } // Path: update class _StringsUpdateSv implements _StringsUpdateEn { - _StringsUpdateSv._(this._root); + _StringsUpdateSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get available => 'Uppdatering tillgänglig'; - @override String versionAvailable({required Object version}) => 'Version ${version} är tillgänglig'; - @override String currentVersion({required Object version}) => 'Nuvarande: ${version}'; - @override String get skipVersion => 'Hoppa över denna version'; - @override String get viewRelease => 'Visa release'; - @override String get latestVersion => 'Du har den senaste versionen'; - @override String get checkFailed => 'Misslyckades att kontrollera uppdateringar'; + // Translations + @override + String get available => 'Uppdatering tillgänglig'; + @override + String versionAvailable({required Object version}) => + 'Version ${version} är tillgänglig'; + @override + String currentVersion({required Object version}) => 'Nuvarande: ${version}'; + @override + String get skipVersion => 'Hoppa över denna version'; + @override + String get viewRelease => 'Visa release'; + @override + String get latestVersion => 'Du har den senaste versionen'; + @override + String get checkFailed => 'Misslyckades att kontrollera uppdateringar'; } // Path: settings class _StringsSettingsSv implements _StringsSettingsEn { - _StringsSettingsSv._(this._root); + _StringsSettingsSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get title => 'Inställningar'; - @override String get language => 'Språk'; - @override String get theme => 'Tema'; - @override String get appearance => 'Utseende'; - @override String get videoPlayback => 'Videouppspelning'; - @override String get shufflePlay => 'Blanda uppspelning'; - @override String get advanced => 'Avancerat'; - @override String get useSeasonPostersDescription => 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; - @override String get showHeroSectionDescription => 'Visa utvalda innehållskarusell på startsidan'; - @override String get secondsLabel => 'Sekunder'; - @override String get minutesLabel => 'Minuter'; - @override String get secondsShort => 's'; - @override String get minutesShort => 'm'; - @override String durationHint({required Object min, required Object max}) => 'Ange tid (${min}-${max})'; - @override String get systemTheme => 'System'; - @override String get systemThemeDescription => 'Följ systeminställningar'; - @override String get lightTheme => 'Ljust'; - @override String get darkTheme => 'Mörkt'; - @override String get libraryDensity => 'Biblioteksdensitet'; - @override String get compact => 'Kompakt'; - @override String get compactDescription => 'Mindre kort, fler objekt synliga'; - @override String get normal => 'Normal'; - @override String get normalDescription => 'Standardstorlek'; - @override String get comfortable => 'Bekväm'; - @override String get comfortableDescription => 'Större kort, färre objekt synliga'; - @override String get viewMode => 'Visningsläge'; - @override String get gridView => 'Rutnät'; - @override String get gridViewDescription => 'Visa objekt i rutnätslayout'; - @override String get listView => 'Lista'; - @override String get listViewDescription => 'Visa objekt i listlayout'; - @override String get useSeasonPosters => 'Använd säsongsaffischer'; - @override String get showHeroSection => 'Visa hjältesektion'; - @override String get hardwareDecoding => 'Hårdvaruavkodning'; - @override String get hardwareDecodingDescription => 'Använd hårdvaruacceleration när tillgängligt'; - @override String get bufferSize => 'Bufferstorlek'; - @override String bufferSizeMB({required Object size}) => '${size}MB'; - @override String get subtitleStyling => 'Undertext-styling'; - @override String get subtitleStylingDescription => 'Anpassa undertextutseende'; - @override String get smallSkipDuration => 'Kort hoppvaraktighet'; - @override String get largeSkipDuration => 'Lång hoppvaraktighet'; - @override String secondsUnit({required Object seconds}) => '${seconds} sekunder'; - @override String get defaultSleepTimer => 'Standard sovtimer'; - @override String minutesUnit({required Object minutes}) => '${minutes} minuter'; - @override String get rememberTrackSelections => 'Kom ihåg spårval per serie/film'; - @override String get rememberTrackSelectionsDescription => 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; - @override String get unwatchedOnly => 'Endast osedda'; - @override String get unwatchedOnlyDescription => 'Inkludera endast osedda avsnitt i blandningskön'; - @override String get shuffleOrderNavigation => 'Blandningsordning-navigation'; - @override String get shuffleOrderNavigationDescription => 'Nästa/föregående knappar följer blandad ordning'; - @override String get loopShuffleQueue => 'Loopa blandningskö'; - @override String get loopShuffleQueueDescription => 'Starta om kö när slutet nås'; - @override String get videoPlayerControls => 'Videospelar-kontroller'; - @override String get keyboardShortcuts => 'Tangentbordsgenvägar'; - @override String get keyboardShortcutsDescription => 'Anpassa tangentbordsgenvägar'; - @override String get debugLogging => 'Felsökningsloggning'; - @override String get debugLoggingDescription => 'Aktivera detaljerad loggning för felsökning'; - @override String get viewLogs => 'Visa loggar'; - @override String get viewLogsDescription => 'Visa applikationsloggar'; - @override String get clearCache => 'Rensa cache'; - @override String get clearCacheDescription => 'Detta rensar alla cachade bilder och data. Appen kan ta längre tid att ladda innehåll efter cache-rensning.'; - @override String get clearCacheSuccess => 'Cache rensad framgångsrikt'; - @override String get resetSettings => 'Återställ inställningar'; - @override String get resetSettingsDescription => 'Detta återställer alla inställningar till standardvärden. Denna åtgärd kan inte ångras.'; - @override String get resetSettingsSuccess => 'Inställningar återställda framgångsrikt'; - @override String get shortcutsReset => 'Genvägar återställda till standard'; - @override String get about => 'Om'; - @override String get aboutDescription => 'Appinformation och licenser'; - @override String get updates => 'Uppdateringar'; - @override String get updateAvailable => 'Uppdatering tillgänglig'; - @override String get checkForUpdates => 'Kontrollera uppdateringar'; - @override String get validationErrorEnterNumber => 'Vänligen ange ett giltigt nummer'; - @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => 'Tiden måste vara mellan ${min} och ${max} ${unit}'; - @override String shortcutAlreadyAssigned({required Object action}) => 'Genväg redan tilldelad ${action}'; - @override String shortcutUpdated({required Object action}) => 'Genväg uppdaterad för ${action}'; - @override String get autoSkip => 'Auto Hoppa Över'; - @override String get autoSkipIntro => 'Hoppa Över Intro Automatiskt'; - @override String get autoSkipIntroDescription => 'Hoppa automatiskt över intro-markörer efter några sekunder'; - @override String get autoSkipCredits => 'Hoppa Över Credits Automatiskt'; - @override String get autoSkipCreditsDescription => 'Hoppa automatiskt över credits och spela nästa avsnitt'; - @override String get autoSkipDelay => 'Fördröjning Auto Hoppa Över'; - @override String autoSkipDelayDescription({required Object seconds}) => 'Vänta ${seconds} sekunder innan automatisk överhoppning'; + // Translations + @override + String get title => 'Inställningar'; + @override + String get language => 'Språk'; + @override + String get theme => 'Tema'; + @override + String get appearance => 'Utseende'; + @override + String get videoPlayback => 'Videouppspelning'; + @override + String get shufflePlay => 'Blanda uppspelning'; + @override + String get advanced => 'Avancerat'; + @override + String get useSeasonPostersDescription => + 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; + @override + String get showHeroSectionDescription => + 'Visa utvalda innehållskarusell på startsidan'; + @override + String get secondsLabel => 'Sekunder'; + @override + String get minutesLabel => 'Minuter'; + @override + String get secondsShort => 's'; + @override + String get minutesShort => 'm'; + @override + String durationHint({required Object min, required Object max}) => + 'Ange tid (${min}-${max})'; + @override + String get systemTheme => 'System'; + @override + String get systemThemeDescription => 'Följ systeminställningar'; + @override + String get lightTheme => 'Ljust'; + @override + String get darkTheme => 'Mörkt'; + @override + String get libraryDensity => 'Biblioteksdensitet'; + @override + String get compact => 'Kompakt'; + @override + String get compactDescription => 'Mindre kort, fler objekt synliga'; + @override + String get normal => 'Normal'; + @override + String get normalDescription => 'Standardstorlek'; + @override + String get comfortable => 'Bekväm'; + @override + String get comfortableDescription => 'Större kort, färre objekt synliga'; + @override + String get viewMode => 'Visningsläge'; + @override + String get gridView => 'Rutnät'; + @override + String get gridViewDescription => 'Visa objekt i rutnätslayout'; + @override + String get listView => 'Lista'; + @override + String get listViewDescription => 'Visa objekt i listlayout'; + @override + String get useSeasonPosters => 'Använd säsongsaffischer'; + @override + String get showHeroSection => 'Visa hjältesektion'; + @override + String get hardwareDecoding => 'Hårdvaruavkodning'; + @override + String get hardwareDecodingDescription => + 'Använd hårdvaruacceleration när tillgängligt'; + @override + String get bufferSize => 'Bufferstorlek'; + @override + String bufferSizeMB({required Object size}) => '${size}MB'; + @override + String get subtitleStyling => 'Undertext-styling'; + @override + String get subtitleStylingDescription => 'Anpassa undertextutseende'; + @override + String get smallSkipDuration => 'Kort hoppvaraktighet'; + @override + String get largeSkipDuration => 'Lång hoppvaraktighet'; + @override + String secondsUnit({required Object seconds}) => '${seconds} sekunder'; + @override + String get defaultSleepTimer => 'Standard sovtimer'; + @override + String minutesUnit({required Object minutes}) => '${minutes} minuter'; + @override + String get rememberTrackSelections => 'Kom ihåg spårval per serie/film'; + @override + String get rememberTrackSelectionsDescription => + 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; + @override + String get unwatchedOnly => 'Endast osedda'; + @override + String get unwatchedOnlyDescription => + 'Inkludera endast osedda avsnitt i blandningskön'; + @override + String get shuffleOrderNavigation => 'Blandningsordning-navigation'; + @override + String get shuffleOrderNavigationDescription => + 'Nästa/föregående knappar följer blandad ordning'; + @override + String get loopShuffleQueue => 'Loopa blandningskö'; + @override + String get loopShuffleQueueDescription => 'Starta om kö när slutet nås'; + @override + String get videoPlayerControls => 'Videospelar-kontroller'; + @override + String get keyboardShortcuts => 'Tangentbordsgenvägar'; + @override + String get keyboardShortcutsDescription => 'Anpassa tangentbordsgenvägar'; + @override + String get debugLogging => 'Felsökningsloggning'; + @override + String get debugLoggingDescription => + 'Aktivera detaljerad loggning för felsökning'; + @override + String get viewLogs => 'Visa loggar'; + @override + String get viewLogsDescription => 'Visa applikationsloggar'; + @override + String get clearCache => 'Rensa cache'; + @override + String get clearCacheDescription => + 'Detta rensar alla cachade bilder och data. Appen kan ta längre tid att ladda innehåll efter cache-rensning.'; + @override + String get clearCacheSuccess => 'Cache rensad framgångsrikt'; + @override + String get resetSettings => 'Återställ inställningar'; + @override + String get resetSettingsDescription => + 'Detta återställer alla inställningar till standardvärden. Denna åtgärd kan inte ångras.'; + @override + String get resetSettingsSuccess => 'Inställningar återställda framgångsrikt'; + @override + String get shortcutsReset => 'Genvägar återställda till standard'; + @override + String get about => 'Om'; + @override + String get aboutDescription => 'Appinformation och licenser'; + @override + String get updates => 'Uppdateringar'; + @override + String get updateAvailable => 'Uppdatering tillgänglig'; + @override + String get checkForUpdates => 'Kontrollera uppdateringar'; + @override + String get validationErrorEnterNumber => 'Vänligen ange ett giltigt nummer'; + @override + String validationErrorDuration({ + required Object min, + required Object max, + required Object unit, + }) => 'Tiden måste vara mellan ${min} och ${max} ${unit}'; + @override + String shortcutAlreadyAssigned({required Object action}) => + 'Genväg redan tilldelad ${action}'; + @override + String shortcutUpdated({required Object action}) => + 'Genväg uppdaterad för ${action}'; + @override + String get autoSkip => 'Auto Hoppa Över'; + @override + String get autoSkipIntro => 'Hoppa Över Intro Automatiskt'; + @override + String get autoSkipIntroDescription => + 'Hoppa automatiskt över intro-markörer efter några sekunder'; + @override + String get autoSkipCredits => 'Hoppa Över Credits Automatiskt'; + @override + String get autoSkipCreditsDescription => + 'Hoppa automatiskt över credits och spela nästa avsnitt'; + @override + String get autoSkipDelay => 'Fördröjning Auto Hoppa Över'; + @override + String autoSkipDelayDescription({required Object seconds}) => + 'Vänta ${seconds} sekunder innan automatisk överhoppning'; } // Path: search class _StringsSearchSv implements _StringsSearchEn { - _StringsSearchSv._(this._root); + _StringsSearchSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get hint => 'Sök filmer, serier, musik...'; - @override String get tryDifferentTerm => 'Prova en annan sökterm'; - @override String get searchYourMedia => 'Sök i dina media'; - @override String get enterTitleActorOrKeyword => 'Ange en titel, skådespelare eller nyckelord'; + // Translations + @override + String get hint => 'Sök filmer, serier, musik...'; + @override + String get tryDifferentTerm => 'Prova en annan sökterm'; + @override + String get searchYourMedia => 'Sök i dina media'; + @override + String get enterTitleActorOrKeyword => + 'Ange en titel, skådespelare eller nyckelord'; } // Path: hotkeys class _StringsHotkeysSv implements _StringsHotkeysEn { - _StringsHotkeysSv._(this._root); + _StringsHotkeysSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String setShortcutFor({required Object actionName}) => 'Sätt genväg för ${actionName}'; - @override String get clearShortcut => 'Rensa genväg'; + // Translations + @override + String setShortcutFor({required Object actionName}) => + 'Sätt genväg för ${actionName}'; + @override + String get clearShortcut => 'Rensa genväg'; } // Path: pinEntry class _StringsPinEntrySv implements _StringsPinEntryEn { - _StringsPinEntrySv._(this._root); + _StringsPinEntrySv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get enterPin => 'Ange PIN'; - @override String get showPin => 'Visa PIN'; - @override String get hidePin => 'Dölj PIN'; + // Translations + @override + String get enterPin => 'Ange PIN'; + @override + String get showPin => 'Visa PIN'; + @override + String get hidePin => 'Dölj PIN'; } // Path: fileInfo class _StringsFileInfoSv implements _StringsFileInfoEn { - _StringsFileInfoSv._(this._root); + _StringsFileInfoSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get title => 'Filinformation'; - @override String get video => 'Video'; - @override String get audio => 'Ljud'; - @override String get file => 'Fil'; - @override String get advanced => 'Avancerat'; - @override String get codec => 'Kodek'; - @override String get resolution => 'Upplösning'; - @override String get bitrate => 'Bithastighet'; - @override String get frameRate => 'Bildfrekvens'; - @override String get aspectRatio => 'Bildförhållande'; - @override String get profile => 'Profil'; - @override String get bitDepth => 'Bitdjup'; - @override String get colorSpace => 'Färgrymd'; - @override String get colorRange => 'Färgområde'; - @override String get colorPrimaries => 'Färggrunder'; - @override String get chromaSubsampling => 'Kroma-undersampling'; - @override String get channels => 'Kanaler'; - @override String get path => 'Sökväg'; - @override String get size => 'Storlek'; - @override String get container => 'Container'; - @override String get duration => 'Varaktighet'; - @override String get optimizedForStreaming => 'Optimerad för streaming'; - @override String get has64bitOffsets => '64-bit offset'; + // Translations + @override + String get title => 'Filinformation'; + @override + String get video => 'Video'; + @override + String get audio => 'Ljud'; + @override + String get file => 'Fil'; + @override + String get advanced => 'Avancerat'; + @override + String get codec => 'Kodek'; + @override + String get resolution => 'Upplösning'; + @override + String get bitrate => 'Bithastighet'; + @override + String get frameRate => 'Bildfrekvens'; + @override + String get aspectRatio => 'Bildförhållande'; + @override + String get profile => 'Profil'; + @override + String get bitDepth => 'Bitdjup'; + @override + String get colorSpace => 'Färgrymd'; + @override + String get colorRange => 'Färgområde'; + @override + String get colorPrimaries => 'Färggrunder'; + @override + String get chromaSubsampling => 'Kroma-undersampling'; + @override + String get channels => 'Kanaler'; + @override + String get path => 'Sökväg'; + @override + String get size => 'Storlek'; + @override + String get container => 'Container'; + @override + String get duration => 'Varaktighet'; + @override + String get optimizedForStreaming => 'Optimerad för streaming'; + @override + String get has64bitOffsets => '64-bit offset'; } // Path: mediaMenu class _StringsMediaMenuSv implements _StringsMediaMenuEn { - _StringsMediaMenuSv._(this._root); + _StringsMediaMenuSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get markAsWatched => 'Markera som sedd'; - @override String get markAsUnwatched => 'Markera som osedd'; - @override String get removeFromContinueWatching => 'Ta bort från Fortsätt titta'; - @override String get goToSeries => 'Gå till serie'; - @override String get goToSeason => 'Gå till säsong'; - @override String get shufflePlay => 'Blanda uppspelning'; - @override String get fileInfo => 'Filinformation'; + // Translations + @override + String get markAsWatched => 'Markera som sedd'; + @override + String get markAsUnwatched => 'Markera som osedd'; + @override + String get removeFromContinueWatching => 'Ta bort från Fortsätt titta'; + @override + String get goToSeries => 'Gå till serie'; + @override + String get goToSeason => 'Gå till säsong'; + @override + String get shufflePlay => 'Blanda uppspelning'; + @override + String get fileInfo => 'Filinformation'; } // Path: accessibility class _StringsAccessibilitySv implements _StringsAccessibilityEn { - _StringsAccessibilitySv._(this._root); + _StringsAccessibilitySv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String mediaCardMovie({required Object title}) => '${title}, film'; - @override String mediaCardShow({required Object title}) => '${title}, TV-serie'; - @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - @override String get mediaCardWatched => 'sedd'; - @override String mediaCardPartiallyWatched({required Object percent}) => '${percent} procent sedd'; - @override String get mediaCardUnwatched => 'osedd'; - @override String get tapToPlay => 'Tryck för att spela'; + // Translations + @override + String mediaCardMovie({required Object title}) => '${title}, film'; + @override + String mediaCardShow({required Object title}) => '${title}, TV-serie'; + @override + String mediaCardEpisode({ + required Object title, + required Object episodeInfo, + }) => '${title}, ${episodeInfo}'; + @override + String mediaCardSeason({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + @override + String get mediaCardWatched => 'sedd'; + @override + String mediaCardPartiallyWatched({required Object percent}) => + '${percent} procent sedd'; + @override + String get mediaCardUnwatched => 'osedd'; + @override + String get tapToPlay => 'Tryck för att spela'; } // Path: tooltips class _StringsTooltipsSv implements _StringsTooltipsEn { - _StringsTooltipsSv._(this._root); + _StringsTooltipsSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get shufflePlay => 'Blanda uppspelning'; - @override String get markAsWatched => 'Markera som sedd'; - @override String get markAsUnwatched => 'Markera som osedd'; + // Translations + @override + String get shufflePlay => 'Blanda uppspelning'; + @override + String get markAsWatched => 'Markera som sedd'; + @override + String get markAsUnwatched => 'Markera som osedd'; } // Path: videoControls class _StringsVideoControlsSv implements _StringsVideoControlsEn { - _StringsVideoControlsSv._(this._root); + _StringsVideoControlsSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get audioLabel => 'Ljud'; - @override String get subtitlesLabel => 'Undertexter'; - @override String get resetToZero => 'Återställ till 0ms'; - @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - @override String playsLater({required Object label}) => '${label} spelas senare'; - @override String playsEarlier({required Object label}) => '${label} spelas tidigare'; - @override String get noOffset => 'Ingen offset'; - @override String get letterbox => 'Letterbox'; - @override String get fillScreen => 'Fyll skärm'; - @override String get stretch => 'Sträck'; - @override String get lockRotation => 'Lås rotation'; - @override String get unlockRotation => 'Lås upp rotation'; - @override String get sleepTimer => 'Sovtimer'; - @override String get timerActive => 'Timer aktiv'; - @override String playbackWillPauseIn({required Object duration}) => 'Uppspelningen pausas om ${duration}'; - @override String get sleepTimerCompleted => 'Sovtimer slutförd - uppspelning pausad'; - @override String get playButton => 'Spela'; - @override String get pauseButton => 'Pausa'; - @override String seekBackwardButton({required Object seconds}) => 'Spola bakåt ${seconds} sekunder'; - @override String seekForwardButton({required Object seconds}) => 'Spola framåt ${seconds} sekunder'; - @override String get previousButton => 'Föregående avsnitt'; - @override String get nextButton => 'Nästa avsnitt'; - @override String get previousChapterButton => 'Föregående kapitel'; - @override String get nextChapterButton => 'Nästa kapitel'; - @override String get volumeButton => 'Volym'; - @override String get muteButton => 'Tysta'; - @override String get unmuteButton => 'Slå på ljud'; - @override String get settingsButton => 'Videoinställningar'; - @override String get audioTrackButton => 'Ljudspår'; - @override String get subtitlesButton => 'Undertexter'; - @override String get chaptersButton => 'Kapitel'; - @override String get versionsButton => 'Videoversioner'; - @override String get aspectRatioButton => 'Bildförhållande'; - @override String get fullscreenButton => 'Aktivera helskärm'; - @override String get exitFullscreenButton => 'Avsluta helskärm'; - @override String get rotationLockButton => 'Rotationslås'; - @override String get timelineSlider => 'Videotidslinje'; - @override String get volumeSlider => 'Volymnivå'; - @override String get backButton => 'Tillbaka'; + // Translations + @override + String get audioLabel => 'Ljud'; + @override + String get subtitlesLabel => 'Undertexter'; + @override + String get resetToZero => 'Återställ till 0ms'; + @override + String addTime({required Object amount, required Object unit}) => + '+${amount}${unit}'; + @override + String minusTime({required Object amount, required Object unit}) => + '-${amount}${unit}'; + @override + String playsLater({required Object label}) => '${label} spelas senare'; + @override + String playsEarlier({required Object label}) => '${label} spelas tidigare'; + @override + String get noOffset => 'Ingen offset'; + @override + String get letterbox => 'Letterbox'; + @override + String get fillScreen => 'Fyll skärm'; + @override + String get stretch => 'Sträck'; + @override + String get lockRotation => 'Lås rotation'; + @override + String get unlockRotation => 'Lås upp rotation'; + @override + String get sleepTimer => 'Sovtimer'; + @override + String get timerActive => 'Timer aktiv'; + @override + String playbackWillPauseIn({required Object duration}) => + 'Uppspelningen pausas om ${duration}'; + @override + String get sleepTimerCompleted => 'Sovtimer slutförd - uppspelning pausad'; + @override + String get playButton => 'Spela'; + @override + String get pauseButton => 'Pausa'; + @override + String seekBackwardButton({required Object seconds}) => + 'Spola bakåt ${seconds} sekunder'; + @override + String seekForwardButton({required Object seconds}) => + 'Spola framåt ${seconds} sekunder'; + @override + String get previousButton => 'Föregående avsnitt'; + @override + String get nextButton => 'Nästa avsnitt'; + @override + String get previousChapterButton => 'Föregående kapitel'; + @override + String get nextChapterButton => 'Nästa kapitel'; + @override + String get volumeButton => 'Volym'; + @override + String get muteButton => 'Tysta'; + @override + String get unmuteButton => 'Slå på ljud'; + @override + String get settingsButton => 'Videoinställningar'; + @override + String get audioTrackButton => 'Ljudspår'; + @override + String get subtitlesButton => 'Undertexter'; + @override + String get chaptersButton => 'Kapitel'; + @override + String get versionsButton => 'Videoversioner'; + @override + String get aspectRatioButton => 'Bildförhållande'; + @override + String get fullscreenButton => 'Aktivera helskärm'; + @override + String get exitFullscreenButton => 'Avsluta helskärm'; + @override + String get rotationLockButton => 'Rotationslås'; + @override + String get timelineSlider => 'Videotidslinje'; + @override + String get volumeSlider => 'Volymnivå'; + @override + String get backButton => 'Tillbaka'; } // Path: userStatus class _StringsUserStatusSv implements _StringsUserStatusEn { - _StringsUserStatusSv._(this._root); + _StringsUserStatusSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get admin => 'Admin'; - @override String get restricted => 'Begränsad'; - @override String get protected => 'Skyddad'; - @override String get current => 'NUVARANDE'; + // Translations + @override + String get admin => 'Admin'; + @override + String get restricted => 'Begränsad'; + @override + String get protected => 'Skyddad'; + @override + String get current => 'NUVARANDE'; } // Path: messages class _StringsMessagesSv implements _StringsMessagesEn { - _StringsMessagesSv._(this._root); + _StringsMessagesSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get markedAsWatched => 'Markerad som sedd'; - @override String get markedAsUnwatched => 'Markerad som osedd'; - @override String get removedFromContinueWatching => 'Borttagen från Fortsätt titta'; - @override String errorLoading({required Object error}) => 'Fel: ${error}'; - @override String get fileInfoNotAvailable => 'Filinformation inte tillgänglig'; - @override String errorLoadingFileInfo({required Object error}) => 'Fel vid laddning av filinformation: ${error}'; - @override String get errorLoadingSeries => 'Fel vid laddning av serie'; - @override String get errorLoadingSeason => 'Fel vid laddning av säsong'; - @override String get musicNotSupported => 'Musikuppspelning stöds inte ännu'; - @override String get logsCleared => 'Loggar rensade'; - @override String get logsCopied => 'Loggar kopierade till urklipp'; - @override String get noLogsAvailable => 'Inga loggar tillgängliga'; - @override String libraryScanning({required Object title}) => 'Skannar "${title}"...'; - @override String libraryScanStarted({required Object title}) => 'Biblioteksskanning startad för "${title}"'; - @override String libraryScanFailed({required Object error}) => 'Misslyckades att skanna bibliotek: ${error}'; - @override String metadataRefreshing({required Object title}) => 'Uppdaterar metadata för "${title}"...'; - @override String metadataRefreshStarted({required Object title}) => 'Metadata-uppdatering startad för "${title}"'; - @override String metadataRefreshFailed({required Object error}) => 'Misslyckades att uppdatera metadata: ${error}'; - @override String get noPlexToken => 'Ingen Plex-token hittad. Vänligen logga in igen.'; - @override String get logoutConfirm => 'Är du säker på att du vill logga ut?'; - @override String get noSeasonsFound => 'Inga säsonger hittades'; - @override String get noEpisodesFound => 'Inga avsnitt hittades i första säsongen'; - @override String get noEpisodesFoundGeneral => 'Inga avsnitt hittades'; - @override String get noResultsFound => 'Inga resultat hittades'; - @override String sleepTimerSet({required Object label}) => 'Sovtimer inställd för ${label}'; - @override String failedToSwitchProfile({required Object displayName}) => 'Misslyckades att byta till ${displayName}'; - @override String get noItemsAvailable => 'Inga objekt tillgängliga'; - @override String get failedToCreatePlayQueue => 'Det gick inte att skapa uppspelningskö'; - @override String get failedToCreatePlayQueueNoItems => 'Det gick inte att skapa uppspelningskö – inga objekt'; - @override String failedPlayback({required Object action, required Object error}) => 'Kunde inte ${action}: ${error}'; + // Translations + @override + String get markedAsWatched => 'Markerad som sedd'; + @override + String get markedAsUnwatched => 'Markerad som osedd'; + @override + String get removedFromContinueWatching => 'Borttagen från Fortsätt titta'; + @override + String errorLoading({required Object error}) => 'Fel: ${error}'; + @override + String get fileInfoNotAvailable => 'Filinformation inte tillgänglig'; + @override + String errorLoadingFileInfo({required Object error}) => + 'Fel vid laddning av filinformation: ${error}'; + @override + String get errorLoadingSeries => 'Fel vid laddning av serie'; + @override + String get errorLoadingSeason => 'Fel vid laddning av säsong'; + @override + String get musicNotSupported => 'Musikuppspelning stöds inte ännu'; + @override + String get logsCleared => 'Loggar rensade'; + @override + String get logsCopied => 'Loggar kopierade till urklipp'; + @override + String get noLogsAvailable => 'Inga loggar tillgängliga'; + @override + String libraryScanning({required Object title}) => 'Skannar "${title}"...'; + @override + String libraryScanStarted({required Object title}) => + 'Biblioteksskanning startad för "${title}"'; + @override + String libraryScanFailed({required Object error}) => + 'Misslyckades att skanna bibliotek: ${error}'; + @override + String metadataRefreshing({required Object title}) => + 'Uppdaterar metadata för "${title}"...'; + @override + String metadataRefreshStarted({required Object title}) => + 'Metadata-uppdatering startad för "${title}"'; + @override + String metadataRefreshFailed({required Object error}) => + 'Misslyckades att uppdatera metadata: ${error}'; + @override + String get noPlexToken => 'Ingen Plex-token hittad. Vänligen logga in igen.'; + @override + String get logoutConfirm => 'Är du säker på att du vill logga ut?'; + @override + String get noSeasonsFound => 'Inga säsonger hittades'; + @override + String get noEpisodesFound => 'Inga avsnitt hittades i första säsongen'; + @override + String get noEpisodesFoundGeneral => 'Inga avsnitt hittades'; + @override + String get noResultsFound => 'Inga resultat hittades'; + @override + String sleepTimerSet({required Object label}) => + 'Sovtimer inställd för ${label}'; + @override + String failedToSwitchProfile({required Object displayName}) => + 'Misslyckades att byta till ${displayName}'; + @override + String get noItemsAvailable => 'Inga objekt tillgängliga'; + @override + String get failedToCreatePlayQueue => + 'Det gick inte att skapa uppspelningskö'; + @override + String get failedToCreatePlayQueueNoItems => + 'Det gick inte att skapa uppspelningskö – inga objekt'; + @override + String failedPlayback({required Object action, required Object error}) => + 'Kunde inte ${action}: ${error}'; } // Path: profile class _StringsProfileSv implements _StringsProfileEn { - _StringsProfileSv._(this._root); + _StringsProfileSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get noUsersAvailable => 'Inga användare tillgängliga'; + // Translations + @override + String get noUsersAvailable => 'Inga användare tillgängliga'; } // Path: subtitlingStyling class _StringsSubtitlingStylingSv implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingSv._(this._root); + _StringsSubtitlingStylingSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get stylingOptions => 'Stilalternativ'; - @override String get fontSize => 'Teckenstorlek'; - @override String get textColor => 'Textfärg'; - @override String get borderSize => 'Kantstorlek'; - @override String get borderColor => 'Kantfärg'; - @override String get backgroundOpacity => 'Bakgrundsopacitet'; - @override String get backgroundColor => 'Bakgrundsfärg'; + // Translations + @override + String get stylingOptions => 'Stilalternativ'; + @override + String get fontSize => 'Teckenstorlek'; + @override + String get textColor => 'Textfärg'; + @override + String get borderSize => 'Kantstorlek'; + @override + String get borderColor => 'Kantfärg'; + @override + String get backgroundOpacity => 'Bakgrundsopacitet'; + @override + String get backgroundColor => 'Bakgrundsfärg'; } // Path: dialog class _StringsDialogSv implements _StringsDialogEn { - _StringsDialogSv._(this._root); + _StringsDialogSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get confirmAction => 'Bekräfta åtgärd'; - @override String get areYouSure => 'Är du säker på att du vill utföra denna åtgärd?'; - @override String get cancel => 'Avbryt'; - @override String get playNow => 'Spela nu'; + // Translations + @override + String get confirmAction => 'Bekräfta åtgärd'; + @override + String get areYouSure => 'Är du säker på att du vill utföra denna åtgärd?'; + @override + String get cancel => 'Avbryt'; + @override + String get playNow => 'Spela nu'; } // Path: discover class _StringsDiscoverSv implements _StringsDiscoverEn { - _StringsDiscoverSv._(this._root); + _StringsDiscoverSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get title => 'Upptäck'; - @override String get switchProfile => 'Byt profil'; - @override String get switchServer => 'Byt server'; - @override String get logout => 'Logga ut'; - @override String get noContentAvailable => 'Inget innehåll tillgängligt'; - @override String get addMediaToLibraries => 'Lägg till media till dina bibliotek'; - @override String get continueWatching => 'Fortsätt titta'; - @override String get recentlyAdded => 'Nyligen tillagda'; - @override String get play => 'Spela'; - @override String get resume => 'Återuppta'; - @override String playEpisode({required Object season, required Object episode}) => 'Spela S${season}, E${episode}'; - @override String resumeEpisode({required Object season, required Object episode}) => 'Återuppta S${season}, E${episode}'; - @override String get pause => 'Pausa'; - @override String get overview => 'Översikt'; - @override String get cast => 'Rollbesättning'; - @override String get seasons => 'Säsonger'; - @override String get studio => 'Studio'; - @override String get rating => 'Åldersgräns'; - @override String get watched => 'Tittad'; - @override String episodeCount({required Object count}) => '${count} avsnitt'; - @override String watchedProgress({required Object watched, required Object total}) => '${watched}/${total} sedda'; - @override String get movie => 'Film'; - @override String get tvShow => 'TV-serie'; - @override String minutesLeft({required Object minutes}) => '${minutes} min kvar'; + // Translations + @override + String get title => 'Upptäck'; + @override + String get switchProfile => 'Byt profil'; + @override + String get switchServer => 'Byt server'; + @override + String get logout => 'Logga ut'; + @override + String get noContentAvailable => 'Inget innehåll tillgängligt'; + @override + String get addMediaToLibraries => 'Lägg till media till dina bibliotek'; + @override + String get continueWatching => 'Fortsätt titta'; + @override + String get recentlyAdded => 'Nyligen tillagda'; + @override + String get play => 'Spela'; + @override + String get resume => 'Återuppta'; + @override + String playEpisode({required Object season, required Object episode}) => + 'Spela S${season}, E${episode}'; + @override + String resumeEpisode({required Object season, required Object episode}) => + 'Återuppta S${season}, E${episode}'; + @override + String get pause => 'Pausa'; + @override + String get overview => 'Översikt'; + @override + String get cast => 'Rollbesättning'; + @override + String get seasons => 'Säsonger'; + @override + String get studio => 'Studio'; + @override + String get rating => 'Åldersgräns'; + @override + String get watched => 'Tittad'; + @override + String episodeCount({required Object count}) => '${count} avsnitt'; + @override + String watchedProgress({required Object watched, required Object total}) => + '${watched}/${total} sedda'; + @override + String get movie => 'Film'; + @override + String get tvShow => 'TV-serie'; + @override + String minutesLeft({required Object minutes}) => '${minutes} min kvar'; } // Path: errors class _StringsErrorsSv implements _StringsErrorsEn { - _StringsErrorsSv._(this._root); + _StringsErrorsSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String searchFailed({required Object error}) => 'Sökning misslyckades: ${error}'; - @override String connectionTimeout({required Object context}) => 'Anslutnings-timeout vid laddning ${context}'; - @override String get connectionFailed => 'Kan inte ansluta till Plex-server'; - @override String failedToLoad({required Object context, required Object error}) => 'Misslyckades att ladda ${context}: ${error}'; - @override String get noClientAvailable => 'Ingen klient tillgänglig'; - @override String authenticationFailed({required Object error}) => 'Autentisering misslyckades: ${error}'; - @override String get couldNotLaunchUrl => 'Kunde inte öppna autentiserings-URL'; - @override String get pleaseEnterToken => 'Vänligen ange en token'; - @override String get invalidToken => 'Ogiltig token'; - @override String failedToVerifyToken({required Object error}) => 'Misslyckades att verifiera token: ${error}'; - @override String failedToSwitchProfile({required Object displayName}) => 'Misslyckades att byta till ${displayName}'; - @override String get connectionFailedGeneric => 'Anslutning misslyckades'; + // Translations + @override + String searchFailed({required Object error}) => + 'Sökning misslyckades: ${error}'; + @override + String connectionTimeout({required Object context}) => + 'Anslutnings-timeout vid laddning ${context}'; + @override + String get connectionFailed => 'Kan inte ansluta till Plex-server'; + @override + String failedToLoad({required Object context, required Object error}) => + 'Misslyckades att ladda ${context}: ${error}'; + @override + String get noClientAvailable => 'Ingen klient tillgänglig'; + @override + String authenticationFailed({required Object error}) => + 'Autentisering misslyckades: ${error}'; + @override + String get couldNotLaunchUrl => 'Kunde inte öppna autentiserings-URL'; + @override + String get pleaseEnterToken => 'Vänligen ange en token'; + @override + String get invalidToken => 'Ogiltig token'; + @override + String failedToVerifyToken({required Object error}) => + 'Misslyckades att verifiera token: ${error}'; + @override + String failedToSwitchProfile({required Object displayName}) => + 'Misslyckades att byta till ${displayName}'; + @override + String get connectionFailedGeneric => 'Anslutning misslyckades'; } // Path: libraries class _StringsLibrariesSv implements _StringsLibrariesEn { - _StringsLibrariesSv._(this._root); + _StringsLibrariesSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get title => 'Bibliotek'; - @override String get scanLibraryFiles => 'Skanna biblioteksfiler'; - @override String get scanLibrary => 'Skanna bibliotek'; - @override String get analyze => 'Analysera'; - @override String get analyzeLibrary => 'Analysera bibliotek'; - @override String get refreshMetadata => 'Uppdatera metadata'; - @override String get emptyTrash => 'Töm papperskorg'; - @override String emptyingTrash({required Object title}) => 'Tömmer papperskorg för "${title}"...'; - @override String trashEmptied({required Object title}) => 'Papperskorg tömd för "${title}"'; - @override String failedToEmptyTrash({required Object error}) => 'Misslyckades att tömma papperskorg: ${error}'; - @override String analyzing({required Object title}) => 'Analyserar "${title}"...'; - @override String analysisStarted({required Object title}) => 'Analys startad för "${title}"'; - @override String failedToAnalyze({required Object error}) => 'Misslyckades att analysera bibliotek: ${error}'; - @override String get noLibrariesFound => 'Inga bibliotek hittades'; - @override String get thisLibraryIsEmpty => 'Detta bibliotek är tomt'; - @override String get all => 'Alla'; - @override String get clearAll => 'Rensa alla'; - @override String scanLibraryConfirm({required Object title}) => 'Är du säker på att du vill skanna "${title}"?'; - @override String analyzeLibraryConfirm({required Object title}) => 'Är du säker på att du vill analysera "${title}"?'; - @override String refreshMetadataConfirm({required Object title}) => 'Är du säker på att du vill uppdatera metadata för "${title}"?'; - @override String emptyTrashConfirm({required Object title}) => 'Är du säker på att du vill tömma papperskorgen för "${title}"?'; - @override String get manageLibraries => 'Hantera bibliotek'; - @override String get sort => 'Sortera'; - @override String get sortBy => 'Sortera efter'; - @override String get filters => 'Filter'; - @override String loadingLibraryWithCount({required Object count}) => 'Laddar bibliotek... (${count} objekt laddade)'; - @override String get confirmActionMessage => 'Är du säker på att du vill utföra denna åtgärd?'; - @override String get showLibrary => 'Visa bibliotek'; - @override String get hideLibrary => 'Dölj bibliotek'; - @override String get libraryOptions => 'Biblioteksalternativ'; - @override String get content => 'bibliotekets innehåll'; - @override String get selectLibrary => 'Välj bibliotek'; - @override String filtersWithCount({required Object count}) => 'Filter (${count})'; - @override String get noRecommendations => 'Inga rekommendationer tillgängliga'; - @override String get noCollections => 'Inga samlingar i det här biblioteket'; - @override String get noFoldersFound => 'Inga mappar hittades'; - @override String get folders => 'mappar'; - @override late final _StringsLibrariesTabsSv tabs = _StringsLibrariesTabsSv._(_root); - @override late final _StringsLibrariesGroupingsSv groupings = _StringsLibrariesGroupingsSv._(_root); + // Translations + @override + String get title => 'Bibliotek'; + @override + String get scanLibraryFiles => 'Skanna biblioteksfiler'; + @override + String get scanLibrary => 'Skanna bibliotek'; + @override + String get analyze => 'Analysera'; + @override + String get analyzeLibrary => 'Analysera bibliotek'; + @override + String get refreshMetadata => 'Uppdatera metadata'; + @override + String get emptyTrash => 'Töm papperskorg'; + @override + String emptyingTrash({required Object title}) => + 'Tömmer papperskorg för "${title}"...'; + @override + String trashEmptied({required Object title}) => + 'Papperskorg tömd för "${title}"'; + @override + String failedToEmptyTrash({required Object error}) => + 'Misslyckades att tömma papperskorg: ${error}'; + @override + String analyzing({required Object title}) => 'Analyserar "${title}"...'; + @override + String analysisStarted({required Object title}) => + 'Analys startad för "${title}"'; + @override + String failedToAnalyze({required Object error}) => + 'Misslyckades att analysera bibliotek: ${error}'; + @override + String get noLibrariesFound => 'Inga bibliotek hittades'; + @override + String get thisLibraryIsEmpty => 'Detta bibliotek är tomt'; + @override + String get all => 'Alla'; + @override + String get clearAll => 'Rensa alla'; + @override + String scanLibraryConfirm({required Object title}) => + 'Är du säker på att du vill skanna "${title}"?'; + @override + String analyzeLibraryConfirm({required Object title}) => + 'Är du säker på att du vill analysera "${title}"?'; + @override + String refreshMetadataConfirm({required Object title}) => + 'Är du säker på att du vill uppdatera metadata för "${title}"?'; + @override + String emptyTrashConfirm({required Object title}) => + 'Är du säker på att du vill tömma papperskorgen för "${title}"?'; + @override + String get manageLibraries => 'Hantera bibliotek'; + @override + String get sort => 'Sortera'; + @override + String get sortBy => 'Sortera efter'; + @override + String get filters => 'Filter'; + @override + String loadingLibraryWithCount({required Object count}) => + 'Laddar bibliotek... (${count} objekt laddade)'; + @override + String get confirmActionMessage => + 'Är du säker på att du vill utföra denna åtgärd?'; + @override + String get showLibrary => 'Visa bibliotek'; + @override + String get hideLibrary => 'Dölj bibliotek'; + @override + String get libraryOptions => 'Biblioteksalternativ'; + @override + String get content => 'bibliotekets innehåll'; + @override + String get selectLibrary => 'Välj bibliotek'; + @override + String filtersWithCount({required Object count}) => 'Filter (${count})'; + @override + String get noRecommendations => 'Inga rekommendationer tillgängliga'; + @override + String get noCollections => 'Inga samlingar i det här biblioteket'; + @override + String get noFoldersFound => 'Inga mappar hittades'; + @override + String get folders => 'mappar'; + @override + late final _StringsLibrariesTabsSv tabs = _StringsLibrariesTabsSv._(_root); + @override + late final _StringsLibrariesGroupingsSv groupings = + _StringsLibrariesGroupingsSv._(_root); } // Path: about class _StringsAboutSv implements _StringsAboutEn { - _StringsAboutSv._(this._root); + _StringsAboutSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get title => 'Om'; - @override String get openSourceLicenses => 'Öppen källkod-licenser'; - @override String versionLabel({required Object version}) => 'Version ${version}'; - @override String get appDescription => 'En vacker Plex-klient för Flutter'; - @override String get viewLicensesDescription => 'Visa licenser för tredjepartsbibliotek'; + // Translations + @override + String get title => 'Om'; + @override + String get openSourceLicenses => 'Öppen källkod-licenser'; + @override + String versionLabel({required Object version}) => 'Version ${version}'; + @override + String get appDescription => 'En vacker Plex-klient för Flutter'; + @override + String get viewLicensesDescription => + 'Visa licenser för tredjepartsbibliotek'; } // Path: serverSelection class _StringsServerSelectionSv implements _StringsServerSelectionEn { - _StringsServerSelectionSv._(this._root); + _StringsServerSelectionSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get connectingToServer => 'Ansluter till server...'; - @override String get connectingToAllServers => 'Ansluter till alla servrar...'; - @override String get connectToAllServers => 'Anslut till alla servrar'; - @override String get allServerConnectionsFailed => 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.'; - @override String foundServers({required Object count}) => 'Hittade ${count} server(ar)'; - @override String get orSelectIndividually => 'Eller välj en server individuellt:'; - @override String get serverDebugCopied => 'Server-felsökningsdata kopierad till urklipp'; - @override String get copyDebugData => 'Kopiera felsökningsdata'; - @override String get noServersFound => 'Inga servrar hittades'; - @override String malformedServerData({required Object count}) => 'Hittade ${count} server(ar) med felformaterad data. Inga giltiga servrar tillgängliga.'; - @override String get incompleteServerInfo => 'Vissa servrar har ofullständig information och hoppades över. Vänligen kontrollera ditt Plex.tv-konto.'; - @override String get incompleteConnectionInfo => 'Server-anslutningsinformation är ofullständig. Försök igen.'; - @override String malformedServerInfo({required Object message}) => 'Serverinformation är felformaterad: ${message}'; - @override String get networkConnectionFailed => 'Nätverksanslutning misslyckades. Kontrollera din internetanslutning och försök igen.'; - @override String get authenticationFailed => 'Autentisering misslyckades. Logga in igen.'; - @override String get plexServiceUnavailable => 'Plex-tjänst otillgänglig. Försök igen senare.'; - @override String failedToLoadServers({required Object error}) => 'Misslyckades att ladda servrar: ${error}'; + // Translations + @override + String get connectingToServer => 'Ansluter till server...'; + @override + String get connectingToAllServers => 'Ansluter till alla servrar...'; + @override + String get connectToAllServers => 'Anslut till alla servrar'; + @override + String get allServerConnectionsFailed => + 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.'; + @override + String foundServers({required Object count}) => 'Hittade ${count} server(ar)'; + @override + String get orSelectIndividually => 'Eller välj en server individuellt:'; + @override + String get serverDebugCopied => + 'Server-felsökningsdata kopierad till urklipp'; + @override + String get copyDebugData => 'Kopiera felsökningsdata'; + @override + String get noServersFound => 'Inga servrar hittades'; + @override + String malformedServerData({required Object count}) => + 'Hittade ${count} server(ar) med felformaterad data. Inga giltiga servrar tillgängliga.'; + @override + String get incompleteServerInfo => + 'Vissa servrar har ofullständig information och hoppades över. Vänligen kontrollera ditt Plex.tv-konto.'; + @override + String get incompleteConnectionInfo => + 'Server-anslutningsinformation är ofullständig. Försök igen.'; + @override + String malformedServerInfo({required Object message}) => + 'Serverinformation är felformaterad: ${message}'; + @override + String get networkConnectionFailed => + 'Nätverksanslutning misslyckades. Kontrollera din internetanslutning och försök igen.'; + @override + String get authenticationFailed => + 'Autentisering misslyckades. Logga in igen.'; + @override + String get plexServiceUnavailable => + 'Plex-tjänst otillgänglig. Försök igen senare.'; + @override + String failedToLoadServers({required Object error}) => + 'Misslyckades att ladda servrar: ${error}'; } // Path: hubDetail class _StringsHubDetailSv implements _StringsHubDetailEn { - _StringsHubDetailSv._(this._root); + _StringsHubDetailSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get title => 'Titel'; - @override String get releaseYear => 'Utgivningsår'; - @override String get dateAdded => 'Datum tillagd'; - @override String get rating => 'Betyg'; - @override String get noItemsFound => 'Inga objekt hittades'; + // Translations + @override + String get title => 'Titel'; + @override + String get releaseYear => 'Utgivningsår'; + @override + String get dateAdded => 'Datum tillagd'; + @override + String get rating => 'Betyg'; + @override + String get noItemsFound => 'Inga objekt hittades'; } // Path: logs class _StringsLogsSv implements _StringsLogsEn { - _StringsLogsSv._(this._root); + _StringsLogsSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get title => 'Loggar'; - @override String get clearLogs => 'Rensa loggar'; - @override String get copyLogs => 'Kopiera loggar'; - @override String get exportLogs => 'Exportera loggar'; - @override String get noLogsToShow => 'Inga loggar att visa'; - @override String get error => 'Fel:'; - @override String get stackTrace => 'Stack trace:'; + // Translations + @override + String get title => 'Loggar'; + @override + String get clearLogs => 'Rensa loggar'; + @override + String get copyLogs => 'Kopiera loggar'; + @override + String get exportLogs => 'Exportera loggar'; + @override + String get noLogsToShow => 'Inga loggar att visa'; + @override + String get error => 'Fel:'; + @override + String get stackTrace => 'Stack trace:'; } // Path: licenses class _StringsLicensesSv implements _StringsLicensesEn { - _StringsLicensesSv._(this._root); + _StringsLicensesSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get relatedPackages => 'Relaterade paket'; - @override String get license => 'Licens'; - @override String licenseNumber({required Object number}) => 'Licens ${number}'; - @override String licensesCount({required Object count}) => '${count} licenser'; + // Translations + @override + String get relatedPackages => 'Relaterade paket'; + @override + String get license => 'Licens'; + @override + String licenseNumber({required Object number}) => 'Licens ${number}'; + @override + String licensesCount({required Object count}) => '${count} licenser'; } // Path: navigation class _StringsNavigationSv implements _StringsNavigationEn { - _StringsNavigationSv._(this._root); + _StringsNavigationSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get home => 'Hem'; - @override String get search => 'Sök'; - @override String get libraries => 'Bibliotek'; - @override String get settings => 'Inställningar'; + // Translations + @override + String get home => 'Hem'; + @override + String get search => 'Sök'; + @override + String get libraries => 'Bibliotek'; + @override + String get settings => 'Inställningar'; } // Path: playlists class _StringsPlaylistsSv implements _StringsPlaylistsEn { - _StringsPlaylistsSv._(this._root); + _StringsPlaylistsSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get title => 'Spellistor'; - @override String get noPlaylists => 'Inga spellistor hittades'; - @override String get create => 'Skapa spellista'; - @override String get newPlaylist => 'Ny spellista'; - @override String get playlistName => 'Spellistans namn'; - @override String get enterPlaylistName => 'Ange spellistans namn'; - @override String get edit => 'Redigera spellista'; - @override String get delete => 'Ta bort spellista'; - @override String get addTo => 'Lägg till i spellista'; - @override String get addItems => 'Lägg till objekt'; - @override String get removeItem => 'Ta bort från spellista'; - @override String get clearPlaylist => 'Rensa spellista'; - @override String get playAll => 'Spela alla'; - @override String get shuffle => 'Blanda'; - @override String get smartPlaylist => 'Smart spellista'; - @override String get regularPlaylist => 'Vanlig spellista'; - @override String itemCount({required Object count}) => '${count} objekt'; - @override String get oneItem => '1 objekt'; - @override String get emptyPlaylist => 'Denna spellista är tom'; - @override String get deleteConfirm => 'Ta bort spellista?'; - @override String deleteMessage({required Object name}) => 'Är du säker på att du vill ta bort "${name}"?'; - @override String get created => 'Spellista skapad'; - @override String get updated => 'Spellista uppdaterad'; - @override String get deleted => 'Spellista borttagen'; - @override String get itemAdded => 'Tillagd i spellista'; - @override String get itemRemoved => 'Borttagen från spellista'; - @override String get selectPlaylist => 'Välj spellista'; - @override String get createNewPlaylist => 'Skapa ny spellista'; - @override String get errorCreating => 'Det gick inte att skapa spellista'; - @override String get errorDeleting => 'Det gick inte att ta bort spellista'; - @override String get errorLoading => 'Det gick inte att ladda spellistor'; - @override String get errorAdding => 'Det gick inte att lägga till i spellista'; - @override String get errorReordering => 'Det gick inte att omordna spellisteobjekt'; - @override String get errorRemoving => 'Det gick inte att ta bort från spellista'; - @override String get playlist => 'Spellista'; + // Translations + @override + String get title => 'Spellistor'; + @override + String get noPlaylists => 'Inga spellistor hittades'; + @override + String get create => 'Skapa spellista'; + @override + String get newPlaylist => 'Ny spellista'; + @override + String get playlistName => 'Spellistans namn'; + @override + String get enterPlaylistName => 'Ange spellistans namn'; + @override + String get edit => 'Redigera spellista'; + @override + String get delete => 'Ta bort spellista'; + @override + String get addTo => 'Lägg till i spellista'; + @override + String get addItems => 'Lägg till objekt'; + @override + String get removeItem => 'Ta bort från spellista'; + @override + String get clearPlaylist => 'Rensa spellista'; + @override + String get playAll => 'Spela alla'; + @override + String get shuffle => 'Blanda'; + @override + String get smartPlaylist => 'Smart spellista'; + @override + String get regularPlaylist => 'Vanlig spellista'; + @override + String itemCount({required Object count}) => '${count} objekt'; + @override + String get oneItem => '1 objekt'; + @override + String get emptyPlaylist => 'Denna spellista är tom'; + @override + String get deleteConfirm => 'Ta bort spellista?'; + @override + String deleteMessage({required Object name}) => + 'Är du säker på att du vill ta bort "${name}"?'; + @override + String get created => 'Spellista skapad'; + @override + String get updated => 'Spellista uppdaterad'; + @override + String get deleted => 'Spellista borttagen'; + @override + String get itemAdded => 'Tillagd i spellista'; + @override + String get itemRemoved => 'Borttagen från spellista'; + @override + String get selectPlaylist => 'Välj spellista'; + @override + String get createNewPlaylist => 'Skapa ny spellista'; + @override + String get errorCreating => 'Det gick inte att skapa spellista'; + @override + String get errorDeleting => 'Det gick inte att ta bort spellista'; + @override + String get errorLoading => 'Det gick inte att ladda spellistor'; + @override + String get errorAdding => 'Det gick inte att lägga till i spellista'; + @override + String get errorReordering => 'Det gick inte att omordna spellisteobjekt'; + @override + String get errorRemoving => 'Det gick inte att ta bort från spellista'; + @override + String get playlist => 'Spellista'; } // Path: collections class _StringsCollectionsSv implements _StringsCollectionsEn { - _StringsCollectionsSv._(this._root); + _StringsCollectionsSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get title => 'Samlingar'; - @override String get collection => 'Samling'; - @override String get empty => 'Samlingen är tom'; - @override String get noItems => 'Inga objekt i den här samlingen'; - @override String get unknownLibrarySection => 'Kan inte ta bort: okänd bibliotekssektion'; - @override String get deleteCollection => 'Ta bort samling'; - @override String deleteConfirm({required Object title}) => 'Är du säker på att du vill ta bort "${title}"? Detta går inte att ångra.'; - @override String get deleted => 'Samling borttagen'; - @override String get deleteFailed => 'Det gick inte att ta bort samlingen'; - @override String deleteFailedWithError({required Object error}) => 'Det gick inte att ta bort samlingen: ${error}'; - @override String failedToLoadItems({required Object error}) => 'Det gick inte att läsa in samlingsobjekt: ${error}'; - @override String get addTo => 'Lägg till i samling'; - @override String get selectCollection => 'Välj samling'; - @override String get createNewCollection => 'Skapa ny samling'; - @override String get collectionName => 'Samlingsnamn'; - @override String get enterCollectionName => 'Ange samlingsnamn'; - @override String get addedToCollection => 'Tillagd i samling'; - @override String get errorAddingToCollection => 'Fel vid tillägg i samling'; - @override String get created => 'Samling skapad'; - @override String get removeFromCollection => 'Ta bort från samling'; - @override String removeFromCollectionConfirm({required Object title}) => 'Ta bort "${title}" från denna samling?'; - @override String get removedFromCollection => 'Borttagen från samling'; - @override String get removeFromCollectionFailed => 'Misslyckades med att ta bort från samling'; - @override String removeFromCollectionError({required Object error}) => 'Fel vid borttagning från samling: ${error}'; + // Translations + @override + String get title => 'Samlingar'; + @override + String get collection => 'Samling'; + @override + String get empty => 'Samlingen är tom'; + @override + String get noItems => 'Inga objekt i den här samlingen'; + @override + String get unknownLibrarySection => + 'Kan inte ta bort: okänd bibliotekssektion'; + @override + String get deleteCollection => 'Ta bort samling'; + @override + String deleteConfirm({required Object title}) => + 'Är du säker på att du vill ta bort "${title}"? Detta går inte att ångra.'; + @override + String get deleted => 'Samling borttagen'; + @override + String get deleteFailed => 'Det gick inte att ta bort samlingen'; + @override + String deleteFailedWithError({required Object error}) => + 'Det gick inte att ta bort samlingen: ${error}'; + @override + String failedToLoadItems({required Object error}) => + 'Det gick inte att läsa in samlingsobjekt: ${error}'; + @override + String get addTo => 'Lägg till i samling'; + @override + String get selectCollection => 'Välj samling'; + @override + String get createNewCollection => 'Skapa ny samling'; + @override + String get collectionName => 'Samlingsnamn'; + @override + String get enterCollectionName => 'Ange samlingsnamn'; + @override + String get addedToCollection => 'Tillagd i samling'; + @override + String get errorAddingToCollection => 'Fel vid tillägg i samling'; + @override + String get created => 'Samling skapad'; + @override + String get removeFromCollection => 'Ta bort från samling'; + @override + String removeFromCollectionConfirm({required Object title}) => + 'Ta bort "${title}" från denna samling?'; + @override + String get removedFromCollection => 'Borttagen från samling'; + @override + String get removeFromCollectionFailed => + 'Misslyckades med att ta bort från samling'; + @override + String removeFromCollectionError({required Object error}) => + 'Fel vid borttagning från samling: ${error}'; } // Path: libraries.tabs class _StringsLibrariesTabsSv implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsSv._(this._root); + _StringsLibrariesTabsSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get recommended => 'Rekommenderat'; - @override String get browse => 'Bläddra'; - @override String get collections => 'Samlingar'; - @override String get playlists => 'Spellistor'; + // Translations + @override + String get recommended => 'Rekommenderat'; + @override + String get browse => 'Bläddra'; + @override + String get collections => 'Samlingar'; + @override + String get playlists => 'Spellistor'; } // Path: libraries.groupings class _StringsLibrariesGroupingsSv implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsSv._(this._root); + _StringsLibrariesGroupingsSv._(this._root); - @override final _StringsSv _root; // ignore: unused_field + @override + final _StringsSv _root; // ignore: unused_field - // Translations - @override String get all => 'Alla'; - @override String get movies => 'Filmer'; - @override String get shows => 'Serier'; - @override String get seasons => 'Säsonger'; - @override String get episodes => 'Avsnitt'; - @override String get folders => 'Mappar'; + // Translations + @override + String get all => 'Alla'; + @override + String get movies => 'Filmer'; + @override + String get shows => 'Serier'; + @override + String get seasons => 'Säsonger'; + @override + String get episodes => 'Avsnitt'; + @override + String get folders => 'Mappar'; } // Path: class _StringsZh implements Translations { - /// You can call this constructor and build your own translation instance of this locale. - /// Constructing via the enum [AppLocale.build] is preferred. - _StringsZh.build({Map? overrides, PluralResolver? cardinalResolver, PluralResolver? ordinalResolver}) - : assert(overrides == null, 'Set "translation_overrides: true" in order to enable this feature.'), - $meta = TranslationMetadata( - locale: AppLocale.zh, - overrides: overrides ?? {}, - cardinalResolver: cardinalResolver, - ordinalResolver: ordinalResolver, - ) { - $meta.setFlatMapFunction(_flatMapFunction); - } + /// You can call this constructor and build your own translation instance of this locale. + /// Constructing via the enum [AppLocale.build] is preferred. + _StringsZh.build({ + Map? overrides, + PluralResolver? cardinalResolver, + PluralResolver? ordinalResolver, + }) : assert( + overrides == null, + 'Set "translation_overrides: true" in order to enable this feature.', + ), + $meta = TranslationMetadata( + locale: AppLocale.zh, + overrides: overrides ?? {}, + cardinalResolver: cardinalResolver, + ordinalResolver: ordinalResolver, + ) { + $meta.setFlatMapFunction(_flatMapFunction); + } - /// Metadata for the translations of . - @override final TranslationMetadata $meta; + /// Metadata for the translations of . + @override + final TranslationMetadata $meta; - /// Access flat map - @override dynamic operator[](String key) => $meta.getTranslation(key); + /// Access flat map + @override + dynamic operator [](String key) => $meta.getTranslation(key); - @override late final _StringsZh _root = this; // ignore: unused_field + @override + late final _StringsZh _root = this; // ignore: unused_field - // Translations - @override late final _StringsAppZh app = _StringsAppZh._(_root); - @override late final _StringsAuthZh auth = _StringsAuthZh._(_root); - @override late final _StringsCommonZh common = _StringsCommonZh._(_root); - @override late final _StringsScreensZh screens = _StringsScreensZh._(_root); - @override late final _StringsUpdateZh update = _StringsUpdateZh._(_root); - @override late final _StringsSettingsZh settings = _StringsSettingsZh._(_root); - @override late final _StringsSearchZh search = _StringsSearchZh._(_root); - @override late final _StringsHotkeysZh hotkeys = _StringsHotkeysZh._(_root); - @override late final _StringsPinEntryZh pinEntry = _StringsPinEntryZh._(_root); - @override late final _StringsFileInfoZh fileInfo = _StringsFileInfoZh._(_root); - @override late final _StringsMediaMenuZh mediaMenu = _StringsMediaMenuZh._(_root); - @override late final _StringsAccessibilityZh accessibility = _StringsAccessibilityZh._(_root); - @override late final _StringsTooltipsZh tooltips = _StringsTooltipsZh._(_root); - @override late final _StringsVideoControlsZh videoControls = _StringsVideoControlsZh._(_root); - @override late final _StringsUserStatusZh userStatus = _StringsUserStatusZh._(_root); - @override late final _StringsMessagesZh messages = _StringsMessagesZh._(_root); - @override late final _StringsProfileZh profile = _StringsProfileZh._(_root); - @override late final _StringsSubtitlingStylingZh subtitlingStyling = _StringsSubtitlingStylingZh._(_root); - @override late final _StringsDialogZh dialog = _StringsDialogZh._(_root); - @override late final _StringsDiscoverZh discover = _StringsDiscoverZh._(_root); - @override late final _StringsErrorsZh errors = _StringsErrorsZh._(_root); - @override late final _StringsLibrariesZh libraries = _StringsLibrariesZh._(_root); - @override late final _StringsAboutZh about = _StringsAboutZh._(_root); - @override late final _StringsServerSelectionZh serverSelection = _StringsServerSelectionZh._(_root); - @override late final _StringsHubDetailZh hubDetail = _StringsHubDetailZh._(_root); - @override late final _StringsLogsZh logs = _StringsLogsZh._(_root); - @override late final _StringsLicensesZh licenses = _StringsLicensesZh._(_root); - @override late final _StringsNavigationZh navigation = _StringsNavigationZh._(_root); - @override late final _StringsPlaylistsZh playlists = _StringsPlaylistsZh._(_root); - @override late final _StringsCollectionsZh collections = _StringsCollectionsZh._(_root); + // Translations + @override + late final _StringsAppZh app = _StringsAppZh._(_root); + @override + late final _StringsAuthZh auth = _StringsAuthZh._(_root); + @override + late final _StringsCommonZh common = _StringsCommonZh._(_root); + @override + late final _StringsScreensZh screens = _StringsScreensZh._(_root); + @override + late final _StringsUpdateZh update = _StringsUpdateZh._(_root); + @override + late final _StringsSettingsZh settings = _StringsSettingsZh._(_root); + @override + late final _StringsSearchZh search = _StringsSearchZh._(_root); + @override + late final _StringsHotkeysZh hotkeys = _StringsHotkeysZh._(_root); + @override + late final _StringsPinEntryZh pinEntry = _StringsPinEntryZh._(_root); + @override + late final _StringsFileInfoZh fileInfo = _StringsFileInfoZh._(_root); + @override + late final _StringsMediaMenuZh mediaMenu = _StringsMediaMenuZh._(_root); + @override + late final _StringsAccessibilityZh accessibility = _StringsAccessibilityZh._( + _root, + ); + @override + late final _StringsTooltipsZh tooltips = _StringsTooltipsZh._(_root); + @override + late final _StringsVideoControlsZh videoControls = _StringsVideoControlsZh._( + _root, + ); + @override + late final _StringsUserStatusZh userStatus = _StringsUserStatusZh._(_root); + @override + late final _StringsMessagesZh messages = _StringsMessagesZh._(_root); + @override + late final _StringsProfileZh profile = _StringsProfileZh._(_root); + @override + late final _StringsSubtitlingStylingZh subtitlingStyling = + _StringsSubtitlingStylingZh._(_root); + @override + late final _StringsDialogZh dialog = _StringsDialogZh._(_root); + @override + late final _StringsDiscoverZh discover = _StringsDiscoverZh._(_root); + @override + late final _StringsErrorsZh errors = _StringsErrorsZh._(_root); + @override + late final _StringsLibrariesZh libraries = _StringsLibrariesZh._(_root); + @override + late final _StringsAboutZh about = _StringsAboutZh._(_root); + @override + late final _StringsServerSelectionZh serverSelection = + _StringsServerSelectionZh._(_root); + @override + late final _StringsHubDetailZh hubDetail = _StringsHubDetailZh._(_root); + @override + late final _StringsLogsZh logs = _StringsLogsZh._(_root); + @override + late final _StringsLicensesZh licenses = _StringsLicensesZh._(_root); + @override + late final _StringsNavigationZh navigation = _StringsNavigationZh._(_root); + @override + late final _StringsPlaylistsZh playlists = _StringsPlaylistsZh._(_root); + @override + late final _StringsCollectionsZh collections = _StringsCollectionsZh._(_root); } // Path: app class _StringsAppZh implements _StringsAppEn { - _StringsAppZh._(this._root); + _StringsAppZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get title => 'Plezy'; - @override String get loading => '加载中...'; + // Translations + @override + String get title => 'Plezy'; + @override + String get loading => '加载中...'; } // Path: auth class _StringsAuthZh implements _StringsAuthEn { - _StringsAuthZh._(this._root); + _StringsAuthZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get signInWithPlex => '使用 Plex 登录'; - @override String get showQRCode => '显示二维码'; - @override String get cancel => '取消'; - @override String get authenticate => '验证'; - @override String get retry => '重试'; - @override String get debugEnterToken => '调试:输入 Plex Token'; - @override String get plexTokenLabel => 'Plex 授权令牌 (Auth Token)'; - @override String get plexTokenHint => '输入你的 Plex.tv 令牌'; - @override String get authenticationTimeout => '验证超时。请重试。'; - @override String get scanQRCodeInstruction => '请使用已登录 Plex 的设备扫描此二维码进行验证。'; - @override String get waitingForAuth => '等待验证中...\n请在你的浏览器中完成登录。'; + // Translations + @override + String get signInWithPlex => '使用 Plex 登录'; + @override + String get showQRCode => '显示二维码'; + @override + String get cancel => '取消'; + @override + String get authenticate => '验证'; + @override + String get retry => '重试'; + @override + String get debugEnterToken => '调试:输入 Plex Token'; + @override + String get plexTokenLabel => 'Plex 授权令牌 (Auth Token)'; + @override + String get plexTokenHint => '输入你的 Plex.tv 令牌'; + @override + String get authenticationTimeout => '验证超时。请重试。'; + @override + String get scanQRCodeInstruction => '请使用已登录 Plex 的设备扫描此二维码进行验证。'; + @override + String get waitingForAuth => '等待验证中...\n请在你的浏览器中完成登录。'; } // Path: common class _StringsCommonZh implements _StringsCommonEn { - _StringsCommonZh._(this._root); + _StringsCommonZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get cancel => '取消'; - @override String get save => '保存'; - @override String get close => '关闭'; - @override String get clear => '清除'; - @override String get reset => '重置'; - @override String get later => '稍后'; - @override String get submit => '提交'; - @override String get confirm => '确认'; - @override String get retry => '重试'; - @override String get playNow => '立即播放'; - @override String get logout => '登出'; - @override String get online => '在线'; - @override String get offline => '离线'; - @override String get owned => '拥有'; - @override String get shared => '共享'; - @override String get current => '当前'; - @override String get unknown => '未知'; - @override String get refresh => '刷新'; - @override String get yes => '是'; - @override String get no => '否'; - @override String get server => '服务器'; - @override String get delete => '删除'; - @override String get shuffle => '随机播放'; - @override String get addTo => '添加到...'; + // Translations + @override + String get cancel => '取消'; + @override + String get save => '保存'; + @override + String get close => '关闭'; + @override + String get clear => '清除'; + @override + String get reset => '重置'; + @override + String get later => '稍后'; + @override + String get submit => '提交'; + @override + String get confirm => '确认'; + @override + String get retry => '重试'; + @override + String get playNow => '立即播放'; + @override + String get logout => '登出'; + @override + String get online => '在线'; + @override + String get offline => '离线'; + @override + String get owned => '拥有'; + @override + String get shared => '共享'; + @override + String get current => '当前'; + @override + String get unknown => '未知'; + @override + String get refresh => '刷新'; + @override + String get yes => '是'; + @override + String get no => '否'; + @override + String get server => '服务器'; + @override + String get delete => '删除'; + @override + String get shuffle => '随机播放'; + @override + String get addTo => '添加到...'; } // Path: screens class _StringsScreensZh implements _StringsScreensEn { - _StringsScreensZh._(this._root); + _StringsScreensZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get licenses => '许可证'; - @override String get selectServer => '选择服务器'; - @override String get switchProfile => '切换配置文件'; - @override String get subtitleStyling => '字幕样式'; - @override String get search => '搜索'; - @override String get logs => '日志'; + // Translations + @override + String get licenses => '许可证'; + @override + String get selectServer => '选择服务器'; + @override + String get switchProfile => '切换配置文件'; + @override + String get subtitleStyling => '字幕样式'; + @override + String get search => '搜索'; + @override + String get logs => '日志'; } // Path: update class _StringsUpdateZh implements _StringsUpdateEn { - _StringsUpdateZh._(this._root); + _StringsUpdateZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get available => '有可用更新'; - @override String versionAvailable({required Object version}) => '版本 ${version} 已发布'; - @override String currentVersion({required Object version}) => '当前版本: ${version}'; - @override String get skipVersion => '跳过此版本'; - @override String get viewRelease => '查看发布详情'; - @override String get latestVersion => '已安装的版本是可用的最新版本'; - @override String get checkFailed => '无法检查更新'; + // Translations + @override + String get available => '有可用更新'; + @override + String versionAvailable({required Object version}) => '版本 ${version} 已发布'; + @override + String currentVersion({required Object version}) => '当前版本: ${version}'; + @override + String get skipVersion => '跳过此版本'; + @override + String get viewRelease => '查看发布详情'; + @override + String get latestVersion => '已安装的版本是可用的最新版本'; + @override + String get checkFailed => '无法检查更新'; } // Path: settings class _StringsSettingsZh implements _StringsSettingsEn { - _StringsSettingsZh._(this._root); + _StringsSettingsZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get title => '设置'; - @override String get language => '语言'; - @override String get theme => '主题'; - @override String get appearance => '外观'; - @override String get videoPlayback => '视频播放'; - @override String get shufflePlay => '随机播放'; - @override String get advanced => '高级'; - @override String get useSeasonPostersDescription => '为剧集显示季海报而非剧集海报'; - @override String get showHeroSectionDescription => '在主屏幕上显示精选内容轮播区'; - @override String get secondsLabel => '秒'; - @override String get minutesLabel => '分钟'; - @override String get secondsShort => 's'; - @override String get minutesShort => 'm'; - @override String durationHint({required Object min, required Object max}) => '输入时长 (${min}-${max})'; - @override String get systemTheme => '系统'; - @override String get systemThemeDescription => '跟随系统设置'; - @override String get lightTheme => '浅色'; - @override String get darkTheme => '深色'; - @override String get libraryDensity => '媒体库密度'; - @override String get compact => '紧凑'; - @override String get compactDescription => '卡片更小,显示更多项目'; - @override String get normal => '标准'; - @override String get normalDescription => '默认尺寸'; - @override String get comfortable => '舒适'; - @override String get comfortableDescription => '卡片更大,显示更少项目'; - @override String get viewMode => '视图模式'; - @override String get gridView => '网格视图'; - @override String get gridViewDescription => '以网格布局显示项目'; - @override String get listView => '列表视图'; - @override String get listViewDescription => '以列表布局显示项目'; - @override String get useSeasonPosters => '使用季海报'; - @override String get showHeroSection => '显示主要精选区'; - @override String get hardwareDecoding => '硬件解码'; - @override String get hardwareDecodingDescription => '如果可用,使用硬件加速'; - @override String get bufferSize => '缓冲区大小'; - @override String bufferSizeMB({required Object size}) => '${size}MB'; - @override String get subtitleStyling => '字幕样式'; - @override String get subtitleStylingDescription => '调整字幕外观'; - @override String get smallSkipDuration => '短跳过时长'; - @override String get largeSkipDuration => '长跳过时长'; - @override String secondsUnit({required Object seconds}) => '${seconds} 秒'; - @override String get defaultSleepTimer => '默认睡眠定时器'; - @override String minutesUnit({required Object minutes}) => '${minutes} 分钟'; - @override String get rememberTrackSelections => '记住每个剧集/电影的音轨选择'; - @override String get rememberTrackSelectionsDescription => '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; - @override String get unwatchedOnly => '仅未观看'; - @override String get unwatchedOnlyDescription => '随机队列中仅包含未观看的剧集'; - @override String get shuffleOrderNavigation => '随机顺序导航'; - @override String get shuffleOrderNavigationDescription => '下一集/上一集按钮遵循随机播放顺序'; - @override String get loopShuffleQueue => '循环随机队列'; - @override String get loopShuffleQueueDescription => '在队列结束时重新开始'; - @override String get videoPlayerControls => '视频播放器控制'; - @override String get keyboardShortcuts => '键盘快捷键'; - @override String get keyboardShortcutsDescription => '自定义键盘快捷键'; - @override String get debugLogging => '调试日志'; - @override String get debugLoggingDescription => '启用详细日志记录以便故障排除'; - @override String get viewLogs => '查看日志'; - @override String get viewLogsDescription => '查看应用程序日志'; - @override String get clearCache => '清除缓存'; - @override String get clearCacheDescription => '这将清除所有缓存的图片和数据。清除缓存后,应用程序加载内容可能会变慢。'; - @override String get clearCacheSuccess => '缓存清除成功'; - @override String get resetSettings => '重置设置'; - @override String get resetSettingsDescription => '这会将所有设置重置为其默认值。此操作无法撤销。'; - @override String get resetSettingsSuccess => '设置重置成功'; - @override String get shortcutsReset => '快捷键已重置为默认值'; - @override String get about => '关于'; - @override String get aboutDescription => '应用程序信息和许可证'; - @override String get updates => '更新'; - @override String get updateAvailable => '有可用更新'; - @override String get checkForUpdates => '检查更新'; - @override String get validationErrorEnterNumber => '请输入一个有效的数字'; - @override String validationErrorDuration({required Object min, required Object max, required Object unit}) => '时长必须介于 ${min} 和 ${max} ${unit} 之间'; - @override String shortcutAlreadyAssigned({required Object action}) => '快捷键已被分配给 ${action}'; - @override String shortcutUpdated({required Object action}) => '快捷键已为 ${action} 更新'; - @override String get autoSkip => '自动跳过'; - @override String get autoSkipIntro => '自动跳过片头'; - @override String get autoSkipIntroDescription => '几秒钟后自动跳过片头标记'; - @override String get autoSkipCredits => '自动跳过片尾'; - @override String get autoSkipCreditsDescription => '自动跳过片尾并播放下一集'; - @override String get autoSkipDelay => '自动跳过延迟'; - @override String autoSkipDelayDescription({required Object seconds}) => '自动跳过前等待 ${seconds} 秒'; + // Translations + @override + String get title => '设置'; + @override + String get language => '语言'; + @override + String get theme => '主题'; + @override + String get appearance => '外观'; + @override + String get videoPlayback => '视频播放'; + @override + String get shufflePlay => '随机播放'; + @override + String get advanced => '高级'; + @override + String get useSeasonPostersDescription => '为剧集显示季海报而非剧集海报'; + @override + String get showHeroSectionDescription => '在主屏幕上显示精选内容轮播区'; + @override + String get secondsLabel => '秒'; + @override + String get minutesLabel => '分钟'; + @override + String get secondsShort => 's'; + @override + String get minutesShort => 'm'; + @override + String durationHint({required Object min, required Object max}) => + '输入时长 (${min}-${max})'; + @override + String get systemTheme => '系统'; + @override + String get systemThemeDescription => '跟随系统设置'; + @override + String get lightTheme => '浅色'; + @override + String get darkTheme => '深色'; + @override + String get libraryDensity => '媒体库密度'; + @override + String get compact => '紧凑'; + @override + String get compactDescription => '卡片更小,显示更多项目'; + @override + String get normal => '标准'; + @override + String get normalDescription => '默认尺寸'; + @override + String get comfortable => '舒适'; + @override + String get comfortableDescription => '卡片更大,显示更少项目'; + @override + String get viewMode => '视图模式'; + @override + String get gridView => '网格视图'; + @override + String get gridViewDescription => '以网格布局显示项目'; + @override + String get listView => '列表视图'; + @override + String get listViewDescription => '以列表布局显示项目'; + @override + String get useSeasonPosters => '使用季海报'; + @override + String get showHeroSection => '显示主要精选区'; + @override + String get hardwareDecoding => '硬件解码'; + @override + String get hardwareDecodingDescription => '如果可用,使用硬件加速'; + @override + String get bufferSize => '缓冲区大小'; + @override + String bufferSizeMB({required Object size}) => '${size}MB'; + @override + String get subtitleStyling => '字幕样式'; + @override + String get subtitleStylingDescription => '调整字幕外观'; + @override + String get smallSkipDuration => '短跳过时长'; + @override + String get largeSkipDuration => '长跳过时长'; + @override + String secondsUnit({required Object seconds}) => '${seconds} 秒'; + @override + String get defaultSleepTimer => '默认睡眠定时器'; + @override + String minutesUnit({required Object minutes}) => '${minutes} 分钟'; + @override + String get rememberTrackSelections => '记住每个剧集/电影的音轨选择'; + @override + String get rememberTrackSelectionsDescription => '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; + @override + String get unwatchedOnly => '仅未观看'; + @override + String get unwatchedOnlyDescription => '随机队列中仅包含未观看的剧集'; + @override + String get shuffleOrderNavigation => '随机顺序导航'; + @override + String get shuffleOrderNavigationDescription => '下一集/上一集按钮遵循随机播放顺序'; + @override + String get loopShuffleQueue => '循环随机队列'; + @override + String get loopShuffleQueueDescription => '在队列结束时重新开始'; + @override + String get videoPlayerControls => '视频播放器控制'; + @override + String get keyboardShortcuts => '键盘快捷键'; + @override + String get keyboardShortcutsDescription => '自定义键盘快捷键'; + @override + String get debugLogging => '调试日志'; + @override + String get debugLoggingDescription => '启用详细日志记录以便故障排除'; + @override + String get viewLogs => '查看日志'; + @override + String get viewLogsDescription => '查看应用程序日志'; + @override + String get clearCache => '清除缓存'; + @override + String get clearCacheDescription => '这将清除所有缓存的图片和数据。清除缓存后,应用程序加载内容可能会变慢。'; + @override + String get clearCacheSuccess => '缓存清除成功'; + @override + String get resetSettings => '重置设置'; + @override + String get resetSettingsDescription => '这会将所有设置重置为其默认值。此操作无法撤销。'; + @override + String get resetSettingsSuccess => '设置重置成功'; + @override + String get shortcutsReset => '快捷键已重置为默认值'; + @override + String get about => '关于'; + @override + String get aboutDescription => '应用程序信息和许可证'; + @override + String get updates => '更新'; + @override + String get updateAvailable => '有可用更新'; + @override + String get checkForUpdates => '检查更新'; + @override + String get validationErrorEnterNumber => '请输入一个有效的数字'; + @override + String validationErrorDuration({ + required Object min, + required Object max, + required Object unit, + }) => '时长必须介于 ${min} 和 ${max} ${unit} 之间'; + @override + String shortcutAlreadyAssigned({required Object action}) => + '快捷键已被分配给 ${action}'; + @override + String shortcutUpdated({required Object action}) => '快捷键已为 ${action} 更新'; + @override + String get autoSkip => '自动跳过'; + @override + String get autoSkipIntro => '自动跳过片头'; + @override + String get autoSkipIntroDescription => '几秒钟后自动跳过片头标记'; + @override + String get autoSkipCredits => '自动跳过片尾'; + @override + String get autoSkipCreditsDescription => '自动跳过片尾并播放下一集'; + @override + String get autoSkipDelay => '自动跳过延迟'; + @override + String autoSkipDelayDescription({required Object seconds}) => + '自动跳过前等待 ${seconds} 秒'; } // Path: search class _StringsSearchZh implements _StringsSearchEn { - _StringsSearchZh._(this._root); + _StringsSearchZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get hint => '搜索电影、系列、音乐...'; - @override String get tryDifferentTerm => '尝试不同的搜索词'; - @override String get searchYourMedia => '搜索媒体'; - @override String get enterTitleActorOrKeyword => '输入标题、演员或关键词'; + // Translations + @override + String get hint => '搜索电影、系列、音乐...'; + @override + String get tryDifferentTerm => '尝试不同的搜索词'; + @override + String get searchYourMedia => '搜索媒体'; + @override + String get enterTitleActorOrKeyword => '输入标题、演员或关键词'; } // Path: hotkeys class _StringsHotkeysZh implements _StringsHotkeysEn { - _StringsHotkeysZh._(this._root); + _StringsHotkeysZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String setShortcutFor({required Object actionName}) => '为 ${actionName} 设置快捷键'; - @override String get clearShortcut => '清除快捷键'; + // Translations + @override + String setShortcutFor({required Object actionName}) => + '为 ${actionName} 设置快捷键'; + @override + String get clearShortcut => '清除快捷键'; } // Path: pinEntry class _StringsPinEntryZh implements _StringsPinEntryEn { - _StringsPinEntryZh._(this._root); + _StringsPinEntryZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get enterPin => '输入 PIN'; - @override String get showPin => '显示 PIN'; - @override String get hidePin => '隐藏 PIN'; + // Translations + @override + String get enterPin => '输入 PIN'; + @override + String get showPin => '显示 PIN'; + @override + String get hidePin => '隐藏 PIN'; } // Path: fileInfo class _StringsFileInfoZh implements _StringsFileInfoEn { - _StringsFileInfoZh._(this._root); + _StringsFileInfoZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get title => '文件信息'; - @override String get video => '视频'; - @override String get audio => '音频'; - @override String get file => '文件'; - @override String get advanced => '高级'; - @override String get codec => '编解码器'; - @override String get resolution => '分辨率'; - @override String get bitrate => '比特率'; - @override String get frameRate => '帧率'; - @override String get aspectRatio => '宽高比'; - @override String get profile => '配置文件'; - @override String get bitDepth => '位深度'; - @override String get colorSpace => '色彩空间'; - @override String get colorRange => '色彩范围'; - @override String get colorPrimaries => '颜色原色'; - @override String get chromaSubsampling => '色度子采样'; - @override String get channels => '声道'; - @override String get path => '路径'; - @override String get size => '大小'; - @override String get container => '容器'; - @override String get duration => '时长'; - @override String get optimizedForStreaming => '已优化用于流媒体'; - @override String get has64bitOffsets => '64位偏移量'; + // Translations + @override + String get title => '文件信息'; + @override + String get video => '视频'; + @override + String get audio => '音频'; + @override + String get file => '文件'; + @override + String get advanced => '高级'; + @override + String get codec => '编解码器'; + @override + String get resolution => '分辨率'; + @override + String get bitrate => '比特率'; + @override + String get frameRate => '帧率'; + @override + String get aspectRatio => '宽高比'; + @override + String get profile => '配置文件'; + @override + String get bitDepth => '位深度'; + @override + String get colorSpace => '色彩空间'; + @override + String get colorRange => '色彩范围'; + @override + String get colorPrimaries => '颜色原色'; + @override + String get chromaSubsampling => '色度子采样'; + @override + String get channels => '声道'; + @override + String get path => '路径'; + @override + String get size => '大小'; + @override + String get container => '容器'; + @override + String get duration => '时长'; + @override + String get optimizedForStreaming => '已优化用于流媒体'; + @override + String get has64bitOffsets => '64位偏移量'; } // Path: mediaMenu class _StringsMediaMenuZh implements _StringsMediaMenuEn { - _StringsMediaMenuZh._(this._root); + _StringsMediaMenuZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get markAsWatched => '标记为已观看'; - @override String get markAsUnwatched => '标记为未观看'; - @override String get removeFromContinueWatching => '从继续观看中移除'; - @override String get goToSeries => '转到系列'; - @override String get goToSeason => '转到季'; - @override String get shufflePlay => '随机播放'; - @override String get fileInfo => '文件信息'; + // Translations + @override + String get markAsWatched => '标记为已观看'; + @override + String get markAsUnwatched => '标记为未观看'; + @override + String get removeFromContinueWatching => '从继续观看中移除'; + @override + String get goToSeries => '转到系列'; + @override + String get goToSeason => '转到季'; + @override + String get shufflePlay => '随机播放'; + @override + String get fileInfo => '文件信息'; } // Path: accessibility class _StringsAccessibilityZh implements _StringsAccessibilityEn { - _StringsAccessibilityZh._(this._root); + _StringsAccessibilityZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String mediaCardMovie({required Object title}) => '${title}, 电影'; - @override String mediaCardShow({required Object title}) => '${title}, 电视剧'; - @override String mediaCardEpisode({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - @override String mediaCardSeason({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - @override String get mediaCardWatched => '已观看'; - @override String mediaCardPartiallyWatched({required Object percent}) => '已观看 ${percent} 百分比'; - @override String get mediaCardUnwatched => '未观看'; - @override String get tapToPlay => '点击播放'; + // Translations + @override + String mediaCardMovie({required Object title}) => '${title}, 电影'; + @override + String mediaCardShow({required Object title}) => '${title}, 电视剧'; + @override + String mediaCardEpisode({ + required Object title, + required Object episodeInfo, + }) => '${title}, ${episodeInfo}'; + @override + String mediaCardSeason({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + @override + String get mediaCardWatched => '已观看'; + @override + String mediaCardPartiallyWatched({required Object percent}) => + '已观看 ${percent} 百分比'; + @override + String get mediaCardUnwatched => '未观看'; + @override + String get tapToPlay => '点击播放'; } // Path: tooltips class _StringsTooltipsZh implements _StringsTooltipsEn { - _StringsTooltipsZh._(this._root); + _StringsTooltipsZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get shufflePlay => '随机播放'; - @override String get markAsWatched => '标记为已观看'; - @override String get markAsUnwatched => '标记为未观看'; + // Translations + @override + String get shufflePlay => '随机播放'; + @override + String get markAsWatched => '标记为已观看'; + @override + String get markAsUnwatched => '标记为未观看'; } // Path: videoControls class _StringsVideoControlsZh implements _StringsVideoControlsEn { - _StringsVideoControlsZh._(this._root); + _StringsVideoControlsZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get audioLabel => '音频'; - @override String get subtitlesLabel => '字幕'; - @override String get resetToZero => '重置为 0ms'; - @override String addTime({required Object amount, required Object unit}) => '+${amount}${unit}'; - @override String minusTime({required Object amount, required Object unit}) => '-${amount}${unit}'; - @override String playsLater({required Object label}) => '${label} 播放较晚'; - @override String playsEarlier({required Object label}) => '${label} 播放较早'; - @override String get noOffset => '无偏移'; - @override String get letterbox => '信箱模式(Letterbox)'; - @override String get fillScreen => '填充屏幕'; - @override String get stretch => '拉伸'; - @override String get lockRotation => '锁定旋转'; - @override String get unlockRotation => '解锁旋转'; - @override String get sleepTimer => '睡眠定时器'; - @override String get timerActive => '定时器已激活'; - @override String playbackWillPauseIn({required Object duration}) => '播放将在 ${duration} 后暂停'; - @override String get sleepTimerCompleted => '睡眠定时器已完成 - 播放已暂停'; - @override String get playButton => '播放'; - @override String get pauseButton => '暂停'; - @override String seekBackwardButton({required Object seconds}) => '后退 ${seconds} 秒'; - @override String seekForwardButton({required Object seconds}) => '前进 ${seconds} 秒'; - @override String get previousButton => '上一集'; - @override String get nextButton => '下一集'; - @override String get previousChapterButton => '上一章节'; - @override String get nextChapterButton => '下一章节'; - @override String get volumeButton => '音量'; - @override String get muteButton => '静音'; - @override String get unmuteButton => '取消静音'; - @override String get settingsButton => '视频设置'; - @override String get audioTrackButton => '音轨'; - @override String get subtitlesButton => '字幕'; - @override String get chaptersButton => '章节'; - @override String get versionsButton => '视频版本'; - @override String get aspectRatioButton => '宽高比'; - @override String get fullscreenButton => '进入全屏'; - @override String get exitFullscreenButton => '退出全屏'; - @override String get rotationLockButton => '旋转锁定'; - @override String get timelineSlider => '视频时间轴'; - @override String get volumeSlider => '音量调节'; - @override String get backButton => '返回'; + // Translations + @override + String get audioLabel => '音频'; + @override + String get subtitlesLabel => '字幕'; + @override + String get resetToZero => '重置为 0ms'; + @override + String addTime({required Object amount, required Object unit}) => + '+${amount}${unit}'; + @override + String minusTime({required Object amount, required Object unit}) => + '-${amount}${unit}'; + @override + String playsLater({required Object label}) => '${label} 播放较晚'; + @override + String playsEarlier({required Object label}) => '${label} 播放较早'; + @override + String get noOffset => '无偏移'; + @override + String get letterbox => '信箱模式(Letterbox)'; + @override + String get fillScreen => '填充屏幕'; + @override + String get stretch => '拉伸'; + @override + String get lockRotation => '锁定旋转'; + @override + String get unlockRotation => '解锁旋转'; + @override + String get sleepTimer => '睡眠定时器'; + @override + String get timerActive => '定时器已激活'; + @override + String playbackWillPauseIn({required Object duration}) => + '播放将在 ${duration} 后暂停'; + @override + String get sleepTimerCompleted => '睡眠定时器已完成 - 播放已暂停'; + @override + String get playButton => '播放'; + @override + String get pauseButton => '暂停'; + @override + String seekBackwardButton({required Object seconds}) => '后退 ${seconds} 秒'; + @override + String seekForwardButton({required Object seconds}) => '前进 ${seconds} 秒'; + @override + String get previousButton => '上一集'; + @override + String get nextButton => '下一集'; + @override + String get previousChapterButton => '上一章节'; + @override + String get nextChapterButton => '下一章节'; + @override + String get volumeButton => '音量'; + @override + String get muteButton => '静音'; + @override + String get unmuteButton => '取消静音'; + @override + String get settingsButton => '视频设置'; + @override + String get audioTrackButton => '音轨'; + @override + String get subtitlesButton => '字幕'; + @override + String get chaptersButton => '章节'; + @override + String get versionsButton => '视频版本'; + @override + String get aspectRatioButton => '宽高比'; + @override + String get fullscreenButton => '进入全屏'; + @override + String get exitFullscreenButton => '退出全屏'; + @override + String get rotationLockButton => '旋转锁定'; + @override + String get timelineSlider => '视频时间轴'; + @override + String get volumeSlider => '音量调节'; + @override + String get backButton => '返回'; } // Path: userStatus class _StringsUserStatusZh implements _StringsUserStatusEn { - _StringsUserStatusZh._(this._root); + _StringsUserStatusZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get admin => '管理员'; - @override String get restricted => '受限'; - @override String get protected => '受保护'; - @override String get current => '当前'; + // Translations + @override + String get admin => '管理员'; + @override + String get restricted => '受限'; + @override + String get protected => '受保护'; + @override + String get current => '当前'; } // Path: messages class _StringsMessagesZh implements _StringsMessagesEn { - _StringsMessagesZh._(this._root); + _StringsMessagesZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get markedAsWatched => '已标记为已观看'; - @override String get markedAsUnwatched => '已标记为未观看'; - @override String get removedFromContinueWatching => '已从继续观看中移除'; - @override String errorLoading({required Object error}) => '错误: ${error}'; - @override String get fileInfoNotAvailable => '文件信息不可用'; - @override String errorLoadingFileInfo({required Object error}) => '加载文件信息时出错: ${error}'; - @override String get errorLoadingSeries => '加载系列时出错'; - @override String get errorLoadingSeason => '加载季时出错'; - @override String get musicNotSupported => '尚不支持播放音乐'; - @override String get logsCleared => '日志已清除'; - @override String get logsCopied => '日志已复制到剪贴板'; - @override String get noLogsAvailable => '没有可用日志'; - @override String libraryScanning({required Object title}) => '正在扫描 “${title}”...'; - @override String libraryScanStarted({required Object title}) => '已开始扫描 “${title}” 媒体库'; - @override String libraryScanFailed({required Object error}) => '无法扫描媒体库: ${error}'; - @override String metadataRefreshing({required Object title}) => '正在刷新 “${title}” 的元数据...'; - @override String metadataRefreshStarted({required Object title}) => '已开始刷新 “${title}” 的元数据'; - @override String metadataRefreshFailed({required Object error}) => '无法刷新元数据: ${error}'; - @override String get noPlexToken => '未找到 Plex 令牌。请重新登录。'; - @override String get logoutConfirm => '你确定要登出吗?'; - @override String get noSeasonsFound => '未找到季'; - @override String get noEpisodesFound => '在第一季中未找到剧集'; - @override String get noEpisodesFoundGeneral => '未找到剧集'; - @override String get noResultsFound => '未找到结果'; - @override String sleepTimerSet({required Object label}) => '睡眠定时器已设置为 ${label}'; - @override String failedToSwitchProfile({required Object displayName}) => '无法切换到 ${displayName}'; - @override String get noItemsAvailable => '没有可用的项目'; - @override String get failedToCreatePlayQueue => '创建播放队列失败'; - @override String get failedToCreatePlayQueueNoItems => '创建播放队列失败 - 没有项目'; - @override String failedPlayback({required Object action, required Object error}) => '无法${action}: ${error}'; + // Translations + @override + String get markedAsWatched => '已标记为已观看'; + @override + String get markedAsUnwatched => '已标记为未观看'; + @override + String get removedFromContinueWatching => '已从继续观看中移除'; + @override + String errorLoading({required Object error}) => '错误: ${error}'; + @override + String get fileInfoNotAvailable => '文件信息不可用'; + @override + String errorLoadingFileInfo({required Object error}) => '加载文件信息时出错: ${error}'; + @override + String get errorLoadingSeries => '加载系列时出错'; + @override + String get errorLoadingSeason => '加载季时出错'; + @override + String get musicNotSupported => '尚不支持播放音乐'; + @override + String get logsCleared => '日志已清除'; + @override + String get logsCopied => '日志已复制到剪贴板'; + @override + String get noLogsAvailable => '没有可用日志'; + @override + String libraryScanning({required Object title}) => '正在扫描 “${title}”...'; + @override + String libraryScanStarted({required Object title}) => '已开始扫描 “${title}” 媒体库'; + @override + String libraryScanFailed({required Object error}) => '无法扫描媒体库: ${error}'; + @override + String metadataRefreshing({required Object title}) => + '正在刷新 “${title}” 的元数据...'; + @override + String metadataRefreshStarted({required Object title}) => + '已开始刷新 “${title}” 的元数据'; + @override + String metadataRefreshFailed({required Object error}) => '无法刷新元数据: ${error}'; + @override + String get noPlexToken => '未找到 Plex 令牌。请重新登录。'; + @override + String get logoutConfirm => '你确定要登出吗?'; + @override + String get noSeasonsFound => '未找到季'; + @override + String get noEpisodesFound => '在第一季中未找到剧集'; + @override + String get noEpisodesFoundGeneral => '未找到剧集'; + @override + String get noResultsFound => '未找到结果'; + @override + String sleepTimerSet({required Object label}) => '睡眠定时器已设置为 ${label}'; + @override + String failedToSwitchProfile({required Object displayName}) => + '无法切换到 ${displayName}'; + @override + String get noItemsAvailable => '没有可用的项目'; + @override + String get failedToCreatePlayQueue => '创建播放队列失败'; + @override + String get failedToCreatePlayQueueNoItems => '创建播放队列失败 - 没有项目'; + @override + String failedPlayback({required Object action, required Object error}) => + '无法${action}: ${error}'; } // Path: profile class _StringsProfileZh implements _StringsProfileEn { - _StringsProfileZh._(this._root); + _StringsProfileZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get noUsersAvailable => '没有可用用户'; + // Translations + @override + String get noUsersAvailable => '没有可用用户'; } // Path: subtitlingStyling class _StringsSubtitlingStylingZh implements _StringsSubtitlingStylingEn { - _StringsSubtitlingStylingZh._(this._root); + _StringsSubtitlingStylingZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get stylingOptions => '样式选项'; - @override String get fontSize => '字号'; - @override String get textColor => '文本颜色'; - @override String get borderSize => '边框大小'; - @override String get borderColor => '边框颜色'; - @override String get backgroundOpacity => '背景不透明度'; - @override String get backgroundColor => '背景颜色'; + // Translations + @override + String get stylingOptions => '样式选项'; + @override + String get fontSize => '字号'; + @override + String get textColor => '文本颜色'; + @override + String get borderSize => '边框大小'; + @override + String get borderColor => '边框颜色'; + @override + String get backgroundOpacity => '背景不透明度'; + @override + String get backgroundColor => '背景颜色'; } // Path: dialog class _StringsDialogZh implements _StringsDialogEn { - _StringsDialogZh._(this._root); + _StringsDialogZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get confirmAction => '确认操作'; - @override String get areYouSure => '确定要执行此操作吗?'; - @override String get cancel => '取消'; - @override String get playNow => '立即播放'; + // Translations + @override + String get confirmAction => '确认操作'; + @override + String get areYouSure => '确定要执行此操作吗?'; + @override + String get cancel => '取消'; + @override + String get playNow => '立即播放'; } // Path: discover class _StringsDiscoverZh implements _StringsDiscoverEn { - _StringsDiscoverZh._(this._root); + _StringsDiscoverZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get title => '发现'; - @override String get switchProfile => '切换配置文件'; - @override String get switchServer => '切换服务器'; - @override String get logout => '登出'; - @override String get noContentAvailable => '没有可用内容'; - @override String get addMediaToLibraries => '请向你的媒体库添加一些媒体'; - @override String get continueWatching => '继续观看'; - @override String get recentlyAdded => '最近添加'; - @override String get play => '播放'; - @override String get resume => '继续'; - @override String playEpisode({required Object season, required Object episode}) => '播放 S${season}, E${episode}'; - @override String resumeEpisode({required Object season, required Object episode}) => '继续 S${season}, E${episode}'; - @override String get pause => '暂停'; - @override String get overview => '概述'; - @override String get cast => '演员表'; - @override String get seasons => '季数'; - @override String get studio => '制作公司'; - @override String get rating => '年龄分级'; - @override String get watched => '已观看'; - @override String episodeCount({required Object count}) => '${count} 集'; - @override String watchedProgress({required Object watched, required Object total}) => '已观看 ${watched}/${total} 集'; - @override String get movie => '电影'; - @override String get tvShow => '电视剧'; - @override String minutesLeft({required Object minutes}) => '剩余 ${minutes} 分钟'; + // Translations + @override + String get title => '发现'; + @override + String get switchProfile => '切换配置文件'; + @override + String get switchServer => '切换服务器'; + @override + String get logout => '登出'; + @override + String get noContentAvailable => '没有可用内容'; + @override + String get addMediaToLibraries => '请向你的媒体库添加一些媒体'; + @override + String get continueWatching => '继续观看'; + @override + String get recentlyAdded => '最近添加'; + @override + String get play => '播放'; + @override + String get resume => '继续'; + @override + String playEpisode({required Object season, required Object episode}) => + '播放 S${season}, E${episode}'; + @override + String resumeEpisode({required Object season, required Object episode}) => + '继续 S${season}, E${episode}'; + @override + String get pause => '暂停'; + @override + String get overview => '概述'; + @override + String get cast => '演员表'; + @override + String get seasons => '季数'; + @override + String get studio => '制作公司'; + @override + String get rating => '年龄分级'; + @override + String get watched => '已观看'; + @override + String episodeCount({required Object count}) => '${count} 集'; + @override + String watchedProgress({required Object watched, required Object total}) => + '已观看 ${watched}/${total} 集'; + @override + String get movie => '电影'; + @override + String get tvShow => '电视剧'; + @override + String minutesLeft({required Object minutes}) => '剩余 ${minutes} 分钟'; } // Path: errors class _StringsErrorsZh implements _StringsErrorsEn { - _StringsErrorsZh._(this._root); + _StringsErrorsZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String searchFailed({required Object error}) => '搜索失败: ${error}'; - @override String connectionTimeout({required Object context}) => '加载 ${context} 时连接超时'; - @override String get connectionFailed => '无法连接到 Plex 服务器'; - @override String failedToLoad({required Object context, required Object error}) => '无法加载 ${context}: ${error}'; - @override String get noClientAvailable => '没有可用客户端'; - @override String authenticationFailed({required Object error}) => '验证失败: ${error}'; - @override String get couldNotLaunchUrl => '无法打开授权 URL'; - @override String get pleaseEnterToken => '请输入一个令牌'; - @override String get invalidToken => '令牌无效'; - @override String failedToVerifyToken({required Object error}) => '无法验证令牌: ${error}'; - @override String failedToSwitchProfile({required Object displayName}) => '无法切换到 ${displayName}'; - @override String get connectionFailedGeneric => '连接失败'; + // Translations + @override + String searchFailed({required Object error}) => '搜索失败: ${error}'; + @override + String connectionTimeout({required Object context}) => '加载 ${context} 时连接超时'; + @override + String get connectionFailed => '无法连接到 Plex 服务器'; + @override + String failedToLoad({required Object context, required Object error}) => + '无法加载 ${context}: ${error}'; + @override + String get noClientAvailable => '没有可用客户端'; + @override + String authenticationFailed({required Object error}) => '验证失败: ${error}'; + @override + String get couldNotLaunchUrl => '无法打开授权 URL'; + @override + String get pleaseEnterToken => '请输入一个令牌'; + @override + String get invalidToken => '令牌无效'; + @override + String failedToVerifyToken({required Object error}) => '无法验证令牌: ${error}'; + @override + String failedToSwitchProfile({required Object displayName}) => + '无法切换到 ${displayName}'; + @override + String get connectionFailedGeneric => '连接失败'; } // Path: libraries class _StringsLibrariesZh implements _StringsLibrariesEn { - _StringsLibrariesZh._(this._root); + _StringsLibrariesZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get title => '媒体库'; - @override String get scanLibraryFiles => '扫描媒体库文件'; - @override String get scanLibrary => '扫描媒体库'; - @override String get analyze => '分析'; - @override String get analyzeLibrary => '分析媒体库'; - @override String get refreshMetadata => '刷新元数据'; - @override String get emptyTrash => '清空回收站'; - @override String emptyingTrash({required Object title}) => '正在清空 “${title}” 的回收站...'; - @override String trashEmptied({required Object title}) => '已清空 “${title}” 的回收站'; - @override String failedToEmptyTrash({required Object error}) => '无法清空回收站: ${error}'; - @override String analyzing({required Object title}) => '正在分析 “${title}”...'; - @override String analysisStarted({required Object title}) => '已开始分析 “${title}”'; - @override String failedToAnalyze({required Object error}) => '无法分析媒体库: ${error}'; - @override String get noLibrariesFound => '未找到媒体库'; - @override String get thisLibraryIsEmpty => '此媒体库为空'; - @override String get all => '全部'; - @override String get clearAll => '全部清除'; - @override String scanLibraryConfirm({required Object title}) => '确定要扫描 “${title}” 吗?'; - @override String analyzeLibraryConfirm({required Object title}) => '确定要分析 “${title}” 吗?'; - @override String refreshMetadataConfirm({required Object title}) => '确定要刷新 “${title}” 的元数据吗?'; - @override String emptyTrashConfirm({required Object title}) => '确定要清空 “${title}” 的回收站吗?'; - @override String get manageLibraries => '管理媒体库'; - @override String get sort => '排序'; - @override String get sortBy => '排序依据'; - @override String get filters => '筛选器'; - @override String loadingLibraryWithCount({required Object count}) => '正在加载媒体库... (已加载 ${count} 个项目)'; - @override String get confirmActionMessage => '确定要执行此操作吗?'; - @override String get showLibrary => '显示媒体库'; - @override String get hideLibrary => '隐藏媒体库'; - @override String get libraryOptions => '媒体库选项'; - @override String get content => '媒体库内容'; - @override String get selectLibrary => '选择媒体库'; - @override String filtersWithCount({required Object count}) => '筛选器(${count})'; - @override String get noRecommendations => '暂无推荐'; - @override String get noCollections => '此媒体库中没有合集'; - @override String get noFoldersFound => '未找到文件夹'; - @override String get folders => '文件夹'; - @override late final _StringsLibrariesTabsZh tabs = _StringsLibrariesTabsZh._(_root); - @override late final _StringsLibrariesGroupingsZh groupings = _StringsLibrariesGroupingsZh._(_root); + // Translations + @override + String get title => '媒体库'; + @override + String get scanLibraryFiles => '扫描媒体库文件'; + @override + String get scanLibrary => '扫描媒体库'; + @override + String get analyze => '分析'; + @override + String get analyzeLibrary => '分析媒体库'; + @override + String get refreshMetadata => '刷新元数据'; + @override + String get emptyTrash => '清空回收站'; + @override + String emptyingTrash({required Object title}) => '正在清空 “${title}” 的回收站...'; + @override + String trashEmptied({required Object title}) => '已清空 “${title}” 的回收站'; + @override + String failedToEmptyTrash({required Object error}) => '无法清空回收站: ${error}'; + @override + String analyzing({required Object title}) => '正在分析 “${title}”...'; + @override + String analysisStarted({required Object title}) => '已开始分析 “${title}”'; + @override + String failedToAnalyze({required Object error}) => '无法分析媒体库: ${error}'; + @override + String get noLibrariesFound => '未找到媒体库'; + @override + String get thisLibraryIsEmpty => '此媒体库为空'; + @override + String get all => '全部'; + @override + String get clearAll => '全部清除'; + @override + String scanLibraryConfirm({required Object title}) => '确定要扫描 “${title}” 吗?'; + @override + String analyzeLibraryConfirm({required Object title}) => + '确定要分析 “${title}” 吗?'; + @override + String refreshMetadataConfirm({required Object title}) => + '确定要刷新 “${title}” 的元数据吗?'; + @override + String emptyTrashConfirm({required Object title}) => + '确定要清空 “${title}” 的回收站吗?'; + @override + String get manageLibraries => '管理媒体库'; + @override + String get sort => '排序'; + @override + String get sortBy => '排序依据'; + @override + String get filters => '筛选器'; + @override + String loadingLibraryWithCount({required Object count}) => + '正在加载媒体库... (已加载 ${count} 个项目)'; + @override + String get confirmActionMessage => '确定要执行此操作吗?'; + @override + String get showLibrary => '显示媒体库'; + @override + String get hideLibrary => '隐藏媒体库'; + @override + String get libraryOptions => '媒体库选项'; + @override + String get content => '媒体库内容'; + @override + String get selectLibrary => '选择媒体库'; + @override + String filtersWithCount({required Object count}) => '筛选器(${count})'; + @override + String get noRecommendations => '暂无推荐'; + @override + String get noCollections => '此媒体库中没有合集'; + @override + String get noFoldersFound => '未找到文件夹'; + @override + String get folders => '文件夹'; + @override + late final _StringsLibrariesTabsZh tabs = _StringsLibrariesTabsZh._(_root); + @override + late final _StringsLibrariesGroupingsZh groupings = + _StringsLibrariesGroupingsZh._(_root); } // Path: about class _StringsAboutZh implements _StringsAboutEn { - _StringsAboutZh._(this._root); + _StringsAboutZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get title => '关于'; - @override String get openSourceLicenses => '开源许可证'; - @override String versionLabel({required Object version}) => '版本 ${version}'; - @override String get appDescription => '一款精美的 Flutter Plex 客户端'; - @override String get viewLicensesDescription => '查看第三方库的许可证'; + // Translations + @override + String get title => '关于'; + @override + String get openSourceLicenses => '开源许可证'; + @override + String versionLabel({required Object version}) => '版本 ${version}'; + @override + String get appDescription => '一款精美的 Flutter Plex 客户端'; + @override + String get viewLicensesDescription => '查看第三方库的许可证'; } // Path: serverSelection class _StringsServerSelectionZh implements _StringsServerSelectionEn { - _StringsServerSelectionZh._(this._root); + _StringsServerSelectionZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get connectingToServer => '正在连接服务器...'; - @override String get connectingToAllServers => '正在连接所有服务器...'; - @override String get connectToAllServers => '连接所有服务器'; - @override String get allServerConnectionsFailed => '无法连接到任何服务器。请检查你的网络并重试。'; - @override String foundServers({required Object count}) => '找到 ${count} 个服务器'; - @override String get orSelectIndividually => '或单独选择一个服务器:'; - @override String get serverDebugCopied => '服务器调试数据已复制到剪贴板'; - @override String get copyDebugData => '复制调试数据'; - @override String get noServersFound => '未找到服务器'; - @override String malformedServerData({required Object count}) => '找到 ${count} 个数据格式错误的服务器。没有可用的有效服务器。'; - @override String get incompleteServerInfo => '某些服务器信息不完整,已被跳过。请检查你的 Plex.tv 账户。'; - @override String get incompleteConnectionInfo => '服务器连接信息不完整。请重试。'; - @override String malformedServerInfo({required Object message}) => '服务器信息格式错误: ${message}'; - @override String get networkConnectionFailed => '网络连接失败。请检查你的网络连接并重试。'; - @override String get authenticationFailed => '验证失败。请重新登录。'; - @override String get plexServiceUnavailable => 'Plex 服务不可用。请稍后重试。'; - @override String failedToLoadServers({required Object error}) => '无法加载服务器: ${error}'; + // Translations + @override + String get connectingToServer => '正在连接服务器...'; + @override + String get connectingToAllServers => '正在连接所有服务器...'; + @override + String get connectToAllServers => '连接所有服务器'; + @override + String get allServerConnectionsFailed => '无法连接到任何服务器。请检查你的网络并重试。'; + @override + String foundServers({required Object count}) => '找到 ${count} 个服务器'; + @override + String get orSelectIndividually => '或单独选择一个服务器:'; + @override + String get serverDebugCopied => '服务器调试数据已复制到剪贴板'; + @override + String get copyDebugData => '复制调试数据'; + @override + String get noServersFound => '未找到服务器'; + @override + String malformedServerData({required Object count}) => + '找到 ${count} 个数据格式错误的服务器。没有可用的有效服务器。'; + @override + String get incompleteServerInfo => '某些服务器信息不完整,已被跳过。请检查你的 Plex.tv 账户。'; + @override + String get incompleteConnectionInfo => '服务器连接信息不完整。请重试。'; + @override + String malformedServerInfo({required Object message}) => + '服务器信息格式错误: ${message}'; + @override + String get networkConnectionFailed => '网络连接失败。请检查你的网络连接并重试。'; + @override + String get authenticationFailed => '验证失败。请重新登录。'; + @override + String get plexServiceUnavailable => 'Plex 服务不可用。请稍后重试。'; + @override + String failedToLoadServers({required Object error}) => '无法加载服务器: ${error}'; } // Path: hubDetail class _StringsHubDetailZh implements _StringsHubDetailEn { - _StringsHubDetailZh._(this._root); + _StringsHubDetailZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get title => '标题'; - @override String get releaseYear => '发行年份'; - @override String get dateAdded => '添加日期'; - @override String get rating => '评分'; - @override String get noItemsFound => '未找到项目'; + // Translations + @override + String get title => '标题'; + @override + String get releaseYear => '发行年份'; + @override + String get dateAdded => '添加日期'; + @override + String get rating => '评分'; + @override + String get noItemsFound => '未找到项目'; } // Path: logs class _StringsLogsZh implements _StringsLogsEn { - _StringsLogsZh._(this._root); + _StringsLogsZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get title => '日志'; - @override String get clearLogs => '清除日志'; - @override String get copyLogs => '复制日志'; - @override String get exportLogs => '导出日志'; - @override String get noLogsToShow => '没有可显示的日志'; - @override String get error => '错误:'; - @override String get stackTrace => '堆栈跟踪 (Stack Trace):'; + // Translations + @override + String get title => '日志'; + @override + String get clearLogs => '清除日志'; + @override + String get copyLogs => '复制日志'; + @override + String get exportLogs => '导出日志'; + @override + String get noLogsToShow => '没有可显示的日志'; + @override + String get error => '错误:'; + @override + String get stackTrace => '堆栈跟踪 (Stack Trace):'; } // Path: licenses class _StringsLicensesZh implements _StringsLicensesEn { - _StringsLicensesZh._(this._root); + _StringsLicensesZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get relatedPackages => '相关软件包'; - @override String get license => '许可证'; - @override String licenseNumber({required Object number}) => '许可证 ${number}'; - @override String licensesCount({required Object count}) => '${count} 个许可证'; + // Translations + @override + String get relatedPackages => '相关软件包'; + @override + String get license => '许可证'; + @override + String licenseNumber({required Object number}) => '许可证 ${number}'; + @override + String licensesCount({required Object count}) => '${count} 个许可证'; } // Path: navigation class _StringsNavigationZh implements _StringsNavigationEn { - _StringsNavigationZh._(this._root); + _StringsNavigationZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get home => '主页'; - @override String get search => '搜索'; - @override String get libraries => '媒体库'; - @override String get settings => '设置'; + // Translations + @override + String get home => '主页'; + @override + String get search => '搜索'; + @override + String get libraries => '媒体库'; + @override + String get settings => '设置'; } // Path: playlists class _StringsPlaylistsZh implements _StringsPlaylistsEn { - _StringsPlaylistsZh._(this._root); + _StringsPlaylistsZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get title => '播放列表'; - @override String get noPlaylists => '未找到播放列表'; - @override String get create => '创建播放列表'; - @override String get newPlaylist => '新播放列表'; - @override String get playlistName => '播放列表名称'; - @override String get enterPlaylistName => '输入播放列表名称'; - @override String get edit => '编辑播放列表'; - @override String get delete => '删除播放列表'; - @override String get addTo => '添加到播放列表'; - @override String get addItems => '添加项目'; - @override String get removeItem => '从播放列表中移除'; - @override String get clearPlaylist => '清空播放列表'; - @override String get playAll => '全部播放'; - @override String get shuffle => '随机播放'; - @override String get smartPlaylist => '智能播放列表'; - @override String get regularPlaylist => '普通播放列表'; - @override String itemCount({required Object count}) => '${count} 个项目'; - @override String get oneItem => '1 个项目'; - @override String get emptyPlaylist => '此播放列表为空'; - @override String get deleteConfirm => '删除播放列表?'; - @override String deleteMessage({required Object name}) => '确定要删除 "${name}" 吗?'; - @override String get created => '播放列表已创建'; - @override String get updated => '播放列表已更新'; - @override String get deleted => '播放列表已删除'; - @override String get itemAdded => '已添加到播放列表'; - @override String get itemRemoved => '已从播放列表中移除'; - @override String get selectPlaylist => '选择播放列表'; - @override String get createNewPlaylist => '创建新播放列表'; - @override String get errorCreating => '创建播放列表失败'; - @override String get errorDeleting => '删除播放列表失败'; - @override String get errorLoading => '加载播放列表失败'; - @override String get errorAdding => '添加到播放列表失败'; - @override String get errorReordering => '重新排序播放列表项目失败'; - @override String get errorRemoving => '从播放列表中移除失败'; - @override String get playlist => '播放列表'; + // Translations + @override + String get title => '播放列表'; + @override + String get noPlaylists => '未找到播放列表'; + @override + String get create => '创建播放列表'; + @override + String get newPlaylist => '新播放列表'; + @override + String get playlistName => '播放列表名称'; + @override + String get enterPlaylistName => '输入播放列表名称'; + @override + String get edit => '编辑播放列表'; + @override + String get delete => '删除播放列表'; + @override + String get addTo => '添加到播放列表'; + @override + String get addItems => '添加项目'; + @override + String get removeItem => '从播放列表中移除'; + @override + String get clearPlaylist => '清空播放列表'; + @override + String get playAll => '全部播放'; + @override + String get shuffle => '随机播放'; + @override + String get smartPlaylist => '智能播放列表'; + @override + String get regularPlaylist => '普通播放列表'; + @override + String itemCount({required Object count}) => '${count} 个项目'; + @override + String get oneItem => '1 个项目'; + @override + String get emptyPlaylist => '此播放列表为空'; + @override + String get deleteConfirm => '删除播放列表?'; + @override + String deleteMessage({required Object name}) => '确定要删除 "${name}" 吗?'; + @override + String get created => '播放列表已创建'; + @override + String get updated => '播放列表已更新'; + @override + String get deleted => '播放列表已删除'; + @override + String get itemAdded => '已添加到播放列表'; + @override + String get itemRemoved => '已从播放列表中移除'; + @override + String get selectPlaylist => '选择播放列表'; + @override + String get createNewPlaylist => '创建新播放列表'; + @override + String get errorCreating => '创建播放列表失败'; + @override + String get errorDeleting => '删除播放列表失败'; + @override + String get errorLoading => '加载播放列表失败'; + @override + String get errorAdding => '添加到播放列表失败'; + @override + String get errorReordering => '重新排序播放列表项目失败'; + @override + String get errorRemoving => '从播放列表中移除失败'; + @override + String get playlist => '播放列表'; } // Path: collections class _StringsCollectionsZh implements _StringsCollectionsEn { - _StringsCollectionsZh._(this._root); + _StringsCollectionsZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get title => '合集'; - @override String get collection => '合集'; - @override String get empty => '合集为空'; - @override String get noItems => '此合集没有项目'; - @override String get unknownLibrarySection => '无法删除:未知的媒体库分区'; - @override String get deleteCollection => '删除合集'; - @override String deleteConfirm({required Object title}) => '确定要删除"${title}"吗?此操作无法撤销。'; - @override String get deleted => '已删除合集'; - @override String get deleteFailed => '删除合集失败'; - @override String deleteFailedWithError({required Object error}) => '删除合集失败:${error}'; - @override String failedToLoadItems({required Object error}) => '加载合集项目失败:${error}'; - @override String get addTo => '添加到合集'; - @override String get selectCollection => '选择合集'; - @override String get createNewCollection => '创建新合集'; - @override String get collectionName => '合集名称'; - @override String get enterCollectionName => '输入合集名称'; - @override String get addedToCollection => '已添加到合集'; - @override String get errorAddingToCollection => '添加到合集失败'; - @override String get created => '已创建合集'; - @override String get removeFromCollection => '从合集移除'; - @override String removeFromCollectionConfirm({required Object title}) => '将“${title}”从此合集移除?'; - @override String get removedFromCollection => '已从合集移除'; - @override String get removeFromCollectionFailed => '从合集移除失败'; - @override String removeFromCollectionError({required Object error}) => '从合集移除时出错:${error}'; + // Translations + @override + String get title => '合集'; + @override + String get collection => '合集'; + @override + String get empty => '合集为空'; + @override + String get noItems => '此合集没有项目'; + @override + String get unknownLibrarySection => '无法删除:未知的媒体库分区'; + @override + String get deleteCollection => '删除合集'; + @override + String deleteConfirm({required Object title}) => '确定要删除"${title}"吗?此操作无法撤销。'; + @override + String get deleted => '已删除合集'; + @override + String get deleteFailed => '删除合集失败'; + @override + String deleteFailedWithError({required Object error}) => '删除合集失败:${error}'; + @override + String failedToLoadItems({required Object error}) => '加载合集项目失败:${error}'; + @override + String get addTo => '添加到合集'; + @override + String get selectCollection => '选择合集'; + @override + String get createNewCollection => '创建新合集'; + @override + String get collectionName => '合集名称'; + @override + String get enterCollectionName => '输入合集名称'; + @override + String get addedToCollection => '已添加到合集'; + @override + String get errorAddingToCollection => '添加到合集失败'; + @override + String get created => '已创建合集'; + @override + String get removeFromCollection => '从合集移除'; + @override + String removeFromCollectionConfirm({required Object title}) => + '将“${title}”从此合集移除?'; + @override + String get removedFromCollection => '已从合集移除'; + @override + String get removeFromCollectionFailed => '从合集移除失败'; + @override + String removeFromCollectionError({required Object error}) => + '从合集移除时出错:${error}'; } // Path: libraries.tabs class _StringsLibrariesTabsZh implements _StringsLibrariesTabsEn { - _StringsLibrariesTabsZh._(this._root); + _StringsLibrariesTabsZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get recommended => '推荐'; - @override String get browse => '浏览'; - @override String get collections => '合集'; - @override String get playlists => '播放列表'; + // Translations + @override + String get recommended => '推荐'; + @override + String get browse => '浏览'; + @override + String get collections => '合集'; + @override + String get playlists => '播放列表'; } // Path: libraries.groupings class _StringsLibrariesGroupingsZh implements _StringsLibrariesGroupingsEn { - _StringsLibrariesGroupingsZh._(this._root); + _StringsLibrariesGroupingsZh._(this._root); - @override final _StringsZh _root; // ignore: unused_field + @override + final _StringsZh _root; // ignore: unused_field - // Translations - @override String get all => '全部'; - @override String get movies => '电影'; - @override String get shows => '剧集'; - @override String get seasons => '季'; - @override String get episodes => '集'; - @override String get folders => '文件夹'; + // Translations + @override + String get all => '全部'; + @override + String get movies => '电影'; + @override + String get shows => '剧集'; + @override + String get seasons => '季'; + @override + String get episodes => '集'; + @override + String get folders => '文件夹'; } /// Flat map(s) containing all translations. /// Only for edge cases! For simple maps, use the map function of this library. extension on Translations { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': return 'Plezy'; - case 'app.loading': return 'Loading...'; - case 'auth.signInWithPlex': return 'Sign in with Plex'; - case 'auth.showQRCode': return 'Show QR Code'; - case 'auth.cancel': return 'Cancel'; - case 'auth.authenticate': return 'Authenticate'; - case 'auth.retry': return 'Retry'; - case 'auth.debugEnterToken': return 'Debug: Enter Plex Token'; - case 'auth.plexTokenLabel': return 'Plex Auth Token'; - case 'auth.plexTokenHint': return 'Enter your Plex.tv token'; - case 'auth.authenticationTimeout': return 'Authentication timed out. Please try again.'; - case 'auth.scanQRCodeInstruction': return 'Scan this QR code with a device logged into Plex to authenticate.'; - case 'auth.waitingForAuth': return 'Waiting for authentication...\nPlease complete sign-in in your browser.'; - case 'common.cancel': return 'Cancel'; - case 'common.save': return 'Save'; - case 'common.close': return 'Close'; - case 'common.clear': return 'Clear'; - case 'common.reset': return 'Reset'; - case 'common.later': return 'Later'; - case 'common.submit': return 'Submit'; - case 'common.confirm': return 'Confirm'; - case 'common.retry': return 'Retry'; - case 'common.playNow': return 'Play Now'; - case 'common.logout': return 'Logout'; - case 'common.online': return 'Online'; - case 'common.offline': return 'Offline'; - case 'common.owned': return 'Owned'; - case 'common.shared': return 'Shared'; - case 'common.current': return 'CURRENT'; - case 'common.unknown': return 'Unknown'; - case 'common.refresh': return 'Refresh'; - case 'common.yes': return 'Yes'; - case 'common.no': return 'No'; - case 'common.server': return 'Server'; - case 'common.delete': return 'Delete'; - case 'common.shuffle': return 'Shuffle'; - case 'common.addTo': return 'Add to...'; - case 'screens.licenses': return 'Licenses'; - case 'screens.switchProfile': return 'Switch Profile'; - case 'screens.subtitleStyling': return 'Subtitle Styling'; - case 'screens.search': return 'Search'; - case 'screens.logs': return 'Logs'; - case 'update.available': return 'Update Available'; - case 'update.versionAvailable': return ({required Object version}) => 'Version ${version} is available'; - case 'update.currentVersion': return ({required Object version}) => 'Current: ${version}'; - case 'update.skipVersion': return 'Skip This Version'; - case 'update.viewRelease': return 'View Release'; - case 'update.latestVersion': return 'You are on the latest version'; - case 'update.checkFailed': return 'Failed to check for updates'; - case 'settings.title': return 'Settings'; - case 'settings.language': return 'Language'; - case 'settings.theme': return 'Theme'; - case 'settings.appearance': return 'Appearance'; - case 'settings.videoPlayback': return 'Video Playback'; - case 'settings.shufflePlay': return 'Shuffle Play'; - case 'settings.advanced': return 'Advanced'; - case 'settings.useSeasonPostersDescription': return 'Show season poster instead of series poster for episodes'; - case 'settings.showHeroSectionDescription': return 'Display featured content carousel on home screen'; - case 'settings.secondsLabel': return 'Seconds'; - case 'settings.minutesLabel': return 'Minutes'; - case 'settings.secondsShort': return 's'; - case 'settings.minutesShort': return 'm'; - case 'settings.durationHint': return ({required Object min, required Object max}) => 'Enter duration (${min}-${max})'; - case 'settings.systemTheme': return 'System'; - case 'settings.systemThemeDescription': return 'Follow system settings'; - case 'settings.lightTheme': return 'Light'; - case 'settings.darkTheme': return 'Dark'; - case 'settings.libraryDensity': return 'Library Density'; - case 'settings.compact': return 'Compact'; - case 'settings.compactDescription': return 'Smaller cards, more items visible'; - case 'settings.normal': return 'Normal'; - case 'settings.normalDescription': return 'Default size'; - case 'settings.comfortable': return 'Comfortable'; - case 'settings.comfortableDescription': return 'Larger cards, fewer items visible'; - case 'settings.viewMode': return 'View Mode'; - case 'settings.gridView': return 'Grid'; - case 'settings.gridViewDescription': return 'Display items in a grid layout'; - case 'settings.listView': return 'List'; - case 'settings.listViewDescription': return 'Display items in a list layout'; - case 'settings.useSeasonPosters': return 'Use Season Posters'; - case 'settings.showHeroSection': return 'Show Hero Section'; - case 'settings.hardwareDecoding': return 'Hardware Decoding'; - case 'settings.hardwareDecodingDescription': return 'Use hardware acceleration when available'; - case 'settings.bufferSize': return 'Buffer Size'; - case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': return 'Subtitle Styling'; - case 'settings.subtitleStylingDescription': return 'Customize subtitle appearance'; - case 'settings.smallSkipDuration': return 'Small Skip Duration'; - case 'settings.largeSkipDuration': return 'Large Skip Duration'; - case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} seconds'; - case 'settings.defaultSleepTimer': return 'Default Sleep Timer'; - case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} minutes'; - case 'settings.rememberTrackSelections': return 'Remember track selections per show/movie'; - case 'settings.rememberTrackSelectionsDescription': return 'Automatically save audio and subtitle language preferences when you change tracks during playback'; - case 'settings.unwatchedOnly': return 'Unwatched Only'; - case 'settings.unwatchedOnlyDescription': return 'Only include unwatched episodes in shuffle queue'; - case 'settings.shuffleOrderNavigation': return 'Shuffle Order Navigation'; - case 'settings.shuffleOrderNavigationDescription': return 'Next/previous buttons follow shuffled order'; - case 'settings.loopShuffleQueue': return 'Loop Shuffle Queue'; - case 'settings.loopShuffleQueueDescription': return 'Restart queue when reaching the end'; - case 'settings.videoPlayerControls': return 'Video Player Controls'; - case 'settings.keyboardShortcuts': return 'Keyboard Shortcuts'; - case 'settings.keyboardShortcutsDescription': return 'Customize keyboard shortcuts'; - case 'settings.debugLogging': return 'Debug Logging'; - case 'settings.debugLoggingDescription': return 'Enable detailed logging for troubleshooting'; - case 'settings.viewLogs': return 'View Logs'; - case 'settings.viewLogsDescription': return 'View application logs'; - case 'settings.clearCache': return 'Clear Cache'; - case 'settings.clearCacheDescription': return 'This will clear all cached images and data. The app may take longer to load content after clearing the cache.'; - case 'settings.clearCacheSuccess': return 'Cache cleared successfully'; - case 'settings.resetSettings': return 'Reset Settings'; - case 'settings.resetSettingsDescription': return 'This will reset all settings to their default values. This action cannot be undone.'; - case 'settings.resetSettingsSuccess': return 'Settings reset successfully'; - case 'settings.shortcutsReset': return 'Shortcuts reset to defaults'; - case 'settings.about': return 'About'; - case 'settings.aboutDescription': return 'App information and licenses'; - case 'settings.updates': return 'Updates'; - case 'settings.updateAvailable': return 'Update Available'; - case 'settings.checkForUpdates': return 'Check for Updates'; - case 'settings.validationErrorEnterNumber': return 'Please enter a valid number'; - case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => 'Duration must be between ${min} and ${max} ${unit}'; - case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => 'Shortcut already assigned to ${action}'; - case 'settings.shortcutUpdated': return ({required Object action}) => 'Shortcut updated for ${action}'; - case 'settings.autoSkip': return 'Auto Skip'; - case 'settings.autoSkipIntro': return 'Auto Skip Intro'; - case 'settings.autoSkipIntroDescription': return 'Automatically skip intro markers after a few seconds'; - case 'settings.autoSkipCredits': return 'Auto Skip Credits'; - case 'settings.autoSkipCreditsDescription': return 'Automatically skip credits and play next episode'; - case 'settings.autoSkipDelay': return 'Auto Skip Delay'; - case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => 'Wait ${seconds} seconds before auto-skipping'; - case 'search.hint': return 'Search movies, shows, music...'; - case 'search.tryDifferentTerm': return 'Try a different search term'; - case 'search.searchYourMedia': return 'Search your media'; - case 'search.enterTitleActorOrKeyword': return 'Enter a title, actor, or keyword'; - case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Set Shortcut for ${actionName}'; - case 'hotkeys.clearShortcut': return 'Clear shortcut'; - case 'pinEntry.enterPin': return 'Enter PIN'; - case 'pinEntry.showPin': return 'Show PIN'; - case 'pinEntry.hidePin': return 'Hide PIN'; - case 'fileInfo.title': return 'File Info'; - case 'fileInfo.video': return 'Video'; - case 'fileInfo.audio': return 'Audio'; - case 'fileInfo.file': return 'File'; - case 'fileInfo.advanced': return 'Advanced'; - case 'fileInfo.codec': return 'Codec'; - case 'fileInfo.resolution': return 'Resolution'; - case 'fileInfo.bitrate': return 'Bitrate'; - case 'fileInfo.frameRate': return 'Frame Rate'; - case 'fileInfo.aspectRatio': return 'Aspect Ratio'; - case 'fileInfo.profile': return 'Profile'; - case 'fileInfo.bitDepth': return 'Bit Depth'; - case 'fileInfo.colorSpace': return 'Color Space'; - case 'fileInfo.colorRange': return 'Color Range'; - case 'fileInfo.colorPrimaries': return 'Color Primaries'; - case 'fileInfo.chromaSubsampling': return 'Chroma Subsampling'; - case 'fileInfo.channels': return 'Channels'; - case 'fileInfo.path': return 'Path'; - case 'fileInfo.size': return 'Size'; - case 'fileInfo.container': return 'Container'; - case 'fileInfo.duration': return 'Duration'; - case 'fileInfo.optimizedForStreaming': return 'Optimized for Streaming'; - case 'fileInfo.has64bitOffsets': return '64-bit Offsets'; - case 'mediaMenu.markAsWatched': return 'Mark as Watched'; - case 'mediaMenu.markAsUnwatched': return 'Mark as Unwatched'; - case 'mediaMenu.removeFromContinueWatching': return 'Remove from Continue Watching'; - case 'mediaMenu.goToSeries': return 'Go to series'; - case 'mediaMenu.goToSeason': return 'Go to season'; - case 'mediaMenu.shufflePlay': return 'Shuffle Play'; - case 'mediaMenu.fileInfo': return 'File Info'; - case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, movie'; - case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, TV show'; - case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': return 'watched'; - case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} percent watched'; - case 'accessibility.mediaCardUnwatched': return 'unwatched'; - case 'accessibility.tapToPlay': return 'Tap to play'; - case 'tooltips.shufflePlay': return 'Shuffle play'; - case 'tooltips.markAsWatched': return 'Mark as watched'; - case 'tooltips.markAsUnwatched': return 'Mark as unwatched'; - case 'videoControls.audioLabel': return 'Audio'; - case 'videoControls.subtitlesLabel': return 'Subtitles'; - case 'videoControls.resetToZero': return 'Reset to 0ms'; - case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': return ({required Object label}) => '${label} plays later'; - case 'videoControls.playsEarlier': return ({required Object label}) => '${label} plays earlier'; - case 'videoControls.noOffset': return 'No offset'; - case 'videoControls.letterbox': return 'Letterbox'; - case 'videoControls.fillScreen': return 'Fill screen'; - case 'videoControls.stretch': return 'Stretch'; - case 'videoControls.lockRotation': return 'Lock rotation'; - case 'videoControls.unlockRotation': return 'Unlock rotation'; - case 'videoControls.sleepTimer': return 'Sleep Timer'; - case 'videoControls.timerActive': return 'Timer Active'; - case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Playback will pause in ${duration}'; - case 'videoControls.sleepTimerCompleted': return 'Sleep timer completed - playback paused'; - case 'videoControls.playButton': return 'Play'; - case 'videoControls.pauseButton': return 'Pause'; - case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Seek backward ${seconds} seconds'; - case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Seek forward ${seconds} seconds'; - case 'videoControls.previousButton': return 'Previous episode'; - case 'videoControls.nextButton': return 'Next episode'; - case 'videoControls.previousChapterButton': return 'Previous chapter'; - case 'videoControls.nextChapterButton': return 'Next chapter'; - case 'videoControls.volumeButton': return 'Volume'; - case 'videoControls.muteButton': return 'Mute'; - case 'videoControls.unmuteButton': return 'Unmute'; - case 'videoControls.settingsButton': return 'Video settings'; - case 'videoControls.audioTrackButton': return 'Audio tracks'; - case 'videoControls.subtitlesButton': return 'Subtitles'; - case 'videoControls.chaptersButton': return 'Chapters'; - case 'videoControls.versionsButton': return 'Video versions'; - case 'videoControls.aspectRatioButton': return 'Aspect ratio'; - case 'videoControls.fullscreenButton': return 'Enter fullscreen'; - case 'videoControls.exitFullscreenButton': return 'Exit fullscreen'; - case 'videoControls.rotationLockButton': return 'Rotation lock'; - case 'videoControls.timelineSlider': return 'Video timeline'; - case 'videoControls.volumeSlider': return 'Volume level'; - case 'videoControls.backButton': return 'Back'; - case 'userStatus.admin': return 'Admin'; - case 'userStatus.restricted': return 'Restricted'; - case 'userStatus.protected': return 'Protected'; - case 'userStatus.current': return 'CURRENT'; - case 'messages.markedAsWatched': return 'Marked as watched'; - case 'messages.markedAsUnwatched': return 'Marked as unwatched'; - case 'messages.removedFromContinueWatching': return 'Removed from Continue Watching'; - case 'messages.errorLoading': return ({required Object error}) => 'Error: ${error}'; - case 'messages.fileInfoNotAvailable': return 'File information not available'; - case 'messages.errorLoadingFileInfo': return ({required Object error}) => 'Error loading file info: ${error}'; - case 'messages.errorLoadingSeries': return 'Error loading series'; - case 'messages.errorLoadingSeason': return 'Error loading season'; - case 'messages.musicNotSupported': return 'Music playback is not yet supported'; - case 'messages.logsCleared': return 'Logs cleared'; - case 'messages.logsCopied': return 'Logs copied to clipboard'; - case 'messages.noLogsAvailable': return 'No logs available'; - case 'messages.libraryScanning': return ({required Object title}) => 'Scanning "${title}"...'; - case 'messages.libraryScanStarted': return ({required Object title}) => 'Library scan started for "${title}"'; - case 'messages.libraryScanFailed': return ({required Object error}) => 'Failed to scan library: ${error}'; - case 'messages.metadataRefreshing': return ({required Object title}) => 'Refreshing metadata for "${title}"...'; - case 'messages.metadataRefreshStarted': return ({required Object title}) => 'Metadata refresh started for "${title}"'; - case 'messages.metadataRefreshFailed': return ({required Object error}) => 'Failed to refresh metadata: ${error}'; - case 'messages.noPlexToken': return 'No Plex token found. Please login again.'; - case 'messages.logoutConfirm': return 'Are you sure you want to logout?'; - case 'messages.noSeasonsFound': return 'No seasons found'; - case 'messages.noEpisodesFound': return 'No episodes found in first season'; - case 'messages.noEpisodesFoundGeneral': return 'No episodes found'; - case 'messages.noResultsFound': return 'No results found'; - case 'messages.sleepTimerSet': return ({required Object label}) => 'Sleep timer set for ${label}'; - case 'messages.failedToSwitchProfile': return ({required Object displayName}) => 'Failed to switch to ${displayName}'; - case 'messages.noItemsAvailable': return 'No items available'; - case 'messages.failedToCreatePlayQueue': return 'Failed to create play queue'; - case 'messages.failedToCreatePlayQueueNoItems': return 'Failed to create play queue - no items'; - case 'messages.failedPlayback': return ({required Object action, required Object error}) => 'Failed to ${action}: ${error}'; - case 'profile.noUsersAvailable': return 'No users available'; - case 'subtitlingStyling.stylingOptions': return 'Styling Options'; - case 'subtitlingStyling.fontSize': return 'Font Size'; - case 'subtitlingStyling.textColor': return 'Text Color'; - case 'subtitlingStyling.borderSize': return 'Border Size'; - case 'subtitlingStyling.borderColor': return 'Border Color'; - case 'subtitlingStyling.backgroundOpacity': return 'Background Opacity'; - case 'subtitlingStyling.backgroundColor': return 'Background Color'; - case 'dialog.confirmAction': return 'Confirm Action'; - case 'dialog.areYouSure': return 'Are you sure you want to perform this action?'; - case 'dialog.cancel': return 'Cancel'; - case 'dialog.playNow': return 'Play Now'; - case 'discover.title': return 'Discover'; - case 'discover.switchProfile': return 'Switch Profile'; - case 'discover.logout': return 'Logout'; - case 'discover.noContentAvailable': return 'No content available'; - case 'discover.addMediaToLibraries': return 'Add some media to your libraries'; - case 'discover.continueWatching': return 'Continue Watching'; - case 'discover.recentlyAdded': return 'Recently Added'; - case 'discover.play': return 'Play'; - case 'discover.resume': return 'Resume'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'Play S${season}, E${episode}'; - case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => 'Resume S${season}, E${episode}'; - case 'discover.pause': return 'Pause'; - case 'discover.overview': return 'Overview'; - case 'discover.cast': return 'Cast'; - case 'discover.seasons': return 'Seasons'; - case 'discover.studio': return 'Studio'; - case 'discover.rating': return 'Rating'; - case 'discover.watched': return 'Watched'; - case 'discover.episodeCount': return ({required Object count}) => '${count} episodes'; - case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '${watched}/${total} watched'; - case 'discover.movie': return 'Movie'; - case 'discover.tvShow': return 'TV Show'; - case 'discover.minutesLeft': return ({required Object minutes}) => '${minutes} min left'; - case 'errors.searchFailed': return ({required Object error}) => 'Search failed: ${error}'; - case 'errors.connectionTimeout': return ({required Object context}) => 'Connection timeout while loading ${context}'; - case 'errors.connectionFailed': return 'Unable to connect to Plex server'; - case 'errors.failedToLoad': return ({required Object context, required Object error}) => 'Failed to load ${context}: ${error}'; - case 'errors.noClientAvailable': return 'No client available'; - case 'errors.authenticationFailed': return ({required Object error}) => 'Authentication failed: ${error}'; - case 'errors.couldNotLaunchUrl': return 'Could not launch auth URL'; - case 'errors.pleaseEnterToken': return 'Please enter a token'; - case 'errors.invalidToken': return 'Invalid token'; - case 'errors.failedToVerifyToken': return ({required Object error}) => 'Failed to verify token: ${error}'; - case 'errors.failedToSwitchProfile': return ({required Object displayName}) => 'Failed to switch to ${displayName}'; - case 'errors.connectionFailedGeneric': return 'Connection failed'; - case 'libraries.title': return 'Libraries'; - case 'libraries.scanLibraryFiles': return 'Scan Library Files'; - case 'libraries.scanLibrary': return 'Scan Library'; - case 'libraries.analyze': return 'Analyze'; - case 'libraries.analyzeLibrary': return 'Analyze Library'; - case 'libraries.refreshMetadata': return 'Refresh Metadata'; - case 'libraries.emptyTrash': return 'Empty Trash'; - case 'libraries.emptyingTrash': return ({required Object title}) => 'Emptying trash for "${title}"...'; - case 'libraries.trashEmptied': return ({required Object title}) => 'Trash emptied for "${title}"'; - case 'libraries.failedToEmptyTrash': return ({required Object error}) => 'Failed to empty trash: ${error}'; - case 'libraries.analyzing': return ({required Object title}) => 'Analyzing "${title}"...'; - case 'libraries.analysisStarted': return ({required Object title}) => 'Analysis started for "${title}"'; - case 'libraries.failedToAnalyze': return ({required Object error}) => 'Failed to analyze library: ${error}'; - case 'libraries.noLibrariesFound': return 'No libraries found'; - case 'libraries.thisLibraryIsEmpty': return 'This library is empty'; - case 'libraries.all': return 'All'; - case 'libraries.clearAll': return 'Clear All'; - case 'libraries.scanLibraryConfirm': return ({required Object title}) => 'Are you sure you want to scan "${title}"?'; - case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => 'Are you sure you want to analyze "${title}"?'; - case 'libraries.refreshMetadataConfirm': return ({required Object title}) => 'Are you sure you want to refresh metadata for "${title}"?'; - case 'libraries.emptyTrashConfirm': return ({required Object title}) => 'Are you sure you want to empty trash for "${title}"?'; - case 'libraries.manageLibraries': return 'Manage Libraries'; - case 'libraries.sort': return 'Sort'; - case 'libraries.sortBy': return 'Sort By'; - case 'libraries.filters': return 'Filters'; - case 'libraries.loadingLibraryWithCount': return ({required Object count}) => 'Loading library... (${count} items loaded)'; - case 'libraries.confirmActionMessage': return 'Are you sure you want to perform this action?'; - case 'libraries.showLibrary': return 'Show library'; - case 'libraries.hideLibrary': return 'Hide library'; - case 'libraries.libraryOptions': return 'Library options'; - case 'libraries.content': return 'library content'; - case 'libraries.selectLibrary': return 'Select library'; - case 'libraries.filtersWithCount': return ({required Object count}) => 'Filters (${count})'; - case 'libraries.noRecommendations': return 'No recommendations available'; - case 'libraries.noCollections': return 'No collections in this library'; - case 'libraries.noFoldersFound': return 'No folders found'; - case 'libraries.folders': return 'folders'; - case 'libraries.tabs.recommended': return 'Recommended'; - case 'libraries.tabs.browse': return 'Browse'; - case 'libraries.tabs.collections': return 'Collections'; - case 'libraries.tabs.playlists': return 'Playlists'; - case 'libraries.groupings.all': return 'All'; - case 'libraries.groupings.movies': return 'Movies'; - case 'libraries.groupings.shows': return 'TV Shows'; - case 'libraries.groupings.seasons': return 'Seasons'; - case 'libraries.groupings.episodes': return 'Episodes'; - case 'libraries.groupings.folders': return 'Folders'; - case 'about.title': return 'About'; - case 'about.openSourceLicenses': return 'Open Source Licenses'; - case 'about.versionLabel': return ({required Object version}) => 'Version ${version}'; - case 'about.appDescription': return 'A beautiful Plex client for Flutter'; - case 'about.viewLicensesDescription': return 'View licenses of third-party libraries'; - case 'serverSelection.connectingToServer': return 'Connecting to server...'; - case 'serverSelection.connectingToAllServers': return 'Connecting to all servers...'; - case 'serverSelection.connectToAllServers': return 'Connect to All Servers'; - case 'serverSelection.allServerConnectionsFailed': return 'Failed to connect to any servers. Please check your network and try again.'; - case 'serverSelection.foundServers': return ({required Object count}) => 'Found ${count} server(s)'; - case 'serverSelection.orSelectIndividually': return 'Or select a server individually:'; - case 'serverSelection.serverDebugCopied': return 'Server debug data copied to clipboard'; - case 'serverSelection.copyDebugData': return 'Copy Debug Data'; - case 'serverSelection.noServersFound': return 'No servers found'; - case 'serverSelection.malformedServerData': return ({required Object count}) => 'Found ${count} server(s) with malformed data. No valid servers available.'; - case 'serverSelection.incompleteServerInfo': return 'Some servers have incomplete information and were skipped. Please check your Plex.tv account.'; - case 'serverSelection.incompleteConnectionInfo': return 'Server connection information is incomplete. Please try again.'; - case 'serverSelection.malformedServerInfo': return ({required Object message}) => 'Server information is malformed: ${message}'; - case 'serverSelection.networkConnectionFailed': return 'Network connection failed. Please check your internet connection and try again.'; - case 'serverSelection.authenticationFailed': return 'Authentication failed. Please sign in again.'; - case 'serverSelection.plexServiceUnavailable': return 'Plex service unavailable. Please try again later.'; - case 'serverSelection.failedToLoadServers': return ({required Object error}) => 'Failed to load servers: ${error}'; - case 'hubDetail.title': return 'Title'; - case 'hubDetail.releaseYear': return 'Release Year'; - case 'hubDetail.dateAdded': return 'Date Added'; - case 'hubDetail.rating': return 'Rating'; - case 'hubDetail.noItemsFound': return 'No items found'; - case 'logs.title': return 'Logs'; - case 'logs.clearLogs': return 'Clear Logs'; - case 'logs.copyLogs': return 'Copy Logs'; - case 'logs.exportLogs': return 'Export Logs'; - case 'logs.noLogsToShow': return 'No logs to show'; - case 'logs.error': return 'Error:'; - case 'logs.stackTrace': return 'Stack Trace:'; - case 'licenses.relatedPackages': return 'Related Packages'; - case 'licenses.license': return 'License'; - case 'licenses.licenseNumber': return ({required Object number}) => 'License ${number}'; - case 'licenses.licensesCount': return ({required Object count}) => '${count} licenses'; - case 'navigation.home': return 'Home'; - case 'navigation.search': return 'Search'; - case 'navigation.libraries': return 'Libraries'; - case 'navigation.settings': return 'Settings'; - case 'collections.title': return 'Collections'; - case 'collections.collection': return 'Collection'; - case 'collections.empty': return 'Collection is empty'; - case 'collections.noItems': return 'No items in this collection'; - case 'collections.unknownLibrarySection': return 'Cannot delete: Unknown library section'; - case 'collections.deleteCollection': return 'Delete Collection'; - case 'collections.deleteConfirm': return ({required Object title}) => 'Are you sure you want to delete "${title}"? This action cannot be undone.'; - case 'collections.deleted': return 'Collection deleted'; - case 'collections.deleteFailed': return 'Failed to delete collection'; - case 'collections.deleteFailedWithError': return ({required Object error}) => 'Failed to delete collection: ${error}'; - case 'collections.failedToLoadItems': return ({required Object error}) => 'Failed to load collection items: ${error}'; - case 'collections.addTo': return 'Add to collection'; - case 'collections.selectCollection': return 'Select Collection'; - case 'collections.createNewCollection': return 'Create New Collection'; - case 'collections.collectionName': return 'Collection Name'; - case 'collections.enterCollectionName': return 'Enter collection name'; - case 'collections.addedToCollection': return 'Added to collection'; - case 'collections.errorAddingToCollection': return 'Failed to add to collection'; - case 'collections.created': return 'Collection created'; - case 'collections.removeFromCollection': return 'Remove from collection'; - case 'collections.removeFromCollectionConfirm': return ({required Object title}) => 'Remove "${title}" from this collection?'; - case 'collections.removedFromCollection': return 'Removed from collection'; - case 'collections.removeFromCollectionFailed': return 'Failed to remove from collection'; - case 'collections.removeFromCollectionError': return ({required Object error}) => 'Error removing from collection: ${error}'; - case 'playlists.title': return 'Playlists'; - case 'playlists.playlist': return 'Playlist'; - case 'playlists.noPlaylists': return 'No playlists found'; - case 'playlists.create': return 'Create Playlist'; - case 'playlists.newPlaylist': return 'New Playlist'; - case 'playlists.playlistName': return 'Playlist Name'; - case 'playlists.enterPlaylistName': return 'Enter playlist name'; - case 'playlists.edit': return 'Edit Playlist'; - case 'playlists.delete': return 'Delete Playlist'; - case 'playlists.addTo': return 'Add to Playlist'; - case 'playlists.addItems': return 'Add Items'; - case 'playlists.removeItem': return 'Remove from Playlist'; - case 'playlists.clearPlaylist': return 'Clear Playlist'; - case 'playlists.playAll': return 'Play All'; - case 'playlists.shuffle': return 'Shuffle'; - case 'playlists.smartPlaylist': return 'Smart Playlist'; - case 'playlists.regularPlaylist': return 'Regular Playlist'; - case 'playlists.itemCount': return ({required Object count}) => '${count} items'; - case 'playlists.oneItem': return '1 item'; - case 'playlists.emptyPlaylist': return 'This playlist is empty'; - case 'playlists.deleteConfirm': return 'Delete Playlist?'; - case 'playlists.deleteMessage': return ({required Object name}) => 'Are you sure you want to delete "${name}"?'; - case 'playlists.created': return 'Playlist created'; - case 'playlists.updated': return 'Playlist updated'; - case 'playlists.deleted': return 'Playlist deleted'; - case 'playlists.itemAdded': return 'Added to playlist'; - case 'playlists.itemRemoved': return 'Removed from playlist'; - case 'playlists.selectPlaylist': return 'Select Playlist'; - case 'playlists.createNewPlaylist': return 'Create New Playlist'; - case 'playlists.errorCreating': return 'Failed to create playlist'; - case 'playlists.errorDeleting': return 'Failed to delete playlist'; - case 'playlists.errorLoading': return 'Failed to load playlists'; - case 'playlists.errorAdding': return 'Failed to add to playlist'; - case 'playlists.errorReordering': return 'Failed to reorder playlist item'; - case 'playlists.errorRemoving': return 'Failed to remove from playlist'; - default: return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': + return 'Plezy'; + case 'app.loading': + return 'Loading...'; + case 'auth.signInWithPlex': + return 'Sign in with Plex'; + case 'auth.showQRCode': + return 'Show QR Code'; + case 'auth.cancel': + return 'Cancel'; + case 'auth.authenticate': + return 'Authenticate'; + case 'auth.retry': + return 'Retry'; + case 'auth.debugEnterToken': + return 'Debug: Enter Plex Token'; + case 'auth.plexTokenLabel': + return 'Plex Auth Token'; + case 'auth.plexTokenHint': + return 'Enter your Plex.tv token'; + case 'auth.authenticationTimeout': + return 'Authentication timed out. Please try again.'; + case 'auth.scanQRCodeInstruction': + return 'Scan this QR code with a device logged into Plex to authenticate.'; + case 'auth.waitingForAuth': + return 'Waiting for authentication...\nPlease complete sign-in in your browser.'; + case 'common.cancel': + return 'Cancel'; + case 'common.save': + return 'Save'; + case 'common.close': + return 'Close'; + case 'common.clear': + return 'Clear'; + case 'common.reset': + return 'Reset'; + case 'common.later': + return 'Later'; + case 'common.submit': + return 'Submit'; + case 'common.confirm': + return 'Confirm'; + case 'common.retry': + return 'Retry'; + case 'common.playNow': + return 'Play Now'; + case 'common.logout': + return 'Logout'; + case 'common.online': + return 'Online'; + case 'common.offline': + return 'Offline'; + case 'common.owned': + return 'Owned'; + case 'common.shared': + return 'Shared'; + case 'common.current': + return 'CURRENT'; + case 'common.unknown': + return 'Unknown'; + case 'common.refresh': + return 'Refresh'; + case 'common.yes': + return 'Yes'; + case 'common.no': + return 'No'; + case 'common.server': + return 'Server'; + case 'common.delete': + return 'Delete'; + case 'common.shuffle': + return 'Shuffle'; + case 'common.addTo': + return 'Add to...'; + case 'screens.licenses': + return 'Licenses'; + case 'screens.switchProfile': + return 'Switch Profile'; + case 'screens.subtitleStyling': + return 'Subtitle Styling'; + case 'screens.search': + return 'Search'; + case 'screens.logs': + return 'Logs'; + case 'update.available': + return 'Update Available'; + case 'update.versionAvailable': + return ({required Object version}) => 'Version ${version} is available'; + case 'update.currentVersion': + return ({required Object version}) => 'Current: ${version}'; + case 'update.skipVersion': + return 'Skip This Version'; + case 'update.viewRelease': + return 'View Release'; + case 'update.latestVersion': + return 'You are on the latest version'; + case 'update.checkFailed': + return 'Failed to check for updates'; + case 'settings.title': + return 'Settings'; + case 'settings.language': + return 'Language'; + case 'settings.theme': + return 'Theme'; + case 'settings.appearance': + return 'Appearance'; + case 'settings.videoPlayback': + return 'Video Playback'; + case 'settings.shufflePlay': + return 'Shuffle Play'; + case 'settings.advanced': + return 'Advanced'; + case 'settings.useSeasonPostersDescription': + return 'Show season poster instead of series poster for episodes'; + case 'settings.showHeroSectionDescription': + return 'Display featured content carousel on home screen'; + case 'settings.secondsLabel': + return 'Seconds'; + case 'settings.minutesLabel': + return 'Minutes'; + case 'settings.secondsShort': + return 's'; + case 'settings.minutesShort': + return 'm'; + case 'settings.durationHint': + return ({required Object min, required Object max}) => + 'Enter duration (${min}-${max})'; + case 'settings.systemTheme': + return 'System'; + case 'settings.systemThemeDescription': + return 'Follow system settings'; + case 'settings.lightTheme': + return 'Light'; + case 'settings.darkTheme': + return 'Dark'; + case 'settings.libraryDensity': + return 'Library Density'; + case 'settings.compact': + return 'Compact'; + case 'settings.compactDescription': + return 'Smaller cards, more items visible'; + case 'settings.normal': + return 'Normal'; + case 'settings.normalDescription': + return 'Default size'; + case 'settings.comfortable': + return 'Comfortable'; + case 'settings.comfortableDescription': + return 'Larger cards, fewer items visible'; + case 'settings.viewMode': + return 'View Mode'; + case 'settings.gridView': + return 'Grid'; + case 'settings.gridViewDescription': + return 'Display items in a grid layout'; + case 'settings.listView': + return 'List'; + case 'settings.listViewDescription': + return 'Display items in a list layout'; + case 'settings.useSeasonPosters': + return 'Use Season Posters'; + case 'settings.showHeroSection': + return 'Show Hero Section'; + case 'settings.hardwareDecoding': + return 'Hardware Decoding'; + case 'settings.hardwareDecodingDescription': + return 'Use hardware acceleration when available'; + case 'settings.bufferSize': + return 'Buffer Size'; + case 'settings.bufferSizeMB': + return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': + return 'Subtitle Styling'; + case 'settings.subtitleStylingDescription': + return 'Customize subtitle appearance'; + case 'settings.smallSkipDuration': + return 'Small Skip Duration'; + case 'settings.largeSkipDuration': + return 'Large Skip Duration'; + case 'settings.secondsUnit': + return ({required Object seconds}) => '${seconds} seconds'; + case 'settings.defaultSleepTimer': + return 'Default Sleep Timer'; + case 'settings.minutesUnit': + return ({required Object minutes}) => '${minutes} minutes'; + case 'settings.rememberTrackSelections': + return 'Remember track selections per show/movie'; + case 'settings.rememberTrackSelectionsDescription': + return 'Automatically save audio and subtitle language preferences when you change tracks during playback'; + case 'settings.unwatchedOnly': + return 'Unwatched Only'; + case 'settings.unwatchedOnlyDescription': + return 'Only include unwatched episodes in shuffle queue'; + case 'settings.shuffleOrderNavigation': + return 'Shuffle Order Navigation'; + case 'settings.shuffleOrderNavigationDescription': + return 'Next/previous buttons follow shuffled order'; + case 'settings.loopShuffleQueue': + return 'Loop Shuffle Queue'; + case 'settings.loopShuffleQueueDescription': + return 'Restart queue when reaching the end'; + case 'settings.videoPlayerControls': + return 'Video Player Controls'; + case 'settings.keyboardShortcuts': + return 'Keyboard Shortcuts'; + case 'settings.keyboardShortcutsDescription': + return 'Customize keyboard shortcuts'; + case 'settings.debugLogging': + return 'Debug Logging'; + case 'settings.debugLoggingDescription': + return 'Enable detailed logging for troubleshooting'; + case 'settings.viewLogs': + return 'View Logs'; + case 'settings.viewLogsDescription': + return 'View application logs'; + case 'settings.clearCache': + return 'Clear Cache'; + case 'settings.clearCacheDescription': + return 'This will clear all cached images and data. The app may take longer to load content after clearing the cache.'; + case 'settings.clearCacheSuccess': + return 'Cache cleared successfully'; + case 'settings.resetSettings': + return 'Reset Settings'; + case 'settings.resetSettingsDescription': + return 'This will reset all settings to their default values. This action cannot be undone.'; + case 'settings.resetSettingsSuccess': + return 'Settings reset successfully'; + case 'settings.shortcutsReset': + return 'Shortcuts reset to defaults'; + case 'settings.about': + return 'About'; + case 'settings.aboutDescription': + return 'App information and licenses'; + case 'settings.updates': + return 'Updates'; + case 'settings.updateAvailable': + return 'Update Available'; + case 'settings.checkForUpdates': + return 'Check for Updates'; + case 'settings.validationErrorEnterNumber': + return 'Please enter a valid number'; + case 'settings.validationErrorDuration': + return ({ + required Object min, + required Object max, + required Object unit, + }) => 'Duration must be between ${min} and ${max} ${unit}'; + case 'settings.shortcutAlreadyAssigned': + return ({required Object action}) => + 'Shortcut already assigned to ${action}'; + case 'settings.shortcutUpdated': + return ({required Object action}) => 'Shortcut updated for ${action}'; + case 'settings.autoSkip': + return 'Auto Skip'; + case 'settings.autoSkipIntro': + return 'Auto Skip Intro'; + case 'settings.autoSkipIntroDescription': + return 'Automatically skip intro markers after a few seconds'; + case 'settings.autoSkipCredits': + return 'Auto Skip Credits'; + case 'settings.autoSkipCreditsDescription': + return 'Automatically skip credits and play next episode'; + case 'settings.autoSkipDelay': + return 'Auto Skip Delay'; + case 'settings.autoSkipDelayDescription': + return ({required Object seconds}) => + 'Wait ${seconds} seconds before auto-skipping'; + case 'search.hint': + return 'Search movies, shows, music...'; + case 'search.tryDifferentTerm': + return 'Try a different search term'; + case 'search.searchYourMedia': + return 'Search your media'; + case 'search.enterTitleActorOrKeyword': + return 'Enter a title, actor, or keyword'; + case 'hotkeys.setShortcutFor': + return ({required Object actionName}) => + 'Set Shortcut for ${actionName}'; + case 'hotkeys.clearShortcut': + return 'Clear shortcut'; + case 'pinEntry.enterPin': + return 'Enter PIN'; + case 'pinEntry.showPin': + return 'Show PIN'; + case 'pinEntry.hidePin': + return 'Hide PIN'; + case 'fileInfo.title': + return 'File Info'; + case 'fileInfo.video': + return 'Video'; + case 'fileInfo.audio': + return 'Audio'; + case 'fileInfo.file': + return 'File'; + case 'fileInfo.advanced': + return 'Advanced'; + case 'fileInfo.codec': + return 'Codec'; + case 'fileInfo.resolution': + return 'Resolution'; + case 'fileInfo.bitrate': + return 'Bitrate'; + case 'fileInfo.frameRate': + return 'Frame Rate'; + case 'fileInfo.aspectRatio': + return 'Aspect Ratio'; + case 'fileInfo.profile': + return 'Profile'; + case 'fileInfo.bitDepth': + return 'Bit Depth'; + case 'fileInfo.colorSpace': + return 'Color Space'; + case 'fileInfo.colorRange': + return 'Color Range'; + case 'fileInfo.colorPrimaries': + return 'Color Primaries'; + case 'fileInfo.chromaSubsampling': + return 'Chroma Subsampling'; + case 'fileInfo.channels': + return 'Channels'; + case 'fileInfo.path': + return 'Path'; + case 'fileInfo.size': + return 'Size'; + case 'fileInfo.container': + return 'Container'; + case 'fileInfo.duration': + return 'Duration'; + case 'fileInfo.optimizedForStreaming': + return 'Optimized for Streaming'; + case 'fileInfo.has64bitOffsets': + return '64-bit Offsets'; + case 'mediaMenu.markAsWatched': + return 'Mark as Watched'; + case 'mediaMenu.markAsUnwatched': + return 'Mark as Unwatched'; + case 'mediaMenu.removeFromContinueWatching': + return 'Remove from Continue Watching'; + case 'mediaMenu.goToSeries': + return 'Go to series'; + case 'mediaMenu.goToSeason': + return 'Go to season'; + case 'mediaMenu.shufflePlay': + return 'Shuffle Play'; + case 'mediaMenu.fileInfo': + return 'File Info'; + case 'accessibility.mediaCardMovie': + return ({required Object title}) => '${title}, movie'; + case 'accessibility.mediaCardShow': + return ({required Object title}) => '${title}, TV show'; + case 'accessibility.mediaCardEpisode': + return ({required Object title, required Object episodeInfo}) => + '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': + return ({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': + return 'watched'; + case 'accessibility.mediaCardPartiallyWatched': + return ({required Object percent}) => '${percent} percent watched'; + case 'accessibility.mediaCardUnwatched': + return 'unwatched'; + case 'accessibility.tapToPlay': + return 'Tap to play'; + case 'tooltips.shufflePlay': + return 'Shuffle play'; + case 'tooltips.markAsWatched': + return 'Mark as watched'; + case 'tooltips.markAsUnwatched': + return 'Mark as unwatched'; + case 'videoControls.audioLabel': + return 'Audio'; + case 'videoControls.subtitlesLabel': + return 'Subtitles'; + case 'videoControls.resetToZero': + return 'Reset to 0ms'; + case 'videoControls.addTime': + return ({required Object amount, required Object unit}) => + '+${amount}${unit}'; + case 'videoControls.minusTime': + return ({required Object amount, required Object unit}) => + '-${amount}${unit}'; + case 'videoControls.playsLater': + return ({required Object label}) => '${label} plays later'; + case 'videoControls.playsEarlier': + return ({required Object label}) => '${label} plays earlier'; + case 'videoControls.noOffset': + return 'No offset'; + case 'videoControls.letterbox': + return 'Letterbox'; + case 'videoControls.fillScreen': + return 'Fill screen'; + case 'videoControls.stretch': + return 'Stretch'; + case 'videoControls.lockRotation': + return 'Lock rotation'; + case 'videoControls.unlockRotation': + return 'Unlock rotation'; + case 'videoControls.sleepTimer': + return 'Sleep Timer'; + case 'videoControls.timerActive': + return 'Timer Active'; + case 'videoControls.playbackWillPauseIn': + return ({required Object duration}) => + 'Playback will pause in ${duration}'; + case 'videoControls.sleepTimerCompleted': + return 'Sleep timer completed - playback paused'; + case 'videoControls.playButton': + return 'Play'; + case 'videoControls.pauseButton': + return 'Pause'; + case 'videoControls.seekBackwardButton': + return ({required Object seconds}) => + 'Seek backward ${seconds} seconds'; + case 'videoControls.seekForwardButton': + return ({required Object seconds}) => 'Seek forward ${seconds} seconds'; + case 'videoControls.previousButton': + return 'Previous episode'; + case 'videoControls.nextButton': + return 'Next episode'; + case 'videoControls.previousChapterButton': + return 'Previous chapter'; + case 'videoControls.nextChapterButton': + return 'Next chapter'; + case 'videoControls.volumeButton': + return 'Volume'; + case 'videoControls.muteButton': + return 'Mute'; + case 'videoControls.unmuteButton': + return 'Unmute'; + case 'videoControls.settingsButton': + return 'Video settings'; + case 'videoControls.audioTrackButton': + return 'Audio tracks'; + case 'videoControls.subtitlesButton': + return 'Subtitles'; + case 'videoControls.chaptersButton': + return 'Chapters'; + case 'videoControls.versionsButton': + return 'Video versions'; + case 'videoControls.aspectRatioButton': + return 'Aspect ratio'; + case 'videoControls.fullscreenButton': + return 'Enter fullscreen'; + case 'videoControls.exitFullscreenButton': + return 'Exit fullscreen'; + case 'videoControls.rotationLockButton': + return 'Rotation lock'; + case 'videoControls.timelineSlider': + return 'Video timeline'; + case 'videoControls.volumeSlider': + return 'Volume level'; + case 'videoControls.backButton': + return 'Back'; + case 'userStatus.admin': + return 'Admin'; + case 'userStatus.restricted': + return 'Restricted'; + case 'userStatus.protected': + return 'Protected'; + case 'userStatus.current': + return 'CURRENT'; + case 'messages.markedAsWatched': + return 'Marked as watched'; + case 'messages.markedAsUnwatched': + return 'Marked as unwatched'; + case 'messages.removedFromContinueWatching': + return 'Removed from Continue Watching'; + case 'messages.errorLoading': + return ({required Object error}) => 'Error: ${error}'; + case 'messages.fileInfoNotAvailable': + return 'File information not available'; + case 'messages.errorLoadingFileInfo': + return ({required Object error}) => 'Error loading file info: ${error}'; + case 'messages.errorLoadingSeries': + return 'Error loading series'; + case 'messages.errorLoadingSeason': + return 'Error loading season'; + case 'messages.musicNotSupported': + return 'Music playback is not yet supported'; + case 'messages.logsCleared': + return 'Logs cleared'; + case 'messages.logsCopied': + return 'Logs copied to clipboard'; + case 'messages.noLogsAvailable': + return 'No logs available'; + case 'messages.libraryScanning': + return ({required Object title}) => 'Scanning "${title}"...'; + case 'messages.libraryScanStarted': + return ({required Object title}) => + 'Library scan started for "${title}"'; + case 'messages.libraryScanFailed': + return ({required Object error}) => 'Failed to scan library: ${error}'; + case 'messages.metadataRefreshing': + return ({required Object title}) => + 'Refreshing metadata for "${title}"...'; + case 'messages.metadataRefreshStarted': + return ({required Object title}) => + 'Metadata refresh started for "${title}"'; + case 'messages.metadataRefreshFailed': + return ({required Object error}) => + 'Failed to refresh metadata: ${error}'; + case 'messages.noPlexToken': + return 'No Plex token found. Please login again.'; + case 'messages.logoutConfirm': + return 'Are you sure you want to logout?'; + case 'messages.noSeasonsFound': + return 'No seasons found'; + case 'messages.noEpisodesFound': + return 'No episodes found in first season'; + case 'messages.noEpisodesFoundGeneral': + return 'No episodes found'; + case 'messages.noResultsFound': + return 'No results found'; + case 'messages.sleepTimerSet': + return ({required Object label}) => 'Sleep timer set for ${label}'; + case 'messages.failedToSwitchProfile': + return ({required Object displayName}) => + 'Failed to switch to ${displayName}'; + case 'messages.noItemsAvailable': + return 'No items available'; + case 'messages.failedToCreatePlayQueue': + return 'Failed to create play queue'; + case 'messages.failedToCreatePlayQueueNoItems': + return 'Failed to create play queue - no items'; + case 'messages.failedPlayback': + return ({required Object action, required Object error}) => + 'Failed to ${action}: ${error}'; + case 'profile.noUsersAvailable': + return 'No users available'; + case 'subtitlingStyling.stylingOptions': + return 'Styling Options'; + case 'subtitlingStyling.fontSize': + return 'Font Size'; + case 'subtitlingStyling.textColor': + return 'Text Color'; + case 'subtitlingStyling.borderSize': + return 'Border Size'; + case 'subtitlingStyling.borderColor': + return 'Border Color'; + case 'subtitlingStyling.backgroundOpacity': + return 'Background Opacity'; + case 'subtitlingStyling.backgroundColor': + return 'Background Color'; + case 'dialog.confirmAction': + return 'Confirm Action'; + case 'dialog.areYouSure': + return 'Are you sure you want to perform this action?'; + case 'dialog.cancel': + return 'Cancel'; + case 'dialog.playNow': + return 'Play Now'; + case 'discover.title': + return 'Discover'; + case 'discover.switchProfile': + return 'Switch Profile'; + case 'discover.logout': + return 'Logout'; + case 'discover.noContentAvailable': + return 'No content available'; + case 'discover.addMediaToLibraries': + return 'Add some media to your libraries'; + case 'discover.continueWatching': + return 'Continue Watching'; + case 'discover.recentlyAdded': + return 'Recently Added'; + case 'discover.play': + return 'Play'; + case 'discover.resume': + return 'Resume'; + case 'discover.playEpisode': + return ({required Object season, required Object episode}) => + 'Play S${season}, E${episode}'; + case 'discover.resumeEpisode': + return ({required Object season, required Object episode}) => + 'Resume S${season}, E${episode}'; + case 'discover.pause': + return 'Pause'; + case 'discover.overview': + return 'Overview'; + case 'discover.cast': + return 'Cast'; + case 'discover.seasons': + return 'Seasons'; + case 'discover.studio': + return 'Studio'; + case 'discover.rating': + return 'Rating'; + case 'discover.watched': + return 'Watched'; + case 'discover.episodeCount': + return ({required Object count}) => '${count} episodes'; + case 'discover.watchedProgress': + return ({required Object watched, required Object total}) => + '${watched}/${total} watched'; + case 'discover.movie': + return 'Movie'; + case 'discover.tvShow': + return 'TV Show'; + case 'discover.minutesLeft': + return ({required Object minutes}) => '${minutes} min left'; + case 'errors.searchFailed': + return ({required Object error}) => 'Search failed: ${error}'; + case 'errors.connectionTimeout': + return ({required Object context}) => + 'Connection timeout while loading ${context}'; + case 'errors.connectionFailed': + return 'Unable to connect to Plex server'; + case 'errors.failedToLoad': + return ({required Object context, required Object error}) => + 'Failed to load ${context}: ${error}'; + case 'errors.noClientAvailable': + return 'No client available'; + case 'errors.authenticationFailed': + return ({required Object error}) => 'Authentication failed: ${error}'; + case 'errors.couldNotLaunchUrl': + return 'Could not launch auth URL'; + case 'errors.pleaseEnterToken': + return 'Please enter a token'; + case 'errors.invalidToken': + return 'Invalid token'; + case 'errors.failedToVerifyToken': + return ({required Object error}) => 'Failed to verify token: ${error}'; + case 'errors.failedToSwitchProfile': + return ({required Object displayName}) => + 'Failed to switch to ${displayName}'; + case 'errors.connectionFailedGeneric': + return 'Connection failed'; + case 'libraries.title': + return 'Libraries'; + case 'libraries.scanLibraryFiles': + return 'Scan Library Files'; + case 'libraries.scanLibrary': + return 'Scan Library'; + case 'libraries.analyze': + return 'Analyze'; + case 'libraries.analyzeLibrary': + return 'Analyze Library'; + case 'libraries.refreshMetadata': + return 'Refresh Metadata'; + case 'libraries.emptyTrash': + return 'Empty Trash'; + case 'libraries.emptyingTrash': + return ({required Object title}) => 'Emptying trash for "${title}"...'; + case 'libraries.trashEmptied': + return ({required Object title}) => 'Trash emptied for "${title}"'; + case 'libraries.failedToEmptyTrash': + return ({required Object error}) => 'Failed to empty trash: ${error}'; + case 'libraries.analyzing': + return ({required Object title}) => 'Analyzing "${title}"...'; + case 'libraries.analysisStarted': + return ({required Object title}) => 'Analysis started for "${title}"'; + case 'libraries.failedToAnalyze': + return ({required Object error}) => + 'Failed to analyze library: ${error}'; + case 'libraries.noLibrariesFound': + return 'No libraries found'; + case 'libraries.thisLibraryIsEmpty': + return 'This library is empty'; + case 'libraries.all': + return 'All'; + case 'libraries.clearAll': + return 'Clear All'; + case 'libraries.scanLibraryConfirm': + return ({required Object title}) => + 'Are you sure you want to scan "${title}"?'; + case 'libraries.analyzeLibraryConfirm': + return ({required Object title}) => + 'Are you sure you want to analyze "${title}"?'; + case 'libraries.refreshMetadataConfirm': + return ({required Object title}) => + 'Are you sure you want to refresh metadata for "${title}"?'; + case 'libraries.emptyTrashConfirm': + return ({required Object title}) => + 'Are you sure you want to empty trash for "${title}"?'; + case 'libraries.manageLibraries': + return 'Manage Libraries'; + case 'libraries.sort': + return 'Sort'; + case 'libraries.sortBy': + return 'Sort By'; + case 'libraries.filters': + return 'Filters'; + case 'libraries.loadingLibraryWithCount': + return ({required Object count}) => + 'Loading library... (${count} items loaded)'; + case 'libraries.confirmActionMessage': + return 'Are you sure you want to perform this action?'; + case 'libraries.showLibrary': + return 'Show library'; + case 'libraries.hideLibrary': + return 'Hide library'; + case 'libraries.libraryOptions': + return 'Library options'; + case 'libraries.content': + return 'library content'; + case 'libraries.selectLibrary': + return 'Select library'; + case 'libraries.filtersWithCount': + return ({required Object count}) => 'Filters (${count})'; + case 'libraries.noRecommendations': + return 'No recommendations available'; + case 'libraries.noCollections': + return 'No collections in this library'; + case 'libraries.noFoldersFound': + return 'No folders found'; + case 'libraries.folders': + return 'folders'; + case 'libraries.tabs.recommended': + return 'Recommended'; + case 'libraries.tabs.browse': + return 'Browse'; + case 'libraries.tabs.collections': + return 'Collections'; + case 'libraries.tabs.playlists': + return 'Playlists'; + case 'libraries.groupings.all': + return 'All'; + case 'libraries.groupings.movies': + return 'Movies'; + case 'libraries.groupings.shows': + return 'TV Shows'; + case 'libraries.groupings.seasons': + return 'Seasons'; + case 'libraries.groupings.episodes': + return 'Episodes'; + case 'libraries.groupings.folders': + return 'Folders'; + case 'about.title': + return 'About'; + case 'about.openSourceLicenses': + return 'Open Source Licenses'; + case 'about.versionLabel': + return ({required Object version}) => 'Version ${version}'; + case 'about.appDescription': + return 'A beautiful Plex client for Flutter'; + case 'about.viewLicensesDescription': + return 'View licenses of third-party libraries'; + case 'serverSelection.connectingToServer': + return 'Connecting to server...'; + case 'serverSelection.connectingToAllServers': + return 'Connecting to all servers...'; + case 'serverSelection.connectToAllServers': + return 'Connect to All Servers'; + case 'serverSelection.allServerConnectionsFailed': + return 'Failed to connect to any servers. Please check your network and try again.'; + case 'serverSelection.foundServers': + return ({required Object count}) => 'Found ${count} server(s)'; + case 'serverSelection.orSelectIndividually': + return 'Or select a server individually:'; + case 'serverSelection.serverDebugCopied': + return 'Server debug data copied to clipboard'; + case 'serverSelection.copyDebugData': + return 'Copy Debug Data'; + case 'serverSelection.noServersFound': + return 'No servers found'; + case 'serverSelection.malformedServerData': + return ({required Object count}) => + 'Found ${count} server(s) with malformed data. No valid servers available.'; + case 'serverSelection.incompleteServerInfo': + return 'Some servers have incomplete information and were skipped. Please check your Plex.tv account.'; + case 'serverSelection.incompleteConnectionInfo': + return 'Server connection information is incomplete. Please try again.'; + case 'serverSelection.malformedServerInfo': + return ({required Object message}) => + 'Server information is malformed: ${message}'; + case 'serverSelection.networkConnectionFailed': + return 'Network connection failed. Please check your internet connection and try again.'; + case 'serverSelection.authenticationFailed': + return 'Authentication failed. Please sign in again.'; + case 'serverSelection.plexServiceUnavailable': + return 'Plex service unavailable. Please try again later.'; + case 'serverSelection.failedToLoadServers': + return ({required Object error}) => 'Failed to load servers: ${error}'; + case 'hubDetail.title': + return 'Title'; + case 'hubDetail.releaseYear': + return 'Release Year'; + case 'hubDetail.dateAdded': + return 'Date Added'; + case 'hubDetail.rating': + return 'Rating'; + case 'hubDetail.noItemsFound': + return 'No items found'; + case 'logs.title': + return 'Logs'; + case 'logs.clearLogs': + return 'Clear Logs'; + case 'logs.copyLogs': + return 'Copy Logs'; + case 'logs.exportLogs': + return 'Export Logs'; + case 'logs.noLogsToShow': + return 'No logs to show'; + case 'logs.error': + return 'Error:'; + case 'logs.stackTrace': + return 'Stack Trace:'; + case 'licenses.relatedPackages': + return 'Related Packages'; + case 'licenses.license': + return 'License'; + case 'licenses.licenseNumber': + return ({required Object number}) => 'License ${number}'; + case 'licenses.licensesCount': + return ({required Object count}) => '${count} licenses'; + case 'navigation.home': + return 'Home'; + case 'navigation.search': + return 'Search'; + case 'navigation.libraries': + return 'Libraries'; + case 'navigation.settings': + return 'Settings'; + case 'collections.title': + return 'Collections'; + case 'collections.collection': + return 'Collection'; + case 'collections.empty': + return 'Collection is empty'; + case 'collections.noItems': + return 'No items in this collection'; + case 'collections.unknownLibrarySection': + return 'Cannot delete: Unknown library section'; + case 'collections.deleteCollection': + return 'Delete Collection'; + case 'collections.deleteConfirm': + return ({required Object title}) => + 'Are you sure you want to delete "${title}"? This action cannot be undone.'; + case 'collections.deleted': + return 'Collection deleted'; + case 'collections.deleteFailed': + return 'Failed to delete collection'; + case 'collections.deleteFailedWithError': + return ({required Object error}) => + 'Failed to delete collection: ${error}'; + case 'collections.failedToLoadItems': + return ({required Object error}) => + 'Failed to load collection items: ${error}'; + case 'collections.addTo': + return 'Add to collection'; + case 'collections.selectCollection': + return 'Select Collection'; + case 'collections.createNewCollection': + return 'Create New Collection'; + case 'collections.collectionName': + return 'Collection Name'; + case 'collections.enterCollectionName': + return 'Enter collection name'; + case 'collections.addedToCollection': + return 'Added to collection'; + case 'collections.errorAddingToCollection': + return 'Failed to add to collection'; + case 'collections.created': + return 'Collection created'; + case 'collections.removeFromCollection': + return 'Remove from collection'; + case 'collections.removeFromCollectionConfirm': + return ({required Object title}) => + 'Remove "${title}" from this collection?'; + case 'collections.removedFromCollection': + return 'Removed from collection'; + case 'collections.removeFromCollectionFailed': + return 'Failed to remove from collection'; + case 'collections.removeFromCollectionError': + return ({required Object error}) => + 'Error removing from collection: ${error}'; + case 'playlists.title': + return 'Playlists'; + case 'playlists.playlist': + return 'Playlist'; + case 'playlists.noPlaylists': + return 'No playlists found'; + case 'playlists.create': + return 'Create Playlist'; + case 'playlists.newPlaylist': + return 'New Playlist'; + case 'playlists.playlistName': + return 'Playlist Name'; + case 'playlists.enterPlaylistName': + return 'Enter playlist name'; + case 'playlists.edit': + return 'Edit Playlist'; + case 'playlists.delete': + return 'Delete Playlist'; + case 'playlists.addTo': + return 'Add to Playlist'; + case 'playlists.addItems': + return 'Add Items'; + case 'playlists.removeItem': + return 'Remove from Playlist'; + case 'playlists.clearPlaylist': + return 'Clear Playlist'; + case 'playlists.playAll': + return 'Play All'; + case 'playlists.shuffle': + return 'Shuffle'; + case 'playlists.smartPlaylist': + return 'Smart Playlist'; + case 'playlists.regularPlaylist': + return 'Regular Playlist'; + case 'playlists.itemCount': + return ({required Object count}) => '${count} items'; + case 'playlists.oneItem': + return '1 item'; + case 'playlists.emptyPlaylist': + return 'This playlist is empty'; + case 'playlists.deleteConfirm': + return 'Delete Playlist?'; + case 'playlists.deleteMessage': + return ({required Object name}) => + 'Are you sure you want to delete "${name}"?'; + case 'playlists.created': + return 'Playlist created'; + case 'playlists.updated': + return 'Playlist updated'; + case 'playlists.deleted': + return 'Playlist deleted'; + case 'playlists.itemAdded': + return 'Added to playlist'; + case 'playlists.itemRemoved': + return 'Removed from playlist'; + case 'playlists.selectPlaylist': + return 'Select Playlist'; + case 'playlists.createNewPlaylist': + return 'Create New Playlist'; + case 'playlists.errorCreating': + return 'Failed to create playlist'; + case 'playlists.errorDeleting': + return 'Failed to delete playlist'; + case 'playlists.errorLoading': + return 'Failed to load playlists'; + case 'playlists.errorAdding': + return 'Failed to add to playlist'; + case 'playlists.errorReordering': + return 'Failed to reorder playlist item'; + case 'playlists.errorRemoving': + return 'Failed to remove from playlist'; + default: + return null; + } + } } extension on _StringsDe { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': return 'Plezy'; - case 'app.loading': return 'Lädt...'; - case 'auth.signInWithPlex': return 'Mit Plex anmelden'; - case 'auth.showQRCode': return 'QR-Code anzeigen'; - case 'auth.cancel': return 'Abbrechen'; - case 'auth.authenticate': return 'Authentifizieren'; - case 'auth.retry': return 'Erneut versuchen'; - case 'auth.debugEnterToken': return 'Debug: Plex-Token eingeben'; - case 'auth.plexTokenLabel': return 'Plex-Auth-Token'; - case 'auth.plexTokenHint': return 'Plex.tv-Token eingeben'; - case 'auth.authenticationTimeout': return 'Authentifizierung abgelaufen. Bitte erneut versuchen.'; - case 'auth.scanQRCodeInstruction': return 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.'; - case 'auth.waitingForAuth': return 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.'; - case 'common.cancel': return 'Abbrechen'; - case 'common.save': return 'Speichern'; - case 'common.close': return 'Schließen'; - case 'common.clear': return 'Leeren'; - case 'common.reset': return 'Zurücksetzen'; - case 'common.later': return 'Später'; - case 'common.submit': return 'Senden'; - case 'common.confirm': return 'Bestätigen'; - case 'common.retry': return 'Erneut versuchen'; - case 'common.playNow': return 'Jetzt abspielen'; - case 'common.logout': return 'Abmelden'; - case 'common.online': return 'Online'; - case 'common.offline': return 'Offline'; - case 'common.owned': return 'Besitzer'; - case 'common.shared': return 'Geteilt'; - case 'common.current': return 'AKTUELL'; - case 'common.unknown': return 'Unbekannt'; - case 'common.refresh': return 'Aktualisieren'; - case 'common.yes': return 'Ja'; - case 'common.no': return 'Nein'; - case 'common.server': return 'Server'; - case 'common.delete': return 'Löschen'; - case 'common.shuffle': return 'Zufall'; - case 'common.addTo': return 'Hinzufügen zu...'; - case 'screens.licenses': return 'Lizenzen'; - case 'screens.selectServer': return 'Server auswählen'; - case 'screens.switchProfile': return 'Profil wechseln'; - case 'screens.subtitleStyling': return 'Untertitel-Stil'; - case 'screens.search': return 'Suche'; - case 'screens.logs': return 'Protokolle'; - case 'update.available': return 'Update verfügbar'; - case 'update.versionAvailable': return ({required Object version}) => 'Version ${version} ist verfügbar'; - case 'update.currentVersion': return ({required Object version}) => 'Aktuell: ${version}'; - case 'update.skipVersion': return 'Diese Version überspringen'; - case 'update.viewRelease': return 'Release anzeigen'; - case 'update.latestVersion': return 'Aktuellste Version installiert'; - case 'update.checkFailed': return 'Fehler bei der Updateprüfung'; - case 'settings.title': return 'Einstellungen'; - case 'settings.language': return 'Sprache'; - case 'settings.theme': return 'Design'; - case 'settings.appearance': return 'Darstellung'; - case 'settings.videoPlayback': return 'Videowiedergabe'; - case 'settings.shufflePlay': return 'Zufallswiedergabe'; - case 'settings.advanced': return 'Erweitert'; - case 'settings.useSeasonPostersDescription': return 'Staffelposter statt Serienposter für Episoden anzeigen'; - case 'settings.showHeroSectionDescription': return 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; - case 'settings.secondsLabel': return 'Sekunden'; - case 'settings.minutesLabel': return 'Minuten'; - case 'settings.secondsShort': return 's'; - case 'settings.minutesShort': return 'm'; - case 'settings.durationHint': return ({required Object min, required Object max}) => 'Dauer eingeben (${min}-${max})'; - case 'settings.systemTheme': return 'System'; - case 'settings.systemThemeDescription': return 'Systemeinstellungen folgen'; - case 'settings.lightTheme': return 'Hell'; - case 'settings.darkTheme': return 'Dunkel'; - case 'settings.libraryDensity': return 'Mediathekdichte'; - case 'settings.compact': return 'Kompakt'; - case 'settings.compactDescription': return 'Kleinere Karten, mehr Elemente sichtbar'; - case 'settings.normal': return 'Normal'; - case 'settings.normalDescription': return 'Standardgröße'; - case 'settings.comfortable': return 'Großzügig'; - case 'settings.comfortableDescription': return 'Größere Karten, weniger Elemente sichtbar'; - case 'settings.viewMode': return 'Ansichtsmodus'; - case 'settings.gridView': return 'Raster'; - case 'settings.gridViewDescription': return 'Elemente im Raster anzeigen'; - case 'settings.listView': return 'Liste'; - case 'settings.listViewDescription': return 'Elemente in Listenansicht anzeigen'; - case 'settings.useSeasonPosters': return 'Staffelposter verwenden'; - case 'settings.showHeroSection': return 'Hero-Bereich anzeigen'; - case 'settings.hardwareDecoding': return 'Hardware-Decodierung'; - case 'settings.hardwareDecodingDescription': return 'Hardwarebeschleunigung verwenden, sofern verfügbar'; - case 'settings.bufferSize': return 'Puffergröße'; - case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': return 'Untertitel-Stil'; - case 'settings.subtitleStylingDescription': return 'Aussehen von Untertiteln anpassen'; - case 'settings.smallSkipDuration': return 'Kleine Sprungdauer'; - case 'settings.largeSkipDuration': return 'Große Sprungdauer'; - case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} Sekunden'; - case 'settings.defaultSleepTimer': return 'Standard-Sleep-Timer'; - case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} Minuten'; - case 'settings.rememberTrackSelections': return 'Spurauswahl pro Serie/Film merken'; - case 'settings.rememberTrackSelectionsDescription': return 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; - case 'settings.unwatchedOnly': return 'Nur ungesehene'; - case 'settings.unwatchedOnlyDescription': return 'Nur ungesehene Episoden in die Shuffle-Warteschlange aufnehmen'; - case 'settings.shuffleOrderNavigation': return 'Navigation der Shuffle-Reihenfolge'; - case 'settings.shuffleOrderNavigationDescription': return 'Weiter/Zurück folgt der zufälligen Reihenfolge'; - case 'settings.loopShuffleQueue': return 'Shuffle-Warteschlange wiederholen'; - case 'settings.loopShuffleQueueDescription': return 'Warteschlange neu starten, wenn das Ende erreicht ist'; - case 'settings.videoPlayerControls': return 'Videoplayer-Steuerung'; - case 'settings.keyboardShortcuts': return 'Tastenkürzel'; - case 'settings.keyboardShortcutsDescription': return 'Tastenkürzel anpassen'; - case 'settings.debugLogging': return 'Debug-Protokollierung'; - case 'settings.debugLoggingDescription': return 'Detaillierte Protokolle zur Fehleranalyse aktivieren'; - case 'settings.viewLogs': return 'Protokolle anzeigen'; - case 'settings.viewLogsDescription': return 'App-Protokolle anzeigen'; - case 'settings.clearCache': return 'Cache löschen'; - case 'settings.clearCacheDescription': return 'Löscht alle zwischengespeicherten Bilder und Daten. Die App kann danach langsamer laden.'; - case 'settings.clearCacheSuccess': return 'Cache erfolgreich gelöscht'; - case 'settings.resetSettings': return 'Einstellungen zurücksetzen'; - case 'settings.resetSettingsDescription': return 'Alle Einstellungen auf Standard zurücksetzen. Dies kann nicht rückgängig gemacht werden.'; - case 'settings.resetSettingsSuccess': return 'Einstellungen erfolgreich zurückgesetzt'; - case 'settings.shortcutsReset': return 'Tastenkürzel auf Standard zurückgesetzt'; - case 'settings.about': return 'Über'; - case 'settings.aboutDescription': return 'App-Informationen und Lizenzen'; - case 'settings.updates': return 'Updates'; - case 'settings.updateAvailable': return 'Update verfügbar'; - case 'settings.checkForUpdates': return 'Nach Updates suchen'; - case 'settings.validationErrorEnterNumber': return 'Bitte eine gültige Zahl eingeben'; - case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => 'Dauer muss zwischen ${min} und ${max} ${unit} liegen'; - case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => 'Tastenkürzel bereits zugewiesen an ${action}'; - case 'settings.shortcutUpdated': return ({required Object action}) => 'Tastenkürzel aktualisiert für ${action}'; - case 'settings.autoSkip': return 'Automatisches Überspringen'; - case 'settings.autoSkipIntro': return 'Intro automatisch überspringen'; - case 'settings.autoSkipIntroDescription': return 'Intro-Marker nach wenigen Sekunden automatisch überspringen'; - case 'settings.autoSkipCredits': return 'Abspann automatisch überspringen'; - case 'settings.autoSkipCreditsDescription': return 'Abspann automatisch überspringen und nächste Episode abspielen'; - case 'settings.autoSkipDelay': return 'Verzögerung für automatisches Überspringen'; - case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => '${seconds} Sekunden vor dem automatischen Überspringen warten'; - case 'search.hint': return 'Filme, Serien, Musik suchen...'; - case 'search.tryDifferentTerm': return 'Anderen Suchbegriff versuchen'; - case 'search.searchYourMedia': return 'In den eigenen Medien suchen'; - case 'search.enterTitleActorOrKeyword': return 'Titel, Schauspieler oder Stichwort eingeben'; - case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Tastenkürzel festlegen für ${actionName}'; - case 'hotkeys.clearShortcut': return 'Kürzel löschen'; - case 'pinEntry.enterPin': return 'PIN eingeben'; - case 'pinEntry.showPin': return 'PIN anzeigen'; - case 'pinEntry.hidePin': return 'PIN verbergen'; - case 'fileInfo.title': return 'Dateiinfo'; - case 'fileInfo.video': return 'Video'; - case 'fileInfo.audio': return 'Audio'; - case 'fileInfo.file': return 'Datei'; - case 'fileInfo.advanced': return 'Erweitert'; - case 'fileInfo.codec': return 'Codec'; - case 'fileInfo.resolution': return 'Auflösung'; - case 'fileInfo.bitrate': return 'Bitrate'; - case 'fileInfo.frameRate': return 'Bildrate'; - case 'fileInfo.aspectRatio': return 'Seitenverhältnis'; - case 'fileInfo.profile': return 'Profil'; - case 'fileInfo.bitDepth': return 'Farbtiefe'; - case 'fileInfo.colorSpace': return 'Farbraum'; - case 'fileInfo.colorRange': return 'Farbbereich'; - case 'fileInfo.colorPrimaries': return 'Primärfarben'; - case 'fileInfo.chromaSubsampling': return 'Chroma-Subsampling'; - case 'fileInfo.channels': return 'Kanäle'; - case 'fileInfo.path': return 'Pfad'; - case 'fileInfo.size': return 'Größe'; - case 'fileInfo.container': return 'Container'; - case 'fileInfo.duration': return 'Dauer'; - case 'fileInfo.optimizedForStreaming': return 'Für Streaming optimiert'; - case 'fileInfo.has64bitOffsets': return '64-Bit-Offsets'; - case 'mediaMenu.markAsWatched': return 'Als gesehen markieren'; - case 'mediaMenu.markAsUnwatched': return 'Als ungesehen markieren'; - case 'mediaMenu.removeFromContinueWatching': return 'Aus ‚Weiterschauen‘ entfernen'; - case 'mediaMenu.goToSeries': return 'Zur Serie'; - case 'mediaMenu.goToSeason': return 'Zur Staffel'; - case 'mediaMenu.shufflePlay': return 'Zufallswiedergabe'; - case 'mediaMenu.fileInfo': return 'Dateiinfo'; - case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, Film'; - case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, Serie'; - case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': return 'angesehen'; - case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} Prozent angesehen'; - case 'accessibility.mediaCardUnwatched': return 'ungeschaut'; - case 'accessibility.tapToPlay': return 'Zum Abspielen tippen'; - case 'tooltips.shufflePlay': return 'Zufallswiedergabe'; - case 'tooltips.markAsWatched': return 'Als gesehen markieren'; - case 'tooltips.markAsUnwatched': return 'Als ungesehen markieren'; - case 'videoControls.audioLabel': return 'Audio'; - case 'videoControls.subtitlesLabel': return 'Untertitel'; - case 'videoControls.resetToZero': return 'Auf 0 ms zurücksetzen'; - case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': return ({required Object label}) => '${label} spielt später'; - case 'videoControls.playsEarlier': return ({required Object label}) => '${label} spielt früher'; - case 'videoControls.noOffset': return 'Kein Offset'; - case 'videoControls.letterbox': return 'Letterbox'; - case 'videoControls.fillScreen': return 'Bild füllen'; - case 'videoControls.stretch': return 'Strecken'; - case 'videoControls.lockRotation': return 'Rotation sperren'; - case 'videoControls.unlockRotation': return 'Rotation entsperren'; - case 'videoControls.sleepTimer': return 'Schlaftimer'; - case 'videoControls.timerActive': return 'Schlaftimer aktiv'; - case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Wiedergabe wird in ${duration} pausiert'; - case 'videoControls.sleepTimerCompleted': return 'Schlaftimer abgelaufen – Wiedergabe pausiert'; - case 'videoControls.playButton': return 'Wiedergeben'; - case 'videoControls.pauseButton': return 'Pause'; - case 'videoControls.seekBackwardButton': return ({required Object seconds}) => '${seconds} Sekunden zurück'; - case 'videoControls.seekForwardButton': return ({required Object seconds}) => '${seconds} Sekunden vor'; - case 'videoControls.previousButton': return 'Vorherige Episode'; - case 'videoControls.nextButton': return 'Nächste Episode'; - case 'videoControls.previousChapterButton': return 'Vorheriges Kapitel'; - case 'videoControls.nextChapterButton': return 'Nächstes Kapitel'; - case 'videoControls.volumeButton': return 'Lautstärke'; - case 'videoControls.muteButton': return 'Stumm schalten'; - case 'videoControls.unmuteButton': return 'Stummschaltung aufheben'; - case 'videoControls.settingsButton': return 'Videoeinstellungen'; - case 'videoControls.audioTrackButton': return 'Tonspuren'; - case 'videoControls.subtitlesButton': return 'Untertitel'; - case 'videoControls.chaptersButton': return 'Kapitel'; - case 'videoControls.versionsButton': return 'Videoversionen'; - case 'videoControls.aspectRatioButton': return 'Seitenverhältnis'; - case 'videoControls.fullscreenButton': return 'Vollbild aktivieren'; - case 'videoControls.exitFullscreenButton': return 'Vollbild verlassen'; - case 'videoControls.rotationLockButton': return 'Dreh­sperre'; - case 'videoControls.timelineSlider': return 'Video-Zeitleiste'; - case 'videoControls.volumeSlider': return 'Lautstärkepegel'; - case 'videoControls.backButton': return 'Zurück'; - case 'userStatus.admin': return 'Eigentümer'; - case 'userStatus.restricted': return 'Eingeschränkt'; - case 'userStatus.protected': return 'Geschützt'; - case 'userStatus.current': return 'AKTUELL'; - case 'messages.markedAsWatched': return 'Als gesehen markiert'; - case 'messages.markedAsUnwatched': return 'Als ungesehen markiert'; - case 'messages.removedFromContinueWatching': return 'Aus ‚Weiterschauen‘ entfernt'; - case 'messages.errorLoading': return ({required Object error}) => 'Fehler: ${error}'; - case 'messages.fileInfoNotAvailable': return 'Dateiinfo nicht verfügbar'; - case 'messages.errorLoadingFileInfo': return ({required Object error}) => 'Fehler beim Laden der Dateiinfo: ${error}'; - case 'messages.errorLoadingSeries': return 'Fehler beim Laden der Serie'; - case 'messages.errorLoadingSeason': return 'Fehler beim Laden der Staffel'; - case 'messages.musicNotSupported': return 'Musikwiedergabe wird noch nicht unterstützt'; - case 'messages.logsCleared': return 'Protokolle gelöscht'; - case 'messages.logsCopied': return 'Protokolle in Zwischenablage kopiert'; - case 'messages.noLogsAvailable': return 'Keine Protokolle verfügbar'; - case 'messages.libraryScanning': return ({required Object title}) => 'Scanne „${title}“...'; - case 'messages.libraryScanStarted': return ({required Object title}) => 'Mediathekscan gestartet für „${title}“'; - case 'messages.libraryScanFailed': return ({required Object error}) => 'Fehler beim Scannen der Mediathek: ${error}'; - case 'messages.metadataRefreshing': return ({required Object title}) => 'Metadaten werden aktualisiert für „${title}“...'; - case 'messages.metadataRefreshStarted': return ({required Object title}) => 'Metadaten-Aktualisierung gestartet für „${title}“'; - case 'messages.metadataRefreshFailed': return ({required Object error}) => 'Metadaten konnten nicht aktualisiert werden: ${error}'; - case 'messages.noPlexToken': return 'Kein Plex-Token gefunden. Bitte erneut anmelden.'; - case 'messages.logoutConfirm': return 'Abmeldung wirklich durchführen?'; - case 'messages.noSeasonsFound': return 'Keine Staffeln gefunden'; - case 'messages.noEpisodesFound': return 'Keine Episoden in der ersten Staffel gefunden'; - case 'messages.noEpisodesFoundGeneral': return 'Keine Episoden gefunden'; - case 'messages.noResultsFound': return 'Keine Ergebnisse gefunden'; - case 'messages.sleepTimerSet': return ({required Object label}) => 'Sleep-Timer gesetzt auf ${label}'; - case 'messages.failedToSwitchProfile': return ({required Object displayName}) => 'Profilwechsel zu ${displayName} fehlgeschlagen'; - case 'messages.noItemsAvailable': return 'Keine Elemente verfügbar'; - case 'messages.failedToCreatePlayQueue': return 'Wiedergabewarteschlange konnte nicht erstellt werden'; - case 'messages.failedToCreatePlayQueueNoItems': return 'Wiedergabewarteschlange konnte nicht erstellt werden – keine Elemente'; - case 'messages.failedPlayback': return ({required Object action, required Object error}) => 'Wiedergabe für ${action} fehlgeschlagen: ${error}'; - case 'profile.noUsersAvailable': return 'Keine Benutzer verfügbar'; - case 'subtitlingStyling.stylingOptions': return 'Stiloptionen'; - case 'subtitlingStyling.fontSize': return 'Schriftgröße'; - case 'subtitlingStyling.textColor': return 'Textfarbe'; - case 'subtitlingStyling.borderSize': return 'Rahmengröße'; - case 'subtitlingStyling.borderColor': return 'Rahmenfarbe'; - case 'subtitlingStyling.backgroundOpacity': return 'Hintergrunddeckkraft'; - case 'subtitlingStyling.backgroundColor': return 'Hintergrundfarbe'; - case 'dialog.confirmAction': return 'Aktion bestätigen'; - case 'dialog.areYouSure': return 'Aktion wirklich ausführen?'; - case 'dialog.cancel': return 'Abbrechen'; - case 'dialog.playNow': return 'Jetzt abspielen'; - case 'discover.title': return 'Entdecken'; - case 'discover.switchProfile': return 'Profil wechseln'; - case 'discover.switchServer': return 'Server wechseln'; - case 'discover.logout': return 'Abmelden'; - case 'discover.noContentAvailable': return 'Kein Inhalt verfügbar'; - case 'discover.addMediaToLibraries': return 'Medien zur Mediathek hinzufügen'; - case 'discover.continueWatching': return 'Weiterschauen'; - case 'discover.recentlyAdded': return 'Kürzlich hinzugefügt'; - case 'discover.play': return 'Abspielen'; - case 'discover.resume': return 'Fortsetzen'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'S${season}, E${episode} - Abspielen'; - case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => 'S${season}, E${episode} - Fortsetzen'; - case 'discover.pause': return 'Pause'; - case 'discover.overview': return 'Übersicht'; - case 'discover.cast': return 'Besetzung'; - case 'discover.seasons': return 'Staffeln'; - case 'discover.studio': return 'Studio'; - case 'discover.rating': return 'Altersfreigabe'; - case 'discover.watched': return 'Gesehen'; - case 'discover.episodeCount': return ({required Object count}) => '${count} Episoden'; - case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '${watched} von ${total} gesehen'; - case 'discover.movie': return 'Film'; - case 'discover.tvShow': return 'Serie'; - case 'discover.minutesLeft': return ({required Object minutes}) => '${minutes} Min übrig'; - case 'errors.searchFailed': return ({required Object error}) => 'Suche fehlgeschlagen: ${error}'; - case 'errors.connectionTimeout': return ({required Object context}) => 'Zeitüberschreitung beim Laden von ${context}'; - case 'errors.connectionFailed': return 'Verbindung zum Plex-Server fehlgeschlagen'; - case 'errors.failedToLoad': return ({required Object context, required Object error}) => 'Fehler beim Laden von ${context}: ${error}'; - case 'errors.noClientAvailable': return 'Kein Client verfügbar'; - case 'errors.authenticationFailed': return ({required Object error}) => 'Authentifizierung fehlgeschlagen: ${error}'; - case 'errors.couldNotLaunchUrl': return 'Auth-URL konnte nicht geöffnet werden'; - case 'errors.pleaseEnterToken': return 'Bitte Token eingeben'; - case 'errors.invalidToken': return 'Ungültiges Token'; - case 'errors.failedToVerifyToken': return ({required Object error}) => 'Token-Verifizierung fehlgeschlagen: ${error}'; - case 'errors.failedToSwitchProfile': return ({required Object displayName}) => 'Profilwechsel zu ${displayName} fehlgeschlagen'; - case 'errors.connectionFailedGeneric': return 'Verbindung fehlgeschlagen'; - case 'libraries.title': return 'Mediatheken'; - case 'libraries.scanLibraryFiles': return 'Mediatheksdateien scannen'; - case 'libraries.scanLibrary': return 'Mediathek scannen'; - case 'libraries.analyze': return 'Analysieren'; - case 'libraries.analyzeLibrary': return 'Mediathek analysieren'; - case 'libraries.refreshMetadata': return 'Metadaten aktualisieren'; - case 'libraries.emptyTrash': return 'Papierkorb leeren'; - case 'libraries.emptyingTrash': return ({required Object title}) => 'Papierkorb für „${title}“ wird geleert...'; - case 'libraries.trashEmptied': return ({required Object title}) => 'Papierkorb für „${title}“ geleert'; - case 'libraries.failedToEmptyTrash': return ({required Object error}) => 'Papierkorb konnte nicht geleert werden: ${error}'; - case 'libraries.analyzing': return ({required Object title}) => 'Analysiere „${title}“...'; - case 'libraries.analysisStarted': return ({required Object title}) => 'Analyse gestartet für „${title}“'; - case 'libraries.failedToAnalyze': return ({required Object error}) => 'Analyse der Mediathek fehlgeschlagen: ${error}'; - case 'libraries.noLibrariesFound': return 'Keine Mediatheken gefunden'; - case 'libraries.thisLibraryIsEmpty': return 'Diese Mediathek ist leer'; - case 'libraries.all': return 'Alle'; - case 'libraries.clearAll': return 'Alle löschen'; - case 'libraries.scanLibraryConfirm': return ({required Object title}) => '„${title}“ wirklich scannen?'; - case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => '„${title}“ wirklich analysieren?'; - case 'libraries.refreshMetadataConfirm': return ({required Object title}) => 'Metadaten für „${title}“ wirklich aktualisieren?'; - case 'libraries.emptyTrashConfirm': return ({required Object title}) => 'Papierkorb für „${title}“ wirklich leeren?'; - case 'libraries.manageLibraries': return 'Mediatheken verwalten'; - case 'libraries.sort': return 'Sortieren'; - case 'libraries.sortBy': return 'Sortieren nach'; - case 'libraries.filters': return 'Filter'; - case 'libraries.loadingLibraryWithCount': return ({required Object count}) => 'Lade Mediathek... (${count} Elemente geladen)'; - case 'libraries.confirmActionMessage': return 'Aktion wirklich durchführen?'; - case 'libraries.showLibrary': return 'Mediathek anzeigen'; - case 'libraries.hideLibrary': return 'Mediathek ausblenden'; - case 'libraries.libraryOptions': return 'Mediatheksoptionen'; - case 'libraries.content': return 'Bibliotheksinhalt'; - case 'libraries.selectLibrary': return 'Bibliothek auswählen'; - case 'libraries.filtersWithCount': return ({required Object count}) => 'Filter (${count})'; - case 'libraries.noRecommendations': return 'Keine Empfehlungen verfügbar'; - case 'libraries.noCollections': return 'Keine Sammlungen in dieser Mediathek'; - case 'libraries.noFoldersFound': return 'Keine Ordner gefunden'; - case 'libraries.folders': return 'Ordner'; - case 'libraries.tabs.recommended': return 'Empfohlen'; - case 'libraries.tabs.browse': return 'Durchsuchen'; - case 'libraries.tabs.collections': return 'Sammlungen'; - case 'libraries.tabs.playlists': return 'Wiedergabelisten'; - case 'libraries.groupings.all': return 'Alle'; - case 'libraries.groupings.movies': return 'Filme'; - case 'libraries.groupings.shows': return 'Serien'; - case 'libraries.groupings.seasons': return 'Staffeln'; - case 'libraries.groupings.episodes': return 'Episoden'; - case 'libraries.groupings.folders': return 'Ordner'; - case 'about.title': return 'Über'; - case 'about.openSourceLicenses': return 'Open-Source-Lizenzen'; - case 'about.versionLabel': return ({required Object version}) => 'Version ${version}'; - case 'about.appDescription': return 'Ein schöner Plex-Client für Flutter'; - case 'about.viewLicensesDescription': return 'Lizenzen von Drittanbieter-Bibliotheken anzeigen'; - case 'serverSelection.connectingToServer': return 'Verbinde mit Server...'; - case 'serverSelection.connectingToAllServers': return 'Verbinde mit allen Servern...'; - case 'serverSelection.connectToAllServers': return 'Mit allen Servern verbinden'; - case 'serverSelection.allServerConnectionsFailed': return 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.'; - case 'serverSelection.foundServers': return ({required Object count}) => '${count} Server gefunden'; - case 'serverSelection.orSelectIndividually': return 'Oder einzelnen Server auswählen:'; - case 'serverSelection.serverDebugCopied': return 'Server-Debugdaten kopiert'; - case 'serverSelection.copyDebugData': return 'Debugdaten kopieren'; - case 'serverSelection.noServersFound': return 'Keine Server gefunden'; - case 'serverSelection.malformedServerData': return ({required Object count}) => '${count} Server mit fehlerhaften Daten gefunden. Keine gültigen Server verfügbar.'; - case 'serverSelection.incompleteServerInfo': return 'Einige Serverinformationen sind unvollständig und wurden übersprungen. Plex.tv-Konto prüfen.'; - case 'serverSelection.incompleteConnectionInfo': return 'Serververbindungsinformationen unvollständig. Bitte erneut versuchen.'; - case 'serverSelection.malformedServerInfo': return ({required Object message}) => 'Serverinformationen fehlerhaft: ${message}'; - case 'serverSelection.networkConnectionFailed': return 'Netzwerkverbindung fehlgeschlagen. Internetverbindung prüfen und erneut versuchen.'; - case 'serverSelection.authenticationFailed': return 'Authentifizierung fehlgeschlagen. Bitte erneut anmelden.'; - case 'serverSelection.plexServiceUnavailable': return 'Plex-Dienst nicht verfügbar. Bitte später erneut versuchen.'; - case 'serverSelection.failedToLoadServers': return ({required Object error}) => 'Server konnten nicht geladen werden: ${error}'; - case 'hubDetail.title': return 'Titel'; - case 'hubDetail.releaseYear': return 'Erscheinungsjahr'; - case 'hubDetail.dateAdded': return 'Hinzugefügt am'; - case 'hubDetail.rating': return 'Bewertung'; - case 'hubDetail.noItemsFound': return 'Keine Elemente gefunden'; - case 'logs.title': return 'Protokolle'; - case 'logs.clearLogs': return 'Protokolle löschen'; - case 'logs.copyLogs': return 'Protokolle kopieren'; - case 'logs.exportLogs': return 'Protokolle exportieren'; - case 'logs.noLogsToShow': return 'Keine Protokolle zum Anzeigen'; - case 'logs.error': return 'Fehler:'; - case 'logs.stackTrace': return 'Stacktrace:'; - case 'licenses.relatedPackages': return 'Verwandte Pakete'; - case 'licenses.license': return 'Lizenz'; - case 'licenses.licenseNumber': return ({required Object number}) => 'Lizenz ${number}'; - case 'licenses.licensesCount': return ({required Object count}) => '${count} Lizenzen'; - case 'navigation.home': return 'Start'; - case 'navigation.search': return 'Suche'; - case 'navigation.libraries': return 'Mediatheken'; - case 'navigation.settings': return 'Einstellungen'; - case 'playlists.title': return 'Wiedergabelisten'; - case 'playlists.noPlaylists': return 'Keine Wiedergabelisten gefunden'; - case 'playlists.create': return 'Wiedergabeliste erstellen'; - case 'playlists.newPlaylist': return 'Neue Wiedergabeliste'; - case 'playlists.playlistName': return 'Name der Wiedergabeliste'; - case 'playlists.enterPlaylistName': return 'Name der Wiedergabeliste eingeben'; - case 'playlists.edit': return 'Wiedergabeliste bearbeiten'; - case 'playlists.delete': return 'Wiedergabeliste löschen'; - case 'playlists.addTo': return 'Zur Wiedergabeliste hinzufügen'; - case 'playlists.addItems': return 'Elemente hinzufügen'; - case 'playlists.removeItem': return 'Aus Wiedergabeliste entfernen'; - case 'playlists.clearPlaylist': return 'Wiedergabeliste leeren'; - case 'playlists.playAll': return 'Alle abspielen'; - case 'playlists.shuffle': return 'Zufällig'; - case 'playlists.smartPlaylist': return 'Intelligente Wiedergabeliste'; - case 'playlists.regularPlaylist': return 'Normale Wiedergabeliste'; - case 'playlists.itemCount': return ({required Object count}) => '${count} Elemente'; - case 'playlists.oneItem': return '1 Element'; - case 'playlists.emptyPlaylist': return 'Diese Wiedergabeliste ist leer'; - case 'playlists.deleteConfirm': return 'Wiedergabeliste löschen?'; - case 'playlists.deleteMessage': return ({required Object name}) => 'Soll "${name}" wirklich gelöscht werden?'; - case 'playlists.created': return 'Wiedergabeliste erstellt'; - case 'playlists.updated': return 'Wiedergabeliste aktualisiert'; - case 'playlists.deleted': return 'Wiedergabeliste gelöscht'; - case 'playlists.itemAdded': return 'Zur Wiedergabeliste hinzugefügt'; - case 'playlists.itemRemoved': return 'Aus Wiedergabeliste entfernt'; - case 'playlists.selectPlaylist': return 'Wiedergabeliste auswählen'; - case 'playlists.createNewPlaylist': return 'Neue Wiedergabeliste erstellen'; - case 'playlists.errorCreating': return 'Wiedergabeliste konnte nicht erstellt werden'; - case 'playlists.errorDeleting': return 'Wiedergabeliste konnte nicht gelöscht werden'; - case 'playlists.errorLoading': return 'Wiedergabelisten konnten nicht geladen werden'; - case 'playlists.errorAdding': return 'Konnte nicht zur Wiedergabeliste hinzugefügt werden'; - case 'playlists.errorReordering': return 'Element der Wiedergabeliste konnte nicht neu geordnet werden'; - case 'playlists.errorRemoving': return 'Konnte nicht aus der Wiedergabeliste entfernt werden'; - case 'playlists.playlist': return 'Wiedergabeliste'; - case 'collections.title': return 'Sammlungen'; - case 'collections.collection': return 'Sammlung'; - case 'collections.empty': return 'Sammlung ist leer'; - case 'collections.noItems': return 'Keine Elemente in dieser Sammlung'; - case 'collections.unknownLibrarySection': return 'Löschen nicht möglich: Unbekannte Bibliothekssektion'; - case 'collections.deleteCollection': return 'Sammlung löschen'; - case 'collections.deleteConfirm': return ({required Object title}) => 'Sind Sie sicher, dass Sie "${title}" löschen möchten? Dies kann nicht rückgängig gemacht werden.'; - case 'collections.deleted': return 'Sammlung gelöscht'; - case 'collections.deleteFailed': return 'Sammlung konnte nicht gelöscht werden'; - case 'collections.deleteFailedWithError': return ({required Object error}) => 'Sammlung konnte nicht gelöscht werden: ${error}'; - case 'collections.failedToLoadItems': return ({required Object error}) => 'Sammlungselemente konnten nicht geladen werden: ${error}'; - case 'collections.addTo': return 'Zur Sammlung hinzufügen'; - case 'collections.selectCollection': return 'Sammlung auswählen'; - case 'collections.createNewCollection': return 'Neue Sammlung erstellen'; - case 'collections.collectionName': return 'Sammlungsname'; - case 'collections.enterCollectionName': return 'Sammlungsnamen eingeben'; - case 'collections.addedToCollection': return 'Zur Sammlung hinzugefügt'; - case 'collections.errorAddingToCollection': return 'Fehler beim Hinzufügen zur Sammlung'; - case 'collections.created': return 'Sammlung erstellt'; - case 'collections.removeFromCollection': return 'Aus Sammlung entfernen'; - case 'collections.removeFromCollectionConfirm': return ({required Object title}) => '"${title}" aus dieser Sammlung entfernen?'; - case 'collections.removedFromCollection': return 'Aus Sammlung entfernt'; - case 'collections.removeFromCollectionFailed': return 'Entfernen aus Sammlung fehlgeschlagen'; - case 'collections.removeFromCollectionError': return ({required Object error}) => 'Fehler beim Entfernen aus der Sammlung: ${error}'; - default: return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': + return 'Plezy'; + case 'app.loading': + return 'Lädt...'; + case 'auth.signInWithPlex': + return 'Mit Plex anmelden'; + case 'auth.showQRCode': + return 'QR-Code anzeigen'; + case 'auth.cancel': + return 'Abbrechen'; + case 'auth.authenticate': + return 'Authentifizieren'; + case 'auth.retry': + return 'Erneut versuchen'; + case 'auth.debugEnterToken': + return 'Debug: Plex-Token eingeben'; + case 'auth.plexTokenLabel': + return 'Plex-Auth-Token'; + case 'auth.plexTokenHint': + return 'Plex.tv-Token eingeben'; + case 'auth.authenticationTimeout': + return 'Authentifizierung abgelaufen. Bitte erneut versuchen.'; + case 'auth.scanQRCodeInstruction': + return 'Diesen QR-Code mit einem bei Plex angemeldeten Gerät scannen, um zu authentifizieren.'; + case 'auth.waitingForAuth': + return 'Warte auf Authentifizierung...\nBitte Anmeldung im Browser abschließen.'; + case 'common.cancel': + return 'Abbrechen'; + case 'common.save': + return 'Speichern'; + case 'common.close': + return 'Schließen'; + case 'common.clear': + return 'Leeren'; + case 'common.reset': + return 'Zurücksetzen'; + case 'common.later': + return 'Später'; + case 'common.submit': + return 'Senden'; + case 'common.confirm': + return 'Bestätigen'; + case 'common.retry': + return 'Erneut versuchen'; + case 'common.playNow': + return 'Jetzt abspielen'; + case 'common.logout': + return 'Abmelden'; + case 'common.online': + return 'Online'; + case 'common.offline': + return 'Offline'; + case 'common.owned': + return 'Besitzer'; + case 'common.shared': + return 'Geteilt'; + case 'common.current': + return 'AKTUELL'; + case 'common.unknown': + return 'Unbekannt'; + case 'common.refresh': + return 'Aktualisieren'; + case 'common.yes': + return 'Ja'; + case 'common.no': + return 'Nein'; + case 'common.server': + return 'Server'; + case 'common.delete': + return 'Löschen'; + case 'common.shuffle': + return 'Zufall'; + case 'common.addTo': + return 'Hinzufügen zu...'; + case 'screens.licenses': + return 'Lizenzen'; + case 'screens.selectServer': + return 'Server auswählen'; + case 'screens.switchProfile': + return 'Profil wechseln'; + case 'screens.subtitleStyling': + return 'Untertitel-Stil'; + case 'screens.search': + return 'Suche'; + case 'screens.logs': + return 'Protokolle'; + case 'update.available': + return 'Update verfügbar'; + case 'update.versionAvailable': + return ({required Object version}) => + 'Version ${version} ist verfügbar'; + case 'update.currentVersion': + return ({required Object version}) => 'Aktuell: ${version}'; + case 'update.skipVersion': + return 'Diese Version überspringen'; + case 'update.viewRelease': + return 'Release anzeigen'; + case 'update.latestVersion': + return 'Aktuellste Version installiert'; + case 'update.checkFailed': + return 'Fehler bei der Updateprüfung'; + case 'settings.title': + return 'Einstellungen'; + case 'settings.language': + return 'Sprache'; + case 'settings.theme': + return 'Design'; + case 'settings.appearance': + return 'Darstellung'; + case 'settings.videoPlayback': + return 'Videowiedergabe'; + case 'settings.shufflePlay': + return 'Zufallswiedergabe'; + case 'settings.advanced': + return 'Erweitert'; + case 'settings.useSeasonPostersDescription': + return 'Staffelposter statt Serienposter für Episoden anzeigen'; + case 'settings.showHeroSectionDescription': + return 'Bereich mit empfohlenen Inhalten auf der Startseite anzeigen'; + case 'settings.secondsLabel': + return 'Sekunden'; + case 'settings.minutesLabel': + return 'Minuten'; + case 'settings.secondsShort': + return 's'; + case 'settings.minutesShort': + return 'm'; + case 'settings.durationHint': + return ({required Object min, required Object max}) => + 'Dauer eingeben (${min}-${max})'; + case 'settings.systemTheme': + return 'System'; + case 'settings.systemThemeDescription': + return 'Systemeinstellungen folgen'; + case 'settings.lightTheme': + return 'Hell'; + case 'settings.darkTheme': + return 'Dunkel'; + case 'settings.libraryDensity': + return 'Mediathekdichte'; + case 'settings.compact': + return 'Kompakt'; + case 'settings.compactDescription': + return 'Kleinere Karten, mehr Elemente sichtbar'; + case 'settings.normal': + return 'Normal'; + case 'settings.normalDescription': + return 'Standardgröße'; + case 'settings.comfortable': + return 'Großzügig'; + case 'settings.comfortableDescription': + return 'Größere Karten, weniger Elemente sichtbar'; + case 'settings.viewMode': + return 'Ansichtsmodus'; + case 'settings.gridView': + return 'Raster'; + case 'settings.gridViewDescription': + return 'Elemente im Raster anzeigen'; + case 'settings.listView': + return 'Liste'; + case 'settings.listViewDescription': + return 'Elemente in Listenansicht anzeigen'; + case 'settings.useSeasonPosters': + return 'Staffelposter verwenden'; + case 'settings.showHeroSection': + return 'Hero-Bereich anzeigen'; + case 'settings.hardwareDecoding': + return 'Hardware-Decodierung'; + case 'settings.hardwareDecodingDescription': + return 'Hardwarebeschleunigung verwenden, sofern verfügbar'; + case 'settings.bufferSize': + return 'Puffergröße'; + case 'settings.bufferSizeMB': + return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': + return 'Untertitel-Stil'; + case 'settings.subtitleStylingDescription': + return 'Aussehen von Untertiteln anpassen'; + case 'settings.smallSkipDuration': + return 'Kleine Sprungdauer'; + case 'settings.largeSkipDuration': + return 'Große Sprungdauer'; + case 'settings.secondsUnit': + return ({required Object seconds}) => '${seconds} Sekunden'; + case 'settings.defaultSleepTimer': + return 'Standard-Sleep-Timer'; + case 'settings.minutesUnit': + return ({required Object minutes}) => '${minutes} Minuten'; + case 'settings.rememberTrackSelections': + return 'Spurauswahl pro Serie/Film merken'; + case 'settings.rememberTrackSelectionsDescription': + return 'Audio- und Untertitelsprache automatisch speichern, wenn während der Wiedergabe geändert'; + case 'settings.unwatchedOnly': + return 'Nur ungesehene'; + case 'settings.unwatchedOnlyDescription': + return 'Nur ungesehene Episoden in die Shuffle-Warteschlange aufnehmen'; + case 'settings.shuffleOrderNavigation': + return 'Navigation der Shuffle-Reihenfolge'; + case 'settings.shuffleOrderNavigationDescription': + return 'Weiter/Zurück folgt der zufälligen Reihenfolge'; + case 'settings.loopShuffleQueue': + return 'Shuffle-Warteschlange wiederholen'; + case 'settings.loopShuffleQueueDescription': + return 'Warteschlange neu starten, wenn das Ende erreicht ist'; + case 'settings.videoPlayerControls': + return 'Videoplayer-Steuerung'; + case 'settings.keyboardShortcuts': + return 'Tastenkürzel'; + case 'settings.keyboardShortcutsDescription': + return 'Tastenkürzel anpassen'; + case 'settings.debugLogging': + return 'Debug-Protokollierung'; + case 'settings.debugLoggingDescription': + return 'Detaillierte Protokolle zur Fehleranalyse aktivieren'; + case 'settings.viewLogs': + return 'Protokolle anzeigen'; + case 'settings.viewLogsDescription': + return 'App-Protokolle anzeigen'; + case 'settings.clearCache': + return 'Cache löschen'; + case 'settings.clearCacheDescription': + return 'Löscht alle zwischengespeicherten Bilder und Daten. Die App kann danach langsamer laden.'; + case 'settings.clearCacheSuccess': + return 'Cache erfolgreich gelöscht'; + case 'settings.resetSettings': + return 'Einstellungen zurücksetzen'; + case 'settings.resetSettingsDescription': + return 'Alle Einstellungen auf Standard zurücksetzen. Dies kann nicht rückgängig gemacht werden.'; + case 'settings.resetSettingsSuccess': + return 'Einstellungen erfolgreich zurückgesetzt'; + case 'settings.shortcutsReset': + return 'Tastenkürzel auf Standard zurückgesetzt'; + case 'settings.about': + return 'Über'; + case 'settings.aboutDescription': + return 'App-Informationen und Lizenzen'; + case 'settings.updates': + return 'Updates'; + case 'settings.updateAvailable': + return 'Update verfügbar'; + case 'settings.checkForUpdates': + return 'Nach Updates suchen'; + case 'settings.validationErrorEnterNumber': + return 'Bitte eine gültige Zahl eingeben'; + case 'settings.validationErrorDuration': + return ({ + required Object min, + required Object max, + required Object unit, + }) => 'Dauer muss zwischen ${min} und ${max} ${unit} liegen'; + case 'settings.shortcutAlreadyAssigned': + return ({required Object action}) => + 'Tastenkürzel bereits zugewiesen an ${action}'; + case 'settings.shortcutUpdated': + return ({required Object action}) => + 'Tastenkürzel aktualisiert für ${action}'; + case 'settings.autoSkip': + return 'Automatisches Überspringen'; + case 'settings.autoSkipIntro': + return 'Intro automatisch überspringen'; + case 'settings.autoSkipIntroDescription': + return 'Intro-Marker nach wenigen Sekunden automatisch überspringen'; + case 'settings.autoSkipCredits': + return 'Abspann automatisch überspringen'; + case 'settings.autoSkipCreditsDescription': + return 'Abspann automatisch überspringen und nächste Episode abspielen'; + case 'settings.autoSkipDelay': + return 'Verzögerung für automatisches Überspringen'; + case 'settings.autoSkipDelayDescription': + return ({required Object seconds}) => + '${seconds} Sekunden vor dem automatischen Überspringen warten'; + case 'search.hint': + return 'Filme, Serien, Musik suchen...'; + case 'search.tryDifferentTerm': + return 'Anderen Suchbegriff versuchen'; + case 'search.searchYourMedia': + return 'In den eigenen Medien suchen'; + case 'search.enterTitleActorOrKeyword': + return 'Titel, Schauspieler oder Stichwort eingeben'; + case 'hotkeys.setShortcutFor': + return ({required Object actionName}) => + 'Tastenkürzel festlegen für ${actionName}'; + case 'hotkeys.clearShortcut': + return 'Kürzel löschen'; + case 'pinEntry.enterPin': + return 'PIN eingeben'; + case 'pinEntry.showPin': + return 'PIN anzeigen'; + case 'pinEntry.hidePin': + return 'PIN verbergen'; + case 'fileInfo.title': + return 'Dateiinfo'; + case 'fileInfo.video': + return 'Video'; + case 'fileInfo.audio': + return 'Audio'; + case 'fileInfo.file': + return 'Datei'; + case 'fileInfo.advanced': + return 'Erweitert'; + case 'fileInfo.codec': + return 'Codec'; + case 'fileInfo.resolution': + return 'Auflösung'; + case 'fileInfo.bitrate': + return 'Bitrate'; + case 'fileInfo.frameRate': + return 'Bildrate'; + case 'fileInfo.aspectRatio': + return 'Seitenverhältnis'; + case 'fileInfo.profile': + return 'Profil'; + case 'fileInfo.bitDepth': + return 'Farbtiefe'; + case 'fileInfo.colorSpace': + return 'Farbraum'; + case 'fileInfo.colorRange': + return 'Farbbereich'; + case 'fileInfo.colorPrimaries': + return 'Primärfarben'; + case 'fileInfo.chromaSubsampling': + return 'Chroma-Subsampling'; + case 'fileInfo.channels': + return 'Kanäle'; + case 'fileInfo.path': + return 'Pfad'; + case 'fileInfo.size': + return 'Größe'; + case 'fileInfo.container': + return 'Container'; + case 'fileInfo.duration': + return 'Dauer'; + case 'fileInfo.optimizedForStreaming': + return 'Für Streaming optimiert'; + case 'fileInfo.has64bitOffsets': + return '64-Bit-Offsets'; + case 'mediaMenu.markAsWatched': + return 'Als gesehen markieren'; + case 'mediaMenu.markAsUnwatched': + return 'Als ungesehen markieren'; + case 'mediaMenu.removeFromContinueWatching': + return 'Aus ‚Weiterschauen‘ entfernen'; + case 'mediaMenu.goToSeries': + return 'Zur Serie'; + case 'mediaMenu.goToSeason': + return 'Zur Staffel'; + case 'mediaMenu.shufflePlay': + return 'Zufallswiedergabe'; + case 'mediaMenu.fileInfo': + return 'Dateiinfo'; + case 'accessibility.mediaCardMovie': + return ({required Object title}) => '${title}, Film'; + case 'accessibility.mediaCardShow': + return ({required Object title}) => '${title}, Serie'; + case 'accessibility.mediaCardEpisode': + return ({required Object title, required Object episodeInfo}) => + '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': + return ({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': + return 'angesehen'; + case 'accessibility.mediaCardPartiallyWatched': + return ({required Object percent}) => '${percent} Prozent angesehen'; + case 'accessibility.mediaCardUnwatched': + return 'ungeschaut'; + case 'accessibility.tapToPlay': + return 'Zum Abspielen tippen'; + case 'tooltips.shufflePlay': + return 'Zufallswiedergabe'; + case 'tooltips.markAsWatched': + return 'Als gesehen markieren'; + case 'tooltips.markAsUnwatched': + return 'Als ungesehen markieren'; + case 'videoControls.audioLabel': + return 'Audio'; + case 'videoControls.subtitlesLabel': + return 'Untertitel'; + case 'videoControls.resetToZero': + return 'Auf 0 ms zurücksetzen'; + case 'videoControls.addTime': + return ({required Object amount, required Object unit}) => + '+${amount}${unit}'; + case 'videoControls.minusTime': + return ({required Object amount, required Object unit}) => + '-${amount}${unit}'; + case 'videoControls.playsLater': + return ({required Object label}) => '${label} spielt später'; + case 'videoControls.playsEarlier': + return ({required Object label}) => '${label} spielt früher'; + case 'videoControls.noOffset': + return 'Kein Offset'; + case 'videoControls.letterbox': + return 'Letterbox'; + case 'videoControls.fillScreen': + return 'Bild füllen'; + case 'videoControls.stretch': + return 'Strecken'; + case 'videoControls.lockRotation': + return 'Rotation sperren'; + case 'videoControls.unlockRotation': + return 'Rotation entsperren'; + case 'videoControls.sleepTimer': + return 'Schlaftimer'; + case 'videoControls.timerActive': + return 'Schlaftimer aktiv'; + case 'videoControls.playbackWillPauseIn': + return ({required Object duration}) => + 'Wiedergabe wird in ${duration} pausiert'; + case 'videoControls.sleepTimerCompleted': + return 'Schlaftimer abgelaufen – Wiedergabe pausiert'; + case 'videoControls.playButton': + return 'Wiedergeben'; + case 'videoControls.pauseButton': + return 'Pause'; + case 'videoControls.seekBackwardButton': + return ({required Object seconds}) => '${seconds} Sekunden zurück'; + case 'videoControls.seekForwardButton': + return ({required Object seconds}) => '${seconds} Sekunden vor'; + case 'videoControls.previousButton': + return 'Vorherige Episode'; + case 'videoControls.nextButton': + return 'Nächste Episode'; + case 'videoControls.previousChapterButton': + return 'Vorheriges Kapitel'; + case 'videoControls.nextChapterButton': + return 'Nächstes Kapitel'; + case 'videoControls.volumeButton': + return 'Lautstärke'; + case 'videoControls.muteButton': + return 'Stumm schalten'; + case 'videoControls.unmuteButton': + return 'Stummschaltung aufheben'; + case 'videoControls.settingsButton': + return 'Videoeinstellungen'; + case 'videoControls.audioTrackButton': + return 'Tonspuren'; + case 'videoControls.subtitlesButton': + return 'Untertitel'; + case 'videoControls.chaptersButton': + return 'Kapitel'; + case 'videoControls.versionsButton': + return 'Videoversionen'; + case 'videoControls.aspectRatioButton': + return 'Seitenverhältnis'; + case 'videoControls.fullscreenButton': + return 'Vollbild aktivieren'; + case 'videoControls.exitFullscreenButton': + return 'Vollbild verlassen'; + case 'videoControls.rotationLockButton': + return 'Dreh­sperre'; + case 'videoControls.timelineSlider': + return 'Video-Zeitleiste'; + case 'videoControls.volumeSlider': + return 'Lautstärkepegel'; + case 'videoControls.backButton': + return 'Zurück'; + case 'userStatus.admin': + return 'Eigentümer'; + case 'userStatus.restricted': + return 'Eingeschränkt'; + case 'userStatus.protected': + return 'Geschützt'; + case 'userStatus.current': + return 'AKTUELL'; + case 'messages.markedAsWatched': + return 'Als gesehen markiert'; + case 'messages.markedAsUnwatched': + return 'Als ungesehen markiert'; + case 'messages.removedFromContinueWatching': + return 'Aus ‚Weiterschauen‘ entfernt'; + case 'messages.errorLoading': + return ({required Object error}) => 'Fehler: ${error}'; + case 'messages.fileInfoNotAvailable': + return 'Dateiinfo nicht verfügbar'; + case 'messages.errorLoadingFileInfo': + return ({required Object error}) => + 'Fehler beim Laden der Dateiinfo: ${error}'; + case 'messages.errorLoadingSeries': + return 'Fehler beim Laden der Serie'; + case 'messages.errorLoadingSeason': + return 'Fehler beim Laden der Staffel'; + case 'messages.musicNotSupported': + return 'Musikwiedergabe wird noch nicht unterstützt'; + case 'messages.logsCleared': + return 'Protokolle gelöscht'; + case 'messages.logsCopied': + return 'Protokolle in Zwischenablage kopiert'; + case 'messages.noLogsAvailable': + return 'Keine Protokolle verfügbar'; + case 'messages.libraryScanning': + return ({required Object title}) => 'Scanne „${title}“...'; + case 'messages.libraryScanStarted': + return ({required Object title}) => + 'Mediathekscan gestartet für „${title}“'; + case 'messages.libraryScanFailed': + return ({required Object error}) => + 'Fehler beim Scannen der Mediathek: ${error}'; + case 'messages.metadataRefreshing': + return ({required Object title}) => + 'Metadaten werden aktualisiert für „${title}“...'; + case 'messages.metadataRefreshStarted': + return ({required Object title}) => + 'Metadaten-Aktualisierung gestartet für „${title}“'; + case 'messages.metadataRefreshFailed': + return ({required Object error}) => + 'Metadaten konnten nicht aktualisiert werden: ${error}'; + case 'messages.noPlexToken': + return 'Kein Plex-Token gefunden. Bitte erneut anmelden.'; + case 'messages.logoutConfirm': + return 'Abmeldung wirklich durchführen?'; + case 'messages.noSeasonsFound': + return 'Keine Staffeln gefunden'; + case 'messages.noEpisodesFound': + return 'Keine Episoden in der ersten Staffel gefunden'; + case 'messages.noEpisodesFoundGeneral': + return 'Keine Episoden gefunden'; + case 'messages.noResultsFound': + return 'Keine Ergebnisse gefunden'; + case 'messages.sleepTimerSet': + return ({required Object label}) => 'Sleep-Timer gesetzt auf ${label}'; + case 'messages.failedToSwitchProfile': + return ({required Object displayName}) => + 'Profilwechsel zu ${displayName} fehlgeschlagen'; + case 'messages.noItemsAvailable': + return 'Keine Elemente verfügbar'; + case 'messages.failedToCreatePlayQueue': + return 'Wiedergabewarteschlange konnte nicht erstellt werden'; + case 'messages.failedToCreatePlayQueueNoItems': + return 'Wiedergabewarteschlange konnte nicht erstellt werden – keine Elemente'; + case 'messages.failedPlayback': + return ({required Object action, required Object error}) => + 'Wiedergabe für ${action} fehlgeschlagen: ${error}'; + case 'profile.noUsersAvailable': + return 'Keine Benutzer verfügbar'; + case 'subtitlingStyling.stylingOptions': + return 'Stiloptionen'; + case 'subtitlingStyling.fontSize': + return 'Schriftgröße'; + case 'subtitlingStyling.textColor': + return 'Textfarbe'; + case 'subtitlingStyling.borderSize': + return 'Rahmengröße'; + case 'subtitlingStyling.borderColor': + return 'Rahmenfarbe'; + case 'subtitlingStyling.backgroundOpacity': + return 'Hintergrunddeckkraft'; + case 'subtitlingStyling.backgroundColor': + return 'Hintergrundfarbe'; + case 'dialog.confirmAction': + return 'Aktion bestätigen'; + case 'dialog.areYouSure': + return 'Aktion wirklich ausführen?'; + case 'dialog.cancel': + return 'Abbrechen'; + case 'dialog.playNow': + return 'Jetzt abspielen'; + case 'discover.title': + return 'Entdecken'; + case 'discover.switchProfile': + return 'Profil wechseln'; + case 'discover.switchServer': + return 'Server wechseln'; + case 'discover.logout': + return 'Abmelden'; + case 'discover.noContentAvailable': + return 'Kein Inhalt verfügbar'; + case 'discover.addMediaToLibraries': + return 'Medien zur Mediathek hinzufügen'; + case 'discover.continueWatching': + return 'Weiterschauen'; + case 'discover.recentlyAdded': + return 'Kürzlich hinzugefügt'; + case 'discover.play': + return 'Abspielen'; + case 'discover.resume': + return 'Fortsetzen'; + case 'discover.playEpisode': + return ({required Object season, required Object episode}) => + 'S${season}, E${episode} - Abspielen'; + case 'discover.resumeEpisode': + return ({required Object season, required Object episode}) => + 'S${season}, E${episode} - Fortsetzen'; + case 'discover.pause': + return 'Pause'; + case 'discover.overview': + return 'Übersicht'; + case 'discover.cast': + return 'Besetzung'; + case 'discover.seasons': + return 'Staffeln'; + case 'discover.studio': + return 'Studio'; + case 'discover.rating': + return 'Altersfreigabe'; + case 'discover.watched': + return 'Gesehen'; + case 'discover.episodeCount': + return ({required Object count}) => '${count} Episoden'; + case 'discover.watchedProgress': + return ({required Object watched, required Object total}) => + '${watched} von ${total} gesehen'; + case 'discover.movie': + return 'Film'; + case 'discover.tvShow': + return 'Serie'; + case 'discover.minutesLeft': + return ({required Object minutes}) => '${minutes} Min übrig'; + case 'errors.searchFailed': + return ({required Object error}) => 'Suche fehlgeschlagen: ${error}'; + case 'errors.connectionTimeout': + return ({required Object context}) => + 'Zeitüberschreitung beim Laden von ${context}'; + case 'errors.connectionFailed': + return 'Verbindung zum Plex-Server fehlgeschlagen'; + case 'errors.failedToLoad': + return ({required Object context, required Object error}) => + 'Fehler beim Laden von ${context}: ${error}'; + case 'errors.noClientAvailable': + return 'Kein Client verfügbar'; + case 'errors.authenticationFailed': + return ({required Object error}) => + 'Authentifizierung fehlgeschlagen: ${error}'; + case 'errors.couldNotLaunchUrl': + return 'Auth-URL konnte nicht geöffnet werden'; + case 'errors.pleaseEnterToken': + return 'Bitte Token eingeben'; + case 'errors.invalidToken': + return 'Ungültiges Token'; + case 'errors.failedToVerifyToken': + return ({required Object error}) => + 'Token-Verifizierung fehlgeschlagen: ${error}'; + case 'errors.failedToSwitchProfile': + return ({required Object displayName}) => + 'Profilwechsel zu ${displayName} fehlgeschlagen'; + case 'errors.connectionFailedGeneric': + return 'Verbindung fehlgeschlagen'; + case 'libraries.title': + return 'Mediatheken'; + case 'libraries.scanLibraryFiles': + return 'Mediatheksdateien scannen'; + case 'libraries.scanLibrary': + return 'Mediathek scannen'; + case 'libraries.analyze': + return 'Analysieren'; + case 'libraries.analyzeLibrary': + return 'Mediathek analysieren'; + case 'libraries.refreshMetadata': + return 'Metadaten aktualisieren'; + case 'libraries.emptyTrash': + return 'Papierkorb leeren'; + case 'libraries.emptyingTrash': + return ({required Object title}) => + 'Papierkorb für „${title}“ wird geleert...'; + case 'libraries.trashEmptied': + return ({required Object title}) => 'Papierkorb für „${title}“ geleert'; + case 'libraries.failedToEmptyTrash': + return ({required Object error}) => + 'Papierkorb konnte nicht geleert werden: ${error}'; + case 'libraries.analyzing': + return ({required Object title}) => 'Analysiere „${title}“...'; + case 'libraries.analysisStarted': + return ({required Object title}) => 'Analyse gestartet für „${title}“'; + case 'libraries.failedToAnalyze': + return ({required Object error}) => + 'Analyse der Mediathek fehlgeschlagen: ${error}'; + case 'libraries.noLibrariesFound': + return 'Keine Mediatheken gefunden'; + case 'libraries.thisLibraryIsEmpty': + return 'Diese Mediathek ist leer'; + case 'libraries.all': + return 'Alle'; + case 'libraries.clearAll': + return 'Alle löschen'; + case 'libraries.scanLibraryConfirm': + return ({required Object title}) => '„${title}“ wirklich scannen?'; + case 'libraries.analyzeLibraryConfirm': + return ({required Object title}) => '„${title}“ wirklich analysieren?'; + case 'libraries.refreshMetadataConfirm': + return ({required Object title}) => + 'Metadaten für „${title}“ wirklich aktualisieren?'; + case 'libraries.emptyTrashConfirm': + return ({required Object title}) => + 'Papierkorb für „${title}“ wirklich leeren?'; + case 'libraries.manageLibraries': + return 'Mediatheken verwalten'; + case 'libraries.sort': + return 'Sortieren'; + case 'libraries.sortBy': + return 'Sortieren nach'; + case 'libraries.filters': + return 'Filter'; + case 'libraries.loadingLibraryWithCount': + return ({required Object count}) => + 'Lade Mediathek... (${count} Elemente geladen)'; + case 'libraries.confirmActionMessage': + return 'Aktion wirklich durchführen?'; + case 'libraries.showLibrary': + return 'Mediathek anzeigen'; + case 'libraries.hideLibrary': + return 'Mediathek ausblenden'; + case 'libraries.libraryOptions': + return 'Mediatheksoptionen'; + case 'libraries.content': + return 'Bibliotheksinhalt'; + case 'libraries.selectLibrary': + return 'Bibliothek auswählen'; + case 'libraries.filtersWithCount': + return ({required Object count}) => 'Filter (${count})'; + case 'libraries.noRecommendations': + return 'Keine Empfehlungen verfügbar'; + case 'libraries.noCollections': + return 'Keine Sammlungen in dieser Mediathek'; + case 'libraries.noFoldersFound': + return 'Keine Ordner gefunden'; + case 'libraries.folders': + return 'Ordner'; + case 'libraries.tabs.recommended': + return 'Empfohlen'; + case 'libraries.tabs.browse': + return 'Durchsuchen'; + case 'libraries.tabs.collections': + return 'Sammlungen'; + case 'libraries.tabs.playlists': + return 'Wiedergabelisten'; + case 'libraries.groupings.all': + return 'Alle'; + case 'libraries.groupings.movies': + return 'Filme'; + case 'libraries.groupings.shows': + return 'Serien'; + case 'libraries.groupings.seasons': + return 'Staffeln'; + case 'libraries.groupings.episodes': + return 'Episoden'; + case 'libraries.groupings.folders': + return 'Ordner'; + case 'about.title': + return 'Über'; + case 'about.openSourceLicenses': + return 'Open-Source-Lizenzen'; + case 'about.versionLabel': + return ({required Object version}) => 'Version ${version}'; + case 'about.appDescription': + return 'Ein schöner Plex-Client für Flutter'; + case 'about.viewLicensesDescription': + return 'Lizenzen von Drittanbieter-Bibliotheken anzeigen'; + case 'serverSelection.connectingToServer': + return 'Verbinde mit Server...'; + case 'serverSelection.connectingToAllServers': + return 'Verbinde mit allen Servern...'; + case 'serverSelection.connectToAllServers': + return 'Mit allen Servern verbinden'; + case 'serverSelection.allServerConnectionsFailed': + return 'Verbindung zu allen Servern fehlgeschlagen. Bitte Netzwerk prüfen und erneut versuchen.'; + case 'serverSelection.foundServers': + return ({required Object count}) => '${count} Server gefunden'; + case 'serverSelection.orSelectIndividually': + return 'Oder einzelnen Server auswählen:'; + case 'serverSelection.serverDebugCopied': + return 'Server-Debugdaten kopiert'; + case 'serverSelection.copyDebugData': + return 'Debugdaten kopieren'; + case 'serverSelection.noServersFound': + return 'Keine Server gefunden'; + case 'serverSelection.malformedServerData': + return ({required Object count}) => + '${count} Server mit fehlerhaften Daten gefunden. Keine gültigen Server verfügbar.'; + case 'serverSelection.incompleteServerInfo': + return 'Einige Serverinformationen sind unvollständig und wurden übersprungen. Plex.tv-Konto prüfen.'; + case 'serverSelection.incompleteConnectionInfo': + return 'Serververbindungsinformationen unvollständig. Bitte erneut versuchen.'; + case 'serverSelection.malformedServerInfo': + return ({required Object message}) => + 'Serverinformationen fehlerhaft: ${message}'; + case 'serverSelection.networkConnectionFailed': + return 'Netzwerkverbindung fehlgeschlagen. Internetverbindung prüfen und erneut versuchen.'; + case 'serverSelection.authenticationFailed': + return 'Authentifizierung fehlgeschlagen. Bitte erneut anmelden.'; + case 'serverSelection.plexServiceUnavailable': + return 'Plex-Dienst nicht verfügbar. Bitte später erneut versuchen.'; + case 'serverSelection.failedToLoadServers': + return ({required Object error}) => + 'Server konnten nicht geladen werden: ${error}'; + case 'hubDetail.title': + return 'Titel'; + case 'hubDetail.releaseYear': + return 'Erscheinungsjahr'; + case 'hubDetail.dateAdded': + return 'Hinzugefügt am'; + case 'hubDetail.rating': + return 'Bewertung'; + case 'hubDetail.noItemsFound': + return 'Keine Elemente gefunden'; + case 'logs.title': + return 'Protokolle'; + case 'logs.clearLogs': + return 'Protokolle löschen'; + case 'logs.copyLogs': + return 'Protokolle kopieren'; + case 'logs.exportLogs': + return 'Protokolle exportieren'; + case 'logs.noLogsToShow': + return 'Keine Protokolle zum Anzeigen'; + case 'logs.error': + return 'Fehler:'; + case 'logs.stackTrace': + return 'Stacktrace:'; + case 'licenses.relatedPackages': + return 'Verwandte Pakete'; + case 'licenses.license': + return 'Lizenz'; + case 'licenses.licenseNumber': + return ({required Object number}) => 'Lizenz ${number}'; + case 'licenses.licensesCount': + return ({required Object count}) => '${count} Lizenzen'; + case 'navigation.home': + return 'Start'; + case 'navigation.search': + return 'Suche'; + case 'navigation.libraries': + return 'Mediatheken'; + case 'navigation.settings': + return 'Einstellungen'; + case 'playlists.title': + return 'Wiedergabelisten'; + case 'playlists.noPlaylists': + return 'Keine Wiedergabelisten gefunden'; + case 'playlists.create': + return 'Wiedergabeliste erstellen'; + case 'playlists.newPlaylist': + return 'Neue Wiedergabeliste'; + case 'playlists.playlistName': + return 'Name der Wiedergabeliste'; + case 'playlists.enterPlaylistName': + return 'Name der Wiedergabeliste eingeben'; + case 'playlists.edit': + return 'Wiedergabeliste bearbeiten'; + case 'playlists.delete': + return 'Wiedergabeliste löschen'; + case 'playlists.addTo': + return 'Zur Wiedergabeliste hinzufügen'; + case 'playlists.addItems': + return 'Elemente hinzufügen'; + case 'playlists.removeItem': + return 'Aus Wiedergabeliste entfernen'; + case 'playlists.clearPlaylist': + return 'Wiedergabeliste leeren'; + case 'playlists.playAll': + return 'Alle abspielen'; + case 'playlists.shuffle': + return 'Zufällig'; + case 'playlists.smartPlaylist': + return 'Intelligente Wiedergabeliste'; + case 'playlists.regularPlaylist': + return 'Normale Wiedergabeliste'; + case 'playlists.itemCount': + return ({required Object count}) => '${count} Elemente'; + case 'playlists.oneItem': + return '1 Element'; + case 'playlists.emptyPlaylist': + return 'Diese Wiedergabeliste ist leer'; + case 'playlists.deleteConfirm': + return 'Wiedergabeliste löschen?'; + case 'playlists.deleteMessage': + return ({required Object name}) => + 'Soll "${name}" wirklich gelöscht werden?'; + case 'playlists.created': + return 'Wiedergabeliste erstellt'; + case 'playlists.updated': + return 'Wiedergabeliste aktualisiert'; + case 'playlists.deleted': + return 'Wiedergabeliste gelöscht'; + case 'playlists.itemAdded': + return 'Zur Wiedergabeliste hinzugefügt'; + case 'playlists.itemRemoved': + return 'Aus Wiedergabeliste entfernt'; + case 'playlists.selectPlaylist': + return 'Wiedergabeliste auswählen'; + case 'playlists.createNewPlaylist': + return 'Neue Wiedergabeliste erstellen'; + case 'playlists.errorCreating': + return 'Wiedergabeliste konnte nicht erstellt werden'; + case 'playlists.errorDeleting': + return 'Wiedergabeliste konnte nicht gelöscht werden'; + case 'playlists.errorLoading': + return 'Wiedergabelisten konnten nicht geladen werden'; + case 'playlists.errorAdding': + return 'Konnte nicht zur Wiedergabeliste hinzugefügt werden'; + case 'playlists.errorReordering': + return 'Element der Wiedergabeliste konnte nicht neu geordnet werden'; + case 'playlists.errorRemoving': + return 'Konnte nicht aus der Wiedergabeliste entfernt werden'; + case 'playlists.playlist': + return 'Wiedergabeliste'; + case 'collections.title': + return 'Sammlungen'; + case 'collections.collection': + return 'Sammlung'; + case 'collections.empty': + return 'Sammlung ist leer'; + case 'collections.noItems': + return 'Keine Elemente in dieser Sammlung'; + case 'collections.unknownLibrarySection': + return 'Löschen nicht möglich: Unbekannte Bibliothekssektion'; + case 'collections.deleteCollection': + return 'Sammlung löschen'; + case 'collections.deleteConfirm': + return ({required Object title}) => + 'Sind Sie sicher, dass Sie "${title}" löschen möchten? Dies kann nicht rückgängig gemacht werden.'; + case 'collections.deleted': + return 'Sammlung gelöscht'; + case 'collections.deleteFailed': + return 'Sammlung konnte nicht gelöscht werden'; + case 'collections.deleteFailedWithError': + return ({required Object error}) => + 'Sammlung konnte nicht gelöscht werden: ${error}'; + case 'collections.failedToLoadItems': + return ({required Object error}) => + 'Sammlungselemente konnten nicht geladen werden: ${error}'; + case 'collections.addTo': + return 'Zur Sammlung hinzufügen'; + case 'collections.selectCollection': + return 'Sammlung auswählen'; + case 'collections.createNewCollection': + return 'Neue Sammlung erstellen'; + case 'collections.collectionName': + return 'Sammlungsname'; + case 'collections.enterCollectionName': + return 'Sammlungsnamen eingeben'; + case 'collections.addedToCollection': + return 'Zur Sammlung hinzugefügt'; + case 'collections.errorAddingToCollection': + return 'Fehler beim Hinzufügen zur Sammlung'; + case 'collections.created': + return 'Sammlung erstellt'; + case 'collections.removeFromCollection': + return 'Aus Sammlung entfernen'; + case 'collections.removeFromCollectionConfirm': + return ({required Object title}) => + '"${title}" aus dieser Sammlung entfernen?'; + case 'collections.removedFromCollection': + return 'Aus Sammlung entfernt'; + case 'collections.removeFromCollectionFailed': + return 'Entfernen aus Sammlung fehlgeschlagen'; + case 'collections.removeFromCollectionError': + return ({required Object error}) => + 'Fehler beim Entfernen aus der Sammlung: ${error}'; + default: + return null; + } + } } extension on _StringsIt { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': return 'Plezy'; - case 'app.loading': return 'Caricamento...'; - case 'auth.signInWithPlex': return 'Accedi con Plex'; - case 'auth.showQRCode': return 'Mostra QR Code'; - case 'auth.cancel': return 'Cancella'; - case 'auth.authenticate': return 'Autenticazione'; - case 'auth.retry': return 'Riprova'; - case 'auth.debugEnterToken': return 'Debug: Inserisci Token Plex'; - case 'auth.plexTokenLabel': return 'Token Auth Plex'; - case 'auth.plexTokenHint': return 'Inserisci il tuo token di Plex.tv'; - case 'auth.authenticationTimeout': return 'Autenticazione scaduta. Riprova.'; - case 'auth.scanQRCodeInstruction': return 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.'; - case 'auth.waitingForAuth': return 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.'; - case 'common.cancel': return 'Cancella'; - case 'common.save': return 'Salva'; - case 'common.close': return 'Chiudi'; - case 'common.clear': return 'Pulisci'; - case 'common.reset': return 'Ripristina'; - case 'common.later': return 'Più tardi'; - case 'common.submit': return 'Invia'; - case 'common.confirm': return 'Conferma'; - case 'common.retry': return 'Riprova'; - case 'common.playNow': return 'Riproduci ora'; - case 'common.logout': return 'Disconnetti'; - case 'common.online': return 'Online'; - case 'common.offline': return 'Offline'; - case 'common.owned': return 'Di proprietà'; - case 'common.shared': return 'Condiviso'; - case 'common.current': return 'CORRENTE'; - case 'common.unknown': return 'Sconosciuto'; - case 'common.refresh': return 'Aggiorna'; - case 'common.yes': return 'Sì'; - case 'common.no': return 'No'; - case 'common.server': return 'Server'; - case 'common.delete': return 'Elimina'; - case 'common.shuffle': return 'Casuale'; - case 'common.addTo': return 'Aggiungi a...'; - case 'screens.licenses': return 'Licenze'; - case 'screens.selectServer': return 'Seleziona server'; - case 'screens.switchProfile': return 'Cambia profilo'; - case 'screens.subtitleStyling': return 'Stile sottotitoli'; - case 'screens.search': return 'Cerca'; - case 'screens.logs': return 'Registro'; - case 'update.available': return 'Aggiornamento disponibile'; - case 'update.versionAvailable': return ({required Object version}) => 'Versione ${version} disponibile'; - case 'update.currentVersion': return ({required Object version}) => 'Corrente: ${version}'; - case 'update.skipVersion': return 'Salta questa versione'; - case 'update.viewRelease': return 'Visualizza dettagli release'; - case 'update.latestVersion': return 'La versione installata è l\'ultima disponibile'; - case 'update.checkFailed': return 'Impossibile controllare gli aggiornamenti'; - case 'settings.title': return 'Impostazioni'; - case 'settings.language': return 'Lingua'; - case 'settings.theme': return 'Tema'; - case 'settings.appearance': return 'Aspetto'; - case 'settings.videoPlayback': return 'Riproduzione video'; - case 'settings.shufflePlay': return 'Riproduzione casuale'; - case 'settings.advanced': return 'Avanzate'; - case 'settings.useSeasonPostersDescription': return 'Mostra il poster della stagione invece del poster della serie per gli episodi'; - case 'settings.showHeroSectionDescription': return 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; - case 'settings.secondsLabel': return 'Secondi'; - case 'settings.minutesLabel': return 'Minuti'; - case 'settings.secondsShort': return 's'; - case 'settings.minutesShort': return 'm'; - case 'settings.durationHint': return ({required Object min, required Object max}) => 'Inserisci durata (${min}-${max})'; - case 'settings.systemTheme': return 'Sistema'; - case 'settings.systemThemeDescription': return 'Segui le impostazioni di sistema'; - case 'settings.lightTheme': return 'Chiaro'; - case 'settings.darkTheme': return 'Scuro'; - case 'settings.libraryDensity': return 'Densità libreria'; - case 'settings.compact': return 'Compatta'; - case 'settings.compactDescription': return 'Schede più piccole, più elementi visibili'; - case 'settings.normal': return 'Normale'; - case 'settings.normalDescription': return 'Dimensione predefinita'; - case 'settings.comfortable': return 'Comoda'; - case 'settings.comfortableDescription': return 'Schede più grandi, meno elementi visibili'; - case 'settings.viewMode': return 'Modalità di visualizzazione'; - case 'settings.gridView': return 'Griglia'; - case 'settings.gridViewDescription': return 'Visualizza gli elementi in un layout a griglia'; - case 'settings.listView': return 'Elenco'; - case 'settings.listViewDescription': return 'Visualizza gli elementi in un layout a elenco'; - case 'settings.useSeasonPosters': return 'Usa poster delle stagioni'; - case 'settings.showHeroSection': return 'Mostra sezione principale'; - case 'settings.hardwareDecoding': return 'Decodifica Hardware'; - case 'settings.hardwareDecodingDescription': return 'Utilizza l\'accelerazione hardware quando disponibile'; - case 'settings.bufferSize': return 'Dimensione buffer'; - case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': return 'Stile sottotitoli'; - case 'settings.subtitleStylingDescription': return 'Personalizza l\'aspetto dei sottotitoli'; - case 'settings.smallSkipDuration': return 'Durata skip breve'; - case 'settings.largeSkipDuration': return 'Durata skip lungo'; - case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} secondi'; - case 'settings.defaultSleepTimer': return 'Timer spegnimento predefinito'; - case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} minuti'; - case 'settings.rememberTrackSelections': return 'Ricorda selezioni tracce per serie/film'; - case 'settings.rememberTrackSelectionsDescription': return 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; - case 'settings.unwatchedOnly': return 'Solo non guardati'; - case 'settings.unwatchedOnlyDescription': return 'Includi solo gli episodi non guardati nella coda di riproduzione casuale'; - case 'settings.shuffleOrderNavigation': return 'Navigazione in ordine casuale'; - case 'settings.shuffleOrderNavigationDescription': return 'I pulsanti Avanti/Indietro seguono l\'ordine casuale'; - case 'settings.loopShuffleQueue': return 'Coda di riproduzione casuale in loop'; - case 'settings.loopShuffleQueueDescription': return 'Riavvia la coda quando raggiungi la fine'; - case 'settings.videoPlayerControls': return 'Controlli del lettore video'; - case 'settings.keyboardShortcuts': return 'Scorciatoie da tastiera'; - case 'settings.keyboardShortcutsDescription': return 'Personalizza le scorciatoie da tastiera'; - case 'settings.debugLogging': return 'Log di debug'; - case 'settings.debugLoggingDescription': return 'Abilita il logging dettagliato per la risoluzione dei problemi'; - case 'settings.viewLogs': return 'Visualizza log'; - case 'settings.viewLogsDescription': return 'Visualizza i log dell\'applicazione'; - case 'settings.clearCache': return 'Svuota cache'; - case 'settings.clearCacheDescription': return 'Questa opzione cancellerà tutte le immagini e i dati memorizzati nella cache. Dopo aver cancellato la cache, l\'app potrebbe impiegare più tempo per caricare i contenuti.'; - case 'settings.clearCacheSuccess': return 'Cache cancellata correttamente'; - case 'settings.resetSettings': return 'Ripristina impostazioni'; - case 'settings.resetSettingsDescription': return 'Questa opzione ripristinerà tutte le impostazioni ai valori predefiniti. Non può essere annullata.'; - case 'settings.resetSettingsSuccess': return 'Impostazioni ripristinate correttamente'; - case 'settings.shortcutsReset': return 'Scorciatoie ripristinate alle impostazioni predefinite'; - case 'settings.about': return 'Informazioni'; - case 'settings.aboutDescription': return 'Informazioni sull\'app e le licenze'; - case 'settings.updates': return 'Aggiornamenti'; - case 'settings.updateAvailable': return 'Aggiornamento disponibile'; - case 'settings.checkForUpdates': return 'Controlla aggiornamenti'; - case 'settings.validationErrorEnterNumber': return 'Inserisci un numero valido'; - case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => 'la durata deve essere compresa tra ${min} e ${max} ${unit}'; - case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => 'Scorciatoia già assegnata a ${action}'; - case 'settings.shortcutUpdated': return ({required Object action}) => 'Scorciatoia aggiornata per ${action}'; - case 'settings.autoSkip': return 'Salto Automatico'; - case 'settings.autoSkipIntro': return 'Salta Intro Automaticamente'; - case 'settings.autoSkipIntroDescription': return 'Salta automaticamente i marcatori dell\'intro dopo alcuni secondi'; - case 'settings.autoSkipCredits': return 'Salta Crediti Automaticamente'; - case 'settings.autoSkipCreditsDescription': return 'Salta automaticamente i crediti e riproduci l\'episodio successivo'; - case 'settings.autoSkipDelay': return 'Ritardo Salto Automatico'; - case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => 'Aspetta ${seconds} secondi prima del salto automatico'; - case 'search.hint': return 'Cerca film. spettacoli, musica...'; - case 'search.tryDifferentTerm': return 'Prova altri termini di ricerca'; - case 'search.searchYourMedia': return 'Cerca nei tuoi media'; - case 'search.enterTitleActorOrKeyword': return 'Inserisci un titolo, attore o parola chiave'; - case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Imposta scorciatoia per ${actionName}'; - case 'hotkeys.clearShortcut': return 'Elimina scorciatoia'; - case 'pinEntry.enterPin': return 'Inserisci PIN'; - case 'pinEntry.showPin': return 'Mostra PIN'; - case 'pinEntry.hidePin': return 'Nascondi PIN'; - case 'fileInfo.title': return 'Info sul file'; - case 'fileInfo.video': return 'Video'; - case 'fileInfo.audio': return 'Audio'; - case 'fileInfo.file': return 'File'; - case 'fileInfo.advanced': return 'Avanzate'; - case 'fileInfo.codec': return 'Codec'; - case 'fileInfo.resolution': return 'Risoluzione'; - case 'fileInfo.bitrate': return 'Bitrate'; - case 'fileInfo.frameRate': return 'Frame Rate'; - case 'fileInfo.aspectRatio': return 'Aspect Ratio'; - case 'fileInfo.profile': return 'Profilo'; - case 'fileInfo.bitDepth': return 'Profondità colore'; - case 'fileInfo.colorSpace': return 'Spazio colore'; - case 'fileInfo.colorRange': return 'Gamma colori'; - case 'fileInfo.colorPrimaries': return 'Colori primari'; - case 'fileInfo.chromaSubsampling': return 'Sottocampionamento cromatico'; - case 'fileInfo.channels': return 'Canali'; - case 'fileInfo.path': return 'Percorso'; - case 'fileInfo.size': return 'Dimensione'; - case 'fileInfo.container': return 'Contenitore'; - case 'fileInfo.duration': return 'Durata'; - case 'fileInfo.optimizedForStreaming': return 'Ottimizzato per lo streaming'; - case 'fileInfo.has64bitOffsets': return 'Offset a 64-bit'; - case 'mediaMenu.markAsWatched': return 'Segna come visto'; - case 'mediaMenu.markAsUnwatched': return 'Segna come non visto'; - case 'mediaMenu.removeFromContinueWatching': return 'Rimuovi da Continua a guardare'; - case 'mediaMenu.goToSeries': return 'Vai alle serie'; - case 'mediaMenu.goToSeason': return 'Vai alla stagione'; - case 'mediaMenu.shufflePlay': return 'Riproduzione casuale'; - case 'mediaMenu.fileInfo': return 'Info sul file'; - case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, film'; - case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, serie TV'; - case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': return 'visto'; - case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} percento visto'; - case 'accessibility.mediaCardUnwatched': return 'non visto'; - case 'accessibility.tapToPlay': return 'Tocca per riprodurre'; - case 'tooltips.shufflePlay': return 'Riproduzione casuale'; - case 'tooltips.markAsWatched': return 'Segna come visto'; - case 'tooltips.markAsUnwatched': return 'Segna come non visto'; - case 'videoControls.audioLabel': return 'Audio'; - case 'videoControls.subtitlesLabel': return 'Sottotitoli'; - case 'videoControls.resetToZero': return 'Riporta a 0ms'; - case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': return ({required Object label}) => '${label} riprodotto dopo'; - case 'videoControls.playsEarlier': return ({required Object label}) => '${label} riprodotto prima'; - case 'videoControls.noOffset': return 'Nessun offset'; - case 'videoControls.letterbox': return 'Letterbox'; - case 'videoControls.fillScreen': return 'Riempi schermo'; - case 'videoControls.stretch': return 'Allunga'; - case 'videoControls.lockRotation': return 'Blocca rotazione'; - case 'videoControls.unlockRotation': return 'Sblocca rotazione'; - case 'videoControls.sleepTimer': return 'Timer di spegnimento'; - case 'videoControls.timerActive': return 'Timer attivo'; - case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'La riproduzione si interromperà tra ${duration}'; - case 'videoControls.sleepTimerCompleted': return 'Timer di spegnimento completato - riproduzione in pausa'; - case 'videoControls.playButton': return 'Riproduci'; - case 'videoControls.pauseButton': return 'Pausa'; - case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Riavvolgi di ${seconds} secondi'; - case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Avanza di ${seconds} secondi'; - case 'videoControls.previousButton': return 'Episodio precedente'; - case 'videoControls.nextButton': return 'Episodio successivo'; - case 'videoControls.previousChapterButton': return 'Capitolo precedente'; - case 'videoControls.nextChapterButton': return 'Capitolo successivo'; - case 'videoControls.volumeButton': return 'Volume'; - case 'videoControls.muteButton': return 'Silenzia'; - case 'videoControls.unmuteButton': return 'Riattiva audio'; - case 'videoControls.settingsButton': return 'Impostazioni video'; - case 'videoControls.audioTrackButton': return 'Tracce audio'; - case 'videoControls.subtitlesButton': return 'Sottotitoli'; - case 'videoControls.chaptersButton': return 'Capitoli'; - case 'videoControls.versionsButton': return 'Versioni video'; - case 'videoControls.aspectRatioButton': return 'Proporzioni'; - case 'videoControls.fullscreenButton': return 'Attiva schermo intero'; - case 'videoControls.exitFullscreenButton': return 'Esci da schermo intero'; - case 'videoControls.rotationLockButton': return 'Blocco rotazione'; - case 'videoControls.timelineSlider': return 'Timeline video'; - case 'videoControls.volumeSlider': return 'Livello volume'; - case 'videoControls.backButton': return 'Indietro'; - case 'userStatus.admin': return 'Admin'; - case 'userStatus.restricted': return 'Limitato'; - case 'userStatus.protected': return 'Protetto'; - case 'userStatus.current': return 'ATTUALE'; - case 'messages.markedAsWatched': return 'Segna come visto'; - case 'messages.markedAsUnwatched': return 'Segna come non visto'; - case 'messages.removedFromContinueWatching': return 'Rimosso da Continua a guardare'; - case 'messages.errorLoading': return ({required Object error}) => 'Errore: ${error}'; - case 'messages.fileInfoNotAvailable': return 'Informazioni sul file non disponibili'; - case 'messages.errorLoadingFileInfo': return ({required Object error}) => 'Errore caricamento informazioni sul file: ${error}'; - case 'messages.errorLoadingSeries': return 'Errore caricamento serie'; - case 'messages.errorLoadingSeason': return 'Errore caricamento stagione'; - case 'messages.musicNotSupported': return 'La riproduzione musicale non è ancora supportata'; - case 'messages.logsCleared': return 'Log eliminati'; - case 'messages.logsCopied': return 'Log copiati negli appunti'; - case 'messages.noLogsAvailable': return 'Nessun log disponibile'; - case 'messages.libraryScanning': return ({required Object title}) => 'Scansione "${title}"...'; - case 'messages.libraryScanStarted': return ({required Object title}) => 'Scansione libreria iniziata per "${title}"'; - case 'messages.libraryScanFailed': return ({required Object error}) => 'Impossibile eseguire scansione della libreria: ${error}'; - case 'messages.metadataRefreshing': return ({required Object title}) => 'Aggiornamento metadati per "${title}"...'; - case 'messages.metadataRefreshStarted': return ({required Object title}) => 'Aggiornamento metadati per "${title}"'; - case 'messages.metadataRefreshFailed': return ({required Object error}) => 'Errore aggiornamento metadati: ${error}'; - case 'messages.noPlexToken': return 'Nessun token Plex trovato. Riesegui l\'accesso.'; - case 'messages.logoutConfirm': return 'Sei sicuro di volerti disconnettere?'; - case 'messages.noSeasonsFound': return 'Nessuna stagione trovata'; - case 'messages.noEpisodesFound': return 'Nessun episodio trovato nella prima stagione'; - case 'messages.noEpisodesFoundGeneral': return 'Nessun episodio trovato'; - case 'messages.noResultsFound': return 'Nessun risultato'; - case 'messages.sleepTimerSet': return ({required Object label}) => 'Imposta timer spegnimento per ${label}'; - case 'messages.failedToSwitchProfile': return ({required Object displayName}) => 'Impossibile passare a ${displayName}'; - case 'messages.noItemsAvailable': return 'Nessun elemento disponibile'; - case 'messages.failedToCreatePlayQueue': return 'Impossibile creare la coda di riproduzione'; - case 'messages.failedToCreatePlayQueueNoItems': return 'Impossibile creare la coda di riproduzione - nessun elemento'; - case 'messages.failedPlayback': return ({required Object action, required Object error}) => 'Impossibile ${action}: ${error}'; - case 'profile.noUsersAvailable': return 'Nessun utente disponibile'; - case 'subtitlingStyling.stylingOptions': return 'Opzioni stile'; - case 'subtitlingStyling.fontSize': return 'Dimensione'; - case 'subtitlingStyling.textColor': return 'Colore testo'; - case 'subtitlingStyling.borderSize': return 'Dimensione bordo'; - case 'subtitlingStyling.borderColor': return 'Colore bordo'; - case 'subtitlingStyling.backgroundOpacity': return 'Opacità sfondo'; - case 'subtitlingStyling.backgroundColor': return 'Colore sfondo'; - case 'dialog.confirmAction': return 'Conferma azione'; - case 'dialog.areYouSure': return 'Sei sicuro di voler eseguire questa azione?'; - case 'dialog.cancel': return 'Cancella'; - case 'dialog.playNow': return 'Riproduci ora'; - case 'discover.title': return 'Esplora'; - case 'discover.switchProfile': return 'Cambia profilo'; - case 'discover.switchServer': return 'Cambia server'; - case 'discover.logout': return 'Disconnetti'; - case 'discover.noContentAvailable': return 'Nessun contenuto disponibile'; - case 'discover.addMediaToLibraries': return 'Aggiungi alcuni file multimediali alle tue librerie'; - case 'discover.continueWatching': return 'Continua a guardare'; - case 'discover.recentlyAdded': return 'Aggiunti di recente'; - case 'discover.play': return 'Riproduci'; - case 'discover.resume': return 'Riprendi'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'Riproduci S${season}, E${episode}'; - case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => 'Riprendi S${season}, E${episode}'; - case 'discover.pause': return 'Pausa'; - case 'discover.overview': return 'Panoramica'; - case 'discover.cast': return 'Attori'; - case 'discover.seasons': return 'Stagioni'; - case 'discover.studio': return 'Studio'; - case 'discover.rating': return 'Classificazione'; - case 'discover.watched': return 'Guardato'; - case 'discover.episodeCount': return ({required Object count}) => '${count} episodi'; - case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '${watched}/${total} guardati'; - case 'discover.movie': return 'Film'; - case 'discover.tvShow': return 'Serie TV'; - case 'discover.minutesLeft': return ({required Object minutes}) => '${minutes} minuti rimanenti'; - case 'errors.searchFailed': return ({required Object error}) => 'Ricerca fallita: ${error}'; - case 'errors.connectionTimeout': return ({required Object context}) => 'Timeout connessione durante caricamento di ${context}'; - case 'errors.connectionFailed': return 'Impossibile connettersi al server Plex.'; - case 'errors.failedToLoad': return ({required Object context, required Object error}) => 'Impossibile caricare ${context}: ${error}'; - case 'errors.noClientAvailable': return 'Nessun client disponibile'; - case 'errors.authenticationFailed': return ({required Object error}) => 'Autenticazione fallita: ${error}'; - case 'errors.couldNotLaunchUrl': return 'Impossibile avviare URL di autenticazione'; - case 'errors.pleaseEnterToken': return 'Inserisci token'; - case 'errors.invalidToken': return 'Token non valido'; - case 'errors.failedToVerifyToken': return ({required Object error}) => 'Verifica token fallita: ${error}'; - case 'errors.failedToSwitchProfile': return ({required Object displayName}) => 'Impossibile passare a ${displayName}'; - case 'errors.connectionFailedGeneric': return 'Connessione fallita'; - case 'libraries.title': return 'Librerie'; - case 'libraries.scanLibraryFiles': return 'Scansiona file libreria'; - case 'libraries.scanLibrary': return 'Scansiona libreria'; - case 'libraries.analyze': return 'Analizza'; - case 'libraries.analyzeLibrary': return 'Analizza libreria'; - case 'libraries.refreshMetadata': return 'Aggiorna metadati'; - case 'libraries.emptyTrash': return 'Svuota cestino'; - case 'libraries.emptyingTrash': return ({required Object title}) => 'Svuotamento cestino per "${title}"...'; - case 'libraries.trashEmptied': return ({required Object title}) => 'Cestino svuotato per "${title}"'; - case 'libraries.failedToEmptyTrash': return ({required Object error}) => 'Impossibile svuotare cestino: ${error}'; - case 'libraries.analyzing': return ({required Object title}) => 'Analisi "${title}"...'; - case 'libraries.analysisStarted': return ({required Object title}) => 'Analisi iniziata per "${title}"'; - case 'libraries.failedToAnalyze': return ({required Object error}) => 'Impossibile analizzare libreria: ${error}'; - case 'libraries.noLibrariesFound': return 'Nessuna libreria trovata'; - case 'libraries.thisLibraryIsEmpty': return 'Questa libreria è vuota'; - case 'libraries.all': return 'Tutto'; - case 'libraries.clearAll': return 'Cancella tutto'; - case 'libraries.scanLibraryConfirm': return ({required Object title}) => 'Sei sicuro di voler scansionare "${title}"?'; - case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => 'Sei sicuro di voler analizzare "${title}"?'; - case 'libraries.refreshMetadataConfirm': return ({required Object title}) => 'Sei sicuro di voler aggiornare i metadati per "${title}"?'; - case 'libraries.emptyTrashConfirm': return ({required Object title}) => 'Sei sicuro di voler svuotare il cestino per "${title}"?'; - case 'libraries.manageLibraries': return 'Gestisci librerie'; - case 'libraries.sort': return 'Ordina'; - case 'libraries.sortBy': return 'Ordina per'; - case 'libraries.filters': return 'Filtri'; - case 'libraries.loadingLibraryWithCount': return ({required Object count}) => 'Caricamento librerie... (${count} oggetti caricati)'; - case 'libraries.confirmActionMessage': return 'Sei sicuro di voler eseguire questa azione?'; - case 'libraries.showLibrary': return 'Mostra libreria'; - case 'libraries.hideLibrary': return 'Nascondi libreria'; - case 'libraries.libraryOptions': return 'Opzioni libreria'; - case 'libraries.content': return 'contenuto della libreria'; - case 'libraries.selectLibrary': return 'Seleziona libreria'; - case 'libraries.filtersWithCount': return ({required Object count}) => 'Filtri (${count})'; - case 'libraries.noRecommendations': return 'Nessun consiglio disponibile'; - case 'libraries.noCollections': return 'Nessuna raccolta in questa libreria'; - case 'libraries.noFoldersFound': return 'Nessuna cartella trovata'; - case 'libraries.folders': return 'cartelle'; - case 'libraries.tabs.recommended': return 'Consigliati'; - case 'libraries.tabs.browse': return 'Esplora'; - case 'libraries.tabs.collections': return 'Raccolte'; - case 'libraries.tabs.playlists': return 'Playlist'; - case 'libraries.groupings.all': return 'Tutti'; - case 'libraries.groupings.movies': return 'Film'; - case 'libraries.groupings.shows': return 'Serie TV'; - case 'libraries.groupings.seasons': return 'Stagioni'; - case 'libraries.groupings.episodes': return 'Episodi'; - case 'libraries.groupings.folders': return 'Cartelle'; - case 'about.title': return 'Informazioni'; - case 'about.openSourceLicenses': return 'Licenze Open Source'; - case 'about.versionLabel': return ({required Object version}) => 'Versione ${version}'; - case 'about.appDescription': return 'Un bellissimo client Plex per Flutter'; - case 'about.viewLicensesDescription': return 'Visualizza le licenze delle librerie di terze parti'; - case 'serverSelection.connectingToServer': return 'Connessione al server...'; - case 'serverSelection.connectingToAllServers': return 'Connessione a tutti i server...'; - case 'serverSelection.connectToAllServers': return 'Connetti a tutti i server'; - case 'serverSelection.allServerConnectionsFailed': return 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.'; - case 'serverSelection.foundServers': return ({required Object count}) => 'Trovati ${count} server'; - case 'serverSelection.orSelectIndividually': return 'Oppure seleziona un server singolarmente:'; - case 'serverSelection.serverDebugCopied': return 'Dati di debug del server copiati negli appunti'; - case 'serverSelection.copyDebugData': return 'Copia dati di debug'; - case 'serverSelection.noServersFound': return 'Nessun server trovato'; - case 'serverSelection.malformedServerData': return ({required Object count}) => 'Trovato ${count} server con dati difettosi. Nessun server valido disponibile.'; - case 'serverSelection.incompleteServerInfo': return 'Alcuni server presentano informazioni incomplete e sono stati ignorati. Controlla il tuo account Plex.tv.'; - case 'serverSelection.incompleteConnectionInfo': return 'Le informazioni di connessione al server sono incomplete. Riprova.'; - case 'serverSelection.malformedServerInfo': return ({required Object message}) => 'Le informazioni sul server sono errate: ${message}'; - case 'serverSelection.networkConnectionFailed': return 'Connessione di rete non riuscita. Controlla la tua connessione Internet e riprova.'; - case 'serverSelection.authenticationFailed': return 'Autenticazione fallita. Effettua nuovamente l\'accesso.'; - case 'serverSelection.plexServiceUnavailable': return 'Servizio Plex non disponibile. Riprova più tardi.'; - case 'serverSelection.failedToLoadServers': return ({required Object error}) => 'Impossibile caricare i server: ${error}'; - case 'hubDetail.title': return 'Titolo'; - case 'hubDetail.releaseYear': return 'Anno rilascio'; - case 'hubDetail.dateAdded': return 'Data aggiunta'; - case 'hubDetail.rating': return 'Valutazione'; - case 'hubDetail.noItemsFound': return 'Nessun elemento trovato'; - case 'logs.title': return 'Registro'; - case 'logs.clearLogs': return 'Cancella log'; - case 'logs.copyLogs': return 'Copia log'; - case 'logs.exportLogs': return 'Esporta log'; - case 'logs.noLogsToShow': return 'Nessun log da mostrare'; - case 'logs.error': return 'Errore:'; - case 'logs.stackTrace': return 'Traccia dello stack:'; - case 'licenses.relatedPackages': return 'Pacchetti correlati'; - case 'licenses.license': return 'Licenza'; - case 'licenses.licenseNumber': return ({required Object number}) => 'Licenza ${number}'; - case 'licenses.licensesCount': return ({required Object count}) => '${count} licenze'; - case 'navigation.home': return 'Home'; - case 'navigation.search': return 'Cerca'; - case 'navigation.libraries': return 'Librerie'; - case 'navigation.settings': return 'Impostazioni'; - case 'playlists.title': return 'Playlist'; - case 'playlists.noPlaylists': return 'Nessuna playlist trovata'; - case 'playlists.create': return 'Crea playlist'; - case 'playlists.newPlaylist': return 'Nuova playlist'; - case 'playlists.playlistName': return 'Nome playlist'; - case 'playlists.enterPlaylistName': return 'Inserisci nome playlist'; - case 'playlists.edit': return 'Modifica playlist'; - case 'playlists.delete': return 'Elimina playlist'; - case 'playlists.addTo': return 'Aggiungi a playlist'; - case 'playlists.addItems': return 'Aggiungi elementi'; - case 'playlists.removeItem': return 'Rimuovi da playlist'; - case 'playlists.clearPlaylist': return 'Svuota playlist'; - case 'playlists.playAll': return 'Riproduci tutto'; - case 'playlists.shuffle': return 'Casuale'; - case 'playlists.smartPlaylist': return 'Playlist intelligente'; - case 'playlists.regularPlaylist': return 'Playlist normale'; - case 'playlists.itemCount': return ({required Object count}) => '${count} elementi'; - case 'playlists.oneItem': return '1 elemento'; - case 'playlists.emptyPlaylist': return 'Questa playlist è vuota'; - case 'playlists.deleteConfirm': return 'Eliminare playlist?'; - case 'playlists.deleteMessage': return ({required Object name}) => 'Sei sicuro di voler eliminare "${name}"?'; - case 'playlists.created': return 'Playlist creata'; - case 'playlists.updated': return 'Playlist aggiornata'; - case 'playlists.deleted': return 'Playlist eliminata'; - case 'playlists.itemAdded': return 'Aggiunto alla playlist'; - case 'playlists.itemRemoved': return 'Rimosso dalla playlist'; - case 'playlists.selectPlaylist': return 'Seleziona playlist'; - case 'playlists.createNewPlaylist': return 'Crea nuova playlist'; - case 'playlists.errorCreating': return 'Errore durante la creazione della playlist'; - case 'playlists.errorDeleting': return 'Errore durante l\'eliminazione della playlist'; - case 'playlists.errorLoading': return 'Errore durante il caricamento delle playlist'; - case 'playlists.errorAdding': return 'Errore durante l\'aggiunta alla playlist'; - case 'playlists.errorReordering': return 'Errore durante il riordino dell\'elemento della playlist'; - case 'playlists.errorRemoving': return 'Errore durante la rimozione dalla playlist'; - case 'playlists.playlist': return 'Playlist'; - case 'collections.title': return 'Raccolte'; - case 'collections.collection': return 'Raccolta'; - case 'collections.empty': return 'La raccolta è vuota'; - case 'collections.noItems': return 'Nessun elemento in questa raccolta'; - case 'collections.unknownLibrarySection': return 'Impossibile eliminare: sezione libreria sconosciuta'; - case 'collections.deleteCollection': return 'Elimina raccolta'; - case 'collections.deleteConfirm': return ({required Object title}) => 'Sei sicuro di voler eliminare "${title}"? Questa azione non può essere annullata.'; - case 'collections.deleted': return 'Raccolta eliminata'; - case 'collections.deleteFailed': return 'Impossibile eliminare la raccolta'; - case 'collections.deleteFailedWithError': return ({required Object error}) => 'Impossibile eliminare la raccolta: ${error}'; - case 'collections.failedToLoadItems': return ({required Object error}) => 'Impossibile caricare gli elementi della raccolta: ${error}'; - case 'collections.addTo': return 'Aggiungi alla raccolta'; - case 'collections.selectCollection': return 'Seleziona raccolta'; - case 'collections.createNewCollection': return 'Crea nuova raccolta'; - case 'collections.collectionName': return 'Nome raccolta'; - case 'collections.enterCollectionName': return 'Inserisci nome raccolta'; - case 'collections.addedToCollection': return 'Aggiunto alla raccolta'; - case 'collections.errorAddingToCollection': return 'Errore nell\'aggiunta alla raccolta'; - case 'collections.created': return 'Raccolta creata'; - case 'collections.removeFromCollection': return 'Rimuovi dalla raccolta'; - case 'collections.removeFromCollectionConfirm': return ({required Object title}) => 'Rimuovere "${title}" da questa raccolta?'; - case 'collections.removedFromCollection': return 'Rimosso dalla raccolta'; - case 'collections.removeFromCollectionFailed': return 'Impossibile rimuovere dalla raccolta'; - case 'collections.removeFromCollectionError': return ({required Object error}) => 'Errore durante la rimozione dalla raccolta: ${error}'; - default: return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': + return 'Plezy'; + case 'app.loading': + return 'Caricamento...'; + case 'auth.signInWithPlex': + return 'Accedi con Plex'; + case 'auth.showQRCode': + return 'Mostra QR Code'; + case 'auth.cancel': + return 'Cancella'; + case 'auth.authenticate': + return 'Autenticazione'; + case 'auth.retry': + return 'Riprova'; + case 'auth.debugEnterToken': + return 'Debug: Inserisci Token Plex'; + case 'auth.plexTokenLabel': + return 'Token Auth Plex'; + case 'auth.plexTokenHint': + return 'Inserisci il tuo token di Plex.tv'; + case 'auth.authenticationTimeout': + return 'Autenticazione scaduta. Riprova.'; + case 'auth.scanQRCodeInstruction': + return 'Scansiona questo QR code con un dispositivo connesso a Plex per autenticarti.'; + case 'auth.waitingForAuth': + return 'In attesa di autenticazione...\nCompleta l\'accesso dal tuo browser.'; + case 'common.cancel': + return 'Cancella'; + case 'common.save': + return 'Salva'; + case 'common.close': + return 'Chiudi'; + case 'common.clear': + return 'Pulisci'; + case 'common.reset': + return 'Ripristina'; + case 'common.later': + return 'Più tardi'; + case 'common.submit': + return 'Invia'; + case 'common.confirm': + return 'Conferma'; + case 'common.retry': + return 'Riprova'; + case 'common.playNow': + return 'Riproduci ora'; + case 'common.logout': + return 'Disconnetti'; + case 'common.online': + return 'Online'; + case 'common.offline': + return 'Offline'; + case 'common.owned': + return 'Di proprietà'; + case 'common.shared': + return 'Condiviso'; + case 'common.current': + return 'CORRENTE'; + case 'common.unknown': + return 'Sconosciuto'; + case 'common.refresh': + return 'Aggiorna'; + case 'common.yes': + return 'Sì'; + case 'common.no': + return 'No'; + case 'common.server': + return 'Server'; + case 'common.delete': + return 'Elimina'; + case 'common.shuffle': + return 'Casuale'; + case 'common.addTo': + return 'Aggiungi a...'; + case 'screens.licenses': + return 'Licenze'; + case 'screens.selectServer': + return 'Seleziona server'; + case 'screens.switchProfile': + return 'Cambia profilo'; + case 'screens.subtitleStyling': + return 'Stile sottotitoli'; + case 'screens.search': + return 'Cerca'; + case 'screens.logs': + return 'Registro'; + case 'update.available': + return 'Aggiornamento disponibile'; + case 'update.versionAvailable': + return ({required Object version}) => 'Versione ${version} disponibile'; + case 'update.currentVersion': + return ({required Object version}) => 'Corrente: ${version}'; + case 'update.skipVersion': + return 'Salta questa versione'; + case 'update.viewRelease': + return 'Visualizza dettagli release'; + case 'update.latestVersion': + return 'La versione installata è l\'ultima disponibile'; + case 'update.checkFailed': + return 'Impossibile controllare gli aggiornamenti'; + case 'settings.title': + return 'Impostazioni'; + case 'settings.language': + return 'Lingua'; + case 'settings.theme': + return 'Tema'; + case 'settings.appearance': + return 'Aspetto'; + case 'settings.videoPlayback': + return 'Riproduzione video'; + case 'settings.shufflePlay': + return 'Riproduzione casuale'; + case 'settings.advanced': + return 'Avanzate'; + case 'settings.useSeasonPostersDescription': + return 'Mostra il poster della stagione invece del poster della serie per gli episodi'; + case 'settings.showHeroSectionDescription': + return 'Visualizza il carosello dei contenuti in primo piano sulla schermata iniziale'; + case 'settings.secondsLabel': + return 'Secondi'; + case 'settings.minutesLabel': + return 'Minuti'; + case 'settings.secondsShort': + return 's'; + case 'settings.minutesShort': + return 'm'; + case 'settings.durationHint': + return ({required Object min, required Object max}) => + 'Inserisci durata (${min}-${max})'; + case 'settings.systemTheme': + return 'Sistema'; + case 'settings.systemThemeDescription': + return 'Segui le impostazioni di sistema'; + case 'settings.lightTheme': + return 'Chiaro'; + case 'settings.darkTheme': + return 'Scuro'; + case 'settings.libraryDensity': + return 'Densità libreria'; + case 'settings.compact': + return 'Compatta'; + case 'settings.compactDescription': + return 'Schede più piccole, più elementi visibili'; + case 'settings.normal': + return 'Normale'; + case 'settings.normalDescription': + return 'Dimensione predefinita'; + case 'settings.comfortable': + return 'Comoda'; + case 'settings.comfortableDescription': + return 'Schede più grandi, meno elementi visibili'; + case 'settings.viewMode': + return 'Modalità di visualizzazione'; + case 'settings.gridView': + return 'Griglia'; + case 'settings.gridViewDescription': + return 'Visualizza gli elementi in un layout a griglia'; + case 'settings.listView': + return 'Elenco'; + case 'settings.listViewDescription': + return 'Visualizza gli elementi in un layout a elenco'; + case 'settings.useSeasonPosters': + return 'Usa poster delle stagioni'; + case 'settings.showHeroSection': + return 'Mostra sezione principale'; + case 'settings.hardwareDecoding': + return 'Decodifica Hardware'; + case 'settings.hardwareDecodingDescription': + return 'Utilizza l\'accelerazione hardware quando disponibile'; + case 'settings.bufferSize': + return 'Dimensione buffer'; + case 'settings.bufferSizeMB': + return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': + return 'Stile sottotitoli'; + case 'settings.subtitleStylingDescription': + return 'Personalizza l\'aspetto dei sottotitoli'; + case 'settings.smallSkipDuration': + return 'Durata skip breve'; + case 'settings.largeSkipDuration': + return 'Durata skip lungo'; + case 'settings.secondsUnit': + return ({required Object seconds}) => '${seconds} secondi'; + case 'settings.defaultSleepTimer': + return 'Timer spegnimento predefinito'; + case 'settings.minutesUnit': + return ({required Object minutes}) => '${minutes} minuti'; + case 'settings.rememberTrackSelections': + return 'Ricorda selezioni tracce per serie/film'; + case 'settings.rememberTrackSelectionsDescription': + return 'Salva automaticamente le preferenze delle lingue audio e sottotitoli quando cambi tracce durante la riproduzione'; + case 'settings.unwatchedOnly': + return 'Solo non guardati'; + case 'settings.unwatchedOnlyDescription': + return 'Includi solo gli episodi non guardati nella coda di riproduzione casuale'; + case 'settings.shuffleOrderNavigation': + return 'Navigazione in ordine casuale'; + case 'settings.shuffleOrderNavigationDescription': + return 'I pulsanti Avanti/Indietro seguono l\'ordine casuale'; + case 'settings.loopShuffleQueue': + return 'Coda di riproduzione casuale in loop'; + case 'settings.loopShuffleQueueDescription': + return 'Riavvia la coda quando raggiungi la fine'; + case 'settings.videoPlayerControls': + return 'Controlli del lettore video'; + case 'settings.keyboardShortcuts': + return 'Scorciatoie da tastiera'; + case 'settings.keyboardShortcutsDescription': + return 'Personalizza le scorciatoie da tastiera'; + case 'settings.debugLogging': + return 'Log di debug'; + case 'settings.debugLoggingDescription': + return 'Abilita il logging dettagliato per la risoluzione dei problemi'; + case 'settings.viewLogs': + return 'Visualizza log'; + case 'settings.viewLogsDescription': + return 'Visualizza i log dell\'applicazione'; + case 'settings.clearCache': + return 'Svuota cache'; + case 'settings.clearCacheDescription': + return 'Questa opzione cancellerà tutte le immagini e i dati memorizzati nella cache. Dopo aver cancellato la cache, l\'app potrebbe impiegare più tempo per caricare i contenuti.'; + case 'settings.clearCacheSuccess': + return 'Cache cancellata correttamente'; + case 'settings.resetSettings': + return 'Ripristina impostazioni'; + case 'settings.resetSettingsDescription': + return 'Questa opzione ripristinerà tutte le impostazioni ai valori predefiniti. Non può essere annullata.'; + case 'settings.resetSettingsSuccess': + return 'Impostazioni ripristinate correttamente'; + case 'settings.shortcutsReset': + return 'Scorciatoie ripristinate alle impostazioni predefinite'; + case 'settings.about': + return 'Informazioni'; + case 'settings.aboutDescription': + return 'Informazioni sull\'app e le licenze'; + case 'settings.updates': + return 'Aggiornamenti'; + case 'settings.updateAvailable': + return 'Aggiornamento disponibile'; + case 'settings.checkForUpdates': + return 'Controlla aggiornamenti'; + case 'settings.validationErrorEnterNumber': + return 'Inserisci un numero valido'; + case 'settings.validationErrorDuration': + return ({ + required Object min, + required Object max, + required Object unit, + }) => 'la durata deve essere compresa tra ${min} e ${max} ${unit}'; + case 'settings.shortcutAlreadyAssigned': + return ({required Object action}) => + 'Scorciatoia già assegnata a ${action}'; + case 'settings.shortcutUpdated': + return ({required Object action}) => + 'Scorciatoia aggiornata per ${action}'; + case 'settings.autoSkip': + return 'Salto Automatico'; + case 'settings.autoSkipIntro': + return 'Salta Intro Automaticamente'; + case 'settings.autoSkipIntroDescription': + return 'Salta automaticamente i marcatori dell\'intro dopo alcuni secondi'; + case 'settings.autoSkipCredits': + return 'Salta Crediti Automaticamente'; + case 'settings.autoSkipCreditsDescription': + return 'Salta automaticamente i crediti e riproduci l\'episodio successivo'; + case 'settings.autoSkipDelay': + return 'Ritardo Salto Automatico'; + case 'settings.autoSkipDelayDescription': + return ({required Object seconds}) => + 'Aspetta ${seconds} secondi prima del salto automatico'; + case 'search.hint': + return 'Cerca film. spettacoli, musica...'; + case 'search.tryDifferentTerm': + return 'Prova altri termini di ricerca'; + case 'search.searchYourMedia': + return 'Cerca nei tuoi media'; + case 'search.enterTitleActorOrKeyword': + return 'Inserisci un titolo, attore o parola chiave'; + case 'hotkeys.setShortcutFor': + return ({required Object actionName}) => + 'Imposta scorciatoia per ${actionName}'; + case 'hotkeys.clearShortcut': + return 'Elimina scorciatoia'; + case 'pinEntry.enterPin': + return 'Inserisci PIN'; + case 'pinEntry.showPin': + return 'Mostra PIN'; + case 'pinEntry.hidePin': + return 'Nascondi PIN'; + case 'fileInfo.title': + return 'Info sul file'; + case 'fileInfo.video': + return 'Video'; + case 'fileInfo.audio': + return 'Audio'; + case 'fileInfo.file': + return 'File'; + case 'fileInfo.advanced': + return 'Avanzate'; + case 'fileInfo.codec': + return 'Codec'; + case 'fileInfo.resolution': + return 'Risoluzione'; + case 'fileInfo.bitrate': + return 'Bitrate'; + case 'fileInfo.frameRate': + return 'Frame Rate'; + case 'fileInfo.aspectRatio': + return 'Aspect Ratio'; + case 'fileInfo.profile': + return 'Profilo'; + case 'fileInfo.bitDepth': + return 'Profondità colore'; + case 'fileInfo.colorSpace': + return 'Spazio colore'; + case 'fileInfo.colorRange': + return 'Gamma colori'; + case 'fileInfo.colorPrimaries': + return 'Colori primari'; + case 'fileInfo.chromaSubsampling': + return 'Sottocampionamento cromatico'; + case 'fileInfo.channels': + return 'Canali'; + case 'fileInfo.path': + return 'Percorso'; + case 'fileInfo.size': + return 'Dimensione'; + case 'fileInfo.container': + return 'Contenitore'; + case 'fileInfo.duration': + return 'Durata'; + case 'fileInfo.optimizedForStreaming': + return 'Ottimizzato per lo streaming'; + case 'fileInfo.has64bitOffsets': + return 'Offset a 64-bit'; + case 'mediaMenu.markAsWatched': + return 'Segna come visto'; + case 'mediaMenu.markAsUnwatched': + return 'Segna come non visto'; + case 'mediaMenu.removeFromContinueWatching': + return 'Rimuovi da Continua a guardare'; + case 'mediaMenu.goToSeries': + return 'Vai alle serie'; + case 'mediaMenu.goToSeason': + return 'Vai alla stagione'; + case 'mediaMenu.shufflePlay': + return 'Riproduzione casuale'; + case 'mediaMenu.fileInfo': + return 'Info sul file'; + case 'accessibility.mediaCardMovie': + return ({required Object title}) => '${title}, film'; + case 'accessibility.mediaCardShow': + return ({required Object title}) => '${title}, serie TV'; + case 'accessibility.mediaCardEpisode': + return ({required Object title, required Object episodeInfo}) => + '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': + return ({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': + return 'visto'; + case 'accessibility.mediaCardPartiallyWatched': + return ({required Object percent}) => '${percent} percento visto'; + case 'accessibility.mediaCardUnwatched': + return 'non visto'; + case 'accessibility.tapToPlay': + return 'Tocca per riprodurre'; + case 'tooltips.shufflePlay': + return 'Riproduzione casuale'; + case 'tooltips.markAsWatched': + return 'Segna come visto'; + case 'tooltips.markAsUnwatched': + return 'Segna come non visto'; + case 'videoControls.audioLabel': + return 'Audio'; + case 'videoControls.subtitlesLabel': + return 'Sottotitoli'; + case 'videoControls.resetToZero': + return 'Riporta a 0ms'; + case 'videoControls.addTime': + return ({required Object amount, required Object unit}) => + '+${amount}${unit}'; + case 'videoControls.minusTime': + return ({required Object amount, required Object unit}) => + '-${amount}${unit}'; + case 'videoControls.playsLater': + return ({required Object label}) => '${label} riprodotto dopo'; + case 'videoControls.playsEarlier': + return ({required Object label}) => '${label} riprodotto prima'; + case 'videoControls.noOffset': + return 'Nessun offset'; + case 'videoControls.letterbox': + return 'Letterbox'; + case 'videoControls.fillScreen': + return 'Riempi schermo'; + case 'videoControls.stretch': + return 'Allunga'; + case 'videoControls.lockRotation': + return 'Blocca rotazione'; + case 'videoControls.unlockRotation': + return 'Sblocca rotazione'; + case 'videoControls.sleepTimer': + return 'Timer di spegnimento'; + case 'videoControls.timerActive': + return 'Timer attivo'; + case 'videoControls.playbackWillPauseIn': + return ({required Object duration}) => + 'La riproduzione si interromperà tra ${duration}'; + case 'videoControls.sleepTimerCompleted': + return 'Timer di spegnimento completato - riproduzione in pausa'; + case 'videoControls.playButton': + return 'Riproduci'; + case 'videoControls.pauseButton': + return 'Pausa'; + case 'videoControls.seekBackwardButton': + return ({required Object seconds}) => 'Riavvolgi di ${seconds} secondi'; + case 'videoControls.seekForwardButton': + return ({required Object seconds}) => 'Avanza di ${seconds} secondi'; + case 'videoControls.previousButton': + return 'Episodio precedente'; + case 'videoControls.nextButton': + return 'Episodio successivo'; + case 'videoControls.previousChapterButton': + return 'Capitolo precedente'; + case 'videoControls.nextChapterButton': + return 'Capitolo successivo'; + case 'videoControls.volumeButton': + return 'Volume'; + case 'videoControls.muteButton': + return 'Silenzia'; + case 'videoControls.unmuteButton': + return 'Riattiva audio'; + case 'videoControls.settingsButton': + return 'Impostazioni video'; + case 'videoControls.audioTrackButton': + return 'Tracce audio'; + case 'videoControls.subtitlesButton': + return 'Sottotitoli'; + case 'videoControls.chaptersButton': + return 'Capitoli'; + case 'videoControls.versionsButton': + return 'Versioni video'; + case 'videoControls.aspectRatioButton': + return 'Proporzioni'; + case 'videoControls.fullscreenButton': + return 'Attiva schermo intero'; + case 'videoControls.exitFullscreenButton': + return 'Esci da schermo intero'; + case 'videoControls.rotationLockButton': + return 'Blocco rotazione'; + case 'videoControls.timelineSlider': + return 'Timeline video'; + case 'videoControls.volumeSlider': + return 'Livello volume'; + case 'videoControls.backButton': + return 'Indietro'; + case 'userStatus.admin': + return 'Admin'; + case 'userStatus.restricted': + return 'Limitato'; + case 'userStatus.protected': + return 'Protetto'; + case 'userStatus.current': + return 'ATTUALE'; + case 'messages.markedAsWatched': + return 'Segna come visto'; + case 'messages.markedAsUnwatched': + return 'Segna come non visto'; + case 'messages.removedFromContinueWatching': + return 'Rimosso da Continua a guardare'; + case 'messages.errorLoading': + return ({required Object error}) => 'Errore: ${error}'; + case 'messages.fileInfoNotAvailable': + return 'Informazioni sul file non disponibili'; + case 'messages.errorLoadingFileInfo': + return ({required Object error}) => + 'Errore caricamento informazioni sul file: ${error}'; + case 'messages.errorLoadingSeries': + return 'Errore caricamento serie'; + case 'messages.errorLoadingSeason': + return 'Errore caricamento stagione'; + case 'messages.musicNotSupported': + return 'La riproduzione musicale non è ancora supportata'; + case 'messages.logsCleared': + return 'Log eliminati'; + case 'messages.logsCopied': + return 'Log copiati negli appunti'; + case 'messages.noLogsAvailable': + return 'Nessun log disponibile'; + case 'messages.libraryScanning': + return ({required Object title}) => 'Scansione "${title}"...'; + case 'messages.libraryScanStarted': + return ({required Object title}) => + 'Scansione libreria iniziata per "${title}"'; + case 'messages.libraryScanFailed': + return ({required Object error}) => + 'Impossibile eseguire scansione della libreria: ${error}'; + case 'messages.metadataRefreshing': + return ({required Object title}) => + 'Aggiornamento metadati per "${title}"...'; + case 'messages.metadataRefreshStarted': + return ({required Object title}) => + 'Aggiornamento metadati per "${title}"'; + case 'messages.metadataRefreshFailed': + return ({required Object error}) => + 'Errore aggiornamento metadati: ${error}'; + case 'messages.noPlexToken': + return 'Nessun token Plex trovato. Riesegui l\'accesso.'; + case 'messages.logoutConfirm': + return 'Sei sicuro di volerti disconnettere?'; + case 'messages.noSeasonsFound': + return 'Nessuna stagione trovata'; + case 'messages.noEpisodesFound': + return 'Nessun episodio trovato nella prima stagione'; + case 'messages.noEpisodesFoundGeneral': + return 'Nessun episodio trovato'; + case 'messages.noResultsFound': + return 'Nessun risultato'; + case 'messages.sleepTimerSet': + return ({required Object label}) => + 'Imposta timer spegnimento per ${label}'; + case 'messages.failedToSwitchProfile': + return ({required Object displayName}) => + 'Impossibile passare a ${displayName}'; + case 'messages.noItemsAvailable': + return 'Nessun elemento disponibile'; + case 'messages.failedToCreatePlayQueue': + return 'Impossibile creare la coda di riproduzione'; + case 'messages.failedToCreatePlayQueueNoItems': + return 'Impossibile creare la coda di riproduzione - nessun elemento'; + case 'messages.failedPlayback': + return ({required Object action, required Object error}) => + 'Impossibile ${action}: ${error}'; + case 'profile.noUsersAvailable': + return 'Nessun utente disponibile'; + case 'subtitlingStyling.stylingOptions': + return 'Opzioni stile'; + case 'subtitlingStyling.fontSize': + return 'Dimensione'; + case 'subtitlingStyling.textColor': + return 'Colore testo'; + case 'subtitlingStyling.borderSize': + return 'Dimensione bordo'; + case 'subtitlingStyling.borderColor': + return 'Colore bordo'; + case 'subtitlingStyling.backgroundOpacity': + return 'Opacità sfondo'; + case 'subtitlingStyling.backgroundColor': + return 'Colore sfondo'; + case 'dialog.confirmAction': + return 'Conferma azione'; + case 'dialog.areYouSure': + return 'Sei sicuro di voler eseguire questa azione?'; + case 'dialog.cancel': + return 'Cancella'; + case 'dialog.playNow': + return 'Riproduci ora'; + case 'discover.title': + return 'Esplora'; + case 'discover.switchProfile': + return 'Cambia profilo'; + case 'discover.switchServer': + return 'Cambia server'; + case 'discover.logout': + return 'Disconnetti'; + case 'discover.noContentAvailable': + return 'Nessun contenuto disponibile'; + case 'discover.addMediaToLibraries': + return 'Aggiungi alcuni file multimediali alle tue librerie'; + case 'discover.continueWatching': + return 'Continua a guardare'; + case 'discover.recentlyAdded': + return 'Aggiunti di recente'; + case 'discover.play': + return 'Riproduci'; + case 'discover.resume': + return 'Riprendi'; + case 'discover.playEpisode': + return ({required Object season, required Object episode}) => + 'Riproduci S${season}, E${episode}'; + case 'discover.resumeEpisode': + return ({required Object season, required Object episode}) => + 'Riprendi S${season}, E${episode}'; + case 'discover.pause': + return 'Pausa'; + case 'discover.overview': + return 'Panoramica'; + case 'discover.cast': + return 'Attori'; + case 'discover.seasons': + return 'Stagioni'; + case 'discover.studio': + return 'Studio'; + case 'discover.rating': + return 'Classificazione'; + case 'discover.watched': + return 'Guardato'; + case 'discover.episodeCount': + return ({required Object count}) => '${count} episodi'; + case 'discover.watchedProgress': + return ({required Object watched, required Object total}) => + '${watched}/${total} guardati'; + case 'discover.movie': + return 'Film'; + case 'discover.tvShow': + return 'Serie TV'; + case 'discover.minutesLeft': + return ({required Object minutes}) => '${minutes} minuti rimanenti'; + case 'errors.searchFailed': + return ({required Object error}) => 'Ricerca fallita: ${error}'; + case 'errors.connectionTimeout': + return ({required Object context}) => + 'Timeout connessione durante caricamento di ${context}'; + case 'errors.connectionFailed': + return 'Impossibile connettersi al server Plex.'; + case 'errors.failedToLoad': + return ({required Object context, required Object error}) => + 'Impossibile caricare ${context}: ${error}'; + case 'errors.noClientAvailable': + return 'Nessun client disponibile'; + case 'errors.authenticationFailed': + return ({required Object error}) => 'Autenticazione fallita: ${error}'; + case 'errors.couldNotLaunchUrl': + return 'Impossibile avviare URL di autenticazione'; + case 'errors.pleaseEnterToken': + return 'Inserisci token'; + case 'errors.invalidToken': + return 'Token non valido'; + case 'errors.failedToVerifyToken': + return ({required Object error}) => 'Verifica token fallita: ${error}'; + case 'errors.failedToSwitchProfile': + return ({required Object displayName}) => + 'Impossibile passare a ${displayName}'; + case 'errors.connectionFailedGeneric': + return 'Connessione fallita'; + case 'libraries.title': + return 'Librerie'; + case 'libraries.scanLibraryFiles': + return 'Scansiona file libreria'; + case 'libraries.scanLibrary': + return 'Scansiona libreria'; + case 'libraries.analyze': + return 'Analizza'; + case 'libraries.analyzeLibrary': + return 'Analizza libreria'; + case 'libraries.refreshMetadata': + return 'Aggiorna metadati'; + case 'libraries.emptyTrash': + return 'Svuota cestino'; + case 'libraries.emptyingTrash': + return ({required Object title}) => + 'Svuotamento cestino per "${title}"...'; + case 'libraries.trashEmptied': + return ({required Object title}) => 'Cestino svuotato per "${title}"'; + case 'libraries.failedToEmptyTrash': + return ({required Object error}) => + 'Impossibile svuotare cestino: ${error}'; + case 'libraries.analyzing': + return ({required Object title}) => 'Analisi "${title}"...'; + case 'libraries.analysisStarted': + return ({required Object title}) => 'Analisi iniziata per "${title}"'; + case 'libraries.failedToAnalyze': + return ({required Object error}) => + 'Impossibile analizzare libreria: ${error}'; + case 'libraries.noLibrariesFound': + return 'Nessuna libreria trovata'; + case 'libraries.thisLibraryIsEmpty': + return 'Questa libreria è vuota'; + case 'libraries.all': + return 'Tutto'; + case 'libraries.clearAll': + return 'Cancella tutto'; + case 'libraries.scanLibraryConfirm': + return ({required Object title}) => + 'Sei sicuro di voler scansionare "${title}"?'; + case 'libraries.analyzeLibraryConfirm': + return ({required Object title}) => + 'Sei sicuro di voler analizzare "${title}"?'; + case 'libraries.refreshMetadataConfirm': + return ({required Object title}) => + 'Sei sicuro di voler aggiornare i metadati per "${title}"?'; + case 'libraries.emptyTrashConfirm': + return ({required Object title}) => + 'Sei sicuro di voler svuotare il cestino per "${title}"?'; + case 'libraries.manageLibraries': + return 'Gestisci librerie'; + case 'libraries.sort': + return 'Ordina'; + case 'libraries.sortBy': + return 'Ordina per'; + case 'libraries.filters': + return 'Filtri'; + case 'libraries.loadingLibraryWithCount': + return ({required Object count}) => + 'Caricamento librerie... (${count} oggetti caricati)'; + case 'libraries.confirmActionMessage': + return 'Sei sicuro di voler eseguire questa azione?'; + case 'libraries.showLibrary': + return 'Mostra libreria'; + case 'libraries.hideLibrary': + return 'Nascondi libreria'; + case 'libraries.libraryOptions': + return 'Opzioni libreria'; + case 'libraries.content': + return 'contenuto della libreria'; + case 'libraries.selectLibrary': + return 'Seleziona libreria'; + case 'libraries.filtersWithCount': + return ({required Object count}) => 'Filtri (${count})'; + case 'libraries.noRecommendations': + return 'Nessun consiglio disponibile'; + case 'libraries.noCollections': + return 'Nessuna raccolta in questa libreria'; + case 'libraries.noFoldersFound': + return 'Nessuna cartella trovata'; + case 'libraries.folders': + return 'cartelle'; + case 'libraries.tabs.recommended': + return 'Consigliati'; + case 'libraries.tabs.browse': + return 'Esplora'; + case 'libraries.tabs.collections': + return 'Raccolte'; + case 'libraries.tabs.playlists': + return 'Playlist'; + case 'libraries.groupings.all': + return 'Tutti'; + case 'libraries.groupings.movies': + return 'Film'; + case 'libraries.groupings.shows': + return 'Serie TV'; + case 'libraries.groupings.seasons': + return 'Stagioni'; + case 'libraries.groupings.episodes': + return 'Episodi'; + case 'libraries.groupings.folders': + return 'Cartelle'; + case 'about.title': + return 'Informazioni'; + case 'about.openSourceLicenses': + return 'Licenze Open Source'; + case 'about.versionLabel': + return ({required Object version}) => 'Versione ${version}'; + case 'about.appDescription': + return 'Un bellissimo client Plex per Flutter'; + case 'about.viewLicensesDescription': + return 'Visualizza le licenze delle librerie di terze parti'; + case 'serverSelection.connectingToServer': + return 'Connessione al server...'; + case 'serverSelection.connectingToAllServers': + return 'Connessione a tutti i server...'; + case 'serverSelection.connectToAllServers': + return 'Connetti a tutti i server'; + case 'serverSelection.allServerConnectionsFailed': + return 'Impossibile connettersi a nessun server. Controlla la tua rete e riprova.'; + case 'serverSelection.foundServers': + return ({required Object count}) => 'Trovati ${count} server'; + case 'serverSelection.orSelectIndividually': + return 'Oppure seleziona un server singolarmente:'; + case 'serverSelection.serverDebugCopied': + return 'Dati di debug del server copiati negli appunti'; + case 'serverSelection.copyDebugData': + return 'Copia dati di debug'; + case 'serverSelection.noServersFound': + return 'Nessun server trovato'; + case 'serverSelection.malformedServerData': + return ({required Object count}) => + 'Trovato ${count} server con dati difettosi. Nessun server valido disponibile.'; + case 'serverSelection.incompleteServerInfo': + return 'Alcuni server presentano informazioni incomplete e sono stati ignorati. Controlla il tuo account Plex.tv.'; + case 'serverSelection.incompleteConnectionInfo': + return 'Le informazioni di connessione al server sono incomplete. Riprova.'; + case 'serverSelection.malformedServerInfo': + return ({required Object message}) => + 'Le informazioni sul server sono errate: ${message}'; + case 'serverSelection.networkConnectionFailed': + return 'Connessione di rete non riuscita. Controlla la tua connessione Internet e riprova.'; + case 'serverSelection.authenticationFailed': + return 'Autenticazione fallita. Effettua nuovamente l\'accesso.'; + case 'serverSelection.plexServiceUnavailable': + return 'Servizio Plex non disponibile. Riprova più tardi.'; + case 'serverSelection.failedToLoadServers': + return ({required Object error}) => + 'Impossibile caricare i server: ${error}'; + case 'hubDetail.title': + return 'Titolo'; + case 'hubDetail.releaseYear': + return 'Anno rilascio'; + case 'hubDetail.dateAdded': + return 'Data aggiunta'; + case 'hubDetail.rating': + return 'Valutazione'; + case 'hubDetail.noItemsFound': + return 'Nessun elemento trovato'; + case 'logs.title': + return 'Registro'; + case 'logs.clearLogs': + return 'Cancella log'; + case 'logs.copyLogs': + return 'Copia log'; + case 'logs.exportLogs': + return 'Esporta log'; + case 'logs.noLogsToShow': + return 'Nessun log da mostrare'; + case 'logs.error': + return 'Errore:'; + case 'logs.stackTrace': + return 'Traccia dello stack:'; + case 'licenses.relatedPackages': + return 'Pacchetti correlati'; + case 'licenses.license': + return 'Licenza'; + case 'licenses.licenseNumber': + return ({required Object number}) => 'Licenza ${number}'; + case 'licenses.licensesCount': + return ({required Object count}) => '${count} licenze'; + case 'navigation.home': + return 'Home'; + case 'navigation.search': + return 'Cerca'; + case 'navigation.libraries': + return 'Librerie'; + case 'navigation.settings': + return 'Impostazioni'; + case 'playlists.title': + return 'Playlist'; + case 'playlists.noPlaylists': + return 'Nessuna playlist trovata'; + case 'playlists.create': + return 'Crea playlist'; + case 'playlists.newPlaylist': + return 'Nuova playlist'; + case 'playlists.playlistName': + return 'Nome playlist'; + case 'playlists.enterPlaylistName': + return 'Inserisci nome playlist'; + case 'playlists.edit': + return 'Modifica playlist'; + case 'playlists.delete': + return 'Elimina playlist'; + case 'playlists.addTo': + return 'Aggiungi a playlist'; + case 'playlists.addItems': + return 'Aggiungi elementi'; + case 'playlists.removeItem': + return 'Rimuovi da playlist'; + case 'playlists.clearPlaylist': + return 'Svuota playlist'; + case 'playlists.playAll': + return 'Riproduci tutto'; + case 'playlists.shuffle': + return 'Casuale'; + case 'playlists.smartPlaylist': + return 'Playlist intelligente'; + case 'playlists.regularPlaylist': + return 'Playlist normale'; + case 'playlists.itemCount': + return ({required Object count}) => '${count} elementi'; + case 'playlists.oneItem': + return '1 elemento'; + case 'playlists.emptyPlaylist': + return 'Questa playlist è vuota'; + case 'playlists.deleteConfirm': + return 'Eliminare playlist?'; + case 'playlists.deleteMessage': + return ({required Object name}) => + 'Sei sicuro di voler eliminare "${name}"?'; + case 'playlists.created': + return 'Playlist creata'; + case 'playlists.updated': + return 'Playlist aggiornata'; + case 'playlists.deleted': + return 'Playlist eliminata'; + case 'playlists.itemAdded': + return 'Aggiunto alla playlist'; + case 'playlists.itemRemoved': + return 'Rimosso dalla playlist'; + case 'playlists.selectPlaylist': + return 'Seleziona playlist'; + case 'playlists.createNewPlaylist': + return 'Crea nuova playlist'; + case 'playlists.errorCreating': + return 'Errore durante la creazione della playlist'; + case 'playlists.errorDeleting': + return 'Errore durante l\'eliminazione della playlist'; + case 'playlists.errorLoading': + return 'Errore durante il caricamento delle playlist'; + case 'playlists.errorAdding': + return 'Errore durante l\'aggiunta alla playlist'; + case 'playlists.errorReordering': + return 'Errore durante il riordino dell\'elemento della playlist'; + case 'playlists.errorRemoving': + return 'Errore durante la rimozione dalla playlist'; + case 'playlists.playlist': + return 'Playlist'; + case 'collections.title': + return 'Raccolte'; + case 'collections.collection': + return 'Raccolta'; + case 'collections.empty': + return 'La raccolta è vuota'; + case 'collections.noItems': + return 'Nessun elemento in questa raccolta'; + case 'collections.unknownLibrarySection': + return 'Impossibile eliminare: sezione libreria sconosciuta'; + case 'collections.deleteCollection': + return 'Elimina raccolta'; + case 'collections.deleteConfirm': + return ({required Object title}) => + 'Sei sicuro di voler eliminare "${title}"? Questa azione non può essere annullata.'; + case 'collections.deleted': + return 'Raccolta eliminata'; + case 'collections.deleteFailed': + return 'Impossibile eliminare la raccolta'; + case 'collections.deleteFailedWithError': + return ({required Object error}) => + 'Impossibile eliminare la raccolta: ${error}'; + case 'collections.failedToLoadItems': + return ({required Object error}) => + 'Impossibile caricare gli elementi della raccolta: ${error}'; + case 'collections.addTo': + return 'Aggiungi alla raccolta'; + case 'collections.selectCollection': + return 'Seleziona raccolta'; + case 'collections.createNewCollection': + return 'Crea nuova raccolta'; + case 'collections.collectionName': + return 'Nome raccolta'; + case 'collections.enterCollectionName': + return 'Inserisci nome raccolta'; + case 'collections.addedToCollection': + return 'Aggiunto alla raccolta'; + case 'collections.errorAddingToCollection': + return 'Errore nell\'aggiunta alla raccolta'; + case 'collections.created': + return 'Raccolta creata'; + case 'collections.removeFromCollection': + return 'Rimuovi dalla raccolta'; + case 'collections.removeFromCollectionConfirm': + return ({required Object title}) => + 'Rimuovere "${title}" da questa raccolta?'; + case 'collections.removedFromCollection': + return 'Rimosso dalla raccolta'; + case 'collections.removeFromCollectionFailed': + return 'Impossibile rimuovere dalla raccolta'; + case 'collections.removeFromCollectionError': + return ({required Object error}) => + 'Errore durante la rimozione dalla raccolta: ${error}'; + default: + return null; + } + } } extension on _StringsNl { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': return 'Plezy'; - case 'app.loading': return 'Laden...'; - case 'auth.signInWithPlex': return 'Inloggen met Plex'; - case 'auth.showQRCode': return 'Toon QR-code'; - case 'auth.cancel': return 'Annuleren'; - case 'auth.authenticate': return 'Authenticeren'; - case 'auth.retry': return 'Opnieuw proberen'; - case 'auth.debugEnterToken': return 'Debug: Voer Plex Token in'; - case 'auth.plexTokenLabel': return 'Plex Authenticatietoken'; - case 'auth.plexTokenHint': return 'Voer je Plex.tv token in'; - case 'auth.authenticationTimeout': return 'Authenticatie verlopen. Probeer opnieuw.'; - case 'auth.scanQRCodeInstruction': return 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.'; - case 'auth.waitingForAuth': return 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.'; - case 'common.cancel': return 'Annuleren'; - case 'common.save': return 'Opslaan'; - case 'common.close': return 'Sluiten'; - case 'common.clear': return 'Wissen'; - case 'common.reset': return 'Resetten'; - case 'common.later': return 'Later'; - case 'common.submit': return 'Verzenden'; - case 'common.confirm': return 'Bevestigen'; - case 'common.retry': return 'Opnieuw proberen'; - case 'common.playNow': return 'Nu afspelen'; - case 'common.logout': return 'Uitloggen'; - case 'common.online': return 'Online'; - case 'common.offline': return 'Offline'; - case 'common.owned': return 'Eigendom'; - case 'common.shared': return 'Gedeeld'; - case 'common.current': return 'HUIDIG'; - case 'common.unknown': return 'Onbekend'; - case 'common.refresh': return 'Vernieuwen'; - case 'common.yes': return 'Ja'; - case 'common.no': return 'Nee'; - case 'common.server': return 'Server'; - case 'common.delete': return 'Verwijderen'; - case 'common.shuffle': return 'Willekeurig'; - case 'common.addTo': return 'Toevoegen aan...'; - case 'screens.licenses': return 'Licenties'; - case 'screens.selectServer': return 'Selecteer server'; - case 'screens.switchProfile': return 'Wissel van profiel'; - case 'screens.subtitleStyling': return 'Ondertitel opmaak'; - case 'screens.search': return 'Zoeken'; - case 'screens.logs': return 'Logbestanden'; - case 'update.available': return 'Update beschikbaar'; - case 'update.versionAvailable': return ({required Object version}) => 'Versie ${version} is beschikbaar'; - case 'update.currentVersion': return ({required Object version}) => 'Huidig: ${version}'; - case 'update.skipVersion': return 'Deze versie overslaan'; - case 'update.viewRelease': return 'Bekijk release'; - case 'update.latestVersion': return 'Je hebt de nieuwste versie'; - case 'update.checkFailed': return 'Kon niet controleren op updates'; - case 'settings.title': return 'Instellingen'; - case 'settings.language': return 'Taal'; - case 'settings.theme': return 'Thema'; - case 'settings.appearance': return 'Uiterlijk'; - case 'settings.videoPlayback': return 'Video afspelen'; - case 'settings.shufflePlay': return 'Willekeurig afspelen'; - case 'settings.advanced': return 'Geavanceerd'; - case 'settings.useSeasonPostersDescription': return 'Toon seizoenposter in plaats van serieposter voor afleveringen'; - case 'settings.showHeroSectionDescription': return 'Toon uitgelichte inhoud carrousel op startscherm'; - case 'settings.secondsLabel': return 'Seconden'; - case 'settings.minutesLabel': return 'Minuten'; - case 'settings.secondsShort': return 's'; - case 'settings.minutesShort': return 'm'; - case 'settings.durationHint': return ({required Object min, required Object max}) => 'Voer duur in (${min}-${max})'; - case 'settings.systemTheme': return 'Systeem'; - case 'settings.systemThemeDescription': return 'Volg systeeminstellingen'; - case 'settings.lightTheme': return 'Licht'; - case 'settings.darkTheme': return 'Donker'; - case 'settings.libraryDensity': return 'Bibliotheek dichtheid'; - case 'settings.compact': return 'Compact'; - case 'settings.compactDescription': return 'Kleinere kaarten, meer items zichtbaar'; - case 'settings.normal': return 'Normaal'; - case 'settings.normalDescription': return 'Standaard grootte'; - case 'settings.comfortable': return 'Comfortabel'; - case 'settings.comfortableDescription': return 'Grotere kaarten, minder items zichtbaar'; - case 'settings.viewMode': return 'Weergavemodus'; - case 'settings.gridView': return 'Raster'; - case 'settings.gridViewDescription': return 'Items weergeven in een rasterindeling'; - case 'settings.listView': return 'Lijst'; - case 'settings.listViewDescription': return 'Items weergeven in een lijstindeling'; - case 'settings.useSeasonPosters': return 'Gebruik seizoenposters'; - case 'settings.showHeroSection': return 'Toon hoofdsectie'; - case 'settings.hardwareDecoding': return 'Hardware decodering'; - case 'settings.hardwareDecodingDescription': return 'Gebruik hardware versnelling indien beschikbaar'; - case 'settings.bufferSize': return 'Buffer grootte'; - case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': return 'Ondertitel opmaak'; - case 'settings.subtitleStylingDescription': return 'Pas ondertitel uiterlijk aan'; - case 'settings.smallSkipDuration': return 'Korte skip duur'; - case 'settings.largeSkipDuration': return 'Lange skip duur'; - case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} seconden'; - case 'settings.defaultSleepTimer': return 'Standaard slaap timer'; - case 'settings.minutesUnit': return ({required Object minutes}) => 'bij ${minutes} minuten'; - case 'settings.rememberTrackSelections': return 'Onthoud track selecties per serie/film'; - case 'settings.rememberTrackSelectionsDescription': return 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; - case 'settings.unwatchedOnly': return 'Alleen ongekeken'; - case 'settings.unwatchedOnlyDescription': return 'Alleen ongekeken afleveringen opnemen in willekeurige wachtrij'; - case 'settings.shuffleOrderNavigation': return 'Willekeurige volgorde navigatie'; - case 'settings.shuffleOrderNavigationDescription': return 'Volgende/vorige knoppen volgen willekeurige volgorde'; - case 'settings.loopShuffleQueue': return 'Herhaal willekeurige wachtrij'; - case 'settings.loopShuffleQueueDescription': return 'Start wachtrij opnieuw bij het einde'; - case 'settings.videoPlayerControls': return 'Videospeler bediening'; - case 'settings.keyboardShortcuts': return 'Toetsenbord sneltoetsen'; - case 'settings.keyboardShortcutsDescription': return 'Pas toetsenbord sneltoetsen aan'; - case 'settings.debugLogging': return 'Debug logging'; - case 'settings.debugLoggingDescription': return 'Schakel gedetailleerde logging in voor probleemoplossing'; - case 'settings.viewLogs': return 'Bekijk logs'; - case 'settings.viewLogsDescription': return 'Bekijk applicatie logs'; - case 'settings.clearCache': return 'Cache wissen'; - case 'settings.clearCacheDescription': return 'Dit wist alle gecachte afbeeldingen en gegevens. De app kan langer duren om inhoud te laden na het wissen van de cache.'; - case 'settings.clearCacheSuccess': return 'Cache succesvol gewist'; - case 'settings.resetSettings': return 'Instellingen resetten'; - case 'settings.resetSettingsDescription': return 'Dit reset alle instellingen naar hun standaard waarden. Deze actie kan niet ongedaan gemaakt worden.'; - case 'settings.resetSettingsSuccess': return 'Instellingen succesvol gereset'; - case 'settings.shortcutsReset': return 'Sneltoetsen gereset naar standaard'; - case 'settings.about': return 'Over'; - case 'settings.aboutDescription': return 'App informatie en licenties'; - case 'settings.updates': return 'Updates'; - case 'settings.updateAvailable': return 'Update beschikbaar'; - case 'settings.checkForUpdates': return 'Controleer op updates'; - case 'settings.validationErrorEnterNumber': return 'Voer een geldig nummer in'; - case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => 'Duur moet tussen ${min} en ${max} ${unit} zijn'; - case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => 'Sneltoets al toegewezen aan ${action}'; - case 'settings.shortcutUpdated': return ({required Object action}) => 'Sneltoets bijgewerkt voor ${action}'; - case 'settings.autoSkip': return 'Automatisch Overslaan'; - case 'settings.autoSkipIntro': return 'Intro Automatisch Overslaan'; - case 'settings.autoSkipIntroDescription': return 'Intro-markeringen na enkele seconden automatisch overslaan'; - case 'settings.autoSkipCredits': return 'Credits Automatisch Overslaan'; - case 'settings.autoSkipCreditsDescription': return 'Credits automatisch overslaan en volgende aflevering afspelen'; - case 'settings.autoSkipDelay': return 'Vertraging Automatisch Overslaan'; - case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => '${seconds} seconden wachten voor automatisch overslaan'; - case 'search.hint': return 'Zoek films, series, muziek...'; - case 'search.tryDifferentTerm': return 'Probeer een andere zoekterm'; - case 'search.searchYourMedia': return 'Zoek in je media'; - case 'search.enterTitleActorOrKeyword': return 'Voer een titel, acteur of trefwoord in'; - case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Stel sneltoets in voor ${actionName}'; - case 'hotkeys.clearShortcut': return 'Wis sneltoets'; - case 'pinEntry.enterPin': return 'Voer PIN in'; - case 'pinEntry.showPin': return 'Toon PIN'; - case 'pinEntry.hidePin': return 'Verberg PIN'; - case 'fileInfo.title': return 'Bestand info'; - case 'fileInfo.video': return 'Video'; - case 'fileInfo.audio': return 'Audio'; - case 'fileInfo.file': return 'Bestand'; - case 'fileInfo.advanced': return 'Geavanceerd'; - case 'fileInfo.codec': return 'Codec'; - case 'fileInfo.resolution': return 'Resolutie'; - case 'fileInfo.bitrate': return 'Bitrate'; - case 'fileInfo.frameRate': return 'Frame rate'; - case 'fileInfo.aspectRatio': return 'Beeldverhouding'; - case 'fileInfo.profile': return 'Profiel'; - case 'fileInfo.bitDepth': return 'Bit diepte'; - case 'fileInfo.colorSpace': return 'Kleurruimte'; - case 'fileInfo.colorRange': return 'Kleurbereik'; - case 'fileInfo.colorPrimaries': return 'Kleurprimaires'; - case 'fileInfo.chromaSubsampling': return 'Chroma subsampling'; - case 'fileInfo.channels': return 'Kanalen'; - case 'fileInfo.path': return 'Pad'; - case 'fileInfo.size': return 'Grootte'; - case 'fileInfo.container': return 'Container'; - case 'fileInfo.duration': return 'Duur'; - case 'fileInfo.optimizedForStreaming': return 'Geoptimaliseerd voor streaming'; - case 'fileInfo.has64bitOffsets': return '64-bit Offsets'; - case 'mediaMenu.markAsWatched': return 'Markeer als gekeken'; - case 'mediaMenu.markAsUnwatched': return 'Markeer als ongekeken'; - case 'mediaMenu.removeFromContinueWatching': return 'Verwijder uit Doorgaan met kijken'; - case 'mediaMenu.goToSeries': return 'Ga naar serie'; - case 'mediaMenu.goToSeason': return 'Ga naar seizoen'; - case 'mediaMenu.shufflePlay': return 'Willekeurig afspelen'; - case 'mediaMenu.fileInfo': return 'Bestand info'; - case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, film'; - case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, TV-serie'; - case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': return 'bekeken'; - case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} procent bekeken'; - case 'accessibility.mediaCardUnwatched': return 'niet bekeken'; - case 'accessibility.tapToPlay': return 'Tik om af te spelen'; - case 'tooltips.shufflePlay': return 'Willekeurig afspelen'; - case 'tooltips.markAsWatched': return 'Markeer als gekeken'; - case 'tooltips.markAsUnwatched': return 'Markeer als ongekeken'; - case 'videoControls.audioLabel': return 'Audio'; - case 'videoControls.subtitlesLabel': return 'Ondertitels'; - case 'videoControls.resetToZero': return 'Reset naar 0ms'; - case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': return ({required Object label}) => '${label} speelt later af'; - case 'videoControls.playsEarlier': return ({required Object label}) => '${label} speelt eerder af'; - case 'videoControls.noOffset': return 'Geen offset'; - case 'videoControls.letterbox': return 'Letterbox'; - case 'videoControls.fillScreen': return 'Vul scherm'; - case 'videoControls.stretch': return 'Uitrekken'; - case 'videoControls.lockRotation': return 'Vergrendel rotatie'; - case 'videoControls.unlockRotation': return 'Ontgrendel rotatie'; - case 'videoControls.sleepTimer': return 'Slaaptimer'; - case 'videoControls.timerActive': return 'Timer actief'; - case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Afspelen wordt gepauzeerd over ${duration}'; - case 'videoControls.sleepTimerCompleted': return 'Slaaptimer voltooid - afspelen gepauzeerd'; - case 'videoControls.playButton': return 'Afspelen'; - case 'videoControls.pauseButton': return 'Pauzeren'; - case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Terugspoelen ${seconds} seconden'; - case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Vooruitspoelen ${seconds} seconden'; - case 'videoControls.previousButton': return 'Vorige aflevering'; - case 'videoControls.nextButton': return 'Volgende aflevering'; - case 'videoControls.previousChapterButton': return 'Vorig hoofdstuk'; - case 'videoControls.nextChapterButton': return 'Volgend hoofdstuk'; - case 'videoControls.volumeButton': return 'Volume'; - case 'videoControls.muteButton': return 'Dempen'; - case 'videoControls.unmuteButton': return 'Dempen opheffen'; - case 'videoControls.settingsButton': return 'Video-instellingen'; - case 'videoControls.audioTrackButton': return 'Audiosporen'; - case 'videoControls.subtitlesButton': return 'Ondertitels'; - case 'videoControls.chaptersButton': return 'Hoofdstukken'; - case 'videoControls.versionsButton': return 'Videoversies'; - case 'videoControls.aspectRatioButton': return 'Beeldverhouding'; - case 'videoControls.fullscreenButton': return 'Volledig scherm activeren'; - case 'videoControls.exitFullscreenButton': return 'Volledig scherm verlaten'; - case 'videoControls.rotationLockButton': return 'Rotatievergrendeling'; - case 'videoControls.timelineSlider': return 'Videotijdlijn'; - case 'videoControls.volumeSlider': return 'Volumeniveau'; - case 'videoControls.backButton': return 'Terug'; - case 'userStatus.admin': return 'Beheerder'; - case 'userStatus.restricted': return 'Beperkt'; - case 'userStatus.protected': return 'Beschermd'; - case 'userStatus.current': return 'HUIDIG'; - case 'messages.markedAsWatched': return 'Gemarkeerd als gekeken'; - case 'messages.markedAsUnwatched': return 'Gemarkeerd als ongekeken'; - case 'messages.removedFromContinueWatching': return 'Verwijderd uit Doorgaan met kijken'; - case 'messages.errorLoading': return ({required Object error}) => 'Fout: ${error}'; - case 'messages.fileInfoNotAvailable': return 'Bestand informatie niet beschikbaar'; - case 'messages.errorLoadingFileInfo': return ({required Object error}) => 'Fout bij laden bestand info: ${error}'; - case 'messages.errorLoadingSeries': return 'Fout bij laden serie'; - case 'messages.errorLoadingSeason': return 'Fout bij laden seizoen'; - case 'messages.musicNotSupported': return 'Muziek afspelen wordt nog niet ondersteund'; - case 'messages.logsCleared': return 'Logs gewist'; - case 'messages.logsCopied': return 'Logs gekopieerd naar klembord'; - case 'messages.noLogsAvailable': return 'Geen logs beschikbaar'; - case 'messages.libraryScanning': return ({required Object title}) => 'Scannen "${title}"...'; - case 'messages.libraryScanStarted': return ({required Object title}) => 'Bibliotheek scan gestart voor "${title}"'; - case 'messages.libraryScanFailed': return ({required Object error}) => 'Kon bibliotheek niet scannen: ${error}'; - case 'messages.metadataRefreshing': return ({required Object title}) => 'Metadata vernieuwen voor "${title}"...'; - case 'messages.metadataRefreshStarted': return ({required Object title}) => 'Metadata vernieuwen gestart voor "${title}"'; - case 'messages.metadataRefreshFailed': return ({required Object error}) => 'Kon metadata niet vernieuwen: ${error}'; - case 'messages.noPlexToken': return 'Geen Plex token gevonden. Log opnieuw in.'; - case 'messages.logoutConfirm': return 'Weet je zeker dat je wilt uitloggen?'; - case 'messages.noSeasonsFound': return 'Geen seizoenen gevonden'; - case 'messages.noEpisodesFound': return 'Geen afleveringen gevonden in eerste seizoen'; - case 'messages.noEpisodesFoundGeneral': return 'Geen afleveringen gevonden'; - case 'messages.noResultsFound': return 'Geen resultaten gevonden'; - case 'messages.sleepTimerSet': return ({required Object label}) => 'Slaap timer ingesteld voor ${label}'; - case 'messages.failedToSwitchProfile': return ({required Object displayName}) => 'Kon niet wisselen naar ${displayName}'; - case 'messages.noItemsAvailable': return 'Geen items beschikbaar'; - case 'messages.failedToCreatePlayQueue': return 'Kan afspeelwachtrij niet maken'; - case 'messages.failedToCreatePlayQueueNoItems': return 'Kan afspeelwachtrij niet maken - geen items'; - case 'messages.failedPlayback': return ({required Object action, required Object error}) => 'Afspelen van ${action} mislukt: ${error}'; - case 'profile.noUsersAvailable': return 'Geen gebruikers beschikbaar'; - case 'subtitlingStyling.stylingOptions': return 'Opmaak opties'; - case 'subtitlingStyling.fontSize': return 'Lettergrootte'; - case 'subtitlingStyling.textColor': return 'Tekstkleur'; - case 'subtitlingStyling.borderSize': return 'Rand grootte'; - case 'subtitlingStyling.borderColor': return 'Randkleur'; - case 'subtitlingStyling.backgroundOpacity': return 'Achtergrond transparantie'; - case 'subtitlingStyling.backgroundColor': return 'Achtergrondkleur'; - case 'dialog.confirmAction': return 'Bevestig actie'; - case 'dialog.areYouSure': return 'Weet je zeker dat je deze actie wilt uitvoeren?'; - case 'dialog.cancel': return 'Annuleren'; - case 'dialog.playNow': return 'Nu afspelen'; - case 'discover.title': return 'Ontdekken'; - case 'discover.switchProfile': return 'Wissel van profiel'; - case 'discover.switchServer': return 'Wissel van server'; - case 'discover.logout': return 'Uitloggen'; - case 'discover.noContentAvailable': return 'Geen inhoud beschikbaar'; - case 'discover.addMediaToLibraries': return 'Voeg wat media toe aan je bibliotheken'; - case 'discover.continueWatching': return 'Verder kijken'; - case 'discover.recentlyAdded': return 'Recent toegevoegd'; - case 'discover.play': return 'Afspelen'; - case 'discover.resume': return 'Hervatten'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'Speel S${season}, E${episode}'; - case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => 'Hervat S${season}, E${episode}'; - case 'discover.pause': return 'Pauzeren'; - case 'discover.overview': return 'Overzicht'; - case 'discover.cast': return 'Acteurs'; - case 'discover.seasons': return 'Seizoenen'; - case 'discover.studio': return 'Studio'; - case 'discover.rating': return 'Leeftijd'; - case 'discover.watched': return 'Bekeken'; - case 'discover.episodeCount': return ({required Object count}) => '${count} afleveringen'; - case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '${watched}/${total} gekeken'; - case 'discover.movie': return 'Film'; - case 'discover.tvShow': return 'TV Serie'; - case 'discover.minutesLeft': return ({required Object minutes}) => '${minutes} min over'; - case 'errors.searchFailed': return ({required Object error}) => 'Zoeken mislukt: ${error}'; - case 'errors.connectionTimeout': return ({required Object context}) => 'Verbinding time-out tijdens laden ${context}'; - case 'errors.connectionFailed': return 'Kan geen verbinding maken met Plex server'; - case 'errors.failedToLoad': return ({required Object context, required Object error}) => 'Kon ${context} niet laden: ${error}'; - case 'errors.noClientAvailable': return 'Geen client beschikbaar'; - case 'errors.authenticationFailed': return ({required Object error}) => 'Authenticatie mislukt: ${error}'; - case 'errors.couldNotLaunchUrl': return 'Kon auth URL niet openen'; - case 'errors.pleaseEnterToken': return 'Voer een token in'; - case 'errors.invalidToken': return 'Ongeldig token'; - case 'errors.failedToVerifyToken': return ({required Object error}) => 'Kon token niet verifiëren: ${error}'; - case 'errors.failedToSwitchProfile': return ({required Object displayName}) => 'Kon niet wisselen naar ${displayName}'; - case 'errors.connectionFailedGeneric': return 'Verbinding mislukt'; - case 'libraries.title': return 'Bibliotheken'; - case 'libraries.scanLibraryFiles': return 'Scan bibliotheek bestanden'; - case 'libraries.scanLibrary': return 'Scan bibliotheek'; - case 'libraries.analyze': return 'Analyseren'; - case 'libraries.analyzeLibrary': return 'Analyseer bibliotheek'; - case 'libraries.refreshMetadata': return 'Vernieuw metadata'; - case 'libraries.emptyTrash': return 'Prullenbak legen'; - case 'libraries.emptyingTrash': return ({required Object title}) => 'Prullenbak legen voor "${title}"...'; - case 'libraries.trashEmptied': return ({required Object title}) => 'Prullenbak geleegd voor "${title}"'; - case 'libraries.failedToEmptyTrash': return ({required Object error}) => 'Kon prullenbak niet legen: ${error}'; - case 'libraries.analyzing': return ({required Object title}) => 'Analyseren "${title}"...'; - case 'libraries.analysisStarted': return ({required Object title}) => 'Analyse gestart voor "${title}"'; - case 'libraries.failedToAnalyze': return ({required Object error}) => 'Kon bibliotheek niet analyseren: ${error}'; - case 'libraries.noLibrariesFound': return 'Geen bibliotheken gevonden'; - case 'libraries.thisLibraryIsEmpty': return 'Deze bibliotheek is leeg'; - case 'libraries.all': return 'Alles'; - case 'libraries.clearAll': return 'Alles wissen'; - case 'libraries.scanLibraryConfirm': return ({required Object title}) => 'Weet je zeker dat je "${title}" wilt scannen?'; - case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => 'Weet je zeker dat je "${title}" wilt analyseren?'; - case 'libraries.refreshMetadataConfirm': return ({required Object title}) => 'Weet je zeker dat je metadata wilt vernieuwen voor "${title}"?'; - case 'libraries.emptyTrashConfirm': return ({required Object title}) => 'Weet je zeker dat je de prullenbak wilt legen voor "${title}"?'; - case 'libraries.manageLibraries': return 'Beheer bibliotheken'; - case 'libraries.sort': return 'Sorteren'; - case 'libraries.sortBy': return 'Sorteer op'; - case 'libraries.filters': return 'Filters'; - case 'libraries.loadingLibraryWithCount': return ({required Object count}) => 'Bibliotheek laden... (${count} items geladen)'; - case 'libraries.confirmActionMessage': return 'Weet je zeker dat je deze actie wilt uitvoeren?'; - case 'libraries.showLibrary': return 'Toon bibliotheek'; - case 'libraries.hideLibrary': return 'Verberg bibliotheek'; - case 'libraries.libraryOptions': return 'Bibliotheek opties'; - case 'libraries.content': return 'bibliotheekinhoud'; - case 'libraries.selectLibrary': return 'Bibliotheek kiezen'; - case 'libraries.filtersWithCount': return ({required Object count}) => 'Filters (${count})'; - case 'libraries.noRecommendations': return 'Geen aanbevelingen beschikbaar'; - case 'libraries.noCollections': return 'Geen collecties in deze bibliotheek'; - case 'libraries.noFoldersFound': return 'Geen mappen gevonden'; - case 'libraries.folders': return 'mappen'; - case 'libraries.tabs.recommended': return 'Aanbevolen'; - case 'libraries.tabs.browse': return 'Bladeren'; - case 'libraries.tabs.collections': return 'Collecties'; - case 'libraries.tabs.playlists': return 'Afspeellijsten'; - case 'libraries.groupings.all': return 'Alles'; - case 'libraries.groupings.movies': return 'Films'; - case 'libraries.groupings.shows': return 'Series'; - case 'libraries.groupings.seasons': return 'Seizoenen'; - case 'libraries.groupings.episodes': return 'Afleveringen'; - case 'libraries.groupings.folders': return 'Mappen'; - case 'about.title': return 'Over'; - case 'about.openSourceLicenses': return 'Open Source licenties'; - case 'about.versionLabel': return ({required Object version}) => 'Versie ${version}'; - case 'about.appDescription': return 'Een mooie Plex client voor Flutter'; - case 'about.viewLicensesDescription': return 'Bekijk licenties van third-party bibliotheken'; - case 'serverSelection.connectingToServer': return 'Verbinden met server...'; - case 'serverSelection.connectingToAllServers': return 'Verbinden met alle servers...'; - case 'serverSelection.connectToAllServers': return 'Verbind met alle servers'; - case 'serverSelection.allServerConnectionsFailed': return 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.'; - case 'serverSelection.foundServers': return ({required Object count}) => '${count} server(s) gevonden'; - case 'serverSelection.orSelectIndividually': return 'Of selecteer een server individueel:'; - case 'serverSelection.serverDebugCopied': return 'Server debug gegevens gekopieerd naar klembord'; - case 'serverSelection.copyDebugData': return 'Kopieer debug gegevens'; - case 'serverSelection.noServersFound': return 'Geen servers gevonden'; - case 'serverSelection.malformedServerData': return ({required Object count}) => '${count} server(s) gevonden met verkeerde data. Geen geldige servers beschikbaar.'; - case 'serverSelection.incompleteServerInfo': return 'Sommige servers hebben incomplete informatie en zijn overgeslagen. Controleer je Plex.tv account.'; - case 'serverSelection.incompleteConnectionInfo': return 'Server verbinding informatie is incompleet. Probeer opnieuw.'; - case 'serverSelection.malformedServerInfo': return ({required Object message}) => 'Server informatie is verkeerd geformatteerd: ${message}'; - case 'serverSelection.networkConnectionFailed': return 'Netwerkverbinding mislukt. Controleer je internetverbinding en probeer opnieuw.'; - case 'serverSelection.authenticationFailed': return 'Authenticatie mislukt. Log opnieuw in.'; - case 'serverSelection.plexServiceUnavailable': return 'Plex service niet beschikbaar. Probeer later opnieuw.'; - case 'serverSelection.failedToLoadServers': return ({required Object error}) => 'Kon servers niet laden: ${error}'; - case 'hubDetail.title': return 'Titel'; - case 'hubDetail.releaseYear': return 'Uitgavejaar'; - case 'hubDetail.dateAdded': return 'Datum toegevoegd'; - case 'hubDetail.rating': return 'Beoordeling'; - case 'hubDetail.noItemsFound': return 'Geen items gevonden'; - case 'logs.title': return 'Logbestanden'; - case 'logs.clearLogs': return 'Wis logs'; - case 'logs.copyLogs': return 'Kopieer logs'; - case 'logs.exportLogs': return 'Exporteer logs'; - case 'logs.noLogsToShow': return 'Geen logs om te tonen'; - case 'logs.error': return 'Fout:'; - case 'logs.stackTrace': return 'Stacktracering:'; - case 'licenses.relatedPackages': return 'Gerelateerde pakketten'; - case 'licenses.license': return 'Licentie'; - case 'licenses.licenseNumber': return ({required Object number}) => 'Licentie ${number}'; - case 'licenses.licensesCount': return ({required Object count}) => '${count} licenties'; - case 'navigation.home': return 'Thuis'; - case 'navigation.search': return 'Zoeken'; - case 'navigation.libraries': return 'Bibliotheken'; - case 'navigation.settings': return 'Instellingen'; - case 'playlists.title': return 'Afspeellijsten'; - case 'playlists.noPlaylists': return 'Geen afspeellijsten gevonden'; - case 'playlists.create': return 'Afspeellijst maken'; - case 'playlists.newPlaylist': return 'Nieuwe afspeellijst'; - case 'playlists.playlistName': return 'Naam afspeellijst'; - case 'playlists.enterPlaylistName': return 'Voer naam afspeellijst in'; - case 'playlists.edit': return 'Afspeellijst bewerken'; - case 'playlists.delete': return 'Afspeellijst verwijderen'; - case 'playlists.addTo': return 'Toevoegen aan afspeellijst'; - case 'playlists.addItems': return 'Items toevoegen'; - case 'playlists.removeItem': return 'Verwijderen uit afspeellijst'; - case 'playlists.clearPlaylist': return 'Afspeellijst wissen'; - case 'playlists.playAll': return 'Alles afspelen'; - case 'playlists.shuffle': return 'Willekeurig'; - case 'playlists.smartPlaylist': return 'Slimme afspeellijst'; - case 'playlists.regularPlaylist': return 'Normale afspeellijst'; - case 'playlists.itemCount': return ({required Object count}) => '${count} items'; - case 'playlists.oneItem': return '1 item'; - case 'playlists.emptyPlaylist': return 'Deze afspeellijst is leeg'; - case 'playlists.deleteConfirm': return 'Afspeellijst verwijderen?'; - case 'playlists.deleteMessage': return ({required Object name}) => 'Weet je zeker dat je "${name}" wilt verwijderen?'; - case 'playlists.created': return 'Afspeellijst gemaakt'; - case 'playlists.updated': return 'Afspeellijst bijgewerkt'; - case 'playlists.deleted': return 'Afspeellijst verwijderd'; - case 'playlists.itemAdded': return 'Toegevoegd aan afspeellijst'; - case 'playlists.itemRemoved': return 'Verwijderd uit afspeellijst'; - case 'playlists.selectPlaylist': return 'Selecteer afspeellijst'; - case 'playlists.createNewPlaylist': return 'Nieuwe afspeellijst maken'; - case 'playlists.errorCreating': return 'Fout bij maken afspeellijst'; - case 'playlists.errorDeleting': return 'Fout bij verwijderen afspeellijst'; - case 'playlists.errorLoading': return 'Fout bij laden afspeellijsten'; - case 'playlists.errorAdding': return 'Fout bij toevoegen aan afspeellijst'; - case 'playlists.errorReordering': return 'Fout bij herschikken van afspeellijstitem'; - case 'playlists.errorRemoving': return 'Fout bij verwijderen uit afspeellijst'; - case 'playlists.playlist': return 'Afspeellijst'; - case 'collections.title': return 'Collecties'; - case 'collections.collection': return 'Collectie'; - case 'collections.empty': return 'Collectie is leeg'; - case 'collections.noItems': return 'Geen items in deze collectie'; - case 'collections.unknownLibrarySection': return 'Kan niet verwijderen: onbekende bibliotheeksectie'; - case 'collections.deleteCollection': return 'Collectie verwijderen'; - case 'collections.deleteConfirm': return ({required Object title}) => 'Weet je zeker dat je "${title}" wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.'; - case 'collections.deleted': return 'Collectie verwijderd'; - case 'collections.deleteFailed': return 'Collectie verwijderen mislukt'; - case 'collections.deleteFailedWithError': return ({required Object error}) => 'Collectie verwijderen mislukt: ${error}'; - case 'collections.failedToLoadItems': return ({required Object error}) => 'Collectie-items laden mislukt: ${error}'; - case 'collections.addTo': return 'Toevoegen aan collectie'; - case 'collections.selectCollection': return 'Selecteer collectie'; - case 'collections.createNewCollection': return 'Nieuwe collectie maken'; - case 'collections.collectionName': return 'Collectienaam'; - case 'collections.enterCollectionName': return 'Voer collectienaam in'; - case 'collections.addedToCollection': return 'Toegevoegd aan collectie'; - case 'collections.errorAddingToCollection': return 'Fout bij toevoegen aan collectie'; - case 'collections.created': return 'Collectie gemaakt'; - case 'collections.removeFromCollection': return 'Verwijderen uit collectie'; - case 'collections.removeFromCollectionConfirm': return ({required Object title}) => '"${title}" uit deze collectie verwijderen?'; - case 'collections.removedFromCollection': return 'Uit collectie verwijderd'; - case 'collections.removeFromCollectionFailed': return 'Verwijderen uit collectie mislukt'; - case 'collections.removeFromCollectionError': return ({required Object error}) => 'Fout bij verwijderen uit collectie: ${error}'; - default: return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': + return 'Plezy'; + case 'app.loading': + return 'Laden...'; + case 'auth.signInWithPlex': + return 'Inloggen met Plex'; + case 'auth.showQRCode': + return 'Toon QR-code'; + case 'auth.cancel': + return 'Annuleren'; + case 'auth.authenticate': + return 'Authenticeren'; + case 'auth.retry': + return 'Opnieuw proberen'; + case 'auth.debugEnterToken': + return 'Debug: Voer Plex Token in'; + case 'auth.plexTokenLabel': + return 'Plex Authenticatietoken'; + case 'auth.plexTokenHint': + return 'Voer je Plex.tv token in'; + case 'auth.authenticationTimeout': + return 'Authenticatie verlopen. Probeer opnieuw.'; + case 'auth.scanQRCodeInstruction': + return 'Scan deze QR-code met een apparaat dat is ingelogd op Plex om te authenticeren.'; + case 'auth.waitingForAuth': + return 'Wachten op authenticatie...\nVoltooi het inloggen in je browser.'; + case 'common.cancel': + return 'Annuleren'; + case 'common.save': + return 'Opslaan'; + case 'common.close': + return 'Sluiten'; + case 'common.clear': + return 'Wissen'; + case 'common.reset': + return 'Resetten'; + case 'common.later': + return 'Later'; + case 'common.submit': + return 'Verzenden'; + case 'common.confirm': + return 'Bevestigen'; + case 'common.retry': + return 'Opnieuw proberen'; + case 'common.playNow': + return 'Nu afspelen'; + case 'common.logout': + return 'Uitloggen'; + case 'common.online': + return 'Online'; + case 'common.offline': + return 'Offline'; + case 'common.owned': + return 'Eigendom'; + case 'common.shared': + return 'Gedeeld'; + case 'common.current': + return 'HUIDIG'; + case 'common.unknown': + return 'Onbekend'; + case 'common.refresh': + return 'Vernieuwen'; + case 'common.yes': + return 'Ja'; + case 'common.no': + return 'Nee'; + case 'common.server': + return 'Server'; + case 'common.delete': + return 'Verwijderen'; + case 'common.shuffle': + return 'Willekeurig'; + case 'common.addTo': + return 'Toevoegen aan...'; + case 'screens.licenses': + return 'Licenties'; + case 'screens.selectServer': + return 'Selecteer server'; + case 'screens.switchProfile': + return 'Wissel van profiel'; + case 'screens.subtitleStyling': + return 'Ondertitel opmaak'; + case 'screens.search': + return 'Zoeken'; + case 'screens.logs': + return 'Logbestanden'; + case 'update.available': + return 'Update beschikbaar'; + case 'update.versionAvailable': + return ({required Object version}) => + 'Versie ${version} is beschikbaar'; + case 'update.currentVersion': + return ({required Object version}) => 'Huidig: ${version}'; + case 'update.skipVersion': + return 'Deze versie overslaan'; + case 'update.viewRelease': + return 'Bekijk release'; + case 'update.latestVersion': + return 'Je hebt de nieuwste versie'; + case 'update.checkFailed': + return 'Kon niet controleren op updates'; + case 'settings.title': + return 'Instellingen'; + case 'settings.language': + return 'Taal'; + case 'settings.theme': + return 'Thema'; + case 'settings.appearance': + return 'Uiterlijk'; + case 'settings.videoPlayback': + return 'Video afspelen'; + case 'settings.shufflePlay': + return 'Willekeurig afspelen'; + case 'settings.advanced': + return 'Geavanceerd'; + case 'settings.useSeasonPostersDescription': + return 'Toon seizoenposter in plaats van serieposter voor afleveringen'; + case 'settings.showHeroSectionDescription': + return 'Toon uitgelichte inhoud carrousel op startscherm'; + case 'settings.secondsLabel': + return 'Seconden'; + case 'settings.minutesLabel': + return 'Minuten'; + case 'settings.secondsShort': + return 's'; + case 'settings.minutesShort': + return 'm'; + case 'settings.durationHint': + return ({required Object min, required Object max}) => + 'Voer duur in (${min}-${max})'; + case 'settings.systemTheme': + return 'Systeem'; + case 'settings.systemThemeDescription': + return 'Volg systeeminstellingen'; + case 'settings.lightTheme': + return 'Licht'; + case 'settings.darkTheme': + return 'Donker'; + case 'settings.libraryDensity': + return 'Bibliotheek dichtheid'; + case 'settings.compact': + return 'Compact'; + case 'settings.compactDescription': + return 'Kleinere kaarten, meer items zichtbaar'; + case 'settings.normal': + return 'Normaal'; + case 'settings.normalDescription': + return 'Standaard grootte'; + case 'settings.comfortable': + return 'Comfortabel'; + case 'settings.comfortableDescription': + return 'Grotere kaarten, minder items zichtbaar'; + case 'settings.viewMode': + return 'Weergavemodus'; + case 'settings.gridView': + return 'Raster'; + case 'settings.gridViewDescription': + return 'Items weergeven in een rasterindeling'; + case 'settings.listView': + return 'Lijst'; + case 'settings.listViewDescription': + return 'Items weergeven in een lijstindeling'; + case 'settings.useSeasonPosters': + return 'Gebruik seizoenposters'; + case 'settings.showHeroSection': + return 'Toon hoofdsectie'; + case 'settings.hardwareDecoding': + return 'Hardware decodering'; + case 'settings.hardwareDecodingDescription': + return 'Gebruik hardware versnelling indien beschikbaar'; + case 'settings.bufferSize': + return 'Buffer grootte'; + case 'settings.bufferSizeMB': + return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': + return 'Ondertitel opmaak'; + case 'settings.subtitleStylingDescription': + return 'Pas ondertitel uiterlijk aan'; + case 'settings.smallSkipDuration': + return 'Korte skip duur'; + case 'settings.largeSkipDuration': + return 'Lange skip duur'; + case 'settings.secondsUnit': + return ({required Object seconds}) => '${seconds} seconden'; + case 'settings.defaultSleepTimer': + return 'Standaard slaap timer'; + case 'settings.minutesUnit': + return ({required Object minutes}) => 'bij ${minutes} minuten'; + case 'settings.rememberTrackSelections': + return 'Onthoud track selecties per serie/film'; + case 'settings.rememberTrackSelectionsDescription': + return 'Bewaar automatisch audio- en ondertiteltaalvoorkeuren wanneer je tracks wijzigt tijdens afspelen'; + case 'settings.unwatchedOnly': + return 'Alleen ongekeken'; + case 'settings.unwatchedOnlyDescription': + return 'Alleen ongekeken afleveringen opnemen in willekeurige wachtrij'; + case 'settings.shuffleOrderNavigation': + return 'Willekeurige volgorde navigatie'; + case 'settings.shuffleOrderNavigationDescription': + return 'Volgende/vorige knoppen volgen willekeurige volgorde'; + case 'settings.loopShuffleQueue': + return 'Herhaal willekeurige wachtrij'; + case 'settings.loopShuffleQueueDescription': + return 'Start wachtrij opnieuw bij het einde'; + case 'settings.videoPlayerControls': + return 'Videospeler bediening'; + case 'settings.keyboardShortcuts': + return 'Toetsenbord sneltoetsen'; + case 'settings.keyboardShortcutsDescription': + return 'Pas toetsenbord sneltoetsen aan'; + case 'settings.debugLogging': + return 'Debug logging'; + case 'settings.debugLoggingDescription': + return 'Schakel gedetailleerde logging in voor probleemoplossing'; + case 'settings.viewLogs': + return 'Bekijk logs'; + case 'settings.viewLogsDescription': + return 'Bekijk applicatie logs'; + case 'settings.clearCache': + return 'Cache wissen'; + case 'settings.clearCacheDescription': + return 'Dit wist alle gecachte afbeeldingen en gegevens. De app kan langer duren om inhoud te laden na het wissen van de cache.'; + case 'settings.clearCacheSuccess': + return 'Cache succesvol gewist'; + case 'settings.resetSettings': + return 'Instellingen resetten'; + case 'settings.resetSettingsDescription': + return 'Dit reset alle instellingen naar hun standaard waarden. Deze actie kan niet ongedaan gemaakt worden.'; + case 'settings.resetSettingsSuccess': + return 'Instellingen succesvol gereset'; + case 'settings.shortcutsReset': + return 'Sneltoetsen gereset naar standaard'; + case 'settings.about': + return 'Over'; + case 'settings.aboutDescription': + return 'App informatie en licenties'; + case 'settings.updates': + return 'Updates'; + case 'settings.updateAvailable': + return 'Update beschikbaar'; + case 'settings.checkForUpdates': + return 'Controleer op updates'; + case 'settings.validationErrorEnterNumber': + return 'Voer een geldig nummer in'; + case 'settings.validationErrorDuration': + return ({ + required Object min, + required Object max, + required Object unit, + }) => 'Duur moet tussen ${min} en ${max} ${unit} zijn'; + case 'settings.shortcutAlreadyAssigned': + return ({required Object action}) => + 'Sneltoets al toegewezen aan ${action}'; + case 'settings.shortcutUpdated': + return ({required Object action}) => + 'Sneltoets bijgewerkt voor ${action}'; + case 'settings.autoSkip': + return 'Automatisch Overslaan'; + case 'settings.autoSkipIntro': + return 'Intro Automatisch Overslaan'; + case 'settings.autoSkipIntroDescription': + return 'Intro-markeringen na enkele seconden automatisch overslaan'; + case 'settings.autoSkipCredits': + return 'Credits Automatisch Overslaan'; + case 'settings.autoSkipCreditsDescription': + return 'Credits automatisch overslaan en volgende aflevering afspelen'; + case 'settings.autoSkipDelay': + return 'Vertraging Automatisch Overslaan'; + case 'settings.autoSkipDelayDescription': + return ({required Object seconds}) => + '${seconds} seconden wachten voor automatisch overslaan'; + case 'search.hint': + return 'Zoek films, series, muziek...'; + case 'search.tryDifferentTerm': + return 'Probeer een andere zoekterm'; + case 'search.searchYourMedia': + return 'Zoek in je media'; + case 'search.enterTitleActorOrKeyword': + return 'Voer een titel, acteur of trefwoord in'; + case 'hotkeys.setShortcutFor': + return ({required Object actionName}) => + 'Stel sneltoets in voor ${actionName}'; + case 'hotkeys.clearShortcut': + return 'Wis sneltoets'; + case 'pinEntry.enterPin': + return 'Voer PIN in'; + case 'pinEntry.showPin': + return 'Toon PIN'; + case 'pinEntry.hidePin': + return 'Verberg PIN'; + case 'fileInfo.title': + return 'Bestand info'; + case 'fileInfo.video': + return 'Video'; + case 'fileInfo.audio': + return 'Audio'; + case 'fileInfo.file': + return 'Bestand'; + case 'fileInfo.advanced': + return 'Geavanceerd'; + case 'fileInfo.codec': + return 'Codec'; + case 'fileInfo.resolution': + return 'Resolutie'; + case 'fileInfo.bitrate': + return 'Bitrate'; + case 'fileInfo.frameRate': + return 'Frame rate'; + case 'fileInfo.aspectRatio': + return 'Beeldverhouding'; + case 'fileInfo.profile': + return 'Profiel'; + case 'fileInfo.bitDepth': + return 'Bit diepte'; + case 'fileInfo.colorSpace': + return 'Kleurruimte'; + case 'fileInfo.colorRange': + return 'Kleurbereik'; + case 'fileInfo.colorPrimaries': + return 'Kleurprimaires'; + case 'fileInfo.chromaSubsampling': + return 'Chroma subsampling'; + case 'fileInfo.channels': + return 'Kanalen'; + case 'fileInfo.path': + return 'Pad'; + case 'fileInfo.size': + return 'Grootte'; + case 'fileInfo.container': + return 'Container'; + case 'fileInfo.duration': + return 'Duur'; + case 'fileInfo.optimizedForStreaming': + return 'Geoptimaliseerd voor streaming'; + case 'fileInfo.has64bitOffsets': + return '64-bit Offsets'; + case 'mediaMenu.markAsWatched': + return 'Markeer als gekeken'; + case 'mediaMenu.markAsUnwatched': + return 'Markeer als ongekeken'; + case 'mediaMenu.removeFromContinueWatching': + return 'Verwijder uit Doorgaan met kijken'; + case 'mediaMenu.goToSeries': + return 'Ga naar serie'; + case 'mediaMenu.goToSeason': + return 'Ga naar seizoen'; + case 'mediaMenu.shufflePlay': + return 'Willekeurig afspelen'; + case 'mediaMenu.fileInfo': + return 'Bestand info'; + case 'accessibility.mediaCardMovie': + return ({required Object title}) => '${title}, film'; + case 'accessibility.mediaCardShow': + return ({required Object title}) => '${title}, TV-serie'; + case 'accessibility.mediaCardEpisode': + return ({required Object title, required Object episodeInfo}) => + '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': + return ({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': + return 'bekeken'; + case 'accessibility.mediaCardPartiallyWatched': + return ({required Object percent}) => '${percent} procent bekeken'; + case 'accessibility.mediaCardUnwatched': + return 'niet bekeken'; + case 'accessibility.tapToPlay': + return 'Tik om af te spelen'; + case 'tooltips.shufflePlay': + return 'Willekeurig afspelen'; + case 'tooltips.markAsWatched': + return 'Markeer als gekeken'; + case 'tooltips.markAsUnwatched': + return 'Markeer als ongekeken'; + case 'videoControls.audioLabel': + return 'Audio'; + case 'videoControls.subtitlesLabel': + return 'Ondertitels'; + case 'videoControls.resetToZero': + return 'Reset naar 0ms'; + case 'videoControls.addTime': + return ({required Object amount, required Object unit}) => + '+${amount}${unit}'; + case 'videoControls.minusTime': + return ({required Object amount, required Object unit}) => + '-${amount}${unit}'; + case 'videoControls.playsLater': + return ({required Object label}) => '${label} speelt later af'; + case 'videoControls.playsEarlier': + return ({required Object label}) => '${label} speelt eerder af'; + case 'videoControls.noOffset': + return 'Geen offset'; + case 'videoControls.letterbox': + return 'Letterbox'; + case 'videoControls.fillScreen': + return 'Vul scherm'; + case 'videoControls.stretch': + return 'Uitrekken'; + case 'videoControls.lockRotation': + return 'Vergrendel rotatie'; + case 'videoControls.unlockRotation': + return 'Ontgrendel rotatie'; + case 'videoControls.sleepTimer': + return 'Slaaptimer'; + case 'videoControls.timerActive': + return 'Timer actief'; + case 'videoControls.playbackWillPauseIn': + return ({required Object duration}) => + 'Afspelen wordt gepauzeerd over ${duration}'; + case 'videoControls.sleepTimerCompleted': + return 'Slaaptimer voltooid - afspelen gepauzeerd'; + case 'videoControls.playButton': + return 'Afspelen'; + case 'videoControls.pauseButton': + return 'Pauzeren'; + case 'videoControls.seekBackwardButton': + return ({required Object seconds}) => + 'Terugspoelen ${seconds} seconden'; + case 'videoControls.seekForwardButton': + return ({required Object seconds}) => + 'Vooruitspoelen ${seconds} seconden'; + case 'videoControls.previousButton': + return 'Vorige aflevering'; + case 'videoControls.nextButton': + return 'Volgende aflevering'; + case 'videoControls.previousChapterButton': + return 'Vorig hoofdstuk'; + case 'videoControls.nextChapterButton': + return 'Volgend hoofdstuk'; + case 'videoControls.volumeButton': + return 'Volume'; + case 'videoControls.muteButton': + return 'Dempen'; + case 'videoControls.unmuteButton': + return 'Dempen opheffen'; + case 'videoControls.settingsButton': + return 'Video-instellingen'; + case 'videoControls.audioTrackButton': + return 'Audiosporen'; + case 'videoControls.subtitlesButton': + return 'Ondertitels'; + case 'videoControls.chaptersButton': + return 'Hoofdstukken'; + case 'videoControls.versionsButton': + return 'Videoversies'; + case 'videoControls.aspectRatioButton': + return 'Beeldverhouding'; + case 'videoControls.fullscreenButton': + return 'Volledig scherm activeren'; + case 'videoControls.exitFullscreenButton': + return 'Volledig scherm verlaten'; + case 'videoControls.rotationLockButton': + return 'Rotatievergrendeling'; + case 'videoControls.timelineSlider': + return 'Videotijdlijn'; + case 'videoControls.volumeSlider': + return 'Volumeniveau'; + case 'videoControls.backButton': + return 'Terug'; + case 'userStatus.admin': + return 'Beheerder'; + case 'userStatus.restricted': + return 'Beperkt'; + case 'userStatus.protected': + return 'Beschermd'; + case 'userStatus.current': + return 'HUIDIG'; + case 'messages.markedAsWatched': + return 'Gemarkeerd als gekeken'; + case 'messages.markedAsUnwatched': + return 'Gemarkeerd als ongekeken'; + case 'messages.removedFromContinueWatching': + return 'Verwijderd uit Doorgaan met kijken'; + case 'messages.errorLoading': + return ({required Object error}) => 'Fout: ${error}'; + case 'messages.fileInfoNotAvailable': + return 'Bestand informatie niet beschikbaar'; + case 'messages.errorLoadingFileInfo': + return ({required Object error}) => + 'Fout bij laden bestand info: ${error}'; + case 'messages.errorLoadingSeries': + return 'Fout bij laden serie'; + case 'messages.errorLoadingSeason': + return 'Fout bij laden seizoen'; + case 'messages.musicNotSupported': + return 'Muziek afspelen wordt nog niet ondersteund'; + case 'messages.logsCleared': + return 'Logs gewist'; + case 'messages.logsCopied': + return 'Logs gekopieerd naar klembord'; + case 'messages.noLogsAvailable': + return 'Geen logs beschikbaar'; + case 'messages.libraryScanning': + return ({required Object title}) => 'Scannen "${title}"...'; + case 'messages.libraryScanStarted': + return ({required Object title}) => + 'Bibliotheek scan gestart voor "${title}"'; + case 'messages.libraryScanFailed': + return ({required Object error}) => + 'Kon bibliotheek niet scannen: ${error}'; + case 'messages.metadataRefreshing': + return ({required Object title}) => + 'Metadata vernieuwen voor "${title}"...'; + case 'messages.metadataRefreshStarted': + return ({required Object title}) => + 'Metadata vernieuwen gestart voor "${title}"'; + case 'messages.metadataRefreshFailed': + return ({required Object error}) => + 'Kon metadata niet vernieuwen: ${error}'; + case 'messages.noPlexToken': + return 'Geen Plex token gevonden. Log opnieuw in.'; + case 'messages.logoutConfirm': + return 'Weet je zeker dat je wilt uitloggen?'; + case 'messages.noSeasonsFound': + return 'Geen seizoenen gevonden'; + case 'messages.noEpisodesFound': + return 'Geen afleveringen gevonden in eerste seizoen'; + case 'messages.noEpisodesFoundGeneral': + return 'Geen afleveringen gevonden'; + case 'messages.noResultsFound': + return 'Geen resultaten gevonden'; + case 'messages.sleepTimerSet': + return ({required Object label}) => + 'Slaap timer ingesteld voor ${label}'; + case 'messages.failedToSwitchProfile': + return ({required Object displayName}) => + 'Kon niet wisselen naar ${displayName}'; + case 'messages.noItemsAvailable': + return 'Geen items beschikbaar'; + case 'messages.failedToCreatePlayQueue': + return 'Kan afspeelwachtrij niet maken'; + case 'messages.failedToCreatePlayQueueNoItems': + return 'Kan afspeelwachtrij niet maken - geen items'; + case 'messages.failedPlayback': + return ({required Object action, required Object error}) => + 'Afspelen van ${action} mislukt: ${error}'; + case 'profile.noUsersAvailable': + return 'Geen gebruikers beschikbaar'; + case 'subtitlingStyling.stylingOptions': + return 'Opmaak opties'; + case 'subtitlingStyling.fontSize': + return 'Lettergrootte'; + case 'subtitlingStyling.textColor': + return 'Tekstkleur'; + case 'subtitlingStyling.borderSize': + return 'Rand grootte'; + case 'subtitlingStyling.borderColor': + return 'Randkleur'; + case 'subtitlingStyling.backgroundOpacity': + return 'Achtergrond transparantie'; + case 'subtitlingStyling.backgroundColor': + return 'Achtergrondkleur'; + case 'dialog.confirmAction': + return 'Bevestig actie'; + case 'dialog.areYouSure': + return 'Weet je zeker dat je deze actie wilt uitvoeren?'; + case 'dialog.cancel': + return 'Annuleren'; + case 'dialog.playNow': + return 'Nu afspelen'; + case 'discover.title': + return 'Ontdekken'; + case 'discover.switchProfile': + return 'Wissel van profiel'; + case 'discover.switchServer': + return 'Wissel van server'; + case 'discover.logout': + return 'Uitloggen'; + case 'discover.noContentAvailable': + return 'Geen inhoud beschikbaar'; + case 'discover.addMediaToLibraries': + return 'Voeg wat media toe aan je bibliotheken'; + case 'discover.continueWatching': + return 'Verder kijken'; + case 'discover.recentlyAdded': + return 'Recent toegevoegd'; + case 'discover.play': + return 'Afspelen'; + case 'discover.resume': + return 'Hervatten'; + case 'discover.playEpisode': + return ({required Object season, required Object episode}) => + 'Speel S${season}, E${episode}'; + case 'discover.resumeEpisode': + return ({required Object season, required Object episode}) => + 'Hervat S${season}, E${episode}'; + case 'discover.pause': + return 'Pauzeren'; + case 'discover.overview': + return 'Overzicht'; + case 'discover.cast': + return 'Acteurs'; + case 'discover.seasons': + return 'Seizoenen'; + case 'discover.studio': + return 'Studio'; + case 'discover.rating': + return 'Leeftijd'; + case 'discover.watched': + return 'Bekeken'; + case 'discover.episodeCount': + return ({required Object count}) => '${count} afleveringen'; + case 'discover.watchedProgress': + return ({required Object watched, required Object total}) => + '${watched}/${total} gekeken'; + case 'discover.movie': + return 'Film'; + case 'discover.tvShow': + return 'TV Serie'; + case 'discover.minutesLeft': + return ({required Object minutes}) => '${minutes} min over'; + case 'errors.searchFailed': + return ({required Object error}) => 'Zoeken mislukt: ${error}'; + case 'errors.connectionTimeout': + return ({required Object context}) => + 'Verbinding time-out tijdens laden ${context}'; + case 'errors.connectionFailed': + return 'Kan geen verbinding maken met Plex server'; + case 'errors.failedToLoad': + return ({required Object context, required Object error}) => + 'Kon ${context} niet laden: ${error}'; + case 'errors.noClientAvailable': + return 'Geen client beschikbaar'; + case 'errors.authenticationFailed': + return ({required Object error}) => 'Authenticatie mislukt: ${error}'; + case 'errors.couldNotLaunchUrl': + return 'Kon auth URL niet openen'; + case 'errors.pleaseEnterToken': + return 'Voer een token in'; + case 'errors.invalidToken': + return 'Ongeldig token'; + case 'errors.failedToVerifyToken': + return ({required Object error}) => + 'Kon token niet verifiëren: ${error}'; + case 'errors.failedToSwitchProfile': + return ({required Object displayName}) => + 'Kon niet wisselen naar ${displayName}'; + case 'errors.connectionFailedGeneric': + return 'Verbinding mislukt'; + case 'libraries.title': + return 'Bibliotheken'; + case 'libraries.scanLibraryFiles': + return 'Scan bibliotheek bestanden'; + case 'libraries.scanLibrary': + return 'Scan bibliotheek'; + case 'libraries.analyze': + return 'Analyseren'; + case 'libraries.analyzeLibrary': + return 'Analyseer bibliotheek'; + case 'libraries.refreshMetadata': + return 'Vernieuw metadata'; + case 'libraries.emptyTrash': + return 'Prullenbak legen'; + case 'libraries.emptyingTrash': + return ({required Object title}) => + 'Prullenbak legen voor "${title}"...'; + case 'libraries.trashEmptied': + return ({required Object title}) => + 'Prullenbak geleegd voor "${title}"'; + case 'libraries.failedToEmptyTrash': + return ({required Object error}) => + 'Kon prullenbak niet legen: ${error}'; + case 'libraries.analyzing': + return ({required Object title}) => 'Analyseren "${title}"...'; + case 'libraries.analysisStarted': + return ({required Object title}) => 'Analyse gestart voor "${title}"'; + case 'libraries.failedToAnalyze': + return ({required Object error}) => + 'Kon bibliotheek niet analyseren: ${error}'; + case 'libraries.noLibrariesFound': + return 'Geen bibliotheken gevonden'; + case 'libraries.thisLibraryIsEmpty': + return 'Deze bibliotheek is leeg'; + case 'libraries.all': + return 'Alles'; + case 'libraries.clearAll': + return 'Alles wissen'; + case 'libraries.scanLibraryConfirm': + return ({required Object title}) => + 'Weet je zeker dat je "${title}" wilt scannen?'; + case 'libraries.analyzeLibraryConfirm': + return ({required Object title}) => + 'Weet je zeker dat je "${title}" wilt analyseren?'; + case 'libraries.refreshMetadataConfirm': + return ({required Object title}) => + 'Weet je zeker dat je metadata wilt vernieuwen voor "${title}"?'; + case 'libraries.emptyTrashConfirm': + return ({required Object title}) => + 'Weet je zeker dat je de prullenbak wilt legen voor "${title}"?'; + case 'libraries.manageLibraries': + return 'Beheer bibliotheken'; + case 'libraries.sort': + return 'Sorteren'; + case 'libraries.sortBy': + return 'Sorteer op'; + case 'libraries.filters': + return 'Filters'; + case 'libraries.loadingLibraryWithCount': + return ({required Object count}) => + 'Bibliotheek laden... (${count} items geladen)'; + case 'libraries.confirmActionMessage': + return 'Weet je zeker dat je deze actie wilt uitvoeren?'; + case 'libraries.showLibrary': + return 'Toon bibliotheek'; + case 'libraries.hideLibrary': + return 'Verberg bibliotheek'; + case 'libraries.libraryOptions': + return 'Bibliotheek opties'; + case 'libraries.content': + return 'bibliotheekinhoud'; + case 'libraries.selectLibrary': + return 'Bibliotheek kiezen'; + case 'libraries.filtersWithCount': + return ({required Object count}) => 'Filters (${count})'; + case 'libraries.noRecommendations': + return 'Geen aanbevelingen beschikbaar'; + case 'libraries.noCollections': + return 'Geen collecties in deze bibliotheek'; + case 'libraries.noFoldersFound': + return 'Geen mappen gevonden'; + case 'libraries.folders': + return 'mappen'; + case 'libraries.tabs.recommended': + return 'Aanbevolen'; + case 'libraries.tabs.browse': + return 'Bladeren'; + case 'libraries.tabs.collections': + return 'Collecties'; + case 'libraries.tabs.playlists': + return 'Afspeellijsten'; + case 'libraries.groupings.all': + return 'Alles'; + case 'libraries.groupings.movies': + return 'Films'; + case 'libraries.groupings.shows': + return 'Series'; + case 'libraries.groupings.seasons': + return 'Seizoenen'; + case 'libraries.groupings.episodes': + return 'Afleveringen'; + case 'libraries.groupings.folders': + return 'Mappen'; + case 'about.title': + return 'Over'; + case 'about.openSourceLicenses': + return 'Open Source licenties'; + case 'about.versionLabel': + return ({required Object version}) => 'Versie ${version}'; + case 'about.appDescription': + return 'Een mooie Plex client voor Flutter'; + case 'about.viewLicensesDescription': + return 'Bekijk licenties van third-party bibliotheken'; + case 'serverSelection.connectingToServer': + return 'Verbinden met server...'; + case 'serverSelection.connectingToAllServers': + return 'Verbinden met alle servers...'; + case 'serverSelection.connectToAllServers': + return 'Verbind met alle servers'; + case 'serverSelection.allServerConnectionsFailed': + return 'Kon niet verbinden met servers. Controleer je netwerk en probeer opnieuw.'; + case 'serverSelection.foundServers': + return ({required Object count}) => '${count} server(s) gevonden'; + case 'serverSelection.orSelectIndividually': + return 'Of selecteer een server individueel:'; + case 'serverSelection.serverDebugCopied': + return 'Server debug gegevens gekopieerd naar klembord'; + case 'serverSelection.copyDebugData': + return 'Kopieer debug gegevens'; + case 'serverSelection.noServersFound': + return 'Geen servers gevonden'; + case 'serverSelection.malformedServerData': + return ({required Object count}) => + '${count} server(s) gevonden met verkeerde data. Geen geldige servers beschikbaar.'; + case 'serverSelection.incompleteServerInfo': + return 'Sommige servers hebben incomplete informatie en zijn overgeslagen. Controleer je Plex.tv account.'; + case 'serverSelection.incompleteConnectionInfo': + return 'Server verbinding informatie is incompleet. Probeer opnieuw.'; + case 'serverSelection.malformedServerInfo': + return ({required Object message}) => + 'Server informatie is verkeerd geformatteerd: ${message}'; + case 'serverSelection.networkConnectionFailed': + return 'Netwerkverbinding mislukt. Controleer je internetverbinding en probeer opnieuw.'; + case 'serverSelection.authenticationFailed': + return 'Authenticatie mislukt. Log opnieuw in.'; + case 'serverSelection.plexServiceUnavailable': + return 'Plex service niet beschikbaar. Probeer later opnieuw.'; + case 'serverSelection.failedToLoadServers': + return ({required Object error}) => 'Kon servers niet laden: ${error}'; + case 'hubDetail.title': + return 'Titel'; + case 'hubDetail.releaseYear': + return 'Uitgavejaar'; + case 'hubDetail.dateAdded': + return 'Datum toegevoegd'; + case 'hubDetail.rating': + return 'Beoordeling'; + case 'hubDetail.noItemsFound': + return 'Geen items gevonden'; + case 'logs.title': + return 'Logbestanden'; + case 'logs.clearLogs': + return 'Wis logs'; + case 'logs.copyLogs': + return 'Kopieer logs'; + case 'logs.exportLogs': + return 'Exporteer logs'; + case 'logs.noLogsToShow': + return 'Geen logs om te tonen'; + case 'logs.error': + return 'Fout:'; + case 'logs.stackTrace': + return 'Stacktracering:'; + case 'licenses.relatedPackages': + return 'Gerelateerde pakketten'; + case 'licenses.license': + return 'Licentie'; + case 'licenses.licenseNumber': + return ({required Object number}) => 'Licentie ${number}'; + case 'licenses.licensesCount': + return ({required Object count}) => '${count} licenties'; + case 'navigation.home': + return 'Thuis'; + case 'navigation.search': + return 'Zoeken'; + case 'navigation.libraries': + return 'Bibliotheken'; + case 'navigation.settings': + return 'Instellingen'; + case 'playlists.title': + return 'Afspeellijsten'; + case 'playlists.noPlaylists': + return 'Geen afspeellijsten gevonden'; + case 'playlists.create': + return 'Afspeellijst maken'; + case 'playlists.newPlaylist': + return 'Nieuwe afspeellijst'; + case 'playlists.playlistName': + return 'Naam afspeellijst'; + case 'playlists.enterPlaylistName': + return 'Voer naam afspeellijst in'; + case 'playlists.edit': + return 'Afspeellijst bewerken'; + case 'playlists.delete': + return 'Afspeellijst verwijderen'; + case 'playlists.addTo': + return 'Toevoegen aan afspeellijst'; + case 'playlists.addItems': + return 'Items toevoegen'; + case 'playlists.removeItem': + return 'Verwijderen uit afspeellijst'; + case 'playlists.clearPlaylist': + return 'Afspeellijst wissen'; + case 'playlists.playAll': + return 'Alles afspelen'; + case 'playlists.shuffle': + return 'Willekeurig'; + case 'playlists.smartPlaylist': + return 'Slimme afspeellijst'; + case 'playlists.regularPlaylist': + return 'Normale afspeellijst'; + case 'playlists.itemCount': + return ({required Object count}) => '${count} items'; + case 'playlists.oneItem': + return '1 item'; + case 'playlists.emptyPlaylist': + return 'Deze afspeellijst is leeg'; + case 'playlists.deleteConfirm': + return 'Afspeellijst verwijderen?'; + case 'playlists.deleteMessage': + return ({required Object name}) => + 'Weet je zeker dat je "${name}" wilt verwijderen?'; + case 'playlists.created': + return 'Afspeellijst gemaakt'; + case 'playlists.updated': + return 'Afspeellijst bijgewerkt'; + case 'playlists.deleted': + return 'Afspeellijst verwijderd'; + case 'playlists.itemAdded': + return 'Toegevoegd aan afspeellijst'; + case 'playlists.itemRemoved': + return 'Verwijderd uit afspeellijst'; + case 'playlists.selectPlaylist': + return 'Selecteer afspeellijst'; + case 'playlists.createNewPlaylist': + return 'Nieuwe afspeellijst maken'; + case 'playlists.errorCreating': + return 'Fout bij maken afspeellijst'; + case 'playlists.errorDeleting': + return 'Fout bij verwijderen afspeellijst'; + case 'playlists.errorLoading': + return 'Fout bij laden afspeellijsten'; + case 'playlists.errorAdding': + return 'Fout bij toevoegen aan afspeellijst'; + case 'playlists.errorReordering': + return 'Fout bij herschikken van afspeellijstitem'; + case 'playlists.errorRemoving': + return 'Fout bij verwijderen uit afspeellijst'; + case 'playlists.playlist': + return 'Afspeellijst'; + case 'collections.title': + return 'Collecties'; + case 'collections.collection': + return 'Collectie'; + case 'collections.empty': + return 'Collectie is leeg'; + case 'collections.noItems': + return 'Geen items in deze collectie'; + case 'collections.unknownLibrarySection': + return 'Kan niet verwijderen: onbekende bibliotheeksectie'; + case 'collections.deleteCollection': + return 'Collectie verwijderen'; + case 'collections.deleteConfirm': + return ({required Object title}) => + 'Weet je zeker dat je "${title}" wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt.'; + case 'collections.deleted': + return 'Collectie verwijderd'; + case 'collections.deleteFailed': + return 'Collectie verwijderen mislukt'; + case 'collections.deleteFailedWithError': + return ({required Object error}) => + 'Collectie verwijderen mislukt: ${error}'; + case 'collections.failedToLoadItems': + return ({required Object error}) => + 'Collectie-items laden mislukt: ${error}'; + case 'collections.addTo': + return 'Toevoegen aan collectie'; + case 'collections.selectCollection': + return 'Selecteer collectie'; + case 'collections.createNewCollection': + return 'Nieuwe collectie maken'; + case 'collections.collectionName': + return 'Collectienaam'; + case 'collections.enterCollectionName': + return 'Voer collectienaam in'; + case 'collections.addedToCollection': + return 'Toegevoegd aan collectie'; + case 'collections.errorAddingToCollection': + return 'Fout bij toevoegen aan collectie'; + case 'collections.created': + return 'Collectie gemaakt'; + case 'collections.removeFromCollection': + return 'Verwijderen uit collectie'; + case 'collections.removeFromCollectionConfirm': + return ({required Object title}) => + '"${title}" uit deze collectie verwijderen?'; + case 'collections.removedFromCollection': + return 'Uit collectie verwijderd'; + case 'collections.removeFromCollectionFailed': + return 'Verwijderen uit collectie mislukt'; + case 'collections.removeFromCollectionError': + return ({required Object error}) => + 'Fout bij verwijderen uit collectie: ${error}'; + default: + return null; + } + } } extension on _StringsSv { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': return 'Plezy'; - case 'app.loading': return 'Laddar...'; - case 'auth.signInWithPlex': return 'Logga in med Plex'; - case 'auth.showQRCode': return 'Visa QR-kod'; - case 'auth.cancel': return 'Avbryt'; - case 'auth.authenticate': return 'Autentisera'; - case 'auth.retry': return 'Försök igen'; - case 'auth.debugEnterToken': return 'Debug: Ange Plex-token'; - case 'auth.plexTokenLabel': return 'Plex-autentiseringstoken'; - case 'auth.plexTokenHint': return 'Ange din Plex.tv-token'; - case 'auth.authenticationTimeout': return 'Autentisering tog för lång tid. Försök igen.'; - case 'auth.scanQRCodeInstruction': return 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.'; - case 'auth.waitingForAuth': return 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.'; - case 'common.cancel': return 'Avbryt'; - case 'common.save': return 'Spara'; - case 'common.close': return 'Stäng'; - case 'common.clear': return 'Rensa'; - case 'common.reset': return 'Återställ'; - case 'common.later': return 'Senare'; - case 'common.submit': return 'Skicka'; - case 'common.confirm': return 'Bekräfta'; - case 'common.retry': return 'Försök igen'; - case 'common.playNow': return 'Spela nu'; - case 'common.logout': return 'Logga ut'; - case 'common.online': return 'Online'; - case 'common.offline': return 'Offline'; - case 'common.owned': return 'Egen'; - case 'common.shared': return 'Delad'; - case 'common.current': return 'NUVARANDE'; - case 'common.unknown': return 'Okänd'; - case 'common.refresh': return 'Uppdatera'; - case 'common.yes': return 'Ja'; - case 'common.no': return 'Nej'; - case 'common.server': return 'Server'; - case 'common.delete': return 'Ta bort'; - case 'common.shuffle': return 'Blanda'; - case 'common.addTo': return 'Lägg till i...'; - case 'screens.licenses': return 'Licenser'; - case 'screens.selectServer': return 'Välj server'; - case 'screens.switchProfile': return 'Byt profil'; - case 'screens.subtitleStyling': return 'Undertext-styling'; - case 'screens.search': return 'Sök'; - case 'screens.logs': return 'Loggar'; - case 'update.available': return 'Uppdatering tillgänglig'; - case 'update.versionAvailable': return ({required Object version}) => 'Version ${version} är tillgänglig'; - case 'update.currentVersion': return ({required Object version}) => 'Nuvarande: ${version}'; - case 'update.skipVersion': return 'Hoppa över denna version'; - case 'update.viewRelease': return 'Visa release'; - case 'update.latestVersion': return 'Du har den senaste versionen'; - case 'update.checkFailed': return 'Misslyckades att kontrollera uppdateringar'; - case 'settings.title': return 'Inställningar'; - case 'settings.language': return 'Språk'; - case 'settings.theme': return 'Tema'; - case 'settings.appearance': return 'Utseende'; - case 'settings.videoPlayback': return 'Videouppspelning'; - case 'settings.shufflePlay': return 'Blanda uppspelning'; - case 'settings.advanced': return 'Avancerat'; - case 'settings.useSeasonPostersDescription': return 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; - case 'settings.showHeroSectionDescription': return 'Visa utvalda innehållskarusell på startsidan'; - case 'settings.secondsLabel': return 'Sekunder'; - case 'settings.minutesLabel': return 'Minuter'; - case 'settings.secondsShort': return 's'; - case 'settings.minutesShort': return 'm'; - case 'settings.durationHint': return ({required Object min, required Object max}) => 'Ange tid (${min}-${max})'; - case 'settings.systemTheme': return 'System'; - case 'settings.systemThemeDescription': return 'Följ systeminställningar'; - case 'settings.lightTheme': return 'Ljust'; - case 'settings.darkTheme': return 'Mörkt'; - case 'settings.libraryDensity': return 'Biblioteksdensitet'; - case 'settings.compact': return 'Kompakt'; - case 'settings.compactDescription': return 'Mindre kort, fler objekt synliga'; - case 'settings.normal': return 'Normal'; - case 'settings.normalDescription': return 'Standardstorlek'; - case 'settings.comfortable': return 'Bekväm'; - case 'settings.comfortableDescription': return 'Större kort, färre objekt synliga'; - case 'settings.viewMode': return 'Visningsläge'; - case 'settings.gridView': return 'Rutnät'; - case 'settings.gridViewDescription': return 'Visa objekt i rutnätslayout'; - case 'settings.listView': return 'Lista'; - case 'settings.listViewDescription': return 'Visa objekt i listlayout'; - case 'settings.useSeasonPosters': return 'Använd säsongsaffischer'; - case 'settings.showHeroSection': return 'Visa hjältesektion'; - case 'settings.hardwareDecoding': return 'Hårdvaruavkodning'; - case 'settings.hardwareDecodingDescription': return 'Använd hårdvaruacceleration när tillgängligt'; - case 'settings.bufferSize': return 'Bufferstorlek'; - case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': return 'Undertext-styling'; - case 'settings.subtitleStylingDescription': return 'Anpassa undertextutseende'; - case 'settings.smallSkipDuration': return 'Kort hoppvaraktighet'; - case 'settings.largeSkipDuration': return 'Lång hoppvaraktighet'; - case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} sekunder'; - case 'settings.defaultSleepTimer': return 'Standard sovtimer'; - case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} minuter'; - case 'settings.rememberTrackSelections': return 'Kom ihåg spårval per serie/film'; - case 'settings.rememberTrackSelectionsDescription': return 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; - case 'settings.unwatchedOnly': return 'Endast osedda'; - case 'settings.unwatchedOnlyDescription': return 'Inkludera endast osedda avsnitt i blandningskön'; - case 'settings.shuffleOrderNavigation': return 'Blandningsordning-navigation'; - case 'settings.shuffleOrderNavigationDescription': return 'Nästa/föregående knappar följer blandad ordning'; - case 'settings.loopShuffleQueue': return 'Loopa blandningskö'; - case 'settings.loopShuffleQueueDescription': return 'Starta om kö när slutet nås'; - case 'settings.videoPlayerControls': return 'Videospelar-kontroller'; - case 'settings.keyboardShortcuts': return 'Tangentbordsgenvägar'; - case 'settings.keyboardShortcutsDescription': return 'Anpassa tangentbordsgenvägar'; - case 'settings.debugLogging': return 'Felsökningsloggning'; - case 'settings.debugLoggingDescription': return 'Aktivera detaljerad loggning för felsökning'; - case 'settings.viewLogs': return 'Visa loggar'; - case 'settings.viewLogsDescription': return 'Visa applikationsloggar'; - case 'settings.clearCache': return 'Rensa cache'; - case 'settings.clearCacheDescription': return 'Detta rensar alla cachade bilder och data. Appen kan ta längre tid att ladda innehåll efter cache-rensning.'; - case 'settings.clearCacheSuccess': return 'Cache rensad framgångsrikt'; - case 'settings.resetSettings': return 'Återställ inställningar'; - case 'settings.resetSettingsDescription': return 'Detta återställer alla inställningar till standardvärden. Denna åtgärd kan inte ångras.'; - case 'settings.resetSettingsSuccess': return 'Inställningar återställda framgångsrikt'; - case 'settings.shortcutsReset': return 'Genvägar återställda till standard'; - case 'settings.about': return 'Om'; - case 'settings.aboutDescription': return 'Appinformation och licenser'; - case 'settings.updates': return 'Uppdateringar'; - case 'settings.updateAvailable': return 'Uppdatering tillgänglig'; - case 'settings.checkForUpdates': return 'Kontrollera uppdateringar'; - case 'settings.validationErrorEnterNumber': return 'Vänligen ange ett giltigt nummer'; - case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => 'Tiden måste vara mellan ${min} och ${max} ${unit}'; - case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => 'Genväg redan tilldelad ${action}'; - case 'settings.shortcutUpdated': return ({required Object action}) => 'Genväg uppdaterad för ${action}'; - case 'settings.autoSkip': return 'Auto Hoppa Över'; - case 'settings.autoSkipIntro': return 'Hoppa Över Intro Automatiskt'; - case 'settings.autoSkipIntroDescription': return 'Hoppa automatiskt över intro-markörer efter några sekunder'; - case 'settings.autoSkipCredits': return 'Hoppa Över Credits Automatiskt'; - case 'settings.autoSkipCreditsDescription': return 'Hoppa automatiskt över credits och spela nästa avsnitt'; - case 'settings.autoSkipDelay': return 'Fördröjning Auto Hoppa Över'; - case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => 'Vänta ${seconds} sekunder innan automatisk överhoppning'; - case 'search.hint': return 'Sök filmer, serier, musik...'; - case 'search.tryDifferentTerm': return 'Prova en annan sökterm'; - case 'search.searchYourMedia': return 'Sök i dina media'; - case 'search.enterTitleActorOrKeyword': return 'Ange en titel, skådespelare eller nyckelord'; - case 'hotkeys.setShortcutFor': return ({required Object actionName}) => 'Sätt genväg för ${actionName}'; - case 'hotkeys.clearShortcut': return 'Rensa genväg'; - case 'pinEntry.enterPin': return 'Ange PIN'; - case 'pinEntry.showPin': return 'Visa PIN'; - case 'pinEntry.hidePin': return 'Dölj PIN'; - case 'fileInfo.title': return 'Filinformation'; - case 'fileInfo.video': return 'Video'; - case 'fileInfo.audio': return 'Ljud'; - case 'fileInfo.file': return 'Fil'; - case 'fileInfo.advanced': return 'Avancerat'; - case 'fileInfo.codec': return 'Kodek'; - case 'fileInfo.resolution': return 'Upplösning'; - case 'fileInfo.bitrate': return 'Bithastighet'; - case 'fileInfo.frameRate': return 'Bildfrekvens'; - case 'fileInfo.aspectRatio': return 'Bildförhållande'; - case 'fileInfo.profile': return 'Profil'; - case 'fileInfo.bitDepth': return 'Bitdjup'; - case 'fileInfo.colorSpace': return 'Färgrymd'; - case 'fileInfo.colorRange': return 'Färgområde'; - case 'fileInfo.colorPrimaries': return 'Färggrunder'; - case 'fileInfo.chromaSubsampling': return 'Kroma-undersampling'; - case 'fileInfo.channels': return 'Kanaler'; - case 'fileInfo.path': return 'Sökväg'; - case 'fileInfo.size': return 'Storlek'; - case 'fileInfo.container': return 'Container'; - case 'fileInfo.duration': return 'Varaktighet'; - case 'fileInfo.optimizedForStreaming': return 'Optimerad för streaming'; - case 'fileInfo.has64bitOffsets': return '64-bit offset'; - case 'mediaMenu.markAsWatched': return 'Markera som sedd'; - case 'mediaMenu.markAsUnwatched': return 'Markera som osedd'; - case 'mediaMenu.removeFromContinueWatching': return 'Ta bort från Fortsätt titta'; - case 'mediaMenu.goToSeries': return 'Gå till serie'; - case 'mediaMenu.goToSeason': return 'Gå till säsong'; - case 'mediaMenu.shufflePlay': return 'Blanda uppspelning'; - case 'mediaMenu.fileInfo': return 'Filinformation'; - case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, film'; - case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, TV-serie'; - case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': return 'sedd'; - case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '${percent} procent sedd'; - case 'accessibility.mediaCardUnwatched': return 'osedd'; - case 'accessibility.tapToPlay': return 'Tryck för att spela'; - case 'tooltips.shufflePlay': return 'Blanda uppspelning'; - case 'tooltips.markAsWatched': return 'Markera som sedd'; - case 'tooltips.markAsUnwatched': return 'Markera som osedd'; - case 'videoControls.audioLabel': return 'Ljud'; - case 'videoControls.subtitlesLabel': return 'Undertexter'; - case 'videoControls.resetToZero': return 'Återställ till 0ms'; - case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': return ({required Object label}) => '${label} spelas senare'; - case 'videoControls.playsEarlier': return ({required Object label}) => '${label} spelas tidigare'; - case 'videoControls.noOffset': return 'Ingen offset'; - case 'videoControls.letterbox': return 'Letterbox'; - case 'videoControls.fillScreen': return 'Fyll skärm'; - case 'videoControls.stretch': return 'Sträck'; - case 'videoControls.lockRotation': return 'Lås rotation'; - case 'videoControls.unlockRotation': return 'Lås upp rotation'; - case 'videoControls.sleepTimer': return 'Sovtimer'; - case 'videoControls.timerActive': return 'Timer aktiv'; - case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => 'Uppspelningen pausas om ${duration}'; - case 'videoControls.sleepTimerCompleted': return 'Sovtimer slutförd - uppspelning pausad'; - case 'videoControls.playButton': return 'Spela'; - case 'videoControls.pauseButton': return 'Pausa'; - case 'videoControls.seekBackwardButton': return ({required Object seconds}) => 'Spola bakåt ${seconds} sekunder'; - case 'videoControls.seekForwardButton': return ({required Object seconds}) => 'Spola framåt ${seconds} sekunder'; - case 'videoControls.previousButton': return 'Föregående avsnitt'; - case 'videoControls.nextButton': return 'Nästa avsnitt'; - case 'videoControls.previousChapterButton': return 'Föregående kapitel'; - case 'videoControls.nextChapterButton': return 'Nästa kapitel'; - case 'videoControls.volumeButton': return 'Volym'; - case 'videoControls.muteButton': return 'Tysta'; - case 'videoControls.unmuteButton': return 'Slå på ljud'; - case 'videoControls.settingsButton': return 'Videoinställningar'; - case 'videoControls.audioTrackButton': return 'Ljudspår'; - case 'videoControls.subtitlesButton': return 'Undertexter'; - case 'videoControls.chaptersButton': return 'Kapitel'; - case 'videoControls.versionsButton': return 'Videoversioner'; - case 'videoControls.aspectRatioButton': return 'Bildförhållande'; - case 'videoControls.fullscreenButton': return 'Aktivera helskärm'; - case 'videoControls.exitFullscreenButton': return 'Avsluta helskärm'; - case 'videoControls.rotationLockButton': return 'Rotationslås'; - case 'videoControls.timelineSlider': return 'Videotidslinje'; - case 'videoControls.volumeSlider': return 'Volymnivå'; - case 'videoControls.backButton': return 'Tillbaka'; - case 'userStatus.admin': return 'Admin'; - case 'userStatus.restricted': return 'Begränsad'; - case 'userStatus.protected': return 'Skyddad'; - case 'userStatus.current': return 'NUVARANDE'; - case 'messages.markedAsWatched': return 'Markerad som sedd'; - case 'messages.markedAsUnwatched': return 'Markerad som osedd'; - case 'messages.removedFromContinueWatching': return 'Borttagen från Fortsätt titta'; - case 'messages.errorLoading': return ({required Object error}) => 'Fel: ${error}'; - case 'messages.fileInfoNotAvailable': return 'Filinformation inte tillgänglig'; - case 'messages.errorLoadingFileInfo': return ({required Object error}) => 'Fel vid laddning av filinformation: ${error}'; - case 'messages.errorLoadingSeries': return 'Fel vid laddning av serie'; - case 'messages.errorLoadingSeason': return 'Fel vid laddning av säsong'; - case 'messages.musicNotSupported': return 'Musikuppspelning stöds inte ännu'; - case 'messages.logsCleared': return 'Loggar rensade'; - case 'messages.logsCopied': return 'Loggar kopierade till urklipp'; - case 'messages.noLogsAvailable': return 'Inga loggar tillgängliga'; - case 'messages.libraryScanning': return ({required Object title}) => 'Skannar "${title}"...'; - case 'messages.libraryScanStarted': return ({required Object title}) => 'Biblioteksskanning startad för "${title}"'; - case 'messages.libraryScanFailed': return ({required Object error}) => 'Misslyckades att skanna bibliotek: ${error}'; - case 'messages.metadataRefreshing': return ({required Object title}) => 'Uppdaterar metadata för "${title}"...'; - case 'messages.metadataRefreshStarted': return ({required Object title}) => 'Metadata-uppdatering startad för "${title}"'; - case 'messages.metadataRefreshFailed': return ({required Object error}) => 'Misslyckades att uppdatera metadata: ${error}'; - case 'messages.noPlexToken': return 'Ingen Plex-token hittad. Vänligen logga in igen.'; - case 'messages.logoutConfirm': return 'Är du säker på att du vill logga ut?'; - case 'messages.noSeasonsFound': return 'Inga säsonger hittades'; - case 'messages.noEpisodesFound': return 'Inga avsnitt hittades i första säsongen'; - case 'messages.noEpisodesFoundGeneral': return 'Inga avsnitt hittades'; - case 'messages.noResultsFound': return 'Inga resultat hittades'; - case 'messages.sleepTimerSet': return ({required Object label}) => 'Sovtimer inställd för ${label}'; - case 'messages.failedToSwitchProfile': return ({required Object displayName}) => 'Misslyckades att byta till ${displayName}'; - case 'messages.noItemsAvailable': return 'Inga objekt tillgängliga'; - case 'messages.failedToCreatePlayQueue': return 'Det gick inte att skapa uppspelningskö'; - case 'messages.failedToCreatePlayQueueNoItems': return 'Det gick inte att skapa uppspelningskö – inga objekt'; - case 'messages.failedPlayback': return ({required Object action, required Object error}) => 'Kunde inte ${action}: ${error}'; - case 'profile.noUsersAvailable': return 'Inga användare tillgängliga'; - case 'subtitlingStyling.stylingOptions': return 'Stilalternativ'; - case 'subtitlingStyling.fontSize': return 'Teckenstorlek'; - case 'subtitlingStyling.textColor': return 'Textfärg'; - case 'subtitlingStyling.borderSize': return 'Kantstorlek'; - case 'subtitlingStyling.borderColor': return 'Kantfärg'; - case 'subtitlingStyling.backgroundOpacity': return 'Bakgrundsopacitet'; - case 'subtitlingStyling.backgroundColor': return 'Bakgrundsfärg'; - case 'dialog.confirmAction': return 'Bekräfta åtgärd'; - case 'dialog.areYouSure': return 'Är du säker på att du vill utföra denna åtgärd?'; - case 'dialog.cancel': return 'Avbryt'; - case 'dialog.playNow': return 'Spela nu'; - case 'discover.title': return 'Upptäck'; - case 'discover.switchProfile': return 'Byt profil'; - case 'discover.switchServer': return 'Byt server'; - case 'discover.logout': return 'Logga ut'; - case 'discover.noContentAvailable': return 'Inget innehåll tillgängligt'; - case 'discover.addMediaToLibraries': return 'Lägg till media till dina bibliotek'; - case 'discover.continueWatching': return 'Fortsätt titta'; - case 'discover.recentlyAdded': return 'Nyligen tillagda'; - case 'discover.play': return 'Spela'; - case 'discover.resume': return 'Återuppta'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => 'Spela S${season}, E${episode}'; - case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => 'Återuppta S${season}, E${episode}'; - case 'discover.pause': return 'Pausa'; - case 'discover.overview': return 'Översikt'; - case 'discover.cast': return 'Rollbesättning'; - case 'discover.seasons': return 'Säsonger'; - case 'discover.studio': return 'Studio'; - case 'discover.rating': return 'Åldersgräns'; - case 'discover.watched': return 'Tittad'; - case 'discover.episodeCount': return ({required Object count}) => '${count} avsnitt'; - case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '${watched}/${total} sedda'; - case 'discover.movie': return 'Film'; - case 'discover.tvShow': return 'TV-serie'; - case 'discover.minutesLeft': return ({required Object minutes}) => '${minutes} min kvar'; - case 'errors.searchFailed': return ({required Object error}) => 'Sökning misslyckades: ${error}'; - case 'errors.connectionTimeout': return ({required Object context}) => 'Anslutnings-timeout vid laddning ${context}'; - case 'errors.connectionFailed': return 'Kan inte ansluta till Plex-server'; - case 'errors.failedToLoad': return ({required Object context, required Object error}) => 'Misslyckades att ladda ${context}: ${error}'; - case 'errors.noClientAvailable': return 'Ingen klient tillgänglig'; - case 'errors.authenticationFailed': return ({required Object error}) => 'Autentisering misslyckades: ${error}'; - case 'errors.couldNotLaunchUrl': return 'Kunde inte öppna autentiserings-URL'; - case 'errors.pleaseEnterToken': return 'Vänligen ange en token'; - case 'errors.invalidToken': return 'Ogiltig token'; - case 'errors.failedToVerifyToken': return ({required Object error}) => 'Misslyckades att verifiera token: ${error}'; - case 'errors.failedToSwitchProfile': return ({required Object displayName}) => 'Misslyckades att byta till ${displayName}'; - case 'errors.connectionFailedGeneric': return 'Anslutning misslyckades'; - case 'libraries.title': return 'Bibliotek'; - case 'libraries.scanLibraryFiles': return 'Skanna biblioteksfiler'; - case 'libraries.scanLibrary': return 'Skanna bibliotek'; - case 'libraries.analyze': return 'Analysera'; - case 'libraries.analyzeLibrary': return 'Analysera bibliotek'; - case 'libraries.refreshMetadata': return 'Uppdatera metadata'; - case 'libraries.emptyTrash': return 'Töm papperskorg'; - case 'libraries.emptyingTrash': return ({required Object title}) => 'Tömmer papperskorg för "${title}"...'; - case 'libraries.trashEmptied': return ({required Object title}) => 'Papperskorg tömd för "${title}"'; - case 'libraries.failedToEmptyTrash': return ({required Object error}) => 'Misslyckades att tömma papperskorg: ${error}'; - case 'libraries.analyzing': return ({required Object title}) => 'Analyserar "${title}"...'; - case 'libraries.analysisStarted': return ({required Object title}) => 'Analys startad för "${title}"'; - case 'libraries.failedToAnalyze': return ({required Object error}) => 'Misslyckades att analysera bibliotek: ${error}'; - case 'libraries.noLibrariesFound': return 'Inga bibliotek hittades'; - case 'libraries.thisLibraryIsEmpty': return 'Detta bibliotek är tomt'; - case 'libraries.all': return 'Alla'; - case 'libraries.clearAll': return 'Rensa alla'; - case 'libraries.scanLibraryConfirm': return ({required Object title}) => 'Är du säker på att du vill skanna "${title}"?'; - case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => 'Är du säker på att du vill analysera "${title}"?'; - case 'libraries.refreshMetadataConfirm': return ({required Object title}) => 'Är du säker på att du vill uppdatera metadata för "${title}"?'; - case 'libraries.emptyTrashConfirm': return ({required Object title}) => 'Är du säker på att du vill tömma papperskorgen för "${title}"?'; - case 'libraries.manageLibraries': return 'Hantera bibliotek'; - case 'libraries.sort': return 'Sortera'; - case 'libraries.sortBy': return 'Sortera efter'; - case 'libraries.filters': return 'Filter'; - case 'libraries.loadingLibraryWithCount': return ({required Object count}) => 'Laddar bibliotek... (${count} objekt laddade)'; - case 'libraries.confirmActionMessage': return 'Är du säker på att du vill utföra denna åtgärd?'; - case 'libraries.showLibrary': return 'Visa bibliotek'; - case 'libraries.hideLibrary': return 'Dölj bibliotek'; - case 'libraries.libraryOptions': return 'Biblioteksalternativ'; - case 'libraries.content': return 'bibliotekets innehåll'; - case 'libraries.selectLibrary': return 'Välj bibliotek'; - case 'libraries.filtersWithCount': return ({required Object count}) => 'Filter (${count})'; - case 'libraries.noRecommendations': return 'Inga rekommendationer tillgängliga'; - case 'libraries.noCollections': return 'Inga samlingar i det här biblioteket'; - case 'libraries.noFoldersFound': return 'Inga mappar hittades'; - case 'libraries.folders': return 'mappar'; - case 'libraries.tabs.recommended': return 'Rekommenderat'; - case 'libraries.tabs.browse': return 'Bläddra'; - case 'libraries.tabs.collections': return 'Samlingar'; - case 'libraries.tabs.playlists': return 'Spellistor'; - case 'libraries.groupings.all': return 'Alla'; - case 'libraries.groupings.movies': return 'Filmer'; - case 'libraries.groupings.shows': return 'Serier'; - case 'libraries.groupings.seasons': return 'Säsonger'; - case 'libraries.groupings.episodes': return 'Avsnitt'; - case 'libraries.groupings.folders': return 'Mappar'; - case 'about.title': return 'Om'; - case 'about.openSourceLicenses': return 'Öppen källkod-licenser'; - case 'about.versionLabel': return ({required Object version}) => 'Version ${version}'; - case 'about.appDescription': return 'En vacker Plex-klient för Flutter'; - case 'about.viewLicensesDescription': return 'Visa licenser för tredjepartsbibliotek'; - case 'serverSelection.connectingToServer': return 'Ansluter till server...'; - case 'serverSelection.connectingToAllServers': return 'Ansluter till alla servrar...'; - case 'serverSelection.connectToAllServers': return 'Anslut till alla servrar'; - case 'serverSelection.allServerConnectionsFailed': return 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.'; - case 'serverSelection.foundServers': return ({required Object count}) => 'Hittade ${count} server(ar)'; - case 'serverSelection.orSelectIndividually': return 'Eller välj en server individuellt:'; - case 'serverSelection.serverDebugCopied': return 'Server-felsökningsdata kopierad till urklipp'; - case 'serverSelection.copyDebugData': return 'Kopiera felsökningsdata'; - case 'serverSelection.noServersFound': return 'Inga servrar hittades'; - case 'serverSelection.malformedServerData': return ({required Object count}) => 'Hittade ${count} server(ar) med felformaterad data. Inga giltiga servrar tillgängliga.'; - case 'serverSelection.incompleteServerInfo': return 'Vissa servrar har ofullständig information och hoppades över. Vänligen kontrollera ditt Plex.tv-konto.'; - case 'serverSelection.incompleteConnectionInfo': return 'Server-anslutningsinformation är ofullständig. Försök igen.'; - case 'serverSelection.malformedServerInfo': return ({required Object message}) => 'Serverinformation är felformaterad: ${message}'; - case 'serverSelection.networkConnectionFailed': return 'Nätverksanslutning misslyckades. Kontrollera din internetanslutning och försök igen.'; - case 'serverSelection.authenticationFailed': return 'Autentisering misslyckades. Logga in igen.'; - case 'serverSelection.plexServiceUnavailable': return 'Plex-tjänst otillgänglig. Försök igen senare.'; - case 'serverSelection.failedToLoadServers': return ({required Object error}) => 'Misslyckades att ladda servrar: ${error}'; - case 'hubDetail.title': return 'Titel'; - case 'hubDetail.releaseYear': return 'Utgivningsår'; - case 'hubDetail.dateAdded': return 'Datum tillagd'; - case 'hubDetail.rating': return 'Betyg'; - case 'hubDetail.noItemsFound': return 'Inga objekt hittades'; - case 'logs.title': return 'Loggar'; - case 'logs.clearLogs': return 'Rensa loggar'; - case 'logs.copyLogs': return 'Kopiera loggar'; - case 'logs.exportLogs': return 'Exportera loggar'; - case 'logs.noLogsToShow': return 'Inga loggar att visa'; - case 'logs.error': return 'Fel:'; - case 'logs.stackTrace': return 'Stack trace:'; - case 'licenses.relatedPackages': return 'Relaterade paket'; - case 'licenses.license': return 'Licens'; - case 'licenses.licenseNumber': return ({required Object number}) => 'Licens ${number}'; - case 'licenses.licensesCount': return ({required Object count}) => '${count} licenser'; - case 'navigation.home': return 'Hem'; - case 'navigation.search': return 'Sök'; - case 'navigation.libraries': return 'Bibliotek'; - case 'navigation.settings': return 'Inställningar'; - case 'playlists.title': return 'Spellistor'; - case 'playlists.noPlaylists': return 'Inga spellistor hittades'; - case 'playlists.create': return 'Skapa spellista'; - case 'playlists.newPlaylist': return 'Ny spellista'; - case 'playlists.playlistName': return 'Spellistans namn'; - case 'playlists.enterPlaylistName': return 'Ange spellistans namn'; - case 'playlists.edit': return 'Redigera spellista'; - case 'playlists.delete': return 'Ta bort spellista'; - case 'playlists.addTo': return 'Lägg till i spellista'; - case 'playlists.addItems': return 'Lägg till objekt'; - case 'playlists.removeItem': return 'Ta bort från spellista'; - case 'playlists.clearPlaylist': return 'Rensa spellista'; - case 'playlists.playAll': return 'Spela alla'; - case 'playlists.shuffle': return 'Blanda'; - case 'playlists.smartPlaylist': return 'Smart spellista'; - case 'playlists.regularPlaylist': return 'Vanlig spellista'; - case 'playlists.itemCount': return ({required Object count}) => '${count} objekt'; - case 'playlists.oneItem': return '1 objekt'; - case 'playlists.emptyPlaylist': return 'Denna spellista är tom'; - case 'playlists.deleteConfirm': return 'Ta bort spellista?'; - case 'playlists.deleteMessage': return ({required Object name}) => 'Är du säker på att du vill ta bort "${name}"?'; - case 'playlists.created': return 'Spellista skapad'; - case 'playlists.updated': return 'Spellista uppdaterad'; - case 'playlists.deleted': return 'Spellista borttagen'; - case 'playlists.itemAdded': return 'Tillagd i spellista'; - case 'playlists.itemRemoved': return 'Borttagen från spellista'; - case 'playlists.selectPlaylist': return 'Välj spellista'; - case 'playlists.createNewPlaylist': return 'Skapa ny spellista'; - case 'playlists.errorCreating': return 'Det gick inte att skapa spellista'; - case 'playlists.errorDeleting': return 'Det gick inte att ta bort spellista'; - case 'playlists.errorLoading': return 'Det gick inte att ladda spellistor'; - case 'playlists.errorAdding': return 'Det gick inte att lägga till i spellista'; - case 'playlists.errorReordering': return 'Det gick inte att omordna spellisteobjekt'; - case 'playlists.errorRemoving': return 'Det gick inte att ta bort från spellista'; - case 'playlists.playlist': return 'Spellista'; - case 'collections.title': return 'Samlingar'; - case 'collections.collection': return 'Samling'; - case 'collections.empty': return 'Samlingen är tom'; - case 'collections.noItems': return 'Inga objekt i den här samlingen'; - case 'collections.unknownLibrarySection': return 'Kan inte ta bort: okänd bibliotekssektion'; - case 'collections.deleteCollection': return 'Ta bort samling'; - case 'collections.deleteConfirm': return ({required Object title}) => 'Är du säker på att du vill ta bort "${title}"? Detta går inte att ångra.'; - case 'collections.deleted': return 'Samling borttagen'; - case 'collections.deleteFailed': return 'Det gick inte att ta bort samlingen'; - case 'collections.deleteFailedWithError': return ({required Object error}) => 'Det gick inte att ta bort samlingen: ${error}'; - case 'collections.failedToLoadItems': return ({required Object error}) => 'Det gick inte att läsa in samlingsobjekt: ${error}'; - case 'collections.addTo': return 'Lägg till i samling'; - case 'collections.selectCollection': return 'Välj samling'; - case 'collections.createNewCollection': return 'Skapa ny samling'; - case 'collections.collectionName': return 'Samlingsnamn'; - case 'collections.enterCollectionName': return 'Ange samlingsnamn'; - case 'collections.addedToCollection': return 'Tillagd i samling'; - case 'collections.errorAddingToCollection': return 'Fel vid tillägg i samling'; - case 'collections.created': return 'Samling skapad'; - case 'collections.removeFromCollection': return 'Ta bort från samling'; - case 'collections.removeFromCollectionConfirm': return ({required Object title}) => 'Ta bort "${title}" från denna samling?'; - case 'collections.removedFromCollection': return 'Borttagen från samling'; - case 'collections.removeFromCollectionFailed': return 'Misslyckades med att ta bort från samling'; - case 'collections.removeFromCollectionError': return ({required Object error}) => 'Fel vid borttagning från samling: ${error}'; - default: return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': + return 'Plezy'; + case 'app.loading': + return 'Laddar...'; + case 'auth.signInWithPlex': + return 'Logga in med Plex'; + case 'auth.showQRCode': + return 'Visa QR-kod'; + case 'auth.cancel': + return 'Avbryt'; + case 'auth.authenticate': + return 'Autentisera'; + case 'auth.retry': + return 'Försök igen'; + case 'auth.debugEnterToken': + return 'Debug: Ange Plex-token'; + case 'auth.plexTokenLabel': + return 'Plex-autentiseringstoken'; + case 'auth.plexTokenHint': + return 'Ange din Plex.tv-token'; + case 'auth.authenticationTimeout': + return 'Autentisering tog för lång tid. Försök igen.'; + case 'auth.scanQRCodeInstruction': + return 'Skanna denna QR-kod med en enhet inloggad på Plex för att autentisera.'; + case 'auth.waitingForAuth': + return 'Väntar på autentisering...\nVänligen slutför inloggning i din webbläsare.'; + case 'common.cancel': + return 'Avbryt'; + case 'common.save': + return 'Spara'; + case 'common.close': + return 'Stäng'; + case 'common.clear': + return 'Rensa'; + case 'common.reset': + return 'Återställ'; + case 'common.later': + return 'Senare'; + case 'common.submit': + return 'Skicka'; + case 'common.confirm': + return 'Bekräfta'; + case 'common.retry': + return 'Försök igen'; + case 'common.playNow': + return 'Spela nu'; + case 'common.logout': + return 'Logga ut'; + case 'common.online': + return 'Online'; + case 'common.offline': + return 'Offline'; + case 'common.owned': + return 'Egen'; + case 'common.shared': + return 'Delad'; + case 'common.current': + return 'NUVARANDE'; + case 'common.unknown': + return 'Okänd'; + case 'common.refresh': + return 'Uppdatera'; + case 'common.yes': + return 'Ja'; + case 'common.no': + return 'Nej'; + case 'common.server': + return 'Server'; + case 'common.delete': + return 'Ta bort'; + case 'common.shuffle': + return 'Blanda'; + case 'common.addTo': + return 'Lägg till i...'; + case 'screens.licenses': + return 'Licenser'; + case 'screens.selectServer': + return 'Välj server'; + case 'screens.switchProfile': + return 'Byt profil'; + case 'screens.subtitleStyling': + return 'Undertext-styling'; + case 'screens.search': + return 'Sök'; + case 'screens.logs': + return 'Loggar'; + case 'update.available': + return 'Uppdatering tillgänglig'; + case 'update.versionAvailable': + return ({required Object version}) => + 'Version ${version} är tillgänglig'; + case 'update.currentVersion': + return ({required Object version}) => 'Nuvarande: ${version}'; + case 'update.skipVersion': + return 'Hoppa över denna version'; + case 'update.viewRelease': + return 'Visa release'; + case 'update.latestVersion': + return 'Du har den senaste versionen'; + case 'update.checkFailed': + return 'Misslyckades att kontrollera uppdateringar'; + case 'settings.title': + return 'Inställningar'; + case 'settings.language': + return 'Språk'; + case 'settings.theme': + return 'Tema'; + case 'settings.appearance': + return 'Utseende'; + case 'settings.videoPlayback': + return 'Videouppspelning'; + case 'settings.shufflePlay': + return 'Blanda uppspelning'; + case 'settings.advanced': + return 'Avancerat'; + case 'settings.useSeasonPostersDescription': + return 'Visa säsongsaffisch istället för serieaffisch för avsnitt'; + case 'settings.showHeroSectionDescription': + return 'Visa utvalda innehållskarusell på startsidan'; + case 'settings.secondsLabel': + return 'Sekunder'; + case 'settings.minutesLabel': + return 'Minuter'; + case 'settings.secondsShort': + return 's'; + case 'settings.minutesShort': + return 'm'; + case 'settings.durationHint': + return ({required Object min, required Object max}) => + 'Ange tid (${min}-${max})'; + case 'settings.systemTheme': + return 'System'; + case 'settings.systemThemeDescription': + return 'Följ systeminställningar'; + case 'settings.lightTheme': + return 'Ljust'; + case 'settings.darkTheme': + return 'Mörkt'; + case 'settings.libraryDensity': + return 'Biblioteksdensitet'; + case 'settings.compact': + return 'Kompakt'; + case 'settings.compactDescription': + return 'Mindre kort, fler objekt synliga'; + case 'settings.normal': + return 'Normal'; + case 'settings.normalDescription': + return 'Standardstorlek'; + case 'settings.comfortable': + return 'Bekväm'; + case 'settings.comfortableDescription': + return 'Större kort, färre objekt synliga'; + case 'settings.viewMode': + return 'Visningsläge'; + case 'settings.gridView': + return 'Rutnät'; + case 'settings.gridViewDescription': + return 'Visa objekt i rutnätslayout'; + case 'settings.listView': + return 'Lista'; + case 'settings.listViewDescription': + return 'Visa objekt i listlayout'; + case 'settings.useSeasonPosters': + return 'Använd säsongsaffischer'; + case 'settings.showHeroSection': + return 'Visa hjältesektion'; + case 'settings.hardwareDecoding': + return 'Hårdvaruavkodning'; + case 'settings.hardwareDecodingDescription': + return 'Använd hårdvaruacceleration när tillgängligt'; + case 'settings.bufferSize': + return 'Bufferstorlek'; + case 'settings.bufferSizeMB': + return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': + return 'Undertext-styling'; + case 'settings.subtitleStylingDescription': + return 'Anpassa undertextutseende'; + case 'settings.smallSkipDuration': + return 'Kort hoppvaraktighet'; + case 'settings.largeSkipDuration': + return 'Lång hoppvaraktighet'; + case 'settings.secondsUnit': + return ({required Object seconds}) => '${seconds} sekunder'; + case 'settings.defaultSleepTimer': + return 'Standard sovtimer'; + case 'settings.minutesUnit': + return ({required Object minutes}) => '${minutes} minuter'; + case 'settings.rememberTrackSelections': + return 'Kom ihåg spårval per serie/film'; + case 'settings.rememberTrackSelectionsDescription': + return 'Spara automatiskt ljud- och undertextspråkpreferenser när du ändrar spår under uppspelning'; + case 'settings.unwatchedOnly': + return 'Endast osedda'; + case 'settings.unwatchedOnlyDescription': + return 'Inkludera endast osedda avsnitt i blandningskön'; + case 'settings.shuffleOrderNavigation': + return 'Blandningsordning-navigation'; + case 'settings.shuffleOrderNavigationDescription': + return 'Nästa/föregående knappar följer blandad ordning'; + case 'settings.loopShuffleQueue': + return 'Loopa blandningskö'; + case 'settings.loopShuffleQueueDescription': + return 'Starta om kö när slutet nås'; + case 'settings.videoPlayerControls': + return 'Videospelar-kontroller'; + case 'settings.keyboardShortcuts': + return 'Tangentbordsgenvägar'; + case 'settings.keyboardShortcutsDescription': + return 'Anpassa tangentbordsgenvägar'; + case 'settings.debugLogging': + return 'Felsökningsloggning'; + case 'settings.debugLoggingDescription': + return 'Aktivera detaljerad loggning för felsökning'; + case 'settings.viewLogs': + return 'Visa loggar'; + case 'settings.viewLogsDescription': + return 'Visa applikationsloggar'; + case 'settings.clearCache': + return 'Rensa cache'; + case 'settings.clearCacheDescription': + return 'Detta rensar alla cachade bilder och data. Appen kan ta längre tid att ladda innehåll efter cache-rensning.'; + case 'settings.clearCacheSuccess': + return 'Cache rensad framgångsrikt'; + case 'settings.resetSettings': + return 'Återställ inställningar'; + case 'settings.resetSettingsDescription': + return 'Detta återställer alla inställningar till standardvärden. Denna åtgärd kan inte ångras.'; + case 'settings.resetSettingsSuccess': + return 'Inställningar återställda framgångsrikt'; + case 'settings.shortcutsReset': + return 'Genvägar återställda till standard'; + case 'settings.about': + return 'Om'; + case 'settings.aboutDescription': + return 'Appinformation och licenser'; + case 'settings.updates': + return 'Uppdateringar'; + case 'settings.updateAvailable': + return 'Uppdatering tillgänglig'; + case 'settings.checkForUpdates': + return 'Kontrollera uppdateringar'; + case 'settings.validationErrorEnterNumber': + return 'Vänligen ange ett giltigt nummer'; + case 'settings.validationErrorDuration': + return ({ + required Object min, + required Object max, + required Object unit, + }) => 'Tiden måste vara mellan ${min} och ${max} ${unit}'; + case 'settings.shortcutAlreadyAssigned': + return ({required Object action}) => 'Genväg redan tilldelad ${action}'; + case 'settings.shortcutUpdated': + return ({required Object action}) => 'Genväg uppdaterad för ${action}'; + case 'settings.autoSkip': + return 'Auto Hoppa Över'; + case 'settings.autoSkipIntro': + return 'Hoppa Över Intro Automatiskt'; + case 'settings.autoSkipIntroDescription': + return 'Hoppa automatiskt över intro-markörer efter några sekunder'; + case 'settings.autoSkipCredits': + return 'Hoppa Över Credits Automatiskt'; + case 'settings.autoSkipCreditsDescription': + return 'Hoppa automatiskt över credits och spela nästa avsnitt'; + case 'settings.autoSkipDelay': + return 'Fördröjning Auto Hoppa Över'; + case 'settings.autoSkipDelayDescription': + return ({required Object seconds}) => + 'Vänta ${seconds} sekunder innan automatisk överhoppning'; + case 'search.hint': + return 'Sök filmer, serier, musik...'; + case 'search.tryDifferentTerm': + return 'Prova en annan sökterm'; + case 'search.searchYourMedia': + return 'Sök i dina media'; + case 'search.enterTitleActorOrKeyword': + return 'Ange en titel, skådespelare eller nyckelord'; + case 'hotkeys.setShortcutFor': + return ({required Object actionName}) => + 'Sätt genväg för ${actionName}'; + case 'hotkeys.clearShortcut': + return 'Rensa genväg'; + case 'pinEntry.enterPin': + return 'Ange PIN'; + case 'pinEntry.showPin': + return 'Visa PIN'; + case 'pinEntry.hidePin': + return 'Dölj PIN'; + case 'fileInfo.title': + return 'Filinformation'; + case 'fileInfo.video': + return 'Video'; + case 'fileInfo.audio': + return 'Ljud'; + case 'fileInfo.file': + return 'Fil'; + case 'fileInfo.advanced': + return 'Avancerat'; + case 'fileInfo.codec': + return 'Kodek'; + case 'fileInfo.resolution': + return 'Upplösning'; + case 'fileInfo.bitrate': + return 'Bithastighet'; + case 'fileInfo.frameRate': + return 'Bildfrekvens'; + case 'fileInfo.aspectRatio': + return 'Bildförhållande'; + case 'fileInfo.profile': + return 'Profil'; + case 'fileInfo.bitDepth': + return 'Bitdjup'; + case 'fileInfo.colorSpace': + return 'Färgrymd'; + case 'fileInfo.colorRange': + return 'Färgområde'; + case 'fileInfo.colorPrimaries': + return 'Färggrunder'; + case 'fileInfo.chromaSubsampling': + return 'Kroma-undersampling'; + case 'fileInfo.channels': + return 'Kanaler'; + case 'fileInfo.path': + return 'Sökväg'; + case 'fileInfo.size': + return 'Storlek'; + case 'fileInfo.container': + return 'Container'; + case 'fileInfo.duration': + return 'Varaktighet'; + case 'fileInfo.optimizedForStreaming': + return 'Optimerad för streaming'; + case 'fileInfo.has64bitOffsets': + return '64-bit offset'; + case 'mediaMenu.markAsWatched': + return 'Markera som sedd'; + case 'mediaMenu.markAsUnwatched': + return 'Markera som osedd'; + case 'mediaMenu.removeFromContinueWatching': + return 'Ta bort från Fortsätt titta'; + case 'mediaMenu.goToSeries': + return 'Gå till serie'; + case 'mediaMenu.goToSeason': + return 'Gå till säsong'; + case 'mediaMenu.shufflePlay': + return 'Blanda uppspelning'; + case 'mediaMenu.fileInfo': + return 'Filinformation'; + case 'accessibility.mediaCardMovie': + return ({required Object title}) => '${title}, film'; + case 'accessibility.mediaCardShow': + return ({required Object title}) => '${title}, TV-serie'; + case 'accessibility.mediaCardEpisode': + return ({required Object title, required Object episodeInfo}) => + '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': + return ({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': + return 'sedd'; + case 'accessibility.mediaCardPartiallyWatched': + return ({required Object percent}) => '${percent} procent sedd'; + case 'accessibility.mediaCardUnwatched': + return 'osedd'; + case 'accessibility.tapToPlay': + return 'Tryck för att spela'; + case 'tooltips.shufflePlay': + return 'Blanda uppspelning'; + case 'tooltips.markAsWatched': + return 'Markera som sedd'; + case 'tooltips.markAsUnwatched': + return 'Markera som osedd'; + case 'videoControls.audioLabel': + return 'Ljud'; + case 'videoControls.subtitlesLabel': + return 'Undertexter'; + case 'videoControls.resetToZero': + return 'Återställ till 0ms'; + case 'videoControls.addTime': + return ({required Object amount, required Object unit}) => + '+${amount}${unit}'; + case 'videoControls.minusTime': + return ({required Object amount, required Object unit}) => + '-${amount}${unit}'; + case 'videoControls.playsLater': + return ({required Object label}) => '${label} spelas senare'; + case 'videoControls.playsEarlier': + return ({required Object label}) => '${label} spelas tidigare'; + case 'videoControls.noOffset': + return 'Ingen offset'; + case 'videoControls.letterbox': + return 'Letterbox'; + case 'videoControls.fillScreen': + return 'Fyll skärm'; + case 'videoControls.stretch': + return 'Sträck'; + case 'videoControls.lockRotation': + return 'Lås rotation'; + case 'videoControls.unlockRotation': + return 'Lås upp rotation'; + case 'videoControls.sleepTimer': + return 'Sovtimer'; + case 'videoControls.timerActive': + return 'Timer aktiv'; + case 'videoControls.playbackWillPauseIn': + return ({required Object duration}) => + 'Uppspelningen pausas om ${duration}'; + case 'videoControls.sleepTimerCompleted': + return 'Sovtimer slutförd - uppspelning pausad'; + case 'videoControls.playButton': + return 'Spela'; + case 'videoControls.pauseButton': + return 'Pausa'; + case 'videoControls.seekBackwardButton': + return ({required Object seconds}) => 'Spola bakåt ${seconds} sekunder'; + case 'videoControls.seekForwardButton': + return ({required Object seconds}) => + 'Spola framåt ${seconds} sekunder'; + case 'videoControls.previousButton': + return 'Föregående avsnitt'; + case 'videoControls.nextButton': + return 'Nästa avsnitt'; + case 'videoControls.previousChapterButton': + return 'Föregående kapitel'; + case 'videoControls.nextChapterButton': + return 'Nästa kapitel'; + case 'videoControls.volumeButton': + return 'Volym'; + case 'videoControls.muteButton': + return 'Tysta'; + case 'videoControls.unmuteButton': + return 'Slå på ljud'; + case 'videoControls.settingsButton': + return 'Videoinställningar'; + case 'videoControls.audioTrackButton': + return 'Ljudspår'; + case 'videoControls.subtitlesButton': + return 'Undertexter'; + case 'videoControls.chaptersButton': + return 'Kapitel'; + case 'videoControls.versionsButton': + return 'Videoversioner'; + case 'videoControls.aspectRatioButton': + return 'Bildförhållande'; + case 'videoControls.fullscreenButton': + return 'Aktivera helskärm'; + case 'videoControls.exitFullscreenButton': + return 'Avsluta helskärm'; + case 'videoControls.rotationLockButton': + return 'Rotationslås'; + case 'videoControls.timelineSlider': + return 'Videotidslinje'; + case 'videoControls.volumeSlider': + return 'Volymnivå'; + case 'videoControls.backButton': + return 'Tillbaka'; + case 'userStatus.admin': + return 'Admin'; + case 'userStatus.restricted': + return 'Begränsad'; + case 'userStatus.protected': + return 'Skyddad'; + case 'userStatus.current': + return 'NUVARANDE'; + case 'messages.markedAsWatched': + return 'Markerad som sedd'; + case 'messages.markedAsUnwatched': + return 'Markerad som osedd'; + case 'messages.removedFromContinueWatching': + return 'Borttagen från Fortsätt titta'; + case 'messages.errorLoading': + return ({required Object error}) => 'Fel: ${error}'; + case 'messages.fileInfoNotAvailable': + return 'Filinformation inte tillgänglig'; + case 'messages.errorLoadingFileInfo': + return ({required Object error}) => + 'Fel vid laddning av filinformation: ${error}'; + case 'messages.errorLoadingSeries': + return 'Fel vid laddning av serie'; + case 'messages.errorLoadingSeason': + return 'Fel vid laddning av säsong'; + case 'messages.musicNotSupported': + return 'Musikuppspelning stöds inte ännu'; + case 'messages.logsCleared': + return 'Loggar rensade'; + case 'messages.logsCopied': + return 'Loggar kopierade till urklipp'; + case 'messages.noLogsAvailable': + return 'Inga loggar tillgängliga'; + case 'messages.libraryScanning': + return ({required Object title}) => 'Skannar "${title}"...'; + case 'messages.libraryScanStarted': + return ({required Object title}) => + 'Biblioteksskanning startad för "${title}"'; + case 'messages.libraryScanFailed': + return ({required Object error}) => + 'Misslyckades att skanna bibliotek: ${error}'; + case 'messages.metadataRefreshing': + return ({required Object title}) => + 'Uppdaterar metadata för "${title}"...'; + case 'messages.metadataRefreshStarted': + return ({required Object title}) => + 'Metadata-uppdatering startad för "${title}"'; + case 'messages.metadataRefreshFailed': + return ({required Object error}) => + 'Misslyckades att uppdatera metadata: ${error}'; + case 'messages.noPlexToken': + return 'Ingen Plex-token hittad. Vänligen logga in igen.'; + case 'messages.logoutConfirm': + return 'Är du säker på att du vill logga ut?'; + case 'messages.noSeasonsFound': + return 'Inga säsonger hittades'; + case 'messages.noEpisodesFound': + return 'Inga avsnitt hittades i första säsongen'; + case 'messages.noEpisodesFoundGeneral': + return 'Inga avsnitt hittades'; + case 'messages.noResultsFound': + return 'Inga resultat hittades'; + case 'messages.sleepTimerSet': + return ({required Object label}) => 'Sovtimer inställd för ${label}'; + case 'messages.failedToSwitchProfile': + return ({required Object displayName}) => + 'Misslyckades att byta till ${displayName}'; + case 'messages.noItemsAvailable': + return 'Inga objekt tillgängliga'; + case 'messages.failedToCreatePlayQueue': + return 'Det gick inte att skapa uppspelningskö'; + case 'messages.failedToCreatePlayQueueNoItems': + return 'Det gick inte att skapa uppspelningskö – inga objekt'; + case 'messages.failedPlayback': + return ({required Object action, required Object error}) => + 'Kunde inte ${action}: ${error}'; + case 'profile.noUsersAvailable': + return 'Inga användare tillgängliga'; + case 'subtitlingStyling.stylingOptions': + return 'Stilalternativ'; + case 'subtitlingStyling.fontSize': + return 'Teckenstorlek'; + case 'subtitlingStyling.textColor': + return 'Textfärg'; + case 'subtitlingStyling.borderSize': + return 'Kantstorlek'; + case 'subtitlingStyling.borderColor': + return 'Kantfärg'; + case 'subtitlingStyling.backgroundOpacity': + return 'Bakgrundsopacitet'; + case 'subtitlingStyling.backgroundColor': + return 'Bakgrundsfärg'; + case 'dialog.confirmAction': + return 'Bekräfta åtgärd'; + case 'dialog.areYouSure': + return 'Är du säker på att du vill utföra denna åtgärd?'; + case 'dialog.cancel': + return 'Avbryt'; + case 'dialog.playNow': + return 'Spela nu'; + case 'discover.title': + return 'Upptäck'; + case 'discover.switchProfile': + return 'Byt profil'; + case 'discover.switchServer': + return 'Byt server'; + case 'discover.logout': + return 'Logga ut'; + case 'discover.noContentAvailable': + return 'Inget innehåll tillgängligt'; + case 'discover.addMediaToLibraries': + return 'Lägg till media till dina bibliotek'; + case 'discover.continueWatching': + return 'Fortsätt titta'; + case 'discover.recentlyAdded': + return 'Nyligen tillagda'; + case 'discover.play': + return 'Spela'; + case 'discover.resume': + return 'Återuppta'; + case 'discover.playEpisode': + return ({required Object season, required Object episode}) => + 'Spela S${season}, E${episode}'; + case 'discover.resumeEpisode': + return ({required Object season, required Object episode}) => + 'Återuppta S${season}, E${episode}'; + case 'discover.pause': + return 'Pausa'; + case 'discover.overview': + return 'Översikt'; + case 'discover.cast': + return 'Rollbesättning'; + case 'discover.seasons': + return 'Säsonger'; + case 'discover.studio': + return 'Studio'; + case 'discover.rating': + return 'Åldersgräns'; + case 'discover.watched': + return 'Tittad'; + case 'discover.episodeCount': + return ({required Object count}) => '${count} avsnitt'; + case 'discover.watchedProgress': + return ({required Object watched, required Object total}) => + '${watched}/${total} sedda'; + case 'discover.movie': + return 'Film'; + case 'discover.tvShow': + return 'TV-serie'; + case 'discover.minutesLeft': + return ({required Object minutes}) => '${minutes} min kvar'; + case 'errors.searchFailed': + return ({required Object error}) => 'Sökning misslyckades: ${error}'; + case 'errors.connectionTimeout': + return ({required Object context}) => + 'Anslutnings-timeout vid laddning ${context}'; + case 'errors.connectionFailed': + return 'Kan inte ansluta till Plex-server'; + case 'errors.failedToLoad': + return ({required Object context, required Object error}) => + 'Misslyckades att ladda ${context}: ${error}'; + case 'errors.noClientAvailable': + return 'Ingen klient tillgänglig'; + case 'errors.authenticationFailed': + return ({required Object error}) => + 'Autentisering misslyckades: ${error}'; + case 'errors.couldNotLaunchUrl': + return 'Kunde inte öppna autentiserings-URL'; + case 'errors.pleaseEnterToken': + return 'Vänligen ange en token'; + case 'errors.invalidToken': + return 'Ogiltig token'; + case 'errors.failedToVerifyToken': + return ({required Object error}) => + 'Misslyckades att verifiera token: ${error}'; + case 'errors.failedToSwitchProfile': + return ({required Object displayName}) => + 'Misslyckades att byta till ${displayName}'; + case 'errors.connectionFailedGeneric': + return 'Anslutning misslyckades'; + case 'libraries.title': + return 'Bibliotek'; + case 'libraries.scanLibraryFiles': + return 'Skanna biblioteksfiler'; + case 'libraries.scanLibrary': + return 'Skanna bibliotek'; + case 'libraries.analyze': + return 'Analysera'; + case 'libraries.analyzeLibrary': + return 'Analysera bibliotek'; + case 'libraries.refreshMetadata': + return 'Uppdatera metadata'; + case 'libraries.emptyTrash': + return 'Töm papperskorg'; + case 'libraries.emptyingTrash': + return ({required Object title}) => + 'Tömmer papperskorg för "${title}"...'; + case 'libraries.trashEmptied': + return ({required Object title}) => 'Papperskorg tömd för "${title}"'; + case 'libraries.failedToEmptyTrash': + return ({required Object error}) => + 'Misslyckades att tömma papperskorg: ${error}'; + case 'libraries.analyzing': + return ({required Object title}) => 'Analyserar "${title}"...'; + case 'libraries.analysisStarted': + return ({required Object title}) => 'Analys startad för "${title}"'; + case 'libraries.failedToAnalyze': + return ({required Object error}) => + 'Misslyckades att analysera bibliotek: ${error}'; + case 'libraries.noLibrariesFound': + return 'Inga bibliotek hittades'; + case 'libraries.thisLibraryIsEmpty': + return 'Detta bibliotek är tomt'; + case 'libraries.all': + return 'Alla'; + case 'libraries.clearAll': + return 'Rensa alla'; + case 'libraries.scanLibraryConfirm': + return ({required Object title}) => + 'Är du säker på att du vill skanna "${title}"?'; + case 'libraries.analyzeLibraryConfirm': + return ({required Object title}) => + 'Är du säker på att du vill analysera "${title}"?'; + case 'libraries.refreshMetadataConfirm': + return ({required Object title}) => + 'Är du säker på att du vill uppdatera metadata för "${title}"?'; + case 'libraries.emptyTrashConfirm': + return ({required Object title}) => + 'Är du säker på att du vill tömma papperskorgen för "${title}"?'; + case 'libraries.manageLibraries': + return 'Hantera bibliotek'; + case 'libraries.sort': + return 'Sortera'; + case 'libraries.sortBy': + return 'Sortera efter'; + case 'libraries.filters': + return 'Filter'; + case 'libraries.loadingLibraryWithCount': + return ({required Object count}) => + 'Laddar bibliotek... (${count} objekt laddade)'; + case 'libraries.confirmActionMessage': + return 'Är du säker på att du vill utföra denna åtgärd?'; + case 'libraries.showLibrary': + return 'Visa bibliotek'; + case 'libraries.hideLibrary': + return 'Dölj bibliotek'; + case 'libraries.libraryOptions': + return 'Biblioteksalternativ'; + case 'libraries.content': + return 'bibliotekets innehåll'; + case 'libraries.selectLibrary': + return 'Välj bibliotek'; + case 'libraries.filtersWithCount': + return ({required Object count}) => 'Filter (${count})'; + case 'libraries.noRecommendations': + return 'Inga rekommendationer tillgängliga'; + case 'libraries.noCollections': + return 'Inga samlingar i det här biblioteket'; + case 'libraries.noFoldersFound': + return 'Inga mappar hittades'; + case 'libraries.folders': + return 'mappar'; + case 'libraries.tabs.recommended': + return 'Rekommenderat'; + case 'libraries.tabs.browse': + return 'Bläddra'; + case 'libraries.tabs.collections': + return 'Samlingar'; + case 'libraries.tabs.playlists': + return 'Spellistor'; + case 'libraries.groupings.all': + return 'Alla'; + case 'libraries.groupings.movies': + return 'Filmer'; + case 'libraries.groupings.shows': + return 'Serier'; + case 'libraries.groupings.seasons': + return 'Säsonger'; + case 'libraries.groupings.episodes': + return 'Avsnitt'; + case 'libraries.groupings.folders': + return 'Mappar'; + case 'about.title': + return 'Om'; + case 'about.openSourceLicenses': + return 'Öppen källkod-licenser'; + case 'about.versionLabel': + return ({required Object version}) => 'Version ${version}'; + case 'about.appDescription': + return 'En vacker Plex-klient för Flutter'; + case 'about.viewLicensesDescription': + return 'Visa licenser för tredjepartsbibliotek'; + case 'serverSelection.connectingToServer': + return 'Ansluter till server...'; + case 'serverSelection.connectingToAllServers': + return 'Ansluter till alla servrar...'; + case 'serverSelection.connectToAllServers': + return 'Anslut till alla servrar'; + case 'serverSelection.allServerConnectionsFailed': + return 'Misslyckades att ansluta till servrar. Kontrollera ditt nätverk och försök igen.'; + case 'serverSelection.foundServers': + return ({required Object count}) => 'Hittade ${count} server(ar)'; + case 'serverSelection.orSelectIndividually': + return 'Eller välj en server individuellt:'; + case 'serverSelection.serverDebugCopied': + return 'Server-felsökningsdata kopierad till urklipp'; + case 'serverSelection.copyDebugData': + return 'Kopiera felsökningsdata'; + case 'serverSelection.noServersFound': + return 'Inga servrar hittades'; + case 'serverSelection.malformedServerData': + return ({required Object count}) => + 'Hittade ${count} server(ar) med felformaterad data. Inga giltiga servrar tillgängliga.'; + case 'serverSelection.incompleteServerInfo': + return 'Vissa servrar har ofullständig information och hoppades över. Vänligen kontrollera ditt Plex.tv-konto.'; + case 'serverSelection.incompleteConnectionInfo': + return 'Server-anslutningsinformation är ofullständig. Försök igen.'; + case 'serverSelection.malformedServerInfo': + return ({required Object message}) => + 'Serverinformation är felformaterad: ${message}'; + case 'serverSelection.networkConnectionFailed': + return 'Nätverksanslutning misslyckades. Kontrollera din internetanslutning och försök igen.'; + case 'serverSelection.authenticationFailed': + return 'Autentisering misslyckades. Logga in igen.'; + case 'serverSelection.plexServiceUnavailable': + return 'Plex-tjänst otillgänglig. Försök igen senare.'; + case 'serverSelection.failedToLoadServers': + return ({required Object error}) => + 'Misslyckades att ladda servrar: ${error}'; + case 'hubDetail.title': + return 'Titel'; + case 'hubDetail.releaseYear': + return 'Utgivningsår'; + case 'hubDetail.dateAdded': + return 'Datum tillagd'; + case 'hubDetail.rating': + return 'Betyg'; + case 'hubDetail.noItemsFound': + return 'Inga objekt hittades'; + case 'logs.title': + return 'Loggar'; + case 'logs.clearLogs': + return 'Rensa loggar'; + case 'logs.copyLogs': + return 'Kopiera loggar'; + case 'logs.exportLogs': + return 'Exportera loggar'; + case 'logs.noLogsToShow': + return 'Inga loggar att visa'; + case 'logs.error': + return 'Fel:'; + case 'logs.stackTrace': + return 'Stack trace:'; + case 'licenses.relatedPackages': + return 'Relaterade paket'; + case 'licenses.license': + return 'Licens'; + case 'licenses.licenseNumber': + return ({required Object number}) => 'Licens ${number}'; + case 'licenses.licensesCount': + return ({required Object count}) => '${count} licenser'; + case 'navigation.home': + return 'Hem'; + case 'navigation.search': + return 'Sök'; + case 'navigation.libraries': + return 'Bibliotek'; + case 'navigation.settings': + return 'Inställningar'; + case 'playlists.title': + return 'Spellistor'; + case 'playlists.noPlaylists': + return 'Inga spellistor hittades'; + case 'playlists.create': + return 'Skapa spellista'; + case 'playlists.newPlaylist': + return 'Ny spellista'; + case 'playlists.playlistName': + return 'Spellistans namn'; + case 'playlists.enterPlaylistName': + return 'Ange spellistans namn'; + case 'playlists.edit': + return 'Redigera spellista'; + case 'playlists.delete': + return 'Ta bort spellista'; + case 'playlists.addTo': + return 'Lägg till i spellista'; + case 'playlists.addItems': + return 'Lägg till objekt'; + case 'playlists.removeItem': + return 'Ta bort från spellista'; + case 'playlists.clearPlaylist': + return 'Rensa spellista'; + case 'playlists.playAll': + return 'Spela alla'; + case 'playlists.shuffle': + return 'Blanda'; + case 'playlists.smartPlaylist': + return 'Smart spellista'; + case 'playlists.regularPlaylist': + return 'Vanlig spellista'; + case 'playlists.itemCount': + return ({required Object count}) => '${count} objekt'; + case 'playlists.oneItem': + return '1 objekt'; + case 'playlists.emptyPlaylist': + return 'Denna spellista är tom'; + case 'playlists.deleteConfirm': + return 'Ta bort spellista?'; + case 'playlists.deleteMessage': + return ({required Object name}) => + 'Är du säker på att du vill ta bort "${name}"?'; + case 'playlists.created': + return 'Spellista skapad'; + case 'playlists.updated': + return 'Spellista uppdaterad'; + case 'playlists.deleted': + return 'Spellista borttagen'; + case 'playlists.itemAdded': + return 'Tillagd i spellista'; + case 'playlists.itemRemoved': + return 'Borttagen från spellista'; + case 'playlists.selectPlaylist': + return 'Välj spellista'; + case 'playlists.createNewPlaylist': + return 'Skapa ny spellista'; + case 'playlists.errorCreating': + return 'Det gick inte att skapa spellista'; + case 'playlists.errorDeleting': + return 'Det gick inte att ta bort spellista'; + case 'playlists.errorLoading': + return 'Det gick inte att ladda spellistor'; + case 'playlists.errorAdding': + return 'Det gick inte att lägga till i spellista'; + case 'playlists.errorReordering': + return 'Det gick inte att omordna spellisteobjekt'; + case 'playlists.errorRemoving': + return 'Det gick inte att ta bort från spellista'; + case 'playlists.playlist': + return 'Spellista'; + case 'collections.title': + return 'Samlingar'; + case 'collections.collection': + return 'Samling'; + case 'collections.empty': + return 'Samlingen är tom'; + case 'collections.noItems': + return 'Inga objekt i den här samlingen'; + case 'collections.unknownLibrarySection': + return 'Kan inte ta bort: okänd bibliotekssektion'; + case 'collections.deleteCollection': + return 'Ta bort samling'; + case 'collections.deleteConfirm': + return ({required Object title}) => + 'Är du säker på att du vill ta bort "${title}"? Detta går inte att ångra.'; + case 'collections.deleted': + return 'Samling borttagen'; + case 'collections.deleteFailed': + return 'Det gick inte att ta bort samlingen'; + case 'collections.deleteFailedWithError': + return ({required Object error}) => + 'Det gick inte att ta bort samlingen: ${error}'; + case 'collections.failedToLoadItems': + return ({required Object error}) => + 'Det gick inte att läsa in samlingsobjekt: ${error}'; + case 'collections.addTo': + return 'Lägg till i samling'; + case 'collections.selectCollection': + return 'Välj samling'; + case 'collections.createNewCollection': + return 'Skapa ny samling'; + case 'collections.collectionName': + return 'Samlingsnamn'; + case 'collections.enterCollectionName': + return 'Ange samlingsnamn'; + case 'collections.addedToCollection': + return 'Tillagd i samling'; + case 'collections.errorAddingToCollection': + return 'Fel vid tillägg i samling'; + case 'collections.created': + return 'Samling skapad'; + case 'collections.removeFromCollection': + return 'Ta bort från samling'; + case 'collections.removeFromCollectionConfirm': + return ({required Object title}) => + 'Ta bort "${title}" från denna samling?'; + case 'collections.removedFromCollection': + return 'Borttagen från samling'; + case 'collections.removeFromCollectionFailed': + return 'Misslyckades med att ta bort från samling'; + case 'collections.removeFromCollectionError': + return ({required Object error}) => + 'Fel vid borttagning från samling: ${error}'; + default: + return null; + } + } } extension on _StringsZh { - dynamic _flatMapFunction(String path) { - switch (path) { - case 'app.title': return 'Plezy'; - case 'app.loading': return '加载中...'; - case 'auth.signInWithPlex': return '使用 Plex 登录'; - case 'auth.showQRCode': return '显示二维码'; - case 'auth.cancel': return '取消'; - case 'auth.authenticate': return '验证'; - case 'auth.retry': return '重试'; - case 'auth.debugEnterToken': return '调试:输入 Plex Token'; - case 'auth.plexTokenLabel': return 'Plex 授权令牌 (Auth Token)'; - case 'auth.plexTokenHint': return '输入你的 Plex.tv 令牌'; - case 'auth.authenticationTimeout': return '验证超时。请重试。'; - case 'auth.scanQRCodeInstruction': return '请使用已登录 Plex 的设备扫描此二维码进行验证。'; - case 'auth.waitingForAuth': return '等待验证中...\n请在你的浏览器中完成登录。'; - case 'common.cancel': return '取消'; - case 'common.save': return '保存'; - case 'common.close': return '关闭'; - case 'common.clear': return '清除'; - case 'common.reset': return '重置'; - case 'common.later': return '稍后'; - case 'common.submit': return '提交'; - case 'common.confirm': return '确认'; - case 'common.retry': return '重试'; - case 'common.playNow': return '立即播放'; - case 'common.logout': return '登出'; - case 'common.online': return '在线'; - case 'common.offline': return '离线'; - case 'common.owned': return '拥有'; - case 'common.shared': return '共享'; - case 'common.current': return '当前'; - case 'common.unknown': return '未知'; - case 'common.refresh': return '刷新'; - case 'common.yes': return '是'; - case 'common.no': return '否'; - case 'common.server': return '服务器'; - case 'common.delete': return '删除'; - case 'common.shuffle': return '随机播放'; - case 'common.addTo': return '添加到...'; - case 'screens.licenses': return '许可证'; - case 'screens.selectServer': return '选择服务器'; - case 'screens.switchProfile': return '切换配置文件'; - case 'screens.subtitleStyling': return '字幕样式'; - case 'screens.search': return '搜索'; - case 'screens.logs': return '日志'; - case 'update.available': return '有可用更新'; - case 'update.versionAvailable': return ({required Object version}) => '版本 ${version} 已发布'; - case 'update.currentVersion': return ({required Object version}) => '当前版本: ${version}'; - case 'update.skipVersion': return '跳过此版本'; - case 'update.viewRelease': return '查看发布详情'; - case 'update.latestVersion': return '已安装的版本是可用的最新版本'; - case 'update.checkFailed': return '无法检查更新'; - case 'settings.title': return '设置'; - case 'settings.language': return '语言'; - case 'settings.theme': return '主题'; - case 'settings.appearance': return '外观'; - case 'settings.videoPlayback': return '视频播放'; - case 'settings.shufflePlay': return '随机播放'; - case 'settings.advanced': return '高级'; - case 'settings.useSeasonPostersDescription': return '为剧集显示季海报而非剧集海报'; - case 'settings.showHeroSectionDescription': return '在主屏幕上显示精选内容轮播区'; - case 'settings.secondsLabel': return '秒'; - case 'settings.minutesLabel': return '分钟'; - case 'settings.secondsShort': return 's'; - case 'settings.minutesShort': return 'm'; - case 'settings.durationHint': return ({required Object min, required Object max}) => '输入时长 (${min}-${max})'; - case 'settings.systemTheme': return '系统'; - case 'settings.systemThemeDescription': return '跟随系统设置'; - case 'settings.lightTheme': return '浅色'; - case 'settings.darkTheme': return '深色'; - case 'settings.libraryDensity': return '媒体库密度'; - case 'settings.compact': return '紧凑'; - case 'settings.compactDescription': return '卡片更小,显示更多项目'; - case 'settings.normal': return '标准'; - case 'settings.normalDescription': return '默认尺寸'; - case 'settings.comfortable': return '舒适'; - case 'settings.comfortableDescription': return '卡片更大,显示更少项目'; - case 'settings.viewMode': return '视图模式'; - case 'settings.gridView': return '网格视图'; - case 'settings.gridViewDescription': return '以网格布局显示项目'; - case 'settings.listView': return '列表视图'; - case 'settings.listViewDescription': return '以列表布局显示项目'; - case 'settings.useSeasonPosters': return '使用季海报'; - case 'settings.showHeroSection': return '显示主要精选区'; - case 'settings.hardwareDecoding': return '硬件解码'; - case 'settings.hardwareDecodingDescription': return '如果可用,使用硬件加速'; - case 'settings.bufferSize': return '缓冲区大小'; - case 'settings.bufferSizeMB': return ({required Object size}) => '${size}MB'; - case 'settings.subtitleStyling': return '字幕样式'; - case 'settings.subtitleStylingDescription': return '调整字幕外观'; - case 'settings.smallSkipDuration': return '短跳过时长'; - case 'settings.largeSkipDuration': return '长跳过时长'; - case 'settings.secondsUnit': return ({required Object seconds}) => '${seconds} 秒'; - case 'settings.defaultSleepTimer': return '默认睡眠定时器'; - case 'settings.minutesUnit': return ({required Object minutes}) => '${minutes} 分钟'; - case 'settings.rememberTrackSelections': return '记住每个剧集/电影的音轨选择'; - case 'settings.rememberTrackSelectionsDescription': return '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; - case 'settings.unwatchedOnly': return '仅未观看'; - case 'settings.unwatchedOnlyDescription': return '随机队列中仅包含未观看的剧集'; - case 'settings.shuffleOrderNavigation': return '随机顺序导航'; - case 'settings.shuffleOrderNavigationDescription': return '下一集/上一集按钮遵循随机播放顺序'; - case 'settings.loopShuffleQueue': return '循环随机队列'; - case 'settings.loopShuffleQueueDescription': return '在队列结束时重新开始'; - case 'settings.videoPlayerControls': return '视频播放器控制'; - case 'settings.keyboardShortcuts': return '键盘快捷键'; - case 'settings.keyboardShortcutsDescription': return '自定义键盘快捷键'; - case 'settings.debugLogging': return '调试日志'; - case 'settings.debugLoggingDescription': return '启用详细日志记录以便故障排除'; - case 'settings.viewLogs': return '查看日志'; - case 'settings.viewLogsDescription': return '查看应用程序日志'; - case 'settings.clearCache': return '清除缓存'; - case 'settings.clearCacheDescription': return '这将清除所有缓存的图片和数据。清除缓存后,应用程序加载内容可能会变慢。'; - case 'settings.clearCacheSuccess': return '缓存清除成功'; - case 'settings.resetSettings': return '重置设置'; - case 'settings.resetSettingsDescription': return '这会将所有设置重置为其默认值。此操作无法撤销。'; - case 'settings.resetSettingsSuccess': return '设置重置成功'; - case 'settings.shortcutsReset': return '快捷键已重置为默认值'; - case 'settings.about': return '关于'; - case 'settings.aboutDescription': return '应用程序信息和许可证'; - case 'settings.updates': return '更新'; - case 'settings.updateAvailable': return '有可用更新'; - case 'settings.checkForUpdates': return '检查更新'; - case 'settings.validationErrorEnterNumber': return '请输入一个有效的数字'; - case 'settings.validationErrorDuration': return ({required Object min, required Object max, required Object unit}) => '时长必须介于 ${min} 和 ${max} ${unit} 之间'; - case 'settings.shortcutAlreadyAssigned': return ({required Object action}) => '快捷键已被分配给 ${action}'; - case 'settings.shortcutUpdated': return ({required Object action}) => '快捷键已为 ${action} 更新'; - case 'settings.autoSkip': return '自动跳过'; - case 'settings.autoSkipIntro': return '自动跳过片头'; - case 'settings.autoSkipIntroDescription': return '几秒钟后自动跳过片头标记'; - case 'settings.autoSkipCredits': return '自动跳过片尾'; - case 'settings.autoSkipCreditsDescription': return '自动跳过片尾并播放下一集'; - case 'settings.autoSkipDelay': return '自动跳过延迟'; - case 'settings.autoSkipDelayDescription': return ({required Object seconds}) => '自动跳过前等待 ${seconds} 秒'; - case 'search.hint': return '搜索电影、系列、音乐...'; - case 'search.tryDifferentTerm': return '尝试不同的搜索词'; - case 'search.searchYourMedia': return '搜索媒体'; - case 'search.enterTitleActorOrKeyword': return '输入标题、演员或关键词'; - case 'hotkeys.setShortcutFor': return ({required Object actionName}) => '为 ${actionName} 设置快捷键'; - case 'hotkeys.clearShortcut': return '清除快捷键'; - case 'pinEntry.enterPin': return '输入 PIN'; - case 'pinEntry.showPin': return '显示 PIN'; - case 'pinEntry.hidePin': return '隐藏 PIN'; - case 'fileInfo.title': return '文件信息'; - case 'fileInfo.video': return '视频'; - case 'fileInfo.audio': return '音频'; - case 'fileInfo.file': return '文件'; - case 'fileInfo.advanced': return '高级'; - case 'fileInfo.codec': return '编解码器'; - case 'fileInfo.resolution': return '分辨率'; - case 'fileInfo.bitrate': return '比特率'; - case 'fileInfo.frameRate': return '帧率'; - case 'fileInfo.aspectRatio': return '宽高比'; - case 'fileInfo.profile': return '配置文件'; - case 'fileInfo.bitDepth': return '位深度'; - case 'fileInfo.colorSpace': return '色彩空间'; - case 'fileInfo.colorRange': return '色彩范围'; - case 'fileInfo.colorPrimaries': return '颜色原色'; - case 'fileInfo.chromaSubsampling': return '色度子采样'; - case 'fileInfo.channels': return '声道'; - case 'fileInfo.path': return '路径'; - case 'fileInfo.size': return '大小'; - case 'fileInfo.container': return '容器'; - case 'fileInfo.duration': return '时长'; - case 'fileInfo.optimizedForStreaming': return '已优化用于流媒体'; - case 'fileInfo.has64bitOffsets': return '64位偏移量'; - case 'mediaMenu.markAsWatched': return '标记为已观看'; - case 'mediaMenu.markAsUnwatched': return '标记为未观看'; - case 'mediaMenu.removeFromContinueWatching': return '从继续观看中移除'; - case 'mediaMenu.goToSeries': return '转到系列'; - case 'mediaMenu.goToSeason': return '转到季'; - case 'mediaMenu.shufflePlay': return '随机播放'; - case 'mediaMenu.fileInfo': return '文件信息'; - case 'accessibility.mediaCardMovie': return ({required Object title}) => '${title}, 电影'; - case 'accessibility.mediaCardShow': return ({required Object title}) => '${title}, 电视剧'; - case 'accessibility.mediaCardEpisode': return ({required Object title, required Object episodeInfo}) => '${title}, ${episodeInfo}'; - case 'accessibility.mediaCardSeason': return ({required Object title, required Object seasonInfo}) => '${title}, ${seasonInfo}'; - case 'accessibility.mediaCardWatched': return '已观看'; - case 'accessibility.mediaCardPartiallyWatched': return ({required Object percent}) => '已观看 ${percent} 百分比'; - case 'accessibility.mediaCardUnwatched': return '未观看'; - case 'accessibility.tapToPlay': return '点击播放'; - case 'tooltips.shufflePlay': return '随机播放'; - case 'tooltips.markAsWatched': return '标记为已观看'; - case 'tooltips.markAsUnwatched': return '标记为未观看'; - case 'videoControls.audioLabel': return '音频'; - case 'videoControls.subtitlesLabel': return '字幕'; - case 'videoControls.resetToZero': return '重置为 0ms'; - case 'videoControls.addTime': return ({required Object amount, required Object unit}) => '+${amount}${unit}'; - case 'videoControls.minusTime': return ({required Object amount, required Object unit}) => '-${amount}${unit}'; - case 'videoControls.playsLater': return ({required Object label}) => '${label} 播放较晚'; - case 'videoControls.playsEarlier': return ({required Object label}) => '${label} 播放较早'; - case 'videoControls.noOffset': return '无偏移'; - case 'videoControls.letterbox': return '信箱模式(Letterbox)'; - case 'videoControls.fillScreen': return '填充屏幕'; - case 'videoControls.stretch': return '拉伸'; - case 'videoControls.lockRotation': return '锁定旋转'; - case 'videoControls.unlockRotation': return '解锁旋转'; - case 'videoControls.sleepTimer': return '睡眠定时器'; - case 'videoControls.timerActive': return '定时器已激活'; - case 'videoControls.playbackWillPauseIn': return ({required Object duration}) => '播放将在 ${duration} 后暂停'; - case 'videoControls.sleepTimerCompleted': return '睡眠定时器已完成 - 播放已暂停'; - case 'videoControls.playButton': return '播放'; - case 'videoControls.pauseButton': return '暂停'; - case 'videoControls.seekBackwardButton': return ({required Object seconds}) => '后退 ${seconds} 秒'; - case 'videoControls.seekForwardButton': return ({required Object seconds}) => '前进 ${seconds} 秒'; - case 'videoControls.previousButton': return '上一集'; - case 'videoControls.nextButton': return '下一集'; - case 'videoControls.previousChapterButton': return '上一章节'; - case 'videoControls.nextChapterButton': return '下一章节'; - case 'videoControls.volumeButton': return '音量'; - case 'videoControls.muteButton': return '静音'; - case 'videoControls.unmuteButton': return '取消静音'; - case 'videoControls.settingsButton': return '视频设置'; - case 'videoControls.audioTrackButton': return '音轨'; - case 'videoControls.subtitlesButton': return '字幕'; - case 'videoControls.chaptersButton': return '章节'; - case 'videoControls.versionsButton': return '视频版本'; - case 'videoControls.aspectRatioButton': return '宽高比'; - case 'videoControls.fullscreenButton': return '进入全屏'; - case 'videoControls.exitFullscreenButton': return '退出全屏'; - case 'videoControls.rotationLockButton': return '旋转锁定'; - case 'videoControls.timelineSlider': return '视频时间轴'; - case 'videoControls.volumeSlider': return '音量调节'; - case 'videoControls.backButton': return '返回'; - case 'userStatus.admin': return '管理员'; - case 'userStatus.restricted': return '受限'; - case 'userStatus.protected': return '受保护'; - case 'userStatus.current': return '当前'; - case 'messages.markedAsWatched': return '已标记为已观看'; - case 'messages.markedAsUnwatched': return '已标记为未观看'; - case 'messages.removedFromContinueWatching': return '已从继续观看中移除'; - case 'messages.errorLoading': return ({required Object error}) => '错误: ${error}'; - case 'messages.fileInfoNotAvailable': return '文件信息不可用'; - case 'messages.errorLoadingFileInfo': return ({required Object error}) => '加载文件信息时出错: ${error}'; - case 'messages.errorLoadingSeries': return '加载系列时出错'; - case 'messages.errorLoadingSeason': return '加载季时出错'; - case 'messages.musicNotSupported': return '尚不支持播放音乐'; - case 'messages.logsCleared': return '日志已清除'; - case 'messages.logsCopied': return '日志已复制到剪贴板'; - case 'messages.noLogsAvailable': return '没有可用日志'; - case 'messages.libraryScanning': return ({required Object title}) => '正在扫描 “${title}”...'; - case 'messages.libraryScanStarted': return ({required Object title}) => '已开始扫描 “${title}” 媒体库'; - case 'messages.libraryScanFailed': return ({required Object error}) => '无法扫描媒体库: ${error}'; - case 'messages.metadataRefreshing': return ({required Object title}) => '正在刷新 “${title}” 的元数据...'; - case 'messages.metadataRefreshStarted': return ({required Object title}) => '已开始刷新 “${title}” 的元数据'; - case 'messages.metadataRefreshFailed': return ({required Object error}) => '无法刷新元数据: ${error}'; - case 'messages.noPlexToken': return '未找到 Plex 令牌。请重新登录。'; - case 'messages.logoutConfirm': return '你确定要登出吗?'; - case 'messages.noSeasonsFound': return '未找到季'; - case 'messages.noEpisodesFound': return '在第一季中未找到剧集'; - case 'messages.noEpisodesFoundGeneral': return '未找到剧集'; - case 'messages.noResultsFound': return '未找到结果'; - case 'messages.sleepTimerSet': return ({required Object label}) => '睡眠定时器已设置为 ${label}'; - case 'messages.failedToSwitchProfile': return ({required Object displayName}) => '无法切换到 ${displayName}'; - case 'messages.noItemsAvailable': return '没有可用的项目'; - case 'messages.failedToCreatePlayQueue': return '创建播放队列失败'; - case 'messages.failedToCreatePlayQueueNoItems': return '创建播放队列失败 - 没有项目'; - case 'messages.failedPlayback': return ({required Object action, required Object error}) => '无法${action}: ${error}'; - case 'profile.noUsersAvailable': return '没有可用用户'; - case 'subtitlingStyling.stylingOptions': return '样式选项'; - case 'subtitlingStyling.fontSize': return '字号'; - case 'subtitlingStyling.textColor': return '文本颜色'; - case 'subtitlingStyling.borderSize': return '边框大小'; - case 'subtitlingStyling.borderColor': return '边框颜色'; - case 'subtitlingStyling.backgroundOpacity': return '背景不透明度'; - case 'subtitlingStyling.backgroundColor': return '背景颜色'; - case 'dialog.confirmAction': return '确认操作'; - case 'dialog.areYouSure': return '确定要执行此操作吗?'; - case 'dialog.cancel': return '取消'; - case 'dialog.playNow': return '立即播放'; - case 'discover.title': return '发现'; - case 'discover.switchProfile': return '切换配置文件'; - case 'discover.switchServer': return '切换服务器'; - case 'discover.logout': return '登出'; - case 'discover.noContentAvailable': return '没有可用内容'; - case 'discover.addMediaToLibraries': return '请向你的媒体库添加一些媒体'; - case 'discover.continueWatching': return '继续观看'; - case 'discover.recentlyAdded': return '最近添加'; - case 'discover.play': return '播放'; - case 'discover.resume': return '继续'; - case 'discover.playEpisode': return ({required Object season, required Object episode}) => '播放 S${season}, E${episode}'; - case 'discover.resumeEpisode': return ({required Object season, required Object episode}) => '继续 S${season}, E${episode}'; - case 'discover.pause': return '暂停'; - case 'discover.overview': return '概述'; - case 'discover.cast': return '演员表'; - case 'discover.seasons': return '季数'; - case 'discover.studio': return '制作公司'; - case 'discover.rating': return '年龄分级'; - case 'discover.watched': return '已观看'; - case 'discover.episodeCount': return ({required Object count}) => '${count} 集'; - case 'discover.watchedProgress': return ({required Object watched, required Object total}) => '已观看 ${watched}/${total} 集'; - case 'discover.movie': return '电影'; - case 'discover.tvShow': return '电视剧'; - case 'discover.minutesLeft': return ({required Object minutes}) => '剩余 ${minutes} 分钟'; - case 'errors.searchFailed': return ({required Object error}) => '搜索失败: ${error}'; - case 'errors.connectionTimeout': return ({required Object context}) => '加载 ${context} 时连接超时'; - case 'errors.connectionFailed': return '无法连接到 Plex 服务器'; - case 'errors.failedToLoad': return ({required Object context, required Object error}) => '无法加载 ${context}: ${error}'; - case 'errors.noClientAvailable': return '没有可用客户端'; - case 'errors.authenticationFailed': return ({required Object error}) => '验证失败: ${error}'; - case 'errors.couldNotLaunchUrl': return '无法打开授权 URL'; - case 'errors.pleaseEnterToken': return '请输入一个令牌'; - case 'errors.invalidToken': return '令牌无效'; - case 'errors.failedToVerifyToken': return ({required Object error}) => '无法验证令牌: ${error}'; - case 'errors.failedToSwitchProfile': return ({required Object displayName}) => '无法切换到 ${displayName}'; - case 'errors.connectionFailedGeneric': return '连接失败'; - case 'libraries.title': return '媒体库'; - case 'libraries.scanLibraryFiles': return '扫描媒体库文件'; - case 'libraries.scanLibrary': return '扫描媒体库'; - case 'libraries.analyze': return '分析'; - case 'libraries.analyzeLibrary': return '分析媒体库'; - case 'libraries.refreshMetadata': return '刷新元数据'; - case 'libraries.emptyTrash': return '清空回收站'; - case 'libraries.emptyingTrash': return ({required Object title}) => '正在清空 “${title}” 的回收站...'; - case 'libraries.trashEmptied': return ({required Object title}) => '已清空 “${title}” 的回收站'; - case 'libraries.failedToEmptyTrash': return ({required Object error}) => '无法清空回收站: ${error}'; - case 'libraries.analyzing': return ({required Object title}) => '正在分析 “${title}”...'; - case 'libraries.analysisStarted': return ({required Object title}) => '已开始分析 “${title}”'; - case 'libraries.failedToAnalyze': return ({required Object error}) => '无法分析媒体库: ${error}'; - case 'libraries.noLibrariesFound': return '未找到媒体库'; - case 'libraries.thisLibraryIsEmpty': return '此媒体库为空'; - case 'libraries.all': return '全部'; - case 'libraries.clearAll': return '全部清除'; - case 'libraries.scanLibraryConfirm': return ({required Object title}) => '确定要扫描 “${title}” 吗?'; - case 'libraries.analyzeLibraryConfirm': return ({required Object title}) => '确定要分析 “${title}” 吗?'; - case 'libraries.refreshMetadataConfirm': return ({required Object title}) => '确定要刷新 “${title}” 的元数据吗?'; - case 'libraries.emptyTrashConfirm': return ({required Object title}) => '确定要清空 “${title}” 的回收站吗?'; - case 'libraries.manageLibraries': return '管理媒体库'; - case 'libraries.sort': return '排序'; - case 'libraries.sortBy': return '排序依据'; - case 'libraries.filters': return '筛选器'; - case 'libraries.loadingLibraryWithCount': return ({required Object count}) => '正在加载媒体库... (已加载 ${count} 个项目)'; - case 'libraries.confirmActionMessage': return '确定要执行此操作吗?'; - case 'libraries.showLibrary': return '显示媒体库'; - case 'libraries.hideLibrary': return '隐藏媒体库'; - case 'libraries.libraryOptions': return '媒体库选项'; - case 'libraries.content': return '媒体库内容'; - case 'libraries.selectLibrary': return '选择媒体库'; - case 'libraries.filtersWithCount': return ({required Object count}) => '筛选器(${count})'; - case 'libraries.noRecommendations': return '暂无推荐'; - case 'libraries.noCollections': return '此媒体库中没有合集'; - case 'libraries.noFoldersFound': return '未找到文件夹'; - case 'libraries.folders': return '文件夹'; - case 'libraries.tabs.recommended': return '推荐'; - case 'libraries.tabs.browse': return '浏览'; - case 'libraries.tabs.collections': return '合集'; - case 'libraries.tabs.playlists': return '播放列表'; - case 'libraries.groupings.all': return '全部'; - case 'libraries.groupings.movies': return '电影'; - case 'libraries.groupings.shows': return '剧集'; - case 'libraries.groupings.seasons': return '季'; - case 'libraries.groupings.episodes': return '集'; - case 'libraries.groupings.folders': return '文件夹'; - case 'about.title': return '关于'; - case 'about.openSourceLicenses': return '开源许可证'; - case 'about.versionLabel': return ({required Object version}) => '版本 ${version}'; - case 'about.appDescription': return '一款精美的 Flutter Plex 客户端'; - case 'about.viewLicensesDescription': return '查看第三方库的许可证'; - case 'serverSelection.connectingToServer': return '正在连接服务器...'; - case 'serverSelection.connectingToAllServers': return '正在连接所有服务器...'; - case 'serverSelection.connectToAllServers': return '连接所有服务器'; - case 'serverSelection.allServerConnectionsFailed': return '无法连接到任何服务器。请检查你的网络并重试。'; - case 'serverSelection.foundServers': return ({required Object count}) => '找到 ${count} 个服务器'; - case 'serverSelection.orSelectIndividually': return '或单独选择一个服务器:'; - case 'serverSelection.serverDebugCopied': return '服务器调试数据已复制到剪贴板'; - case 'serverSelection.copyDebugData': return '复制调试数据'; - case 'serverSelection.noServersFound': return '未找到服务器'; - case 'serverSelection.malformedServerData': return ({required Object count}) => '找到 ${count} 个数据格式错误的服务器。没有可用的有效服务器。'; - case 'serverSelection.incompleteServerInfo': return '某些服务器信息不完整,已被跳过。请检查你的 Plex.tv 账户。'; - case 'serverSelection.incompleteConnectionInfo': return '服务器连接信息不完整。请重试。'; - case 'serverSelection.malformedServerInfo': return ({required Object message}) => '服务器信息格式错误: ${message}'; - case 'serverSelection.networkConnectionFailed': return '网络连接失败。请检查你的网络连接并重试。'; - case 'serverSelection.authenticationFailed': return '验证失败。请重新登录。'; - case 'serverSelection.plexServiceUnavailable': return 'Plex 服务不可用。请稍后重试。'; - case 'serverSelection.failedToLoadServers': return ({required Object error}) => '无法加载服务器: ${error}'; - case 'hubDetail.title': return '标题'; - case 'hubDetail.releaseYear': return '发行年份'; - case 'hubDetail.dateAdded': return '添加日期'; - case 'hubDetail.rating': return '评分'; - case 'hubDetail.noItemsFound': return '未找到项目'; - case 'logs.title': return '日志'; - case 'logs.clearLogs': return '清除日志'; - case 'logs.copyLogs': return '复制日志'; - case 'logs.exportLogs': return '导出日志'; - case 'logs.noLogsToShow': return '没有可显示的日志'; - case 'logs.error': return '错误:'; - case 'logs.stackTrace': return '堆栈跟踪 (Stack Trace):'; - case 'licenses.relatedPackages': return '相关软件包'; - case 'licenses.license': return '许可证'; - case 'licenses.licenseNumber': return ({required Object number}) => '许可证 ${number}'; - case 'licenses.licensesCount': return ({required Object count}) => '${count} 个许可证'; - case 'navigation.home': return '主页'; - case 'navigation.search': return '搜索'; - case 'navigation.libraries': return '媒体库'; - case 'navigation.settings': return '设置'; - case 'playlists.title': return '播放列表'; - case 'playlists.noPlaylists': return '未找到播放列表'; - case 'playlists.create': return '创建播放列表'; - case 'playlists.newPlaylist': return '新播放列表'; - case 'playlists.playlistName': return '播放列表名称'; - case 'playlists.enterPlaylistName': return '输入播放列表名称'; - case 'playlists.edit': return '编辑播放列表'; - case 'playlists.delete': return '删除播放列表'; - case 'playlists.addTo': return '添加到播放列表'; - case 'playlists.addItems': return '添加项目'; - case 'playlists.removeItem': return '从播放列表中移除'; - case 'playlists.clearPlaylist': return '清空播放列表'; - case 'playlists.playAll': return '全部播放'; - case 'playlists.shuffle': return '随机播放'; - case 'playlists.smartPlaylist': return '智能播放列表'; - case 'playlists.regularPlaylist': return '普通播放列表'; - case 'playlists.itemCount': return ({required Object count}) => '${count} 个项目'; - case 'playlists.oneItem': return '1 个项目'; - case 'playlists.emptyPlaylist': return '此播放列表为空'; - case 'playlists.deleteConfirm': return '删除播放列表?'; - case 'playlists.deleteMessage': return ({required Object name}) => '确定要删除 "${name}" 吗?'; - case 'playlists.created': return '播放列表已创建'; - case 'playlists.updated': return '播放列表已更新'; - case 'playlists.deleted': return '播放列表已删除'; - case 'playlists.itemAdded': return '已添加到播放列表'; - case 'playlists.itemRemoved': return '已从播放列表中移除'; - case 'playlists.selectPlaylist': return '选择播放列表'; - case 'playlists.createNewPlaylist': return '创建新播放列表'; - case 'playlists.errorCreating': return '创建播放列表失败'; - case 'playlists.errorDeleting': return '删除播放列表失败'; - case 'playlists.errorLoading': return '加载播放列表失败'; - case 'playlists.errorAdding': return '添加到播放列表失败'; - case 'playlists.errorReordering': return '重新排序播放列表项目失败'; - case 'playlists.errorRemoving': return '从播放列表中移除失败'; - case 'playlists.playlist': return '播放列表'; - case 'collections.title': return '合集'; - case 'collections.collection': return '合集'; - case 'collections.empty': return '合集为空'; - case 'collections.noItems': return '此合集没有项目'; - case 'collections.unknownLibrarySection': return '无法删除:未知的媒体库分区'; - case 'collections.deleteCollection': return '删除合集'; - case 'collections.deleteConfirm': return ({required Object title}) => '确定要删除"${title}"吗?此操作无法撤销。'; - case 'collections.deleted': return '已删除合集'; - case 'collections.deleteFailed': return '删除合集失败'; - case 'collections.deleteFailedWithError': return ({required Object error}) => '删除合集失败:${error}'; - case 'collections.failedToLoadItems': return ({required Object error}) => '加载合集项目失败:${error}'; - case 'collections.addTo': return '添加到合集'; - case 'collections.selectCollection': return '选择合集'; - case 'collections.createNewCollection': return '创建新合集'; - case 'collections.collectionName': return '合集名称'; - case 'collections.enterCollectionName': return '输入合集名称'; - case 'collections.addedToCollection': return '已添加到合集'; - case 'collections.errorAddingToCollection': return '添加到合集失败'; - case 'collections.created': return '已创建合集'; - case 'collections.removeFromCollection': return '从合集移除'; - case 'collections.removeFromCollectionConfirm': return ({required Object title}) => '将“${title}”从此合集移除?'; - case 'collections.removedFromCollection': return '已从合集移除'; - case 'collections.removeFromCollectionFailed': return '从合集移除失败'; - case 'collections.removeFromCollectionError': return ({required Object error}) => '从合集移除时出错:${error}'; - default: return null; - } - } + dynamic _flatMapFunction(String path) { + switch (path) { + case 'app.title': + return 'Plezy'; + case 'app.loading': + return '加载中...'; + case 'auth.signInWithPlex': + return '使用 Plex 登录'; + case 'auth.showQRCode': + return '显示二维码'; + case 'auth.cancel': + return '取消'; + case 'auth.authenticate': + return '验证'; + case 'auth.retry': + return '重试'; + case 'auth.debugEnterToken': + return '调试:输入 Plex Token'; + case 'auth.plexTokenLabel': + return 'Plex 授权令牌 (Auth Token)'; + case 'auth.plexTokenHint': + return '输入你的 Plex.tv 令牌'; + case 'auth.authenticationTimeout': + return '验证超时。请重试。'; + case 'auth.scanQRCodeInstruction': + return '请使用已登录 Plex 的设备扫描此二维码进行验证。'; + case 'auth.waitingForAuth': + return '等待验证中...\n请在你的浏览器中完成登录。'; + case 'common.cancel': + return '取消'; + case 'common.save': + return '保存'; + case 'common.close': + return '关闭'; + case 'common.clear': + return '清除'; + case 'common.reset': + return '重置'; + case 'common.later': + return '稍后'; + case 'common.submit': + return '提交'; + case 'common.confirm': + return '确认'; + case 'common.retry': + return '重试'; + case 'common.playNow': + return '立即播放'; + case 'common.logout': + return '登出'; + case 'common.online': + return '在线'; + case 'common.offline': + return '离线'; + case 'common.owned': + return '拥有'; + case 'common.shared': + return '共享'; + case 'common.current': + return '当前'; + case 'common.unknown': + return '未知'; + case 'common.refresh': + return '刷新'; + case 'common.yes': + return '是'; + case 'common.no': + return '否'; + case 'common.server': + return '服务器'; + case 'common.delete': + return '删除'; + case 'common.shuffle': + return '随机播放'; + case 'common.addTo': + return '添加到...'; + case 'screens.licenses': + return '许可证'; + case 'screens.selectServer': + return '选择服务器'; + case 'screens.switchProfile': + return '切换配置文件'; + case 'screens.subtitleStyling': + return '字幕样式'; + case 'screens.search': + return '搜索'; + case 'screens.logs': + return '日志'; + case 'update.available': + return '有可用更新'; + case 'update.versionAvailable': + return ({required Object version}) => '版本 ${version} 已发布'; + case 'update.currentVersion': + return ({required Object version}) => '当前版本: ${version}'; + case 'update.skipVersion': + return '跳过此版本'; + case 'update.viewRelease': + return '查看发布详情'; + case 'update.latestVersion': + return '已安装的版本是可用的最新版本'; + case 'update.checkFailed': + return '无法检查更新'; + case 'settings.title': + return '设置'; + case 'settings.language': + return '语言'; + case 'settings.theme': + return '主题'; + case 'settings.appearance': + return '外观'; + case 'settings.videoPlayback': + return '视频播放'; + case 'settings.shufflePlay': + return '随机播放'; + case 'settings.advanced': + return '高级'; + case 'settings.useSeasonPostersDescription': + return '为剧集显示季海报而非剧集海报'; + case 'settings.showHeroSectionDescription': + return '在主屏幕上显示精选内容轮播区'; + case 'settings.secondsLabel': + return '秒'; + case 'settings.minutesLabel': + return '分钟'; + case 'settings.secondsShort': + return 's'; + case 'settings.minutesShort': + return 'm'; + case 'settings.durationHint': + return ({required Object min, required Object max}) => + '输入时长 (${min}-${max})'; + case 'settings.systemTheme': + return '系统'; + case 'settings.systemThemeDescription': + return '跟随系统设置'; + case 'settings.lightTheme': + return '浅色'; + case 'settings.darkTheme': + return '深色'; + case 'settings.libraryDensity': + return '媒体库密度'; + case 'settings.compact': + return '紧凑'; + case 'settings.compactDescription': + return '卡片更小,显示更多项目'; + case 'settings.normal': + return '标准'; + case 'settings.normalDescription': + return '默认尺寸'; + case 'settings.comfortable': + return '舒适'; + case 'settings.comfortableDescription': + return '卡片更大,显示更少项目'; + case 'settings.viewMode': + return '视图模式'; + case 'settings.gridView': + return '网格视图'; + case 'settings.gridViewDescription': + return '以网格布局显示项目'; + case 'settings.listView': + return '列表视图'; + case 'settings.listViewDescription': + return '以列表布局显示项目'; + case 'settings.useSeasonPosters': + return '使用季海报'; + case 'settings.showHeroSection': + return '显示主要精选区'; + case 'settings.hardwareDecoding': + return '硬件解码'; + case 'settings.hardwareDecodingDescription': + return '如果可用,使用硬件加速'; + case 'settings.bufferSize': + return '缓冲区大小'; + case 'settings.bufferSizeMB': + return ({required Object size}) => '${size}MB'; + case 'settings.subtitleStyling': + return '字幕样式'; + case 'settings.subtitleStylingDescription': + return '调整字幕外观'; + case 'settings.smallSkipDuration': + return '短跳过时长'; + case 'settings.largeSkipDuration': + return '长跳过时长'; + case 'settings.secondsUnit': + return ({required Object seconds}) => '${seconds} 秒'; + case 'settings.defaultSleepTimer': + return '默认睡眠定时器'; + case 'settings.minutesUnit': + return ({required Object minutes}) => '${minutes} 分钟'; + case 'settings.rememberTrackSelections': + return '记住每个剧集/电影的音轨选择'; + case 'settings.rememberTrackSelectionsDescription': + return '在播放过程中更改音轨时自动保存音频和字幕语言偏好'; + case 'settings.unwatchedOnly': + return '仅未观看'; + case 'settings.unwatchedOnlyDescription': + return '随机队列中仅包含未观看的剧集'; + case 'settings.shuffleOrderNavigation': + return '随机顺序导航'; + case 'settings.shuffleOrderNavigationDescription': + return '下一集/上一集按钮遵循随机播放顺序'; + case 'settings.loopShuffleQueue': + return '循环随机队列'; + case 'settings.loopShuffleQueueDescription': + return '在队列结束时重新开始'; + case 'settings.videoPlayerControls': + return '视频播放器控制'; + case 'settings.keyboardShortcuts': + return '键盘快捷键'; + case 'settings.keyboardShortcutsDescription': + return '自定义键盘快捷键'; + case 'settings.debugLogging': + return '调试日志'; + case 'settings.debugLoggingDescription': + return '启用详细日志记录以便故障排除'; + case 'settings.viewLogs': + return '查看日志'; + case 'settings.viewLogsDescription': + return '查看应用程序日志'; + case 'settings.clearCache': + return '清除缓存'; + case 'settings.clearCacheDescription': + return '这将清除所有缓存的图片和数据。清除缓存后,应用程序加载内容可能会变慢。'; + case 'settings.clearCacheSuccess': + return '缓存清除成功'; + case 'settings.resetSettings': + return '重置设置'; + case 'settings.resetSettingsDescription': + return '这会将所有设置重置为其默认值。此操作无法撤销。'; + case 'settings.resetSettingsSuccess': + return '设置重置成功'; + case 'settings.shortcutsReset': + return '快捷键已重置为默认值'; + case 'settings.about': + return '关于'; + case 'settings.aboutDescription': + return '应用程序信息和许可证'; + case 'settings.updates': + return '更新'; + case 'settings.updateAvailable': + return '有可用更新'; + case 'settings.checkForUpdates': + return '检查更新'; + case 'settings.validationErrorEnterNumber': + return '请输入一个有效的数字'; + case 'settings.validationErrorDuration': + return ({ + required Object min, + required Object max, + required Object unit, + }) => '时长必须介于 ${min} 和 ${max} ${unit} 之间'; + case 'settings.shortcutAlreadyAssigned': + return ({required Object action}) => '快捷键已被分配给 ${action}'; + case 'settings.shortcutUpdated': + return ({required Object action}) => '快捷键已为 ${action} 更新'; + case 'settings.autoSkip': + return '自动跳过'; + case 'settings.autoSkipIntro': + return '自动跳过片头'; + case 'settings.autoSkipIntroDescription': + return '几秒钟后自动跳过片头标记'; + case 'settings.autoSkipCredits': + return '自动跳过片尾'; + case 'settings.autoSkipCreditsDescription': + return '自动跳过片尾并播放下一集'; + case 'settings.autoSkipDelay': + return '自动跳过延迟'; + case 'settings.autoSkipDelayDescription': + return ({required Object seconds}) => '自动跳过前等待 ${seconds} 秒'; + case 'search.hint': + return '搜索电影、系列、音乐...'; + case 'search.tryDifferentTerm': + return '尝试不同的搜索词'; + case 'search.searchYourMedia': + return '搜索媒体'; + case 'search.enterTitleActorOrKeyword': + return '输入标题、演员或关键词'; + case 'hotkeys.setShortcutFor': + return ({required Object actionName}) => '为 ${actionName} 设置快捷键'; + case 'hotkeys.clearShortcut': + return '清除快捷键'; + case 'pinEntry.enterPin': + return '输入 PIN'; + case 'pinEntry.showPin': + return '显示 PIN'; + case 'pinEntry.hidePin': + return '隐藏 PIN'; + case 'fileInfo.title': + return '文件信息'; + case 'fileInfo.video': + return '视频'; + case 'fileInfo.audio': + return '音频'; + case 'fileInfo.file': + return '文件'; + case 'fileInfo.advanced': + return '高级'; + case 'fileInfo.codec': + return '编解码器'; + case 'fileInfo.resolution': + return '分辨率'; + case 'fileInfo.bitrate': + return '比特率'; + case 'fileInfo.frameRate': + return '帧率'; + case 'fileInfo.aspectRatio': + return '宽高比'; + case 'fileInfo.profile': + return '配置文件'; + case 'fileInfo.bitDepth': + return '位深度'; + case 'fileInfo.colorSpace': + return '色彩空间'; + case 'fileInfo.colorRange': + return '色彩范围'; + case 'fileInfo.colorPrimaries': + return '颜色原色'; + case 'fileInfo.chromaSubsampling': + return '色度子采样'; + case 'fileInfo.channels': + return '声道'; + case 'fileInfo.path': + return '路径'; + case 'fileInfo.size': + return '大小'; + case 'fileInfo.container': + return '容器'; + case 'fileInfo.duration': + return '时长'; + case 'fileInfo.optimizedForStreaming': + return '已优化用于流媒体'; + case 'fileInfo.has64bitOffsets': + return '64位偏移量'; + case 'mediaMenu.markAsWatched': + return '标记为已观看'; + case 'mediaMenu.markAsUnwatched': + return '标记为未观看'; + case 'mediaMenu.removeFromContinueWatching': + return '从继续观看中移除'; + case 'mediaMenu.goToSeries': + return '转到系列'; + case 'mediaMenu.goToSeason': + return '转到季'; + case 'mediaMenu.shufflePlay': + return '随机播放'; + case 'mediaMenu.fileInfo': + return '文件信息'; + case 'accessibility.mediaCardMovie': + return ({required Object title}) => '${title}, 电影'; + case 'accessibility.mediaCardShow': + return ({required Object title}) => '${title}, 电视剧'; + case 'accessibility.mediaCardEpisode': + return ({required Object title, required Object episodeInfo}) => + '${title}, ${episodeInfo}'; + case 'accessibility.mediaCardSeason': + return ({required Object title, required Object seasonInfo}) => + '${title}, ${seasonInfo}'; + case 'accessibility.mediaCardWatched': + return '已观看'; + case 'accessibility.mediaCardPartiallyWatched': + return ({required Object percent}) => '已观看 ${percent} 百分比'; + case 'accessibility.mediaCardUnwatched': + return '未观看'; + case 'accessibility.tapToPlay': + return '点击播放'; + case 'tooltips.shufflePlay': + return '随机播放'; + case 'tooltips.markAsWatched': + return '标记为已观看'; + case 'tooltips.markAsUnwatched': + return '标记为未观看'; + case 'videoControls.audioLabel': + return '音频'; + case 'videoControls.subtitlesLabel': + return '字幕'; + case 'videoControls.resetToZero': + return '重置为 0ms'; + case 'videoControls.addTime': + return ({required Object amount, required Object unit}) => + '+${amount}${unit}'; + case 'videoControls.minusTime': + return ({required Object amount, required Object unit}) => + '-${amount}${unit}'; + case 'videoControls.playsLater': + return ({required Object label}) => '${label} 播放较晚'; + case 'videoControls.playsEarlier': + return ({required Object label}) => '${label} 播放较早'; + case 'videoControls.noOffset': + return '无偏移'; + case 'videoControls.letterbox': + return '信箱模式(Letterbox)'; + case 'videoControls.fillScreen': + return '填充屏幕'; + case 'videoControls.stretch': + return '拉伸'; + case 'videoControls.lockRotation': + return '锁定旋转'; + case 'videoControls.unlockRotation': + return '解锁旋转'; + case 'videoControls.sleepTimer': + return '睡眠定时器'; + case 'videoControls.timerActive': + return '定时器已激活'; + case 'videoControls.playbackWillPauseIn': + return ({required Object duration}) => '播放将在 ${duration} 后暂停'; + case 'videoControls.sleepTimerCompleted': + return '睡眠定时器已完成 - 播放已暂停'; + case 'videoControls.playButton': + return '播放'; + case 'videoControls.pauseButton': + return '暂停'; + case 'videoControls.seekBackwardButton': + return ({required Object seconds}) => '后退 ${seconds} 秒'; + case 'videoControls.seekForwardButton': + return ({required Object seconds}) => '前进 ${seconds} 秒'; + case 'videoControls.previousButton': + return '上一集'; + case 'videoControls.nextButton': + return '下一集'; + case 'videoControls.previousChapterButton': + return '上一章节'; + case 'videoControls.nextChapterButton': + return '下一章节'; + case 'videoControls.volumeButton': + return '音量'; + case 'videoControls.muteButton': + return '静音'; + case 'videoControls.unmuteButton': + return '取消静音'; + case 'videoControls.settingsButton': + return '视频设置'; + case 'videoControls.audioTrackButton': + return '音轨'; + case 'videoControls.subtitlesButton': + return '字幕'; + case 'videoControls.chaptersButton': + return '章节'; + case 'videoControls.versionsButton': + return '视频版本'; + case 'videoControls.aspectRatioButton': + return '宽高比'; + case 'videoControls.fullscreenButton': + return '进入全屏'; + case 'videoControls.exitFullscreenButton': + return '退出全屏'; + case 'videoControls.rotationLockButton': + return '旋转锁定'; + case 'videoControls.timelineSlider': + return '视频时间轴'; + case 'videoControls.volumeSlider': + return '音量调节'; + case 'videoControls.backButton': + return '返回'; + case 'userStatus.admin': + return '管理员'; + case 'userStatus.restricted': + return '受限'; + case 'userStatus.protected': + return '受保护'; + case 'userStatus.current': + return '当前'; + case 'messages.markedAsWatched': + return '已标记为已观看'; + case 'messages.markedAsUnwatched': + return '已标记为未观看'; + case 'messages.removedFromContinueWatching': + return '已从继续观看中移除'; + case 'messages.errorLoading': + return ({required Object error}) => '错误: ${error}'; + case 'messages.fileInfoNotAvailable': + return '文件信息不可用'; + case 'messages.errorLoadingFileInfo': + return ({required Object error}) => '加载文件信息时出错: ${error}'; + case 'messages.errorLoadingSeries': + return '加载系列时出错'; + case 'messages.errorLoadingSeason': + return '加载季时出错'; + case 'messages.musicNotSupported': + return '尚不支持播放音乐'; + case 'messages.logsCleared': + return '日志已清除'; + case 'messages.logsCopied': + return '日志已复制到剪贴板'; + case 'messages.noLogsAvailable': + return '没有可用日志'; + case 'messages.libraryScanning': + return ({required Object title}) => '正在扫描 “${title}”...'; + case 'messages.libraryScanStarted': + return ({required Object title}) => '已开始扫描 “${title}” 媒体库'; + case 'messages.libraryScanFailed': + return ({required Object error}) => '无法扫描媒体库: ${error}'; + case 'messages.metadataRefreshing': + return ({required Object title}) => '正在刷新 “${title}” 的元数据...'; + case 'messages.metadataRefreshStarted': + return ({required Object title}) => '已开始刷新 “${title}” 的元数据'; + case 'messages.metadataRefreshFailed': + return ({required Object error}) => '无法刷新元数据: ${error}'; + case 'messages.noPlexToken': + return '未找到 Plex 令牌。请重新登录。'; + case 'messages.logoutConfirm': + return '你确定要登出吗?'; + case 'messages.noSeasonsFound': + return '未找到季'; + case 'messages.noEpisodesFound': + return '在第一季中未找到剧集'; + case 'messages.noEpisodesFoundGeneral': + return '未找到剧集'; + case 'messages.noResultsFound': + return '未找到结果'; + case 'messages.sleepTimerSet': + return ({required Object label}) => '睡眠定时器已设置为 ${label}'; + case 'messages.failedToSwitchProfile': + return ({required Object displayName}) => '无法切换到 ${displayName}'; + case 'messages.noItemsAvailable': + return '没有可用的项目'; + case 'messages.failedToCreatePlayQueue': + return '创建播放队列失败'; + case 'messages.failedToCreatePlayQueueNoItems': + return '创建播放队列失败 - 没有项目'; + case 'messages.failedPlayback': + return ({required Object action, required Object error}) => + '无法${action}: ${error}'; + case 'profile.noUsersAvailable': + return '没有可用用户'; + case 'subtitlingStyling.stylingOptions': + return '样式选项'; + case 'subtitlingStyling.fontSize': + return '字号'; + case 'subtitlingStyling.textColor': + return '文本颜色'; + case 'subtitlingStyling.borderSize': + return '边框大小'; + case 'subtitlingStyling.borderColor': + return '边框颜色'; + case 'subtitlingStyling.backgroundOpacity': + return '背景不透明度'; + case 'subtitlingStyling.backgroundColor': + return '背景颜色'; + case 'dialog.confirmAction': + return '确认操作'; + case 'dialog.areYouSure': + return '确定要执行此操作吗?'; + case 'dialog.cancel': + return '取消'; + case 'dialog.playNow': + return '立即播放'; + case 'discover.title': + return '发现'; + case 'discover.switchProfile': + return '切换配置文件'; + case 'discover.switchServer': + return '切换服务器'; + case 'discover.logout': + return '登出'; + case 'discover.noContentAvailable': + return '没有可用内容'; + case 'discover.addMediaToLibraries': + return '请向你的媒体库添加一些媒体'; + case 'discover.continueWatching': + return '继续观看'; + case 'discover.recentlyAdded': + return '最近添加'; + case 'discover.play': + return '播放'; + case 'discover.resume': + return '继续'; + case 'discover.playEpisode': + return ({required Object season, required Object episode}) => + '播放 S${season}, E${episode}'; + case 'discover.resumeEpisode': + return ({required Object season, required Object episode}) => + '继续 S${season}, E${episode}'; + case 'discover.pause': + return '暂停'; + case 'discover.overview': + return '概述'; + case 'discover.cast': + return '演员表'; + case 'discover.seasons': + return '季数'; + case 'discover.studio': + return '制作公司'; + case 'discover.rating': + return '年龄分级'; + case 'discover.watched': + return '已观看'; + case 'discover.episodeCount': + return ({required Object count}) => '${count} 集'; + case 'discover.watchedProgress': + return ({required Object watched, required Object total}) => + '已观看 ${watched}/${total} 集'; + case 'discover.movie': + return '电影'; + case 'discover.tvShow': + return '电视剧'; + case 'discover.minutesLeft': + return ({required Object minutes}) => '剩余 ${minutes} 分钟'; + case 'errors.searchFailed': + return ({required Object error}) => '搜索失败: ${error}'; + case 'errors.connectionTimeout': + return ({required Object context}) => '加载 ${context} 时连接超时'; + case 'errors.connectionFailed': + return '无法连接到 Plex 服务器'; + case 'errors.failedToLoad': + return ({required Object context, required Object error}) => + '无法加载 ${context}: ${error}'; + case 'errors.noClientAvailable': + return '没有可用客户端'; + case 'errors.authenticationFailed': + return ({required Object error}) => '验证失败: ${error}'; + case 'errors.couldNotLaunchUrl': + return '无法打开授权 URL'; + case 'errors.pleaseEnterToken': + return '请输入一个令牌'; + case 'errors.invalidToken': + return '令牌无效'; + case 'errors.failedToVerifyToken': + return ({required Object error}) => '无法验证令牌: ${error}'; + case 'errors.failedToSwitchProfile': + return ({required Object displayName}) => '无法切换到 ${displayName}'; + case 'errors.connectionFailedGeneric': + return '连接失败'; + case 'libraries.title': + return '媒体库'; + case 'libraries.scanLibraryFiles': + return '扫描媒体库文件'; + case 'libraries.scanLibrary': + return '扫描媒体库'; + case 'libraries.analyze': + return '分析'; + case 'libraries.analyzeLibrary': + return '分析媒体库'; + case 'libraries.refreshMetadata': + return '刷新元数据'; + case 'libraries.emptyTrash': + return '清空回收站'; + case 'libraries.emptyingTrash': + return ({required Object title}) => '正在清空 “${title}” 的回收站...'; + case 'libraries.trashEmptied': + return ({required Object title}) => '已清空 “${title}” 的回收站'; + case 'libraries.failedToEmptyTrash': + return ({required Object error}) => '无法清空回收站: ${error}'; + case 'libraries.analyzing': + return ({required Object title}) => '正在分析 “${title}”...'; + case 'libraries.analysisStarted': + return ({required Object title}) => '已开始分析 “${title}”'; + case 'libraries.failedToAnalyze': + return ({required Object error}) => '无法分析媒体库: ${error}'; + case 'libraries.noLibrariesFound': + return '未找到媒体库'; + case 'libraries.thisLibraryIsEmpty': + return '此媒体库为空'; + case 'libraries.all': + return '全部'; + case 'libraries.clearAll': + return '全部清除'; + case 'libraries.scanLibraryConfirm': + return ({required Object title}) => '确定要扫描 “${title}” 吗?'; + case 'libraries.analyzeLibraryConfirm': + return ({required Object title}) => '确定要分析 “${title}” 吗?'; + case 'libraries.refreshMetadataConfirm': + return ({required Object title}) => '确定要刷新 “${title}” 的元数据吗?'; + case 'libraries.emptyTrashConfirm': + return ({required Object title}) => '确定要清空 “${title}” 的回收站吗?'; + case 'libraries.manageLibraries': + return '管理媒体库'; + case 'libraries.sort': + return '排序'; + case 'libraries.sortBy': + return '排序依据'; + case 'libraries.filters': + return '筛选器'; + case 'libraries.loadingLibraryWithCount': + return ({required Object count}) => '正在加载媒体库... (已加载 ${count} 个项目)'; + case 'libraries.confirmActionMessage': + return '确定要执行此操作吗?'; + case 'libraries.showLibrary': + return '显示媒体库'; + case 'libraries.hideLibrary': + return '隐藏媒体库'; + case 'libraries.libraryOptions': + return '媒体库选项'; + case 'libraries.content': + return '媒体库内容'; + case 'libraries.selectLibrary': + return '选择媒体库'; + case 'libraries.filtersWithCount': + return ({required Object count}) => '筛选器(${count})'; + case 'libraries.noRecommendations': + return '暂无推荐'; + case 'libraries.noCollections': + return '此媒体库中没有合集'; + case 'libraries.noFoldersFound': + return '未找到文件夹'; + case 'libraries.folders': + return '文件夹'; + case 'libraries.tabs.recommended': + return '推荐'; + case 'libraries.tabs.browse': + return '浏览'; + case 'libraries.tabs.collections': + return '合集'; + case 'libraries.tabs.playlists': + return '播放列表'; + case 'libraries.groupings.all': + return '全部'; + case 'libraries.groupings.movies': + return '电影'; + case 'libraries.groupings.shows': + return '剧集'; + case 'libraries.groupings.seasons': + return '季'; + case 'libraries.groupings.episodes': + return '集'; + case 'libraries.groupings.folders': + return '文件夹'; + case 'about.title': + return '关于'; + case 'about.openSourceLicenses': + return '开源许可证'; + case 'about.versionLabel': + return ({required Object version}) => '版本 ${version}'; + case 'about.appDescription': + return '一款精美的 Flutter Plex 客户端'; + case 'about.viewLicensesDescription': + return '查看第三方库的许可证'; + case 'serverSelection.connectingToServer': + return '正在连接服务器...'; + case 'serverSelection.connectingToAllServers': + return '正在连接所有服务器...'; + case 'serverSelection.connectToAllServers': + return '连接所有服务器'; + case 'serverSelection.allServerConnectionsFailed': + return '无法连接到任何服务器。请检查你的网络并重试。'; + case 'serverSelection.foundServers': + return ({required Object count}) => '找到 ${count} 个服务器'; + case 'serverSelection.orSelectIndividually': + return '或单独选择一个服务器:'; + case 'serverSelection.serverDebugCopied': + return '服务器调试数据已复制到剪贴板'; + case 'serverSelection.copyDebugData': + return '复制调试数据'; + case 'serverSelection.noServersFound': + return '未找到服务器'; + case 'serverSelection.malformedServerData': + return ({required Object count}) => + '找到 ${count} 个数据格式错误的服务器。没有可用的有效服务器。'; + case 'serverSelection.incompleteServerInfo': + return '某些服务器信息不完整,已被跳过。请检查你的 Plex.tv 账户。'; + case 'serverSelection.incompleteConnectionInfo': + return '服务器连接信息不完整。请重试。'; + case 'serverSelection.malformedServerInfo': + return ({required Object message}) => '服务器信息格式错误: ${message}'; + case 'serverSelection.networkConnectionFailed': + return '网络连接失败。请检查你的网络连接并重试。'; + case 'serverSelection.authenticationFailed': + return '验证失败。请重新登录。'; + case 'serverSelection.plexServiceUnavailable': + return 'Plex 服务不可用。请稍后重试。'; + case 'serverSelection.failedToLoadServers': + return ({required Object error}) => '无法加载服务器: ${error}'; + case 'hubDetail.title': + return '标题'; + case 'hubDetail.releaseYear': + return '发行年份'; + case 'hubDetail.dateAdded': + return '添加日期'; + case 'hubDetail.rating': + return '评分'; + case 'hubDetail.noItemsFound': + return '未找到项目'; + case 'logs.title': + return '日志'; + case 'logs.clearLogs': + return '清除日志'; + case 'logs.copyLogs': + return '复制日志'; + case 'logs.exportLogs': + return '导出日志'; + case 'logs.noLogsToShow': + return '没有可显示的日志'; + case 'logs.error': + return '错误:'; + case 'logs.stackTrace': + return '堆栈跟踪 (Stack Trace):'; + case 'licenses.relatedPackages': + return '相关软件包'; + case 'licenses.license': + return '许可证'; + case 'licenses.licenseNumber': + return ({required Object number}) => '许可证 ${number}'; + case 'licenses.licensesCount': + return ({required Object count}) => '${count} 个许可证'; + case 'navigation.home': + return '主页'; + case 'navigation.search': + return '搜索'; + case 'navigation.libraries': + return '媒体库'; + case 'navigation.settings': + return '设置'; + case 'playlists.title': + return '播放列表'; + case 'playlists.noPlaylists': + return '未找到播放列表'; + case 'playlists.create': + return '创建播放列表'; + case 'playlists.newPlaylist': + return '新播放列表'; + case 'playlists.playlistName': + return '播放列表名称'; + case 'playlists.enterPlaylistName': + return '输入播放列表名称'; + case 'playlists.edit': + return '编辑播放列表'; + case 'playlists.delete': + return '删除播放列表'; + case 'playlists.addTo': + return '添加到播放列表'; + case 'playlists.addItems': + return '添加项目'; + case 'playlists.removeItem': + return '从播放列表中移除'; + case 'playlists.clearPlaylist': + return '清空播放列表'; + case 'playlists.playAll': + return '全部播放'; + case 'playlists.shuffle': + return '随机播放'; + case 'playlists.smartPlaylist': + return '智能播放列表'; + case 'playlists.regularPlaylist': + return '普通播放列表'; + case 'playlists.itemCount': + return ({required Object count}) => '${count} 个项目'; + case 'playlists.oneItem': + return '1 个项目'; + case 'playlists.emptyPlaylist': + return '此播放列表为空'; + case 'playlists.deleteConfirm': + return '删除播放列表?'; + case 'playlists.deleteMessage': + return ({required Object name}) => '确定要删除 "${name}" 吗?'; + case 'playlists.created': + return '播放列表已创建'; + case 'playlists.updated': + return '播放列表已更新'; + case 'playlists.deleted': + return '播放列表已删除'; + case 'playlists.itemAdded': + return '已添加到播放列表'; + case 'playlists.itemRemoved': + return '已从播放列表中移除'; + case 'playlists.selectPlaylist': + return '选择播放列表'; + case 'playlists.createNewPlaylist': + return '创建新播放列表'; + case 'playlists.errorCreating': + return '创建播放列表失败'; + case 'playlists.errorDeleting': + return '删除播放列表失败'; + case 'playlists.errorLoading': + return '加载播放列表失败'; + case 'playlists.errorAdding': + return '添加到播放列表失败'; + case 'playlists.errorReordering': + return '重新排序播放列表项目失败'; + case 'playlists.errorRemoving': + return '从播放列表中移除失败'; + case 'playlists.playlist': + return '播放列表'; + case 'collections.title': + return '合集'; + case 'collections.collection': + return '合集'; + case 'collections.empty': + return '合集为空'; + case 'collections.noItems': + return '此合集没有项目'; + case 'collections.unknownLibrarySection': + return '无法删除:未知的媒体库分区'; + case 'collections.deleteCollection': + return '删除合集'; + case 'collections.deleteConfirm': + return ({required Object title}) => '确定要删除"${title}"吗?此操作无法撤销。'; + case 'collections.deleted': + return '已删除合集'; + case 'collections.deleteFailed': + return '删除合集失败'; + case 'collections.deleteFailedWithError': + return ({required Object error}) => '删除合集失败:${error}'; + case 'collections.failedToLoadItems': + return ({required Object error}) => '加载合集项目失败:${error}'; + case 'collections.addTo': + return '添加到合集'; + case 'collections.selectCollection': + return '选择合集'; + case 'collections.createNewCollection': + return '创建新合集'; + case 'collections.collectionName': + return '合集名称'; + case 'collections.enterCollectionName': + return '输入合集名称'; + case 'collections.addedToCollection': + return '已添加到合集'; + case 'collections.errorAddingToCollection': + return '添加到合集失败'; + case 'collections.created': + return '已创建合集'; + case 'collections.removeFromCollection': + return '从合集移除'; + case 'collections.removeFromCollectionConfirm': + return ({required Object title}) => '将“${title}”从此合集移除?'; + case 'collections.removedFromCollection': + return '已从合集移除'; + case 'collections.removeFromCollectionFailed': + return '从合集移除失败'; + case 'collections.removeFromCollectionError': + return ({required Object error}) => '从合集移除时出错:${error}'; + default: + return null; + } + } } diff --git a/lib/screens/settings_screen.dart b/lib/screens/settings_screen.dart index 526b354c..e2f12b24 100644 --- a/lib/screens/settings_screen.dart +++ b/lib/screens/settings_screen.dart @@ -335,7 +335,11 @@ class _SettingsScreenState extends State { ListTile( leading: const Icon(Icons.timer), title: Text(t.settings.autoSkipDelay), - subtitle: Text(t.settings.autoSkipDelayDescription(seconds: _autoSkipDelay.toString())), + subtitle: Text( + t.settings.autoSkipDelayDescription( + seconds: _autoSkipDelay.toString(), + ), + ), trailing: const Icon(Icons.chevron_right), onTap: () => _showAutoSkipDelayDialog(), ), diff --git a/lib/widgets/video_controls/video_controls.dart b/lib/widgets/video_controls/video_controls.dart index 6b070bd3..532c1c54 100644 --- a/lib/widgets/video_controls/video_controls.dart +++ b/lib/widgets/video_controls/video_controls.dart @@ -202,8 +202,9 @@ class _PlexVideoControlsState extends State void _startAutoSkipTimer(PlexMarker marker) { _cancelAutoSkipTimer(); - final shouldAutoSkip = (marker.isCredits && _autoSkipCredits) || - (!marker.isCredits && _autoSkipIntro); + final shouldAutoSkip = + (marker.isCredits && _autoSkipCredits) || + (!marker.isCredits && _autoSkipIntro); if (!shouldAutoSkip || _autoSkipDelay <= 0) return; @@ -263,7 +264,7 @@ class _PlexVideoControlsState extends State bool _shouldShowAutoSkip() { if (_currentMarker == null) return false; return (_currentMarker!.isCredits && _autoSkipCredits) || - (!_currentMarker!.isCredits && _autoSkipIntro); + (!_currentMarker!.isCredits && _autoSkipIntro); } Future _loadSeekTimes() async { @@ -899,10 +900,14 @@ class _PlexVideoControlsState extends State final shouldShowAutoSkip = _shouldShowAutoSkip(); final int remainingSeconds = isAutoSkipActive && shouldShowAutoSkip - ? (_autoSkipDelay - (_autoSkipProgress * _autoSkipDelay)).ceil().clamp(0, _autoSkipDelay) + ? (_autoSkipDelay - (_autoSkipProgress * _autoSkipDelay)).ceil().clamp( + 0, + _autoSkipDelay, + ) : 0; - final String buttonText = isAutoSkipActive && shouldShowAutoSkip && remainingSeconds > 0 + final String buttonText = + isAutoSkipActive && shouldShowAutoSkip && remainingSeconds > 0 ? '$baseButtonText ($remainingSeconds)' : baseButtonText; final IconData buttonIcon = showNextEpisode